milkio 1.0.0-beta.161 → 1.0.0-beta.162
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +27 -3
- package/package.json +1 -1
- package/utils/revive-json-parse.d.ts +1 -0
package/index.js
CHANGED
|
@@ -64,6 +64,30 @@ function mergeDeep(target, source) {
|
|
|
64
64
|
return merged;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
// packages/milkio/utils/revive-json-parse.ts
|
|
68
|
+
function reviveJSONParse(json) {
|
|
69
|
+
const isoDatePattern = /^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?)(Z|[+-]\d{2}:?\d{2})?$/;
|
|
70
|
+
if (json instanceof Date)
|
|
71
|
+
return json;
|
|
72
|
+
if (Array.isArray(json)) {
|
|
73
|
+
return json.map((item) => reviveJSONParse(item));
|
|
74
|
+
}
|
|
75
|
+
if (typeof json === "object" && json !== null) {
|
|
76
|
+
return Object.entries(json).reduce((acc, [key, value]) => {
|
|
77
|
+
acc[key] = reviveJSONParse(value);
|
|
78
|
+
return acc;
|
|
79
|
+
}, {});
|
|
80
|
+
}
|
|
81
|
+
if (typeof json === "string") {
|
|
82
|
+
const match = json.match(isoDatePattern);
|
|
83
|
+
if (match) {
|
|
84
|
+
const normalizedDateString = match[2] ? `${match[1]}${match[2].replace(":", "")}` : `${match[1]}Z`;
|
|
85
|
+
return new Date(normalizedDateString);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return json;
|
|
89
|
+
}
|
|
90
|
+
|
|
67
91
|
// packages/milkio/execute/index.ts
|
|
68
92
|
function __initExecuter(generated, runtime) {
|
|
69
93
|
const __execute = async (routeSchema, options) => {
|
|
@@ -91,7 +115,7 @@ function __initExecuter(generated, runtime) {
|
|
|
91
115
|
params = {};
|
|
92
116
|
} else {
|
|
93
117
|
try {
|
|
94
|
-
params = JSON.parse(options.params);
|
|
118
|
+
params = reviveJSONParse(JSON.parse(options.params));
|
|
95
119
|
} catch (error) {
|
|
96
120
|
throw reject("PARAMS_TYPE_NOT_SUPPORTED", { expected: "json" });
|
|
97
121
|
}
|
|
@@ -2436,5 +2460,5 @@ export {
|
|
|
2436
2460
|
__initEventManager
|
|
2437
2461
|
};
|
|
2438
2462
|
|
|
2439
|
-
//# debugId=
|
|
2440
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXHV0aWxzXFxwYXJ0LnRzIiwgIi4uXFx0eXBlLXNhZmV0eVxcaW5kZXgudHMiLCAiLi5cXGNvbmZpZ1xcaW5kZXgudHMiLCAiLi5cXHV0aWxzXFxoZWFkZXJzLXRvLWpzb24udHMiLCAiLi5cXHV0aWxzXFxtZXJnZS1kZWVwLnRzIiwgIi4uXFxleGVjdXRlXFxpbmRleC50cyIsICIuLlxcZXZlbnRcXGluZGV4LnRzIiwgIi4uXFxmbG93XFxpbmRleC50cyIsICIuLlxcdXRpbHNcXGNyZWF0ZS1pZC50cyIsICIuLlxcZXhlY3V0ZVxcZXhlY3V0ZS1pZC1nZW5lcmF0b3IudHMiLCAiLi5cXHdvcmxkXFxpbmRleC50cyIsICIuLlxcdHlwaWFcXGluZGV4LnRzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGNvbnN0YW50cy5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxjb25zdHJ1Y3RGcm9tLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXHRvRGF0ZS5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxfbGliXFxkZWZhdWx0T3B0aW9ucy5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxzdGFydE9mV2Vlay5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxzdGFydE9mSVNPV2Vlay5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxnZXRJU09XZWVrWWVhci5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxfbGliXFxnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXF9saWJcXG5vcm1hbGl6ZURhdGVzLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXHN0YXJ0T2ZEYXkuanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXHN0YXJ0T2ZJU09XZWVrWWVhci5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxpc0RhdGUuanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcaXNWYWxpZC5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxzdGFydE9mWWVhci5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxsb2NhbGVcXGVuLVVTXFxfbGliXFxmb3JtYXREaXN0YW5jZS5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxsb2NhbGVcXF9saWJcXGJ1aWxkRm9ybWF0TG9uZ0ZuLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGxvY2FsZVxcZW4tVVNcXF9saWJcXGZvcm1hdExvbmcuanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxlbi1VU1xcX2xpYlxcZm9ybWF0UmVsYXRpdmUuanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxfbGliXFxidWlsZExvY2FsaXplRm4uanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxlbi1VU1xcX2xpYlxcbG9jYWxpemUuanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxfbGliXFxidWlsZE1hdGNoRm4uanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxfbGliXFxidWlsZE1hdGNoUGF0dGVybkZuLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGxvY2FsZVxcZW4tVVNcXF9saWJcXG1hdGNoLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGxvY2FsZVxcZW4tVVMuanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcZ2V0RGF5T2ZZZWFyLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGdldElTT1dlZWsuanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcZ2V0V2Vla1llYXIuanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcc3RhcnRPZldlZWtZZWFyLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGdldFdlZWsuanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcX2xpYlxcYWRkTGVhZGluZ1plcm9zLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXF9saWJcXGZvcm1hdFxcbGlnaHRGb3JtYXR0ZXJzLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXF9saWJcXGZvcm1hdFxcZm9ybWF0dGVycy5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxfbGliXFxmb3JtYXRcXGxvbmdGb3JtYXR0ZXJzLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXF9saWJcXHByb3RlY3RlZFRva2Vucy5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxmb3JtYXQuanMiLCAiLi5cXHV0aWxzXFxzZW5kLWNvb2tib29rLWV2ZW50LnRzIiwgIi4uXFxsb2dnZXJcXGluZGV4LnRzIiwgIi4uXFxzdGVwXFxpbmRleC50cyIsICIuLlxcdXRpbHNcXHRyaWUudHMiLCAiLi5cXGxpc3RlbmVyXFxpbmRleC50cyIsICIuLlxcZXhjZXB0aW9uXFxpbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJleHBvcnQgZnVuY3Rpb24gcGFydDxUIGV4dGVuZHMgKCkgPT4gdW5rbm93bj4oaGFuZGxlcjogVCk6IFJldHVyblR5cGU8VD4ge1xyXG4gIHJldHVybiBoYW5kbGVyKCkgYXMgdW5rbm93biBhcyBSZXR1cm5UeXBlPFQ+O1xyXG59XHJcbiIsCiAgICAiZXhwb3J0IHR5cGUgVHlwZVNhZmV0eTxWYWx1ZSBleHRlbmRzIFJlY29yZDxhbnksIGFueT4+ID0gKHZhbHVlOiBWYWx1ZSkgPT4gVHlwZVNhZmV0eVZhbHVlO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUeXBlU2FmZXR5VmFsdWUge1xyXG4gIHR5cGU6IDxUeXBlIGV4dGVuZHMgUmVjb3JkPGFueSwgYW55Pj4oKSA9PiBUeXBlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVTYWZldHlUeXBlPFR5cGUgZXh0ZW5kcyBSZWNvcmQ8YW55LCBhbnk+PiB7XHJcbiAgJG1pbGtpb1R5cGU6IFwidHlwZS1zYWZldHlcIjtcclxuICB2YWx1ZTogVHlwZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVTYWZldHk8VmFsdWUgZXh0ZW5kcyBSZWNvcmQ8YW55LCBhbnk+Pih2YWx1ZTogVmFsdWUpOiBUeXBlU2FmZXR5VmFsdWUge1xyXG4gIHJldHVybiB7XHJcbiAgICB0eXBlOiAoKSA9PiAoeyAkbWlsa2lvVHlwZTogXCJ0eXBlLXNhZmV0eVwiLCB2YWx1ZSB9KSxcclxuICB9IGFzIGFueTtcclxufVxyXG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBjb25maWc8Q29uZmlnVCBleHRlbmRzIENvbmZpZz4oY29uZmlnOiBDb25maWdUKTogQ29uZmlnVCB7XHJcbiAgcmV0dXJuIGNvbmZpZztcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQ29uZmlnID0gKG1vZGU6IHN0cmluZykgPT4gUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnRW52aXJvbm1lbnRzPFQgZXh0ZW5kcyBDb25maWc+IHtcclxuICBba2V5OiBzdHJpbmddOiAoZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBQYXJ0aWFsPEF3YWl0ZWQ8UmV0dXJuVHlwZTxUPj4+IHwgUHJvbWlzZTxQYXJ0aWFsPEF3YWl0ZWQ8UmV0dXJuVHlwZTxUPj4+PjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVudlRvU3RyaW5nKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKSB7XHJcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWU7XHJcblxyXG4gIHJldHVybiBgJHt2YWx1ZX1gO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW52VG9OdW1iZXIodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlOiBudW1iZXIpIHtcclxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuXHJcbiAgcmV0dXJuIE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW52VG9Cb29sZWFuKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZTogYm9vbGVhbikge1xyXG4gIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHJldHVybiB0cnVlO1xyXG5cclxuICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikgcmV0dXJuIGZhbHNlO1xyXG5cclxuICBpZiAodmFsdWUgPT09IFwiXCIpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgaWYgKHVuZGVmaW5lZCA9PT0gdmFsdWUpIHJldHVybiBkZWZhdWx0VmFsdWU7XHJcblxyXG4gIHJldHVybiBCb29sZWFuKHZhbHVlKTtcclxufVxyXG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBoZWFkZXJzVG9KU09OKGhlYWRlcnM6IEhlYWRlcnMpIHtcclxuICBjb25zdCBqc29uOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgKGhlYWRlcnMgYXMgYW55KS5lbnRyaWVzKCkpIHtcclxuICAgIGpzb25ba2V5XSA9IHZhbHVlO1xyXG4gIH1cclxuICByZXR1cm4ganNvbjtcclxufVxyXG4iLAogICAgImZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IGFueSk6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEZWVwPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBVIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4odGFyZ2V0OiBULCBzb3VyY2U6IFUpOiBUIHtcclxuICBjb25zdCBtZXJnZWQgPSB7IC4uLnRhcmdldCB9O1xyXG5cclxuICBmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcclxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XHJcblxyXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBzb3VyY2Vba2V5XTtcclxuICAgIGNvbnN0IHRhcmdldFZhbHVlID0gdGFyZ2V0W2tleSBhcyBrZXlvZiBUXTtcclxuXHJcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwga2V5KSkge1xyXG4gICAgICBpZiAoaXNQbGFpbk9iamVjdCh0YXJnZXRWYWx1ZSkgJiYgaXNQbGFpbk9iamVjdChzb3VyY2VWYWx1ZSkpIHtcclxuICAgICAgICBtZXJnZWRba2V5IGFzIGtleW9mIFQgJiBrZXlvZiBVXSA9IG1lcmdlRGVlcCh0YXJnZXRWYWx1ZSwgc291cmNlVmFsdWUpIGFzIGFueTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgKG1lcmdlZCBhcyBhbnkpW2tleV0gPSBzb3VyY2VWYWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBtZXJnZWQgYXMgVCAmIFU7XHJcbn1cclxuIiwKICAgICJpbXBvcnQgdHlwZSB7IElWYWxpZGF0aW9uIH0gZnJvbSBcInR5cGlhXCI7XHJcbmltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xyXG5pbXBvcnQgdHlwZSB7ICRjb250ZXh0LCAkbWV0YSwgTG9nZ2VyLCBSZXN1bHRzLCBHZW5lcmF0ZWRJbml0IH0gZnJvbSBcIi4uL2luZGV4LnRzXCI7XHJcbmltcG9ydCB7IGhlYWRlcnNUb0pTT04gfSBmcm9tIFwiLi4vdXRpbHMvaGVhZGVycy10by1qc29uLnRzXCI7XHJcbmltcG9ydCB7IG1lcmdlRGVlcCB9IGZyb20gXCIuLi91dGlscy9tZXJnZS1kZWVwLnRzXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbml0RXhlY3V0ZXIoZ2VuZXJhdGVkOiBHZW5lcmF0ZWRJbml0LCBydW50aW1lOiBhbnkpIHtcclxuICAgIGNvbnN0IF9fZXhlY3V0ZSA9IGFzeW5jIChcclxuICAgICAgICByb3V0ZVNjaGVtYTogYW55LFxyXG4gICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgY3JlYXRlZEV4ZWN1dGVJZDogc3RyaW5nO1xyXG4gICAgICAgICAgICBjcmVhdGVkTG9nZ2VyOiBMb2dnZXI7XHJcbiAgICAgICAgICAgIHBhdGg6IHN0cmluZztcclxuICAgICAgICAgICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IEhlYWRlcnM7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IGFueSB8IHVuZGVmaW5lZDtcclxuICAgICAgICB9ICYgKFxyXG4gICAgICAgICAgICAgICAgfCB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBSZWNvcmQ8YW55LCBhbnk+O1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtc1R5cGU6IFwicmF3XCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB8IHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXNUeXBlOiBcInN0cmluZ1wiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApLFxyXG4gICAgKTogUHJvbWlzZTx7IGV4ZWN1dGVJZDogc3RyaW5nOyBoZWFkZXJzOiBIZWFkZXJzOyBwYXJhbXM6IFJlY29yZDxhbnksIHVua25vd24+OyByZXN1bHRzOiBSZXN1bHRzPGFueT47IGNvbnRleHQ6ICRjb250ZXh0OyBtZXRhOiBSZWFkb25seTwkbWV0YT47IHR5cGU6IFwiYWN0aW9uXCIgfCBcInN0cmVhbVwiOyBlbXB0eVJlc3VsdDogYm9vbGVhbjsgcmVzdWx0c1R5cGVTYWZldHk6IGJvb2xlYW47IGZpbmFsZXM6IEFycmF5PCgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+PiB9PiA9PiB7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IG9wdGlvbnMucGF0aC5lbmRzV2l0aChcIn5cIikgPyBcInN0cmVhbVwiIDogXCJhY3Rpb25cIjtcclxuICAgICAgICBjb25zdCBleGVjdXRlSWQ6IHN0cmluZyA9IG9wdGlvbnMuY3JlYXRlZEV4ZWN1dGVJZDtcclxuICAgICAgICBsZXQgaGVhZGVyczogSGVhZGVycztcclxuICAgICAgICBpZiAoIShvcHRpb25zLmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSkge1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBuZXcgSGVhZGVycyh7XHJcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLmhlYWRlcnMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghKFwidG9KU09OXCIgaW4gaGVhZGVycykpIChoZWFkZXJzIGFzIGFueSkudG9KU09OID0gKCkgPT4gaGVhZGVyc1RvSlNPTihoZWFkZXJzKTtcclxuXHJcbiAgICAgICAgY29uc3QgZmluYWxlczogQXJyYXk8YW55PiA9IFtdO1xyXG4gICAgICAgIGNvbnN0IG9uRmluYWxseSA9IChoYW5kbGVyOiBhbnkpID0+IGZpbmFsZXMudW5zaGlmdChoYW5kbGVyKTtcclxuXHJcbiAgICAgICAgbGV0IHBhcmFtczogUmVjb3JkPGFueSwgdW5rbm93bj47XHJcbiAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1zVHlwZSA9PT0gXCJyYXdcIikge1xyXG4gICAgICAgICAgICBwYXJhbXMgPSBvcHRpb25zLnBhcmFtcztcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMgPT09IFwidW5kZWZpbmVkXCIpIHBhcmFtcyA9IHt9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnBhcmFtcyA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zID0ge307XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IEpTT04ucGFyc2Uob3B0aW9ucy5wYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyByZWplY3QoXCJQQVJBTVNfVFlQRV9OT1RfU1VQUE9SVEVEXCIsIHsgZXhwZWN0ZWQ6IFwianNvblwiIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMgPT09IFwidW5kZWZpbmVkXCIpIHBhcmFtcyA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1zICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocGFyYW1zKSkgdGhyb3cgcmVqZWN0KFwiUEFSQU1TX1RZUEVfTk9UX1NVUFBPUlRFRFwiLCB7IGV4cGVjdGVkOiBcImpzb25cIiB9KTtcclxuICAgICAgICBpZiAoXCIkbWlsa2lvR2VuZXJhdGVQYXJhbXNcIiBpbiBwYXJhbXMgJiYgcGFyYW1zLiRtaWxraW9HZW5lcmF0ZVBhcmFtcyA9PT0gXCJlbmFibGVcIikge1xyXG4gICAgICAgICAgICBpZiAoIXJ1bnRpbWUuZGV2ZWxvcCkgdGhyb3cgcmVqZWN0KFwiTk9UX0RFVkVMT1BfTU9ERVwiLCBcIlRoaXMgZmVhdHVyZSBtdXN0IGJlIGluIGNvb2tib29rIHRvIHVzZS5cIik7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBwYXJhbXMuJG1pbGtpb0dlbmVyYXRlUGFyYW1zO1xyXG4gICAgICAgICAgICBsZXQgcGFyYW1zUmFuZCA9IHJvdXRlU2NoZW1hLnJhbmRvbVBhcmFtcygpO1xyXG4gICAgICAgICAgICBpZiAocGFyYW1zUmFuZCA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtc1JhbmQgPT09IG51bGwpIHBhcmFtc1JhbmQgPSB7fTtcclxuICAgICAgICAgICAgcGFyYW1zID0gbWVyZ2VEZWVwKHBhcmFtcywgcGFyYW1zUmFuZCk7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuY3JlYXRlZExvZ2dlci5kZWJ1ZyhcIuKcqCB0aGUgZ2VuZXJhdGVkIHBhcmFtczpcIiwgSlNPTi5zdHJpbmdpZnkocGFyYW1zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghb3B0aW9ucy5jb250ZXh0Py5odHRwPy5ub3RGb3VuZCAmJiBvcHRpb25zLmNvbnRleHQ/Lmh0dHA/LnBhcmFtcz8uc3RyaW5nKSBvcHRpb25zLmNvbnRleHQuaHR0cC5wYXJhbXMucGFyc2VkID0gcGFyYW1zO1xyXG5cclxuICAgICAgICBpZiAoIW9wdGlvbnMuY29udGV4dCkgb3B0aW9ucy5jb250ZXh0ID0ge307XHJcbiAgICAgICAgb3B0aW9ucy5jb250ZXh0LmRldmVsb3AgPSBydW50aW1lLmRldmVsb3A7XHJcbiAgICAgICAgb3B0aW9ucy5jb250ZXh0LnBhdGggPSBvcHRpb25zLnBhdGg7XHJcbiAgICAgICAgb3B0aW9ucy5jb250ZXh0LmxvZ2dlciA9IG9wdGlvbnMuY3JlYXRlZExvZ2dlcjtcclxuICAgICAgICBvcHRpb25zLmNvbnRleHQuZW1pdCA9IHJ1bnRpbWUuZW1pdDtcclxuICAgICAgICBvcHRpb25zLmNvbnRleHQuZXhlY3V0ZUlkID0gb3B0aW9ucy5jcmVhdGVkRXhlY3V0ZUlkO1xyXG4gICAgICAgIG9wdGlvbnMuY29udGV4dC5jb25maWcgPSBydW50aW1lLnJ1bnRpbWUuY29uZmlnO1xyXG4gICAgICAgIG9wdGlvbnMuY29udGV4dC50eXBpYSA9IGdlbmVyYXRlZC50eXBpYVNjaGVtYTtcclxuICAgICAgICBvcHRpb25zLmNvbnRleHQuY2FsbCA9IChtb2R1bGU6IGFueSwgcGFyYW1zOiBhbnkpID0+IF9fY2FsbChvcHRpb25zLmNvbnRleHQsIG1vZHVsZSwgcGFyYW1zKTtcclxuICAgICAgICBvcHRpb25zLmNvbnRleHQub25GaW5hbGx5ID0gb25GaW5hbGx5O1xyXG4gICAgICAgIG9wdGlvbnMuY29udGV4dC5fID0gcnVudGltZTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzdWx0czogUmVzdWx0czxhbnk+ID0geyB2YWx1ZTogdW5kZWZpbmVkIH07XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IHJvdXRlU2NoZW1hLm1vZHVsZTtcclxuICAgICAgICBjb25zdCBtZXRhID0gKG1vZHVsZT8ubWV0YSA/IG1vZHVsZT8ubWV0YSA6IHt9KSBhcyB1bmtub3duIGFzIFJlYWRvbmx5PCRtZXRhPjtcclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGV4dC5odHRwPy5yZXF1ZXN0Py5tZXRob2QgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjb25zdCBhbGxvd01ldGhvZHMgPSBtZXRhPy5tZXRob2RzID8/IFtcIlBPU1RcIl07XHJcbiAgICAgICAgICAgIGlmICghYWxsb3dNZXRob2RzLmluY2x1ZGVzKG9wdGlvbnMuY29udGV4dC5odHRwLnJlcXVlc3QubWV0aG9kKSkgdGhyb3cgcmVqZWN0KFwiTUVUSE9EX05PVF9BTExPV0VEXCIsIHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWV0YT8udHlwZVNhZmV0eSA9PT0gdW5kZWZpbmVkIHx8IG1ldGEudHlwZVNhZmV0eSA9PT0gdHJ1ZSB8fCAoQXJyYXkuaXNBcnJheShtZXRhLnR5cGVTYWZldHkpICYmIG1ldGEudHlwZVNhZmV0eS5pbmNsdWRlcyhcInBhcmFtc1wiKSkpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHJvdXRlU2NoZW1hLnZhbGlkYXRlUGFyYW1zKHBhcmFtcykgYXMgSVZhbGlkYXRpb248YW55PjtcclxuICAgICAgICAgICAgaWYgKCF2YWxpZGF0aW9uLnN1Y2Nlc3MpIHRocm93IHJlamVjdChcIlBBUkFNU19UWVBFX0lOQ09SUkVDVFwiLCB7IC4uLnZhbGlkYXRpb24uZXJyb3JzWzBdLCBtZXNzYWdlOiBgVGhlIHZhbHVlICcke3ZhbGlkYXRpb24uZXJyb3JzWzBdLnBhdGh9JyBpcyAnJHt2YWxpZGF0aW9uLmVycm9yc1swXS52YWx1ZX0nLCB3aGljaCBkb2VzIG5vdCBtZWV0ICcke3ZhbGlkYXRpb24uZXJyb3JzWzBdLmV4cGVjdGVkfScgcmVxdWlyZW1lbnRzLmAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBydW50aW1lLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUJlZm9yZVwiLCB7IGV4ZWN1dGVJZDogb3B0aW9ucy5jcmVhdGVkRXhlY3V0ZUlkLCBsb2dnZXI6IG9wdGlvbnMuY3JlYXRlZExvZ2dlciwgcGF0aDogb3B0aW9ucy5wYXRoLCBtZXRhLCBjb250ZXh0OiBvcHRpb25zLmNvbnRleHQsIHJlamVjdCB9KTtcclxuXHJcbiAgICAgICAgcmVzdWx0cy52YWx1ZSA9IGF3YWl0IG1vZHVsZS5oYW5kbGVyKG9wdGlvbnMuY29udGV4dCwgcGFyYW1zKTtcclxuXHJcbiAgICAgICAgbGV0IGVtcHR5UmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHJlc3VsdHMudmFsdWUgPT09IHVuZGVmaW5lZCB8fCByZXN1bHRzLnZhbHVlID09PSBudWxsIHx8IHJlc3VsdHMudmFsdWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgZW1wdHlSZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHRzLnZhbHVlID0ge307XHJcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdHMudmFsdWUpIHx8IHR5cGVvZiByZXN1bHRzLnZhbHVlICE9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIHRocm93IHJlamVjdChcIlJFUVVFU1RfRkFJTFwiLCBcIlRoZSByZXR1cm4gdHlwZSBvZiB0aGUgaGFuZGxlciBtdXN0IGJlIGFuICdvYmplY3QnLCB3aGljaCBpcyBjdXJyZW50bHkgYW4gJyR7dHlwZW9mIHR5cGVvZiByZXN1bHRzLnZhbHVlfScuXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJlc3VsdHNUeXBlU2FmZXR5ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFlbXB0eVJlc3VsdCAmJiB0eXBlID09PSBcImFjdGlvblwiICYmIChcclxuICAgICAgICAgICAgLy8gVGVtcG9yYXJ5OiB0eXBlLXNhZmUgZGVmYXVsdCBpcyBmYWxzZSBhbmQgdGhpcyBzZXR0aW5nIHNob3VsZCBub3QgYmUgZXhwb3NlZCB0byB1c2Vyc1xyXG4gICAgICAgICAgICAvLyBEdWUgdG8gY3VycmVudCBpc3N1ZXMgd2l0aCB0eXBpYSwgdHlwZSBzYWZldHkgY2Fubm90IGJlIGFjaGlldmVkIGF0IHRoZSBtb21lbnRcclxuICAgICAgICAgICAgLy8gVGhlcmVmb3JlLCB0aGUgbmV4dCBsaW5lIG9mIGNvZGUgaXMgY3VycmVudGx5IGNvbW1lbnRlZCBvdXRcclxuICAgICAgICAgICAgLy8gVGhpcyBtZWFucyBNaWxraW8gaXMgdXNpbmcgdHJhZGl0aW9uYWwgSlNPTi5zdHJpbmdpZnkgZm9yIHJlc3VsdCBzZXJpYWxpemF0aW9uXHJcbiAgICAgICAgICAgIC8vIG1ldGE/LnR5cGVTYWZldHkgPT09IHVuZGVmaW5lZCB8fCBcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBtZXRhLnR5cGVTYWZldHkgPT09IHRydWUgfHwgKEFycmF5LmlzQXJyYXkobWV0YS50eXBlU2FmZXR5KSAmJiBtZXRhLnR5cGVTYWZldHkuaW5jbHVkZXMoXCJyZXN1bHRzXCIpKSkpIHtcclxuICAgICAgICAgICAgcmVzdWx0c1R5cGVTYWZldHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gcm91dGVTY2hlbWEudmFsaWRhdGVSZXN1bHRzKHJlc3VsdHMudmFsdWUpIGFzIElWYWxpZGF0aW9uPGFueT47XHJcbiAgICAgICAgICAgIGlmICghdmFsaWRhdGlvbi5zdWNjZXNzKSB0aHJvdyByZWplY3QoXCJSRVNVTFRTX1RZUEVfSU5DT1JSRUNUXCIsIHsgLi4udmFsaWRhdGlvbi5lcnJvcnNbMF0sIG1lc3NhZ2U6IGBUaGUgdmFsdWUgJyR7dmFsaWRhdGlvbi5lcnJvcnNbMF0ucGF0aH0nIGlzICcke3ZhbGlkYXRpb24uZXJyb3JzWzBdLnZhbHVlfScsIHdoaWNoIGRvZXMgbm90IG1lZXQgJyR7dmFsaWRhdGlvbi5lcnJvcnNbMF0uZXhwZWN0ZWR9JyByZXF1aXJlbWVudHMuYCB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHJ1bnRpbWUuZW1pdChcIm1pbGtpbzpleGVjdXRlQWZ0ZXJcIiwgeyBleGVjdXRlSWQ6IG9wdGlvbnMuY3JlYXRlZEV4ZWN1dGVJZCwgbG9nZ2VyOiBvcHRpb25zLmNyZWF0ZWRMb2dnZXIsIHBhdGg6IG9wdGlvbnMucGF0aCwgbWV0YSwgY29udGV4dDogb3B0aW9ucy5jb250ZXh0LCByZXN1bHRzLCByZWplY3QgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IGV4ZWN1dGVJZCwgaGVhZGVycywgcGFyYW1zLCByZXN1bHRzLCBjb250ZXh0OiBvcHRpb25zLmNvbnRleHQsIG1ldGEsIHR5cGUsIGVtcHR5UmVzdWx0LCByZXN1bHRzVHlwZVNhZmV0eSwgZmluYWxlcyB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBfX2NhbGwgPSBhc3luYyAoY29udGV4dDogJGNvbnRleHQsIG1vZHVsZTogeyBtZXRhOiBhbnksIGhhbmRsZXI6IGFueSB9LCBwYXJhbXM/OiBhbnkpOiBQcm9taXNlPGFueT4gPT4ge1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZUF3YWl0ZWQgPSBhd2FpdCBtb2R1bGU7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IG1vZHVsZUF3YWl0ZWQuaGFuZGxlcihjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIF9fY2FsbCxcclxuICAgICAgICBfX2V4ZWN1dGUsXHJcbiAgICB9O1xyXG59XHJcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyAkY29udGV4dCwgQ29udGV4dEh0dHAsIFJlc3VsdHMsIExvZ2dlciwgJG1ldGEgfSBmcm9tIFwiLi4vaW5kZXgudHNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgJGV2ZW50cyB7XHJcbiAgICBcIipcIjogeyBrZXk6IGtleW9mICRldmVudHMsIHZhbHVlOiBhbnkgfTtcclxuICAgIFwibWlsa2lvOmh0dHBSZXF1ZXN0XCI6IHsgZXhlY3V0ZUlkOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgbG9nZ2VyOiBMb2dnZXI7IGh0dHA6IENvbnRleHRIdHRwPFJlY29yZDxzdHJpbmcsIGFueT4+IH07XHJcbiAgICBcIm1pbGtpbzpodHRwUmVzcG9uc2VcIjogeyBleGVjdXRlSWQ6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBsb2dnZXI6IExvZ2dlcjsgaHR0cDogQ29udGV4dEh0dHA8UmVjb3JkPHN0cmluZywgYW55Pj47IGNvbnRleHQ6ICRjb250ZXh0OyBzdWNjZXNzOiBib29sZWFuIH07XHJcbiAgICBcIm1pbGtpbzpodHRwTm90Rm91bmRcIjogeyBleGVjdXRlSWQ6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBsb2dnZXI6IExvZ2dlcjsgaHR0cDogQ29udGV4dEh0dHA8UmVjb3JkPHN0cmluZywgYW55Pj4gfTtcclxuICAgIFwibWlsa2lvOmV4ZWN1dGVCZWZvcmVcIjogeyBleGVjdXRlSWQ6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBsb2dnZXI6IExvZ2dlcjsgbWV0YTogJG1ldGE7IGNvbnRleHQ6ICRjb250ZXh0IH07XHJcbiAgICBcIm1pbGtpbzpleGVjdXRlQWZ0ZXJcIjogeyBleGVjdXRlSWQ6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBsb2dnZXI6IExvZ2dlcjsgbWV0YTogJG1ldGE7IGNvbnRleHQ6ICRjb250ZXh0OyByZXN1bHRzOiBSZXN1bHRzPGFueT4gfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW5pdEV2ZW50TWFuYWdlcigpIHtcclxuICAgIGNvbnN0IGhhbmRsZXJzID0gbmV3IE1hcDwoZXZlbnQ6IGFueSkgPT4gdm9pZCwgc3RyaW5nPigpO1xyXG4gICAgY29uc3QgaW5kZXhlZCA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8KGV2ZW50OiBhbnkpID0+IHZvaWQ+PigpO1xyXG5cclxuICAgIGNvbnN0IGV2ZW50TWFuYWdlciA9IHtcclxuICAgICAgICBvbjogPEtleSBleHRlbmRzIGtleW9mICRldmVudHMsIEhhbmRsZXIgZXh0ZW5kcyAoZXZlbnQ6ICRldmVudHNbS2V5XSkgPT4gdm9pZD4oa2V5OiBLZXksIGhhbmRsZXI6IEhhbmRsZXIpID0+IHtcclxuICAgICAgICAgICAgaGFuZGxlcnMuc2V0KGhhbmRsZXIsIGtleSBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnKicpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleGVkLmhhcygnKicpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ZWQuc2V0KCcqJywgbmV3IFNldCgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHdpbGRjYXJkU2V0ID0gaW5kZXhlZC5nZXQoJyonKSE7XHJcbiAgICAgICAgICAgICAgICB3aWxkY2FyZFNldC5hZGQoaGFuZGxlcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXhlZC5oYXMoa2V5IGFzIHN0cmluZykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhlZC5zZXQoa2V5IGFzIHN0cmluZywgbmV3IFNldCgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNldCA9IGluZGV4ZWQuZ2V0KGtleSBhcyBzdHJpbmcpITtcclxuICAgICAgICAgICAgICAgIHNldC5hZGQoaGFuZGxlcik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVycy5kZWxldGUoaGFuZGxlcik7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnKicpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWxkY2FyZFNldCA9IGluZGV4ZWQuZ2V0KCcqJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbGRjYXJkU2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbGRjYXJkU2V0LmRlbGV0ZShoYW5kbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldCA9IGluZGV4ZWQuZ2V0KGtleSBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0LmRlbGV0ZShoYW5kbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvZmY6IDxLZXkgZXh0ZW5kcyBrZXlvZiAkZXZlbnRzLCBIYW5kbGVyIGV4dGVuZHMgKGV2ZW50OiAkZXZlbnRzW0tleV0pID0+IHZvaWQ+KGtleTogS2V5LCBoYW5kbGVyOiBIYW5kbGVyKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICcqJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgd2lsZGNhcmRTZXQgPSBpbmRleGVkLmdldCgnKicpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF3aWxkY2FyZFNldCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlcnMuZGVsZXRlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICAgICAgd2lsZGNhcmRTZXQuZGVsZXRlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0ID0gaW5kZXhlZC5nZXQoa2V5IGFzIHN0cmluZyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNldCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlcnMuZGVsZXRlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICAgICAgc2V0LmRlbGV0ZShoYW5kbGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW1pdDogYXN5bmMgPEtleSBleHRlbmRzIGtleW9mICRldmVudHMsIFZhbHVlIGV4dGVuZHMgJGV2ZW50c1tLZXldPihrZXk6IEtleSwgdmFsdWU6IFZhbHVlKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRjYXJkSGFuZGxlcnMgPSBpbmRleGVkLmdldCgnKicpO1xyXG4gICAgICAgICAgICBpZiAod2lsZGNhcmRIYW5kbGVycykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHdpbGRjYXJkSGFuZGxlcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyKHsga2V5LCB2YWx1ZSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgaCA9IGluZGV4ZWQuZ2V0KGtleSBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICBpZiAoaCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBldmVudE1hbmFnZXI7XHJcbn1cclxuIiwKICAgICJleHBvcnQgdHlwZSBNaWxraW9GbG93PFQsIFRSZXR1cm4gPSBhbnksIFROZXh0ID0gYW55PiA9IHtcclxuICBlbWl0OiAoZmxvdzogVCkgPT4gdm9pZDtcclxuICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdOiAoKSA9PiBNaWxraW9GbG93PFQ+O1xyXG4gIG5leHQoLi4uW3ZhbHVlXTogW10gfCBbVE5leHRdKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxULCBUUmV0dXJuPj47XHJcbiAgcmV0dXJuKCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VCwgVFJldHVybj4+O1xyXG4gIHRocm93KGVycm9yOiBhbnkpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PFQsIFRSZXR1cm4+PjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGbG93PFQ+KCk6IE1pbGtpb0Zsb3c8VD4ge1xyXG4gIGxldCBzdGF0dXM6IFwicGVuZGluZ1wiIHwgXCJyZXNvbHZlZFwiIHwgXCJyZWplY3RlZFwiID0gXCJwZW5kaW5nXCI7XHJcbiAgY29uc3QgZmxvd3M6IEFycmF5PHtcclxuICAgIGJsYW5rOiBib29sZWFuO1xyXG4gICAgcHJvbWlzZTogUHJvbWlzZTxUPjtcclxuICAgIHJlc29sdmU6ICh2YWx1ZT86IFQgfCBQcm9taXNlTGlrZTxUPikgPT4gdm9pZDtcclxuICAgIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZDtcclxuICB9PiA9IFtdO1xyXG5cclxuICBjb25zdCBpdGVyYXRvciA9IHtcclxuICAgIGVtaXQ6IChmbG93OiBUKSA9PiB7XHJcbiAgICAgIGlmIChmbG93cy5hdCgtMSk/LmJsYW5rID09PSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IGZsb3dzLmF0KC0xKSE7XHJcbiAgICAgICAgaXRlbS5ibGFuayA9IGZhbHNlO1xyXG4gICAgICAgIGl0ZW0ucmVzb2x2ZShmbG93KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcmVzb2x2ZXJzID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzPFQ+KCk7XHJcbiAgICAgICAgcmVzb2x2ZXJzLnJlc29sdmUoZmxvdyk7XHJcbiAgICAgICAgZmxvd3MucHVzaCh7IC4uLnJlc29sdmVycywgYmxhbms6IGZhbHNlIH0gYXMgYW55KTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIC4uLih7XHJcbiAgICAgIGFzeW5jIG5leHQoKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxUPj4ge1xyXG4gICAgICAgIGlmIChzdGF0dXMgIT09IFwicGVuZGluZ1wiKSByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbnVsbCB9O1xyXG4gICAgICAgIGlmIChmbG93cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGNvbnN0IHJlc29sdmVycyA9IFByb21pc2Uud2l0aFJlc29sdmVyczxUPigpO1xyXG4gICAgICAgICAgZmxvd3MucHVzaCh7IC4uLnJlc29sdmVycywgYmxhbms6IHRydWUgfSBhcyBhbnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmbG93ID0gZmxvd3MuYXQoMCkhO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZsb3cucHJvbWlzZTtcclxuICAgICAgICBmbG93cy5zaGlmdCgpO1xyXG4gICAgICAgIHJldHVybiB7IGRvbmU6IHN0YXR1cyAhPT0gXCJwZW5kaW5nXCIsIHZhbHVlOiByZXN1bHQgfTtcclxuICAgICAgfSxcclxuICAgICAgYXN5bmMgcmV0dXJuKCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dm9pZD4+IHtcclxuICAgICAgICBzdGF0dXMgPSBcInJlc29sdmVkXCI7XHJcbiAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XHJcbiAgICAgICAgICBmbG93LmJsYW5rID0gZmFsc2U7XHJcbiAgICAgICAgICBmbG93LnJlc29sdmUodW5kZWZpbmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG51bGwgfTtcclxuICAgICAgfSxcclxuICAgICAgYXN5bmMgdGhyb3coZXJyOiBhbnkpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PHZvaWQ+PiB7XHJcbiAgICAgICAgc3RhdHVzID0gXCJyZWplY3RlZFwiO1xyXG4gICAgICAgIGlmIChmbG93cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGNvbnN0IHJlc29sdmVycyA9IFByb21pc2Uud2l0aFJlc29sdmVyczxUPigpO1xyXG4gICAgICAgICAgZmxvd3MucHVzaCh7IC4uLnJlc29sdmVycywgYmxhbms6IHRydWUgfSBhcyBhbnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcclxuICAgICAgICAgIGZsb3cuYmxhbmsgPSBmYWxzZTtcclxuICAgICAgICAgIGZsb3cucmVqZWN0KGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBudWxsIH07XHJcbiAgICAgIH0sXHJcbiAgICB9IHNhdGlzZmllcyBBc3luY0l0ZXJhdG9yPHVua25vd24+KSxcclxuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICB9O1xyXG5cclxuICByZXR1cm4gaXRlcmF0b3IgYXMgTWlsa2lvRmxvdzxUPjtcclxufVxyXG4iLAogICAgInR5cGUgSWRHZW5lcmF0b3JPcHRpb25zID0ge1xyXG4gIGxlbmd0aD86IG51bWJlcjtcclxuICB0aW1lc3RhbXA6IGJvb2xlYW47XHJcbiAgc2VxdWVudGlhbDogYm9vbGVhbjtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGRlZmluZUlkR2VuZXJhdG9yKG9wdGlvbnM6IElkR2VuZXJhdG9yT3B0aW9ucykge1xyXG4gIGlmICghb3B0aW9ucy5sZW5ndGgpIG9wdGlvbnMubGVuZ3RoID0gMjQ7XHJcbiAgaWYgKG9wdGlvbnMubGVuZ3RoIDwgMSkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsZW5ndGhcIik7XHJcbiAgaWYgKG9wdGlvbnMubGVuZ3RoID4gNjEpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGVuZ3RoXCIpO1xyXG4gIGlmIChvcHRpb25zLnRpbWVzdGFtcCAmJiBvcHRpb25zLmxlbmd0aCA8IDkpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGVuZ3RoXCIpO1xyXG4gIGxldCBsYXN0VGltZSA9IDA7XHJcbiAgbGV0IGxhc3REZWNpbWFsID0gMG47XHJcbiAgcmV0dXJuIHtcclxuICAgIGNyZWF0ZUlkKCkge1xyXG4gICAgICBsZXQgcmFuZExlbmd0aCA9IG9wdGlvbnMubGVuZ3RoITtcclxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgbGV0IGlkID0gXCJcIjtcclxuICAgICAgaWYgKG9wdGlvbnMudGltZXN0YW1wKSB7XHJcbiAgICAgICAgcmFuZExlbmd0aCAtPSA4O1xyXG4gICAgICAgIGlkID0gYCR7aWR9JHtfX2JpZ0ludFRvU3RyaW5nKEJpZ0ludChub3cpKS5wYWRTdGFydCg4LCBcIjBcIil9YDtcclxuICAgICAgfVxyXG4gICAgICBpZiAob3B0aW9ucy5zZXF1ZW50aWFsICYmIGxhc3RUaW1lID09PSBub3cpIHtcclxuICAgICAgICBpZCA9IGAke2lkfSR7X19iaWdJbnRUb1N0cmluZygrK2xhc3REZWNpbWFsKS5wYWRTdGFydCgxLCBcIjBcIil9YDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsYXN0VGltZSA9IG5vdztcclxuICAgICAgICBjb25zdCBtaW4gPSAwbjtcclxuICAgICAgICBjb25zdCBtYXggPSBfX2dldE1heFZhbHVlKEJpZ0ludChyYW5kTGVuZ3RoKSk7XHJcbiAgICAgICAgbGFzdERlY2ltYWwgPSBfX3NlY3VyZVJhbmRvbUJpZ0ludChtaW4sIG1heCk7XHJcbiAgICAgICAgaWQgPSBgJHtpZH0ke19fYmlnSW50VG9TdHJpbmcobGFzdERlY2ltYWwpLnBhZFN0YXJ0KHJhbmRMZW5ndGgsIFwiMFwiKX1gO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBpZDtcclxuICAgIH0sXHJcbiAgICBnZXRJZFRpbWVzdGFtcChpZDogc3RyaW5nKSB7XHJcbiAgICAgIHJldHVybiBvcHRpb25zLnRpbWVzdGFtcCA/IE51bWJlcihfX3N0cmluZ1RvQmlnSW50KGlkLnNsaWNlKDAsIDgpLnJlcGxhY2VBbGwoXCIwXCIsIFwiXCIpKSkgOiAwO1xyXG4gICAgfSxcclxuICB9O1xyXG59XHJcblxyXG5jb25zdCBFTkNPRElORyA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcclxuXHJcbmZ1bmN0aW9uIF9fc2VjdXJlUmFuZG9tQmlnSW50KG1pbjogYmlnaW50LCBtYXg6IGJpZ2ludCk6IGJpZ2ludCB7XHJcbiAgaWYgKG1pbiA+PSBtYXgpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VcIik7XHJcblxyXG4gIGNvbnN0IHJhbmdlID0gbWF4IC0gbWluICsgMW47XHJcbiAgY29uc3QgYnl0ZUNvdW50ID0gTWF0aC5jZWlsKE51bWJlcihCaWdJbnQocmFuZ2UudG9TdHJpbmcoMikubGVuZ3RoKSkgLyA4KTtcclxuICBjb25zdCBlbnRyb3B5Qnl0ZXMgPSBuZXcgVWludDhBcnJheShieXRlQ291bnQpO1xyXG5cclxuICBsZXQgcmFuZG9tVmFsdWU6IGJpZ2ludDtcclxuICBkbyB7XHJcbiAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGVudHJvcHlCeXRlcyk7XHJcbiAgICByYW5kb21WYWx1ZSA9XHJcbiAgICAgIEJpZ0ludChcclxuICAgICAgICBgMHgke0FycmF5LmZyb20oZW50cm9weUJ5dGVzKVxyXG4gICAgICAgICAgLm1hcCgoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpKVxyXG4gICAgICAgICAgLmpvaW4oXCJcIil9YCxcclxuICAgICAgKSAlIHJhbmdlO1xyXG4gIH0gd2hpbGUgKHJhbmRvbVZhbHVlIDwgMG4pO1xyXG5cclxuICByZXR1cm4gbWluICsgcmFuZG9tVmFsdWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYmlnSW50VG9TdHJpbmcodmFsdWU6IGJpZ2ludCk6IHN0cmluZyB7XHJcbiAgY29uc3QgYmFzZSA9IEJpZ0ludChFTkNPRElORy5sZW5ndGgpO1xyXG4gIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gIGxldCBjdXJyZW50ID0gdmFsdWU7XHJcblxyXG4gIGlmIChjdXJyZW50ID09PSAwbikgcmV0dXJuIEVOQ09ESU5HWzBdO1xyXG5cclxuICB3aGlsZSAoY3VycmVudCA+IDBuKSB7XHJcbiAgICBjb25zdCByZW1haW5kZXIgPSBjdXJyZW50ICUgYmFzZTtcclxuICAgIHJlc3VsdCA9IEVOQ09ESU5HW051bWJlcihyZW1haW5kZXIpXSArIHJlc3VsdDtcclxuICAgIGN1cnJlbnQgPSBjdXJyZW50IC8gYmFzZTtcclxuICB9XHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gX19zdHJpbmdUb0JpZ0ludChzdHI6IHN0cmluZyk6IGJpZ2ludCB7XHJcbiAgY29uc3QgY2hhck1hcDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgRU5DT0RJTkcubGVuZ3RoOyBpKyspIHtcclxuICAgIGNoYXJNYXBbRU5DT0RJTkdbaV1dID0gaTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGJhc2UgPSBCaWdJbnQoRU5DT0RJTkcubGVuZ3RoKTtcclxuICBsZXQgcmVzdWx0ID0gMG47XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBjb25zdCBjaGFyID0gc3RyW2ldO1xyXG4gICAgaWYgKCEoY2hhciBpbiBjaGFyTWFwKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2hhcmFjdGVyICcke2NoYXJ9JyBpbiBpbnB1dCBzdHJpbmdgKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbHVlID0gQmlnSW50KGNoYXJNYXBbY2hhcl0pO1xyXG4gICAgcmVzdWx0ID0gcmVzdWx0ICogYmFzZSArIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gX19nZXRNYXhWYWx1ZShuOiBiaWdpbnQpOiBiaWdpbnQge1xyXG4gIHJldHVybiBCaWdJbnQoRU5DT0RJTkcubGVuZ3RoKSAqKiBuIC0gMW47XHJcbn1cclxuXHJcbmNvbnN0IGlkR2VuZXJhdG9yID0gZGVmaW5lSWRHZW5lcmF0b3IoeyBsZW5ndGg6IDI0LCB0aW1lc3RhbXA6IGZhbHNlLCBzZXF1ZW50aWFsOiBmYWxzZSB9KTtcclxuXHJcbmV4cG9ydCBjb25zdCBfX2NyZWF0ZUlkID0gaWRHZW5lcmF0b3IuY3JlYXRlSWQ7XHJcbiIsCiAgICAiaW1wb3J0IHsgX19jcmVhdGVJZCB9IGZyb20gXCIuLi91dGlscy9jcmVhdGUtaWQudHNcIjtcclxuXHJcbmV4cG9ydCB0eXBlIEV4ZWN1dGVJZEdlbmVyYXRvciA9IChoZWFkZXJzPzogSGVhZGVycykgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZURlZmF1bHRFeGVjdXRlSWRHZW5lcmF0b3IoKSB7XHJcbiAgcmV0dXJuIF9fY3JlYXRlSWQ7XHJcbn1cclxuIiwKICAgICJpbXBvcnQgeyB0eXBlICR0eXBlcywgX19pbml0TGlzdGVuZXIsIF9faW5pdEV4ZWN1dGVyLCBfX2luaXRFdmVudE1hbmFnZXIsIHR5cGUgRXhlY3V0ZUlkLCB0eXBlIExvZ2dlciwgdHlwZSBNaXhpbiwgdHlwZSBHZW5lcmF0ZWRJbml0LCB0eXBlIFBpbmcsIHR5cGUgTG9nZ2VyU3VibWl0dGluZ0hhbmRsZXIsIHR5cGUgTG9nZ2VySW5zZXJ0aW5nSGFuZGxlciB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xyXG5pbXBvcnQgeyBkZWZpbmVEZWZhdWx0RXhlY3V0ZUlkR2VuZXJhdG9yIH0gZnJvbSBcIi4uL2V4ZWN1dGUvZXhlY3V0ZS1pZC1nZW5lcmF0b3IudHNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWlsa2lvSW5pdCB7XHJcbiAgICBwb3J0OiBudW1iZXI7XHJcbiAgICBkZXZlbG9wOiBib29sZWFuO1xyXG4gICAgZmV0Y2hFbnY/OiAoa2V5OiBzdHJpbmcpID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIGFjY2Vzc0tleT86IHN0cmluZztcclxuICAgIGNvcnM/OiB7XHJcbiAgICAgICAgY29yc0FsbG93TWV0aG9kcz86IHN0cmluZztcclxuICAgICAgICBjb3JzQWxsb3dIZWFkZXJzPzogc3RyaW5nO1xyXG4gICAgICAgIGNvcnNBbGxvd09yaWdpbj86IHN0cmluZztcclxuICAgIH07XHJcbiAgICBpZ25vcmVQYXRoTGV2ZWw/OiBudW1iZXI7XHJcbiAgICByZWFsSXA/OiAoaGVhZGVyczogSGVhZGVycykgPT4gc3RyaW5nO1xyXG4gICAgZXhlY3V0ZUlkPzogKGhlYWRlcnM6IEhlYWRlcnMpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcclxuICAgIG9uTG9nZ2VyU3VibWl0dGluZz86IExvZ2dlclN1Ym1pdHRpbmdIYW5kbGVyO1xyXG4gICAgb25Mb2dnZXJJbnNlcnRpbmc/OiBMb2dnZXJJbnNlcnRpbmdIYW5kbGVyO1xyXG4gICAgYm9vdHN0cmFwcz86IEFycmF5PCh3b3JsZDogYW55KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIE1pbGtpb1J1bnRpbWVJbml0PFQgZXh0ZW5kcyBNaWxraW9Jbml0PiA9IE1peGluPFxyXG4gICAgVCxcclxuICAgIHtcclxuICAgICAgICBleGVjdXRlSWQ6IChoZWFkZXJzOiBIZWFkZXJzKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XHJcbiAgICAgICAgcnVudGltZToge1xyXG4gICAgICAgICAgICByZXF1ZXN0OiBNYXA8RXhlY3V0ZUlkLCB7IGxvZ2dlcjogTG9nZ2VyIH0+O1xyXG4gICAgICAgICAgICBjb25maWc6IEF3YWl0ZWQ8UmV0dXJuVHlwZTwkdHlwZXNbXCJnZW5lcmF0ZWRcIl1bXCJjb25maWdTY2hlbWFcIl0+PjtcclxuICAgICAgICAgICAgYXBwOiBhbnk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBvbjogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBfX2luaXRFdmVudE1hbmFnZXI+PltcIm9uXCJdO1xyXG4gICAgICAgIG9mZjogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBfX2luaXRFdmVudE1hbmFnZXI+PltcIm9mZlwiXTtcclxuICAgICAgICBlbWl0OiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIF9faW5pdEV2ZW50TWFuYWdlcj4+W1wiZW1pdFwiXTtcclxuICAgIH1cclxuPjtcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVXb3JsZDxNaWxraW9PcHRpb25zIGV4dGVuZHMgTWlsa2lvSW5pdD4oZ2VuZXJhdGVkOiBHZW5lcmF0ZWRJbml0LCBjb25maWdTY2hlbWE6IHsgZ2V0OiAoKSA9PiBQcm9taXNlPFJlY29yZDxhbnksIGFueT4+IH0sIG9wdGlvbnM6IE1pbGtpb09wdGlvbnMpOiBQcm9taXNlPHVua25vd24+IHtcclxuICAgIGNvbnN0IGV4ZWN1dGVJZCA9IG9wdGlvbnMuZXhlY3V0ZUlkID8/IGRlZmluZURlZmF1bHRFeGVjdXRlSWRHZW5lcmF0b3IoKTtcclxuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGNvbmZpZ1NjaGVtYS5nZXQoKTtcclxuXHJcbiAgICBjb25zdCBydW50aW1lID0ge1xyXG4gICAgICAgIHJlcXVlc3Q6IG5ldyBNYXAoKSxcclxuICAgICAgICBjb25maWcsXHJcbiAgICB9IGFzIE1pbGtpb1J1bnRpbWVJbml0PE1pbGtpb09wdGlvbnM+W1wicnVudGltZVwiXTtcclxuXHJcbiAgICBjb25zdCBldmVudE1hbmFnZXIgPSBfX2luaXRFdmVudE1hbmFnZXIoKTtcclxuXHJcbiAgICBpZiAob3B0aW9ucy5hY2Nlc3NLZXkpIG9wdGlvbnMuaWdub3JlUGF0aExldmVsID0gb3B0aW9ucy5pZ25vcmVQYXRoTGV2ZWwgPyBvcHRpb25zLmlnbm9yZVBhdGhMZXZlbCArIDEgOiAxO1xyXG5cclxuICAgIGNvbnN0IF86IE1pbGtpb1J1bnRpbWVJbml0PE1pbGtpb09wdGlvbnM+ID0ge1xyXG4gICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgZXhlY3V0ZUlkLFxyXG4gICAgICAgIHJ1bnRpbWUsXHJcbiAgICAgICAgb246IGV2ZW50TWFuYWdlci5vbixcclxuICAgICAgICBvZmY6IGV2ZW50TWFuYWdlci5vZmYsXHJcbiAgICAgICAgZW1pdDogZXZlbnRNYW5hZ2VyLmVtaXQsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGV4ZWN1dGVyID0gX19pbml0RXhlY3V0ZXIoZ2VuZXJhdGVkLCBfKTtcclxuICAgIGNvbnN0IGxpc3RlbmVyID0gX19pbml0TGlzdGVuZXIoZ2VuZXJhdGVkLCBfLCBleGVjdXRlcik7XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgYXBwXHJcbiAgICBjb25zdCB3b3JsZCA9IHtcclxuICAgICAgICBfLFxyXG4gICAgICAgIC8vIGV2ZW50IG1hbmFnZXJcclxuICAgICAgICBvbjogZXZlbnRNYW5hZ2VyLm9uLFxyXG4gICAgICAgIG9mZjogZXZlbnRNYW5hZ2VyLm9mZixcclxuICAgICAgICBlbWl0OiBldmVudE1hbmFnZXIuZW1pdCxcclxuICAgICAgICAvLyBsaXN0ZW5lclxyXG4gICAgICAgIGxpc3RlbmVyLFxyXG4gICAgICAgIC8vIGZ1bmN0aW9uXHJcbiAgICAgICAgY29uZmlnLFxyXG4gICAgfTtcclxuXHJcbiAgICBydW50aW1lLmFwcCA9IHdvcmxkO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuYm9vdHN0cmFwcykpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGJvb3RzdHJhcCBvZiBvcHRpb25zLmJvb3RzdHJhcHMpIHtcclxuICAgICAgICAgICAgYXdhaXQgYm9vdHN0cmFwKHdvcmxkIGFzIE1pbGtpb1dvcmxkPEdlbmVyYXRlZEluaXQsIE1pbGtpb09wdGlvbnM+KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoZ2VuZXJhdGVkLmhhbmRsZXJTY2hlbWEubG9hZEhhbmRsZXJzKHdvcmxkKSk7XHJcblxyXG4gICAgY29uc3Qgcm91dGVLZXlzID0gT2JqZWN0LmtleXMoZ2VuZXJhdGVkLnJvdXRlU2NoZW1hIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pO1xyXG4gICAgY29uc29sZS5sb2coYFxcbuKWsyBSb3V0ZXM6XFxuICAgICR7cm91dGVLZXlzLmpvaW4oXCJcXG4gICAgXCIpfVxcbiAgQSB0b3RhbCBvZiAke3JvdXRlS2V5cy5sZW5ndGh9IHJvdXRlcy5gKTtcclxuICAgIGNvbnNvbGUubG9nKGBcXG7ilrMgU2VydmVyOiBodHRwOi8vbG9jYWxob3N0OiR7b3B0aW9ucy5wb3J0fWApO1xyXG5cclxuICAgIHJldHVybiB3b3JsZCBhcyB1bmtub3duO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1pbGtpb1dvcmxkPEdlbmVyYXRlZCBleHRlbmRzIEdlbmVyYXRlZEluaXQsIE1pbGtpb09wdGlvbnMgZXh0ZW5kcyBNaWxraW9Jbml0ID0gTWlsa2lvSW5pdD4ge1xyXG4gICAgXzogTWlsa2lvUnVudGltZUluaXQ8TWlsa2lvT3B0aW9ucz47XHJcbiAgICAvLyBldmVudCBtYW5hZ2VyXHJcbiAgICBvbjogPEtleSBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFtcImV2ZW50c1wiXSwgSGFuZGxlciBleHRlbmRzIChldmVudDogR2VuZXJhdGVkW1wiZXZlbnRzXCJdW0tleV0pID0+IHZvaWQ+KGtleTogS2V5LCBoYW5kbGVyOiBIYW5kbGVyKSA9PiAoKCkgPT4gdm9pZCk7XHJcbiAgICBvZmY6IDxLZXkgZXh0ZW5kcyBrZXlvZiBHZW5lcmF0ZWRbXCJldmVudHNcIl0sIEhhbmRsZXIgZXh0ZW5kcyAoZXZlbnQ6IEdlbmVyYXRlZFtcImV2ZW50c1wiXVtLZXldKSA9PiB2b2lkPihrZXk6IEtleSwgaGFuZGxlcjogSGFuZGxlcikgPT4gdm9pZDtcclxuICAgIGVtaXQ6IDxLZXkgZXh0ZW5kcyBrZXlvZiBHZW5lcmF0ZWRbXCJldmVudHNcIl0sIFZhbHVlIGV4dGVuZHMgR2VuZXJhdGVkW1wiZXZlbnRzXCJdW0tleV0+KGtleTogS2V5LCB2YWx1ZTogVmFsdWUpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICBwaW5nOiAob3B0aW9ucz86IHsgdGltZW91dD86IG51bWJlciB9KSA9PiBQcm9taXNlPFBpbmc+O1xyXG4gICAgLy8gbGlzdGVuZXJcclxuICAgIGxpc3RlbmVyOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIF9faW5pdExpc3RlbmVyPj47XHJcbiAgICBjb25maWc6IFJlYWRvbmx5PEF3YWl0ZWQ8UmV0dXJuVHlwZTwkdHlwZXNbXCJjb25maWdTY2hlbWFcIl1bXCJnZXRcIl0+Pj47XHJcbn1cclxuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gdHlwaWE8VHlwaWFJbml0VCBleHRlbmRzIFR5cGlhSW5pdD4oaW5pdDogVHlwaWFJbml0VCk6IFR5cGlhPFR5cGlhSW5pdFQ+IHtcclxuICByZXR1cm4gaW5pdCBhcyB1bmtub3duIGFzIFR5cGlhPFR5cGlhSW5pdFQ+O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBUeXBpYUluaXQgPSAoKSA9PiBSZWNvcmQ8UHJvcGVydHlLZXksIHVua25vd24+IHwgUHJvbWlzZTxSZWNvcmQ8UHJvcGVydHlLZXksIHVua25vd24+PjtcclxuXHJcbmV4cG9ydCB0eXBlIFR5cGlhPFR5cGlhSW5pdFQgZXh0ZW5kcyBUeXBpYUluaXQ+ID0gVHlwaWFJbml0VDtcclxuIiwKICAgICIvKipcbiAqIEBtb2R1bGUgY29uc3RhbnRzXG4gKiBAc3VtbWFyeSBVc2VmdWwgY29uc3RhbnRzXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbGxlY3Rpb24gb2YgdXNlZnVsIGRhdGUgY29uc3RhbnRzLlxuICpcbiAqIFRoZSBjb25zdGFudHMgY291bGQgYmUgaW1wb3J0ZWQgZnJvbSBgZGF0ZS1mbnMvY29uc3RhbnRzYDpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbWF4VGltZSwgbWluVGltZSB9IGZyb20gXCIuL2NvbnN0YW50cy9kYXRlLWZucy9jb25zdGFudHNcIjtcbiAqXG4gKiBmdW5jdGlvbiBpc0FsbG93ZWRUaW1lKHRpbWUpIHtcbiAqICAgcmV0dXJuIHRpbWUgPD0gbWF4VGltZSAmJiB0aW1lID49IG1pblRpbWU7XG4gKiB9XG4gKiBgYGBcbiAqL1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgZGF5c0luV2Vla1xuICogQHN1bW1hcnkgRGF5cyBpbiAxIHdlZWsuXG4gKi9cbmV4cG9ydCBjb25zdCBkYXlzSW5XZWVrID0gNztcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIGRheXNJblllYXJcbiAqIEBzdW1tYXJ5IERheXMgaW4gMSB5ZWFyLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSG93IG1hbnkgZGF5cyBpbiBhIHllYXIuXG4gKlxuICogT25lIHllYXJzIGVxdWFscyAzNjUuMjQyNSBkYXlzIGFjY29yZGluZyB0byB0aGUgZm9ybXVsYTpcbiAqXG4gKiA+IExlYXAgeWVhciBvY2N1cnMgZXZlcnkgNCB5ZWFycywgZXhjZXB0IGZvciB5ZWFycyB0aGF0IGFyZSBkaXZpc2libGUgYnkgMTAwIGFuZCBub3QgZGl2aXNpYmxlIGJ5IDQwMC5cbiAqID4gMSBtZWFuIHllYXIgPSAoMzY1KzEvNC0xLzEwMCsxLzQwMCkgZGF5cyA9IDM2NS4yNDI1IGRheXNcbiAqL1xuZXhwb3J0IGNvbnN0IGRheXNJblllYXIgPSAzNjUuMjQyNTtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1heFRpbWVcbiAqIEBzdW1tYXJ5IE1heGltdW0gYWxsb3dlZCB0aW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBtYXhUaW1lIH0gZnJvbSBcIi4vY29uc3RhbnRzL2RhdGUtZm5zL2NvbnN0YW50c1wiO1xuICpcbiAqIGNvbnN0IGlzVmFsaWQgPSA4NjQwMDAwMDAwMDAwMDAxIDw9IG1heFRpbWU7XG4gKiAvLz0+IGZhbHNlXG4gKlxuICogbmV3IERhdGUoODY0MDAwMDAwMDAwMDAwMSk7XG4gKiAvLz0+IEludmFsaWQgRGF0ZVxuICovXG5leHBvcnQgY29uc3QgbWF4VGltZSA9IE1hdGgucG93KDEwLCA4KSAqIDI0ICogNjAgKiA2MCAqIDEwMDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaW5UaW1lXG4gKiBAc3VtbWFyeSBNaW5pbXVtIGFsbG93ZWQgdGltZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgbWluVGltZSB9IGZyb20gXCIuL2NvbnN0YW50cy9kYXRlLWZucy9jb25zdGFudHNcIjtcbiAqXG4gKiBjb25zdCBpc1ZhbGlkID0gLTg2NDAwMDAwMDAwMDAwMDEgPj0gbWluVGltZTtcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBuZXcgRGF0ZSgtODY0MDAwMDAwMDAwMDAwMSlcbiAqIC8vPT4gSW52YWxpZCBEYXRlXG4gKi9cbmV4cG9ydCBjb25zdCBtaW5UaW1lID0gLW1heFRpbWU7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJbldlZWtcbiAqIEBzdW1tYXJ5IE1pbGxpc2Vjb25kcyBpbiAxIHdlZWsuXG4gKi9cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZHNJbldlZWsgPSA2MDQ4MDAwMDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJbkRheVxuICogQHN1bW1hcnkgTWlsbGlzZWNvbmRzIGluIDEgZGF5LlxuICovXG5leHBvcnQgY29uc3QgbWlsbGlzZWNvbmRzSW5EYXkgPSA4NjQwMDAwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbGxpc2Vjb25kc0luTWludXRlXG4gKiBAc3VtbWFyeSBNaWxsaXNlY29uZHMgaW4gMSBtaW51dGVcbiAqL1xuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kc0luTWludXRlID0gNjAwMDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJbkhvdXJcbiAqIEBzdW1tYXJ5IE1pbGxpc2Vjb25kcyBpbiAxIGhvdXJcbiAqL1xuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kc0luSG91ciA9IDM2MDAwMDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJblNlY29uZFxuICogQHN1bW1hcnkgTWlsbGlzZWNvbmRzIGluIDEgc2Vjb25kXG4gKi9cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZHNJblNlY29uZCA9IDEwMDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaW51dGVzSW5ZZWFyXG4gKiBAc3VtbWFyeSBNaW51dGVzIGluIDEgeWVhci5cbiAqL1xuZXhwb3J0IGNvbnN0IG1pbnV0ZXNJblllYXIgPSA1MjU2MDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaW51dGVzSW5Nb250aFxuICogQHN1bW1hcnkgTWludXRlcyBpbiAxIG1vbnRoLlxuICovXG5leHBvcnQgY29uc3QgbWludXRlc0luTW9udGggPSA0MzIwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbnV0ZXNJbkRheVxuICogQHN1bW1hcnkgTWludXRlcyBpbiAxIGRheS5cbiAqL1xuZXhwb3J0IGNvbnN0IG1pbnV0ZXNJbkRheSA9IDE0NDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaW51dGVzSW5Ib3VyXG4gKiBAc3VtbWFyeSBNaW51dGVzIGluIDEgaG91ci5cbiAqL1xuZXhwb3J0IGNvbnN0IG1pbnV0ZXNJbkhvdXIgPSA2MDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1vbnRoc0luUXVhcnRlclxuICogQHN1bW1hcnkgTW9udGhzIGluIDEgcXVhcnRlci5cbiAqL1xuZXhwb3J0IGNvbnN0IG1vbnRoc0luUXVhcnRlciA9IDM7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtb250aHNJblllYXJcbiAqIEBzdW1tYXJ5IE1vbnRocyBpbiAxIHllYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBtb250aHNJblllYXIgPSAxMjtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHF1YXJ0ZXJzSW5ZZWFyXG4gKiBAc3VtbWFyeSBRdWFydGVycyBpbiAxIHllYXJcbiAqL1xuZXhwb3J0IGNvbnN0IHF1YXJ0ZXJzSW5ZZWFyID0gNDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJbkhvdXJcbiAqIEBzdW1tYXJ5IFNlY29uZHMgaW4gMSBob3VyLlxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luSG91ciA9IDM2MDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5NaW51dGVcbiAqIEBzdW1tYXJ5IFNlY29uZHMgaW4gMSBtaW51dGUuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5NaW51dGUgPSA2MDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJbkRheVxuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIGRheS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJbkRheSA9IHNlY29uZHNJbkhvdXIgKiAyNDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJbldlZWtcbiAqIEBzdW1tYXJ5IFNlY29uZHMgaW4gMSB3ZWVrLlxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luV2VlayA9IHNlY29uZHNJbkRheSAqIDc7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5ZZWFyXG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgeWVhci5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJblllYXIgPSBzZWNvbmRzSW5EYXkgKiBkYXlzSW5ZZWFyO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luTW9udGhcbiAqIEBzdW1tYXJ5IFNlY29uZHMgaW4gMSBtb250aFxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luTW9udGggPSBzZWNvbmRzSW5ZZWFyIC8gMTI7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5RdWFydGVyXG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgcXVhcnRlci5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJblF1YXJ0ZXIgPSBzZWNvbmRzSW5Nb250aCAqIDM7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBjb25zdHJ1Y3RGcm9tU3ltYm9sXG4gKiBAc3VtbWFyeSBTeW1ib2wgZW5hYmxpbmcgRGF0ZSBleHRlbnNpb25zIHRvIGluaGVyaXQgcHJvcGVydGllcyBmcm9tIHRoZSByZWZlcmVuY2UgZGF0ZS5cbiAqXG4gKiBUaGUgc3ltYm9sIGlzIHVzZWQgdG8gZW5hYmxlIHRoZSBgY29uc3RydWN0RnJvbWAgZnVuY3Rpb24gdG8gY29uc3RydWN0IGEgZGF0ZVxuICogdXNpbmcgYSByZWZlcmVuY2UgZGF0ZSBhbmQgYSB2YWx1ZS4gSXQgYWxsb3dzIHRvIHRyYW5zZmVyIGV4dHJhIHByb3BlcnRpZXNcbiAqIGZyb20gdGhlIHJlZmVyZW5jZSBkYXRlIHRvIHRoZSBuZXcgZGF0ZS4gSXQncyB1c2VmdWwgZm9yIGV4dGVuc2lvbnMgbGlrZVxuICogW2BUWkRhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdHopIHRoYXQgYWNjZXB0IGEgdGltZSB6b25lIGFzXG4gKiBhIGNvbnN0cnVjdG9yIGFyZ3VtZW50LlxuICovXG5leHBvcnQgY29uc3QgY29uc3RydWN0RnJvbVN5bWJvbCA9IFN5bWJvbC5mb3IoXCJjb25zdHJ1Y3REYXRlRnJvbVwiKTtcbiIsCiAgICAiaW1wb3J0IHsgY29uc3RydWN0RnJvbVN5bWJvbCB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGNvbnN0cnVjdEZyb21cbiAqIEBjYXRlZ29yeSBHZW5lcmljIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IENvbnN0cnVjdHMgYSBkYXRlIHVzaW5nIHRoZSByZWZlcmVuY2UgZGF0ZSBhbmQgdGhlIHZhbHVlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgZnVuY3Rpb24gY29uc3RydWN0cyBhIG5ldyBkYXRlIHVzaW5nIHRoZSBjb25zdHJ1Y3RvciBmcm9tIHRoZSByZWZlcmVuY2VcbiAqIGRhdGUgYW5kIHRoZSBnaXZlbiB2YWx1ZS4gSXQgaGVscHMgdG8gYnVpbGQgZ2VuZXJpYyBmdW5jdGlvbnMgdGhhdCBhY2NlcHRcbiAqIGRhdGUgZXh0ZW5zaW9ucy5cbiAqXG4gKiBJdCBkZWZhdWx0cyB0byBgRGF0ZWAgaWYgdGhlIHBhc3NlZCByZWZlcmVuY2UgZGF0ZSBpcyBhIG51bWJlciBvciBhIHN0cmluZy5cbiAqXG4gKiBTdGFydGluZyBmcm9tIHYzLjcuMCwgaXQgYWxsb3dzIHRvIGNvbnN0cnVjdCBhIGRhdGUgdXNpbmcgYFtTeW1ib2wuZm9yKFwiY29uc3RydWN0RGF0ZUZyb21cIildYFxuICogZW5hYmxpbmcgdG8gdHJhbnNmZXIgZXh0cmEgcHJvcGVydGllcyBmcm9tIHRoZSByZWZlcmVuY2UgZGF0ZSB0byB0aGUgbmV3IGRhdGUuXG4gKiBJdCdzIHVzZWZ1bCBmb3IgZXh0ZW5zaW9ucyBsaWtlIFtgVFpEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3R6KVxuICogdGhhdCBhY2NlcHQgYSB0aW1lIHpvbmUgYXMgYSBjb25zdHJ1Y3RvciBhcmd1bWVudC5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSByZWZlcmVuY2UgZGF0ZSB0byB0YWtlIGNvbnN0cnVjdG9yIGZyb21cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjcmVhdGUgdGhlIGRhdGVcbiAqXG4gKiBAcmV0dXJucyBEYXRlIGluaXRpYWxpemVkIHVzaW5nIHRoZSBnaXZlbiBkYXRlIGFuZCB2YWx1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS9kYXRlLWZuc1wiO1xuICpcbiAqIC8vIEEgZnVuY3Rpb24gdGhhdCBjbG9uZXMgYSBkYXRlIHByZXNlcnZpbmcgdGhlIG9yaWdpbmFsIHR5cGVcbiAqIGZ1bmN0aW9uIGNsb25lRGF0ZTxEYXRlVHlwZSBleHRlbmRzIERhdGU+KGRhdGU6IERhdGVUeXBlKTogRGF0ZVR5cGUge1xuICogICByZXR1cm4gY29uc3RydWN0RnJvbShcbiAqICAgICBkYXRlLCAvLyBVc2UgY29uc3RydWN0b3IgZnJvbSB0aGUgZ2l2ZW4gZGF0ZVxuICogICAgIGRhdGUuZ2V0VGltZSgpIC8vIFVzZSB0aGUgZGF0ZSB2YWx1ZSB0byBjcmVhdGUgYSBuZXcgZGF0ZVxuICogICApO1xuICogfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0RnJvbShkYXRlLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIGRhdGUgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGRhdGUodmFsdWUpO1xuXG4gIGlmIChkYXRlICYmIHR5cGVvZiBkYXRlID09PSBcIm9iamVjdFwiICYmIGNvbnN0cnVjdEZyb21TeW1ib2wgaW4gZGF0ZSlcbiAgICByZXR1cm4gZGF0ZVtjb25zdHJ1Y3RGcm9tU3ltYm9sXSh2YWx1ZSk7XG5cbiAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gbmV3IGRhdGUuY29uc3RydWN0b3IodmFsdWUpO1xuXG4gIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgY29uc3RydWN0RnJvbTtcbiIsCiAgICAiaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcblxuLyoqXG4gKiBAbmFtZSB0b0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIERhdGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0cyBjbG9uZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYSB0aW1lc3RhbXAuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIG5vbmUgb2YgdGhlIGFib3ZlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogU3RhcnRpbmcgZnJvbSB2My43LjAsIGl0IGNsb25lcyBhIGRhdGUgdXNpbmcgYFtTeW1ib2wuZm9yKFwiY29uc3RydWN0RGF0ZUZyb21cIildYFxuICogZW5hYmxpbmcgdG8gdHJhbnNmZXIgZXh0cmEgcHJvcGVydGllcyBmcm9tIHRoZSByZWZlcmVuY2UgZGF0ZSB0byB0aGUgbmV3IGRhdGUuXG4gKiBJdCdzIHVzZWZ1bCBmb3IgZXh0ZW5zaW9ucyBsaWtlIFtgVFpEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3R6KVxuICogdGhhdCBhY2NlcHQgYSB0aW1lIHpvbmUgYXMgYSBjb25zdHJ1Y3RvciBhcmd1bWVudC5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGFyZ3VtZW50IC0gVGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRGF0ZShhcmd1bWVudCwgY29udGV4dCkge1xuICAvLyBbVE9ET10gR2V0IHJpZCBvZiBgdG9EYXRlYCBvciBgY29uc3RydWN0RnJvbWA/XG4gIHJldHVybiBjb25zdHJ1Y3RGcm9tKGNvbnRleHQgfHwgYXJndW1lbnQsIGFyZ3VtZW50KTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCB0b0RhdGU7XG4iLAogICAgImxldCBkZWZhdWx0T3B0aW9ucyA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG5ld09wdGlvbnMpIHtcbiAgZGVmYXVsdE9wdGlvbnMgPSBuZXdPcHRpb25zO1xufVxuIiwKICAgICJpbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL19saWIvZGVmYXVsdE9wdGlvbnMuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZldlZWt9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzdGFydE9mV2Vla1xuICogQGNhdGVnb3J5IFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGEgd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSB3ZWVrIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZldlZWsobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gU3VuIEF1ZyAzMSAyMDE0IDAwOjAwOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRoZSB3ZWVrIHN0YXJ0cyBvbiBNb25kYXksIHRoZSBzdGFydCBvZiB0aGUgd2VlayBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZXZWVrKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCksIHsgd2Vla1N0YXJ0c09uOiAxIH0pXG4gKiAvLz0+IE1vbiBTZXAgMDEgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRPZldlZWsoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIGNvbnN0IHdlZWtTdGFydHNPbiA9XG4gICAgb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24gPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIDA7XG5cbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCBkYXkgPSBfZGF0ZS5nZXREYXkoKTtcbiAgY29uc3QgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247XG5cbiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgLSBkaWZmKTtcbiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mV2VlaztcbiIsCiAgICAiaW1wb3J0IHsgc3RhcnRPZldlZWsgfSBmcm9tIFwiLi9zdGFydE9mV2Vlay5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZklTT1dlZWt9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzdGFydE9mSVNPV2Vla1xuICogQGNhdGVnb3J5IElTTyBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYW4gSVNPIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhbiBJU08gd2VlayBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhbiBJU08gd2VlayBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZJU09XZWVrKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCkpXG4gKiAvLz0+IE1vbiBTZXAgMDEgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRPZklTT1dlZWsoZGF0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gc3RhcnRPZldlZWsoZGF0ZSwgeyAuLi5vcHRpb25zLCB3ZWVrU3RhcnRzT246IDEgfSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3RhcnRPZklTT1dlZWs7XG4iLAogICAgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mSVNPV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZJU09XZWVrLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGdldElTT1dlZWtZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZ2V0SVNPV2Vla1llYXJcbiAqIEBjYXRlZ29yeSBJU08gV2Vlay1OdW1iZXJpbmcgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBJU08gd2Vlay1udW1iZXJpbmcgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZSxcbiAqIHdoaWNoIGFsd2F5cyBzdGFydHMgMyBkYXlzIGJlZm9yZSB0aGUgeWVhcidzIGZpcnN0IFRodXJzZGF5LlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiBkYXRlXG4gKlxuICogQHJldHVybnMgVGhlIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIElTTy13ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDIgSmFudWFyeSAyMDA1P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0SVNPV2Vla1llYXIobmV3IERhdGUoMjAwNSwgMCwgMikpXG4gKiAvLz0+IDIwMDRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTtcblxuICBjb25zdCBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyID0gY29uc3RydWN0RnJvbShfZGF0ZSwgMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICBjb25zdCBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyKTtcblxuICBjb25zdCBmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyID0gY29uc3RydWN0RnJvbShfZGF0ZSwgMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0RnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIGNvbnN0IHN0YXJ0T2ZUaGlzWWVhciA9IHN0YXJ0T2ZJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIpO1xuXG4gIGlmIChfZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChfZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldElTT1dlZWtZZWFyO1xuIiwKICAgICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogR29vZ2xlIENocm9tZSBhcyBvZiA2Ny4wLjMzOTYuODcgaW50cm9kdWNlZCB0aW1lem9uZXMgd2l0aCBvZmZzZXQgdGhhdCBpbmNsdWRlcyBzZWNvbmRzLlxuICogVGhleSB1c3VhbGx5IGFwcGVhciBmb3IgZGF0ZXMgdGhhdCBkZW5vdGUgdGltZSBiZWZvcmUgdGhlIHRpbWV6b25lcyB3ZXJlIGludHJvZHVjZWRcbiAqIChlLmcuIGZvciAnRXVyb3BlL1ByYWd1ZScgdGltZXpvbmUgdGhlIG9mZnNldCBpcyBHTVQrMDA6NTc6NDQgYmVmb3JlIDEgT2N0b2JlciAxODkxXG4gKiBhbmQgR01UKzAxOjAwOjAwIGFmdGVyIHRoYXQgZGF0ZSlcbiAqXG4gKiBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgdGhlIG9mZnNldCBpbiBtaW51dGVzIGFuZCB3b3VsZCByZXR1cm4gNTcgZm9yIHRoZSBleGFtcGxlIGFib3ZlLFxuICogd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY2FsY3VsYXRpb25zLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcyB0aGF0IHRha2VzIHNlY29uZHMgaW4gYWNjb3VudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZGF0ZSkge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlKTtcbiAgY29uc3QgdXRjRGF0ZSA9IG5ldyBEYXRlKFxuICAgIERhdGUuVVRDKFxuICAgICAgX2RhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgIF9kYXRlLmdldE1vbnRoKCksXG4gICAgICBfZGF0ZS5nZXREYXRlKCksXG4gICAgICBfZGF0ZS5nZXRIb3VycygpLFxuICAgICAgX2RhdGUuZ2V0TWludXRlcygpLFxuICAgICAgX2RhdGUuZ2V0U2Vjb25kcygpLFxuICAgICAgX2RhdGUuZ2V0TWlsbGlzZWNvbmRzKCksXG4gICAgKSxcbiAgKTtcbiAgdXRjRGF0ZS5zZXRVVENGdWxsWWVhcihfZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgcmV0dXJuICtkYXRlIC0gK3V0Y0RhdGU7XG59XG4iLAogICAgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi4vY29uc3RydWN0RnJvbS5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRGF0ZXMoY29udGV4dCwgLi4uZGF0ZXMpIHtcbiAgY29uc3Qgbm9ybWFsaXplID0gY29uc3RydWN0RnJvbS5iaW5kKFxuICAgIG51bGwsXG4gICAgY29udGV4dCB8fCBkYXRlcy5maW5kKChkYXRlKSA9PiB0eXBlb2YgZGF0ZSA9PT0gXCJvYmplY3RcIiksXG4gICk7XG4gIHJldHVybiBkYXRlcy5tYXAobm9ybWFsaXplKTtcbn1cbiIsCiAgICAiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdGFydE9mRGF5fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZkRheVxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgZGF5IGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYSBkYXkgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBzdGFydCBvZiBhIGRheVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSBkYXkgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mRGF5KG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCkpXG4gKiAvLz0+IFR1ZSBTZXAgMDIgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRPZkRheShkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mRGF5O1xuIiwKICAgICJpbXBvcnQgeyBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIH0gZnJvbSBcIi4vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzLmpzXCI7XG5pbXBvcnQgeyBub3JtYWxpemVEYXRlcyB9IGZyb20gXCIuL19saWIvbm9ybWFsaXplRGF0ZXMuanNcIjtcbmltcG9ydCB7IG1pbGxpc2Vjb25kc0luRGF5IH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mRGF5IH0gZnJvbSBcIi4vc3RhcnRPZkRheS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIGRheXMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciBkYXlzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHRpbWVzIGFyZSByZW1vdmVkXG4gKiBmcm9tIHRoZSBkYXRlcyBhbmQgdGhlbiB0aGUgZGlmZmVyZW5jZSBpbiBkYXlzIGlzIGNhbGN1bGF0ZWQuXG4gKlxuICogQHBhcmFtIGxhdGVyRGF0ZSAtIFRoZSBsYXRlciBkYXRlXG4gKiBAcGFyYW0gZWFybGllckRhdGUgLSBUaGUgZWFybGllciBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgY2FsZW5kYXIgZGF5c1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBjYWxlbmRhciBkYXlzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxMSAyMzowMDowMCBhbmQgMiBKdWx5IDIwMTIgMDA6MDA6MDA/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoXG4gKiAgIG5ldyBEYXRlKDIwMTIsIDYsIDIsIDAsIDApLFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAyLCAyMywgMClcbiAqIClcbiAqIC8vPT4gMzY2XG4gKiAvLyBIb3cgbWFueSBjYWxlbmRhciBkYXlzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxMSAyMzo1OTowMCBhbmQgMyBKdWx5IDIwMTEgMDA6MDE6MDA/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDMsIDAsIDEpLFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAyLCAyMywgNTkpXG4gKiApXG4gKiAvLz0+IDFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoXG4gICAgb3B0aW9ucz8uaW4sXG4gICAgbGF0ZXJEYXRlLFxuICAgIGVhcmxpZXJEYXRlLFxuICApO1xuXG4gIGNvbnN0IGxhdGVyU3RhcnRPZkRheSA9IHN0YXJ0T2ZEYXkobGF0ZXJEYXRlXyk7XG4gIGNvbnN0IGVhcmxpZXJTdGFydE9mRGF5ID0gc3RhcnRPZkRheShlYXJsaWVyRGF0ZV8pO1xuXG4gIGNvbnN0IGxhdGVyVGltZXN0YW1wID1cbiAgICArbGF0ZXJTdGFydE9mRGF5IC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhsYXRlclN0YXJ0T2ZEYXkpO1xuICBjb25zdCBlYXJsaWVyVGltZXN0YW1wID1cbiAgICArZWFybGllclN0YXJ0T2ZEYXkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGVhcmxpZXJTdGFydE9mRGF5KTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIGRheXMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciBiZWNhdXNlIHRoZSBudW1iZXIgb2ZcbiAgLy8gbWlsbGlzZWNvbmRzIGluIGEgZGF5IGlzIG5vdCBjb25zdGFudCAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZlxuICAvLyB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpLlxuICByZXR1cm4gTWF0aC5yb3VuZCgobGF0ZXJUaW1lc3RhbXAgLSBlYXJsaWVyVGltZXN0YW1wKSAvIG1pbGxpc2Vjb25kc0luRGF5KTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXM7XG4iLAogICAgImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBnZXRJU09XZWVrWWVhciB9IGZyb20gXCIuL2dldElTT1dlZWtZZWFyLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mSVNPV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZJU09XZWVrLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdGFydE9mSVNPV2Vla1llYXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzdGFydE9mSVNPV2Vla1llYXJcbiAqIEBjYXRlZ29yeSBJU08gV2Vlay1OdW1iZXJpbmcgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYW4gSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsXG4gKiB3aGljaCBhbHdheXMgc3RhcnRzIDMgZGF5cyBiZWZvcmUgdGhlIHllYXIncyBmaXJzdCBUaHVyc2RheS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogSVNPIHdlZWstbnVtYmVyaW5nIHllYXI6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgc3RhcnQgb2YgYW4gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyIGZvciAyIEp1bHkgMjAwNTpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZJU09XZWVrWWVhcihuZXcgRGF0ZSgyMDA1LCA2LCAyKSlcbiAqIC8vPT4gTW9uIEphbiAwMyAyMDA1IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mSVNPV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB5ZWFyID0gZ2V0SVNPV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7XG4gIGNvbnN0IGZvdXJ0aE9mSmFudWFyeSA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRGdWxsWWVhcih5ZWFyLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gc3RhcnRPZklTT1dlZWsoZm91cnRoT2ZKYW51YXJ5KTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mSVNPV2Vla1llYXI7XG4iLAogICAgIi8qKlxuICogQG5hbWUgaXNEYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiB2YWx1ZSBhIGRhdGU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIERhdGUuIFRoZSBmdW5jdGlvbiB3b3JrcyBmb3IgZGF0ZXMgdHJhbnNmZXJyZWQgYWNyb3NzIGlmcmFtZXMuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gXCJbb2JqZWN0IERhdGVdXCIpXG4gICk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNEYXRlO1xuIiwKICAgICJpbXBvcnQgeyBpc0RhdGUgfSBmcm9tIFwiLi9pc0RhdGUuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGlzVmFsaWRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgdmFsaWQ/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGZhbHNlIGlmIGFyZ3VtZW50IGlzIEludmFsaWQgRGF0ZSBhbmQgdHJ1ZSBvdGhlcndpc2UuXG4gKiBBcmd1bWVudCBpcyBjb252ZXJ0ZWQgdG8gRGF0ZSB1c2luZyBgdG9EYXRlYC4gU2VlIFt0b0RhdGVdKGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvdG9EYXRlKVxuICogSW52YWxpZCBEYXRlIGlzIGEgRGF0ZSwgd2hvc2UgdGltZSB2YWx1ZSBpcyBOYU4uXG4gKlxuICogVGltZSB2YWx1ZSBvZiBEYXRlOiBodHRwOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjkuMS4xXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIHZhbGlkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgdmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoMjAxNCwgMSwgMzEpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgdmFsdWUsIGNvbnZlcnRpYmxlIGludG8gYSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZCgxMzkzODA0ODAwMDAwKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgnJykpXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkKGRhdGUpIHtcbiAgcmV0dXJuICEoKCFpc0RhdGUoZGF0ZSkgJiYgdHlwZW9mIGRhdGUgIT09IFwibnVtYmVyXCIpIHx8IGlzTmFOKCt0b0RhdGUoZGF0ZSkpKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc1ZhbGlkO1xuIiwKICAgICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN0YXJ0T2ZZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZlllYXJcbiAqIEBjYXRlZ29yeSBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYSB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgc3RhcnQgb2YgYSB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIHllYXIgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mWWVhcihuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDAwKSlcbiAqIC8vPT4gV2VkIEphbiAwMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mWWVhcihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgZGF0ZV8uc2V0RnVsbFllYXIoZGF0ZV8uZ2V0RnVsbFllYXIoKSwgMCwgMSk7XG4gIGRhdGVfLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZV87XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3RhcnRPZlllYXI7XG4iLAogICAgImNvbnN0IGZvcm1hdERpc3RhbmNlTG9jYWxlID0ge1xuICBsZXNzVGhhblhTZWNvbmRzOiB7XG4gICAgb25lOiBcImxlc3MgdGhhbiBhIHNlY29uZFwiLFxuICAgIG90aGVyOiBcImxlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kc1wiLFxuICB9LFxuXG4gIHhTZWNvbmRzOiB7XG4gICAgb25lOiBcIjEgc2Vjb25kXCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19IHNlY29uZHNcIixcbiAgfSxcblxuICBoYWxmQU1pbnV0ZTogXCJoYWxmIGEgbWludXRlXCIsXG5cbiAgbGVzc1RoYW5YTWludXRlczoge1xuICAgIG9uZTogXCJsZXNzIHRoYW4gYSBtaW51dGVcIixcbiAgICBvdGhlcjogXCJsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXNcIixcbiAgfSxcblxuICB4TWludXRlczoge1xuICAgIG9uZTogXCIxIG1pbnV0ZVwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSBtaW51dGVzXCIsXG4gIH0sXG5cbiAgYWJvdXRYSG91cnM6IHtcbiAgICBvbmU6IFwiYWJvdXQgMSBob3VyXCIsXG4gICAgb3RoZXI6IFwiYWJvdXQge3tjb3VudH19IGhvdXJzXCIsXG4gIH0sXG5cbiAgeEhvdXJzOiB7XG4gICAgb25lOiBcIjEgaG91clwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSBob3Vyc1wiLFxuICB9LFxuXG4gIHhEYXlzOiB7XG4gICAgb25lOiBcIjEgZGF5XCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19IGRheXNcIixcbiAgfSxcblxuICBhYm91dFhXZWVrczoge1xuICAgIG9uZTogXCJhYm91dCAxIHdlZWtcIixcbiAgICBvdGhlcjogXCJhYm91dCB7e2NvdW50fX0gd2Vla3NcIixcbiAgfSxcblxuICB4V2Vla3M6IHtcbiAgICBvbmU6IFwiMSB3ZWVrXCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19IHdlZWtzXCIsXG4gIH0sXG5cbiAgYWJvdXRYTW9udGhzOiB7XG4gICAgb25lOiBcImFib3V0IDEgbW9udGhcIixcbiAgICBvdGhlcjogXCJhYm91dCB7e2NvdW50fX0gbW9udGhzXCIsXG4gIH0sXG5cbiAgeE1vbnRoczoge1xuICAgIG9uZTogXCIxIG1vbnRoXCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19IG1vbnRoc1wiLFxuICB9LFxuXG4gIGFib3V0WFllYXJzOiB7XG4gICAgb25lOiBcImFib3V0IDEgeWVhclwiLFxuICAgIG90aGVyOiBcImFib3V0IHt7Y291bnR9fSB5ZWFyc1wiLFxuICB9LFxuXG4gIHhZZWFyczoge1xuICAgIG9uZTogXCIxIHllYXJcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0geWVhcnNcIixcbiAgfSxcblxuICBvdmVyWFllYXJzOiB7XG4gICAgb25lOiBcIm92ZXIgMSB5ZWFyXCIsXG4gICAgb3RoZXI6IFwib3ZlciB7e2NvdW50fX0geWVhcnNcIixcbiAgfSxcblxuICBhbG1vc3RYWWVhcnM6IHtcbiAgICBvbmU6IFwiYWxtb3N0IDEgeWVhclwiLFxuICAgIG90aGVyOiBcImFsbW9zdCB7e2NvdW50fX0geWVhcnNcIixcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXREaXN0YW5jZSA9ICh0b2tlbiwgY291bnQsIG9wdGlvbnMpID0+IHtcbiAgbGV0IHJlc3VsdDtcblxuICBjb25zdCB0b2tlblZhbHVlID0gZm9ybWF0RGlzdGFuY2VMb2NhbGVbdG9rZW5dO1xuICBpZiAodHlwZW9mIHRva2VuVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlO1xuICB9IGVsc2UgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vbmU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdG9rZW5WYWx1ZS5vdGhlci5yZXBsYWNlKFwie3tjb3VudH19XCIsIGNvdW50LnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnM/LmFkZFN1ZmZpeCkge1xuICAgIGlmIChvcHRpb25zLmNvbXBhcmlzb24gJiYgb3B0aW9ucy5jb21wYXJpc29uID4gMCkge1xuICAgICAgcmV0dXJuIFwiaW4gXCIgKyByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyBcIiBhZ29cIjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRm9ybWF0TG9uZ0ZuKGFyZ3MpIHtcbiAgcmV0dXJuIChvcHRpb25zID0ge30pID0+IHtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICBjb25zdCB3aWR0aCA9IG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICBjb25zdCBmb3JtYXQgPSBhcmdzLmZvcm1hdHNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0c1thcmdzLmRlZmF1bHRXaWR0aF07XG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfTtcbn1cbiIsCiAgICAiaW1wb3J0IHsgYnVpbGRGb3JtYXRMb25nRm4gfSBmcm9tIFwiLi4vLi4vX2xpYi9idWlsZEZvcm1hdExvbmdGbi5qc1wiO1xuXG5jb25zdCBkYXRlRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJFRUVFLCBNTU1NIGRvLCB5XCIsXG4gIGxvbmc6IFwiTU1NTSBkbywgeVwiLFxuICBtZWRpdW06IFwiTU1NIGQsIHlcIixcbiAgc2hvcnQ6IFwiTU0vZGQveXl5eVwiLFxufTtcblxuY29uc3QgdGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6IFwiaDptbTpzcyBhIHp6enpcIixcbiAgbG9uZzogXCJoOm1tOnNzIGEgelwiLFxuICBtZWRpdW06IFwiaDptbTpzcyBhXCIsXG4gIHNob3J0OiBcImg6bW0gYVwiLFxufTtcblxuY29uc3QgZGF0ZVRpbWVGb3JtYXRzID0ge1xuICBmdWxsOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbG9uZzogXCJ7e2RhdGV9fSAnYXQnIHt7dGltZX19XCIsXG4gIG1lZGl1bTogXCJ7e2RhdGV9fSwge3t0aW1lfX1cIixcbiAgc2hvcnQ6IFwie3tkYXRlfX0sIHt7dGltZX19XCIsXG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0TG9uZyA9IHtcbiAgZGF0ZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJmdWxsXCIsXG4gIH0pLFxuXG4gIHRpbWU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHtcbiAgICBmb3JtYXRzOiB0aW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6IFwiZnVsbFwiLFxuICB9KSxcblxuICBkYXRlVGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cyxcbiAgICBkZWZhdWx0V2lkdGg6IFwiZnVsbFwiLFxuICB9KSxcbn07XG4iLAogICAgImNvbnN0IGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogXCJQXCIsXG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0UmVsYXRpdmUgPSAodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSA9PlxuICBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG4iLAogICAgIi8qKlxuICogVGhlIGxvY2FsaXplIGZ1bmN0aW9uIGFyZ3VtZW50IGNhbGxiYWNrIHdoaWNoIGFsbG93cyB0byBjb252ZXJ0IHJhdyB2YWx1ZSB0b1xuICogdGhlIGFjdHVhbCB0eXBlLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKlxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCB2YWx1ZVxuICovXG5cbi8qKlxuICogVGhlIG1hcCBvZiBsb2NhbGl6ZWQgdmFsdWVzIGZvciBlYWNoIHdpZHRoLlxuICovXG5cbi8qKlxuICogVGhlIGluZGV4IHR5cGUgb2YgdGhlIGxvY2FsZSB1bml0IHZhbHVlLiBJdCB0eXBlcyBjb252ZXJzaW9uIG9mIHVuaXRzIG9mXG4gKiB2YWx1ZXMgdGhhdCBkb24ndCBzdGFydCBhdCAwIChpLmUuIHF1YXJ0ZXJzKS5cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSB1bml0IHZhbHVlIHRvIHRoZSB0dXBsZSBvZiB2YWx1ZXMuXG4gKi9cblxuLyoqXG4gKiBUaGUgdHVwbGUgb2YgbG9jYWxpemVkIGVyYSB2YWx1ZXMuIFRoZSBmaXJzdCBlbGVtZW50IHJlcHJlc2VudHMgQkMsXG4gKiB0aGUgc2Vjb25kIGVsZW1lbnQgcmVwcmVzZW50cyBBRC5cbiAqL1xuXG4vKipcbiAqIFRoZSB0dXBsZSBvZiBsb2NhbGl6ZWQgcXVhcnRlciB2YWx1ZXMuIFRoZSBmaXJzdCBlbGVtZW50IHJlcHJlc2VudHMgUTEuXG4gKi9cblxuLyoqXG4gKiBUaGUgdHVwbGUgb2YgbG9jYWxpemVkIGRheSB2YWx1ZXMuIFRoZSBmaXJzdCBlbGVtZW50IHJlcHJlc2VudHMgU3VuZGF5LlxuICovXG5cbi8qKlxuICogVGhlIHR1cGxlIG9mIGxvY2FsaXplZCBtb250aCB2YWx1ZXMuIFRoZSBmaXJzdCBlbGVtZW50IHJlcHJlc2VudHMgSmFudWFyeS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMb2NhbGl6ZUZuKGFyZ3MpIHtcbiAgcmV0dXJuICh2YWx1ZSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBvcHRpb25zPy5jb250ZXh0ID8gU3RyaW5nKG9wdGlvbnMuY29udGV4dCkgOiBcInN0YW5kYWxvbmVcIjtcblxuICAgIGxldCB2YWx1ZXNBcnJheTtcbiAgICBpZiAoY29udGV4dCA9PT0gXCJmb3JtYXR0aW5nXCIgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7XG4gICAgICBjb25zdCBkZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRGb3JtYXR0aW5nV2lkdGggfHwgYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICBjb25zdCB3aWR0aCA9IG9wdGlvbnM/LndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogZGVmYXVsdFdpZHRoO1xuXG4gICAgICB2YWx1ZXNBcnJheSA9XG4gICAgICAgIGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1t3aWR0aF0gfHwgYXJncy5mb3JtYXR0aW5nVmFsdWVzW2RlZmF1bHRXaWR0aF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgY29uc3Qgd2lkdGggPSBvcHRpb25zPy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuXG4gICAgICB2YWx1ZXNBcnJheSA9IGFyZ3MudmFsdWVzW3dpZHRoXSB8fCBhcmdzLnZhbHVlc1tkZWZhdWx0V2lkdGhdO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBGb3Igc29tZSByZWFzb24gVHlwZVNjcmlwdCBqdXN0IGRvbid0IHdhbnQgdG8gbWF0Y2ggaXQsIG5vIG1hdHRlciBob3cgaGFyZCB3ZSB0cnkuIEkgY2hhbGxlbmdlIHlvdSB0byB0cnkgdG8gcmVtb3ZlIGl0IVxuICAgIHJldHVybiB2YWx1ZXNBcnJheVtpbmRleF07XG4gIH07XG59XG4iLAogICAgImltcG9ydCB7IGJ1aWxkTG9jYWxpemVGbiB9IGZyb20gXCIuLi8uLi9fbGliL2J1aWxkTG9jYWxpemVGbi5qc1wiO1xuXG5jb25zdCBlcmFWYWx1ZXMgPSB7XG4gIG5hcnJvdzogW1wiQlwiLCBcIkFcIl0sXG4gIGFiYnJldmlhdGVkOiBbXCJCQ1wiLCBcIkFEXCJdLFxuICB3aWRlOiBbXCJCZWZvcmUgQ2hyaXN0XCIsIFwiQW5ubyBEb21pbmlcIl0sXG59O1xuXG5jb25zdCBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIl0sXG4gIGFiYnJldmlhdGVkOiBbXCJRMVwiLCBcIlEyXCIsIFwiUTNcIiwgXCJRNFwiXSxcbiAgd2lkZTogW1wiMXN0IHF1YXJ0ZXJcIiwgXCIybmQgcXVhcnRlclwiLCBcIjNyZCBxdWFydGVyXCIsIFwiNHRoIHF1YXJ0ZXJcIl0sXG59O1xuXG4vLyBOb3RlOiBpbiBFbmdsaXNoLCB0aGUgbmFtZXMgb2YgZGF5cyBvZiB0aGUgd2VlayBhbmQgbW9udGhzIGFyZSBjYXBpdGFsaXplZC5cbi8vIElmIHlvdSBhcmUgbWFraW5nIGEgbmV3IGxvY2FsZSBiYXNlZCBvbiB0aGlzIG9uZSwgY2hlY2sgaWYgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhlIGxhbmd1YWdlIHlvdSdyZSB3b3JraW5nIG9uLlxuLy8gR2VuZXJhbGx5LCBmb3JtYXR0ZWQgZGF0ZXMgc2hvdWxkIGxvb2sgbGlrZSB0aGV5IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgc2VudGVuY2UsXG4vLyBlLmcuIGluIFNwYW5pc2ggbGFuZ3VhZ2UgdGhlIHdlZWtkYXlzIGFuZCBtb250aHMgc2hvdWxkIGJlIGluIHRoZSBsb3dlcmNhc2UuXG5jb25zdCBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbXCJKXCIsIFwiRlwiLCBcIk1cIiwgXCJBXCIsIFwiTVwiLCBcIkpcIiwgXCJKXCIsIFwiQVwiLCBcIlNcIiwgXCJPXCIsIFwiTlwiLCBcIkRcIl0sXG4gIGFiYnJldmlhdGVkOiBbXG4gICAgXCJKYW5cIixcbiAgICBcIkZlYlwiLFxuICAgIFwiTWFyXCIsXG4gICAgXCJBcHJcIixcbiAgICBcIk1heVwiLFxuICAgIFwiSnVuXCIsXG4gICAgXCJKdWxcIixcbiAgICBcIkF1Z1wiLFxuICAgIFwiU2VwXCIsXG4gICAgXCJPY3RcIixcbiAgICBcIk5vdlwiLFxuICAgIFwiRGVjXCIsXG4gIF0sXG5cbiAgd2lkZTogW1xuICAgIFwiSmFudWFyeVwiLFxuICAgIFwiRmVicnVhcnlcIixcbiAgICBcIk1hcmNoXCIsXG4gICAgXCJBcHJpbFwiLFxuICAgIFwiTWF5XCIsXG4gICAgXCJKdW5lXCIsXG4gICAgXCJKdWx5XCIsXG4gICAgXCJBdWd1c3RcIixcbiAgICBcIlNlcHRlbWJlclwiLFxuICAgIFwiT2N0b2JlclwiLFxuICAgIFwiTm92ZW1iZXJcIixcbiAgICBcIkRlY2VtYmVyXCIsXG4gIF0sXG59O1xuXG5jb25zdCBkYXlWYWx1ZXMgPSB7XG4gIG5hcnJvdzogW1wiU1wiLCBcIk1cIiwgXCJUXCIsIFwiV1wiLCBcIlRcIiwgXCJGXCIsIFwiU1wiXSxcbiAgc2hvcnQ6IFtcIlN1XCIsIFwiTW9cIiwgXCJUdVwiLCBcIldlXCIsIFwiVGhcIiwgXCJGclwiLCBcIlNhXCJdLFxuICBhYmJyZXZpYXRlZDogW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLFxuICB3aWRlOiBbXG4gICAgXCJTdW5kYXlcIixcbiAgICBcIk1vbmRheVwiLFxuICAgIFwiVHVlc2RheVwiLFxuICAgIFwiV2VkbmVzZGF5XCIsXG4gICAgXCJUaHVyc2RheVwiLFxuICAgIFwiRnJpZGF5XCIsXG4gICAgXCJTYXR1cmRheVwiLFxuICBdLFxufTtcblxuY29uc3QgZGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogXCJhXCIsXG4gICAgcG06IFwicFwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pXCIsXG4gICAgbm9vbjogXCJuXCIsXG4gICAgbW9ybmluZzogXCJtb3JuaW5nXCIsXG4gICAgYWZ0ZXJub29uOiBcImFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcIm5pZ2h0XCIsXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06IFwiQU1cIixcbiAgICBwbTogXCJQTVwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gICAgbm9vbjogXCJub29uXCIsXG4gICAgbW9ybmluZzogXCJtb3JuaW5nXCIsXG4gICAgYWZ0ZXJub29uOiBcImFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcIm5pZ2h0XCIsXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogXCJhLm0uXCIsXG4gICAgcG06IFwicC5tLlwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gICAgbm9vbjogXCJub29uXCIsXG4gICAgbW9ybmluZzogXCJtb3JuaW5nXCIsXG4gICAgYWZ0ZXJub29uOiBcImFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcIm5pZ2h0XCIsXG4gIH0sXG59O1xuXG5jb25zdCBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogXCJhXCIsXG4gICAgcG06IFwicFwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pXCIsXG4gICAgbm9vbjogXCJuXCIsXG4gICAgbW9ybmluZzogXCJpbiB0aGUgbW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJpbiB0aGUgYWZ0ZXJub29uXCIsXG4gICAgZXZlbmluZzogXCJpbiB0aGUgZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcImF0IG5pZ2h0XCIsXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06IFwiQU1cIixcbiAgICBwbTogXCJQTVwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gICAgbm9vbjogXCJub29uXCIsXG4gICAgbW9ybmluZzogXCJpbiB0aGUgbW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJpbiB0aGUgYWZ0ZXJub29uXCIsXG4gICAgZXZlbmluZzogXCJpbiB0aGUgZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcImF0IG5pZ2h0XCIsXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogXCJhLm0uXCIsXG4gICAgcG06IFwicC5tLlwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gICAgbm9vbjogXCJub29uXCIsXG4gICAgbW9ybmluZzogXCJpbiB0aGUgbW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJpbiB0aGUgYWZ0ZXJub29uXCIsXG4gICAgZXZlbmluZzogXCJpbiB0aGUgZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcImF0IG5pZ2h0XCIsXG4gIH0sXG59O1xuXG5jb25zdCBvcmRpbmFsTnVtYmVyID0gKGRpcnR5TnVtYmVyLCBfb3B0aW9ucykgPT4ge1xuICBjb25zdCBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgY29uc3QgcmVtMTAwID0gbnVtYmVyICUgMTAwO1xuICBpZiAocmVtMTAwID4gMjAgfHwgcmVtMTAwIDwgMTApIHtcbiAgICBzd2l0Y2ggKHJlbTEwMCAlIDEwKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBcInN0XCI7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBcIm5kXCI7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBcInJkXCI7XG4gICAgfVxuICB9XG4gIHJldHVybiBudW1iZXIgKyBcInRoXCI7XG59O1xuXG5leHBvcnQgY29uc3QgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXIsXG5cbiAgZXJhOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZXJhVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gIH0pLFxuXG4gIHF1YXJ0ZXI6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBxdWFydGVyVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gICAgYXJndW1lbnRDYWxsYmFjazogKHF1YXJ0ZXIpID0+IHF1YXJ0ZXIgLSAxLFxuICB9KSxcblxuICBtb250aDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IG1vbnRoVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gIH0pLFxuXG4gIGRheTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiLFxuICB9KSxcblxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiBcIndpZGVcIixcbiAgICBmb3JtYXR0aW5nVmFsdWVzOiBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRGb3JtYXR0aW5nV2lkdGg6IFwid2lkZVwiLFxuICB9KSxcbn07XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBidWlsZE1hdGNoRm4oYXJncykge1xuICByZXR1cm4gKHN0cmluZywgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgY29uc3Qgd2lkdGggPSBvcHRpb25zLndpZHRoO1xuXG4gICAgY29uc3QgbWF0Y2hQYXR0ZXJuID1cbiAgICAgICh3aWR0aCAmJiBhcmdzLm1hdGNoUGF0dGVybnNbd2lkdGhdKSB8fFxuICAgICAgYXJncy5tYXRjaFBhdHRlcm5zW2FyZ3MuZGVmYXVsdE1hdGNoV2lkdGhdO1xuICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKG1hdGNoUGF0dGVybik7XG5cbiAgICBpZiAoIW1hdGNoUmVzdWx0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbWF0Y2hlZFN0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuXG4gICAgY29uc3QgcGFyc2VQYXR0ZXJucyA9XG4gICAgICAod2lkdGggJiYgYXJncy5wYXJzZVBhdHRlcm5zW3dpZHRoXSkgfHxcbiAgICAgIGFyZ3MucGFyc2VQYXR0ZXJuc1thcmdzLmRlZmF1bHRQYXJzZVdpZHRoXTtcblxuICAgIGNvbnN0IGtleSA9IEFycmF5LmlzQXJyYXkocGFyc2VQYXR0ZXJucylcbiAgICAgID8gZmluZEluZGV4KHBhcnNlUGF0dGVybnMsIChwYXR0ZXJuKSA9PiBwYXR0ZXJuLnRlc3QobWF0Y2hlZFN0cmluZykpXG4gICAgICA6IC8vIFtUT0RPXSAtLSBJIGNoYWxsZW5nZSB5b3UgdG8gZml4IHRoZSB0eXBlXG4gICAgICAgIGZpbmRLZXkocGFyc2VQYXR0ZXJucywgKHBhdHRlcm4pID0+IHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKSk7XG5cbiAgICBsZXQgdmFsdWU7XG5cbiAgICB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhrZXkpIDoga2V5O1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrXG4gICAgICA/IC8vIFtUT0RPXSAtLSBJIGNoYWxsZW5nZSB5b3UgdG8gZml4IHRoZSB0eXBlXG4gICAgICAgIG9wdGlvbnMudmFsdWVDYWxsYmFjayh2YWx1ZSlcbiAgICAgIDogdmFsdWU7XG5cbiAgICBjb25zdCByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcblxuICAgIHJldHVybiB7IHZhbHVlLCByZXN0IH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKFxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJlxuICAgICAgcHJlZGljYXRlKG9iamVjdFtrZXldKVxuICAgICkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgZm9yIChsZXQga2V5ID0gMDsga2V5IDwgYXJyYXkubGVuZ3RoOyBrZXkrKykge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5XSkpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBidWlsZE1hdGNoUGF0dGVybkZuKGFyZ3MpIHtcbiAgcmV0dXJuIChzdHJpbmcsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MubWF0Y2hQYXR0ZXJuKTtcbiAgICBpZiAoIW1hdGNoUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG5cbiAgICBjb25zdCBwYXJzZVJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLnBhcnNlUGF0dGVybik7XG4gICAgaWYgKCFwYXJzZVJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgbGV0IHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrXG4gICAgICA/IGFyZ3MudmFsdWVDYWxsYmFjayhwYXJzZVJlc3VsdFswXSlcbiAgICAgIDogcGFyc2VSZXN1bHRbMF07XG5cbiAgICAvLyBbVE9ET10gSSBjaGFsbGVuZ2UgeW91IHRvIGZpeCB0aGUgdHlwZVxuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrID8gb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgY29uc3QgcmVzdCA9IHN0cmluZy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7XG5cbiAgICByZXR1cm4geyB2YWx1ZSwgcmVzdCB9O1xuICB9O1xufVxuIiwKICAgICJpbXBvcnQgeyBidWlsZE1hdGNoRm4gfSBmcm9tIFwiLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4uanNcIjtcbmltcG9ydCB7IGJ1aWxkTWF0Y2hQYXR0ZXJuRm4gfSBmcm9tIFwiLi4vLi4vX2xpYi9idWlsZE1hdGNoUGF0dGVybkZuLmpzXCI7XG5cbmNvbnN0IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXihcXGQrKSh0aHxzdHxuZHxyZCk/L2k7XG5jb25zdCBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL1xcZCsvaTtcblxuY29uc3QgbWF0Y2hFcmFQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihifGEpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihiXFwuP1xccz9jXFwuP3xiXFwuP1xccz9jXFwuP1xccz9lXFwuP3xhXFwuP1xccz9kXFwuP3xjXFwuP1xccz9lXFwuPykvaSxcbiAgd2lkZTogL14oYmVmb3JlIGNocmlzdHxiZWZvcmUgY29tbW9uIGVyYXxhbm5vIGRvbWluaXxjb21tb24gZXJhKS9pLFxufTtcbmNvbnN0IHBhcnNlRXJhUGF0dGVybnMgPSB7XG4gIGFueTogWy9eYi9pLCAvXihhfGMpL2ldLFxufTtcblxuY29uc3QgbWF0Y2hRdWFydGVyUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bMTIzNF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9ecVsxMjM0XS9pLFxuICB3aWRlOiAvXlsxMjM0XSh0aHxzdHxuZHxyZCk/IHF1YXJ0ZXIvaSxcbn07XG5jb25zdCBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgYW55OiBbLzEvaSwgLzIvaSwgLzMvaSwgLzQvaV0sXG59O1xuXG5jb25zdCBtYXRjaE1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bamZtYXNvbmRdL2ksXG4gIGFiYnJldmlhdGVkOiAvXihqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYykvaSxcbiAgd2lkZTogL14oamFudWFyeXxmZWJydWFyeXxtYXJjaHxhcHJpbHxtYXl8anVuZXxqdWx5fGF1Z3VzdHxzZXB0ZW1iZXJ8b2N0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaSxcbn07XG5jb25zdCBwYXJzZU1vbnRoUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogW1xuICAgIC9eai9pLFxuICAgIC9eZi9pLFxuICAgIC9ebS9pLFxuICAgIC9eYS9pLFxuICAgIC9ebS9pLFxuICAgIC9eai9pLFxuICAgIC9eai9pLFxuICAgIC9eYS9pLFxuICAgIC9ecy9pLFxuICAgIC9eby9pLFxuICAgIC9ebi9pLFxuICAgIC9eZC9pLFxuICBdLFxuXG4gIGFueTogW1xuICAgIC9eamEvaSxcbiAgICAvXmYvaSxcbiAgICAvXm1hci9pLFxuICAgIC9eYXAvaSxcbiAgICAvXm1heS9pLFxuICAgIC9eanVuL2ksXG4gICAgL15qdWwvaSxcbiAgICAvXmF1L2ksXG4gICAgL15zL2ksXG4gICAgL15vL2ksXG4gICAgL15uL2ksXG4gICAgL15kL2ksXG4gIF0sXG59O1xuXG5jb25zdCBtYXRjaERheVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eW3NtdHdmXS9pLFxuICBzaG9ydDogL14oc3V8bW98dHV8d2V8dGh8ZnJ8c2EpL2ksXG4gIGFiYnJldmlhdGVkOiAvXihzdW58bW9ufHR1ZXx3ZWR8dGh1fGZyaXxzYXQpL2ksXG4gIHdpZGU6IC9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pLFxufTtcbmNvbnN0IHBhcnNlRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogWy9ecy9pLCAvXm0vaSwgL150L2ksIC9edy9pLCAvXnQvaSwgL15mL2ksIC9ecy9pXSxcbiAgYW55OiBbL15zdS9pLCAvXm0vaSwgL150dS9pLCAvXncvaSwgL150aC9pLCAvXmYvaSwgL15zYS9pXSxcbn07XG5cbmNvbnN0IG1hdGNoRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL14oYXxwfG1pfG58KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxuICBhbnk6IC9eKFthcF1cXC4/XFxzP21cXC4/fG1pZG5pZ2h0fG5vb258KGluIHRoZXxhdCkgKG1vcm5pbmd8YWZ0ZXJub29ufGV2ZW5pbmd8bmlnaHQpKS9pLFxufTtcbmNvbnN0IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMgPSB7XG4gIGFueToge1xuICAgIGFtOiAvXmEvaSxcbiAgICBwbTogL15wL2ksXG4gICAgbWlkbmlnaHQ6IC9ebWkvaSxcbiAgICBub29uOiAvXm5vL2ksXG4gICAgbW9ybmluZzogL21vcm5pbmcvaSxcbiAgICBhZnRlcm5vb246IC9hZnRlcm5vb24vaSxcbiAgICBldmVuaW5nOiAvZXZlbmluZy9pLFxuICAgIG5pZ2h0OiAvbmlnaHQvaSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBtYXRjaCA9IHtcbiAgb3JkaW5hbE51bWJlcjogYnVpbGRNYXRjaFBhdHRlcm5Gbih7XG4gICAgbWF0Y2hQYXR0ZXJuOiBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHBhcnNlUGF0dGVybjogcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybixcbiAgICB2YWx1ZUNhbGxiYWNrOiAodmFsdWUpID0+IHBhcnNlSW50KHZhbHVlLCAxMCksXG4gIH0pLFxuXG4gIGVyYTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaEVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcIndpZGVcIixcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZUVyYVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiBcImFueVwiLFxuICB9KSxcblxuICBxdWFydGVyOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcIndpZGVcIixcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZVF1YXJ0ZXJQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIixcbiAgICB2YWx1ZUNhbGxiYWNrOiAoaW5kZXgpID0+IGluZGV4ICsgMSxcbiAgfSksXG5cbiAgbW9udGg6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hNb250aFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcIndpZGVcIixcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZU1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gIH0pLFxuXG4gIGRheTogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcIndpZGVcIixcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiBcImFueVwiLFxuICB9KSxcblxuICBkYXlQZXJpb2Q6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyxcbiAgICBkZWZhdWx0TWF0Y2hXaWR0aDogXCJhbnlcIixcbiAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiBcImFueVwiLFxuICB9KSxcbn07XG4iLAogICAgImltcG9ydCB7IGZvcm1hdERpc3RhbmNlIH0gZnJvbSBcIi4vZW4tVVMvX2xpYi9mb3JtYXREaXN0YW5jZS5qc1wiO1xuaW1wb3J0IHsgZm9ybWF0TG9uZyB9IGZyb20gXCIuL2VuLVVTL19saWIvZm9ybWF0TG9uZy5qc1wiO1xuaW1wb3J0IHsgZm9ybWF0UmVsYXRpdmUgfSBmcm9tIFwiLi9lbi1VUy9fbGliL2Zvcm1hdFJlbGF0aXZlLmpzXCI7XG5pbXBvcnQgeyBsb2NhbGl6ZSB9IGZyb20gXCIuL2VuLVVTL19saWIvbG9jYWxpemUuanNcIjtcbmltcG9ydCB7IG1hdGNoIH0gZnJvbSBcIi4vZW4tVVMvX2xpYi9tYXRjaC5qc1wiO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBMb2NhbGVzXG4gKiBAc3VtbWFyeSBFbmdsaXNoIGxvY2FsZSAoVW5pdGVkIFN0YXRlcykuXG4gKiBAbGFuZ3VhZ2UgRW5nbGlzaFxuICogQGlzby02MzktMiBlbmdcbiAqIEBhdXRob3IgU2FzaGEgS29zcyBbQGtvc3Nub2NvcnBdKGh0dHBzOi8vZ2l0aHViLmNvbS9rb3Nzbm9jb3JwKVxuICogQGF1dGhvciBMZXNoYSBLb3NzIFtAbGVzaGFrb3NzXShodHRwczovL2dpdGh1Yi5jb20vbGVzaGFrb3NzKVxuICovXG5leHBvcnQgY29uc3QgZW5VUyA9IHtcbiAgY29kZTogXCJlbi1VU1wiLFxuICBmb3JtYXREaXN0YW5jZTogZm9ybWF0RGlzdGFuY2UsXG4gIGZvcm1hdExvbmc6IGZvcm1hdExvbmcsXG4gIGZvcm1hdFJlbGF0aXZlOiBmb3JtYXRSZWxhdGl2ZSxcbiAgbG9jYWxpemU6IGxvY2FsaXplLFxuICBtYXRjaDogbWF0Y2gsXG4gIG9wdGlvbnM6IHtcbiAgICB3ZWVrU3RhcnRzT246IDAgLyogU3VuZGF5ICovLFxuICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogMSxcbiAgfSxcbn07XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZW5VUztcbiIsCiAgICAiaW1wb3J0IHsgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzIH0gZnJvbSBcIi4vZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mWWVhciB9IGZyb20gXCIuL3N0YXJ0T2ZZZWFyLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGdldERheU9mWWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGdldERheU9mWWVhclxuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIGRheSBvZiB0aGUgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgZGF5IG9mIHRoZSB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZGF5IG9mIHllYXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggZGF5IG9mIHRoZSB5ZWFyIGlzIDIgSnVseSAyMDE0P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0RGF5T2ZZZWFyKG5ldyBEYXRlKDIwMTQsIDYsIDIpKVxuICogLy89PiAxODNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERheU9mWWVhcihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhfZGF0ZSwgc3RhcnRPZlllYXIoX2RhdGUpKTtcbiAgY29uc3QgZGF5T2ZZZWFyID0gZGlmZiArIDE7XG4gIHJldHVybiBkYXlPZlllYXI7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0RGF5T2ZZZWFyO1xuIiwKICAgICJpbXBvcnQgeyBtaWxsaXNlY29uZHNJbldlZWsgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZJU09XZWVrIH0gZnJvbSBcIi4vc3RhcnRPZklTT1dlZWsuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZJU09XZWVrWWVhciB9IGZyb20gXCIuL3N0YXJ0T2ZJU09XZWVrWWVhci5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBnZXRJU09XZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZ2V0SVNPV2Vla1xuICogQGNhdGVnb3J5IElTTyBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgSVNPIHdlZWsgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIElTTyB3ZWVrIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIElTTyB3ZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIHdlZWsgb2YgdGhlIElTTy13ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDIgSmFudWFyeSAyMDA1P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0SVNPV2VlayhuZXcgRGF0ZSgyMDA1LCAwLCAyKSlcbiAqIC8vPT4gNTNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldElTT1dlZWsoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IGRpZmYgPSArc3RhcnRPZklTT1dlZWsoX2RhdGUpIC0gK3N0YXJ0T2ZJU09XZWVrWWVhcihfZGF0ZSk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiB3ZWVrcyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIGJlY2F1c2UgdGhlIG51bWJlciBvZlxuICAvLyBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudCAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZlxuICAvLyB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpLlxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gbWlsbGlzZWNvbmRzSW5XZWVrKSArIDE7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0SVNPV2VlaztcbiIsCiAgICAiaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi9fbGliL2RlZmF1bHRPcHRpb25zLmpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZldlZWsgfSBmcm9tIFwiLi9zdGFydE9mV2Vlay5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBnZXRXZWVrWWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGdldFdlZWtZZWFyXG4gKiBAY2F0ZWdvcnkgV2Vlay1OdW1iZXJpbmcgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgZXhhY3QgY2FsY3VsYXRpb24gZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mXG4gKiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gICh3aGljaCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlaylcbiAqIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgICh3aGljaCBpcyB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzIGFsd2F5cyBpblxuICogdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHdlZWstbnVtYmVyaW5nIHllYXIpXG4gKlxuICogV2VlayBudW1iZXJpbmc6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlZWsjVGhlX0lTT193ZWVrX2RhdGVfc3lzdGVtXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICpcbiAqIEByZXR1cm5zIFRoZSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIHdlZWsgbnVtYmVyaW5nIHllYXIgaXMgMjYgRGVjZW1iZXIgMjAwNCB3aXRoIHRoZSBkZWZhdWx0IHNldHRpbmdzP1xuICogY29uc3QgcmVzdWx0ID0gZ2V0V2Vla1llYXIobmV3IERhdGUoMjAwNCwgMTEsIDI2KSlcbiAqIC8vPT4gMjAwNVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDI2IERlY2VtYmVyIDIwMDQgaWYgd2VlayBzdGFydHMgb24gU2F0dXJkYXk/XG4gKiBjb25zdCByZXN1bHQgPSBnZXRXZWVrWWVhcihuZXcgRGF0ZSgyMDA0LCAxMSwgMjYpLCB7IHdlZWtTdGFydHNPbjogNiB9KVxuICogLy89PiAyMDA0XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIHdlZWsgbnVtYmVyaW5nIHllYXIgaXMgMjYgRGVjZW1iZXIgMjAwNCBpZiB0aGUgZmlyc3Qgd2VlayBjb250YWlucyA0IEphbnVhcnk/XG4gKiBjb25zdCByZXN1bHQgPSBnZXRXZWVrWWVhcihuZXcgRGF0ZSgyMDA0LCAxMSwgMjYpLCB7IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogNCB9KVxuICogLy89PiAyMDA0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXZWVrWWVhcihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICBjb25zdCBmaXJzdFdlZWtDb250YWluc0RhdGUgPVxuICAgIG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgZGVmYXVsdE9wdGlvbnMubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICAxO1xuXG4gIGNvbnN0IGZpcnN0V2Vla09mTmV4dFllYXIgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldEZ1bGxZZWFyKHllYXIgKyAxLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICBjb25zdCBzdGFydE9mTmV4dFllYXIgPSBzdGFydE9mV2VlayhmaXJzdFdlZWtPZk5leHRZZWFyLCBvcHRpb25zKTtcblxuICBjb25zdCBmaXJzdFdlZWtPZlRoaXNZZWFyID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICBjb25zdCBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mV2VlayhmaXJzdFdlZWtPZlRoaXNZZWFyLCBvcHRpb25zKTtcblxuICBpZiAoK19kYXRlID49ICtzdGFydE9mTmV4dFllYXIpIHtcbiAgICByZXR1cm4geWVhciArIDE7XG4gIH0gZWxzZSBpZiAoK19kYXRlID49ICtzdGFydE9mVGhpc1llYXIpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geWVhciAtIDE7XG4gIH1cbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXRXZWVrWWVhcjtcbiIsCiAgICAiaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi9fbGliL2RlZmF1bHRPcHRpb25zLmpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuaW1wb3J0IHsgZ2V0V2Vla1llYXIgfSBmcm9tIFwiLi9nZXRXZWVrWWVhci5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZldlZWsgfSBmcm9tIFwiLi9zdGFydE9mV2Vlay5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZldlZWtZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZldlZWtZZWFyXG4gKiBAY2F0ZWdvcnkgV2Vlay1OdW1iZXJpbmcgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhci5cbiAqIFRoZSBleGFjdCBjYWxjdWxhdGlvbiBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2ZcbiAqIGBvcHRpb25zLndlZWtTdGFydHNPbmAgKHdoaWNoIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrKVxuICogYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKHdoaWNoIGlzIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXMgYWx3YXlzIGluXG4gKiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhcilcbiAqXG4gKiBXZWVrIG51bWJlcmluZzogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2VlayNUaGVfSVNPX3dlZWtfZGF0ZV9zeXN0ZW1cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGEgd2Vlay1udW1iZXJpbmcgeWVhclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYW4gYSB3ZWVrLW51bWJlcmluZyB5ZWFyIGZvciAyIEp1bHkgMjAwNSB3aXRoIGRlZmF1bHQgc2V0dGluZ3M6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mV2Vla1llYXIobmV3IERhdGUoMjAwNSwgNiwgMikpXG4gKiAvLz0+IFN1biBEZWMgMjYgMjAwNCAwMDowMDowMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSB3ZWVrLW51bWJlcmluZyB5ZWFyIGZvciAyIEp1bHkgMjAwNVxuICogLy8gaWYgTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2Ygd2Vla1xuICogLy8gYW5kIDQgSmFudWFyeSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXI6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mV2Vla1llYXIobmV3IERhdGUoMjAwNSwgNiwgMiksIHtcbiAqICAgd2Vla1N0YXJ0c09uOiAxLFxuICogICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDRcbiAqIH0pXG4gKiAvLz0+IE1vbiBKYW4gMDMgMjAwNSAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRPZldlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICBjb25zdCBmaXJzdFdlZWtDb250YWluc0RhdGUgPVxuICAgIG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgZGVmYXVsdE9wdGlvbnMubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICAxO1xuXG4gIGNvbnN0IHllYXIgPSBnZXRXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgY29uc3QgZmlyc3RXZWVrID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTtcbiAgZmlyc3RXZWVrLnNldEZ1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vlay5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgY29uc3QgX2RhdGUgPSBzdGFydE9mV2VlayhmaXJzdFdlZWssIG9wdGlvbnMpO1xuICByZXR1cm4gX2RhdGU7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3RhcnRPZldlZWtZZWFyO1xuIiwKICAgICJpbXBvcnQgeyBtaWxsaXNlY29uZHNJbldlZWsgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZXZWVrIH0gZnJvbSBcIi4vc3RhcnRPZldlZWsuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZXZWVrWWVhciB9IGZyb20gXCIuL3N0YXJ0T2ZXZWVrWWVhci5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBnZXRXZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZ2V0V2Vla1xuICogQGNhdGVnb3J5IFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBsb2NhbCB3ZWVrIGluZGV4IG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBsb2NhbCB3ZWVrIGluZGV4IG9mIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIGV4YWN0IGNhbGN1bGF0aW9uIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZlxuICogYG9wdGlvbnMud2Vla1N0YXJ0c09uYCAod2hpY2ggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWspXG4gKiBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAod2hpY2ggaXMgdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpcyBhbHdheXMgaW5cbiAqIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB3ZWVrLW51bWJlcmluZyB5ZWFyKVxuICpcbiAqIFdlZWsgbnVtYmVyaW5nOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWVrI1RoZV9JU09fd2Vla19kYXRlX3N5c3RlbVxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSB3ZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIHdlZWsgb2YgdGhlIGxvY2FsIHdlZWsgbnVtYmVyaW5nIHllYXIgaXMgMiBKYW51YXJ5IDIwMDUgd2l0aCBkZWZhdWx0IG9wdGlvbnM/XG4gKiBjb25zdCByZXN1bHQgPSBnZXRXZWVrKG5ldyBEYXRlKDIwMDUsIDAsIDIpKVxuICogLy89PiAyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIHdlZWsgb2YgdGhlIGxvY2FsIHdlZWsgbnVtYmVyaW5nIHllYXIgaXMgMiBKYW51YXJ5IDIwMDUsXG4gKiAvLyBpZiBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayxcbiAqIC8vIGFuZCB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhciBhbHdheXMgY29udGFpbnMgNCBKYW51YXJ5P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0V2VlayhuZXcgRGF0ZSgyMDA1LCAwLCAyKSwge1xuICogICB3ZWVrU3RhcnRzT246IDEsXG4gKiAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogNFxuICogfSlcbiAqIC8vPT4gNTNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWsoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IGRpZmYgPSArc3RhcnRPZldlZWsoX2RhdGUsIG9wdGlvbnMpIC0gK3N0YXJ0T2ZXZWVrWWVhcihfZGF0ZSwgb3B0aW9ucyk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiB3ZWVrcyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIGJlY2F1c2UgdGhlIG51bWJlciBvZlxuICAvLyBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudCAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZlxuICAvLyB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpLlxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gbWlsbGlzZWNvbmRzSW5XZWVrKSArIDE7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0V2VlaztcbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIGFkZExlYWRpbmdaZXJvcyhudW1iZXIsIHRhcmdldExlbmd0aCkge1xuICBjb25zdCBzaWduID0gbnVtYmVyIDwgMCA/IFwiLVwiIDogXCJcIjtcbiAgY29uc3Qgb3V0cHV0ID0gTWF0aC5hYnMobnVtYmVyKS50b1N0cmluZygpLnBhZFN0YXJ0KHRhcmdldExlbmd0aCwgXCIwXCIpO1xuICByZXR1cm4gc2lnbiArIG91dHB1dDtcbn1cbiIsCiAgICAiaW1wb3J0IHsgYWRkTGVhZGluZ1plcm9zIH0gZnJvbSBcIi4uL2FkZExlYWRpbmdaZXJvcy5qc1wiO1xuXG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqL1xuXG5leHBvcnQgY29uc3QgbGlnaHRGb3JtYXR0ZXJzID0ge1xuICAvLyBZZWFyXG4gIHkoZGF0ZSwgdG9rZW4pIHtcbiAgICAvLyBGcm9tIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtMzEvdHIzNS1kYXRlcy5odG1sI0RhdGVfRm9ybWF0X3Rva2Vuc1xuICAgIC8vIHwgWWVhciAgICAgfCAgICAgeSB8IHl5IHwgICB5eXkgfCAgeXl5eSB8IHl5eXl5IHxcbiAgICAvLyB8LS0tLS0tLS0tLXwtLS0tLS0tfC0tLS18LS0tLS0tLXwtLS0tLS0tfC0tLS0tLS18XG4gICAgLy8gfCBBRCAxICAgICB8ICAgICAxIHwgMDEgfCAgIDAwMSB8ICAwMDAxIHwgMDAwMDEgfFxuICAgIC8vIHwgQUQgMTIgICAgfCAgICAxMiB8IDEyIHwgICAwMTIgfCAgMDAxMiB8IDAwMDEyIHxcbiAgICAvLyB8IEFEIDEyMyAgIHwgICAxMjMgfCAyMyB8ICAgMTIzIHwgIDAxMjMgfCAwMDEyMyB8XG4gICAgLy8gfCBBRCAxMjM0ICB8ICAxMjM0IHwgMzQgfCAgMTIzNCB8ICAxMjM0IHwgMDEyMzQgfFxuICAgIC8vIHwgQUQgMTIzNDUgfCAxMjM0NSB8IDQ1IHwgMTIzNDUgfCAxMjM0NSB8IDEyMzQ1IHxcblxuICAgIGNvbnN0IHNpZ25lZFllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICBjb25zdCB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0b2tlbiA9PT0gXCJ5eVwiID8geWVhciAlIDEwMCA6IHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gTW9udGhcbiAgTShkYXRlLCB0b2tlbikge1xuICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICAgIHJldHVybiB0b2tlbiA9PT0gXCJNXCIgPyBTdHJpbmcobW9udGggKyAxKSA6IGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICB9LFxuXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXREYXRlKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gQU0gb3IgUE1cbiAgYShkYXRlLCB0b2tlbikge1xuICAgIGNvbnN0IGRheVBlcmlvZEVudW1WYWx1ZSA9IGRhdGUuZ2V0SG91cnMoKSAvIDEyID49IDEgPyBcInBtXCIgOiBcImFtXCI7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlIFwiYVwiOlxuICAgICAgY2FzZSBcImFhXCI6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNhc2UgXCJhYWFcIjpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZTtcbiAgICAgIGNhc2UgXCJhYWFhYVwiOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlWzBdO1xuICAgICAgY2FzZSBcImFhYWFcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWUgPT09IFwiYW1cIiA/IFwiYS5tLlwiIDogXCJwLm0uXCI7XG4gICAgfVxuICB9LFxuXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGgoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0SG91cnMoKSAlIDEyIHx8IDEyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEgoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0SG91cnMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBNaW51dGVcbiAgbShkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRNaW51dGVzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gU2Vjb25kXG4gIHMoZGF0ZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0U2Vjb25kcygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIEZyYWN0aW9uIG9mIHNlY29uZFxuICBTKGRhdGUsIHRva2VuKSB7XG4gICAgY29uc3QgbnVtYmVyT2ZEaWdpdHMgPSB0b2tlbi5sZW5ndGg7XG4gICAgY29uc3QgbWlsbGlzZWNvbmRzID0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKTtcbiAgICBjb25zdCBmcmFjdGlvbmFsU2Vjb25kcyA9IE1hdGgudHJ1bmMoXG4gICAgICBtaWxsaXNlY29uZHMgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKSxcbiAgICApO1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZnJhY3Rpb25hbFNlY29uZHMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG59O1xuIiwKICAgICJpbXBvcnQgeyBnZXREYXlPZlllYXIgfSBmcm9tIFwiLi4vLi4vZ2V0RGF5T2ZZZWFyLmpzXCI7XG5pbXBvcnQgeyBnZXRJU09XZWVrIH0gZnJvbSBcIi4uLy4uL2dldElTT1dlZWsuanNcIjtcbmltcG9ydCB7IGdldElTT1dlZWtZZWFyIH0gZnJvbSBcIi4uLy4uL2dldElTT1dlZWtZZWFyLmpzXCI7XG5pbXBvcnQgeyBnZXRXZWVrIH0gZnJvbSBcIi4uLy4uL2dldFdlZWsuanNcIjtcbmltcG9ydCB7IGdldFdlZWtZZWFyIH0gZnJvbSBcIi4uLy4uL2dldFdlZWtZZWFyLmpzXCI7XG5cbmltcG9ydCB7IGFkZExlYWRpbmdaZXJvcyB9IGZyb20gXCIuLi9hZGRMZWFkaW5nWmVyb3MuanNcIjtcbmltcG9ydCB7IGxpZ2h0Rm9ybWF0dGVycyB9IGZyb20gXCIuL2xpZ2h0Rm9ybWF0dGVycy5qc1wiO1xuXG5jb25zdCBkYXlQZXJpb2RFbnVtID0ge1xuICBhbTogXCJhbVwiLFxuICBwbTogXCJwbVwiLFxuICBtaWRuaWdodDogXCJtaWRuaWdodFwiLFxuICBub29uOiBcIm5vb25cIixcbiAgbW9ybmluZzogXCJtb3JuaW5nXCIsXG4gIGFmdGVybm9vbjogXCJhZnRlcm5vb25cIixcbiAgZXZlbmluZzogXCJldmVuaW5nXCIsXG4gIG5pZ2h0OiBcIm5pZ2h0XCIsXG59O1xuXG4vKlxuICogfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgQSogfCBNaWxsaXNlY29uZHMgaW4gZGF5ICAgICAgICAgICAgfFxuICogfCAgYiAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgfCAgQiAgfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgfFxuICogfCAgYyAgfCBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2VlayAgfCAgQyogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfFxuICogfCAgZCAgfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgfCAgRCAgfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZSAgfCBMb2NhbCBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgfCAgRSAgfCBEYXkgb2Ygd2VlayAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgZiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRiogfCBEYXkgb2Ygd2VlayBpbiBtb250aCAgICAgICAgICAgfFxuICogfCAgZyogfCBNb2RpZmllZCBKdWxpYW4gZGF5ICAgICAgICAgICAgfCAgRyAgfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaCAgfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgfCAgSCAgfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgaSEgfCBJU08gZGF5IG9mIHdlZWsgICAgICAgICAgICAgICAgfCAgSSEgfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgfFxuICogfCAgaiogfCBMb2NhbGl6ZWQgaG91ciB3LyBkYXkgcGVyaW9kICAgfCAgSiogfCBMb2NhbGl6ZWQgaG91ciB3L28gZGF5IHBlcmlvZCAgfFxuICogfCAgayAgfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgfCAgSyAgfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbCogfCAoZGVwcmVjYXRlZCkgICAgICAgICAgICAgICAgICAgfCAgTCAgfCBTdGFuZC1hbG9uZSBtb250aCAgICAgICAgICAgICAgfFxuICogfCAgbSAgfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTSAgfCBNb250aCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgTiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgbyEgfCBPcmRpbmFsIG51bWJlciBtb2RpZmllciAgICAgICAgfCAgTyAgfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgfFxuICogfCAgcCEgfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgfCAgUCEgfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgfFxuICogfCAgcSAgfCBTdGFuZC1hbG9uZSBxdWFydGVyICAgICAgICAgICAgfCAgUSAgfCBRdWFydGVyICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgciogfCBSZWxhdGVkIEdyZWdvcmlhbiB5ZWFyICAgICAgICAgfCAgUiEgfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgfFxuICogfCAgcyAgfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgUyAgfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgfFxuICogfCAgdCEgfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgfCAgVCEgfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgfFxuICogfCAgdSAgfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgfCAgVSogfCBDeWNsaWMgeWVhciAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgdiogfCBUaW1lem9uZSAoZ2VuZXJpYyBub24tbG9jYXQuKSAgfCAgViogfCBUaW1lem9uZSAobG9jYXRpb24pICAgICAgICAgICAgfFxuICogfCAgdyAgfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgfCAgVyogfCBXZWVrIG9mIG1vbnRoICAgICAgICAgICAgICAgICAgfFxuICogfCAgeCAgfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgfCAgWCAgfCBUaW1lem9uZSAoSVNPLTg2MDEpICAgICAgICAgICAgfFxuICogfCAgeSAgfCBZZWFyIChhYnMpICAgICAgICAgICAgICAgICAgICAgfCAgWSAgfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgfFxuICogfCAgeiAgfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgfCAgWiogfCBUaW1lem9uZSAoYWxpYXNlcykgICAgICAgICAgICAgfFxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICogYXJlIG5vdCBpbXBsZW1lbnRlZCBidXQgcmVzZXJ2ZWQgYnkgVW5pY29kZSBzdGFuZGFyZC5cbiAqXG4gKiBMZXR0ZXJzIG1hcmtlZCBieSAhIGFyZSBub24tc3RhbmRhcmQsIGJ1dCBpbXBsZW1lbnRlZCBieSBkYXRlLWZuczpcbiAqIC0gYG9gIG1vZGlmaWVzIHRoZSBwcmV2aW91cyB0b2tlbiB0byB0dXJuIGl0IGludG8gYW4gb3JkaW5hbCAoc2VlIGBmb3JtYXRgIGRvY3MpXG4gKiAtIGBpYCBpcyBJU08gZGF5IG9mIHdlZWsuIEZvciBgaWAgYW5kIGBpaWAgaXMgcmV0dXJucyBudW1lcmljIElTTyB3ZWVrIGRheXMsXG4gKiAgIGkuZS4gNyBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cbiAqIC0gYElgIGlzIElTTyB3ZWVrIG9mIHllYXIsIGFzIG9wcG9zZWQgdG8gYHdgIHdoaWNoIGlzIGxvY2FsIHdlZWsgb2YgeWVhci5cbiAqIC0gYFJgIGlzIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyLCBhcyBvcHBvc2VkIHRvIGBZYCB3aGljaCBpcyBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyLlxuICogICBgUmAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBJYCBhbmQgYGlgXG4gKiAgIGZvciB1bml2ZXJzYWwgSVNPIHdlZWstbnVtYmVyaW5nIGRhdGUsIHdoZXJlYXNcbiAqICAgYFlgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgd2AgYW5kIGBlYFxuICogICBmb3Igd2Vlay1udW1iZXJpbmcgZGF0ZSBzcGVjaWZpYyB0byB0aGUgbG9jYWxlLlxuICogLSBgUGAgaXMgbG9uZyBsb2NhbGl6ZWQgZGF0ZSBmb3JtYXRcbiAqIC0gYHBgIGlzIGxvbmcgbG9jYWxpemVkIHRpbWUgZm9ybWF0XG4gKi9cblxuZXhwb3J0IGNvbnN0IGZvcm1hdHRlcnMgPSB7XG4gIC8vIEVyYVxuICBHOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgZXJhID0gZGF0ZS5nZXRGdWxsWWVhcigpID4gMCA/IDEgOiAwO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEFELCBCQ1xuICAgICAgY2FzZSBcIkdcIjpcbiAgICAgIGNhc2UgXCJHR1wiOlxuICAgICAgY2FzZSBcIkdHR1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwgeyB3aWR0aDogXCJhYmJyZXZpYXRlZFwiIH0pO1xuICAgICAgLy8gQSwgQlxuICAgICAgY2FzZSBcIkdHR0dHXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7IHdpZHRoOiBcIm5hcnJvd1wiIH0pO1xuICAgICAgLy8gQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3RcbiAgICAgIGNhc2UgXCJHR0dHXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZXJhKGVyYSwgeyB3aWR0aDogXCJ3aWRlXCIgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFllYXJcbiAgeTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIC8vIE9yZGluYWwgbnVtYmVyXG4gICAgaWYgKHRva2VuID09PSBcInlvXCIpIHtcbiAgICAgIGNvbnN0IHNpZ25lZFllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgICAgY29uc3QgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyO1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoeWVhciwgeyB1bml0OiBcInllYXJcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnkoZGF0ZSwgdG9rZW4pO1xuICB9LFxuXG4gIC8vIExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgWTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHNpZ25lZFdlZWtZZWFyID0gZ2V0V2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7XG4gICAgLy8gUmV0dXJucyAxIGZvciAxIEJDICh3aGljaCBpcyB5ZWFyIDAgaW4gSmF2YVNjcmlwdClcbiAgICBjb25zdCB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyO1xuXG4gICAgLy8gVHdvIGRpZ2l0IHllYXJcbiAgICBpZiAodG9rZW4gPT09IFwiWVlcIikge1xuICAgICAgY29uc3QgdHdvRGlnaXRZZWFyID0gd2Vla1llYXIgJSAxMDA7XG4gICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHR3b0RpZ2l0WWVhciwgMik7XG4gICAgfVxuXG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09IFwiWW9cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2Vla1llYXIsIHsgdW5pdDogXCJ5ZWFyXCIgfSk7XG4gICAgfVxuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAgUjogZnVuY3Rpb24gKGRhdGUsIHRva2VuKSB7XG4gICAgY29uc3QgaXNvV2Vla1llYXIgPSBnZXRJU09XZWVrWWVhcihkYXRlKTtcblxuICAgIC8vIFBhZGRpbmdcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWtZZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLlxuICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczpcbiAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHxcbiAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHxcbiAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuXG4gIHU6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbikge1xuICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh5ZWFyLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIFF1YXJ0ZXJcbiAgUTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0TW9udGgoKSArIDEpIC8gMyk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgMywgNFxuICAgICAgY2FzZSBcIlFcIjpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTtcbiAgICAgIC8vIDAxLCAwMiwgMDMsIDA0XG4gICAgICBjYXNlIFwiUVFcIjpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhxdWFydGVyLCAyKTtcbiAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aFxuICAgICAgY2FzZSBcIlFvXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHsgdW5pdDogXCJxdWFydGVyXCIgfSk7XG4gICAgICAvLyBRMSwgUTIsIFEzLCBRNFxuICAgICAgY2FzZSBcIlFRUVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbClcbiAgICAgIGNhc2UgXCJRUVFRUVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi5cbiAgICAgIGNhc2UgXCJRUVFRXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUucXVhcnRlcihxdWFydGVyLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlclxuICBxOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlIFwicVwiOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgXCJxcVwiOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG4gICAgICBjYXNlIFwicW9cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwgeyB1bml0OiBcInF1YXJ0ZXJcIiB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlIFwicXFxXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuICAgICAgY2FzZSBcInFxcXFxXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSBcInFxcXFcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBNb250aFxuICBNOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcIk1cIjpcbiAgICAgIGNhc2UgXCJNTVwiOlxuICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLk0oZGF0ZSwgdG9rZW4pO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSBcIk1vXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwgeyB1bml0OiBcIm1vbnRoXCIgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcbiAgICAgIGNhc2UgXCJNTU1cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgXCJNTU1NTVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSBcIk1NTU1cIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwgeyB3aWR0aDogXCJ3aWRlXCIsIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBTdGFuZC1hbG9uZSBtb250aFxuICBMOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gMSwgMiwgLi4uLCAxMlxuICAgICAgY2FzZSBcIkxcIjpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhtb250aCArIDEpO1xuICAgICAgLy8gMDEsIDAyLCAuLi4sIDEyXG4gICAgICBjYXNlIFwiTExcIjpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aFxuICAgICAgY2FzZSBcIkxvXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKG1vbnRoICsgMSwgeyB1bml0OiBcIm1vbnRoXCIgfSk7XG4gICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWNcbiAgICAgIGNhc2UgXCJMTExcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBKLCBGLCAuLi4sIERcbiAgICAgIGNhc2UgXCJMTExMTFwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlclxuICAgICAgY2FzZSBcIkxMTExcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwgeyB3aWR0aDogXCJ3aWRlXCIsIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBMb2NhbCB3ZWVrIG9mIHllYXJcbiAgdzogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHdlZWsgPSBnZXRXZWVrKGRhdGUsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHRva2VuID09PSBcIndvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKHdlZWssIHsgdW5pdDogXCJ3ZWVrXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIElTTyB3ZWVrIG9mIHllYXJcbiAgSTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGlzb1dlZWsgPSBnZXRJU09XZWVrKGRhdGUpO1xuXG4gICAgaWYgKHRva2VuID09PSBcIklvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGlzb1dlZWssIHsgdW5pdDogXCJ3ZWVrXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29XZWVrLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIERheSBvZiB0aGUgbW9udGhcbiAgZDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gXCJkb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldERhdGUoKSwgeyB1bml0OiBcImRhdGVcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmQoZGF0ZSwgdG9rZW4pO1xuICB9LFxuXG4gIC8vIERheSBvZiB5ZWFyXG4gIEQ6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBkYXlPZlllYXIgPSBnZXREYXlPZlllYXIoZGF0ZSk7XG5cbiAgICBpZiAodG9rZW4gPT09IFwiRG9cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF5T2ZZZWFyLCB7IHVuaXQ6IFwiZGF5T2ZZZWFyXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gRGF5IG9mIHdlZWtcbiAgRTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gVHVlXG4gICAgICBjYXNlIFwiRVwiOlxuICAgICAgY2FzZSBcIkVFXCI6XG4gICAgICBjYXNlIFwiRUVFXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUXG4gICAgICBjYXNlIFwiRUVFRUVcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdVxuICAgICAgY2FzZSBcIkVFRUVFRVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcInNob3J0XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVlc2RheVxuICAgICAgY2FzZSBcIkVFRUVcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gTG9jYWwgZGF5IG9mIHdlZWtcbiAgZTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgY29uc3QgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKE50aCBkYXkgb2Ygd2VlayB3aXRoIGN1cnJlbnQgbG9jYWxlIG9yIHdlZWtTdGFydHNPbilcbiAgICAgIGNhc2UgXCJlXCI6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSBcImVlXCI6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoXG4gICAgICBjYXNlIFwiZW9cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHsgdW5pdDogXCJkYXlcIiB9KTtcbiAgICAgIGNhc2UgXCJlZWVcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgXCJlZWVlZVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlIFwiZWVlZWVlXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwic2hvcnRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlIFwiZWVlZVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBTdGFuZC1hbG9uZSBsb2NhbCBkYXkgb2Ygd2Vla1xuICBjOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgY29uc3QgZGF5T2ZXZWVrID0gZGF0ZS5nZXREYXkoKTtcbiAgICBjb25zdCBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoc2FtZSBhcyBpbiBgZWApXG4gICAgICBjYXNlIFwiY1wiOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGxvY2FsRGF5T2ZXZWVrKTtcbiAgICAgIC8vIFBhZGRlZCBudW1lcmljYWwgdmFsdWVcbiAgICAgIGNhc2UgXCJjY1wiOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpO1xuICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoXG4gICAgICBjYXNlIFwiY29cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobG9jYWxEYXlPZldlZWssIHsgdW5pdDogXCJkYXlcIiB9KTtcbiAgICAgIGNhc2UgXCJjY2NcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgXCJjY2NjY1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlIFwiY2NjY2NjXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwic2hvcnRcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlIFwiY2NjY1wiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBJU08gZGF5IG9mIHdlZWtcbiAgaTogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgY29uc3QgaXNvRGF5T2ZXZWVrID0gZGF5T2ZXZWVrID09PSAwID8gNyA6IGRheU9mV2VlaztcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAyXG4gICAgICBjYXNlIFwiaVwiOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGlzb0RheU9mV2Vlayk7XG4gICAgICAvLyAwMlxuICAgICAgY2FzZSBcImlpXCI6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpO1xuICAgICAgLy8gMm5kXG4gICAgICBjYXNlIFwiaW9cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvRGF5T2ZXZWVrLCB7IHVuaXQ6IFwiZGF5XCIgfSk7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgXCJpaWlcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgXCJpaWlpaVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlIFwiaWlpaWlpXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwic2hvcnRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlIFwiaWlpaVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBBTSBvciBQTVxuICBhOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XG4gICAgY29uc3QgZGF5UGVyaW9kRW51bVZhbHVlID0gaG91cnMgLyAxMiA+PSAxID8gXCJwbVwiIDogXCJhbVwiO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcImFcIjpcbiAgICAgIGNhc2UgXCJhYVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcImFhYVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemVcbiAgICAgICAgICAuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYXNlIFwiYWFhYWFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiYWFhYVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uXG4gIGI6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICBsZXQgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA9PT0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubm9vbjtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID09PSAwKSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1pZG5pZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyBcInBtXCIgOiBcImFtXCI7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcImJcIjpcbiAgICAgIGNhc2UgXCJiYlwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcImJiYlwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemVcbiAgICAgICAgICAuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjYXNlIFwiYmJiYmJcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiYmJiYlwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBpbiB0aGUgbW9ybmluZywgaW4gdGhlIGFmdGVybm9vbiwgaW4gdGhlIGV2ZW5pbmcsIGF0IG5pZ2h0XG4gIEI6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICBsZXQgZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgIGlmIChob3VycyA+PSAxNykge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ldmVuaW5nO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gMTIpIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0uYWZ0ZXJub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gNCkge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5tb3JuaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm5pZ2h0O1xuICAgIH1cblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJCXCI6XG4gICAgICBjYXNlIFwiQkJcIjpcbiAgICAgIGNhc2UgXCJCQkJcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJCQkJCQlwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJCQkJCXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIEhvdXIgWzEtMTJdXG4gIGg6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09IFwiaG9cIikge1xuICAgICAgbGV0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpICUgMTI7XG4gICAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMTI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3VycywgeyB1bml0OiBcImhvdXJcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmgoZGF0ZSwgdG9rZW4pO1xuICB9LFxuXG4gIC8vIEhvdXIgWzAtMjNdXG4gIEg6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09IFwiSG9cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRIb3VycygpLCB7IHVuaXQ6IFwiaG91clwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuSChkYXRlLCB0b2tlbik7XG4gIH0sXG5cbiAgLy8gSG91ciBbMC0xMV1cbiAgSzogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpICUgMTI7XG5cbiAgICBpZiAodG9rZW4gPT09IFwiS29cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaG91cnMsIHsgdW5pdDogXCJob3VyXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBIb3VyIFsxLTI0XVxuICBrOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgbGV0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAyNDtcblxuICAgIGlmICh0b2tlbiA9PT0gXCJrb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3VycywgeyB1bml0OiBcImhvdXJcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIE1pbnV0ZVxuICBtOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSBcIm1vXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0TWludXRlcygpLCB7IHVuaXQ6IFwibWludXRlXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5tKGRhdGUsIHRva2VuKTtcbiAgfSxcblxuICAvLyBTZWNvbmRcbiAgczogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gXCJzb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldFNlY29uZHMoKSwgeyB1bml0OiBcInNlY29uZFwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMucyhkYXRlLCB0b2tlbik7XG4gIH0sXG5cbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFM6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuUyhkYXRlLCB0b2tlbik7XG4gIH0sXG5cbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGFsd2F5cyBgJ1onYClcbiAgWDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHtcbiAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblxuICAgIGlmICh0aW1lem9uZU9mZnNldCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiWlwiO1xuICAgIH1cblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlIFwiWFwiOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhgXG4gICAgICBjYXNlIFwiWFhYWFwiOlxuICAgICAgY2FzZSBcIlhYXCI6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWFhgXG4gICAgICBjYXNlIFwiWFhYWFhcIjpcbiAgICAgIGNhc2UgXCJYWFhcIjogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsIFwiOlwiKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGAnKzAwOjAwJ2Agb3IgZXF1aXZhbGVudClcbiAgeDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHtcbiAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIEhvdXJzIGFuZCBvcHRpb25hbCBtaW51dGVzXG4gICAgICBjYXNlIFwieFwiOlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzKHRpbWV6b25lT2Zmc2V0KTtcblxuICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICBjYXNlIFwieHh4eFwiOlxuICAgICAgY2FzZSBcInh4XCI6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGhvdXQgYDpgIGRlbGltaXRlclxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eHhgXG4gICAgICBjYXNlIFwieHh4eHhcIjpcbiAgICAgIGNhc2UgXCJ4eHhcIjogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1pdGVyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsIFwiOlwiKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gVGltZXpvbmUgKEdNVClcbiAgTzogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHtcbiAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlIFwiT1wiOlxuICAgICAgY2FzZSBcIk9PXCI6XG4gICAgICBjYXNlIFwiT09PXCI6XG4gICAgICAgIHJldHVybiBcIkdNVFwiICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgXCI6XCIpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSBcIk9PT09cIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBcIkdNVFwiICsgZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsIFwiOlwiKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgejogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHtcbiAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIFNob3J0XG4gICAgICBjYXNlIFwielwiOlxuICAgICAgY2FzZSBcInp6XCI6XG4gICAgICBjYXNlIFwienp6XCI6XG4gICAgICAgIHJldHVybiBcIkdNVFwiICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgXCI6XCIpO1xuICAgICAgLy8gTG9uZ1xuICAgICAgY2FzZSBcInp6enpcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBcIkdNVFwiICsgZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsIFwiOlwiKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gU2Vjb25kcyB0aW1lc3RhbXBcbiAgdDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBNYXRoLnRydW5jKCtkYXRlIC8gMTAwMCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gTWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICBUOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSkge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoK2RhdGUsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGVsaW1pdGVyID0gXCJcIikge1xuICBjb25zdCBzaWduID0gb2Zmc2V0ID4gMCA/IFwiLVwiIDogXCIrXCI7XG4gIGNvbnN0IGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIGNvbnN0IGhvdXJzID0gTWF0aC50cnVuYyhhYnNPZmZzZXQgLyA2MCk7XG4gIGNvbnN0IG1pbnV0ZXMgPSBhYnNPZmZzZXQgJSA2MDtcbiAgaWYgKG1pbnV0ZXMgPT09IDApIHtcbiAgICByZXR1cm4gc2lnbiArIFN0cmluZyhob3Vycyk7XG4gIH1cbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXMob2Zmc2V0LCBkZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgY29uc3Qgc2lnbiA9IG9mZnNldCA+IDAgPyBcIi1cIiA6IFwiK1wiO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGVsaW1pdGVyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkZWxpbWl0ZXIgPSBcIlwiKSB7XG4gIGNvbnN0IHNpZ24gPSBvZmZzZXQgPiAwID8gXCItXCIgOiBcIitcIjtcbiAgY29uc3QgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgY29uc3QgaG91cnMgPSBhZGRMZWFkaW5nWmVyb3MoTWF0aC50cnVuYyhhYnNPZmZzZXQgLyA2MCksIDIpO1xuICBjb25zdCBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG4iLAogICAgImNvbnN0IGRhdGVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcpID0+IHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSBcIlBcIjpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoeyB3aWR0aDogXCJzaG9ydFwiIH0pO1xuICAgIGNhc2UgXCJQUFwiOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7IHdpZHRoOiBcIm1lZGl1bVwiIH0pO1xuICAgIGNhc2UgXCJQUFBcIjpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoeyB3aWR0aDogXCJsb25nXCIgfSk7XG4gICAgY2FzZSBcIlBQUFBcIjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7IHdpZHRoOiBcImZ1bGxcIiB9KTtcbiAgfVxufTtcblxuY29uc3QgdGltZUxvbmdGb3JtYXR0ZXIgPSAocGF0dGVybiwgZm9ybWF0TG9uZykgPT4ge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlIFwicFwiOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7IHdpZHRoOiBcInNob3J0XCIgfSk7XG4gICAgY2FzZSBcInBwXCI6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHsgd2lkdGg6IFwibWVkaXVtXCIgfSk7XG4gICAgY2FzZSBcInBwcFwiOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7IHdpZHRoOiBcImxvbmdcIiB9KTtcbiAgICBjYXNlIFwicHBwcFwiOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHsgd2lkdGg6IFwiZnVsbFwiIH0pO1xuICB9XG59O1xuXG5jb25zdCBkYXRlVGltZUxvbmdGb3JtYXR0ZXIgPSAocGF0dGVybiwgZm9ybWF0TG9uZykgPT4ge1xuICBjb25zdCBtYXRjaFJlc3VsdCA9IHBhdHRlcm4ubWF0Y2goLyhQKykocCspPy8pIHx8IFtdO1xuICBjb25zdCBkYXRlUGF0dGVybiA9IG1hdGNoUmVzdWx0WzFdO1xuICBjb25zdCB0aW1lUGF0dGVybiA9IG1hdGNoUmVzdWx0WzJdO1xuXG4gIGlmICghdGltZVBhdHRlcm4pIHtcbiAgICByZXR1cm4gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZyk7XG4gIH1cblxuICBsZXQgZGF0ZVRpbWVGb3JtYXQ7XG5cbiAgc3dpdGNoIChkYXRlUGF0dGVybikge1xuICAgIGNhc2UgXCJQXCI6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoeyB3aWR0aDogXCJzaG9ydFwiIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIlBQXCI6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoeyB3aWR0aDogXCJtZWRpdW1cIiB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJQUFBcIjpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7IHdpZHRoOiBcImxvbmdcIiB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJQUFBQXCI6XG4gICAgZGVmYXVsdDpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7IHdpZHRoOiBcImZ1bGxcIiB9KTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGRhdGVUaW1lRm9ybWF0XG4gICAgLnJlcGxhY2UoXCJ7e2RhdGV9fVwiLCBkYXRlTG9uZ0Zvcm1hdHRlcihkYXRlUGF0dGVybiwgZm9ybWF0TG9uZykpXG4gICAgLnJlcGxhY2UoXCJ7e3RpbWV9fVwiLCB0aW1lTG9uZ0Zvcm1hdHRlcih0aW1lUGF0dGVybiwgZm9ybWF0TG9uZykpO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvbmdGb3JtYXR0ZXJzID0ge1xuICBwOiB0aW1lTG9uZ0Zvcm1hdHRlcixcbiAgUDogZGF0ZVRpbWVMb25nRm9ybWF0dGVyLFxufTtcbiIsCiAgICAiY29uc3QgZGF5T2ZZZWFyVG9rZW5SRSA9IC9eRCskLztcbmNvbnN0IHdlZWtZZWFyVG9rZW5SRSA9IC9eWSskLztcblxuY29uc3QgdGhyb3dUb2tlbnMgPSBbXCJEXCIsIFwiRERcIiwgXCJZWVwiLCBcIllZWVlcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiBkYXlPZlllYXJUb2tlblJFLnRlc3QodG9rZW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB7XG4gIHJldHVybiB3ZWVrWWVhclRva2VuUkUudGVzdCh0b2tlbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXQsIGlucHV0KSB7XG4gIGNvbnN0IF9tZXNzYWdlID0gbWVzc2FnZSh0b2tlbiwgZm9ybWF0LCBpbnB1dCk7XG4gIGNvbnNvbGUud2FybihfbWVzc2FnZSk7XG4gIGlmICh0aHJvd1Rva2Vucy5pbmNsdWRlcyh0b2tlbikpIHRocm93IG5ldyBSYW5nZUVycm9yKF9tZXNzYWdlKTtcbn1cblxuZnVuY3Rpb24gbWVzc2FnZSh0b2tlbiwgZm9ybWF0LCBpbnB1dCkge1xuICBjb25zdCBzdWJqZWN0ID0gdG9rZW5bMF0gPT09IFwiWVwiID8gXCJ5ZWFyc1wiIDogXCJkYXlzIG9mIHRoZSBtb250aFwiO1xuICByZXR1cm4gYFVzZSBcXGAke3Rva2VuLnRvTG93ZXJDYXNlKCl9XFxgIGluc3RlYWQgb2YgXFxgJHt0b2tlbn1cXGAgKGluIFxcYCR7Zm9ybWF0fVxcYCkgZm9yIGZvcm1hdHRpbmcgJHtzdWJqZWN0fSB0byB0aGUgaW5wdXQgXFxgJHtpbnB1dH1cXGA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZGA7XG59XG4iLAogICAgImltcG9ydCB7IGRlZmF1bHRMb2NhbGUgfSBmcm9tIFwiLi9fbGliL2RlZmF1bHRMb2NhbGUuanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0T3B0aW9ucy5qc1wiO1xuaW1wb3J0IHsgZm9ybWF0dGVycyB9IGZyb20gXCIuL19saWIvZm9ybWF0L2Zvcm1hdHRlcnMuanNcIjtcbmltcG9ydCB7IGxvbmdGb3JtYXR0ZXJzIH0gZnJvbSBcIi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMuanNcIjtcbmltcG9ydCB7XG4gIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4sXG4gIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbixcbiAgd2Fybk9yVGhyb3dQcm90ZWN0ZWRFcnJvcixcbn0gZnJvbSBcIi4vX2xpYi9wcm90ZWN0ZWRUb2tlbnMuanNcIjtcbmltcG9ydCB7IGlzVmFsaWQgfSBmcm9tIFwiLi9pc1ZhbGlkLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLy8gUmV4cG9ydHMgb2YgaW50ZXJuYWwgZm9yIGxpYnJhcmllcyB0byB1c2UuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvMzYzOCNpc3N1ZWNvbW1lbnQtMTg3NzA4Mjg3NFxuZXhwb3J0IHsgZm9ybWF0dGVycywgbG9uZ0Zvcm1hdHRlcnMgfTtcblxuLy8gVGhpcyBSZWdFeHAgY29uc2lzdHMgb2YgdGhyZWUgcGFydHMgc2VwYXJhdGVkIGJ5IGB8YDpcbi8vIC0gW3lZUXFNTHdJZERlY2loSEtrbXNdbyBtYXRjaGVzIGFueSBhdmFpbGFibGUgb3JkaW5hbCBudW1iZXIgdG9rZW5cbi8vICAgKG9uZSBvZiB0aGUgY2VydGFpbiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IGBvYClcbi8vIC0gKFxcdylcXDEqIG1hdGNoZXMgYW55IHNlcXVlbmNlcyBvZiB0aGUgc2FtZSBsZXR0ZXJcbi8vIC0gJycgbWF0Y2hlcyB0d28gcXVvdGUgY2hhcmFjdGVycyBpbiBhIHJvd1xuLy8gLSAnKCcnfFteJ10pKygnfCQpIG1hdGNoZXMgYW55dGhpbmcgc3Vycm91bmRlZCBieSB0d28gcXVvdGUgY2hhcmFjdGVycyAoJyksXG4vLyAgIGV4Y2VwdCBhIHNpbmdsZSBxdW90ZSBzeW1ib2wsIHdoaWNoIGVuZHMgdGhlIHNlcXVlbmNlLlxuLy8gICBUd28gcXVvdGUgY2hhcmFjdGVycyBkbyBub3QgZW5kIHRoZSBzZXF1ZW5jZS5cbi8vICAgSWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc2luZ2xlIHF1b3RlXG4vLyAgIHRoZW4gdGhlIHNlcXVlbmNlIHdpbGwgY29udGludWUgdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuLy8gLSAuIG1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgdW5tYXRjaGVkIGJ5IHByZXZpb3VzIHBhcnRzIG9mIHRoZSBSZWdFeHBzXG5jb25zdCBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwID1cbiAgL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFxcdylcXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xuXG4vLyBUaGlzIFJlZ0V4cCBjYXRjaGVzIHN5bWJvbHMgZXNjYXBlZCBieSBxdW90ZXMsIGFuZCBhbHNvXG4vLyBzZXF1ZW5jZXMgb2Ygc3ltYm9scyBQLCBwLCBhbmQgdGhlIGNvbWJpbmF0aW9ucyBsaWtlIGBQUFBQUFBQcHBwcHBgXG5jb25zdCBsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nO1xuXG5jb25zdCBlc2NhcGVkU3RyaW5nUmVnRXhwID0gL14nKFteXSo/KSc/JC87XG5jb25zdCBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nO1xuY29uc3QgdW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAgPSAvW2EtekEtWl0vO1xuXG5leHBvcnQgeyBmb3JtYXQgYXMgZm9ybWF0RGF0ZSB9O1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZm9ybWF0fSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZm9ybWF0XG4gKiBAYWxpYXMgZm9ybWF0RGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBGb3JtYXQgdGhlIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZyBpbiB0aGUgZ2l2ZW4gZm9ybWF0LiBUaGUgcmVzdWx0IG1heSB2YXJ5IGJ5IGxvY2FsZS5cbiAqXG4gKiA+IOKaoO+4jyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBgZm9ybWF0YCB0b2tlbnMgZGlmZmVyIGZyb20gTW9tZW50LmpzIGFuZCBvdGhlciBsaWJyYXJpZXMuXG4gKiA+IFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIFRoZSBjaGFyYWN0ZXJzIHdyYXBwZWQgYmV0d2VlbiB0d28gc2luZ2xlIHF1b3RlcyBjaGFyYWN0ZXJzICgnKSBhcmUgZXNjYXBlZC5cbiAqIFR3byBzaW5nbGUgcXVvdGVzIGluIGEgcm93LCB3aGV0aGVyIGluc2lkZSBvciBvdXRzaWRlIGEgcXVvdGVkIHNlcXVlbmNlLCByZXByZXNlbnQgYSAncmVhbCcgc2luZ2xlIHF1b3RlLlxuICogKHNlZSB0aGUgbGFzdCBleGFtcGxlKVxuICpcbiAqIEZvcm1hdCBvZiB0aGUgc3RyaW5nIGlzIGJhc2VkIG9uIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9GaWVsZF9TeW1ib2xfVGFibGVcbiAqIHdpdGggYSBmZXcgYWRkaXRpb25zIChzZWUgbm90ZSA3IGJlbG93IHRoZSB0YWJsZSkuXG4gKlxuICogQWNjZXB0ZWQgcGF0dGVybnM6XG4gKiB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYXR0ZXJuIHwgUmVzdWx0IGV4YW1wbGVzICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLXxcbiAqIHwgRXJhICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEcuLkdHRyAgfCBBRCwgQkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHICAgIHwgQW5ubyBEb21pbmksIEJlZm9yZSBDaHJpc3QgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHR0cgICB8IEEsIEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQ2FsZW5kYXIgeWVhciAgICAgICAgICAgICAgICAgICB8IHkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5byAgICAgIHwgNDR0aCwgMXN0LCAwdGgsIDE3dGggICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eSAgICAgfCAwNDQsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5ICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eXkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICB8IFkgICAgICAgfCA0NCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZbyAgICAgIHwgNDR0aCwgMXN0LCAxOTAwdGgsIDIwMTd0aCAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVkgICAgICB8IDQ0LCAwMSwgMDAsIDE3ICAgICAgICAgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWSAgICAgfCAwNDQsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZICAgIHwgMDA0NCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWVkgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgICB8IFIgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUiAgICAgIHwgLTQzLCAwMCwgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSICAgICB8IC0wNDMsIDAwMCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlIgICAgfCAtMDA0MywgMDAwMCwgMDAwMSwgMTkwMCwgMjAxNyAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSUiAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1LDcgfFxuICogfCBFeHRlbmRlZCB5ZWFyICAgICAgICAgICAgICAgICAgIHwgdSAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1ICAgICAgfCAtNDMsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXUgICAgIHwgLTA0MywgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dSAgICB8IC0wMDQzLCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXV1ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IFF1YXJ0ZXIgKGZvcm1hdHRpbmcpICAgICAgICAgICAgfCBRICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVFRICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IFF1YXJ0ZXIgKHN0YW5kLWFsb25lKSAgICAgICAgICAgfCBxICAgICAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcW8gICAgICB8IDFzdCwgMm5kLCAzcmQsIDR0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxICAgICAgfCAwMSwgMDIsIDAzLCAwNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXEgICAgIHwgUTEsIFEyLCBRMywgUTQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcSAgICB8IDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXFxICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCA0ICAgICB8XG4gKiB8IE1vbnRoIChmb3JtYXR0aW5nKSAgICAgICAgICAgICAgfCBNICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU0gICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTSAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU1NICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1vbnRoIChzdGFuZC1hbG9uZSkgICAgICAgICAgICAgfCBMICAgICAgIHwgMSwgMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDEydGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMICAgICAgfCAwMSwgMDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTEwgICAgIHwgSmFuLCBGZWIsIC4uLiwgRGVjICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTCAgICB8IEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTExMICAgfCBKLCBGLCAuLi4sIEQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgfCB3ICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHd3ICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICAgfCBJICAgICAgIHwgMSwgMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDUzdGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElJICAgICAgfCAwMSwgMDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICAgfCBkICAgICAgIHwgMSwgMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDMxc3QgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRkICAgICAgfCAwMSwgMDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICAgfCBEICAgICAgIHwgMSwgMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDM2NXRoLCAzNjZ0aCAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREICAgICAgfCAwMSwgMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREQgICAgIHwgMDAxLCAwMDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRERERCAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgRGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgICAgICB8IEUuLkVFRSAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFRSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IElTTyBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgfCBpICAgICAgIHwgMSwgMiwgMywgLi4uLCA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDd0aCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpICAgICAgfCAwMSwgMDIsIC4uLiwgMDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWkgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaWkgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgNyAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgIHwgZSAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZSAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWVlICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKHN0YW5kLWFsb25lKSB8IGMgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2MgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjYyAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2MgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjYyAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhLi5hYSAgIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhICAgICB8IGFtLCBwbSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWEgICAgfCBhLm0uLCBwLm0uICAgICAgICAgICAgICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhYSAgIHwgYSwgcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgIHwgYi4uYmIgICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYiAgICAgfCBhbSwgcG0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiICAgIHwgYS5tLiwgcC5tLiwgbm9vbiwgbWlkbmlnaHQgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYmIgICB8IGEsIHAsIG4sIG1pICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgICB8IEIuLkJCQiAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCICAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQkIgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgICB8IGggICAgICAgfCAxLCAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBobyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMTJ0aCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGggICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgICB8IEggICAgICAgfCAwLCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIbyAgICAgIHwgMHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSEggICAgICB8IDAwLCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgICB8IEsgICAgICAgfCAxLCAyLCAuLi4sIDExLCAwICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMHRoICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS0sgICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgICB8IGsgICAgICAgfCAyNCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrbyAgICAgIHwgMjR0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2sgICAgICB8IDI0LCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgICB8IG0gICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW0gICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgICB8IHMgICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3MgICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgICB8IFMgICAgICAgfCAwLCAxLCAuLi4sIDkgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTUyAgICAgIHwgMDAsIDAxLCAuLi4sIDk5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTICAgICB8IDAwMCwgMDAxLCAuLi4sIDk5OSAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTU1MgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3LyBaKSAgICAgICAgfCBYICAgICAgIHwgLTA4LCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFggICAgICB8IC0wODAwLCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWCAgICAgfCAtMDg6MDAsICswNTozMCwgWiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYICAgIHwgLTA4MDAsICswNTMwLCBaLCArMTIzNDU2ICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWFggICB8IC0wODowMCwgKzA1OjMwLCBaLCArMTI6MzQ6NTYgICAgICB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgICB8IHggICAgICAgfCAtMDgsICswNTMwLCArMDAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eCAgICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4ICAgICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHggICAgfCAtMDgwMCwgKzA1MzAsICswMDAwLCArMTIzNDU2ICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4eCAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCwgKzEyOjM0OjU2IHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgIHwgTy4uLk9PTyB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9PT08gICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyICAgICB8XG4gKiB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSAgfCB6Li4uenp6IHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgNiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgenp6eiAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIsNiAgIHxcbiAqIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgICB8IHQgICAgICAgfCA1MTI5Njk1MjAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0dCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgIHwgVCAgICAgICB8IDUxMjk2OTUyMDkwMCAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRUICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICAgfCBQICAgICAgIHwgMDQvMjkvMTQ1MyAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFAgICAgICB8IEFwciAyOSwgMTQ1MyAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUCAgICAgfCBBcHJpbCAyOXRoLCAxNDUzICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQICAgIHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgIHwgcCAgICAgICB8IDEyOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwICAgICAgfCAxMjowMDowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHAgICAgIHwgMTI6MDA6MDAgQU0gR01UKzIgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwcCAgICB8IDEyOjAwOjAwIEFNIEdNVCswMjowMCAgICAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgQ29tYmluYXRpb24gb2YgZGF0ZSBhbmQgdGltZSAgICB8IFBwICAgICAgfCAwNC8yOS8xNDUzLCAxMjowMCBBTSAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUHBwICAgIHwgQXByIDI5LCAxNDUzLCAxMjowMDowMCBBTSAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQcHBwICB8IEFwcmlsIDI5dGgsIDE0NTMgYXQgLi4uICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFBwcHBwfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgYXQgLi4uICAgfCAyLDcgICB8XG4gKiBOb3RlczpcbiAqIDEuIFwiRm9ybWF0dGluZ1wiIHVuaXRzIChlLmcuIGZvcm1hdHRpbmcgcXVhcnRlcikgaW4gdGhlIGRlZmF1bHQgZW4tVVMgbG9jYWxlXG4gKiAgICBhcmUgdGhlIHNhbWUgYXMgXCJzdGFuZC1hbG9uZVwiIHVuaXRzLCBidXQgYXJlIGRpZmZlcmVudCBpbiBzb21lIGxhbmd1YWdlcy5cbiAqICAgIFwiRm9ybWF0dGluZ1wiIHVuaXRzIGFyZSBkZWNsaW5lZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIHRoZSBsYW5ndWFnZVxuICogICAgaW4gdGhlIGNvbnRleHQgb2YgYSBkYXRlLiBcIlN0YW5kLWFsb25lXCIgdW5pdHMgYXJlIGFsd2F5cyBub21pbmF0aXZlIHNpbmd1bGFyOlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTExMTCcsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWQnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTU1NTScsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWR1J2BcbiAqXG4gKiAyLiBBbnkgc2VxdWVuY2Ugb2YgdGhlIGlkZW50aWNhbCBsZXR0ZXJzIGlzIGEgcGF0dGVybiwgdW5sZXNzIGl0IGlzIGVzY2FwZWQgYnlcbiAqICAgIHRoZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyAoc2VlIGJlbG93KS5cbiAqICAgIElmIHRoZSBzZXF1ZW5jZSBpcyBsb25nZXIgdGhhbiBsaXN0ZWQgaW4gdGFibGUgKGUuZy4gYEVFRUVFRUVFRUVFYClcbiAqICAgIHRoZSBvdXRwdXQgd2lsbCBiZSB0aGUgc2FtZSBhcyBkZWZhdWx0IHBhdHRlcm4gZm9yIHRoaXMgdW5pdCwgdXN1YWxseVxuICogICAgdGhlIGxvbmdlc3Qgb25lIChpbiBjYXNlIG9mIElTTyB3ZWVrZGF5cywgYEVFRUVgKS4gRGVmYXVsdCBwYXR0ZXJucyBmb3IgdW5pdHNcbiAqICAgIGFyZSBtYXJrZWQgd2l0aCBcIjJcIiBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIHRhYmxlLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NJykgLy89PiAnTm92J2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTScpIC8vPT4gJ04nYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAzLiBTb21lIHBhdHRlcm5zIGNvdWxkIGJlIHVubGltaXRlZCBsZW5ndGggKHN1Y2ggYXMgYHl5eXl5eXl5YCkuXG4gKiAgICBUaGUgb3V0cHV0IHdpbGwgYmUgcGFkZGVkIHdpdGggemVyb3MgdG8gbWF0Y2ggdGhlIGxlbmd0aCBvZiB0aGUgcGF0dGVybi5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ3l5eXl5eXl5JykgLy89PiAnMDAwMDIwMTcnYFxuICpcbiAqIDQuIGBRUVFRUWAgYW5kIGBxcXFxcWAgY291bGQgYmUgbm90IHN0cmljdGx5IG51bWVyaWNhbCBpbiBzb21lIGxvY2FsZXMuXG4gKiAgICBUaGVzZSB0b2tlbnMgcmVwcmVzZW50IHRoZSBzaG9ydGVzdCBmb3JtIG9mIHRoZSBxdWFydGVyLlxuICpcbiAqIDUuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBwYXR0ZXJucyBhcmUgQi5DLiB5ZWFyczpcbiAqXG4gKiAgICB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICogICAgfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAqICAgIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gKiAgICB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICogICAgfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAqXG4gKiAgICBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gKiAgICB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQ6XG4gKlxuICogICAgfCBZZWFyIHwgYHl5YCB8IGB1dWAgfFxuICogICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfFxuICogICAgfCAxICAgIHwgICAwMSB8ICAgMDEgfFxuICogICAgfCAxNCAgIHwgICAxNCB8ICAgMTQgfFxuICogICAgfCAzNzYgIHwgICA3NiB8ICAzNzYgfFxuICogICAgfCAxNDUzIHwgICA1MyB8IDE0NTMgfFxuICpcbiAqICAgIFRoZSBzYW1lIGRpZmZlcmVuY2UgaXMgdHJ1ZSBmb3IgbG9jYWwgYW5kIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFycyAoYFlgIGFuZCBgUmApLFxuICogICAgZXhjZXB0IGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJzIGFyZSBkZXBlbmRlbnQgb24gYG9wdGlvbnMud2Vla1N0YXJ0c09uYFxuICogICAgYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKGNvbXBhcmUgW2dldElTT1dlZWtZZWFyXShodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldElTT1dlZWtZZWFyKVxuICogICAgYW5kIFtnZXRXZWVrWWVhcl0oaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRXZWVrWWVhcikpLlxuICpcbiAqIDYuIFNwZWNpZmljIG5vbi1sb2NhdGlvbiB0aW1lem9uZXMgYXJlIGN1cnJlbnRseSB1bmF2YWlsYWJsZSBpbiBgZGF0ZS1mbnNgLFxuICogICAgc28gcmlnaHQgbm93IHRoZXNlIHRva2VucyBmYWxsIGJhY2sgdG8gR01UIHRpbWV6b25lcy5cbiAqXG4gKiA3LiBUaGVzZSBwYXR0ZXJucyBhcmUgbm90IGluIHRoZSBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiAgICAtIGBpYDogSVNPIGRheSBvZiB3ZWVrXG4gKiAgICAtIGBJYDogSVNPIHdlZWsgb2YgeWVhclxuICogICAgLSBgUmA6IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKiAgICAtIGB0YDogc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYFRgOiBtaWxsaXNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBvYDogb3JkaW5hbCBudW1iZXIgbW9kaWZpZXJcbiAqICAgIC0gYFBgOiBsb25nIGxvY2FsaXplZCBkYXRlXG4gKiAgICAtIGBwYDogbG9uZyBsb2NhbGl6ZWQgdGltZVxuICpcbiAqIDguIGBZWWAgYW5kIGBZWVlZYCB0b2tlbnMgcmVwcmVzZW50IHdlZWstbnVtYmVyaW5nIHllYXJzIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIHllYXJzLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogOS4gYERgIGFuZCBgRERgIHRva2VucyByZXByZXNlbnQgZGF5cyBvZiB0aGUgeWVhciBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCBkYXlzIG9mIHRoZSBtb250aC5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gZm9ybWF0IC0gVGhlIHN0cmluZyBvZiB0b2tlbnNcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmdcbiAqXG4gKiBAdGhyb3dzIGBkYXRlYCBtdXN0IG5vdCBiZSBJbnZhbGlkIERhdGVcbiAqIEB0aHJvd3MgYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGxvY2FsaXplYCBwcm9wZXJ0eVxuICogQHRocm93cyBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgZm9ybWF0TG9uZ2AgcHJvcGVydHlcbiAqIEB0aHJvd3MgdXNlIGB5eXl5YCBpbnN0ZWFkIG9mIGBZWVlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHVzZSBgeXlgIGluc3RlYWQgb2YgYFlZYCBmb3IgZm9ybWF0dGluZyB5ZWFycyB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHVzZSBgZGAgaW5zdGVhZCBvZiBgRGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB1c2UgYGRkYCBpbnN0ZWFkIG9mIGBERGAgZm9yIGZvcm1hdHRpbmcgZGF5cyBvZiB0aGUgbW9udGggdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDExIEZlYnJ1YXJ5IDIwMTQgaW4gbWlkZGxlLWVuZGlhbiBmb3JtYXQ6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgMSwgMTEpLCAnTU0vZGQveXl5eScpXG4gKiAvLz0+ICcwMi8xMS8yMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMiBKdWx5IDIwMTQgaW4gRXNwZXJhbnRvOlxuICogaW1wb3J0IHsgZW9Mb2NhbGUgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUvZW8nXG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiksIFwiZG8gJ2RlJyBNTU1NIHl5eXlcIiwge1xuICogICBsb2NhbGU6IGVvTG9jYWxlXG4gKiB9KVxuICogLy89PiAnMi1hIGRlIGp1bGlvIDIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVzY2FwZSBzdHJpbmcgYnkgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnM6XG4gKiBjb25zdCByZXN1bHQgPSBmb3JtYXQobmV3IERhdGUoMjAxNCwgNiwgMiwgMTUpLCBcImggJ28nJ2Nsb2NrJ1wiKVxuICogLy89PiBcIjMgbydjbG9ja1wiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQoZGF0ZSwgZm9ybWF0U3RyLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgY29uc3QgbG9jYWxlID0gb3B0aW9ucz8ubG9jYWxlID8/IGRlZmF1bHRPcHRpb25zLmxvY2FsZSA/PyBkZWZhdWx0TG9jYWxlO1xuXG4gIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9XG4gICAgb3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIDE7XG5cbiAgY29uc3Qgd2Vla1N0YXJ0c09uID1cbiAgICBvcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbiA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgMDtcblxuICBjb25zdCBvcmlnaW5hbERhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuXG4gIGlmICghaXNWYWxpZChvcmlnaW5hbERhdGUpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHRpbWUgdmFsdWVcIik7XG4gIH1cblxuICBsZXQgcGFydHMgPSBmb3JtYXRTdHJcbiAgICAubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApXG4gICAgLm1hcCgoc3Vic3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gXCJwXCIgfHwgZmlyc3RDaGFyYWN0ZXIgPT09IFwiUFwiKSB7XG4gICAgICAgIGNvbnN0IGxvbmdGb3JtYXR0ZXIgPSBsb25nRm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgICAgIHJldHVybiBsb25nRm9ybWF0dGVyKHN1YnN0cmluZywgbG9jYWxlLmZvcm1hdExvbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1YnN0cmluZztcbiAgICB9KVxuICAgIC5qb2luKFwiXCIpXG4gICAgLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApXG4gICAgLm1hcCgoc3Vic3RyaW5nKSA9PiB7XG4gICAgICAvLyBSZXBsYWNlIHR3byBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyB3aXRoIG9uZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyXG4gICAgICBpZiAoc3Vic3RyaW5nID09PSBcIicnXCIpIHtcbiAgICAgICAgcmV0dXJuIHsgaXNUb2tlbjogZmFsc2UsIHZhbHVlOiBcIidcIiB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gXCInXCIpIHtcbiAgICAgICAgcmV0dXJuIHsgaXNUb2tlbjogZmFsc2UsIHZhbHVlOiBjbGVhbkVzY2FwZWRTdHJpbmcoc3Vic3RyaW5nKSB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl0pIHtcbiAgICAgICAgcmV0dXJuIHsgaXNUb2tlbjogdHJ1ZSwgdmFsdWU6IHN1YnN0cmluZyB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIubWF0Y2godW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHApKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFxuICAgICAgICAgIFwiRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGBcIiArXG4gICAgICAgICAgICBmaXJzdENoYXJhY3RlciArXG4gICAgICAgICAgICBcImBcIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgaXNUb2tlbjogZmFsc2UsIHZhbHVlOiBzdWJzdHJpbmcgfTtcbiAgICB9KTtcblxuICAvLyBpbnZva2UgbG9jYWxpemUgcHJlcHJvY2Vzc29yIChvbmx5IGZvciBmcmVuY2ggbG9jYWxlcyBhdCB0aGUgbW9tZW50KVxuICBpZiAobG9jYWxlLmxvY2FsaXplLnByZXByb2Nlc3Nvcikge1xuICAgIHBhcnRzID0gbG9jYWxlLmxvY2FsaXplLnByZXByb2Nlc3NvcihvcmlnaW5hbERhdGUsIHBhcnRzKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlLFxuICAgIHdlZWtTdGFydHNPbixcbiAgICBsb2NhbGUsXG4gIH07XG5cbiAgcmV0dXJuIHBhcnRzXG4gICAgLm1hcCgocGFydCkgPT4ge1xuICAgICAgaWYgKCFwYXJ0LmlzVG9rZW4pIHJldHVybiBwYXJ0LnZhbHVlO1xuXG4gICAgICBjb25zdCB0b2tlbiA9IHBhcnQudmFsdWU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgKCFvcHRpb25zPy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMgJiZcbiAgICAgICAgICBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pKSB8fFxuICAgICAgICAoIW9wdGlvbnM/LnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnMgJiZcbiAgICAgICAgICBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSlcbiAgICAgICkge1xuICAgICAgICB3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXRTdHIsIFN0cmluZyhkYXRlKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGZvcm1hdHRlcnNbdG9rZW5bMF1dO1xuICAgICAgcmV0dXJuIGZvcm1hdHRlcihvcmlnaW5hbERhdGUsIHRva2VuLCBsb2NhbGUubG9jYWxpemUsIGZvcm1hdHRlck9wdGlvbnMpO1xuICAgIH0pXG4gICAgLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIGNsZWFuRXNjYXBlZFN0cmluZyhpbnB1dCkge1xuICBjb25zdCBtYXRjaGVkID0gaW5wdXQubWF0Y2goZXNjYXBlZFN0cmluZ1JlZ0V4cCk7XG5cbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cCwgXCInXCIpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdDtcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBMb2csIE1pbGtpb0luaXQsIE1pbGtpb1J1bnRpbWVJbml0IH0gZnJvbSBcIi4uL2luZGV4LnRzXCI7XHJcblxyXG5pbnRlcmZhY2UgQ29va2Jvb2tFdmVudCB7XHJcbiAgdHlwZTogXCJtaWxraW9AbG9nZ2VyXCI7XHJcbiAgbG9nOiBMb2c7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kQ29va2Jvb2tFdmVudChydW50aW1lOiBNaWxraW9SdW50aW1lSW5pdDxNaWxraW9Jbml0PiwgZXZlbnQ6IENvb2tib29rRXZlbnQpIHtcclxuICAvLyB0cnkge1xyXG4gIC8vICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgaHR0cDovL2xvY2FsaG9zdDoke3J1bnRpbWUuY29va2Jvb2suY29va2Jvb2tQb3J0fS8kYWN0aW9uYCwge1xyXG4gIC8vICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gIC8vICAgICBoZWFkZXJzOiB7XHJcbiAgLy8gICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgLy8gICAgIH0sXHJcbiAgLy8gICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGV2ZW50KSxcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gIC8vICAgICBjb25zb2xlLmxvZyhcIltDT09LQk9PS11cIiwgYXdhaXQgcmVzcG9uc2UudGV4dCgpKTtcclxuICAvLyAgICAgY29uc29sZS5sb2coXCJbQ09PS0JPT0tdXCIsIFwiSXMgQ29va2Jvb2sgY2xvc2VkPyBUaGVyZSBpcyBhbiBhYm5vcm1hbGl0eSBpbiB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIENvb2tib29rLlwiKTtcclxuICAvLyAgIH1cclxuICAvLyB9IGNhdGNoIChlcnJvcikge1xyXG4gIC8vICAgY29uc29sZS5sb2coXCJbQ09PS0JPT0tdXCIsIGVycm9yKTtcclxuICAvLyAgIGNvbnNvbGUubG9nKFwiW0NPT0tCT09LXVwiLCBcIklzIENvb2tib29rIGNsb3NlZD8gVGhlcmUgaXMgYW4gYWJub3JtYWxpdHkgaW4gdGhlIGNvbW11bmljYXRpb24gd2l0aCBDb29rYm9vay5cIik7XHJcbiAgLy8gfVxyXG59XHJcbiIsCiAgICAiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcImRhdGUtZm5zXCI7XHJcbmltcG9ydCB0eXBlIHsgJGNvbnRleHQsIE1pbGtpb0luaXQsIE1pbGtpb1J1bnRpbWVJbml0IH0gZnJvbSBcIi4uL2luZGV4LnRzXCI7XHJcbmltcG9ydCB7IHNlbmRDb29rYm9va0V2ZW50IH0gZnJvbSBcIi4uL3V0aWxzL3NlbmQtY29va2Jvb2stZXZlbnQudHNcIjtcclxuXHJcbmV4cG9ydCB0eXBlIExvZyA9IFtcIihkZWJ1ZylcIiB8IFwiKGluZm8pXCIgfCBcIih3YXJuKVwiIHwgXCIoZXJyb3IpXCIgfCBcIihyZXF1ZXN0KVwiIHwgXCIocmVzcG9uc2UpXCIsIHN0cmluZyAvKiBleGVjdXRlSWQgKi8sIHN0cmluZywgc3RyaW5nLCBzdHJpbmcsIC4uLkFycmF5PHVua25vd24+XTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2VyIHtcclxuICAgIF86IHtcclxuICAgICAgICBsb2dzOiBBcnJheTxMb2c+O1xyXG4gICAgICAgIHRhZ3M6IE1hcDxzdHJpbmcsIHVua25vd24+O1xyXG4gICAgICAgIHN1Ym1pdDogKGNvbnRleHQ6ICRjb250ZXh0KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcclxuICAgIH07XHJcbiAgICBzZXRUYWc6IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHZvaWQ7XHJcbiAgICBzZXRMb2c6ICguLi5sb2c6IExvZykgPT4gdm9pZDtcclxuICAgIGRlYnVnOiAoZGVzY3JpcHRpb246IHN0cmluZywgLi4ucGFyYW1zOiBBcnJheTx1bmtub3duPikgPT4gTG9nO1xyXG4gICAgaW5mbzogKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IExvZztcclxuICAgIHdhcm46IChkZXNjcmlwdGlvbjogc3RyaW5nLCAuLi5wYXJhbXM6IEFycmF5PHVua25vd24+KSA9PiBMb2c7XHJcbiAgICBlcnJvcjogKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IExvZztcclxuICAgIHJlcXVlc3Q6IChkZXNjcmlwdGlvbjogc3RyaW5nLCAuLi5wYXJhbXM6IEFycmF5PHVua25vd24+KSA9PiBMb2c7XHJcbiAgICByZXNwb25zZTogKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IExvZztcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgTG9nZ2VySW5zZXJ0aW5nSGFuZGxlciA9IChsb2c6IExvZykgPT4gYm9vbGVhbjtcclxuXHJcbmV4cG9ydCB0eXBlIExvZ2dlclN1Ym1pdHRpbmdIYW5kbGVyID0gKGNvbnRleHQ6ICRjb250ZXh0LCBsb2dzOiBBcnJheTxMb2c+LCB0YWdzOiBNYXA8c3RyaW5nLCB1bmtub3duPikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9nZ2VyPE1pbGtpb1J1bnRpbWUgZXh0ZW5kcyBNaWxraW9SdW50aW1lSW5pdDxNaWxraW9SdW50aW1lSW5pdDxNaWxraW9Jbml0Pj4gPSBNaWxraW9SdW50aW1lSW5pdDxNaWxraW9Jbml0Pj4ocnVudGltZTogTWlsa2lvUnVudGltZSwgcGF0aDogc3RyaW5nLCBleGVjdXRlSWQ6IHN0cmluZyk6IExvZ2dlciB7XHJcbiAgICBjb25zdCBsb2dnZXIgPSB7fSBhcyBMb2dnZXI7XHJcblxyXG4gICAgbG9nZ2VyLl8gPSB7XHJcbiAgICAgICAgbG9nczogW10sXHJcbiAgICAgICAgdGFnczogbmV3IE1hcCgpLFxyXG4gICAgICAgIHN1Ym1pdDogKGNvbnRleHQ6ICRjb250ZXh0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcnVudGltZS5vbkxvZ2dlclN1Ym1pdHRpbmcpIHJldHVybjtcclxuICAgICAgICAgICAgcmV0dXJuIHJ1bnRpbWUub25Mb2dnZXJTdWJtaXR0aW5nKGNvbnRleHQsIGxvZ2dlci5fLmxvZ3MsIGxvZ2dlci5fLnRhZ3MpO1xyXG4gICAgICAgIH0sXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IF9fdGFnUHVzaCA9IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkID0+IHtcclxuICAgICAgICBsb2dnZXIuXy50YWdzLnNldChrZXksIHZhbHVlKTtcclxuICAgIH07XHJcbiAgICBjb25zdCBfX2xvZ1B1c2ggPSAobG9nOiBMb2cpOiBMb2cgPT4ge1xyXG4gICAgICAgIGNvbnN0IGluc2VydGluZyA9IHJ1bnRpbWUub25Mb2dnZXJJbnNlcnRpbmdcclxuICAgICAgICAgICAgPyBydW50aW1lLm9uTG9nZ2VySW5zZXJ0aW5nXHJcbiAgICAgICAgICAgIDogKGxvZzogTG9nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsb2cgPSBbLi4ubG9nXTtcclxuICAgICAgICAgICAgICAgIGxvZ1swXSA9IGBcXG4ke2xvZ1swXX1gIGFzIGFueTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKC4uLmxvZyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKCFpbnNlcnRpbmcobG9nKSkgcmV0dXJuIGxvZztcclxuXHJcbiAgICAgICAgbG9nZ2VyLl8ubG9ncy5wdXNoKFsuLi5sb2ddKTtcclxuXHJcbiAgICAgICAgaWYgKHJ1bnRpbWUuZGV2ZWxvcCkge1xyXG4gICAgICAgICAgICB2b2lkIHNlbmRDb29rYm9va0V2ZW50KHJ1bnRpbWUsIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwibWlsa2lvQGxvZ2dlclwiLFxyXG4gICAgICAgICAgICAgICAgbG9nLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBsb2c7XHJcbiAgICB9O1xyXG5cclxuICAgIGxvZ2dlci5zZXRUYWcgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiBfX3RhZ1B1c2goa2V5LCB2YWx1ZSk7XHJcbiAgICBsb2dnZXIuc2V0TG9nID0gKC4uLmxvZzogTG9nKSA9PiBfX2xvZ1B1c2gobG9nKTtcclxuXHJcbiAgICBjb25zdCBnZXROb3cgPSAoKSA9PiBgJHtmb3JtYXQobmV3IERhdGUoKSwgXCIoeXl5eS1NTS1kZCBoaDptbTpzcylcIil9YDtcclxuXHJcbiAgICBsb2dnZXIuZGVidWcgPSAoZGVzY3JpcHRpb246IHN0cmluZywgLi4ucGFyYW1zOiBBcnJheTx1bmtub3duPikgPT4gX19sb2dQdXNoKFtcIihkZWJ1ZylcIiwgcGF0aCwgZXhlY3V0ZUlkLCBnZXROb3coKSwgYFxcbiR7ZGVzY3JpcHRpb259YCwgLi4ucGFyYW1zXSk7XHJcbiAgICBsb2dnZXIuaW5mbyA9IChkZXNjcmlwdGlvbjogc3RyaW5nLCAuLi5wYXJhbXM6IEFycmF5PHVua25vd24+KSA9PiBfX2xvZ1B1c2goW1wiKGluZm8pXCIsIHBhdGgsIGV4ZWN1dGVJZCwgZ2V0Tm93KCksIGBcXG4ke2Rlc2NyaXB0aW9ufWAsIC4uLnBhcmFtc10pO1xyXG4gICAgbG9nZ2VyLndhcm4gPSAoZGVzY3JpcHRpb246IHN0cmluZywgLi4ucGFyYW1zOiBBcnJheTx1bmtub3duPikgPT4gX19sb2dQdXNoKFtcIih3YXJuKVwiLCBwYXRoLCBleGVjdXRlSWQsIGdldE5vdygpLCBgXFxuJHtkZXNjcmlwdGlvbn1gLCAuLi5wYXJhbXNdKTtcclxuICAgIGxvZ2dlci5lcnJvciA9IChkZXNjcmlwdGlvbjogc3RyaW5nLCAuLi5wYXJhbXM6IEFycmF5PHVua25vd24+KSA9PiBfX2xvZ1B1c2goW1wiKGVycm9yKVwiLCBwYXRoLCBleGVjdXRlSWQsIGdldE5vdygpLCBgXFxuJHtkZXNjcmlwdGlvbn1gLCAuLi5wYXJhbXNdKTtcclxuICAgIGxvZ2dlci5yZXF1ZXN0ID0gKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IF9fbG9nUHVzaChbXCIocmVxdWVzdClcIiwgcGF0aCwgZXhlY3V0ZUlkLCBnZXROb3coKSwgYFxcbiR7ZGVzY3JpcHRpb259YCwgLi4ucGFyYW1zXSk7XHJcbiAgICBsb2dnZXIucmVzcG9uc2UgPSAoZGVzY3JpcHRpb246IHN0cmluZywgLi4ucGFyYW1zOiBBcnJheTx1bmtub3duPikgPT4gX19sb2dQdXNoKFtcIihyZXNwb25zZSlcIiwgcGF0aCwgZXhlY3V0ZUlkLCBnZXROb3coKSwgYFxcbiR7ZGVzY3JpcHRpb259YCwgLi4ucGFyYW1zXSk7XHJcblxyXG4gICAgcmV0dXJuIGxvZ2dlcjtcclxufVxyXG4iLAogICAgImV4cG9ydCBpbnRlcmZhY2UgU3RlcHM8U3RhZ2VUIGV4dGVuZHMgUmVjb3JkPGFueSwgYW55Pj4ge1xyXG4gIHN0ZXA6IFN0ZXBGdW5jdGlvbjxTdGFnZVQ+O1xyXG4gIHJ1bjogKCkgPT4gUHJvbWlzZTxSZW1vdmVfPFN0YWdlVD4+O1xyXG59XHJcblxyXG50eXBlIFJlbW92ZV88VD4gPSB7XHJcbiAgW0sgaW4ga2V5b2YgVCBhcyBLIGV4dGVuZHMgYF8ke3N0cmluZ31gID8gbmV2ZXIgOiBLXTogVFtLXTtcclxufTtcclxuXHJcbnR5cGUgVG9FbXB0eU9iamVjdDxUPiA9IFQgZXh0ZW5kcyB1bmRlZmluZWQgfCBudWxsIHwgbmV2ZXIgPyB7fSA6IFQgZXh0ZW5kcyBvYmplY3QgPyBUIDoge307XHJcblxyXG5leHBvcnQgdHlwZSBTdGVwRnVuY3Rpb248U3RhZ2VUIGV4dGVuZHMgUmVjb3JkPGFueSwgYW55Pj4gPSA8SGFuZGxlclQgZXh0ZW5kcyAoc3RhZ2U6IFJlYWRvbmx5PFN0YWdlVD4pID0+IFJlY29yZDxhbnksIGFueT4gfCBQcm9taXNlPFJlY29yZDxhbnksIGFueT4+PihoYW5kbGVyOiBIYW5kbGVyVCkgPT4gU3RlcHM8QXdhaXRlZDxTdGFnZVQ+ICYgVG9FbXB0eU9iamVjdDxBd2FpdGVkPFJldHVyblR5cGU8SGFuZGxlclQ+Pj4+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0ZXAoKTogU3RlcHM8e30+IHtcclxuICBjb25zdCBzdGVwQ29udHJvbGxlciA9IHtcclxuICAgICRtaWxraW9UeXBlOiBcInN0ZXBcIixcclxuICAgIF9zdGVwczogW10gYXMgQXJyYXk8KHN0YWdlOiBhbnkpID0+IFByb21pc2U8YW55Pj4sXHJcbiAgICBzdGVwKGhhbmRsZXI6IChzdGFnZTogYW55KSA9PiBQcm9taXNlPGFueT4pIHtcclxuICAgICAgc3RlcENvbnRyb2xsZXIuX3N0ZXBzLnB1c2goaGFuZGxlcik7XHJcbiAgICAgIHJldHVybiBzdGVwQ29udHJvbGxlcjtcclxuICAgIH0sXHJcbiAgICBhc3luYyBydW4oKSB7XHJcbiAgICAgIGxldCBzdGFnZSA9IHt9O1xyXG4gICAgICBmb3IgKGNvbnN0IHN0ZXAgb2Ygc3RlcENvbnRyb2xsZXIuX3N0ZXBzKSB7XHJcbiAgICAgICAgc3RhZ2UgPSB7IC4uLnN0YWdlLCAuLi4oYXdhaXQgc3RlcChzdGFnZSkpIH07XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8YW55LCBhbnk+ID0ge307XHJcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHN0YWdlKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoc3RhZ2UgYXMgYW55KVtrZXldO1xyXG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoXCJfXCIpKSByZXN1bHRba2V5XSA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9LFxyXG4gIH07XHJcbiAgcmV0dXJuIHN0ZXBDb250cm9sbGVyIGFzIGFueSBhcyBTdGVwczx7fT47XHJcbn1cclxuIiwKICAgICJleHBvcnQgY2xhc3MgVHJpZTxUPiB7XHJcbiAgcHJpdmF0ZSByb290OiBUcmllTm9kZTxUPjtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLnJvb3QgPSBuZXcgVHJpZU5vZGUoKTtcclxuICB9XHJcblxyXG4gIGFkZChwYXRoOiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGhcclxuICAgICAgLnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpXHJcbiAgICAgIC5zcGxpdChcIi9cIilcclxuICAgICAgLmZpbHRlcigocCkgPT4gcCAhPT0gXCJcIik7XHJcbiAgICBsZXQgY3VycmVudE5vZGUgPSB0aGlzLnJvb3Q7XHJcbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGN1cnJlbnROb2RlLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xyXG4gICAgICBpZiAoIWN1cnJlbnROb2RlLmNoaWxkcmVuLmhhcyhwYXJ0KSkge1xyXG4gICAgICAgIGN1cnJlbnROb2RlLmNoaWxkcmVuLnNldChwYXJ0LCBuZXcgVHJpZU5vZGUoKSk7XHJcbiAgICAgIH1cclxuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5jaGlsZHJlbi5nZXQocGFydCkhO1xyXG4gICAgfVxyXG4gICAgY3VycmVudE5vZGUudmFsdWUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldChwYXRoOiBzdHJpbmcpOiBUIHwgbnVsbCB7XHJcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGhcclxuICAgICAgLnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpXHJcbiAgICAgIC5zcGxpdChcIi9cIilcclxuICAgICAgLmZpbHRlcigocCkgPT4gcCAhPT0gXCJcIik7XHJcbiAgICBsZXQgY3VycmVudE5vZGUgPSB0aGlzLnJvb3Q7XHJcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcclxuICAgICAgaWYgKCFjdXJyZW50Tm9kZS5jaGlsZHJlbi5oYXMocGFydCkpIHJldHVybiBudWxsO1xyXG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmNoaWxkcmVuLmdldChwYXJ0KSE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3VycmVudE5vZGUudmFsdWU7XHJcbiAgfVxyXG5cclxuICBoYXMocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGhcclxuICAgICAgLnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpXHJcbiAgICAgIC5zcGxpdChcIi9cIilcclxuICAgICAgLmZpbHRlcigocCkgPT4gcCAhPT0gXCJcIik7XHJcbiAgICBsZXQgY3VycmVudE5vZGUgPSB0aGlzLnJvb3Q7XHJcbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAwKSByZXR1cm4gY3VycmVudE5vZGUudmFsdWUgIT09IG51bGw7XHJcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcclxuICAgICAgaWYgKCFjdXJyZW50Tm9kZS5jaGlsZHJlbi5oYXMocGFydCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgZWxzZSBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmNoaWxkcmVuLmdldChwYXJ0KSE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3VycmVudE5vZGUudmFsdWUgIT09IG51bGw7XHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBUcmllTm9kZTxUPiB7XHJcbiAgY2hpbGRyZW46IE1hcDxzdHJpbmcsIFRyaWVOb2RlPFQ+PjtcclxuICB2YWx1ZTogVCB8IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5jaGlsZHJlbiA9IG5ldyBNYXAoKTtcclxuICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gIH1cclxufVxyXG4iLAogICAgImltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgZXhjZXB0aW9uSGFuZGxlciwgcmVqZWN0IH0gZnJvbSBcIi4uL2luZGV4LnRzXCI7XHJcbmltcG9ydCB0eXBlIHsgTWl4aW4sIEdlbmVyYXRlZEluaXQsICR0eXBlcywgQ29udGV4dEh0dHAsIE1pbGtpb1Jlc3BvbnNlUmVqZWN0LCBSZXN1bHRzLCBNaWxraW9SZXNwb25zZVN1Y2Nlc3MgfSBmcm9tIFwiLi4vaW5kZXgudHNcIjtcclxuaW1wb3J0IHR5cGUgeyBfX2luaXRFeGVjdXRlciB9IGZyb20gXCIuLi9leGVjdXRlL2luZGV4LnRzXCI7XHJcbmltcG9ydCB7IF9fY3JlYXRlSWQgfSBmcm9tIFwiLi4vdXRpbHMvY3JlYXRlLWlkLnRzXCI7XHJcbmltcG9ydCB7IFRyaWUgfSBmcm9tIFwiLi4vdXRpbHMvdHJpZS50c1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgTWlsa2lvSHR0cFJlcXVlc3QgPSBSZXF1ZXN0O1xyXG5cclxuZXhwb3J0IHR5cGUgTWlsa2lvSHR0cFJlc3BvbnNlID0gTWl4aW48XHJcbiAgICBSZXNwb25zZUluaXQsXHJcbiAgICB7XHJcbiAgICAgICAgLy8gYm9keTogc3RyaW5nIHwgQmxvYiB8IEZvcm1EYXRhIHwgVVJMU2VhcmNoUGFyYW1zIHwgUmVhZGFibGVTdHJlYW08VWludDhBcnJheT47XHJcbiAgICAgICAgYm9keTogYW55O1xyXG4gICAgICAgIHN0YXR1czogbnVtYmVyO1xyXG4gICAgICAgIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbiAgICB9XHJcbj47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbml0TGlzdGVuZXIoZ2VuZXJhdGVkOiBHZW5lcmF0ZWRJbml0LCBydW50aW1lOiBhbnksIGV4ZWN1dGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBfX2luaXRFeGVjdXRlcj4pIHtcclxuICAgIGNvbnN0IHBvcnQgPSBydW50aW1lLnBvcnQ7XHJcbiAgICBjb25zdCB0cmllID0gbmV3IFRyaWU8YW55PigpO1xyXG4gICAgY29uc3QgZmV0Y2ggPSBhc3luYyAob3B0aW9uczoge1xyXG4gICAgICAgIHJlcXVlc3Q6IE1pbGtpb0h0dHBSZXF1ZXN0O1xyXG4gICAgICAgIGVudk1vZGU/OiBzdHJpbmc7XHJcbiAgICAgICAgZW52PzogUmVjb3JkPGFueSwgYW55PjtcclxuICAgICAgICByb3V0ZVNjaGVtYT86IGFueTtcclxuICAgIH0pOiBQcm9taXNlPFJlc3BvbnNlPiA9PiB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMucmVxdWVzdC5tZXRob2QgPT09IFwiT1BUSU9OU1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UodW5kZWZpbmVkLCB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzXCI6IHJ1bnRpbWUuY29ycz8uY29yc0FsbG93TWV0aG9kcyA/PyBcIipcIixcclxuICAgICAgICAgICAgICAgICAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiOiBydW50aW1lLmNvcnM/LmNvcnNBbGxvd09yaWdpbiA/PyBcIipcIixcclxuICAgICAgICAgICAgICAgICAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnNcIjogcnVudGltZS5jb3JzPy5jb3JzQWxsb3dIZWFkZXJzID8/IFwiKlwiLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3B0aW9ucy5yZXF1ZXN0LnVybC5lbmRzV2l0aChcIi9nZW5lcmF0ZV8yMDRcIikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IDIwNCxcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBTZXJ2ZXI6IFwibWlsa2lvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzXCI6IHJ1bnRpbWUuY29ycz8uY29yc0FsbG93TWV0aG9kcyA/PyBcIipcIixcclxuICAgICAgICAgICAgICAgICAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpblwiOiBydW50aW1lLmNvcnM/LmNvcnNBbGxvd09yaWdpbiA/PyBcIipcIixcclxuICAgICAgICAgICAgICAgICAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnNcIjogcnVudGltZS5jb3JzPy5jb3JzQWxsb3dIZWFkZXJzID8/IFwiKlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQ2FjaGUtQ29udHJvbFwiOiBcIm5vLXN0b3JlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogYHRleHQvcGxhaW47IHRpbWU9JHtEYXRlLm5vdygpfWAsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwob3B0aW9ucy5yZXF1ZXN0LnVybCk7XHJcbiAgICAgICAgbGV0IHBhdGhBcnJheSA9IHVybC5wYXRobmFtZS5zdWJzdHJpbmcoMSkuc3BsaXQoXCIvXCIpO1xyXG4gICAgICAgIGlmIChydW50aW1lLmFjY2Vzc0tleSAmJiBwYXRoQXJyYXkuYXQoMCkgIT09IHJ1bnRpbWUuYWNjZXNzS2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UodW5kZWZpbmVkLCB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IDQwMyxcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcIjogcnVudGltZS5jb3JzPy5jb3JzQWxsb3dNZXRob2RzID8/IFwiKlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXCI6IHJ1bnRpbWUuY29ycz8uY29yc0FsbG93T3JpZ2luID8/IFwiKlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVyc1wiOiBydW50aW1lLmNvcnM/LmNvcnNBbGxvd0hlYWRlcnMgPz8gXCIqXCIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJ1bnRpbWUuaWdub3JlUGF0aExldmVsICE9PSB1bmRlZmluZWQgJiYgcnVudGltZS5pZ25vcmVQYXRoTGV2ZWwgIT09IDApIHBhdGhBcnJheSA9IHBhdGhBcnJheS5zbGljZShydW50aW1lLmlnbm9yZVBhdGhMZXZlbCk7XHJcbiAgICAgICAgY29uc3QgcGF0aFN0cmluZyA9IGAvJHtwYXRoQXJyYXkuam9pbihcIi9cIil9YDtcclxuXHJcbiAgICAgICAgY29uc3QgZXhlY3V0ZUlkID0gcnVudGltZT8uZXhlY3V0ZUlkID8gYXdhaXQgcnVudGltZS5leGVjdXRlSWQob3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMpIDogX19jcmVhdGVJZCgpO1xyXG5cclxuICAgICAgICBjb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIocnVudGltZSwgcGF0aFN0cmluZywgZXhlY3V0ZUlkKTtcclxuICAgICAgICBydW50aW1lLnJ1bnRpbWUucmVxdWVzdC5zZXQoZXhlY3V0ZUlkLCB7IGxvZ2dlciB9KTtcclxuICAgICAgICBjb25zdCByZXNwb25zZTogTWlsa2lvSHR0cFJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgICBib2R5OiBcIlwiLFxyXG4gICAgICAgICAgICBzdGF0dXM6IDIwMCxcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzXCI6IHJ1bnRpbWUuY29ycz8uY29yc0FsbG93TWV0aG9kcyA/PyBcIipcIixcclxuICAgICAgICAgICAgICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXCI6IHJ1bnRpbWUuY29ycz8uY29yc0FsbG93T3JpZ2luID8/IFwiKlwiLFxyXG4gICAgICAgICAgICAgICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzXCI6IHJ1bnRpbWUuY29ycz8uY29yc0FsbG93SGVhZGVycyA/PyBcIipcIixcclxuICAgICAgICAgICAgICAgIFwiQ2FjaGUtQ29udHJvbFwiOiBcIm5vLXN0b3JlXCIsXHJcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsZXQgZmluYWxlczogQXJyYXk8KCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4+ID0gW107XHJcblxyXG5cclxuICAgICAgICBjb25zdCBodHRwID0gKGF3YWl0IChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlwID0gcnVudGltZS5yZWFsSXAgPyBydW50aW1lLnJlYWxJcChvcHRpb25zLnJlcXVlc3QuaGVhZGVycykgOiBcIjo6MVwiO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICBzdHJpbmc6IGF3YWl0IG9wdGlvbnMucmVxdWVzdC50ZXh0KCksXHJcbiAgICAgICAgICAgICAgICBwYXJzZWQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICAgICAgICBpcCxcclxuICAgICAgICAgICAgICAgIHBhdGg6IHsgc3RyaW5nOiBwYXRoU3RyaW5nIGFzIGtleW9mICR0eXBlc1tcImdlbmVyYXRlZFwiXVtcInJvdXRlU2NoZW1hXCJdLCBhcnJheTogcGF0aEFycmF5IH0sXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0OiBvcHRpb25zLnJlcXVlc3QsXHJcbiAgICAgICAgICAgICAgICByZXNwb25zZSxcclxuICAgICAgICAgICAgfSBhcyBDb250ZXh0SHR0cDtcclxuICAgICAgICB9KSgpKSE7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRleHQ6IGFueSA9IHsgcmVqZWN0IH07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgcnVudGltZS5lbWl0KFwibWlsa2lvOmh0dHBSZXF1ZXN0XCIsIHsgZXhlY3V0ZUlkLCBsb2dnZXIsIHBhdGg6IGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nLCBodHRwLCByZWplY3QgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLmdldChcIkFjY2VwdFwiKT8uc3RhcnRzV2l0aChcInRleHQvZXZlbnQtc3RyZWFtXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhY3Rpb25cclxuICAgICAgICAgICAgICAgIGxldCByb3V0ZVNjaGVtYSA9IG9wdGlvbnMucm91dGVTY2hlbWE7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJvdXRlU2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm91dGVTY2hlbWEgPSB0cmllLmdldChodHRwLnBhdGguc3RyaW5nIGFzIHN0cmluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlU2NoZW1hID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlU2NoZW1hID0gZ2VuZXJhdGVkLnJvdXRlU2NoZW1hPy5baHR0cC5wYXRoLnN0cmluZ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZVNjaGVtYSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBydW50aW1lLmVtaXQoXCJtaWxraW86aHR0cE5vdEZvdW5kXCIsIHsgZXhlY3V0ZUlkLCBsb2dnZXIsIHBhdGg6IGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nLCBodHRwLCByZWplY3QgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZWplY3QoXCJOT1RfRk9VTkRcIiwgeyBwYXRoOiBodHRwLnBhdGguc3RyaW5nIGFzIHN0cmluZyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJvdXRlU2NoZW1hLm1vZHVsZSAhPT0gXCJmdW5jdGlvblwiKSByb3V0ZVNjaGVtYS5tb2R1bGUgPSBhd2FpdCByb3V0ZVNjaGVtYS5tb2R1bGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugcm91dGVTY2hlbWEubW9kdWxlID0gYXdhaXQgcm91dGVTY2hlbWEubW9kdWxlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWUuYWRkKGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nLCByb3V0ZVNjaGVtYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocm91dGVTY2hlbWEudHlwZSAhPT0gXCJhY3Rpb25cIikgdGhyb3cgcmVqZWN0KFwiVU5BQ0NFUFRBQkxFXCIsIHsgZXhwZWN0ZWQ6IFwic3RyZWFtXCIsIG1lc3NhZ2U6IGBOb3QgYWNjZXB0YWJsZSwgdGhlIEFjY2VwdCBpbiB0aGUgcmVxdWVzdCBoZWFkZXIgc2hvdWxkIGJlIFwidGV4dC9ldmVudC1zdHJlYW1cIi4gSWYgeW91IGFyZSB1c2luZyB0aGUgXCJAbWlsa2lvL3N0YXJnYXRlXCIgcGFja2FnZSwgcGxlYXNlIGFkZCBcXGB0eXBlOiBcInN0cmVhbVwiXFxgIHRvIHRoZSBleGVjdXRlIG9wdGlvbnMuYCB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmh0dHAgPSBodHRwO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5oZWFkZXJzID0gaHR0cC5yZXF1ZXN0LmhlYWRlcnM7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY3V0ZWQgPSBhd2FpdCBleGVjdXRlci5fX2V4ZWN1dGUocm91dGVTY2hlbWEsIHtcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRXhlY3V0ZUlkOiBleGVjdXRlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZExvZ2dlcjogbG9nZ2VyLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzIGFzIEhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGh0dHAucGFyYW1zLnN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXNUeXBlOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBmaW5hbGVzID0gZXhlY3V0ZWQuZmluYWxlcztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuYm9keSA9PT0gXCJcIiAmJiBleGVjdXRlZC5yZXN1bHRzLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhlY3V0ZWQuZW1wdHlSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuYm9keSA9IGB7XCJkYXRhXCI6e30sXCJleGVjdXRlSWRcIjpcIiR7ZXhlY3V0ZUlkfVwiLFwic3VjY2Vzc1wiOnRydWV9YDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4ZWN1dGVkLnJlc3VsdHNUeXBlU2FmZXR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJvZHkgPSBge1wiZGF0YVwiOiR7cm91dGVTY2hlbWEucmVzdWx0c1RvSlNPTihleGVjdXRlZC5yZXN1bHRzLnZhbHVlKX0sXCJleGVjdXRlSWRcIjpcIiR7ZXhlY3V0ZUlkfVwiLFwic3VjY2Vzc1wiOnRydWV9YDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5ib2R5ID0gYHtcImRhdGFcIjoke0pTT04uc3RyaW5naWZ5KGV4ZWN1dGVkLnJlc3VsdHMudmFsdWUpfSxcImV4ZWN1dGVJZFwiOlwiJHtleGVjdXRlSWR9XCIsXCJzdWNjZXNzXCI6dHJ1ZX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCBydW50aW1lLmVtaXQoXCJtaWxraW86aHR0cFJlc3BvbnNlXCIsIHsgZXhlY3V0ZUlkLCBsb2dnZXIsIHBhdGg6IGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nLCBodHRwLCBoZWFkZXJzOiBodHRwLnJlcXVlc3QuaGVhZGVycywgY29udGV4dDogZXhlY3V0ZWQuY29udGV4dCwgc3VjY2VzczogdHJ1ZSwgcmVqZWN0IH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBmaW5hbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkFuIGVycm9yIG9jY3VycmVkIGluc2lkZSBvbkZpbmFsbHkuXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcnVudGltZS5ydW50aW1lLnJlcXVlc3QuZGVsZXRlKGV4ZWN1dGVJZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHJlc3BvbnNlLmJvZHksIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIHN0cmVhbVxyXG4gICAgICAgICAgICAgICAgbGV0IHJvdXRlU2NoZW1hID0gb3B0aW9ucy5yb3V0ZVNjaGVtYTtcclxuICAgICAgICAgICAgICAgIGlmICghcm91dGVTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgICAgICByb3V0ZVNjaGVtYSA9IHRyaWUuZ2V0KGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocm91dGVTY2hlbWEgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVTY2hlbWEgPSBnZW5lcmF0ZWQucm91dGVTY2hlbWE/LltodHRwLnBhdGguc3RyaW5nXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlU2NoZW1hID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJ1bnRpbWUuZW1pdChcIm1pbGtpbzpodHRwTm90Rm91bmRcIiwgeyBleGVjdXRlSWQsIGxvZ2dlciwgcGF0aDogaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsIGh0dHAsIHJlamVjdCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlamVjdChcIk5PVF9GT1VORFwiLCB7IHBhdGg6IGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygcm91dGVTY2hlbWEubW9kdWxlICE9PSBcImZ1bmN0aW9uXCIpIHJvdXRlU2NoZW1hLm1vZHVsZSA9IGF3YWl0IHJvdXRlU2NoZW1hLm1vZHVsZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSByb3V0ZVNjaGVtYS5tb2R1bGUgPSBhd2FpdCByb3V0ZVNjaGVtYS5tb2R1bGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZS5hZGQoaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsIHJvdXRlU2NoZW1hKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlU2NoZW1hLnR5cGUgIT09IFwic3RyZWFtXCIpIHRocm93IHJlamVjdChcIlVOQUNDRVBUQUJMRVwiLCB7IGV4cGVjdGVkOiBcInN0cmVhbVwiLCBtZXNzYWdlOiBgTm90IGFjY2VwdGFibGUsIHRoZSBBY2NlcHQgaW4gdGhlIHJlcXVlc3QgaGVhZGVyIHNob3VsZCBiZSBcImFwcGxpY2F0aW9uL2pzb25cIi4gSWYgeW91IGFyZSB1c2luZyB0aGUgXCJAbWlsa2lvL3N0YXJnYXRlXCIgcGFja2FnZSwgcGxlYXNlIHJlbW92ZSBcXGB0eXBlOiBcInN0cmVhbVwiXFxgIHRvIHRoZSBleGVjdXRlIG9wdGlvbnMuYCB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVDbG9zZSA9IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBydW50aW1lLnJ1bnRpbWUucmVxdWVzdC5kZWxldGUoZXhlY3V0ZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgZmluYWxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiQW4gZXJyb3Igb2NjdXJyZWQgaW5zaWRlIG9uRmluYWxseS5cIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0Lmh0dHAgPSBodHRwO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5oZWFkZXJzID0gaHR0cC5yZXF1ZXN0LmhlYWRlcnM7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY3V0ZWQgPSBhd2FpdCBleGVjdXRlci5fX2V4ZWN1dGUocm91dGVTY2hlbWEsIHtcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRXhlY3V0ZUlkOiBleGVjdXRlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZExvZ2dlcjogbG9nZ2VyLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzIGFzIEhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGh0dHAucGFyYW1zLnN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXNUeXBlOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBmaW5hbGVzID0gZXhlY3V0ZWQuZmluYWxlcztcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmU6IGJ1blxyXG4gICAgICAgICAgICAgICAgbGV0IHN0cmVhbTogUmVhZGFibGVTdHJlYW07XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlOiBidW5cclxuICAgICAgICAgICAgICAgIGxldCBjb250cm9sOiBSZWFkYWJsZVN0cmVhbURpcmVjdENvbnRyb2xsZXIgfCBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmU6IGJ1blxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBCdW4gIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlOiBidW5cclxuICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImRpcmVjdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlOiBidW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgcHVsbChjb250cm9sbGVyOiBSZWFkYWJsZVN0cmVhbURpcmVjdENvbnRyb2xsZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgPSBjb250cm9sbGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLndyaXRlKGBkYXRhOkAke0pTT04uc3RyaW5naWZ5KHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogdW5kZWZpbmVkLCBleGVjdXRlSWQgfSBzYXRpc2ZpZXMgTWlsa2lvUmVzcG9uc2VTdWNjZXNzPGFueT4pfVxcblxcbmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgdmFsdWUgb2YgZXhlY3V0ZWQucmVzdWx0cy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShbbnVsbCwgdmFsdWVdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIud3JpdGUoYGRhdGE6JHtyZXN1bHR9XFxuXFxuYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlZC5yZXN1bHRzLnZhbHVlLnJldHVybih1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhjZXB0aW9uID0gZXhjZXB0aW9uSGFuZGxlcihleGVjdXRlSWQsIGxvZ2dlciwgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2V4Y2VwdGlvbi5jb2RlXSA9IGV4Y2VwdGlvbi5yZWplY3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci53cml0ZShgZGF0YToke0pTT04uc3RyaW5naWZ5KFtyZXN1bHQsIG51bGxdKX1cXG5cXG5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jIGNhbmNlbCgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSBhcyBhbnkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBub2RlLmpzIG9yIG90aGVyc1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmU6IGJ1blxyXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmU6IGJ1blxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgPSBjb250cm9sbGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoYGRhdGE6QCR7SlNPTi5zdHJpbmdpZnkoeyBzdWNjZXNzOiB0cnVlLCBkYXRhOiB1bmRlZmluZWQsIGV4ZWN1dGVJZCB9IHNhdGlzZmllcyBNaWxraW9SZXNwb25zZVN1Y2Nlc3M8YW55Pil9XFxuXFxuYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiBleGVjdXRlZC5yZXN1bHRzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5yZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KFtudWxsLCB2YWx1ZV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGBkYXRhOiR7cmVzdWx0fVxcblxcbmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQucmVzdWx0cy52YWx1ZS5yZXR1cm4odW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4Y2VwdGlvbiA9IGV4Y2VwdGlvbkhhbmRsZXIoZXhlY3V0ZUlkLCBsb2dnZXIsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtleGNlcHRpb24uY29kZV0gPSBleGNlcHRpb24ucmVqZWN0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShgZGF0YToke0pTT04uc3RyaW5naWZ5KFtyZXN1bHQsIG51bGxdKX1cXG5cXG5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jIGNhbmNlbCgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSBhcyBhbnkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJvZHkgPSBzdHJlYW07XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZS5oZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiO1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVyc1tcIkNhY2hlLUNvbnRyb2xcIl0gPSBcIm5vLWNhY2hlXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgYXdhaXQgcnVudGltZS5lbWl0KFwibWlsa2lvOmh0dHBSZXNwb25zZVwiLCB7IGV4ZWN1dGVJZCwgbG9nZ2VyLCBwYXRoOiBodHRwLnBhdGguc3RyaW5nIGFzIHN0cmluZywgaHR0cCwgaGVhZGVyczogaHR0cC5yZXF1ZXN0LmhlYWRlcnMsIGNvbnRleHQ6IGV4ZWN1dGVkLmNvbnRleHQsIHN1Y2Nlc3M6IHRydWUsIHJlamVjdCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHJlc3BvbnNlLmJvZHksIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdHM6IFJlc3VsdHM8TWlsa2lvUmVzcG9uc2VSZWplY3Q+ID0ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV4Y2VwdGlvbkhhbmRsZXIoZXhlY3V0ZUlkLCBsb2dnZXIsIGVycm9yKSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdHMudmFsdWUgIT09IHVuZGVmaW5lZCkgcmVzcG9uc2UuYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdHMudmFsdWUpO1xyXG4gICAgICAgICAgICBhd2FpdCBydW50aW1lLmVtaXQoXCJtaWxraW86aHR0cFJlc3BvbnNlXCIsIHsgZXhlY3V0ZUlkLCBsb2dnZXIsIHBhdGg6IGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nLCBodHRwLCBoZWFkZXJzOiBodHRwLnJlcXVlc3QuaGVhZGVycywgY29udGV4dCwgc3VjY2VzczogZmFsc2UsIHJlamVjdCB9KTtcclxuICAgICAgICAgICAgcnVudGltZS5ydW50aW1lLnJlcXVlc3QuZGVsZXRlKGV4ZWN1dGVJZCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UocmVzcG9uc2UuYm9keSwgcmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc3RyZWFtQ2xvc2VyczogTWFwPHN0cmluZywgeyBnZW5lcmF0b3I6IEFzeW5jR2VuZXJhdG9yOyBoYW5kbGVDbG9zZTogYW55IH0+ID0gbmV3IE1hcCgpO1xyXG4gICAgY29uc3QgaGFuZGxlTWVzc2FnZSA9IGFzeW5jIChcclxuICAgICAgICBwb3J0OiB7IHBvc3RNZXNzYWdlKG1lc3NhZ2U6IGFueSk6IHZvaWQgfSxcclxuICAgICAgICBvcHRpb25zOlxyXG4gICAgICAgICAgICB8IHtcclxuICAgICAgICAgICAgICAgIGV4ZWN1dGVJZDogc3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgcGF0aDogc3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zPzogUmVjb3JkPGFueSwgYW55PjtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHwgc3RyaW5nLFxyXG4gICAgKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zID09PSBcIlBJTkdcIikge1xyXG4gICAgICAgICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShcIlBPTkdcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RhcnRzV2l0aChcIkNMT1NFX1NUUkVBTTpcIikpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVJZCA9IG9wdGlvbnMuc3BsaXQoXCJDTE9TRV9TVFJFQU06XCIpWzFdO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtQ2xvc2VyID0gc3RyZWFtQ2xvc2Vycy5nZXQoZXhlY3V0ZUlkKTtcclxuICAgICAgICAgICAgICAgIGlmIChzdHJlYW1DbG9zZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdHJlYW1DbG9zZXIuZ2VuZXJhdG9yLnJldHVybih1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbUNsb3Nlci5oYW5kbGVDbG9zZShcInN0cmVhbVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByb3V0ZVNjaGVtYSA9IHRyaWUuZ2V0KG9wdGlvbnMucGF0aCk7XHJcbiAgICAgICAgaWYgKHJvdXRlU2NoZW1hID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJvdXRlU2NoZW1hID0gZ2VuZXJhdGVkLnJvdXRlU2NoZW1hPy5bb3B0aW9ucy5wYXRoXTtcclxuICAgICAgICAgICAgaWYgKHJvdXRlU2NoZW1hID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IHJlamVjdChcIk5PVF9GT1VORFwiLCB7IHBhdGg6IG9wdGlvbnMucGF0aCB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJvdXRlU2NoZW1hLm1vZHVsZSAhPT0gXCJmdW5jdGlvblwiKSByb3V0ZVNjaGVtYS5tb2R1bGUgPSBhd2FpdCByb3V0ZVNjaGVtYS5tb2R1bGU7XHJcbiAgICAgICAgICAgIGVsc2Ugcm91dGVTY2hlbWEubW9kdWxlID0gYXdhaXQgcm91dGVTY2hlbWEubW9kdWxlKCk7XHJcbiAgICAgICAgICAgIHRyaWUuYWRkKG9wdGlvbnMucGF0aCwgcm91dGVTY2hlbWEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gb3B0aW9ucy5wYXJhbXMgPz8ge307XHJcbiAgICAgICAgY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKHJ1bnRpbWUsIG9wdGlvbnMucGF0aCwgb3B0aW9ucy5leGVjdXRlSWQpO1xyXG4gICAgICAgIGxldCBmaW5hbGVzOiBBcnJheTwoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPj4gPSBbXTtcclxuXHJcbiAgICAgICAgY29uc3QgaHR0cCA9IG5ldyBQcm94eShcclxuICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdldDogKHRhcmdldCwgcHJvcGVydHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkgPT09IFwibm90Rm91bmRcIikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyByZWplY3QoXCJVTkFDQ0VQVEFCTEVcIiwgeyBleHBlY3RlZDogXCJjb250ZXh0Lmh0dHBcIiwgbWVzc2FnZTogXCJUaGlzIHJlcXVlc3Qgd2FzIGludm9rZWQgdGhyb3VnaCB0aGUgZXhlY3V0ZSBtZXRob2QuIFNpbmNlIG5vIGFjdHVhbCByZXF1ZXN0IHdhcyBnZW5lcmF0ZWQsIHRoZSBIVFRQIG1ldGhvZHMgdW5kZXIgdGhlIGNvbnRleHQgY2Fubm90IGJlIGFjY2Vzc2VkLlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBoYW5kbGVDbG9zZSA9IGFzeW5jICh0eXBlOiBcImFjdGlvblwiIHwgXCJzdHJlYW1cIikgPT4ge1xyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gXCJzdHJlYW1cIikgc3RyZWFtQ2xvc2Vycy5kZWxldGUob3B0aW9ucy5leGVjdXRlSWQpO1xyXG4gICAgICAgICAgICBydW50aW1lLnJ1bnRpbWUucmVxdWVzdC5kZWxldGUob3B0aW9ucy5leGVjdXRlSWQpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgZmluYWxlcykge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyKCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkFuIGVycm9yIG9jY3VycmVkIGluc2lkZSBvbkZpbmFsbHkuXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB7IGh0dHA6IGh0dHAsIGhlYWRlcnMsIHJlamVjdCB9O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAocm91dGVTY2hlbWEudHlwZSA9PT0gXCJhY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY3V0ZWQgPSBhd2FpdCBleGVjdXRlci5fX2V4ZWN1dGUocm91dGVTY2hlbWEsIHtcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRXhlY3V0ZUlkOiBvcHRpb25zLmV4ZWN1dGVJZCxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkTG9nZ2VyOiBsb2dnZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogb3B0aW9ucy5wYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zVHlwZTogXCJyYXdcIixcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZmluYWxlcyA9IGV4ZWN1dGVkLmZpbmFsZXM7XHJcblxyXG4gICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ2xvc2UoXCJhY3Rpb25cIik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGV4ZWN1dGVkLmVtcHR5UmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVJZDogb3B0aW9ucy5leGVjdXRlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVJZDogb3B0aW9ucy5leGVjdXRlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGV4ZWN1dGVkLnJlc3VsdHMudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJvdXRlU2NoZW1hLnR5cGUgPT09IFwic3RyZWFtXCIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVkID0gYXdhaXQgZXhlY3V0ZXIuX19leGVjdXRlKHJvdXRlU2NoZW1hLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZEV4ZWN1dGVJZDogb3B0aW9ucy5leGVjdXRlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZExvZ2dlcjogbG9nZ2VyLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IG9wdGlvbnMucGF0aCxcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtc1R5cGU6IFwicmF3XCIsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGZpbmFsZXMgPSBleGVjdXRlZC5maW5hbGVzO1xyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSh7IHN1Y2Nlc3M6IHRydWUsIGRhdGE6IHVuZGVmaW5lZCwgZXhlY3V0ZUlkOiBvcHRpb25zLmV4ZWN1dGVJZCwgZG9uZTogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtQ2xvc2Vycy5zZXQob3B0aW9ucy5leGVjdXRlSWQsIHsgZ2VuZXJhdG9yOiBleGVjdXRlZC5yZXN1bHRzLnZhbHVlLCBoYW5kbGVDbG9zZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbHVlIG9mIGV4ZWN1dGVkLnJlc3VsdHMudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogW251bGwsIHZhbHVlXSwgZXhlY3V0ZUlkOiBvcHRpb25zLmV4ZWN1dGVJZCwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSh7IHN1Y2Nlc3M6IHRydWUsIGRhdGE6IHVuZGVmaW5lZCwgZXhlY3V0ZUlkOiBvcHRpb25zLmV4ZWN1dGVJZCwgZG9uZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhjZXB0aW9uID0gZXhjZXB0aW9uSGFuZGxlcihvcHRpb25zLmV4ZWN1dGVJZCwgbG9nZ2VyLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbZXhjZXB0aW9uLmNvZGVdID0gZXhjZXB0aW9uLnJlamVjdDtcclxuICAgICAgICAgICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogW3Jlc3VsdCwgbnVsbF0sIGV4ZWN1dGVJZDogb3B0aW9ucy5leGVjdXRlSWQsIGRvbmU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDbG9zZShcInN0cmVhbVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4Y2VwdGlvbkhhbmRsZXIob3B0aW9ucy5leGVjdXRlSWQsIGxvZ2dlciwgZXJyb3IpO1xyXG4gICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKHsgc3VjY2VzczogZmFsc2UsIGRhdGE6IHVuZGVmaW5lZCwgZXJyb3I6IHJlc3VsdCwgZXhlY3V0ZUlkOiBvcHRpb25zLmV4ZWN1dGVJZCwgZG9uZTogdHJ1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcG9ydCxcclxuICAgICAgICBmZXRjaCxcclxuICAgICAgICBoYW5kbGVNZXNzYWdlLFxyXG4gICAgfTtcclxufVxyXG4iLAogICAgImltcG9ydCB0eXBlIHsgTWlsa2lvUmVzcG9uc2VSZWplY3QsIExvZ2dlciB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSAkcmVqZWN0Q29kZSB7XHJcbiAgICBSRVFVRVNUX0ZBSUw6IGFueTtcclxuICAgIE5PVF9ERVZFTE9QX01PREU6IHN0cmluZztcclxuICAgIFJFUVVFU1RfVElNRU9VVDogeyB0aW1lb3V0OiBudW1iZXI7IG1lc3NhZ2U6IHN0cmluZyB9O1xyXG4gICAgTk9UX0ZPVU5EOiB7IHBhdGg6IHN0cmluZyB9O1xyXG4gICAgUEFSQU1TX1RZUEVfSU5DT1JSRUNUOiB7IHBhdGg6IHN0cmluZzsgZXhwZWN0ZWQ6IHN0cmluZzsgdmFsdWU6IGFueTsgbWVzc2FnZTogc3RyaW5nIH0gfCBudWxsO1xyXG4gICAgUkVTVUxUU19UWVBFX0lOQ09SUkVDVDogeyBwYXRoOiBzdHJpbmc7IGV4cGVjdGVkOiBzdHJpbmc7IHZhbHVlOiBhbnk7IG1lc3NhZ2U6IHN0cmluZyB9IHwgbnVsbDtcclxuICAgIFVOQUNDRVBUQUJMRTogeyBleHBlY3RlZDogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfTtcclxuICAgIFBBUkFNU19UWVBFX05PVF9TVVBQT1JURUQ6IHsgZXhwZWN0ZWQ6IHN0cmluZyB9O1xyXG4gICAgUkVTVUxUU19UWVBFX05PVF9TVVBQT1JURUQ6IHsgZXhwZWN0ZWQ6IHN0cmluZyB9O1xyXG4gICAgSU5URVJOQUxfU0VSVkVSX0VSUk9SOiB1bmRlZmluZWQ7XHJcbiAgICBNRVRIT0RfTk9UX0FMTE9XRUQ6IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdDxDb2RlIGV4dGVuZHMga2V5b2YgJHJlamVjdENvZGUsIFJlamVjdERhdGEgZXh0ZW5kcyAkcmVqZWN0Q29kZVtDb2RlXT4oY29kZTogQ29kZSwgZGF0YTogUmVqZWN0RGF0YSk6IE1pbGtpb1JlamVjdEVycm9yPENvZGUsIFJlamVjdERhdGE+IHtcclxuICAgIGNvbnN0IGVycm9yID0geyAkbWlsa2lvUmVqZWN0OiB0cnVlLCBjb2RlLCBkYXRhIH0gYXMgTWlsa2lvUmVqZWN0RXJyb3I8Q29kZSwgUmVqZWN0RGF0YT47XHJcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnJvcik7XHJcbiAgICByZXR1cm4gZXJyb3I7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIE1pbGtpb1JlamVjdEVycm9yPENvZGUgZXh0ZW5kcyBrZXlvZiAkcmVqZWN0Q29kZSA9IGtleW9mICRyZWplY3RDb2RlLCBSZWplY3REYXRhIGV4dGVuZHMgJHJlamVjdENvZGVbQ29kZV0gPSAkcmVqZWN0Q29kZVtDb2RlXT4gPSB7IGNvZGU6IENvZGU7IGRhdGE6IFJlamVjdERhdGE7IHN0YWNrOiBzdHJpbmc7ICRtaWxraW9SZWplY3Q6IHRydWUgfTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBleGNlcHRpb25IYW5kbGVyKGV4ZWN1dGVJZDogc3RyaW5nLCBsb2dnZXI6IExvZ2dlciwgZXJyb3I6IE1pbGtpb1JlamVjdEVycm9yPGFueSwgYW55PiB8IGFueSk6IE1pbGtpb1Jlc3BvbnNlUmVqZWN0IHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKFwidml0ZVNlcnZlclwiIGluIGdsb2JhbFRoaXMpIChnbG9iYWxUaGlzIGFzIGFueSkudml0ZVNlcnZlcj8uc3NyRml4U3RhY2t0cmFjZShlcnJvcik7IC8vIGZpeCB2aXRlIHNzciBzdGFja3RyYWNlXHJcbiAgICB9IGNhdGNoIChlcnJvcikgeyB9XHJcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBcInZpdGVTZXJ2ZXJcIiBpbiBnbG9iYWxUaGlzKSAoZ2xvYmFsVGhpcyBhcyBhbnkpLnZpdGVTZXJ2ZXIuc3NyRml4U3RhY2t0cmFjZShlcnJvcik7XHJcbiAgICBjb25zdCBuYW1lID0gZXJyb3I/LmNvZGUgPz8gZXJyb3I/Lm5hbWUgPz8gZXJyb3I/LmNvbnN0cnVjdG9yPy5uYW1lID8/IFwiVW5uYW1lZCBFeGNlcHRpb25cIjtcclxuXHJcbiAgICBpZiAoZXJyb3I/LiRtaWxraW9SZWplY3QgPT09IHRydWUgJiYgZXJyb3I/LmNvZGUgPT09IFwiTk9UX0ZPVU5EXCIpIHtcclxuICAgICAgICBsb2dnZXIuaW5mbyhuYW1lLCBlcnJvcj8uZGF0YT8ucGF0aCA/PyBcIlVua25vd24gcGF0aFwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhY2sgPSBlcnJvcj8uJG1pbGtpb1JlamVjdCA/IChlcnJvcj8uc3RhY2sgPz8gXCJcIikuc3BsaXQoXCJcXG5cIikuc2xpY2UoMikuam9pbihcIlxcblwiKSA6IChlcnJvcj8uc3RhY2sgPz8gXCJcIik7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihuYW1lLCBgXFxuJHtKU09OLnN0cmluZ2lmeShlcnJvcj8uZGF0YSl9YCwgYFxcbiR7c3RhY2t9XFxuYCk7XHJcbiAgICAgICAgfSBjYXRjaCAoXykge1xyXG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IobmFtZSwgYFxcbiR7ZXJyb3I/LnRvU3RyaW5nKCl9YCwgYFxcbiR7ZXJyb3I/LnN0YWNrfVxcbmApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmVzdWx0OiBNaWxraW9SZXNwb25zZVJlamVjdDtcclxuXHJcbiAgICBpZiAoZXJyb3I/LiRtaWxraW9SZWplY3QgPT09IHRydWUpIHJlc3VsdCA9IHsgc3VjY2VzczogZmFsc2UsIGNvZGU6IGVycm9yLmNvZGUsIHJlamVjdDogZXJyb3IuZGF0YSwgZXhlY3V0ZUlkIH07XHJcbiAgICBlbHNlIHJlc3VsdCA9IHsgc3VjY2VzczogZmFsc2UsIGNvZGU6IFwiSU5URVJOQUxfU0VSVkVSX0VSUk9SXCIsIHJlamVjdDogdW5kZWZpbmVkLCBleGVjdXRlSWQgfTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7QUFBTyxTQUFTLElBQTZCLENBQUMsU0FBMkI7QUFBQSxFQUN2RSxPQUFPLFFBQVE7QUFBQTs7QUNVVixTQUFTLFVBQTBDLENBQUMsT0FBK0I7QUFBQSxFQUN4RixPQUFPO0FBQUEsSUFDTCxNQUFNLE9BQU8sRUFBRSxhQUFhLGVBQWUsTUFBTTtBQUFBLEVBQ25EO0FBQUE7O0FDZEssU0FBUyxNQUE4QixDQUFDLFNBQTBCO0FBQUEsRUFDdkUsT0FBTztBQUFBO0FBU0YsU0FBUyxXQUFXLENBQUMsT0FBb0MsY0FBc0I7QUFBQSxFQUNwRixJQUFJLFVBQVU7QUFBQSxJQUFXLE9BQU87QUFBQSxFQUVoQyxPQUFPLEdBQUc7QUFBQTtBQUdMLFNBQVMsV0FBVyxDQUFDLE9BQTJCLGNBQXNCO0FBQUEsRUFDM0UsSUFBSSxVQUFVO0FBQUEsSUFBVyxPQUFPO0FBQUEsRUFFaEMsT0FBTyxPQUFPLFNBQVMsT0FBTyxFQUFFO0FBQUE7QUFHM0IsU0FBUyxZQUFZLENBQUMsT0FBb0MsY0FBdUI7QUFBQSxFQUN0RixJQUFJLFVBQVU7QUFBQSxJQUFRLE9BQU87QUFBQSxFQUU3QixJQUFJLFVBQVU7QUFBQSxJQUFTLE9BQU87QUFBQSxFQUU5QixJQUFJLFVBQVU7QUFBQSxJQUFJLE9BQU87QUFBQSxFQUV6QixJQUFrQixVQUFkO0FBQUEsSUFBcUIsT0FBTztBQUFBLEVBRWhDLE9BQU8sUUFBUSxLQUFLO0FBQUE7O0FDL0JmLFNBQVMsYUFBYSxDQUFDLFNBQWtCO0FBQUEsRUFDOUMsTUFBTSxPQUErQixDQUFDO0FBQUEsRUFDdEMsWUFBWSxLQUFLLFVBQVcsUUFBZ0IsUUFBUSxHQUFHO0FBQUEsSUFDckQsS0FBSyxPQUFPO0FBQUEsRUFDZDtBQUFBLEVBQ0EsT0FBTztBQUFBOzs7QUNMVCxTQUFTLGFBQWEsQ0FBQyxPQUEwQztB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QUUsTUFBTSxDQUFDLEVBQUUsS0FBSztBQUFBLENBQUksSUFBSyxPQUFPLFNBQVM7QUFBQSxNQUM3RyxPQUFPLE1BQU0sTUFBTTtBQUFBLEVBQUssS0FBSyxVQUFVLE9BQU8sSUFBSSxLQUFLO0FBQUEsRUFBSztBQUFBLENBQVM7QUFBQSxNQUN2RSxPQUFPLEdBQUc7QUFBQSxNQUNSLE9BQU8sTUFBTSxNQUFNO0FBQUEsRUFBSyxPQUFPLFNBQVMsS0FBSztBQUFBLEVBQUssT0FBTztBQUFBLENBQVM7QUFBQTtBQUFBO0FBQUEsRUFJMUUsSUFBSTtBQUFBLEVBRUosSUFBSSxPQUFPLGtCQUFrQjtBQUFBLElBQU0sU0FBUyxFQUFFLFNBQVMsT0FBTyxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxVQUFVO0FBQUEsRUFDekc7QUFBQSxhQUFTLEVBQUUsU0FBUyxPQUFPLE1BQU0seUJBQXlCLFFBQVEsV0FBVyxVQUFVO0FBQUEsRUFFNUYsT0FBTztBQUFBOyIsCiAgImRlYnVnSWQiOiAiNjBDMkY0NjlCM0EwMzVGQTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|
|
2463
|
+
//# debugId=68D1FE1B024E246F64756E2164756E21
|
|
2464
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXHV0aWxzXFxwYXJ0LnRzIiwgIi4uXFx0eXBlLXNhZmV0eVxcaW5kZXgudHMiLCAiLi5cXGNvbmZpZ1xcaW5kZXgudHMiLCAiLi5cXHV0aWxzXFxoZWFkZXJzLXRvLWpzb24udHMiLCAiLi5cXHV0aWxzXFxtZXJnZS1kZWVwLnRzIiwgIi4uXFx1dGlsc1xccmV2aXZlLWpzb24tcGFyc2UudHMiLCAiLi5cXGV4ZWN1dGVcXGluZGV4LnRzIiwgIi4uXFxldmVudFxcaW5kZXgudHMiLCAiLi5cXGZsb3dcXGluZGV4LnRzIiwgIi4uXFx1dGlsc1xcY3JlYXRlLWlkLnRzIiwgIi4uXFxleGVjdXRlXFxleGVjdXRlLWlkLWdlbmVyYXRvci50cyIsICIuLlxcd29ybGRcXGluZGV4LnRzIiwgIi4uXFx0eXBpYVxcaW5kZXgudHMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcY29uc3RhbnRzLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGNvbnN0cnVjdEZyb20uanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcdG9EYXRlLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXF9saWJcXGRlZmF1bHRPcHRpb25zLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXHN0YXJ0T2ZXZWVrLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXHN0YXJ0T2ZJU09XZWVrLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGdldElTT1dlZWtZZWFyLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXF9saWJcXGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMuanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcX2xpYlxcbm9ybWFsaXplRGF0ZXMuanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcc3RhcnRPZkRheS5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMuanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcc3RhcnRPZklTT1dlZWtZZWFyLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGlzRGF0ZS5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxpc1ZhbGlkLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXHN0YXJ0T2ZZZWFyLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGxvY2FsZVxcZW4tVVNcXF9saWJcXGZvcm1hdERpc3RhbmNlLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGxvY2FsZVxcX2xpYlxcYnVpbGRGb3JtYXRMb25nRm4uanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxlbi1VU1xcX2xpYlxcZm9ybWF0TG9uZy5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxsb2NhbGVcXGVuLVVTXFxfbGliXFxmb3JtYXRSZWxhdGl2ZS5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxsb2NhbGVcXF9saWJcXGJ1aWxkTG9jYWxpemVGbi5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxsb2NhbGVcXGVuLVVTXFxfbGliXFxsb2NhbGl6ZS5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxsb2NhbGVcXF9saWJcXGJ1aWxkTWF0Y2hGbi5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxsb2NhbGVcXF9saWJcXGJ1aWxkTWF0Y2hQYXR0ZXJuRm4uanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxlbi1VU1xcX2xpYlxcbWF0Y2guanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcbG9jYWxlXFxlbi1VUy5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxnZXREYXlPZlllYXIuanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcZ2V0SVNPV2Vlay5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxnZXRXZWVrWWVhci5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxzdGFydE9mV2Vla1llYXIuanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcZ2V0V2Vlay5qcyIsICIuLlxcLi5cXC4uXFxub2RlX21vZHVsZXNcXGRhdGUtZm5zXFxfbGliXFxhZGRMZWFkaW5nWmVyb3MuanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcX2xpYlxcZm9ybWF0XFxsaWdodEZvcm1hdHRlcnMuanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcX2xpYlxcZm9ybWF0XFxmb3JtYXR0ZXJzLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXF9saWJcXGZvcm1hdFxcbG9uZ0Zvcm1hdHRlcnMuanMiLCAiLi5cXC4uXFwuLlxcbm9kZV9tb2R1bGVzXFxkYXRlLWZuc1xcX2xpYlxccHJvdGVjdGVkVG9rZW5zLmpzIiwgIi4uXFwuLlxcLi5cXG5vZGVfbW9kdWxlc1xcZGF0ZS1mbnNcXGZvcm1hdC5qcyIsICIuLlxcdXRpbHNcXHNlbmQtY29va2Jvb2stZXZlbnQudHMiLCAiLi5cXGxvZ2dlclxcaW5kZXgudHMiLCAiLi5cXHN0ZXBcXGluZGV4LnRzIiwgIi4uXFx1dGlsc1xcdHJpZS50cyIsICIuLlxcbGlzdGVuZXJcXGluZGV4LnRzIiwgIi4uXFxleGNlcHRpb25cXGluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImV4cG9ydCBmdW5jdGlvbiBwYXJ0PFQgZXh0ZW5kcyAoKSA9PiB1bmtub3duPihoYW5kbGVyOiBUKTogUmV0dXJuVHlwZTxUPiB7XHJcbiAgcmV0dXJuIGhhbmRsZXIoKSBhcyB1bmtub3duIGFzIFJldHVyblR5cGU8VD47XHJcbn1cclxuIiwKICAgICJleHBvcnQgdHlwZSBUeXBlU2FmZXR5PFZhbHVlIGV4dGVuZHMgUmVjb3JkPGFueSwgYW55Pj4gPSAodmFsdWU6IFZhbHVlKSA9PiBUeXBlU2FmZXR5VmFsdWU7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVTYWZldHlWYWx1ZSB7XHJcbiAgdHlwZTogPFR5cGUgZXh0ZW5kcyBSZWNvcmQ8YW55LCBhbnk+PigpID0+IFR5cGU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVHlwZVNhZmV0eVR5cGU8VHlwZSBleHRlbmRzIFJlY29yZDxhbnksIGFueT4+IHtcclxuICAkbWlsa2lvVHlwZTogXCJ0eXBlLXNhZmV0eVwiO1xyXG4gIHZhbHVlOiBUeXBlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdHlwZVNhZmV0eTxWYWx1ZSBleHRlbmRzIFJlY29yZDxhbnksIGFueT4+KHZhbHVlOiBWYWx1ZSk6IFR5cGVTYWZldHlWYWx1ZSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHR5cGU6ICgpID0+ICh7ICRtaWxraW9UeXBlOiBcInR5cGUtc2FmZXR5XCIsIHZhbHVlIH0pLFxyXG4gIH0gYXMgYW55O1xyXG59XHJcbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZzxDb25maWdUIGV4dGVuZHMgQ29uZmlnPihjb25maWc6IENvbmZpZ1QpOiBDb25maWdUIHtcclxuICByZXR1cm4gY29uZmlnO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBDb25maWcgPSAobW9kZTogc3RyaW5nKSA9PiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb25maWdFbnZpcm9ubWVudHM8VCBleHRlbmRzIENvbmZpZz4ge1xyXG4gIFtrZXk6IHN0cmluZ106IChlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+IFBhcnRpYWw8QXdhaXRlZDxSZXR1cm5UeXBlPFQ+Pj4gfCBQcm9taXNlPFBhcnRpYWw8QXdhaXRlZDxSZXR1cm5UeXBlPFQ+Pj4+O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW52VG9TdHJpbmcodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlOiBzdHJpbmcpIHtcclxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuXHJcbiAgcmV0dXJuIGAke3ZhbHVlfWA7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlbnZUb051bWJlcih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBkZWZhdWx0VmFsdWU6IG51bWJlcikge1xyXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG5cclxuICByZXR1cm4gTnVtYmVyLnBhcnNlSW50KHZhbHVlLCAxMCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlbnZUb0Jvb2xlYW4odmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlOiBib29sZWFuKSB7XHJcbiAgaWYgKHZhbHVlID09PSBcInRydWVcIikgcmV0dXJuIHRydWU7XHJcblxyXG4gIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gIGlmICh2YWx1ZSA9PT0gXCJcIikgcmV0dXJuIGZhbHNlO1xyXG5cclxuICBpZiAodW5kZWZpbmVkID09PSB2YWx1ZSkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuXHJcbiAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xyXG59XHJcbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIGhlYWRlcnNUb0pTT04oaGVhZGVyczogSGVhZGVycykge1xyXG4gIGNvbnN0IGpzb246IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiAoaGVhZGVycyBhcyBhbnkpLmVudHJpZXMoKSkge1xyXG4gICAganNvbltrZXldID0gdmFsdWU7XHJcbiAgfVxyXG4gIHJldHVybiBqc29uO1xyXG59XHJcbiIsCiAgICAiZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogYW55KTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURlZXA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sIFUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+Pih0YXJnZXQ6IFQsIHNvdXJjZTogVSk6IFQge1xyXG4gIGNvbnN0IG1lcmdlZCA9IHsgLi4udGFyZ2V0IH07XHJcblxyXG4gIGZvciAoY29uc3Qga2V5IGluIHNvdXJjZSkge1xyXG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTtcclxuXHJcbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IHNvdXJjZVtrZXldO1xyXG4gICAgY29uc3QgdGFyZ2V0VmFsdWUgPSB0YXJnZXRba2V5IGFzIGtleW9mIFRdO1xyXG5cclxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBrZXkpKSB7XHJcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KHRhcmdldFZhbHVlKSAmJiBpc1BsYWluT2JqZWN0KHNvdXJjZVZhbHVlKSkge1xyXG4gICAgICAgIG1lcmdlZFtrZXkgYXMga2V5b2YgVCAmIGtleW9mIFVdID0gbWVyZ2VEZWVwKHRhcmdldFZhbHVlLCBzb3VyY2VWYWx1ZSkgYXMgYW55O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAobWVyZ2VkIGFzIGFueSlba2V5XSA9IHNvdXJjZVZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG1lcmdlZCBhcyBUICYgVTtcclxufVxyXG4iLAogICAgIlxyXG5leHBvcnQgZnVuY3Rpb24gcmV2aXZlSlNPTlBhcnNlPFQ+KGpzb246IFQpOiBUIHtcclxuICAgIGNvbnN0IGlzb0RhdGVQYXR0ZXJuID0gL14oXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGR7MSwzfSk/KShafFsrLV1cXGR7Mn06P1xcZHsyfSk/JC87XHJcblxyXG4gICAgaWYgKGpzb24gaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4ganNvbjtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGpzb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIGpzb24ubWFwKChpdGVtKSA9PiByZXZpdmVKU09OUGFyc2UoaXRlbSkpIGFzIGFueTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YganNvbiA9PT0gXCJvYmplY3RcIiAmJiBqc29uICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGpzb24pLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgYWNjW2tleSBhcyBrZXlvZiBUXSA9IHJldml2ZUpTT05QYXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSwge30gYXMgVCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGpzb24gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBjb25zdCBtYXRjaCA9IGpzb24ubWF0Y2goaXNvRGF0ZVBhdHRlcm4pO1xyXG4gICAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRGF0ZVN0cmluZyA9IG1hdGNoWzJdID8gYCR7bWF0Y2hbMV19JHttYXRjaFsyXS5yZXBsYWNlKFwiOlwiLCBcIlwiKX1gIDogYCR7bWF0Y2hbMV19WmA7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShub3JtYWxpemVkRGF0ZVN0cmluZykgYXMgYW55O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBqc29uO1xyXG59IiwKICAgICJpbXBvcnQgdHlwZSB7IElWYWxpZGF0aW9uIH0gZnJvbSBcInR5cGlhXCI7XHJcbmltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xyXG5pbXBvcnQgdHlwZSB7ICRjb250ZXh0LCAkbWV0YSwgTG9nZ2VyLCBSZXN1bHRzLCBHZW5lcmF0ZWRJbml0IH0gZnJvbSBcIi4uL2luZGV4LnRzXCI7XHJcbmltcG9ydCB7IGhlYWRlcnNUb0pTT04gfSBmcm9tIFwiLi4vdXRpbHMvaGVhZGVycy10by1qc29uLnRzXCI7XHJcbmltcG9ydCB7IG1lcmdlRGVlcCB9IGZyb20gXCIuLi91dGlscy9tZXJnZS1kZWVwLnRzXCI7XHJcbmltcG9ydCB7IHJldml2ZUpTT05QYXJzZSB9IGZyb20gXCIuLi91dGlscy9yZXZpdmUtanNvbi1wYXJzZS50c1wiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW5pdEV4ZWN1dGVyKGdlbmVyYXRlZDogR2VuZXJhdGVkSW5pdCwgcnVudGltZTogYW55KSB7XHJcbiAgICBjb25zdCBfX2V4ZWN1dGUgPSBhc3luYyAoXHJcbiAgICAgICAgcm91dGVTY2hlbWE6IGFueSxcclxuICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIGNyZWF0ZWRFeGVjdXRlSWQ6IHN0cmluZztcclxuICAgICAgICAgICAgY3JlYXRlZExvZ2dlcjogTG9nZ2VyO1xyXG4gICAgICAgICAgICBwYXRoOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBIZWFkZXJzO1xyXG4gICAgICAgICAgICBjb250ZXh0OiBhbnkgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSAmIChcclxuICAgICAgICAgICAgICAgIHwge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogUmVjb3JkPGFueSwgYW55PjtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXNUeXBlOiBcInJhd1wiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfCB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zVHlwZTogXCJzdHJpbmdcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKSxcclxuICAgICk6IFByb21pc2U8eyBleGVjdXRlSWQ6IHN0cmluZzsgaGVhZGVyczogSGVhZGVyczsgcGFyYW1zOiBSZWNvcmQ8YW55LCB1bmtub3duPjsgcmVzdWx0czogUmVzdWx0czxhbnk+OyBjb250ZXh0OiAkY29udGV4dDsgbWV0YTogUmVhZG9ubHk8JG1ldGE+OyB0eXBlOiBcImFjdGlvblwiIHwgXCJzdHJlYW1cIjsgZW1wdHlSZXN1bHQ6IGJvb2xlYW47IHJlc3VsdHNUeXBlU2FmZXR5OiBib29sZWFuOyBmaW5hbGVzOiBBcnJheTwoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPj4gfT4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSBvcHRpb25zLnBhdGguZW5kc1dpdGgoXCJ+XCIpID8gXCJzdHJlYW1cIiA6IFwiYWN0aW9uXCI7XHJcbiAgICAgICAgY29uc3QgZXhlY3V0ZUlkOiBzdHJpbmcgPSBvcHRpb25zLmNyZWF0ZWRFeGVjdXRlSWQ7XHJcbiAgICAgICAgbGV0IGhlYWRlcnM6IEhlYWRlcnM7XHJcbiAgICAgICAgaWYgKCEob3B0aW9ucy5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykpIHtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBoZWFkZXJzID0gbmV3IEhlYWRlcnMoe1xyXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIShcInRvSlNPTlwiIGluIGhlYWRlcnMpKSAoaGVhZGVycyBhcyBhbnkpLnRvSlNPTiA9ICgpID0+IGhlYWRlcnNUb0pTT04oaGVhZGVycyk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbmFsZXM6IEFycmF5PGFueT4gPSBbXTtcclxuICAgICAgICBjb25zdCBvbkZpbmFsbHkgPSAoaGFuZGxlcjogYW55KSA9PiBmaW5hbGVzLnVuc2hpZnQoaGFuZGxlcik7XHJcblxyXG4gICAgICAgIGxldCBwYXJhbXM6IFJlY29yZDxhbnksIHVua25vd24+O1xyXG4gICAgICAgIGlmIChvcHRpb25zLnBhcmFtc1R5cGUgPT09IFwicmF3XCIpIHtcclxuICAgICAgICAgICAgcGFyYW1zID0gb3B0aW9ucy5wYXJhbXM7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zID09PSBcInVuZGVmaW5lZFwiKSBwYXJhbXMgPSB7fTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5wYXJhbXMgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHt9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMgPSByZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShvcHRpb25zLnBhcmFtcykpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyByZWplY3QoXCJQQVJBTVNfVFlQRV9OT1RfU1VQUE9SVEVEXCIsIHsgZXhwZWN0ZWQ6IFwianNvblwiIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMgPT09IFwidW5kZWZpbmVkXCIpIHBhcmFtcyA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1zICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocGFyYW1zKSkgdGhyb3cgcmVqZWN0KFwiUEFSQU1TX1RZUEVfTk9UX1NVUFBPUlRFRFwiLCB7IGV4cGVjdGVkOiBcImpzb25cIiB9KTtcclxuICAgICAgICBpZiAoXCIkbWlsa2lvR2VuZXJhdGVQYXJhbXNcIiBpbiBwYXJhbXMgJiYgcGFyYW1zLiRtaWxraW9HZW5lcmF0ZVBhcmFtcyA9PT0gXCJlbmFibGVcIikge1xyXG4gICAgICAgICAgICBpZiAoIXJ1bnRpbWUuZGV2ZWxvcCkgdGhyb3cgcmVqZWN0KFwiTk9UX0RFVkVMT1BfTU9ERVwiLCBcIlRoaXMgZmVhdHVyZSBtdXN0IGJlIGluIGNvb2tib29rIHRvIHVzZS5cIik7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBwYXJhbXMuJG1pbGtpb0dlbmVyYXRlUGFyYW1zO1xyXG4gICAgICAgICAgICBsZXQgcGFyYW1zUmFuZCA9IHJvdXRlU2NoZW1hLnJhbmRvbVBhcmFtcygpO1xyXG4gICAgICAgICAgICBpZiAocGFyYW1zUmFuZCA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtc1JhbmQgPT09IG51bGwpIHBhcmFtc1JhbmQgPSB7fTtcclxuICAgICAgICAgICAgcGFyYW1zID0gbWVyZ2VEZWVwKHBhcmFtcywgcGFyYW1zUmFuZCk7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuY3JlYXRlZExvZ2dlci5kZWJ1ZyhcIuKcqCB0aGUgZ2VuZXJhdGVkIHBhcmFtczpcIiwgSlNPTi5zdHJpbmdpZnkocGFyYW1zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghb3B0aW9ucy5jb250ZXh0Py5odHRwPy5ub3RGb3VuZCAmJiBvcHRpb25zLmNvbnRleHQ/Lmh0dHA/LnBhcmFtcz8uc3RyaW5nKSBvcHRpb25zLmNvbnRleHQuaHR0cC5wYXJhbXMucGFyc2VkID0gcGFyYW1zO1xyXG5cclxuICAgICAgICBpZiAoIW9wdGlvbnMuY29udGV4dCkgb3B0aW9ucy5jb250ZXh0ID0ge307XHJcbiAgICAgICAgb3B0aW9ucy5jb250ZXh0LmRldmVsb3AgPSBydW50aW1lLmRldmVsb3A7XHJcbiAgICAgICAgb3B0aW9ucy5jb250ZXh0LnBhdGggPSBvcHRpb25zLnBhdGg7XHJcbiAgICAgICAgb3B0aW9ucy5jb250ZXh0LmxvZ2dlciA9IG9wdGlvbnMuY3JlYXRlZExvZ2dlcjtcclxuICAgICAgICBvcHRpb25zLmNvbnRleHQuZW1pdCA9IHJ1bnRpbWUuZW1pdDtcclxuICAgICAgICBvcHRpb25zLmNvbnRleHQuZXhlY3V0ZUlkID0gb3B0aW9ucy5jcmVhdGVkRXhlY3V0ZUlkO1xyXG4gICAgICAgIG9wdGlvbnMuY29udGV4dC5jb25maWcgPSBydW50aW1lLnJ1bnRpbWUuY29uZmlnO1xyXG4gICAgICAgIG9wdGlvbnMuY29udGV4dC50eXBpYSA9IGdlbmVyYXRlZC50eXBpYVNjaGVtYTtcclxuICAgICAgICBvcHRpb25zLmNvbnRleHQuY2FsbCA9IChtb2R1bGU6IGFueSwgcGFyYW1zOiBhbnkpID0+IF9fY2FsbChvcHRpb25zLmNvbnRleHQsIG1vZHVsZSwgcGFyYW1zKTtcclxuICAgICAgICBvcHRpb25zLmNvbnRleHQub25GaW5hbGx5ID0gb25GaW5hbGx5O1xyXG4gICAgICAgIG9wdGlvbnMuY29udGV4dC5fID0gcnVudGltZTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzdWx0czogUmVzdWx0czxhbnk+ID0geyB2YWx1ZTogdW5kZWZpbmVkIH07XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IHJvdXRlU2NoZW1hLm1vZHVsZTtcclxuICAgICAgICBjb25zdCBtZXRhID0gKG1vZHVsZT8ubWV0YSA/IG1vZHVsZT8ubWV0YSA6IHt9KSBhcyB1bmtub3duIGFzIFJlYWRvbmx5PCRtZXRhPjtcclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGV4dC5odHRwPy5yZXF1ZXN0Py5tZXRob2QgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjb25zdCBhbGxvd01ldGhvZHMgPSBtZXRhPy5tZXRob2RzID8/IFtcIlBPU1RcIl07XHJcbiAgICAgICAgICAgIGlmICghYWxsb3dNZXRob2RzLmluY2x1ZGVzKG9wdGlvbnMuY29udGV4dC5odHRwLnJlcXVlc3QubWV0aG9kKSkgdGhyb3cgcmVqZWN0KFwiTUVUSE9EX05PVF9BTExPV0VEXCIsIHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWV0YT8udHlwZVNhZmV0eSA9PT0gdW5kZWZpbmVkIHx8IG1ldGEudHlwZVNhZmV0eSA9PT0gdHJ1ZSB8fCAoQXJyYXkuaXNBcnJheShtZXRhLnR5cGVTYWZldHkpICYmIG1ldGEudHlwZVNhZmV0eS5pbmNsdWRlcyhcInBhcmFtc1wiKSkpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHJvdXRlU2NoZW1hLnZhbGlkYXRlUGFyYW1zKHBhcmFtcykgYXMgSVZhbGlkYXRpb248YW55PjtcclxuICAgICAgICAgICAgaWYgKCF2YWxpZGF0aW9uLnN1Y2Nlc3MpIHRocm93IHJlamVjdChcIlBBUkFNU19UWVBFX0lOQ09SUkVDVFwiLCB7IC4uLnZhbGlkYXRpb24uZXJyb3JzWzBdLCBtZXNzYWdlOiBgVGhlIHZhbHVlICcke3ZhbGlkYXRpb24uZXJyb3JzWzBdLnBhdGh9JyBpcyAnJHt2YWxpZGF0aW9uLmVycm9yc1swXS52YWx1ZX0nLCB3aGljaCBkb2VzIG5vdCBtZWV0ICcke3ZhbGlkYXRpb24uZXJyb3JzWzBdLmV4cGVjdGVkfScgcmVxdWlyZW1lbnRzLmAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBydW50aW1lLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUJlZm9yZVwiLCB7IGV4ZWN1dGVJZDogb3B0aW9ucy5jcmVhdGVkRXhlY3V0ZUlkLCBsb2dnZXI6IG9wdGlvbnMuY3JlYXRlZExvZ2dlciwgcGF0aDogb3B0aW9ucy5wYXRoLCBtZXRhLCBjb250ZXh0OiBvcHRpb25zLmNvbnRleHQsIHJlamVjdCB9KTtcclxuXHJcbiAgICAgICAgcmVzdWx0cy52YWx1ZSA9IGF3YWl0IG1vZHVsZS5oYW5kbGVyKG9wdGlvbnMuY29udGV4dCwgcGFyYW1zKTtcclxuXHJcbiAgICAgICAgbGV0IGVtcHR5UmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHJlc3VsdHMudmFsdWUgPT09IHVuZGVmaW5lZCB8fCByZXN1bHRzLnZhbHVlID09PSBudWxsIHx8IHJlc3VsdHMudmFsdWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgZW1wdHlSZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHRzLnZhbHVlID0ge307XHJcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdHMudmFsdWUpIHx8IHR5cGVvZiByZXN1bHRzLnZhbHVlICE9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIHRocm93IHJlamVjdChcIlJFUVVFU1RfRkFJTFwiLCBcIlRoZSByZXR1cm4gdHlwZSBvZiB0aGUgaGFuZGxlciBtdXN0IGJlIGFuICdvYmplY3QnLCB3aGljaCBpcyBjdXJyZW50bHkgYW4gJyR7dHlwZW9mIHR5cGVvZiByZXN1bHRzLnZhbHVlfScuXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJlc3VsdHNUeXBlU2FmZXR5ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFlbXB0eVJlc3VsdCAmJiB0eXBlID09PSBcImFjdGlvblwiICYmIChcclxuICAgICAgICAgICAgLy8gVGVtcG9yYXJ5OiB0eXBlLXNhZmUgZGVmYXVsdCBpcyBmYWxzZSBhbmQgdGhpcyBzZXR0aW5nIHNob3VsZCBub3QgYmUgZXhwb3NlZCB0byB1c2Vyc1xyXG4gICAgICAgICAgICAvLyBEdWUgdG8gY3VycmVudCBpc3N1ZXMgd2l0aCB0eXBpYSwgdHlwZSBzYWZldHkgY2Fubm90IGJlIGFjaGlldmVkIGF0IHRoZSBtb21lbnRcclxuICAgICAgICAgICAgLy8gVGhlcmVmb3JlLCB0aGUgbmV4dCBsaW5lIG9mIGNvZGUgaXMgY3VycmVudGx5IGNvbW1lbnRlZCBvdXRcclxuICAgICAgICAgICAgLy8gVGhpcyBtZWFucyBNaWxraW8gaXMgdXNpbmcgdHJhZGl0aW9uYWwgSlNPTi5zdHJpbmdpZnkgZm9yIHJlc3VsdCBzZXJpYWxpemF0aW9uXHJcbiAgICAgICAgICAgIC8vIG1ldGE/LnR5cGVTYWZldHkgPT09IHVuZGVmaW5lZCB8fCBcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBtZXRhLnR5cGVTYWZldHkgPT09IHRydWUgfHwgKEFycmF5LmlzQXJyYXkobWV0YS50eXBlU2FmZXR5KSAmJiBtZXRhLnR5cGVTYWZldHkuaW5jbHVkZXMoXCJyZXN1bHRzXCIpKSkpIHtcclxuICAgICAgICAgICAgcmVzdWx0c1R5cGVTYWZldHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gcm91dGVTY2hlbWEudmFsaWRhdGVSZXN1bHRzKHJlc3VsdHMudmFsdWUpIGFzIElWYWxpZGF0aW9uPGFueT47XHJcbiAgICAgICAgICAgIGlmICghdmFsaWRhdGlvbi5zdWNjZXNzKSB0aHJvdyByZWplY3QoXCJSRVNVTFRTX1RZUEVfSU5DT1JSRUNUXCIsIHsgLi4udmFsaWRhdGlvbi5lcnJvcnNbMF0sIG1lc3NhZ2U6IGBUaGUgdmFsdWUgJyR7dmFsaWRhdGlvbi5lcnJvcnNbMF0ucGF0aH0nIGlzICcke3ZhbGlkYXRpb24uZXJyb3JzWzBdLnZhbHVlfScsIHdoaWNoIGRvZXMgbm90IG1lZXQgJyR7dmFsaWRhdGlvbi5lcnJvcnNbMF0uZXhwZWN0ZWR9JyByZXF1aXJlbWVudHMuYCB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHJ1bnRpbWUuZW1pdChcIm1pbGtpbzpleGVjdXRlQWZ0ZXJcIiwgeyBleGVjdXRlSWQ6IG9wdGlvbnMuY3JlYXRlZEV4ZWN1dGVJZCwgbG9nZ2VyOiBvcHRpb25zLmNyZWF0ZWRMb2dnZXIsIHBhdGg6IG9wdGlvbnMucGF0aCwgbWV0YSwgY29udGV4dDogb3B0aW9ucy5jb250ZXh0LCByZXN1bHRzLCByZWplY3QgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IGV4ZWN1dGVJZCwgaGVhZGVycywgcGFyYW1zLCByZXN1bHRzLCBjb250ZXh0OiBvcHRpb25zLmNvbnRleHQsIG1ldGEsIHR5cGUsIGVtcHR5UmVzdWx0LCByZXN1bHRzVHlwZVNhZmV0eSwgZmluYWxlcyB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBfX2NhbGwgPSBhc3luYyAoY29udGV4dDogJGNvbnRleHQsIG1vZHVsZTogeyBtZXRhOiBhbnksIGhhbmRsZXI6IGFueSB9LCBwYXJhbXM/OiBhbnkpOiBQcm9taXNlPGFueT4gPT4ge1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZUF3YWl0ZWQgPSBhd2FpdCBtb2R1bGU7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IG1vZHVsZUF3YWl0ZWQuaGFuZGxlcihjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIF9fY2FsbCxcclxuICAgICAgICBfX2V4ZWN1dGUsXHJcbiAgICB9O1xyXG59IiwKICAgICJpbXBvcnQgdHlwZSB7ICRjb250ZXh0LCBDb250ZXh0SHR0cCwgUmVzdWx0cywgTG9nZ2VyLCAkbWV0YSB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSAkZXZlbnRzIHtcclxuICAgIFwiKlwiOiB7IGtleToga2V5b2YgJGV2ZW50cywgdmFsdWU6IGFueSB9O1xyXG4gICAgXCJtaWxraW86aHR0cFJlcXVlc3RcIjogeyBleGVjdXRlSWQ6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBsb2dnZXI6IExvZ2dlcjsgaHR0cDogQ29udGV4dEh0dHA8UmVjb3JkPHN0cmluZywgYW55Pj4gfTtcclxuICAgIFwibWlsa2lvOmh0dHBSZXNwb25zZVwiOiB7IGV4ZWN1dGVJZDogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGxvZ2dlcjogTG9nZ2VyOyBodHRwOiBDb250ZXh0SHR0cDxSZWNvcmQ8c3RyaW5nLCBhbnk+PjsgY29udGV4dDogJGNvbnRleHQ7IHN1Y2Nlc3M6IGJvb2xlYW4gfTtcclxuICAgIFwibWlsa2lvOmh0dHBOb3RGb3VuZFwiOiB7IGV4ZWN1dGVJZDogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGxvZ2dlcjogTG9nZ2VyOyBodHRwOiBDb250ZXh0SHR0cDxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB9O1xyXG4gICAgXCJtaWxraW86ZXhlY3V0ZUJlZm9yZVwiOiB7IGV4ZWN1dGVJZDogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGxvZ2dlcjogTG9nZ2VyOyBtZXRhOiAkbWV0YTsgY29udGV4dDogJGNvbnRleHQgfTtcclxuICAgIFwibWlsa2lvOmV4ZWN1dGVBZnRlclwiOiB7IGV4ZWN1dGVJZDogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGxvZ2dlcjogTG9nZ2VyOyBtZXRhOiAkbWV0YTsgY29udGV4dDogJGNvbnRleHQ7IHJlc3VsdHM6IFJlc3VsdHM8YW55PiB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbml0RXZlbnRNYW5hZ2VyKCkge1xyXG4gICAgY29uc3QgaGFuZGxlcnMgPSBuZXcgTWFwPChldmVudDogYW55KSA9PiB2b2lkLCBzdHJpbmc+KCk7XHJcbiAgICBjb25zdCBpbmRleGVkID0gbmV3IE1hcDxzdHJpbmcsIFNldDwoZXZlbnQ6IGFueSkgPT4gdm9pZD4+KCk7XHJcblxyXG4gICAgY29uc3QgZXZlbnRNYW5hZ2VyID0ge1xyXG4gICAgICAgIG9uOiA8S2V5IGV4dGVuZHMga2V5b2YgJGV2ZW50cywgSGFuZGxlciBleHRlbmRzIChldmVudDogJGV2ZW50c1tLZXldKSA9PiB2b2lkPihrZXk6IEtleSwgaGFuZGxlcjogSGFuZGxlcikgPT4ge1xyXG4gICAgICAgICAgICBoYW5kbGVycy5zZXQoaGFuZGxlciwga2V5IGFzIHN0cmluZyk7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICcqJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ZWQuaGFzKCcqJykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhlZC5zZXQoJyonLCBuZXcgU2V0KCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgd2lsZGNhcmRTZXQgPSBpbmRleGVkLmdldCgnKicpITtcclxuICAgICAgICAgICAgICAgIHdpbGRjYXJkU2V0LmFkZChoYW5kbGVyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleGVkLmhhcyhrZXkgYXMgc3RyaW5nKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbmRleGVkLnNldChrZXkgYXMgc3RyaW5nLCBuZXcgU2V0KCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0ID0gaW5kZXhlZC5nZXQoa2V5IGFzIHN0cmluZykhO1xyXG4gICAgICAgICAgICAgICAgc2V0LmFkZChoYW5kbGVyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZXJzLmRlbGV0ZShoYW5kbGVyKTtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICcqJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpbGRjYXJkU2V0ID0gaW5kZXhlZC5nZXQoJyonKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAod2lsZGNhcmRTZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lsZGNhcmRTZXQuZGVsZXRlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0ID0gaW5kZXhlZC5nZXQoa2V5IGFzIHN0cmluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9mZjogPEtleSBleHRlbmRzIGtleW9mICRldmVudHMsIEhhbmRsZXIgZXh0ZW5kcyAoZXZlbnQ6ICRldmVudHNbS2V5XSkgPT4gdm9pZD4oa2V5OiBLZXksIGhhbmRsZXI6IEhhbmRsZXIpID0+IHtcclxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJyonKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3aWxkY2FyZFNldCA9IGluZGV4ZWQuZ2V0KCcqJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXdpbGRjYXJkU2V0KSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVycy5kZWxldGUoaGFuZGxlcik7XHJcbiAgICAgICAgICAgICAgICB3aWxkY2FyZFNldC5kZWxldGUoaGFuZGxlcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXQgPSBpbmRleGVkLmdldChrZXkgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIGlmICghc2V0KSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVycy5kZWxldGUoaGFuZGxlcik7XHJcbiAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbWl0OiBhc3luYyA8S2V5IGV4dGVuZHMga2V5b2YgJGV2ZW50cywgVmFsdWUgZXh0ZW5kcyAkZXZlbnRzW0tleV0+KGtleTogS2V5LCB2YWx1ZTogVmFsdWUpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZGNhcmRIYW5kbGVycyA9IGluZGV4ZWQuZ2V0KCcqJyk7XHJcbiAgICAgICAgICAgIGlmICh3aWxkY2FyZEhhbmRsZXJzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2Ygd2lsZGNhcmRIYW5kbGVycykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZXIoeyBrZXksIHZhbHVlIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBoID0gaW5kZXhlZC5nZXQoa2V5IGFzIHN0cmluZyk7XHJcbiAgICAgICAgICAgIGlmIChoKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZXIodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGV2ZW50TWFuYWdlcjtcclxufVxyXG4iLAogICAgImV4cG9ydCB0eXBlIE1pbGtpb0Zsb3c8VCwgVFJldHVybiA9IGFueSwgVE5leHQgPSBhbnk+ID0ge1xyXG4gIGVtaXQ6IChmbG93OiBUKSA9PiB2b2lkO1xyXG4gIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl06ICgpID0+IE1pbGtpb0Zsb3c8VD47XHJcbiAgbmV4dCguLi5bdmFsdWVdOiBbXSB8IFtUTmV4dF0pOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PFQsIFRSZXR1cm4+PjtcclxuICByZXR1cm4oKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxULCBUUmV0dXJuPj47XHJcbiAgdGhyb3coZXJyb3I6IGFueSk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VCwgVFJldHVybj4+O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZsb3c8VD4oKTogTWlsa2lvRmxvdzxUPiB7XHJcbiAgbGV0IHN0YXR1czogXCJwZW5kaW5nXCIgfCBcInJlc29sdmVkXCIgfCBcInJlamVjdGVkXCIgPSBcInBlbmRpbmdcIjtcclxuICBjb25zdCBmbG93czogQXJyYXk8e1xyXG4gICAgYmxhbms6IGJvb2xlYW47XHJcbiAgICBwcm9taXNlOiBQcm9taXNlPFQ+O1xyXG4gICAgcmVzb2x2ZTogKHZhbHVlPzogVCB8IFByb21pc2VMaWtlPFQ+KSA9PiB2b2lkO1xyXG4gICAgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkO1xyXG4gIH0+ID0gW107XHJcblxyXG4gIGNvbnN0IGl0ZXJhdG9yID0ge1xyXG4gICAgZW1pdDogKGZsb3c6IFQpID0+IHtcclxuICAgICAgaWYgKGZsb3dzLmF0KC0xKT8uYmxhbmsgPT09IHRydWUpIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gZmxvd3MuYXQoLTEpITtcclxuICAgICAgICBpdGVtLmJsYW5rID0gZmFsc2U7XHJcbiAgICAgICAgaXRlbS5yZXNvbHZlKGZsb3cpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCByZXNvbHZlcnMgPSBQcm9taXNlLndpdGhSZXNvbHZlcnM8VD4oKTtcclxuICAgICAgICByZXNvbHZlcnMucmVzb2x2ZShmbG93KTtcclxuICAgICAgICBmbG93cy5wdXNoKHsgLi4ucmVzb2x2ZXJzLCBibGFuazogZmFsc2UgfSBhcyBhbnkpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgLi4uKHtcclxuICAgICAgYXN5bmMgbmV4dCgpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PFQ+PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gXCJwZW5kaW5nXCIpIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBudWxsIH07XHJcbiAgICAgICAgaWYgKGZsb3dzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgY29uc3QgcmVzb2x2ZXJzID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzPFQ+KCk7XHJcbiAgICAgICAgICBmbG93cy5wdXNoKHsgLi4ucmVzb2x2ZXJzLCBibGFuazogdHJ1ZSB9IGFzIGFueSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZsb3cgPSBmbG93cy5hdCgwKSE7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmxvdy5wcm9taXNlO1xyXG4gICAgICAgIGZsb3dzLnNoaWZ0KCk7XHJcbiAgICAgICAgcmV0dXJuIHsgZG9uZTogc3RhdHVzICE9PSBcInBlbmRpbmdcIiwgdmFsdWU6IHJlc3VsdCB9O1xyXG4gICAgICB9LFxyXG4gICAgICBhc3luYyByZXR1cm4oKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDx2b2lkPj4ge1xyXG4gICAgICAgIHN0YXR1cyA9IFwicmVzb2x2ZWRcIjtcclxuICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcclxuICAgICAgICAgIGZsb3cuYmxhbmsgPSBmYWxzZTtcclxuICAgICAgICAgIGZsb3cucmVzb2x2ZSh1bmRlZmluZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbnVsbCB9O1xyXG4gICAgICB9LFxyXG4gICAgICBhc3luYyB0aHJvdyhlcnI6IGFueSk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dm9pZD4+IHtcclxuICAgICAgICBzdGF0dXMgPSBcInJlamVjdGVkXCI7XHJcbiAgICAgICAgaWYgKGZsb3dzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgY29uc3QgcmVzb2x2ZXJzID0gUHJvbWlzZS53aXRoUmVzb2x2ZXJzPFQ+KCk7XHJcbiAgICAgICAgICBmbG93cy5wdXNoKHsgLi4ucmVzb2x2ZXJzLCBibGFuazogdHJ1ZSB9IGFzIGFueSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3QgZmxvdyBvZiBmbG93cykge1xyXG4gICAgICAgICAgZmxvdy5ibGFuayA9IGZhbHNlO1xyXG4gICAgICAgICAgZmxvdy5yZWplY3QoZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG51bGwgfTtcclxuICAgICAgfSxcclxuICAgIH0gc2F0aXNmaWVzIEFzeW5jSXRlcmF0b3I8dW5rbm93bj4pLFxyXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gIHJldHVybiBpdGVyYXRvciBhcyBNaWxraW9GbG93PFQ+O1xyXG59XHJcbiIsCiAgICAidHlwZSBJZEdlbmVyYXRvck9wdGlvbnMgPSB7XHJcbiAgbGVuZ3RoPzogbnVtYmVyO1xyXG4gIHRpbWVzdGFtcDogYm9vbGVhbjtcclxuICBzZXF1ZW50aWFsOiBib29sZWFuO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gZGVmaW5lSWRHZW5lcmF0b3Iob3B0aW9uczogSWRHZW5lcmF0b3JPcHRpb25zKSB7XHJcbiAgaWYgKCFvcHRpb25zLmxlbmd0aCkgb3B0aW9ucy5sZW5ndGggPSAyNDtcclxuICBpZiAob3B0aW9ucy5sZW5ndGggPCAxKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxlbmd0aFwiKTtcclxuICBpZiAob3B0aW9ucy5sZW5ndGggPiA2MSkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsZW5ndGhcIik7XHJcbiAgaWYgKG9wdGlvbnMudGltZXN0YW1wICYmIG9wdGlvbnMubGVuZ3RoIDwgOSkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsZW5ndGhcIik7XHJcbiAgbGV0IGxhc3RUaW1lID0gMDtcclxuICBsZXQgbGFzdERlY2ltYWwgPSAwbjtcclxuICByZXR1cm4ge1xyXG4gICAgY3JlYXRlSWQoKSB7XHJcbiAgICAgIGxldCByYW5kTGVuZ3RoID0gb3B0aW9ucy5sZW5ndGghO1xyXG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgICBsZXQgaWQgPSBcIlwiO1xyXG4gICAgICBpZiAob3B0aW9ucy50aW1lc3RhbXApIHtcclxuICAgICAgICByYW5kTGVuZ3RoIC09IDg7XHJcbiAgICAgICAgaWQgPSBgJHtpZH0ke19fYmlnSW50VG9TdHJpbmcoQmlnSW50KG5vdykpLnBhZFN0YXJ0KDgsIFwiMFwiKX1gO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcHRpb25zLnNlcXVlbnRpYWwgJiYgbGFzdFRpbWUgPT09IG5vdykge1xyXG4gICAgICAgIGlkID0gYCR7aWR9JHtfX2JpZ0ludFRvU3RyaW5nKCsrbGFzdERlY2ltYWwpLnBhZFN0YXJ0KDEsIFwiMFwiKX1gO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxhc3RUaW1lID0gbm93O1xyXG4gICAgICAgIGNvbnN0IG1pbiA9IDBuO1xyXG4gICAgICAgIGNvbnN0IG1heCA9IF9fZ2V0TWF4VmFsdWUoQmlnSW50KHJhbmRMZW5ndGgpKTtcclxuICAgICAgICBsYXN0RGVjaW1hbCA9IF9fc2VjdXJlUmFuZG9tQmlnSW50KG1pbiwgbWF4KTtcclxuICAgICAgICBpZCA9IGAke2lkfSR7X19iaWdJbnRUb1N0cmluZyhsYXN0RGVjaW1hbCkucGFkU3RhcnQocmFuZExlbmd0aCwgXCIwXCIpfWA7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGlkO1xyXG4gICAgfSxcclxuICAgIGdldElkVGltZXN0YW1wKGlkOiBzdHJpbmcpIHtcclxuICAgICAgcmV0dXJuIG9wdGlvbnMudGltZXN0YW1wID8gTnVtYmVyKF9fc3RyaW5nVG9CaWdJbnQoaWQuc2xpY2UoMCwgOCkucmVwbGFjZUFsbChcIjBcIiwgXCJcIikpKSA6IDA7XHJcbiAgICB9LFxyXG4gIH07XHJcbn1cclxuXHJcbmNvbnN0IEVOQ09ESU5HID0gXCIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwiO1xyXG5cclxuZnVuY3Rpb24gX19zZWN1cmVSYW5kb21CaWdJbnQobWluOiBiaWdpbnQsIG1heDogYmlnaW50KTogYmlnaW50IHtcclxuICBpZiAobWluID49IG1heCkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVwiKTtcclxuXHJcbiAgY29uc3QgcmFuZ2UgPSBtYXggLSBtaW4gKyAxbjtcclxuICBjb25zdCBieXRlQ291bnQgPSBNYXRoLmNlaWwoTnVtYmVyKEJpZ0ludChyYW5nZS50b1N0cmluZygyKS5sZW5ndGgpKSAvIDgpO1xyXG4gIGNvbnN0IGVudHJvcHlCeXRlcyA9IG5ldyBVaW50OEFycmF5KGJ5dGVDb3VudCk7XHJcblxyXG4gIGxldCByYW5kb21WYWx1ZTogYmlnaW50O1xyXG4gIGRvIHtcclxuICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZW50cm9weUJ5dGVzKTtcclxuICAgIHJhbmRvbVZhbHVlID1cclxuICAgICAgQmlnSW50KFxyXG4gICAgICAgIGAweCR7QXJyYXkuZnJvbShlbnRyb3B5Qnl0ZXMpXHJcbiAgICAgICAgICAubWFwKChiKSA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIikpXHJcbiAgICAgICAgICAuam9pbihcIlwiKX1gLFxyXG4gICAgICApICUgcmFuZ2U7XHJcbiAgfSB3aGlsZSAocmFuZG9tVmFsdWUgPCAwbik7XHJcblxyXG4gIHJldHVybiBtaW4gKyByYW5kb21WYWx1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19iaWdJbnRUb1N0cmluZyh2YWx1ZTogYmlnaW50KTogc3RyaW5nIHtcclxuICBjb25zdCBiYXNlID0gQmlnSW50KEVOQ09ESU5HLmxlbmd0aCk7XHJcbiAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgbGV0IGN1cnJlbnQgPSB2YWx1ZTtcclxuXHJcbiAgaWYgKGN1cnJlbnQgPT09IDBuKSByZXR1cm4gRU5DT0RJTkdbMF07XHJcblxyXG4gIHdoaWxlIChjdXJyZW50ID4gMG4pIHtcclxuICAgIGNvbnN0IHJlbWFpbmRlciA9IGN1cnJlbnQgJSBiYXNlO1xyXG4gICAgcmVzdWx0ID0gRU5DT0RJTkdbTnVtYmVyKHJlbWFpbmRlcildICsgcmVzdWx0O1xyXG4gICAgY3VycmVudCA9IGN1cnJlbnQgLyBiYXNlO1xyXG4gIH1cclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX3N0cmluZ1RvQmlnSW50KHN0cjogc3RyaW5nKTogYmlnaW50IHtcclxuICBjb25zdCBjaGFyTWFwOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBFTkNPRElORy5sZW5ndGg7IGkrKykge1xyXG4gICAgY2hhck1hcFtFTkNPRElOR1tpXV0gPSBpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgYmFzZSA9IEJpZ0ludChFTkNPRElORy5sZW5ndGgpO1xyXG4gIGxldCByZXN1bHQgPSAwbjtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuICAgIGNvbnN0IGNoYXIgPSBzdHJbaV07XHJcbiAgICBpZiAoIShjaGFyIGluIGNoYXJNYXApKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFyYWN0ZXIgJyR7Y2hhcn0nIGluIGlucHV0IHN0cmluZ2ApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmFsdWUgPSBCaWdJbnQoY2hhck1hcFtjaGFyXSk7XHJcbiAgICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgdmFsdWU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX2dldE1heFZhbHVlKG46IGJpZ2ludCk6IGJpZ2ludCB7XHJcbiAgcmV0dXJuIEJpZ0ludChFTkNPRElORy5sZW5ndGgpICoqIG4gLSAxbjtcclxufVxyXG5cclxuY29uc3QgaWRHZW5lcmF0b3IgPSBkZWZpbmVJZEdlbmVyYXRvcih7IGxlbmd0aDogMjQsIHRpbWVzdGFtcDogZmFsc2UsIHNlcXVlbnRpYWw6IGZhbHNlIH0pO1xyXG5cclxuZXhwb3J0IGNvbnN0IF9fY3JlYXRlSWQgPSBpZEdlbmVyYXRvci5jcmVhdGVJZDtcclxuIiwKICAgICJpbXBvcnQgeyBfX2NyZWF0ZUlkIH0gZnJvbSBcIi4uL3V0aWxzL2NyZWF0ZS1pZC50c1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgRXhlY3V0ZUlkR2VuZXJhdG9yID0gKGhlYWRlcnM/OiBIZWFkZXJzKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lRGVmYXVsdEV4ZWN1dGVJZEdlbmVyYXRvcigpIHtcclxuICByZXR1cm4gX19jcmVhdGVJZDtcclxufVxyXG4iLAogICAgImltcG9ydCB7IHR5cGUgJHR5cGVzLCBfX2luaXRMaXN0ZW5lciwgX19pbml0RXhlY3V0ZXIsIF9faW5pdEV2ZW50TWFuYWdlciwgdHlwZSBFeGVjdXRlSWQsIHR5cGUgTG9nZ2VyLCB0eXBlIE1peGluLCB0eXBlIEdlbmVyYXRlZEluaXQsIHR5cGUgUGluZywgdHlwZSBMb2dnZXJTdWJtaXR0aW5nSGFuZGxlciwgdHlwZSBMb2dnZXJJbnNlcnRpbmdIYW5kbGVyIH0gZnJvbSBcIi4uL2luZGV4LnRzXCI7XHJcbmltcG9ydCB7IGRlZmluZURlZmF1bHRFeGVjdXRlSWRHZW5lcmF0b3IgfSBmcm9tIFwiLi4vZXhlY3V0ZS9leGVjdXRlLWlkLWdlbmVyYXRvci50c1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNaWxraW9Jbml0IHtcclxuICAgIHBvcnQ6IG51bWJlcjtcclxuICAgIGRldmVsb3A6IGJvb2xlYW47XHJcbiAgICBmZXRjaEVudj86IChrZXk6IHN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgYWNjZXNzS2V5Pzogc3RyaW5nO1xyXG4gICAgY29ycz86IHtcclxuICAgICAgICBjb3JzQWxsb3dNZXRob2RzPzogc3RyaW5nO1xyXG4gICAgICAgIGNvcnNBbGxvd0hlYWRlcnM/OiBzdHJpbmc7XHJcbiAgICAgICAgY29yc0FsbG93T3JpZ2luPzogc3RyaW5nO1xyXG4gICAgfTtcclxuICAgIGlnbm9yZVBhdGhMZXZlbD86IG51bWJlcjtcclxuICAgIHJlYWxJcD86IChoZWFkZXJzOiBIZWFkZXJzKSA9PiBzdHJpbmc7XHJcbiAgICBleGVjdXRlSWQ/OiAoaGVhZGVyczogSGVhZGVycykgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xyXG4gICAgb25Mb2dnZXJTdWJtaXR0aW5nPzogTG9nZ2VyU3VibWl0dGluZ0hhbmRsZXI7XHJcbiAgICBvbkxvZ2dlckluc2VydGluZz86IExvZ2dlckluc2VydGluZ0hhbmRsZXI7XHJcbiAgICBib290c3RyYXBzPzogQXJyYXk8KHdvcmxkOiBhbnkpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkPjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgTWlsa2lvUnVudGltZUluaXQ8VCBleHRlbmRzIE1pbGtpb0luaXQ+ID0gTWl4aW48XHJcbiAgICBULFxyXG4gICAge1xyXG4gICAgICAgIGV4ZWN1dGVJZDogKGhlYWRlcnM6IEhlYWRlcnMpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcclxuICAgICAgICBydW50aW1lOiB7XHJcbiAgICAgICAgICAgIHJlcXVlc3Q6IE1hcDxFeGVjdXRlSWQsIHsgbG9nZ2VyOiBMb2dnZXIgfT47XHJcbiAgICAgICAgICAgIGNvbmZpZzogQXdhaXRlZDxSZXR1cm5UeXBlPCR0eXBlc1tcImdlbmVyYXRlZFwiXVtcImNvbmZpZ1NjaGVtYVwiXT4+O1xyXG4gICAgICAgICAgICBhcHA6IGFueTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIG9uOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIF9faW5pdEV2ZW50TWFuYWdlcj4+W1wib25cIl07XHJcbiAgICAgICAgb2ZmOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIF9faW5pdEV2ZW50TWFuYWdlcj4+W1wib2ZmXCJdO1xyXG4gICAgICAgIGVtaXQ6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgX19pbml0RXZlbnRNYW5hZ2VyPj5bXCJlbWl0XCJdO1xyXG4gICAgfVxyXG4+O1xyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVdvcmxkPE1pbGtpb09wdGlvbnMgZXh0ZW5kcyBNaWxraW9Jbml0PihnZW5lcmF0ZWQ6IEdlbmVyYXRlZEluaXQsIGNvbmZpZ1NjaGVtYTogeyBnZXQ6ICgpID0+IFByb21pc2U8UmVjb3JkPGFueSwgYW55Pj4gfSwgb3B0aW9uczogTWlsa2lvT3B0aW9ucyk6IFByb21pc2U8dW5rbm93bj4ge1xyXG4gICAgY29uc3QgZXhlY3V0ZUlkID0gb3B0aW9ucy5leGVjdXRlSWQgPz8gZGVmaW5lRGVmYXVsdEV4ZWN1dGVJZEdlbmVyYXRvcigpO1xyXG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgY29uZmlnU2NoZW1hLmdldCgpO1xyXG5cclxuICAgIGNvbnN0IHJ1bnRpbWUgPSB7XHJcbiAgICAgICAgcmVxdWVzdDogbmV3IE1hcCgpLFxyXG4gICAgICAgIGNvbmZpZyxcclxuICAgIH0gYXMgTWlsa2lvUnVudGltZUluaXQ8TWlsa2lvT3B0aW9ucz5bXCJydW50aW1lXCJdO1xyXG5cclxuICAgIGNvbnN0IGV2ZW50TWFuYWdlciA9IF9faW5pdEV2ZW50TWFuYWdlcigpO1xyXG5cclxuICAgIGlmIChvcHRpb25zLmFjY2Vzc0tleSkgb3B0aW9ucy5pZ25vcmVQYXRoTGV2ZWwgPSBvcHRpb25zLmlnbm9yZVBhdGhMZXZlbCA/IG9wdGlvbnMuaWdub3JlUGF0aExldmVsICsgMSA6IDE7XHJcblxyXG4gICAgY29uc3QgXzogTWlsa2lvUnVudGltZUluaXQ8TWlsa2lvT3B0aW9ucz4gPSB7XHJcbiAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICBleGVjdXRlSWQsXHJcbiAgICAgICAgcnVudGltZSxcclxuICAgICAgICBvbjogZXZlbnRNYW5hZ2VyLm9uLFxyXG4gICAgICAgIG9mZjogZXZlbnRNYW5hZ2VyLm9mZixcclxuICAgICAgICBlbWl0OiBldmVudE1hbmFnZXIuZW1pdCxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZXhlY3V0ZXIgPSBfX2luaXRFeGVjdXRlcihnZW5lcmF0ZWQsIF8pO1xyXG4gICAgY29uc3QgbGlzdGVuZXIgPSBfX2luaXRMaXN0ZW5lcihnZW5lcmF0ZWQsIF8sIGV4ZWN1dGVyKTtcclxuXHJcbiAgICAvLyBJbml0aWFsaXplIHRoZSBhcHBcclxuICAgIGNvbnN0IHdvcmxkID0ge1xyXG4gICAgICAgIF8sXHJcbiAgICAgICAgLy8gZXZlbnQgbWFuYWdlclxyXG4gICAgICAgIG9uOiBldmVudE1hbmFnZXIub24sXHJcbiAgICAgICAgb2ZmOiBldmVudE1hbmFnZXIub2ZmLFxyXG4gICAgICAgIGVtaXQ6IGV2ZW50TWFuYWdlci5lbWl0LFxyXG4gICAgICAgIC8vIGxpc3RlbmVyXHJcbiAgICAgICAgbGlzdGVuZXIsXHJcbiAgICAgICAgLy8gZnVuY3Rpb25cclxuICAgICAgICBjb25maWcsXHJcbiAgICB9O1xyXG5cclxuICAgIHJ1bnRpbWUuYXBwID0gd29ybGQ7XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5ib290c3RyYXBzKSkge1xyXG4gICAgICAgIGZvciAoY29uc3QgYm9vdHN0cmFwIG9mIG9wdGlvbnMuYm9vdHN0cmFwcykge1xyXG4gICAgICAgICAgICBhd2FpdCBib290c3RyYXAod29ybGQgYXMgTWlsa2lvV29ybGQ8R2VuZXJhdGVkSW5pdCwgTWlsa2lvT3B0aW9ucz4pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChnZW5lcmF0ZWQuaGFuZGxlclNjaGVtYS5sb2FkSGFuZGxlcnMod29ybGQpKTtcclxuXHJcbiAgICBjb25zdCByb3V0ZUtleXMgPSBPYmplY3Qua2V5cyhnZW5lcmF0ZWQucm91dGVTY2hlbWEgYXMgUmVjb3JkPHN0cmluZywgYW55Pik7XHJcbiAgICBjb25zb2xlLmxvZyhgXFxu4pazIFJvdXRlczpcXG4gICAgJHtyb3V0ZUtleXMuam9pbihcIlxcbiAgICBcIil9XFxuICBBIHRvdGFsIG9mICR7cm91dGVLZXlzLmxlbmd0aH0gcm91dGVzLmApO1xyXG4gICAgY29uc29sZS5sb2coYFxcbuKWsyBTZXJ2ZXI6IGh0dHA6Ly9sb2NhbGhvc3Q6JHtvcHRpb25zLnBvcnR9YCk7XHJcblxyXG4gICAgcmV0dXJuIHdvcmxkIGFzIHVua25vd247XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWlsa2lvV29ybGQ8R2VuZXJhdGVkIGV4dGVuZHMgR2VuZXJhdGVkSW5pdCwgTWlsa2lvT3B0aW9ucyBleHRlbmRzIE1pbGtpb0luaXQgPSBNaWxraW9Jbml0PiB7XHJcbiAgICBfOiBNaWxraW9SdW50aW1lSW5pdDxNaWxraW9PcHRpb25zPjtcclxuICAgIC8vIGV2ZW50IG1hbmFnZXJcclxuICAgIG9uOiA8S2V5IGV4dGVuZHMga2V5b2YgR2VuZXJhdGVkW1wiZXZlbnRzXCJdLCBIYW5kbGVyIGV4dGVuZHMgKGV2ZW50OiBHZW5lcmF0ZWRbXCJldmVudHNcIl1bS2V5XSkgPT4gdm9pZD4oa2V5OiBLZXksIGhhbmRsZXI6IEhhbmRsZXIpID0+ICgoKSA9PiB2b2lkKTtcclxuICAgIG9mZjogPEtleSBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFtcImV2ZW50c1wiXSwgSGFuZGxlciBleHRlbmRzIChldmVudDogR2VuZXJhdGVkW1wiZXZlbnRzXCJdW0tleV0pID0+IHZvaWQ+KGtleTogS2V5LCBoYW5kbGVyOiBIYW5kbGVyKSA9PiB2b2lkO1xyXG4gICAgZW1pdDogPEtleSBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFtcImV2ZW50c1wiXSwgVmFsdWUgZXh0ZW5kcyBHZW5lcmF0ZWRbXCJldmVudHNcIl1bS2V5XT4oa2V5OiBLZXksIHZhbHVlOiBWYWx1ZSkgPT4gUHJvbWlzZTx2b2lkPjtcclxuICAgIHBpbmc6IChvcHRpb25zPzogeyB0aW1lb3V0PzogbnVtYmVyIH0pID0+IFByb21pc2U8UGluZz47XHJcbiAgICAvLyBsaXN0ZW5lclxyXG4gICAgbGlzdGVuZXI6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgX19pbml0TGlzdGVuZXI+PjtcclxuICAgIGNvbmZpZzogUmVhZG9ubHk8QXdhaXRlZDxSZXR1cm5UeXBlPCR0eXBlc1tcImNvbmZpZ1NjaGVtYVwiXVtcImdldFwiXT4+PjtcclxufVxyXG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiB0eXBpYTxUeXBpYUluaXRUIGV4dGVuZHMgVHlwaWFJbml0Pihpbml0OiBUeXBpYUluaXRUKTogVHlwaWE8VHlwaWFJbml0VD4ge1xyXG4gIHJldHVybiBpbml0IGFzIHVua25vd24gYXMgVHlwaWE8VHlwaWFJbml0VD47XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFR5cGlhSW5pdCA9ICgpID0+IFJlY29yZDxQcm9wZXJ0eUtleSwgdW5rbm93bj4gfCBQcm9taXNlPFJlY29yZDxQcm9wZXJ0eUtleSwgdW5rbm93bj4+O1xyXG5cclxuZXhwb3J0IHR5cGUgVHlwaWE8VHlwaWFJbml0VCBleHRlbmRzIFR5cGlhSW5pdD4gPSBUeXBpYUluaXRUO1xyXG4iLAogICAgIi8qKlxuICogQG1vZHVsZSBjb25zdGFudHNcbiAqIEBzdW1tYXJ5IFVzZWZ1bCBjb25zdGFudHNcbiAqIEBkZXNjcmlwdGlvblxuICogQ29sbGVjdGlvbiBvZiB1c2VmdWwgZGF0ZSBjb25zdGFudHMuXG4gKlxuICogVGhlIGNvbnN0YW50cyBjb3VsZCBiZSBpbXBvcnRlZCBmcm9tIGBkYXRlLWZucy9jb25zdGFudHNgOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBtYXhUaW1lLCBtaW5UaW1lIH0gZnJvbSBcIi4vY29uc3RhbnRzL2RhdGUtZm5zL2NvbnN0YW50c1wiO1xuICpcbiAqIGZ1bmN0aW9uIGlzQWxsb3dlZFRpbWUodGltZSkge1xuICogICByZXR1cm4gdGltZSA8PSBtYXhUaW1lICYmIHRpbWUgPj0gbWluVGltZTtcbiAqIH1cbiAqIGBgYFxuICovXG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBkYXlzSW5XZWVrXG4gKiBAc3VtbWFyeSBEYXlzIGluIDEgd2Vlay5cbiAqL1xuZXhwb3J0IGNvbnN0IGRheXNJbldlZWsgPSA3O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgZGF5c0luWWVhclxuICogQHN1bW1hcnkgRGF5cyBpbiAxIHllYXIuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBIb3cgbWFueSBkYXlzIGluIGEgeWVhci5cbiAqXG4gKiBPbmUgeWVhcnMgZXF1YWxzIDM2NS4yNDI1IGRheXMgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOlxuICpcbiAqID4gTGVhcCB5ZWFyIG9jY3VycyBldmVyeSA0IHllYXJzLCBleGNlcHQgZm9yIHllYXJzIHRoYXQgYXJlIGRpdmlzaWJsZSBieSAxMDAgYW5kIG5vdCBkaXZpc2libGUgYnkgNDAwLlxuICogPiAxIG1lYW4geWVhciA9ICgzNjUrMS80LTEvMTAwKzEvNDAwKSBkYXlzID0gMzY1LjI0MjUgZGF5c1xuICovXG5leHBvcnQgY29uc3QgZGF5c0luWWVhciA9IDM2NS4yNDI1O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWF4VGltZVxuICogQHN1bW1hcnkgTWF4aW11bSBhbGxvd2VkIHRpbWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IG1heFRpbWUgfSBmcm9tIFwiLi9jb25zdGFudHMvZGF0ZS1mbnMvY29uc3RhbnRzXCI7XG4gKlxuICogY29uc3QgaXNWYWxpZCA9IDg2NDAwMDAwMDAwMDAwMDEgPD0gbWF4VGltZTtcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBuZXcgRGF0ZSg4NjQwMDAwMDAwMDAwMDAxKTtcbiAqIC8vPT4gSW52YWxpZCBEYXRlXG4gKi9cbmV4cG9ydCBjb25zdCBtYXhUaW1lID0gTWF0aC5wb3coMTAsIDgpICogMjQgKiA2MCAqIDYwICogMTAwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pblRpbWVcbiAqIEBzdW1tYXJ5IE1pbmltdW0gYWxsb3dlZCB0aW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBtaW5UaW1lIH0gZnJvbSBcIi4vY29uc3RhbnRzL2RhdGUtZm5zL2NvbnN0YW50c1wiO1xuICpcbiAqIGNvbnN0IGlzVmFsaWQgPSAtODY0MDAwMDAwMDAwMDAwMSA+PSBtaW5UaW1lO1xuICogLy89PiBmYWxzZVxuICpcbiAqIG5ldyBEYXRlKC04NjQwMDAwMDAwMDAwMDAxKVxuICogLy89PiBJbnZhbGlkIERhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IG1pblRpbWUgPSAtbWF4VGltZTtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbGxpc2Vjb25kc0luV2Vla1xuICogQHN1bW1hcnkgTWlsbGlzZWNvbmRzIGluIDEgd2Vlay5cbiAqL1xuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kc0luV2VlayA9IDYwNDgwMDAwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbGxpc2Vjb25kc0luRGF5XG4gKiBAc3VtbWFyeSBNaWxsaXNlY29uZHMgaW4gMSBkYXkuXG4gKi9cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZHNJbkRheSA9IDg2NDAwMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWlsbGlzZWNvbmRzSW5NaW51dGVcbiAqIEBzdW1tYXJ5IE1pbGxpc2Vjb25kcyBpbiAxIG1pbnV0ZVxuICovXG5leHBvcnQgY29uc3QgbWlsbGlzZWNvbmRzSW5NaW51dGUgPSA2MDAwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbGxpc2Vjb25kc0luSG91clxuICogQHN1bW1hcnkgTWlsbGlzZWNvbmRzIGluIDEgaG91clxuICovXG5leHBvcnQgY29uc3QgbWlsbGlzZWNvbmRzSW5Ib3VyID0gMzYwMDAwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbGxpc2Vjb25kc0luU2Vjb25kXG4gKiBAc3VtbWFyeSBNaWxsaXNlY29uZHMgaW4gMSBzZWNvbmRcbiAqL1xuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kc0luU2Vjb25kID0gMTAwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbnV0ZXNJblllYXJcbiAqIEBzdW1tYXJ5IE1pbnV0ZXMgaW4gMSB5ZWFyLlxuICovXG5leHBvcnQgY29uc3QgbWludXRlc0luWWVhciA9IDUyNTYwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbnV0ZXNJbk1vbnRoXG4gKiBAc3VtbWFyeSBNaW51dGVzIGluIDEgbW9udGguXG4gKi9cbmV4cG9ydCBjb25zdCBtaW51dGVzSW5Nb250aCA9IDQzMjAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWludXRlc0luRGF5XG4gKiBAc3VtbWFyeSBNaW51dGVzIGluIDEgZGF5LlxuICovXG5leHBvcnQgY29uc3QgbWludXRlc0luRGF5ID0gMTQ0MDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1pbnV0ZXNJbkhvdXJcbiAqIEBzdW1tYXJ5IE1pbnV0ZXMgaW4gMSBob3VyLlxuICovXG5leHBvcnQgY29uc3QgbWludXRlc0luSG91ciA9IDYwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbW9udGhzSW5RdWFydGVyXG4gKiBAc3VtbWFyeSBNb250aHMgaW4gMSBxdWFydGVyLlxuICovXG5leHBvcnQgY29uc3QgbW9udGhzSW5RdWFydGVyID0gMztcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIG1vbnRoc0luWWVhclxuICogQHN1bW1hcnkgTW9udGhzIGluIDEgeWVhci5cbiAqL1xuZXhwb3J0IGNvbnN0IG1vbnRoc0luWWVhciA9IDEyO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgcXVhcnRlcnNJblllYXJcbiAqIEBzdW1tYXJ5IFF1YXJ0ZXJzIGluIDEgeWVhclxuICovXG5leHBvcnQgY29uc3QgcXVhcnRlcnNJblllYXIgPSA0O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luSG91clxuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIGhvdXIuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5Ib3VyID0gMzYwMDtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJbk1pbnV0ZVxuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIG1pbnV0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJbk1pbnV0ZSA9IDYwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luRGF5XG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgZGF5LlxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luRGF5ID0gc2Vjb25kc0luSG91ciAqIDI0O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luV2Vla1xuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIHdlZWsuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5XZWVrID0gc2Vjb25kc0luRGF5ICogNztcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJblllYXJcbiAqIEBzdW1tYXJ5IFNlY29uZHMgaW4gMSB5ZWFyLlxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luWWVhciA9IHNlY29uZHNJbkRheSAqIGRheXNJblllYXI7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5Nb250aFxuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIG1vbnRoXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5Nb250aCA9IHNlY29uZHNJblllYXIgLyAxMjtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJblF1YXJ0ZXJcbiAqIEBzdW1tYXJ5IFNlY29uZHMgaW4gMSBxdWFydGVyLlxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luUXVhcnRlciA9IHNlY29uZHNJbk1vbnRoICogMztcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIGNvbnN0cnVjdEZyb21TeW1ib2xcbiAqIEBzdW1tYXJ5IFN5bWJvbCBlbmFibGluZyBEYXRlIGV4dGVuc2lvbnMgdG8gaW5oZXJpdCBwcm9wZXJ0aWVzIGZyb20gdGhlIHJlZmVyZW5jZSBkYXRlLlxuICpcbiAqIFRoZSBzeW1ib2wgaXMgdXNlZCB0byBlbmFibGUgdGhlIGBjb25zdHJ1Y3RGcm9tYCBmdW5jdGlvbiB0byBjb25zdHJ1Y3QgYSBkYXRlXG4gKiB1c2luZyBhIHJlZmVyZW5jZSBkYXRlIGFuZCBhIHZhbHVlLiBJdCBhbGxvd3MgdG8gdHJhbnNmZXIgZXh0cmEgcHJvcGVydGllc1xuICogZnJvbSB0aGUgcmVmZXJlbmNlIGRhdGUgdG8gdGhlIG5ldyBkYXRlLiBJdCdzIHVzZWZ1bCBmb3IgZXh0ZW5zaW9ucyBsaWtlXG4gKiBbYFRaRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy90eikgdGhhdCBhY2NlcHQgYSB0aW1lIHpvbmUgYXNcbiAqIGEgY29uc3RydWN0b3IgYXJndW1lbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RGcm9tU3ltYm9sID0gU3ltYm9sLmZvcihcImNvbnN0cnVjdERhdGVGcm9tXCIpO1xuIiwKICAgICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tU3ltYm9sIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgY29uc3RydWN0RnJvbVxuICogQGNhdGVnb3J5IEdlbmVyaWMgSGVscGVyc1xuICogQHN1bW1hcnkgQ29uc3RydWN0cyBhIGRhdGUgdXNpbmcgdGhlIHJlZmVyZW5jZSBkYXRlIGFuZCB0aGUgdmFsdWVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBmdW5jdGlvbiBjb25zdHJ1Y3RzIGEgbmV3IGRhdGUgdXNpbmcgdGhlIGNvbnN0cnVjdG9yIGZyb20gdGhlIHJlZmVyZW5jZVxuICogZGF0ZSBhbmQgdGhlIGdpdmVuIHZhbHVlLiBJdCBoZWxwcyB0byBidWlsZCBnZW5lcmljIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdFxuICogZGF0ZSBleHRlbnNpb25zLlxuICpcbiAqIEl0IGRlZmF1bHRzIHRvIGBEYXRlYCBpZiB0aGUgcGFzc2VkIHJlZmVyZW5jZSBkYXRlIGlzIGEgbnVtYmVyIG9yIGEgc3RyaW5nLlxuICpcbiAqIFN0YXJ0aW5nIGZyb20gdjMuNy4wLCBpdCBhbGxvd3MgdG8gY29uc3RydWN0IGEgZGF0ZSB1c2luZyBgW1N5bWJvbC5mb3IoXCJjb25zdHJ1Y3REYXRlRnJvbVwiKV1gXG4gKiBlbmFibGluZyB0byB0cmFuc2ZlciBleHRyYSBwcm9wZXJ0aWVzIGZyb20gdGhlIHJlZmVyZW5jZSBkYXRlIHRvIHRoZSBuZXcgZGF0ZS5cbiAqIEl0J3MgdXNlZnVsIGZvciBleHRlbnNpb25zIGxpa2UgW2BUWkRhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdHopXG4gKiB0aGF0IGFjY2VwdCBhIHRpbWUgem9uZSBhcyBhIGNvbnN0cnVjdG9yIGFyZ3VtZW50LlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIHJlZmVyZW5jZSBkYXRlIHRvIHRha2UgY29uc3RydWN0b3IgZnJvbVxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNyZWF0ZSB0aGUgZGF0ZVxuICpcbiAqIEByZXR1cm5zIERhdGUgaW5pdGlhbGl6ZWQgdXNpbmcgdGhlIGdpdmVuIGRhdGUgYW5kIHZhbHVlXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tL2RhdGUtZm5zXCI7XG4gKlxuICogLy8gQSBmdW5jdGlvbiB0aGF0IGNsb25lcyBhIGRhdGUgcHJlc2VydmluZyB0aGUgb3JpZ2luYWwgdHlwZVxuICogZnVuY3Rpb24gY2xvbmVEYXRlPERhdGVUeXBlIGV4dGVuZHMgRGF0ZT4oZGF0ZTogRGF0ZVR5cGUpOiBEYXRlVHlwZSB7XG4gKiAgIHJldHVybiBjb25zdHJ1Y3RGcm9tKFxuICogICAgIGRhdGUsIC8vIFVzZSBjb25zdHJ1Y3RvciBmcm9tIHRoZSBnaXZlbiBkYXRlXG4gKiAgICAgZGF0ZS5nZXRUaW1lKCkgLy8gVXNlIHRoZSBkYXRlIHZhbHVlIHRvIGNyZWF0ZSBhIG5ldyBkYXRlXG4gKiAgICk7XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RGcm9tKGRhdGUsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgZGF0ZSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZGF0ZSh2YWx1ZSk7XG5cbiAgaWYgKGRhdGUgJiYgdHlwZW9mIGRhdGUgPT09IFwib2JqZWN0XCIgJiYgY29uc3RydWN0RnJvbVN5bWJvbCBpbiBkYXRlKVxuICAgIHJldHVybiBkYXRlW2NvbnN0cnVjdEZyb21TeW1ib2xdKHZhbHVlKTtcblxuICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBuZXcgZGF0ZS5jb25zdHJ1Y3Rvcih2YWx1ZSk7XG5cbiAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBjb25zdHJ1Y3RGcm9tO1xuIiwKICAgICJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIHRvRGF0ZVxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb252ZXJ0IHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbiBpbnN0YW5jZSBvZiBEYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXRzIGNsb25lLlxuICpcbiAqIElmIHRoZSBhcmd1bWVudCBpcyBhIG51bWJlciwgaXQgaXMgdHJlYXRlZCBhcyBhIHRpbWVzdGFtcC5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiBTdGFydGluZyBmcm9tIHYzLjcuMCwgaXQgY2xvbmVzIGEgZGF0ZSB1c2luZyBgW1N5bWJvbC5mb3IoXCJjb25zdHJ1Y3REYXRlRnJvbVwiKV1gXG4gKiBlbmFibGluZyB0byB0cmFuc2ZlciBleHRyYSBwcm9wZXJ0aWVzIGZyb20gdGhlIHJlZmVyZW5jZSBkYXRlIHRvIHRoZSBuZXcgZGF0ZS5cbiAqIEl0J3MgdXNlZnVsIGZvciBleHRlbnNpb25zIGxpa2UgW2BUWkRhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdHopXG4gKiB0aGF0IGFjY2VwdCBhIHRpbWUgem9uZSBhcyBhIGNvbnN0cnVjdG9yIGFyZ3VtZW50LlxuICpcbiAqICoqTm90ZSoqOiAqYWxsKiBEYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYW55ICpkYXRlLWZucyogZnVuY3Rpb24gaXMgcHJvY2Vzc2VkIGJ5IGB0b0RhdGVgLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gYXJndW1lbnQgLSBUaGUgdmFsdWUgdG8gY29udmVydFxuICpcbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgZGF0ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENsb25lIHRoZSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKG5ldyBEYXRlKDIwMTQsIDEsIDExLCAxMSwgMzAsIDMwKSlcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgdGhlIHRpbWVzdGFtcCB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKDEzOTIwOTg0MzAwMDApXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50LCBjb250ZXh0KSB7XG4gIC8vIFtUT0RPXSBHZXQgcmlkIG9mIGB0b0RhdGVgIG9yIGBjb25zdHJ1Y3RGcm9tYD9cbiAgcmV0dXJuIGNvbnN0cnVjdEZyb20oY29udGV4dCB8fCBhcmd1bWVudCwgYXJndW1lbnQpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHRvRGF0ZTtcbiIsCiAgICAibGV0IGRlZmF1bHRPcHRpb25zID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgcmV0dXJuIGRlZmF1bHRPcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMobmV3T3B0aW9ucykge1xuICBkZWZhdWx0T3B0aW9ucyA9IG5ld09wdGlvbnM7XG59XG4iLAogICAgImltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0T3B0aW9ucy5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdGFydE9mV2Vla30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZXZWVrXG4gKiBAY2F0ZWdvcnkgV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgd2VlayBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgd2VlayBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgc3RhcnQgb2YgYSB3ZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIHdlZWsgZm9yIDIgU2VwdGVtYmVyIDIwMTQgMTE6NTU6MDA6XG4gKiBjb25zdCByZXN1bHQgPSBzdGFydE9mV2VlayhuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApKVxuICogLy89PiBTdW4gQXVnIDMxIDIwMTQgMDA6MDA6MDBcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdGhlIHdlZWsgc3RhcnRzIG9uIE1vbmRheSwgdGhlIHN0YXJ0IG9mIHRoZSB3ZWVrIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZldlZWsobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSwgeyB3ZWVrU3RhcnRzT246IDEgfSlcbiAqIC8vPT4gTW9uIFNlcCAwMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mV2VlayhkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgY29uc3Qgd2Vla1N0YXJ0c09uID1cbiAgICBvcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIGRlZmF1bHRPcHRpb25zLndlZWtTdGFydHNPbiA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgMDtcblxuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IGRheSA9IF9kYXRlLmdldERheSgpO1xuICBjb25zdCBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcblxuICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSAtIGRpZmYpO1xuICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIF9kYXRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN0YXJ0T2ZXZWVrO1xuIiwKICAgICJpbXBvcnQgeyBzdGFydE9mV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZXZWVrLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdGFydE9mSVNPV2Vla30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZJU09XZWVrXG4gKiBAY2F0ZWdvcnkgSVNPIFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhbiBJU08gd2VlayBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogSVNPIHdlZWstbnVtYmVyaW5nIHllYXI6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgc3RhcnQgb2YgYW4gSVNPIHdlZWtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZklTT1dlZWsobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gTW9uIFNlcCAwMSAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mSVNPV2VlayhkYXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBzdGFydE9mV2VlayhkYXRlLCB7IC4uLm9wdGlvbnMsIHdlZWtTdGFydHNPbjogMSB9KTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mSVNPV2VlaztcbiIsCiAgICAiaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZJU09XZWVrIH0gZnJvbSBcIi4vc3RhcnRPZklTT1dlZWsuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0SVNPV2Vla1llYXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBnZXRJU09XZWVrWWVhclxuICogQGNhdGVnb3J5IElTTyBXZWVrLU51bWJlcmluZyBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLFxuICogd2hpY2ggYWx3YXlzIHN0YXJ0cyAzIGRheXMgYmVmb3JlIHRoZSB5ZWFyJ3MgZmlyc3QgVGh1cnNkYXkuXG4gKlxuICogSVNPIHdlZWstbnVtYmVyaW5nIHllYXI6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqXG4gKiBAcmV0dXJucyBUaGUgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggSVNPLXdlZWsgbnVtYmVyaW5nIHllYXIgaXMgMiBKYW51YXJ5IDIwMDU/XG4gKiBjb25zdCByZXN1bHQgPSBnZXRJU09XZWVrWWVhcihuZXcgRGF0ZSgyMDA1LCAwLCAyKSlcbiAqIC8vPT4gMjAwNFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SVNPV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG4gIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gIGNvbnN0IGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIgPSBjb25zdHJ1Y3RGcm9tKF9kYXRlLCAwKTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRGdWxsWWVhcih5ZWFyICsgMSwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIGNvbnN0IHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIpO1xuXG4gIGNvbnN0IGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIgPSBjb25zdHJ1Y3RGcm9tKF9kYXRlLCAwKTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRGdWxsWWVhcih5ZWFyLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgY29uc3Qgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZklTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhcik7XG5cbiAgaWYgKF9kYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKF9kYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0SVNPV2Vla1llYXI7XG4iLAogICAgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkYXRlKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUpO1xuICBjb25zdCB1dGNEYXRlID0gbmV3IERhdGUoXG4gICAgRGF0ZS5VVEMoXG4gICAgICBfZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgX2RhdGUuZ2V0TW9udGgoKSxcbiAgICAgIF9kYXRlLmdldERhdGUoKSxcbiAgICAgIF9kYXRlLmdldEhvdXJzKCksXG4gICAgICBfZGF0ZS5nZXRNaW51dGVzKCksXG4gICAgICBfZGF0ZS5nZXRTZWNvbmRzKCksXG4gICAgICBfZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSxcbiAgICApLFxuICApO1xuICB1dGNEYXRlLnNldFVUQ0Z1bGxZZWFyKF9kYXRlLmdldEZ1bGxZZWFyKCkpO1xuICByZXR1cm4gK2RhdGUgLSArdXRjRGF0ZTtcbn1cbiIsCiAgICAiaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVEYXRlcyhjb250ZXh0LCAuLi5kYXRlcykge1xuICBjb25zdCBub3JtYWxpemUgPSBjb25zdHJ1Y3RGcm9tLmJpbmQoXG4gICAgbnVsbCxcbiAgICBjb250ZXh0IHx8IGRhdGVzLmZpbmQoKGRhdGUpID0+IHR5cGVvZiBkYXRlID09PSBcIm9iamVjdFwiKSxcbiAgKTtcbiAgcmV0dXJuIGRhdGVzLm1hcChub3JtYWxpemUpO1xufVxuIiwKICAgICJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN0YXJ0T2ZEYXl9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzdGFydE9mRGF5XG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSBkYXkgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhIGRheSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZSwgaXQgaXMgdGhlIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgY29udGV4dCBmdW5jdGlvbiBpZiBpdCBpcyBwYXNzZWQsIG9yIGluZmVycmVkIGZyb20gdGhlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGEgZGF5XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIGRheSBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZEYXkobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gVHVlIFNlcCAwMiAyMDE0IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mRGF5KGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIF9kYXRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN0YXJ0T2ZEYXk7XG4iLAogICAgImltcG9ydCB7IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMgfSBmcm9tIFwiLi9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMuanNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZURhdGVzIH0gZnJvbSBcIi4vX2xpYi9ub3JtYWxpemVEYXRlcy5qc1wiO1xuaW1wb3J0IHsgbWlsbGlzZWNvbmRzSW5EYXkgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZEYXkgfSBmcm9tIFwiLi9zdGFydE9mRGF5LmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXN9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXNcbiAqIEBjYXRlZ29yeSBEYXkgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgZGF5cyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbnVtYmVyIG9mIGNhbGVuZGFyIGRheXMgYmV0d2VlbiB0aGUgZ2l2ZW4gZGF0ZXMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgdGltZXMgYXJlIHJlbW92ZWRcbiAqIGZyb20gdGhlIGRhdGVzIGFuZCB0aGVuIHRoZSBkaWZmZXJlbmNlIGluIGRheXMgaXMgY2FsY3VsYXRlZC5cbiAqXG4gKiBAcGFyYW0gbGF0ZXJEYXRlIC0gVGhlIGxhdGVyIGRhdGVcbiAqIEBwYXJhbSBlYXJsaWVyRGF0ZSAtIFRoZSBlYXJsaWVyIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0XG4gKlxuICogQHJldHVybnMgVGhlIG51bWJlciBvZiBjYWxlbmRhciBkYXlzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIGRheXMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDExIDIzOjAwOjAwIGFuZCAyIEp1bHkgMjAxMiAwMDowMDowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhcbiAqICAgbmV3IERhdGUoMjAxMiwgNiwgMiwgMCwgMCksXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDIsIDIzLCAwKVxuICogKVxuICogLy89PiAzNjZcbiAqIC8vIEhvdyBtYW55IGNhbGVuZGFyIGRheXMgYXJlIGJldHdlZW5cbiAqIC8vIDIgSnVseSAyMDExIDIzOjU5OjAwIGFuZCAzIEp1bHkgMjAxMSAwMDowMTowMD9cbiAqIGNvbnN0IHJlc3VsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhcbiAqICAgbmV3IERhdGUoMjAxMSwgNiwgMywgMCwgMSksXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDIsIDIzLCA1OSlcbiAqIClcbiAqIC8vPT4gMVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcyhcbiAgICBvcHRpb25zPy5pbixcbiAgICBsYXRlckRhdGUsXG4gICAgZWFybGllckRhdGUsXG4gICk7XG5cbiAgY29uc3QgbGF0ZXJTdGFydE9mRGF5ID0gc3RhcnRPZkRheShsYXRlckRhdGVfKTtcbiAgY29uc3QgZWFybGllclN0YXJ0T2ZEYXkgPSBzdGFydE9mRGF5KGVhcmxpZXJEYXRlXyk7XG5cbiAgY29uc3QgbGF0ZXJUaW1lc3RhbXAgPVxuICAgICtsYXRlclN0YXJ0T2ZEYXkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGxhdGVyU3RhcnRPZkRheSk7XG4gIGNvbnN0IGVhcmxpZXJUaW1lc3RhbXAgPVxuICAgICtlYXJsaWVyU3RhcnRPZkRheSAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZWFybGllclN0YXJ0T2ZEYXkpO1xuXG4gIC8vIFJvdW5kIHRoZSBudW1iZXIgb2YgZGF5cyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIGJlY2F1c2UgdGhlIG51bWJlciBvZlxuICAvLyBtaWxsaXNlY29uZHMgaW4gYSBkYXkgaXMgbm90IGNvbnN0YW50IChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mXG4gIC8vIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdCkuXG4gIHJldHVybiBNYXRoLnJvdW5kKChsYXRlclRpbWVzdGFtcCAtIGVhcmxpZXJUaW1lc3RhbXApIC8gbWlsbGlzZWNvbmRzSW5EYXkpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cztcbiIsCiAgICAiaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20uanNcIjtcbmltcG9ydCB7IGdldElTT1dlZWtZZWFyIH0gZnJvbSBcIi4vZ2V0SVNPV2Vla1llYXIuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZJU09XZWVrIH0gZnJvbSBcIi4vc3RhcnRPZklTT1dlZWsuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN0YXJ0T2ZJU09XZWVrWWVhcn0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIHN0YXJ0T2ZJU09XZWVrWWVhclxuICogQGNhdGVnb3J5IElTTyBXZWVrLU51bWJlcmluZyBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYW4gSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhbiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcixcbiAqIHdoaWNoIGFsd2F5cyBzdGFydHMgMyBkYXlzIGJlZm9yZSB0aGUgeWVhcidzIGZpcnN0IFRodXJzZGF5LlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdERhdGUgLSBUaGUgcmVzdWx0IGBEYXRlYCB0eXBlLCBpdCBpcyB0aGUgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBjb250ZXh0IGZ1bmN0aW9uIGlmIGl0IGlzIHBhc3NlZCwgb3IgaW5mZXJyZWQgZnJvbSB0aGUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBzdGFydCBvZiBhbiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYW4gSVNPIHdlZWstbnVtYmVyaW5nIHllYXIgZm9yIDIgSnVseSAyMDA1OlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZklTT1dlZWtZZWFyKG5ldyBEYXRlKDIwMDUsIDYsIDIpKVxuICogLy89PiBNb24gSmFuIDAzIDIwMDUgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZJU09XZWVrWWVhcihkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IHllYXIgPSBnZXRJU09XZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5ID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldEZ1bGxZZWFyKHllYXIsIDAsIDQpO1xuICBmb3VydGhPZkphbnVhcnkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN0YXJ0T2ZJU09XZWVrWWVhcjtcbiIsCiAgICAiLyoqXG4gKiBAbmFtZSBpc0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIHZhbHVlIGEgZGF0ZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZS4gVGhlIGZ1bmN0aW9uIHdvcmtzIGZvciBkYXRlcyB0cmFuc2ZlcnJlZCBhY3Jvc3MgaWZyYW1lcy5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIGRhdGVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIGEgdmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZShuZXcgRGF0ZSgpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhbiBpbnZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoTmFOKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3Igc29tZSB2YWx1ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzRGF0ZSgnMjAxNC0wMi0zMScpXG4gKiAvLz0+IGZhbHNlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhbiBvYmplY3Q6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoe30pXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSBcIltvYmplY3QgRGF0ZV1cIilcbiAgKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc0RhdGU7XG4iLAogICAgImltcG9ydCB7IGlzRGF0ZSB9IGZyb20gXCIuL2lzRGF0ZS5qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgaXNWYWxpZFxuICogQGNhdGVnb3J5IENvbW1vbiBIZWxwZXJzXG4gKiBAc3VtbWFyeSBJcyB0aGUgZ2l2ZW4gZGF0ZSB2YWxpZD9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybnMgZmFsc2UgaWYgYXJndW1lbnQgaXMgSW52YWxpZCBEYXRlIGFuZCB0cnVlIG90aGVyd2lzZS5cbiAqIEFyZ3VtZW50IGlzIGNvbnZlcnRlZCB0byBEYXRlIHVzaW5nIGB0b0RhdGVgLiBTZWUgW3RvRGF0ZV0oaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy90b0RhdGUpXG4gKiBJbnZhbGlkIERhdGUgaXMgYSBEYXRlLCB3aG9zZSB0aW1lIHZhbHVlIGlzIE5hTi5cbiAqXG4gKiBUaW1lIHZhbHVlIG9mIERhdGU6IGh0dHA6Ly9lczUuZ2l0aHViLmlvLyN4MTUuOS4xLjFcbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMgVGhlIGRhdGUgaXMgdmFsaWRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgyMDE0LCAxLCAzMSkpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSB2YWx1ZSwgY29udmVydGlibGUgaW50byBhIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKDEzOTM4MDQ4MDAwMDApXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHRoZSBpbnZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc1ZhbGlkKG5ldyBEYXRlKCcnKSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWQoZGF0ZSkge1xuICByZXR1cm4gISgoIWlzRGF0ZShkYXRlKSAmJiB0eXBlb2YgZGF0ZSAhPT0gXCJudW1iZXJcIikgfHwgaXNOYU4oK3RvRGF0ZShkYXRlKSkpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGlzVmFsaWQ7XG4iLAogICAgImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZlllYXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzdGFydE9mWWVhclxuICogQGNhdGVnb3J5IFllYXIgSGVscGVyc1xuICogQHN1bW1hcnkgUmV0dXJuIHRoZSBzdGFydCBvZiBhIHllYXIgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhIHllYXIgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIHJlc3VsdCB3aWxsIGJlIGluIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0RGF0ZSAtIFRoZSByZXN1bHQgYERhdGVgIHR5cGUsIGl0IGlzIHRoZSB0eXBlIHJldHVybmVkIGZyb20gdGhlIGNvbnRleHQgZnVuY3Rpb24gaWYgaXQgaXMgcGFzc2VkLCBvciBpbmZlcnJlZCBmcm9tIHRoZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBzdGFydCBvZiBhIHllYXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGEgeWVhciBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZZZWFyKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMDApKVxuICogLy89PiBXZWQgSmFuIDAxIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZZZWFyKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBkYXRlXy5zZXRGdWxsWWVhcihkYXRlXy5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgZGF0ZV8uc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlXztcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mWWVhcjtcbiIsCiAgICAiY29uc3QgZm9ybWF0RGlzdGFuY2VMb2NhbGUgPSB7XG4gIGxlc3NUaGFuWFNlY29uZHM6IHtcbiAgICBvbmU6IFwibGVzcyB0aGFuIGEgc2Vjb25kXCIsXG4gICAgb3RoZXI6IFwibGVzcyB0aGFuIHt7Y291bnR9fSBzZWNvbmRzXCIsXG4gIH0sXG5cbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6IFwiMSBzZWNvbmRcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gc2Vjb25kc1wiLFxuICB9LFxuXG4gIGhhbGZBTWludXRlOiBcImhhbGYgYSBtaW51dGVcIixcblxuICBsZXNzVGhhblhNaW51dGVzOiB7XG4gICAgb25lOiBcImxlc3MgdGhhbiBhIG1pbnV0ZVwiLFxuICAgIG90aGVyOiBcImxlc3MgdGhhbiB7e2NvdW50fX0gbWludXRlc1wiLFxuICB9LFxuXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiBcIjEgbWludXRlXCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19IG1pbnV0ZXNcIixcbiAgfSxcblxuICBhYm91dFhIb3Vyczoge1xuICAgIG9uZTogXCJhYm91dCAxIGhvdXJcIixcbiAgICBvdGhlcjogXCJhYm91dCB7e2NvdW50fX0gaG91cnNcIixcbiAgfSxcblxuICB4SG91cnM6IHtcbiAgICBvbmU6IFwiMSBob3VyXCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19IGhvdXJzXCIsXG4gIH0sXG5cbiAgeERheXM6IHtcbiAgICBvbmU6IFwiMSBkYXlcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gZGF5c1wiLFxuICB9LFxuXG4gIGFib3V0WFdlZWtzOiB7XG4gICAgb25lOiBcImFib3V0IDEgd2Vla1wiLFxuICAgIG90aGVyOiBcImFib3V0IHt7Y291bnR9fSB3ZWVrc1wiLFxuICB9LFxuXG4gIHhXZWVrczoge1xuICAgIG9uZTogXCIxIHdlZWtcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gd2Vla3NcIixcbiAgfSxcblxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6IFwiYWJvdXQgMSBtb250aFwiLFxuICAgIG90aGVyOiBcImFib3V0IHt7Y291bnR9fSBtb250aHNcIixcbiAgfSxcblxuICB4TW9udGhzOiB7XG4gICAgb25lOiBcIjEgbW9udGhcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gbW9udGhzXCIsXG4gIH0sXG5cbiAgYWJvdXRYWWVhcnM6IHtcbiAgICBvbmU6IFwiYWJvdXQgMSB5ZWFyXCIsXG4gICAgb3RoZXI6IFwiYWJvdXQge3tjb3VudH19IHllYXJzXCIsXG4gIH0sXG5cbiAgeFllYXJzOiB7XG4gICAgb25lOiBcIjEgeWVhclwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSB5ZWFyc1wiLFxuICB9LFxuXG4gIG92ZXJYWWVhcnM6IHtcbiAgICBvbmU6IFwib3ZlciAxIHllYXJcIixcbiAgICBvdGhlcjogXCJvdmVyIHt7Y291bnR9fSB5ZWFyc1wiLFxuICB9LFxuXG4gIGFsbW9zdFhZZWFyczoge1xuICAgIG9uZTogXCJhbG1vc3QgMSB5ZWFyXCIsXG4gICAgb3RoZXI6IFwiYWxtb3N0IHt7Y291bnR9fSB5ZWFyc1wiLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdERpc3RhbmNlID0gKHRva2VuLCBjb3VudCwgb3B0aW9ucykgPT4ge1xuICBsZXQgcmVzdWx0O1xuXG4gIGNvbnN0IHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWU7XG4gIH0gZWxzZSBpZiAoY291bnQgPT09IDEpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm9uZTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm90aGVyLnJlcGxhY2UoXCJ7e2NvdW50fX1cIiwgY291bnQudG9TdHJpbmcoKSk7XG4gIH1cblxuICBpZiAob3B0aW9ucz8uYWRkU3VmZml4KSB7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyaXNvbiAmJiBvcHRpb25zLmNvbXBhcmlzb24gPiAwKSB7XG4gICAgICByZXR1cm4gXCJpbiBcIiArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArIFwiIGFnb1wiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykge1xuICByZXR1cm4gKG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIC8vIFRPRE86IFJlbW92ZSBTdHJpbmcoKVxuICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgIGNvbnN0IGZvcm1hdCA9IGFyZ3MuZm9ybWF0c1t3aWR0aF0gfHwgYXJncy5mb3JtYXRzW2FyZ3MuZGVmYXVsdFdpZHRoXTtcbiAgICByZXR1cm4gZm9ybWF0O1xuICB9O1xufVxuIiwKICAgICJpbXBvcnQgeyBidWlsZEZvcm1hdExvbmdGbiB9IGZyb20gXCIuLi8uLi9fbGliL2J1aWxkRm9ybWF0TG9uZ0ZuLmpzXCI7XG5cbmNvbnN0IGRhdGVGb3JtYXRzID0ge1xuICBmdWxsOiBcIkVFRUUsIE1NTU0gZG8sIHlcIixcbiAgbG9uZzogXCJNTU1NIGRvLCB5XCIsXG4gIG1lZGl1bTogXCJNTU0gZCwgeVwiLFxuICBzaG9ydDogXCJNTS9kZC95eXl5XCIsXG59O1xuXG5jb25zdCB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJoOm1tOnNzIGEgenp6elwiLFxuICBsb25nOiBcImg6bW06c3MgYSB6XCIsXG4gIG1lZGl1bTogXCJoOm1tOnNzIGFcIixcbiAgc2hvcnQ6IFwiaDptbSBhXCIsXG59O1xuXG5jb25zdCBkYXRlVGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBsb25nOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbWVkaXVtOiBcInt7ZGF0ZX19LCB7e3RpbWV9fVwiLFxuICBzaG9ydDogXCJ7e2RhdGV9fSwge3t0aW1lfX1cIixcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRMb25nID0ge1xuICBkYXRlOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiBcImZ1bGxcIixcbiAgfSksXG5cbiAgdGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IHRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJmdWxsXCIsXG4gIH0pLFxuXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJmdWxsXCIsXG4gIH0pLFxufTtcbiIsCiAgICAiY29uc3QgZm9ybWF0UmVsYXRpdmVMb2NhbGUgPSB7XG4gIGxhc3RXZWVrOiBcIidsYXN0JyBlZWVlICdhdCcgcFwiLFxuICB5ZXN0ZXJkYXk6IFwiJ3llc3RlcmRheSBhdCcgcFwiLFxuICB0b2RheTogXCIndG9kYXkgYXQnIHBcIixcbiAgdG9tb3Jyb3c6IFwiJ3RvbW9ycm93IGF0JyBwXCIsXG4gIG5leHRXZWVrOiBcImVlZWUgJ2F0JyBwXCIsXG4gIG90aGVyOiBcIlBcIixcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRSZWxhdGl2ZSA9ICh0b2tlbiwgX2RhdGUsIF9iYXNlRGF0ZSwgX29wdGlvbnMpID0+XG4gIGZvcm1hdFJlbGF0aXZlTG9jYWxlW3Rva2VuXTtcbiIsCiAgICAiLyoqXG4gKiBUaGUgbG9jYWxpemUgZnVuY3Rpb24gYXJndW1lbnQgY2FsbGJhY2sgd2hpY2ggYWxsb3dzIHRvIGNvbnZlcnQgcmF3IHZhbHVlIHRvXG4gKiB0aGUgYWN0dWFsIHR5cGUuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIHZhbHVlXG4gKi9cblxuLyoqXG4gKiBUaGUgbWFwIG9mIGxvY2FsaXplZCB2YWx1ZXMgZm9yIGVhY2ggd2lkdGguXG4gKi9cblxuLyoqXG4gKiBUaGUgaW5kZXggdHlwZSBvZiB0aGUgbG9jYWxlIHVuaXQgdmFsdWUuIEl0IHR5cGVzIGNvbnZlcnNpb24gb2YgdW5pdHMgb2ZcbiAqIHZhbHVlcyB0aGF0IGRvbid0IHN0YXJ0IGF0IDAgKGkuZS4gcXVhcnRlcnMpLlxuICovXG5cbi8qKlxuICogQ29udmVydHMgdGhlIHVuaXQgdmFsdWUgdG8gdGhlIHR1cGxlIG9mIHZhbHVlcy5cbiAqL1xuXG4vKipcbiAqIFRoZSB0dXBsZSBvZiBsb2NhbGl6ZWQgZXJhIHZhbHVlcy4gVGhlIGZpcnN0IGVsZW1lbnQgcmVwcmVzZW50cyBCQyxcbiAqIHRoZSBzZWNvbmQgZWxlbWVudCByZXByZXNlbnRzIEFELlxuICovXG5cbi8qKlxuICogVGhlIHR1cGxlIG9mIGxvY2FsaXplZCBxdWFydGVyIHZhbHVlcy4gVGhlIGZpcnN0IGVsZW1lbnQgcmVwcmVzZW50cyBRMS5cbiAqL1xuXG4vKipcbiAqIFRoZSB0dXBsZSBvZiBsb2NhbGl6ZWQgZGF5IHZhbHVlcy4gVGhlIGZpcnN0IGVsZW1lbnQgcmVwcmVzZW50cyBTdW5kYXkuXG4gKi9cblxuLyoqXG4gKiBUaGUgdHVwbGUgb2YgbG9jYWxpemVkIG1vbnRoIHZhbHVlcy4gVGhlIGZpcnN0IGVsZW1lbnQgcmVwcmVzZW50cyBKYW51YXJ5LlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZExvY2FsaXplRm4oYXJncykge1xuICByZXR1cm4gKHZhbHVlLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IG9wdGlvbnM/LmNvbnRleHQgPyBTdHJpbmcob3B0aW9ucy5jb250ZXh0KSA6IFwic3RhbmRhbG9uZVwiO1xuXG4gICAgbGV0IHZhbHVlc0FycmF5O1xuICAgIGlmIChjb250ZXh0ID09PSBcImZvcm1hdHRpbmdcIiAmJiBhcmdzLmZvcm1hdHRpbmdWYWx1ZXMpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdEZvcm1hdHRpbmdXaWR0aCB8fCBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucz8ud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBkZWZhdWx0V2lkdGg7XG5cbiAgICAgIHZhbHVlc0FycmF5ID1cbiAgICAgICAgYXJncy5mb3JtYXR0aW5nVmFsdWVzW3dpZHRoXSB8fCBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0V2lkdGg7XG4gICAgICBjb25zdCB3aWR0aCA9IG9wdGlvbnM/LndpZHRoID8gU3RyaW5nKG9wdGlvbnMud2lkdGgpIDogYXJncy5kZWZhdWx0V2lkdGg7XG5cbiAgICAgIHZhbHVlc0FycmF5ID0gYXJncy52YWx1ZXNbd2lkdGhdIHx8IGFyZ3MudmFsdWVzW2RlZmF1bHRXaWR0aF07XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gYXJncy5hcmd1bWVudENhbGxiYWNrID8gYXJncy5hcmd1bWVudENhbGxiYWNrKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIEZvciBzb21lIHJlYXNvbiBUeXBlU2NyaXB0IGp1c3QgZG9uJ3Qgd2FudCB0byBtYXRjaCBpdCwgbm8gbWF0dGVyIGhvdyBoYXJkIHdlIHRyeS4gSSBjaGFsbGVuZ2UgeW91IHRvIHRyeSB0byByZW1vdmUgaXQhXG4gICAgcmV0dXJuIHZhbHVlc0FycmF5W2luZGV4XTtcbiAgfTtcbn1cbiIsCiAgICAiaW1wb3J0IHsgYnVpbGRMb2NhbGl6ZUZuIH0gZnJvbSBcIi4uLy4uL19saWIvYnVpbGRMb2NhbGl6ZUZuLmpzXCI7XG5cbmNvbnN0IGVyYVZhbHVlcyA9IHtcbiAgbmFycm93OiBbXCJCXCIsIFwiQVwiXSxcbiAgYWJicmV2aWF0ZWQ6IFtcIkJDXCIsIFwiQURcIl0sXG4gIHdpZGU6IFtcIkJlZm9yZSBDaHJpc3RcIiwgXCJBbm5vIERvbWluaVwiXSxcbn07XG5cbmNvbnN0IHF1YXJ0ZXJWYWx1ZXMgPSB7XG4gIG5hcnJvdzogW1wiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiXSxcbiAgYWJicmV2aWF0ZWQ6IFtcIlExXCIsIFwiUTJcIiwgXCJRM1wiLCBcIlE0XCJdLFxuICB3aWRlOiBbXCIxc3QgcXVhcnRlclwiLCBcIjJuZCBxdWFydGVyXCIsIFwiM3JkIHF1YXJ0ZXJcIiwgXCI0dGggcXVhcnRlclwiXSxcbn07XG5cbi8vIE5vdGU6IGluIEVuZ2xpc2gsIHRoZSBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrIGFuZCBtb250aHMgYXJlIGNhcGl0YWxpemVkLlxuLy8gSWYgeW91IGFyZSBtYWtpbmcgYSBuZXcgbG9jYWxlIGJhc2VkIG9uIHRoaXMgb25lLCBjaGVjayBpZiB0aGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgbGFuZ3VhZ2UgeW91J3JlIHdvcmtpbmcgb24uXG4vLyBHZW5lcmFsbHksIGZvcm1hdHRlZCBkYXRlcyBzaG91bGQgbG9vayBsaWtlIHRoZXkgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBzZW50ZW5jZSxcbi8vIGUuZy4gaW4gU3BhbmlzaCBsYW5ndWFnZSB0aGUgd2Vla2RheXMgYW5kIG1vbnRocyBzaG91bGQgYmUgaW4gdGhlIGxvd2VyY2FzZS5cbmNvbnN0IG1vbnRoVmFsdWVzID0ge1xuICBuYXJyb3c6IFtcIkpcIiwgXCJGXCIsIFwiTVwiLCBcIkFcIiwgXCJNXCIsIFwiSlwiLCBcIkpcIiwgXCJBXCIsIFwiU1wiLCBcIk9cIiwgXCJOXCIsIFwiRFwiXSxcbiAgYWJicmV2aWF0ZWQ6IFtcbiAgICBcIkphblwiLFxuICAgIFwiRmViXCIsXG4gICAgXCJNYXJcIixcbiAgICBcIkFwclwiLFxuICAgIFwiTWF5XCIsXG4gICAgXCJKdW5cIixcbiAgICBcIkp1bFwiLFxuICAgIFwiQXVnXCIsXG4gICAgXCJTZXBcIixcbiAgICBcIk9jdFwiLFxuICAgIFwiTm92XCIsXG4gICAgXCJEZWNcIixcbiAgXSxcblxuICB3aWRlOiBbXG4gICAgXCJKYW51YXJ5XCIsXG4gICAgXCJGZWJydWFyeVwiLFxuICAgIFwiTWFyY2hcIixcbiAgICBcIkFwcmlsXCIsXG4gICAgXCJNYXlcIixcbiAgICBcIkp1bmVcIixcbiAgICBcIkp1bHlcIixcbiAgICBcIkF1Z3VzdFwiLFxuICAgIFwiU2VwdGVtYmVyXCIsXG4gICAgXCJPY3RvYmVyXCIsXG4gICAgXCJOb3ZlbWJlclwiLFxuICAgIFwiRGVjZW1iZXJcIixcbiAgXSxcbn07XG5cbmNvbnN0IGRheVZhbHVlcyA9IHtcbiAgbmFycm93OiBbXCJTXCIsIFwiTVwiLCBcIlRcIiwgXCJXXCIsIFwiVFwiLCBcIkZcIiwgXCJTXCJdLFxuICBzaG9ydDogW1wiU3VcIiwgXCJNb1wiLCBcIlR1XCIsIFwiV2VcIiwgXCJUaFwiLCBcIkZyXCIsIFwiU2FcIl0sXG4gIGFiYnJldmlhdGVkOiBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl0sXG4gIHdpZGU6IFtcbiAgICBcIlN1bmRheVwiLFxuICAgIFwiTW9uZGF5XCIsXG4gICAgXCJUdWVzZGF5XCIsXG4gICAgXCJXZWRuZXNkYXlcIixcbiAgICBcIlRodXJzZGF5XCIsXG4gICAgXCJGcmlkYXlcIixcbiAgICBcIlNhdHVyZGF5XCIsXG4gIF0sXG59O1xuXG5jb25zdCBkYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiBcImFcIixcbiAgICBwbTogXCJwXCIsXG4gICAgbWlkbmlnaHQ6IFwibWlcIixcbiAgICBub29uOiBcIm5cIixcbiAgICBtb3JuaW5nOiBcIm1vcm5pbmdcIixcbiAgICBhZnRlcm5vb246IFwiYWZ0ZXJub29uXCIsXG4gICAgZXZlbmluZzogXCJldmVuaW5nXCIsXG4gICAgbmlnaHQ6IFwibmlnaHRcIixcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogXCJBTVwiLFxuICAgIHBtOiBcIlBNXCIsXG4gICAgbWlkbmlnaHQ6IFwibWlkbmlnaHRcIixcbiAgICBub29uOiBcIm5vb25cIixcbiAgICBtb3JuaW5nOiBcIm1vcm5pbmdcIixcbiAgICBhZnRlcm5vb246IFwiYWZ0ZXJub29uXCIsXG4gICAgZXZlbmluZzogXCJldmVuaW5nXCIsXG4gICAgbmlnaHQ6IFwibmlnaHRcIixcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiBcImEubS5cIixcbiAgICBwbTogXCJwLm0uXCIsXG4gICAgbWlkbmlnaHQ6IFwibWlkbmlnaHRcIixcbiAgICBub29uOiBcIm5vb25cIixcbiAgICBtb3JuaW5nOiBcIm1vcm5pbmdcIixcbiAgICBhZnRlcm5vb246IFwiYWZ0ZXJub29uXCIsXG4gICAgZXZlbmluZzogXCJldmVuaW5nXCIsXG4gICAgbmlnaHQ6IFwibmlnaHRcIixcbiAgfSxcbn07XG5cbmNvbnN0IGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMgPSB7XG4gIG5hcnJvdzoge1xuICAgIGFtOiBcImFcIixcbiAgICBwbTogXCJwXCIsXG4gICAgbWlkbmlnaHQ6IFwibWlcIixcbiAgICBub29uOiBcIm5cIixcbiAgICBtb3JuaW5nOiBcImluIHRoZSBtb3JuaW5nXCIsXG4gICAgYWZ0ZXJub29uOiBcImluIHRoZSBhZnRlcm5vb25cIixcbiAgICBldmVuaW5nOiBcImluIHRoZSBldmVuaW5nXCIsXG4gICAgbmlnaHQ6IFwiYXQgbmlnaHRcIixcbiAgfSxcbiAgYWJicmV2aWF0ZWQ6IHtcbiAgICBhbTogXCJBTVwiLFxuICAgIHBtOiBcIlBNXCIsXG4gICAgbWlkbmlnaHQ6IFwibWlkbmlnaHRcIixcbiAgICBub29uOiBcIm5vb25cIixcbiAgICBtb3JuaW5nOiBcImluIHRoZSBtb3JuaW5nXCIsXG4gICAgYWZ0ZXJub29uOiBcImluIHRoZSBhZnRlcm5vb25cIixcbiAgICBldmVuaW5nOiBcImluIHRoZSBldmVuaW5nXCIsXG4gICAgbmlnaHQ6IFwiYXQgbmlnaHRcIixcbiAgfSxcbiAgd2lkZToge1xuICAgIGFtOiBcImEubS5cIixcbiAgICBwbTogXCJwLm0uXCIsXG4gICAgbWlkbmlnaHQ6IFwibWlkbmlnaHRcIixcbiAgICBub29uOiBcIm5vb25cIixcbiAgICBtb3JuaW5nOiBcImluIHRoZSBtb3JuaW5nXCIsXG4gICAgYWZ0ZXJub29uOiBcImluIHRoZSBhZnRlcm5vb25cIixcbiAgICBldmVuaW5nOiBcImluIHRoZSBldmVuaW5nXCIsXG4gICAgbmlnaHQ6IFwiYXQgbmlnaHRcIixcbiAgfSxcbn07XG5cbmNvbnN0IG9yZGluYWxOdW1iZXIgPSAoZGlydHlOdW1iZXIsIF9vcHRpb25zKSA9PiB7XG4gIGNvbnN0IG51bWJlciA9IE51bWJlcihkaXJ0eU51bWJlcik7XG5cbiAgLy8gSWYgb3JkaW5hbCBudW1iZXJzIGRlcGVuZCBvbiBjb250ZXh0LCBmb3IgZXhhbXBsZSxcbiAgLy8gaWYgdGhleSBhcmUgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgZ3JhbW1hdGljYWwgZ2VuZGVycyxcbiAgLy8gdXNlIGBvcHRpb25zLnVuaXRgLlxuICAvL1xuICAvLyBgdW5pdGAgY2FuIGJlICd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXRlJywgJ2RheU9mWWVhcicsXG4gIC8vICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJy5cblxuICBjb25zdCByZW0xMDAgPSBudW1iZXIgJSAxMDA7XG4gIGlmIChyZW0xMDAgPiAyMCB8fCByZW0xMDAgPCAxMCkge1xuICAgIHN3aXRjaCAocmVtMTAwICUgMTApIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIG51bWJlciArIFwic3RcIjtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG51bWJlciArIFwibmRcIjtcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIG51bWJlciArIFwicmRcIjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bWJlciArIFwidGhcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBsb2NhbGl6ZSA9IHtcbiAgb3JkaW5hbE51bWJlcixcblxuICBlcmE6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBlcmFWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiBcIndpZGVcIixcbiAgfSksXG5cbiAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiBcIndpZGVcIixcbiAgICBhcmd1bWVudENhbGxiYWNrOiAocXVhcnRlcikgPT4gcXVhcnRlciAtIDEsXG4gIH0pLFxuXG4gIG1vbnRoOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogbW9udGhWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiBcIndpZGVcIixcbiAgfSksXG5cbiAgZGF5OiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZGF5VmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gIH0pLFxuXG4gIGRheVBlcmlvZDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVBlcmlvZFZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiLFxuICAgIGZvcm1hdHRpbmdWYWx1ZXM6IGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdEZvcm1hdHRpbmdXaWR0aDogXCJ3aWRlXCIsXG4gIH0pLFxufTtcbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hGbihhcmdzKSB7XG4gIHJldHVybiAoc3RyaW5nLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCB3aWR0aCA9IG9wdGlvbnMud2lkdGg7XG5cbiAgICBjb25zdCBtYXRjaFBhdHRlcm4gPVxuICAgICAgKHdpZHRoICYmIGFyZ3MubWF0Y2hQYXR0ZXJuc1t3aWR0aF0pIHx8XG4gICAgICBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07XG4gICAgY29uc3QgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2gobWF0Y2hQYXR0ZXJuKTtcblxuICAgIGlmICghbWF0Y2hSZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG5cbiAgICBjb25zdCBwYXJzZVBhdHRlcm5zID1cbiAgICAgICh3aWR0aCAmJiBhcmdzLnBhcnNlUGF0dGVybnNbd2lkdGhdKSB8fFxuICAgICAgYXJncy5wYXJzZVBhdHRlcm5zW2FyZ3MuZGVmYXVsdFBhcnNlV2lkdGhdO1xuXG4gICAgY29uc3Qga2V5ID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKVxuICAgICAgPyBmaW5kSW5kZXgocGFyc2VQYXR0ZXJucywgKHBhdHRlcm4pID0+IHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKSlcbiAgICAgIDogLy8gW1RPRE9dIC0tIEkgY2hhbGxlbmdlIHlvdSB0byBmaXggdGhlIHR5cGVcbiAgICAgICAgZmluZEtleShwYXJzZVBhdHRlcm5zLCAocGF0dGVybikgPT4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpKTtcblxuICAgIGxldCB2YWx1ZTtcblxuICAgIHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleSkgOiBrZXk7XG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2tcbiAgICAgID8gLy8gW1RPRE9dIC0tIEkgY2hhbGxlbmdlIHlvdSB0byBmaXggdGhlIHR5cGVcbiAgICAgICAgb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKVxuICAgICAgOiB2YWx1ZTtcblxuICAgIGNvbnN0IHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuXG4gICAgcmV0dXJuIHsgdmFsdWUsIHJlc3QgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmluZEtleShvYmplY3QsIHByZWRpY2F0ZSkge1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmXG4gICAgICBwcmVkaWNhdGUob2JqZWN0W2tleV0pXG4gICAgKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSkge1xuICBmb3IgKGxldCBrZXkgPSAwOyBrZXkgPCBhcnJheS5sZW5ndGg7IGtleSsrKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtrZXldKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiIsCiAgICAiZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTWF0Y2hQYXR0ZXJuRm4oYXJncykge1xuICByZXR1cm4gKHN0cmluZywgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgY29uc3QgbWF0Y2hSZXN1bHQgPSBzdHJpbmcubWF0Y2goYXJncy5tYXRjaFBhdHRlcm4pO1xuICAgIGlmICghbWF0Y2hSZXN1bHQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcblxuICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MucGFyc2VQYXR0ZXJuKTtcbiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICBsZXQgdmFsdWUgPSBhcmdzLnZhbHVlQ2FsbGJhY2tcbiAgICAgID8gYXJncy52YWx1ZUNhbGxiYWNrKHBhcnNlUmVzdWx0WzBdKVxuICAgICAgOiBwYXJzZVJlc3VsdFswXTtcblxuICAgIC8vIFtUT0RPXSBJIGNoYWxsZW5nZSB5b3UgdG8gZml4IHRoZSB0eXBlXG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG5cbiAgICBjb25zdCByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcblxuICAgIHJldHVybiB7IHZhbHVlLCByZXN0IH07XG4gIH07XG59XG4iLAogICAgImltcG9ydCB7IGJ1aWxkTWF0Y2hGbiB9IGZyb20gXCIuLi8uLi9fbGliL2J1aWxkTWF0Y2hGbi5qc1wiO1xuaW1wb3J0IHsgYnVpbGRNYXRjaFBhdHRlcm5GbiB9IGZyb20gXCIuLi8uLi9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4uanNcIjtcblxuY29uc3QgbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9eKFxcZCspKHRofHN0fG5kfHJkKT8vaTtcbmNvbnN0IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xuXG5jb25zdCBtYXRjaEVyYVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGJ8YSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGJcXC4/XFxzP2NcXC4/fGJcXC4/XFxzP2NcXC4/XFxzP2VcXC4/fGFcXC4/XFxzP2RcXC4/fGNcXC4/XFxzP2VcXC4/KS9pLFxuICB3aWRlOiAvXihiZWZvcmUgY2hyaXN0fGJlZm9yZSBjb21tb24gZXJhfGFubm8gZG9taW5pfGNvbW1vbiBlcmEpL2ksXG59O1xuY29uc3QgcGFyc2VFcmFQYXR0ZXJucyA9IHtcbiAgYW55OiBbL15iL2ksIC9eKGF8YykvaV0sXG59O1xuXG5jb25zdCBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pLFxufTtcbmNvbnN0IHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXSxcbn07XG5cbmNvbnN0IG1hdGNoTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltqZm1hc29uZF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKS9pLFxuICB3aWRlOiAvXihqYW51YXJ5fGZlYnJ1YXJ5fG1hcmNofGFwcmlsfG1heXxqdW5lfGp1bHl8YXVndXN0fHNlcHRlbWJlcnxvY3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pLFxufTtcbmNvbnN0IHBhcnNlTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbXG4gICAgL15qL2ksXG4gICAgL15mL2ksXG4gICAgL15tL2ksXG4gICAgL15hL2ksXG4gICAgL15tL2ksXG4gICAgL15qL2ksXG4gICAgL15qL2ksXG4gICAgL15hL2ksXG4gICAgL15zL2ksXG4gICAgL15vL2ksXG4gICAgL15uL2ksXG4gICAgL15kL2ksXG4gIF0sXG5cbiAgYW55OiBbXG4gICAgL15qYS9pLFxuICAgIC9eZi9pLFxuICAgIC9ebWFyL2ksXG4gICAgL15hcC9pLFxuICAgIC9ebWF5L2ksXG4gICAgL15qdW4vaSxcbiAgICAvXmp1bC9pLFxuICAgIC9eYXUvaSxcbiAgICAvXnMvaSxcbiAgICAvXm8vaSxcbiAgICAvXm4vaSxcbiAgICAvXmQvaSxcbiAgXSxcbn07XG5cbmNvbnN0IG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2ksXG59O1xuY29uc3QgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldLFxufTtcblxuY29uc3QgbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihhfHB8bWl8bnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2ksXG4gIGFueTogL14oW2FwXVxcLj9cXHM/bVxcLj98bWlkbmlnaHR8bm9vbnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2ksXG59O1xuY29uc3QgcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgYW55OiB7XG4gICAgYW06IC9eYS9pLFxuICAgIHBtOiAvXnAvaSxcbiAgICBtaWRuaWdodDogL15taS9pLFxuICAgIG5vb246IC9ebm8vaSxcbiAgICBtb3JuaW5nOiAvbW9ybmluZy9pLFxuICAgIGFmdGVybm9vbjogL2FmdGVybm9vbi9pLFxuICAgIGV2ZW5pbmc6IC9ldmVuaW5nL2ksXG4gICAgbmlnaHQ6IC9uaWdodC9pLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6ICh2YWx1ZSkgPT4gcGFyc2VJbnQodmFsdWUsIDEwKSxcbiAgfSksXG5cbiAgZXJhOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwid2lkZVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gIH0pLFxuXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwid2lkZVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiBcImFueVwiLFxuICAgIHZhbHVlQ2FsbGJhY2s6IChpbmRleCkgPT4gaW5kZXggKyAxLFxuICB9KSxcblxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwid2lkZVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIixcbiAgfSksXG5cbiAgZGF5OiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwid2lkZVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gIH0pLFxuXG4gIGRheVBlcmlvZDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcImFueVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gIH0pLFxufTtcbiIsCiAgICAiaW1wb3J0IHsgZm9ybWF0RGlzdGFuY2UgfSBmcm9tIFwiLi9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlLmpzXCI7XG5pbXBvcnQgeyBmb3JtYXRMb25nIH0gZnJvbSBcIi4vZW4tVVMvX2xpYi9mb3JtYXRMb25nLmpzXCI7XG5pbXBvcnQgeyBmb3JtYXRSZWxhdGl2ZSB9IGZyb20gXCIuL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUuanNcIjtcbmltcG9ydCB7IGxvY2FsaXplIH0gZnJvbSBcIi4vZW4tVVMvX2xpYi9sb2NhbGl6ZS5qc1wiO1xuaW1wb3J0IHsgbWF0Y2ggfSBmcm9tIFwiLi9lbi1VUy9fbGliL21hdGNoLmpzXCI7XG5cbi8qKlxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF0oaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnApXG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3NdKGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3MpXG4gKi9cbmV4cG9ydCBjb25zdCBlblVTID0ge1xuICBjb2RlOiBcImVuLVVTXCIsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxLFxuICB9LFxufTtcblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBlblVTO1xuIiwKICAgICJpbXBvcnQgeyBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMgfSBmcm9tIFwiLi9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMuanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZZZWFyIH0gZnJvbSBcIi4vc3RhcnRPZlllYXIuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0RGF5T2ZZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZ2V0RGF5T2ZZZWFyXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgZGF5IG9mIHRoZSB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBkYXkgb2YgdGhlIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXkgb2YgeWVhclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCBkYXkgb2YgdGhlIHllYXIgaXMgMiBKdWx5IDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBnZXREYXlPZlllYXIobmV3IERhdGUoMjAxNCwgNiwgMikpXG4gKiAvLz0+IDE4M1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5T2ZZZWFyKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKF9kYXRlLCBzdGFydE9mWWVhcihfZGF0ZSkpO1xuICBjb25zdCBkYXlPZlllYXIgPSBkaWZmICsgMTtcbiAgcmV0dXJuIGRheU9mWWVhcjtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXREYXlPZlllYXI7XG4iLAogICAgImltcG9ydCB7IG1pbGxpc2Vjb25kc0luV2VlayB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZklTT1dlZWsgfSBmcm9tIFwiLi9zdGFydE9mSVNPV2Vlay5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZklTT1dlZWtZZWFyIH0gZnJvbSBcIi4vc3RhcnRPZklTT1dlZWtZZWFyLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGdldElTT1dlZWt9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBnZXRJU09XZWVrXG4gKiBAY2F0ZWdvcnkgSVNPIFdlZWsgSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IHRoZSBJU08gd2VlayBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgSVNPIHdlZWsgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogSVNPIHdlZWstbnVtYmVyaW5nIHllYXI6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGdpdmVuIGRhdGVcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgSVNPIHdlZWtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggd2VlayBvZiB0aGUgSVNPLXdlZWsgbnVtYmVyaW5nIHllYXIgaXMgMiBKYW51YXJ5IDIwMDU/XG4gKiBjb25zdCByZXN1bHQgPSBnZXRJU09XZWVrKG5ldyBEYXRlKDIwMDUsIDAsIDIpKVxuICogLy89PiA1M1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SVNPV2VlayhkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgZGlmZiA9ICtzdGFydE9mSVNPV2VlayhfZGF0ZSkgLSArc3RhcnRPZklTT1dlZWtZZWFyKF9kYXRlKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIHdlZWtzIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgYmVjYXVzZSB0aGUgbnVtYmVyIG9mXG4gIC8vIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50IChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mXG4gIC8vIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdCkuXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBtaWxsaXNlY29uZHNJbldlZWspICsgMTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXRJU09XZWVrO1xuIiwKICAgICJpbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL19saWIvZGVmYXVsdE9wdGlvbnMuanNcIjtcbmltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZXZWVrLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGdldFdlZWtZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZ2V0V2Vla1llYXJcbiAqIEBjYXRlZ29yeSBXZWVrLU51bWJlcmluZyBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSBleGFjdCBjYWxjdWxhdGlvbiBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2ZcbiAqIGBvcHRpb25zLndlZWtTdGFydHNPbmAgKHdoaWNoIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrKVxuICogYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKHdoaWNoIGlzIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXMgYWx3YXlzIGluXG4gKiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhcilcbiAqXG4gKiBXZWVrIG51bWJlcmluZzogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2VlayNUaGVfSVNPX3dlZWtfZGF0ZV9zeXN0ZW1cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKlxuICogQHJldHVybnMgVGhlIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggd2VlayBudW1iZXJpbmcgeWVhciBpcyAyNiBEZWNlbWJlciAyMDA0IHdpdGggdGhlIGRlZmF1bHQgc2V0dGluZ3M/XG4gKiBjb25zdCByZXN1bHQgPSBnZXRXZWVrWWVhcihuZXcgRGF0ZSgyMDA0LCAxMSwgMjYpKVxuICogLy89PiAyMDA1XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIHdlZWsgbnVtYmVyaW5nIHllYXIgaXMgMjYgRGVjZW1iZXIgMjAwNCBpZiB3ZWVrIHN0YXJ0cyBvbiBTYXR1cmRheT9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldFdlZWtZZWFyKG5ldyBEYXRlKDIwMDQsIDExLCAyNiksIHsgd2Vla1N0YXJ0c09uOiA2IH0pXG4gKiAvLz0+IDIwMDRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggd2VlayBudW1iZXJpbmcgeWVhciBpcyAyNiBEZWNlbWJlciAyMDA0IGlmIHRoZSBmaXJzdCB3ZWVrIGNvbnRhaW5zIDQgSmFudWFyeT9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldFdlZWtZZWFyKG5ldyBEYXRlKDIwMDQsIDExLCAyNiksIHsgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiA0IH0pXG4gKiAvLz0+IDIwMDRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pO1xuICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTtcblxuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9XG4gICAgb3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIDE7XG5cbiAgY29uc3QgZmlyc3RXZWVrT2ZOZXh0WWVhciA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIGNvbnN0IHN0YXJ0T2ZOZXh0WWVhciA9IHN0YXJ0T2ZXZWVrKGZpcnN0V2Vla09mTmV4dFllYXIsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IGZpcnN0V2Vla09mVGhpc1llYXIgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApO1xuICBmaXJzdFdlZWtPZlRoaXNZZWFyLnNldEZ1bGxZZWFyKHllYXIsIDAsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIGNvbnN0IHN0YXJ0T2ZUaGlzWWVhciA9IHN0YXJ0T2ZXZWVrKGZpcnN0V2Vla09mVGhpc1llYXIsIG9wdGlvbnMpO1xuXG4gIGlmICgrX2RhdGUgPj0gK3N0YXJ0T2ZOZXh0WWVhcikge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmICgrX2RhdGUgPj0gK3N0YXJ0T2ZUaGlzWWVhcikge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldFdlZWtZZWFyO1xuIiwKICAgICJpbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL19saWIvZGVmYXVsdE9wdGlvbnMuanNcIjtcbmltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLmpzXCI7XG5pbXBvcnQgeyBnZXRXZWVrWWVhciB9IGZyb20gXCIuL2dldFdlZWtZZWFyLmpzXCI7XG5pbXBvcnQgeyBzdGFydE9mV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZXZWVrLmpzXCI7XG5cbi8qKlxuICogVGhlIHtAbGluayBzdGFydE9mV2Vla1llYXJ9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBzdGFydE9mV2Vla1llYXJcbiAqIEBjYXRlZ29yeSBXZWVrLU51bWJlcmluZyBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyLlxuICogVGhlIGV4YWN0IGNhbGN1bGF0aW9uIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZlxuICogYG9wdGlvbnMud2Vla1N0YXJ0c09uYCAod2hpY2ggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWspXG4gKiBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAod2hpY2ggaXMgdGhlIGRheSBvZiBKYW51YXJ5LCB3aGljaCBpcyBhbHdheXMgaW5cbiAqIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB3ZWVrLW51bWJlcmluZyB5ZWFyKVxuICpcbiAqIFdlZWsgbnVtYmVyaW5nOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWVrI1RoZV9JU09fd2Vla19kYXRlX3N5c3RlbVxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICogQHR5cGVQYXJhbSBSZXN1bHREYXRlIC0gVGhlIHJlc3VsdCBgRGF0ZWAgdHlwZS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgc3RhcnQgb2YgYSB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhbiBhIHdlZWstbnVtYmVyaW5nIHllYXIgZm9yIDIgSnVseSAyMDA1IHdpdGggZGVmYXVsdCBzZXR0aW5nczpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZXZWVrWWVhcihuZXcgRGF0ZSgyMDA1LCA2LCAyKSlcbiAqIC8vPT4gU3VuIERlYyAyNiAyMDA0IDAwOjAwOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIHdlZWstbnVtYmVyaW5nIHllYXIgZm9yIDIgSnVseSAyMDA1XG4gKiAvLyBpZiBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB3ZWVrXG4gKiAvLyBhbmQgNCBKYW51YXJ5IGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhcjpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZXZWVrWWVhcihuZXcgRGF0ZSgyMDA1LCA2LCAyKSwge1xuICogICB3ZWVrU3RhcnRzT246IDEsXG4gKiAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogNFxuICogfSlcbiAqIC8vPT4gTW9uIEphbiAwMyAyMDA1IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9XG4gICAgb3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIDE7XG5cbiAgY29uc3QgeWVhciA9IGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuICBjb25zdCBmaXJzdFdlZWsgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApO1xuICBmaXJzdFdlZWsuc2V0RnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICBjb25zdCBfZGF0ZSA9IHN0YXJ0T2ZXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mV2Vla1llYXI7XG4iLAogICAgImltcG9ydCB7IG1pbGxpc2Vjb25kc0luV2VlayB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZldlZWsgfSBmcm9tIFwiLi9zdGFydE9mV2Vlay5qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZldlZWtZZWFyIH0gZnJvbSBcIi4vc3RhcnRPZldlZWtZZWFyLmpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGdldFdlZWt9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBnZXRXZWVrXG4gKiBAY2F0ZWdvcnkgV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIGxvY2FsIHdlZWsgaW5kZXggb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBHZXQgdGhlIGxvY2FsIHdlZWsgaW5kZXggb2YgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgZXhhY3QgY2FsY3VsYXRpb24gZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mXG4gKiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gICh3aGljaCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlaylcbiAqIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgICh3aGljaCBpcyB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzIGFsd2F5cyBpblxuICogdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHdlZWstbnVtYmVyaW5nIHllYXIpXG4gKlxuICogV2VlayBudW1iZXJpbmc6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlZWsjVGhlX0lTT193ZWVrX2RhdGVfc3lzdGVtXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHdlZWtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggd2VlayBvZiB0aGUgbG9jYWwgd2VlayBudW1iZXJpbmcgeWVhciBpcyAyIEphbnVhcnkgMjAwNSB3aXRoIGRlZmF1bHQgb3B0aW9ucz9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldFdlZWsobmV3IERhdGUoMjAwNSwgMCwgMikpXG4gKiAvLz0+IDJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggd2VlayBvZiB0aGUgbG9jYWwgd2VlayBudW1iZXJpbmcgeWVhciBpcyAyIEphbnVhcnkgMjAwNSxcbiAqIC8vIGlmIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLFxuICogLy8gYW5kIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyIGFsd2F5cyBjb250YWlucyA0IEphbnVhcnk/XG4gKiBjb25zdCByZXN1bHQgPSBnZXRXZWVrKG5ldyBEYXRlKDIwMDUsIDAsIDIpLCB7XG4gKiAgIHdlZWtTdGFydHNPbjogMSxcbiAqICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiA0XG4gKiB9KVxuICogLy89PiA1M1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2VlayhkYXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTtcbiAgY29uc3QgZGlmZiA9ICtzdGFydE9mV2VlayhfZGF0ZSwgb3B0aW9ucykgLSArc3RhcnRPZldlZWtZZWFyKF9kYXRlLCBvcHRpb25zKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIHdlZWtzIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgYmVjYXVzZSB0aGUgbnVtYmVyIG9mXG4gIC8vIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50IChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mXG4gIC8vIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdCkuXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBtaWxsaXNlY29uZHNJbldlZWspICsgMTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXRXZWVrO1xuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gYWRkTGVhZGluZ1plcm9zKG51bWJlciwgdGFyZ2V0TGVuZ3RoKSB7XG4gIGNvbnN0IHNpZ24gPSBudW1iZXIgPCAwID8gXCItXCIgOiBcIlwiO1xuICBjb25zdCBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIpLnRvU3RyaW5nKCkucGFkU3RhcnQodGFyZ2V0TGVuZ3RoLCBcIjBcIik7XG4gIHJldHVybiBzaWduICsgb3V0cHV0O1xufVxuIiwKICAgICJpbXBvcnQgeyBhZGRMZWFkaW5nWmVyb3MgfSBmcm9tIFwiLi4vYWRkTGVhZGluZ1plcm9zLmpzXCI7XG5cbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG5cbmV4cG9ydCBjb25zdCBsaWdodEZvcm1hdHRlcnMgPSB7XG4gIC8vIFllYXJcbiAgeShkYXRlLCB0b2tlbikge1xuICAgIC8vIEZyb20gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS0zMS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9Gb3JtYXRfdG9rZW5zXG4gICAgLy8gfCBZZWFyICAgICB8ICAgICB5IHwgeXkgfCAgIHl5eSB8ICB5eXl5IHwgeXl5eXkgfFxuICAgIC8vIHwtLS0tLS0tLS0tfC0tLS0tLS18LS0tLXwtLS0tLS0tfC0tLS0tLS18LS0tLS0tLXxcbiAgICAvLyB8IEFEIDEgICAgIHwgICAgIDEgfCAwMSB8ICAgMDAxIHwgIDAwMDEgfCAwMDAwMSB8XG4gICAgLy8gfCBBRCAxMiAgICB8ICAgIDEyIHwgMTIgfCAgIDAxMiB8ICAwMDEyIHwgMDAwMTIgfFxuICAgIC8vIHwgQUQgMTIzICAgfCAgIDEyMyB8IDIzIHwgICAxMjMgfCAgMDEyMyB8IDAwMTIzIHxcbiAgICAvLyB8IEFEIDEyMzQgIHwgIDEyMzQgfCAzNCB8ICAxMjM0IHwgIDEyMzQgfCAwMTIzNCB8XG4gICAgLy8gfCBBRCAxMjM0NSB8IDEyMzQ1IHwgNDUgfCAxMjM0NSB8IDEyMzQ1IHwgMTIzNDUgfFxuXG4gICAgY29uc3Qgc2lnbmVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIGNvbnN0IHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRva2VuID09PSBcInl5XCIgPyB5ZWFyICUgMTAwIDogeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBNb250aFxuICBNKGRhdGUsIHRva2VuKSB7XG4gICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG4gICAgcmV0dXJuIHRva2VuID09PSBcIk1cIiA/IFN0cmluZyhtb250aCArIDEpIDogYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gIH0sXG5cbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldERhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBBTSBvciBQTVxuICBhKGRhdGUsIHRva2VuKSB7XG4gICAgY29uc3QgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF0ZS5nZXRIb3VycygpIC8gMTIgPj0gMSA/IFwicG1cIiA6IFwiYW1cIjtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJhXCI6XG4gICAgICBjYXNlIFwiYWFcIjpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgY2FzZSBcImFhYVwiOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgICAgY2FzZSBcImFhYWFhXCI6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlIFwiYWFhYVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZSA9PT0gXCJhbVwiID8gXCJhLm0uXCIgOiBcInAubS5cIjtcbiAgICB9XG4gIH0sXG5cbiAgLy8gSG91ciBbMS0xMl1cbiAgaChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRIb3VycygpICUgMTIgfHwgMTIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gSG91ciBbMC0yM11cbiAgSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIE1pbnV0ZVxuICBtKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldE1pbnV0ZXMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBTZWNvbmRcbiAgcyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRTZWNvbmRzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICBjb25zdCBudW1iZXJPZkRpZ2l0cyA9IHRva2VuLmxlbmd0aDtcbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBkYXRlLmdldE1pbGxpc2Vjb25kcygpO1xuICAgIGNvbnN0IGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC50cnVuYyhcbiAgICAgIG1pbGxpc2Vjb25kcyAqIE1hdGgucG93KDEwLCBudW1iZXJPZkRpZ2l0cyAtIDMpLFxuICAgICk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbn07XG4iLAogICAgImltcG9ydCB7IGdldERheU9mWWVhciB9IGZyb20gXCIuLi8uLi9nZXREYXlPZlllYXIuanNcIjtcbmltcG9ydCB7IGdldElTT1dlZWsgfSBmcm9tIFwiLi4vLi4vZ2V0SVNPV2Vlay5qc1wiO1xuaW1wb3J0IHsgZ2V0SVNPV2Vla1llYXIgfSBmcm9tIFwiLi4vLi4vZ2V0SVNPV2Vla1llYXIuanNcIjtcbmltcG9ydCB7IGdldFdlZWsgfSBmcm9tIFwiLi4vLi4vZ2V0V2Vlay5qc1wiO1xuaW1wb3J0IHsgZ2V0V2Vla1llYXIgfSBmcm9tIFwiLi4vLi4vZ2V0V2Vla1llYXIuanNcIjtcblxuaW1wb3J0IHsgYWRkTGVhZGluZ1plcm9zIH0gZnJvbSBcIi4uL2FkZExlYWRpbmdaZXJvcy5qc1wiO1xuaW1wb3J0IHsgbGlnaHRGb3JtYXR0ZXJzIH0gZnJvbSBcIi4vbGlnaHRGb3JtYXR0ZXJzLmpzXCI7XG5cbmNvbnN0IGRheVBlcmlvZEVudW0gPSB7XG4gIGFtOiBcImFtXCIsXG4gIHBtOiBcInBtXCIsXG4gIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gIG5vb246IFwibm9vblwiLFxuICBtb3JuaW5nOiBcIm1vcm5pbmdcIixcbiAgYWZ0ZXJub29uOiBcImFmdGVybm9vblwiLFxuICBldmVuaW5nOiBcImV2ZW5pbmdcIixcbiAgbmlnaHQ6IFwibmlnaHRcIixcbn07XG5cbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG5leHBvcnQgY29uc3QgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBlcmEgPSBkYXRlLmdldEZ1bGxZZWFyKCkgPiAwID8gMSA6IDA7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gQUQsIEJDXG4gICAgICBjYXNlIFwiR1wiOlxuICAgICAgY2FzZSBcIkdHXCI6XG4gICAgICBjYXNlIFwiR0dHXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7IHdpZHRoOiBcImFiYnJldmlhdGVkXCIgfSk7XG4gICAgICAvLyBBLCBCXG4gICAgICBjYXNlIFwiR0dHR0dcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHsgd2lkdGg6IFwibmFycm93XCIgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSBcIkdHR0dcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7IHdpZHRoOiBcIndpZGVcIiB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09IFwieW9cIikge1xuICAgICAgY29uc3Qgc2lnbmVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgICBjb25zdCB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7IHVuaXQ6IFwieWVhclwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG5cbiAgLy8gTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhclxuICBZOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgc2lnbmVkV2Vla1llYXIgPSBnZXRXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIGNvbnN0IHdlZWtZZWFyID0gc2lnbmVkV2Vla1llYXIgPiAwID8gc2lnbmVkV2Vla1llYXIgOiAxIC0gc2lnbmVkV2Vla1llYXI7XG5cbiAgICAvLyBUd28gZGlnaXQgeWVhclxuICAgIGlmICh0b2tlbiA9PT0gXCJZWVwiKSB7XG4gICAgICBjb25zdCB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gXCJZb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrWWVhciwgeyB1bml0OiBcInllYXJcIiB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICBSOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4pIHtcbiAgICBjb25zdCBpc29XZWVrWWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gRXh0ZW5kZWQgeWVhci4gVGhpcyBpcyBhIHNpbmdsZSBudW1iZXIgZGVzaWduYXRpbmcgdGhlIHllYXIgb2YgdGhpcyBjYWxlbmRhciBzeXN0ZW0uXG4gIC8vIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBsb2NhbGl6ZXJzIGFyZSBCLkMuIHllYXJzOlxuICAvLyB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICAvLyB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICAvLyB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICAvLyB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICAvLyB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICAvLyBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gIC8vIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZC5cbiAgdTogZnVuY3Rpb24gKGRhdGUsIHRva2VuKSB7XG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gUXVhcnRlclxuICBROiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlIFwiUVwiOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgXCJRUVwiOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG4gICAgICBjYXNlIFwiUW9cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwgeyB1bml0OiBcInF1YXJ0ZXJcIiB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlIFwiUVFRXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuICAgICAgY2FzZSBcIlFRUVFRXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSBcIlFRUVFcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBTdGFuZC1hbG9uZSBxdWFydGVyXG4gIHE6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldE1vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgXCJxXCI6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgY2FzZSBcInFxXCI6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgXCJxb1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7IHVuaXQ6IFwicXVhcnRlclwiIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgXCJxcXFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlIFwicXFxcXFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlIFwicXFxcVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIE1vbnRoXG4gIE06IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlIFwiTVwiOlxuICAgICAgY2FzZSBcIk1NXCI6XG4gICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuTShkYXRlLCB0b2tlbik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG4gICAgICBjYXNlIFwiTW9cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7IHVuaXQ6IFwibW9udGhcIiB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSBcIk1NTVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuICAgICAgY2FzZSBcIk1NTU1NXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlIFwiTU1NTVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7IHdpZHRoOiBcIndpZGVcIiwgY29udGV4dDogXCJmb3JtYXR0aW5nXCIgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAuLi4sIDEyXG4gICAgICBjYXNlIFwiTFwiOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgXCJMTFwiOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG4gICAgICBjYXNlIFwiTG9cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7IHVuaXQ6IFwibW9udGhcIiB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSBcIkxMTFwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuICAgICAgY2FzZSBcIkxMTExMXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlIFwiTExMTFwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7IHdpZHRoOiBcIndpZGVcIiwgY29udGV4dDogXCJzdGFuZGFsb25lXCIgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIExvY2FsIHdlZWsgb2YgeWVhclxuICB3OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgd2VlayA9IGdldFdlZWsoZGF0ZSwgb3B0aW9ucyk7XG5cbiAgICBpZiAodG9rZW4gPT09IFwid29cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2VlaywgeyB1bml0OiBcIndlZWtcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gSVNPIHdlZWsgb2YgeWVhclxuICBJOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgaXNvV2VlayA9IGdldElTT1dlZWsoZGF0ZSk7XG5cbiAgICBpZiAodG9rZW4gPT09IFwiSW9cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvV2VlaywgeyB1bml0OiBcIndlZWtcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSBcImRvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0RGF0ZSgpLCB7IHVuaXQ6IFwiZGF0ZVwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuZChkYXRlLCB0b2tlbik7XG4gIH0sXG5cbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGRheU9mWWVhciA9IGdldERheU9mWWVhcihkYXRlKTtcblxuICAgIGlmICh0b2tlbiA9PT0gXCJEb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXlPZlllYXIsIHsgdW5pdDogXCJkYXlPZlllYXJcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRheU9mWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBEYXkgb2Ygd2Vla1xuICBFOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgZGF5T2ZXZWVrID0gZGF0ZS5nZXREYXkoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgXCJFXCI6XG4gICAgICBjYXNlIFwiRUVcIjpcbiAgICAgIGNhc2UgXCJFRUVcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgXCJFRUVFRVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlIFwiRUVFRUVFXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwic2hvcnRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlIFwiRUVFRVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgY29uc3QgZGF5T2ZXZWVrID0gZGF0ZS5nZXREYXkoKTtcbiAgICBjb25zdCBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSBcImVcIjpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7XG4gICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlXG4gICAgICBjYXNlIFwiZWVcIjpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgXCJlb1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2VlaywgeyB1bml0OiBcImRheVwiIH0pO1xuICAgICAgY2FzZSBcImVlZVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSBcImVlZWVlXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgXCJlZWVlZWVcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgXCJlZWVlXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpO1xuICAgIGNvbnN0IGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSBcImNjXCI6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgXCJjb1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2VlaywgeyB1bml0OiBcImRheVwiIH0pO1xuICAgICAgY2FzZSBcImNjY1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSBcImNjY2NjXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgXCJjY2NjY2NcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgXCJjY2NjXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgZGF5T2ZXZWVrID0gZGF0ZS5nZXREYXkoKTtcbiAgICBjb25zdCBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgXCJpXCI6XG4gICAgICAgIHJldHVybiBTdHJpbmcoaXNvRGF5T2ZXZWVrKTtcbiAgICAgIC8vIDAyXG4gICAgICBjYXNlIFwiaWlcIjpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29EYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAybmRcbiAgICAgIGNhc2UgXCJpb1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHsgdW5pdDogXCJkYXlcIiB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSBcImlpaVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSBcImlpaWlpXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgXCJpaWlpaWlcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgXCJpaWlpXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICBjb25zdCBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyBcInBtXCIgOiBcImFtXCI7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlIFwiYVwiOlxuICAgICAgY2FzZSBcImFhXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiYWFhXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZVxuICAgICAgICAgIC5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgXCJhYWFhYVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJhYWFhXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIEFNLCBQTSwgbWlkbmlnaHQsIG5vb25cbiAgYjogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIGxldCBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/IFwicG1cIiA6IFwiYW1cIjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlIFwiYlwiOlxuICAgICAgY2FzZSBcImJiXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiYmJiXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZVxuICAgICAgICAgIC5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgXCJiYmJiYlwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJiYmJiXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIGluIHRoZSBtb3JuaW5nLCBpbiB0aGUgYWZ0ZXJub29uLCBpbiB0aGUgZXZlbmluZywgYXQgbmlnaHRcbiAgQjogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIGxldCBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcIkJcIjpcbiAgICAgIGNhc2UgXCJCQlwiOlxuICAgICAgY2FzZSBcIkJCQlwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcIkJCQkJCXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcIkJCQkJcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gSG91ciBbMS0xMl1cbiAgaDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gXCJob1wiKSB7XG4gICAgICBsZXQgaG91cnMgPSBkYXRlLmdldEhvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7IHVuaXQ6IFwiaG91clwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG5cbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gXCJIb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldEhvdXJzKCksIHsgdW5pdDogXCJob3VyXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcblxuICAvLyBIb3VyIFswLTExXVxuICBLOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgaG91cnMgPSBkYXRlLmdldEhvdXJzKCkgJSAxMjtcblxuICAgIGlmICh0b2tlbiA9PT0gXCJLb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3VycywgeyB1bml0OiBcImhvdXJcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBsZXQgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XG4gICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDI0O1xuXG4gICAgaWYgKHRva2VuID09PSBcImtvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7IHVuaXQ6IFwiaG91clwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09IFwibW9cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRNaW51dGVzKCksIHsgdW5pdDogXCJtaW51dGVcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSBcInNvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0U2Vjb25kcygpLCB7IHVuaXQ6IFwic2Vjb25kXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcblxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUzogZnVuY3Rpb24gKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5TKGRhdGUsIHRva2VuKTtcbiAgfSxcblxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSkge1xuICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0ID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gXCJaXCI7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgXCJYXCI6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgXCJYWFhYXCI6XG4gICAgICBjYXNlIFwiWFhcIjogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYWGBcbiAgICAgIGNhc2UgXCJYWFhYWFwiOlxuICAgICAgY2FzZSBcIlhYWFwiOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgXCI6XCIpO1xuICAgIH1cbiAgfSxcblxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSkge1xuICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0ID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgXCJ4XCI6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eGBcbiAgICAgIGNhc2UgXCJ4eHh4XCI6XG4gICAgICBjYXNlIFwieHhcIjogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgXCJ4eHh4eFwiOlxuICAgICAgY2FzZSBcInh4eFwiOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgXCI6XCIpO1xuICAgIH1cbiAgfSxcblxuICAvLyBUaW1lem9uZSAoR01UKVxuICBPOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSkge1xuICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0ID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gU2hvcnRcbiAgICAgIGNhc2UgXCJPXCI6XG4gICAgICBjYXNlIFwiT09cIjpcbiAgICAgIGNhc2UgXCJPT09cIjpcbiAgICAgICAgcmV0dXJuIFwiR01UXCIgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCBcIjpcIik7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlIFwiT09PT1wiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiR01UXCIgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgXCI6XCIpO1xuICAgIH1cbiAgfSxcblxuICAvLyBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0aW9uKVxuICB6OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSkge1xuICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0ID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gU2hvcnRcbiAgICAgIGNhc2UgXCJ6XCI6XG4gICAgICBjYXNlIFwienpcIjpcbiAgICAgIGNhc2UgXCJ6enpcIjpcbiAgICAgICAgcmV0dXJuIFwiR01UXCIgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCBcIjpcIik7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlIFwienp6elwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiR01UXCIgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgXCI6XCIpO1xuICAgIH1cbiAgfSxcblxuICAvLyBTZWNvbmRzIHRpbWVzdGFtcFxuICB0OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSkge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IE1hdGgudHJ1bmMoK2RhdGUgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBNaWxsaXNlY29uZHMgdGltZXN0YW1wXG4gIFQ6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcygrZGF0ZSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lU2hvcnQob2Zmc2V0LCBkZWxpbWl0ZXIgPSBcIlwiKSB7XG4gIGNvbnN0IHNpZ24gPSBvZmZzZXQgPiAwID8gXCItXCIgOiBcIitcIjtcbiAgY29uc3QgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgY29uc3QgaG91cnMgPSBNYXRoLnRydW5jKGFic09mZnNldCAvIDYwKTtcbiAgY29uc3QgbWludXRlcyA9IGFic09mZnNldCAlIDYwO1xuICBpZiAobWludXRlcyA9PT0gMCkge1xuICAgIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKTtcbiAgfVxuICByZXR1cm4gc2lnbiArIFN0cmluZyhob3VycykgKyBkZWxpbWl0ZXIgKyBhZGRMZWFkaW5nWmVyb3MobWludXRlcywgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyhvZmZzZXQsIGRlbGltaXRlcikge1xuICBpZiAob2Zmc2V0ICUgNjAgPT09IDApIHtcbiAgICBjb25zdCBzaWduID0gb2Zmc2V0ID4gMCA/IFwiLVwiIDogXCIrXCI7XG4gICAgcmV0dXJuIHNpZ24gKyBhZGRMZWFkaW5nWmVyb3MoTWF0aC5hYnMob2Zmc2V0KSAvIDYwLCAyKTtcbiAgfVxuICByZXR1cm4gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkZWxpbWl0ZXIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRlbGltaXRlciA9IFwiXCIpIHtcbiAgY29uc3Qgc2lnbiA9IG9mZnNldCA+IDAgPyBcIi1cIiA6IFwiK1wiO1xuICBjb25zdCBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICBjb25zdCBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLnRydW5jKGFic09mZnNldCAvIDYwKSwgMik7XG4gIGNvbnN0IG1pbnV0ZXMgPSBhZGRMZWFkaW5nWmVyb3MoYWJzT2Zmc2V0ICUgNjAsIDIpO1xuICByZXR1cm4gc2lnbiArIGhvdXJzICsgZGVsaW1pdGVyICsgbWludXRlcztcbn1cbiIsCiAgICAiY29uc3QgZGF0ZUxvbmdGb3JtYXR0ZXIgPSAocGF0dGVybiwgZm9ybWF0TG9uZykgPT4ge1xuICBzd2l0Y2ggKHBhdHRlcm4pIHtcbiAgICBjYXNlIFwiUFwiOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7IHdpZHRoOiBcInNob3J0XCIgfSk7XG4gICAgY2FzZSBcIlBQXCI6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHsgd2lkdGg6IFwibWVkaXVtXCIgfSk7XG4gICAgY2FzZSBcIlBQUFwiOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcuZGF0ZSh7IHdpZHRoOiBcImxvbmdcIiB9KTtcbiAgICBjYXNlIFwiUFBQUFwiOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHsgd2lkdGg6IFwiZnVsbFwiIH0pO1xuICB9XG59O1xuXG5jb25zdCB0aW1lTG9uZ0Zvcm1hdHRlciA9IChwYXR0ZXJuLCBmb3JtYXRMb25nKSA9PiB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgXCJwXCI6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHsgd2lkdGg6IFwic2hvcnRcIiB9KTtcbiAgICBjYXNlIFwicHBcIjpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoeyB3aWR0aDogXCJtZWRpdW1cIiB9KTtcbiAgICBjYXNlIFwicHBwXCI6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy50aW1lKHsgd2lkdGg6IFwibG9uZ1wiIH0pO1xuICAgIGNhc2UgXCJwcHBwXCI6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoeyB3aWR0aDogXCJmdWxsXCIgfSk7XG4gIH1cbn07XG5cbmNvbnN0IGRhdGVUaW1lTG9uZ0Zvcm1hdHRlciA9IChwYXR0ZXJuLCBmb3JtYXRMb25nKSA9PiB7XG4gIGNvbnN0IG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107XG4gIGNvbnN0IGRhdGVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMV07XG4gIGNvbnN0IHRpbWVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMl07XG5cbiAgaWYgKCF0aW1lUGF0dGVybikge1xuICAgIHJldHVybiBkYXRlTG9uZ0Zvcm1hdHRlcihwYXR0ZXJuLCBmb3JtYXRMb25nKTtcbiAgfVxuXG4gIGxldCBkYXRlVGltZUZvcm1hdDtcblxuICBzd2l0Y2ggKGRhdGVQYXR0ZXJuKSB7XG4gICAgY2FzZSBcIlBcIjpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7IHdpZHRoOiBcInNob3J0XCIgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiUFBcIjpcbiAgICAgIGRhdGVUaW1lRm9ybWF0ID0gZm9ybWF0TG9uZy5kYXRlVGltZSh7IHdpZHRoOiBcIm1lZGl1bVwiIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIlBQUFwiOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHsgd2lkdGg6IFwibG9uZ1wiIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIlBQUFBcIjpcbiAgICBkZWZhdWx0OlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHsgd2lkdGg6IFwiZnVsbFwiIH0pO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXRcbiAgICAucmVwbGFjZShcInt7ZGF0ZX19XCIsIGRhdGVMb25nRm9ybWF0dGVyKGRhdGVQYXR0ZXJuLCBmb3JtYXRMb25nKSlcbiAgICAucmVwbGFjZShcInt7dGltZX19XCIsIHRpbWVMb25nRm9ybWF0dGVyKHRpbWVQYXR0ZXJuLCBmb3JtYXRMb25nKSk7XG59O1xuXG5leHBvcnQgY29uc3QgbG9uZ0Zvcm1hdHRlcnMgPSB7XG4gIHA6IHRpbWVMb25nRm9ybWF0dGVyLFxuICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXIsXG59O1xuIiwKICAgICJjb25zdCBkYXlPZlllYXJUb2tlblJFID0gL15EKyQvO1xuY29uc3Qgd2Vla1llYXJUb2tlblJFID0gL15ZKyQvO1xuXG5jb25zdCB0aHJvd1Rva2VucyA9IFtcIkRcIiwgXCJERFwiLCBcIllZXCIsIFwiWVlZWVwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIGRheU9mWWVhclRva2VuUkUudGVzdCh0b2tlbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHdlZWtZZWFyVG9rZW5SRS50ZXN0KHRva2VuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdhcm5PclRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdCwgaW5wdXQpIHtcbiAgY29uc3QgX21lc3NhZ2UgPSBtZXNzYWdlKHRva2VuLCBmb3JtYXQsIGlucHV0KTtcbiAgY29uc29sZS53YXJuKF9tZXNzYWdlKTtcbiAgaWYgKHRocm93VG9rZW5zLmluY2x1ZGVzKHRva2VuKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoX21lc3NhZ2UpO1xufVxuXG5mdW5jdGlvbiBtZXNzYWdlKHRva2VuLCBmb3JtYXQsIGlucHV0KSB7XG4gIGNvbnN0IHN1YmplY3QgPSB0b2tlblswXSA9PT0gXCJZXCIgPyBcInllYXJzXCIgOiBcImRheXMgb2YgdGhlIG1vbnRoXCI7XG4gIHJldHVybiBgVXNlIFxcYCR7dG9rZW4udG9Mb3dlckNhc2UoKX1cXGAgaW5zdGVhZCBvZiBcXGAke3Rva2VufVxcYCAoaW4gXFxgJHtmb3JtYXR9XFxgKSBmb3IgZm9ybWF0dGluZyAke3N1YmplY3R9IHRvIHRoZSBpbnB1dCBcXGAke2lucHV0fVxcYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kYDtcbn1cbiIsCiAgICAiaW1wb3J0IHsgZGVmYXVsdExvY2FsZSB9IGZyb20gXCIuL19saWIvZGVmYXVsdExvY2FsZS5qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi9fbGliL2RlZmF1bHRPcHRpb25zLmpzXCI7XG5pbXBvcnQgeyBmb3JtYXR0ZXJzIH0gZnJvbSBcIi4vX2xpYi9mb3JtYXQvZm9ybWF0dGVycy5qc1wiO1xuaW1wb3J0IHsgbG9uZ0Zvcm1hdHRlcnMgfSBmcm9tIFwiLi9fbGliL2Zvcm1hdC9sb25nRm9ybWF0dGVycy5qc1wiO1xuaW1wb3J0IHtcbiAgaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbixcbiAgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuLFxuICB3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yLFxufSBmcm9tIFwiLi9fbGliL3Byb3RlY3RlZFRva2Vucy5qc1wiO1xuaW1wb3J0IHsgaXNWYWxpZCB9IGZyb20gXCIuL2lzVmFsaWQuanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vLyBSZXhwb3J0cyBvZiBpbnRlcm5hbCBmb3IgbGlicmFyaWVzIHRvIHVzZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2lzc3Vlcy8zNjM4I2lzc3VlY29tbWVudC0xODc3MDgyODc0XG5leHBvcnQgeyBmb3JtYXR0ZXJzLCBsb25nRm9ybWF0dGVycyB9O1xuXG4vLyBUaGlzIFJlZ0V4cCBjb25zaXN0cyBvZiB0aHJlZSBwYXJ0cyBzZXBhcmF0ZWQgYnkgYHxgOlxuLy8gLSBbeVlRcU1Md0lkRGVjaWhIS2ttc11vIG1hdGNoZXMgYW55IGF2YWlsYWJsZSBvcmRpbmFsIG51bWJlciB0b2tlblxuLy8gICAob25lIG9mIHRoZSBjZXJ0YWluIGxldHRlcnMgZm9sbG93ZWQgYnkgYG9gKVxuLy8gLSAoXFx3KVxcMSogbWF0Y2hlcyBhbnkgc2VxdWVuY2VzIG9mIHRoZSBzYW1lIGxldHRlclxuLy8gLSAnJyBtYXRjaGVzIHR3byBxdW90ZSBjaGFyYWN0ZXJzIGluIGEgcm93XG4vLyAtICcoJyd8W14nXSkrKCd8JCkgbWF0Y2hlcyBhbnl0aGluZyBzdXJyb3VuZGVkIGJ5IHR3byBxdW90ZSBjaGFyYWN0ZXJzICgnKSxcbi8vICAgZXhjZXB0IGEgc2luZ2xlIHF1b3RlIHN5bWJvbCwgd2hpY2ggZW5kcyB0aGUgc2VxdWVuY2UuXG4vLyAgIFR3byBxdW90ZSBjaGFyYWN0ZXJzIGRvIG5vdCBlbmQgdGhlIHNlcXVlbmNlLlxuLy8gICBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBzaW5nbGUgcXVvdGVcbi8vICAgdGhlbiB0aGUgc2VxdWVuY2Ugd2lsbCBjb250aW51ZSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuXG4vLyAtIC4gbWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlciB1bm1hdGNoZWQgYnkgcHJldmlvdXMgcGFydHMgb2YgdGhlIFJlZ0V4cHNcbmNvbnN0IGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPVxuICAvW3lZUXFNTHdJZERlY2loSEtrbXNdb3woXFx3KVxcMSp8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbi8vIFRoaXMgUmVnRXhwIGNhdGNoZXMgc3ltYm9scyBlc2NhcGVkIGJ5IHF1b3RlcywgYW5kIGFsc29cbi8vIHNlcXVlbmNlcyBvZiBzeW1ib2xzIFAsIHAsIGFuZCB0aGUgY29tYmluYXRpb25zIGxpa2UgYFBQUFBQUFBwcHBwcGBcbmNvbnN0IGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1ArcCt8UCt8cCt8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7XG5cbmNvbnN0IGVzY2FwZWRTdHJpbmdSZWdFeHAgPSAvXicoW15dKj8pJz8kLztcbmNvbnN0IGRvdWJsZVF1b3RlUmVnRXhwID0gLycnL2c7XG5jb25zdCB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCA9IC9bYS16QS1aXS87XG5cbmV4cG9ydCB7IGZvcm1hdCBhcyBmb3JtYXREYXRlIH07XG5cbi8qKlxuICogVGhlIHtAbGluayBmb3JtYXR9IGZ1bmN0aW9uIG9wdGlvbnMuXG4gKi9cblxuLyoqXG4gKiBAbmFtZSBmb3JtYXRcbiAqIEBhbGlhcyBmb3JtYXREYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEZvcm1hdCB0aGUgZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nIGluIHRoZSBnaXZlbiBmb3JtYXQuIFRoZSByZXN1bHQgbWF5IHZhcnkgYnkgbG9jYWxlLlxuICpcbiAqID4g4pqg77iPIFBsZWFzZSBub3RlIHRoYXQgdGhlIGBmb3JtYXRgIHRva2VucyBkaWZmZXIgZnJvbSBNb21lbnQuanMgYW5kIG90aGVyIGxpYnJhcmllcy5cbiAqID4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogVGhlIGNoYXJhY3RlcnMgd3JhcHBlZCBiZXR3ZWVuIHR3byBzaW5nbGUgcXVvdGVzIGNoYXJhY3RlcnMgKCcpIGFyZSBlc2NhcGVkLlxuICogVHdvIHNpbmdsZSBxdW90ZXMgaW4gYSByb3csIHdoZXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgYSBxdW90ZWQgc2VxdWVuY2UsIHJlcHJlc2VudCBhICdyZWFsJyBzaW5nbGUgcXVvdGUuXG4gKiAoc2VlIHRoZSBsYXN0IGV4YW1wbGUpXG4gKlxuICogRm9ybWF0IG9mIHRoZSBzdHJpbmcgaXMgYmFzZWQgb24gVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogaHR0cHM6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0ZpZWxkX1N5bWJvbF9UYWJsZVxuICogd2l0aCBhIGZldyBhZGRpdGlvbnMgKHNlZSBub3RlIDcgYmVsb3cgdGhlIHRhYmxlKS5cbiAqXG4gKiBBY2NlcHRlZCBwYXR0ZXJuczpcbiAqIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhdHRlcm4gfCBSZXN1bHQgZXhhbXBsZXMgICAgICAgICAgICAgICAgICAgfCBOb3RlcyB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tfFxuICogfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRy4uR0dHICB8IEFELCBCQyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0cgICAgfCBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHRyAgIHwgQSwgQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBDYWxlbmRhciB5ZWFyICAgICAgICAgICAgICAgICAgIHwgeSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHlvICAgICAgfCA0NHRoLCAxc3QsIDB0aCwgMTd0aCAgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5ICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5eSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgIHwgWSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlvICAgICAgfCA0NHRoLCAxc3QsIDE5MDB0aCwgMjAxN3RoICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZWSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgIHwgUiAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSICAgICAgfCAtNDMsIDAwLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlIgICAgIHwgLTA0MywgMDAwLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUiAgICB8IC0wMDQzLCAwMDAwLCAwMDAxLCAxOTAwLCAyMDE3ICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlJSICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUsNyB8XG4gKiB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICAgfCB1ICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXUgICAgICB8IC00MywgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dSAgICAgfCAtMDQzLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1ICAgIHwgLTAwNDMsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dXUgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgUXVhcnRlciAoZm9ybWF0dGluZykgICAgICAgICAgICB8IFEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUVEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgUXVhcnRlciAoc3RhbmQtYWxvbmUpICAgICAgICAgICB8IHEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcXEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgTW9udGggKGZvcm1hdHRpbmcpICAgICAgICAgICAgICB8IE0gICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU0gICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTSAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTU0gICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTW9udGggKHN0YW5kLWFsb25lKSAgICAgICAgICAgICB8IEwgICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTEwgICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTCAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTEwgICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgICB8IHcgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3byAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd3cgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgICB8IEkgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSUkgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgICB8IGQgICAgICAgfCAxLCAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzFzdCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGQgICAgICB8IDAxLCAwMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgICB8IEQgICAgICAgfCAxLCAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgICAgfCA5ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzY1dGgsIDM2NnRoICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREQgICAgICB8IDAxLCAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERERCAgICAgfCAwMDEsIDAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREREICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBEYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgICAgIHwgRS4uRUVFICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUVFICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICB8IGkgICAgICAgfCAxLCAyLCAzLCAuLi4sIDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgN3RoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWkgICAgICB8IDAxLCAwMiwgLi4uLCAwNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWkgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpaSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCA3ICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgfCBlICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZW8gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWUgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZWUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoc3RhbmQtYWxvbmUpIHwgYyAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYyAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2MgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjYyAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2NjICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICB8IGEuLmFhICAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWEgICAgIHwgYW0sIHBtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYSAgICB8IGEubS4sIHAubS4gICAgICAgICAgICAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYWFhICAgfCBhLCBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgfCBiLi5iYiAgIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiICAgICB8IGFtLCBwbSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmIgICAgfCBhLm0uLCBwLm0uLCBub29uLCBtaWRuaWdodCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiYiAgIHwgYSwgcCwgbiwgbWkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGbGV4aWJsZSBkYXkgcGVyaW9kICAgICAgICAgICAgIHwgQi4uQkJCICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkIgICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCQiAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTEyXSAgICAgICAgICAgICAgICAgICAgIHwgaCAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAxMnRoICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoaCAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTIzXSAgICAgICAgICAgICAgICAgICAgIHwgSCAgICAgICB8IDAsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhvICAgICAgfCAwdGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBISCAgICAgIHwgMDAsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFswLTExXSAgICAgICAgICAgICAgICAgICAgIHwgSyAgICAgICB8IDEsIDIsIC4uLiwgMTEsIDAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMXRoLCAwdGggICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLSyAgICAgIHwgMDEsIDAyLCAuLi4sIDExLCAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBIb3VyIFsxLTI0XSAgICAgICAgICAgICAgICAgICAgIHwgayAgICAgICB8IDI0LCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtvICAgICAgfCAyNHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrayAgICAgIHwgMjQsIDAxLCAwMiwgLi4uLCAyMyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNaW51dGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbSAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1vICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbSAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBTZWNvbmQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcyAgICAgICB8IDAsIDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNvICAgICAgfCAwdGgsIDFzdCwgLi4uLCA1OXRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzcyAgICAgIHwgMDAsIDAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBGcmFjdGlvbiBvZiBzZWNvbmQgICAgICAgICAgICAgIHwgUyAgICAgICB8IDAsIDEsIC4uLiwgOSAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTICAgICAgfCAwMCwgMDEsIC4uLiwgOTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1MgICAgIHwgMDAwLCAwMDEsIC4uLiwgOTk5ICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTUyAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvIFopICAgICAgICB8IFggICAgICAgfCAtMDgsICswNTMwLCBaICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWCAgICAgIHwgLTA4MDAsICswNTMwLCBaICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYICAgICB8IC0wODowMCwgKzA1OjMwLCBaICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFggICAgfCAtMDgwMCwgKzA1MzAsIFosICsxMjM0NTYgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYWCAgIHwgLTA4OjAwLCArMDU6MzAsIFosICsxMjozNDo1NiAgICAgIHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy9vIFopICAgICAgIHwgeCAgICAgICB8IC0wOCwgKzA1MzAsICswMCAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4ICAgICAgfCAtMDgwMCwgKzA1MzAsICswMDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHggICAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eCAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAsICsxMjM0NTYgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHh4ICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwLCArMTI6MzQ6NTYgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICAgfCBPLi4uT09PIHwgR01ULTgsIEdNVCs1OjMwLCBHTVQrMCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT09PTyAgICB8IEdNVC0wODowMCwgR01UKzA1OjMwLCBHTVQrMDA6MDAgICB8IDIgICAgIHxcbiAqIHwgVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdC4pICB8IHouLi56enogfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCA2ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB6enp6ICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiw2ICAgfFxuICogfCBTZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICAgICAgIHwgdCAgICAgICB8IDUxMjk2OTUyMCAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR0ICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgfCBUICAgICAgIHwgNTEyOTY5NTIwOTAwICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVFQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgZGF0ZSAgICAgICAgICAgICB8IFAgICAgICAgfCAwNC8yOS8xNDUzICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUCAgICAgIHwgQXByIDI5LCAxNDUzICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQICAgICB8IEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFAgICAgfCBGcmlkYXksIEFwcmlsIDI5dGgsIDE0NTMgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICAgfCBwICAgICAgIHwgMTI6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHAgICAgICB8IDEyOjAwOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcCAgICAgfCAxMjowMDowMCBBTSBHTVQrMiAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHBwICAgIHwgMTI6MDA6MDAgQU0gR01UKzAyOjAwICAgICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBDb21iaW5hdGlvbiBvZiBkYXRlIGFuZCB0aW1lICAgIHwgUHAgICAgICB8IDA0LzI5LzE0NTMsIDEyOjAwIEFNICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQcHAgICAgfCBBcHIgMjksIDE0NTMsIDEyOjAwOjAwIEFNICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBwcHAgIHwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUHBwcHB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyBhdCAuLi4gICB8IDIsNyAgIHxcbiAqIE5vdGVzOlxuICogMS4gXCJGb3JtYXR0aW5nXCIgdW5pdHMgKGUuZy4gZm9ybWF0dGluZyBxdWFydGVyKSBpbiB0aGUgZGVmYXVsdCBlbi1VUyBsb2NhbGVcbiAqICAgIGFyZSB0aGUgc2FtZSBhcyBcInN0YW5kLWFsb25lXCIgdW5pdHMsIGJ1dCBhcmUgZGlmZmVyZW50IGluIHNvbWUgbGFuZ3VhZ2VzLlxuICogICAgXCJGb3JtYXR0aW5nXCIgdW5pdHMgYXJlIGRlY2xpbmVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMgb2YgdGhlIGxhbmd1YWdlXG4gKiAgICBpbiB0aGUgY29udGV4dCBvZiBhIGRhdGUuIFwiU3RhbmQtYWxvbmVcIiB1bml0cyBhcmUgYWx3YXlzIG5vbWluYXRpdmUgc2luZ3VsYXI6XG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBMTExMJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZCdgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdkbyBNTU1NJywge2xvY2FsZTogY3N9KSAvLz0+ICc2LiBsaXN0b3BhZHUnYFxuICpcbiAqIDIuIEFueSBzZXF1ZW5jZSBvZiB0aGUgaWRlbnRpY2FsIGxldHRlcnMgaXMgYSBwYXR0ZXJuLCB1bmxlc3MgaXQgaXMgZXNjYXBlZCBieVxuICogICAgdGhlIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIChzZWUgYmVsb3cpLlxuICogICAgSWYgdGhlIHNlcXVlbmNlIGlzIGxvbmdlciB0aGFuIGxpc3RlZCBpbiB0YWJsZSAoZS5nLiBgRUVFRUVFRUVFRUVgKVxuICogICAgdGhlIG91dHB1dCB3aWxsIGJlIHRoZSBzYW1lIGFzIGRlZmF1bHQgcGF0dGVybiBmb3IgdGhpcyB1bml0LCB1c3VhbGx5XG4gKiAgICB0aGUgbG9uZ2VzdCBvbmUgKGluIGNhc2Ugb2YgSVNPIHdlZWtkYXlzLCBgRUVFRWApLiBEZWZhdWx0IHBhdHRlcm5zIGZvciB1bml0c1xuICogICAgYXJlIG1hcmtlZCB3aXRoIFwiMlwiIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgdGFibGUuXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU0nKSAvLz0+ICdOb3YnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NJykgLy89PiAnTidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqIDMuIFNvbWUgcGF0dGVybnMgY291bGQgYmUgdW5saW1pdGVkIGxlbmd0aCAoc3VjaCBhcyBgeXl5eXl5eXlgKS5cbiAqICAgIFRoZSBvdXRwdXQgd2lsbCBiZSBwYWRkZWQgd2l0aCB6ZXJvcyB0byBtYXRjaCB0aGUgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAneXl5eXl5eXknKSAvLz0+ICcwMDAwMjAxNydgXG4gKlxuICogNC4gYFFRUVFRYCBhbmQgYHFxcXFxYCBjb3VsZCBiZSBub3Qgc3RyaWN0bHkgbnVtZXJpY2FsIGluIHNvbWUgbG9jYWxlcy5cbiAqICAgIFRoZXNlIHRva2VucyByZXByZXNlbnQgdGhlIHNob3J0ZXN0IGZvcm0gb2YgdGhlIHF1YXJ0ZXIuXG4gKlxuICogNS4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGB5YCBhbmQgYHVgIHBhdHRlcm5zIGFyZSBCLkMuIHllYXJzOlxuICpcbiAqICAgIHwgWWVhciB8IGB5YCB8IGB1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICogICAgfCBBQyAxIHwgICAxIHwgICAxIHxcbiAqICAgIHwgQkMgMSB8ICAgMSB8ICAgMCB8XG4gKiAgICB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICpcbiAqICAgIEFsc28gYHl5YCBhbHdheXMgcmV0dXJucyB0aGUgbGFzdCB0d28gZGlnaXRzIG9mIGEgeWVhcixcbiAqICAgIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZDpcbiAqXG4gKiAgICB8IFllYXIgfCBgeXlgIHwgYHV1YCB8XG4gKiAgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS18XG4gKiAgICB8IDEgICAgfCAgIDAxIHwgICAwMSB8XG4gKiAgICB8IDE0ICAgfCAgIDE0IHwgICAxNCB8XG4gKiAgICB8IDM3NiAgfCAgIDc2IHwgIDM3NiB8XG4gKiAgICB8IDE0NTMgfCAgIDUzIHwgMTQ1MyB8XG4gKlxuICogICAgVGhlIHNhbWUgZGlmZmVyZW5jZSBpcyB0cnVlIGZvciBsb2NhbCBhbmQgSVNPIHdlZWstbnVtYmVyaW5nIHllYXJzIChgWWAgYW5kIGBSYCksXG4gKiAgICBleGNlcHQgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhcnMgYXJlIGRlcGVuZGVudCBvbiBgb3B0aW9ucy53ZWVrU3RhcnRzT25gXG4gKiAgICBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCAoY29tcGFyZSBbZ2V0SVNPV2Vla1llYXJdKGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0SVNPV2Vla1llYXIpXG4gKiAgICBhbmQgW2dldFdlZWtZZWFyXShodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldFdlZWtZZWFyKSkuXG4gKlxuICogNi4gU3BlY2lmaWMgbm9uLWxvY2F0aW9uIHRpbWV6b25lcyBhcmUgY3VycmVudGx5IHVuYXZhaWxhYmxlIGluIGBkYXRlLWZuc2AsXG4gKiAgICBzbyByaWdodCBub3cgdGhlc2UgdG9rZW5zIGZhbGwgYmFjayB0byBHTVQgdGltZXpvbmVzLlxuICpcbiAqIDcuIFRoZXNlIHBhdHRlcm5zIGFyZSBub3QgaW4gdGhlIFVuaWNvZGUgVGVjaG5pY2FsIFN0YW5kYXJkICMzNTpcbiAqICAgIC0gYGlgOiBJU08gZGF5IG9mIHdlZWtcbiAqICAgIC0gYElgOiBJU08gd2VlayBvZiB5ZWFyXG4gKiAgICAtIGBSYDogSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqICAgIC0gYHRgOiBzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgVGA6IG1pbGxpc2Vjb25kcyB0aW1lc3RhbXBcbiAqICAgIC0gYG9gOiBvcmRpbmFsIG51bWJlciBtb2RpZmllclxuICogICAgLSBgUGA6IGxvbmcgbG9jYWxpemVkIGRhdGVcbiAqICAgIC0gYHBgOiBsb25nIGxvY2FsaXplZCB0aW1lXG4gKlxuICogOC4gYFlZYCBhbmQgYFlZWVlgIHRva2VucyByZXByZXNlbnQgd2Vlay1udW1iZXJpbmcgeWVhcnMgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggeWVhcnMuXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnNgIHRvIHVzZSB0aGVtLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiA5LiBgRGAgYW5kIGBERGAgdG9rZW5zIHJlcHJlc2VudCBkYXlzIG9mIHRoZSB5ZWFyIGJ1dCB0aGV5IGFyZSBvZnRlbiBjb25mdXNlZCB3aXRoIGRheXMgb2YgdGhlIG1vbnRoLlxuICogICAgWW91IHNob3VsZCBlbmFibGUgYG9wdGlvbnMudXNlQWRkaXRpb25hbERheU9mWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqIEBwYXJhbSBmb3JtYXQgLSBUaGUgc3RyaW5nIG9mIHRva2Vuc1xuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZ1xuICpcbiAqIEB0aHJvd3MgYGRhdGVgIG11c3Qgbm90IGJlIEludmFsaWQgRGF0ZVxuICogQHRocm93cyBgb3B0aW9ucy5sb2NhbGVgIG11c3QgY29udGFpbiBgbG9jYWxpemVgIHByb3BlcnR5XG4gKiBAdGhyb3dzIGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBmb3JtYXRMb25nYCBwcm9wZXJ0eVxuICogQHRocm93cyB1c2UgYHl5eXlgIGluc3RlYWQgb2YgYFlZWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3MgdXNlIGB5eWAgaW5zdGVhZCBvZiBgWVlgIGZvciBmb3JtYXR0aW5nIHllYXJzIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3MgdXNlIGBkYCBpbnN0ZWFkIG9mIGBEYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIHVzZSBgZGRgIGluc3RlYWQgb2YgYEREYCBmb3IgZm9ybWF0dGluZyBkYXlzIG9mIHRoZSBtb250aCB1c2luZyBbZm9ybWF0IHByb3ZpZGVkXSB0byB0aGUgaW5wdXQgW2lucHV0IHByb3ZpZGVkXTsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKiBAdGhyb3dzIGZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMTEgRmVicnVhcnkgMjAxNCBpbiBtaWRkbGUtZW5kaWFuIGZvcm1hdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCAxLCAxMSksICdNTS9kZC95eXl5JylcbiAqIC8vPT4gJzAyLzExLzIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAyIEp1bHkgMjAxNCBpbiBFc3BlcmFudG86XG4gKiBpbXBvcnQgeyBlb0xvY2FsZSB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZS9lbydcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCA2LCAyKSwgXCJkbyAnZGUnIE1NTU0geXl5eVwiLCB7XG4gKiAgIGxvY2FsZTogZW9Mb2NhbGVcbiAqIH0pXG4gKiAvLz0+ICcyLWEgZGUganVsaW8gMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXNjYXBlIHN0cmluZyBieSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyczpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxNSksIFwiaCAnbycnY2xvY2snXCIpXG4gKiAvLz0+IFwiMyBvJ2Nsb2NrXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdChkYXRlLCBmb3JtYXRTdHIsIG9wdGlvbnMpIHtcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMubG9jYWxlID8/IGRlZmF1bHRMb2NhbGU7XG5cbiAgY29uc3QgZmlyc3RXZWVrQ29udGFpbnNEYXRlID1cbiAgICBvcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgMTtcblxuICBjb25zdCB3ZWVrU3RhcnRzT24gPVxuICAgIG9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgZGVmYXVsdE9wdGlvbnMud2Vla1N0YXJ0c09uID8/XG4gICAgZGVmYXVsdE9wdGlvbnMubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICAwO1xuXG4gIGNvbnN0IG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7XG5cbiAgaWYgKCFpc1ZhbGlkKG9yaWdpbmFsRGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgdGltZSB2YWx1ZVwiKTtcbiAgfVxuXG4gIGxldCBwYXJ0cyA9IGZvcm1hdFN0clxuICAgIC5tYXRjaChsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cClcbiAgICAubWFwKChzdWJzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcInBcIiB8fCBmaXJzdENoYXJhY3RlciA9PT0gXCJQXCIpIHtcbiAgICAgICAgY29uc3QgbG9uZ0Zvcm1hdHRlciA9IGxvbmdGb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTtcbiAgICAgICAgcmV0dXJuIGxvbmdGb3JtYXR0ZXIoc3Vic3RyaW5nLCBsb2NhbGUuZm9ybWF0TG9uZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3Vic3RyaW5nO1xuICAgIH0pXG4gICAgLmpvaW4oXCJcIilcbiAgICAubWF0Y2goZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cClcbiAgICAubWFwKChzdWJzdHJpbmcpID0+IHtcbiAgICAgIC8vIFJlcGxhY2UgdHdvIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzIHdpdGggb25lIHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJcbiAgICAgIGlmIChzdWJzdHJpbmcgPT09IFwiJydcIikge1xuICAgICAgICByZXR1cm4geyBpc1Rva2VuOiBmYWxzZSwgdmFsdWU6IFwiJ1wiIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpcnN0Q2hhcmFjdGVyID0gc3Vic3RyaW5nWzBdO1xuICAgICAgaWYgKGZpcnN0Q2hhcmFjdGVyID09PSBcIidcIikge1xuICAgICAgICByZXR1cm4geyBpc1Rva2VuOiBmYWxzZSwgdmFsdWU6IGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXSkge1xuICAgICAgICByZXR1cm4geyBpc1Rva2VuOiB0cnVlLCB2YWx1ZTogc3Vic3RyaW5nIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChmaXJzdENoYXJhY3Rlci5tYXRjaCh1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXG4gICAgICAgICAgXCJGb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGFuIHVuZXNjYXBlZCBsYXRpbiBhbHBoYWJldCBjaGFyYWN0ZXIgYFwiICtcbiAgICAgICAgICAgIGZpcnN0Q2hhcmFjdGVyICtcbiAgICAgICAgICAgIFwiYFwiLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBpc1Rva2VuOiBmYWxzZSwgdmFsdWU6IHN1YnN0cmluZyB9O1xuICAgIH0pO1xuXG4gIC8vIGludm9rZSBsb2NhbGl6ZSBwcmVwcm9jZXNzb3IgKG9ubHkgZm9yIGZyZW5jaCBsb2NhbGVzIGF0IHRoZSBtb21lbnQpXG4gIGlmIChsb2NhbGUubG9jYWxpemUucHJlcHJvY2Vzc29yKSB7XG4gICAgcGFydHMgPSBsb2NhbGUubG9jYWxpemUucHJlcHJvY2Vzc29yKG9yaWdpbmFsRGF0ZSwgcGFydHMpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0dGVyT3B0aW9ucyA9IHtcbiAgICBmaXJzdFdlZWtDb250YWluc0RhdGUsXG4gICAgd2Vla1N0YXJ0c09uLFxuICAgIGxvY2FsZSxcbiAgfTtcblxuICByZXR1cm4gcGFydHNcbiAgICAubWFwKChwYXJ0KSA9PiB7XG4gICAgICBpZiAoIXBhcnQuaXNUb2tlbikgcmV0dXJuIHBhcnQudmFsdWU7XG5cbiAgICAgIGNvbnN0IHRva2VuID0gcGFydC52YWx1ZTtcblxuICAgICAgaWYgKFxuICAgICAgICAoIW9wdGlvbnM/LnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2VucyAmJlxuICAgICAgICAgIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikpIHx8XG4gICAgICAgICghb3B0aW9ucz8udXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucyAmJlxuICAgICAgICAgIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pKVxuICAgICAgKSB7XG4gICAgICAgIHdhcm5PclRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdFN0ciwgU3RyaW5nKGRhdGUpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1t0b2tlblswXV07XG4gICAgICByZXR1cm4gZm9ybWF0dGVyKG9yaWdpbmFsRGF0ZSwgdG9rZW4sIGxvY2FsZS5sb2NhbGl6ZSwgZm9ybWF0dGVyT3B0aW9ucyk7XG4gICAgfSlcbiAgICAuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nKGlucHV0KSB7XG4gIGNvbnN0IG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTtcblxuICBpZiAoIW1hdGNoZWQpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlZFsxXS5yZXBsYWNlKGRvdWJsZVF1b3RlUmVnRXhwLCBcIidcIik7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0O1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IExvZywgTWlsa2lvSW5pdCwgTWlsa2lvUnVudGltZUluaXQgfSBmcm9tIFwiLi4vaW5kZXgudHNcIjtcclxuXHJcbmludGVyZmFjZSBDb29rYm9va0V2ZW50IHtcclxuICB0eXBlOiBcIm1pbGtpb0Bsb2dnZXJcIjtcclxuICBsb2c6IExvZztcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRDb29rYm9va0V2ZW50KHJ1bnRpbWU6IE1pbGtpb1J1bnRpbWVJbml0PE1pbGtpb0luaXQ+LCBldmVudDogQ29va2Jvb2tFdmVudCkge1xyXG4gIC8vIHRyeSB7XHJcbiAgLy8gICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwOi8vbG9jYWxob3N0OiR7cnVudGltZS5jb29rYm9vay5jb29rYm9va1BvcnR9LyRhY3Rpb25gLCB7XHJcbiAgLy8gICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgLy8gICAgIGhlYWRlcnM6IHtcclxuICAvLyAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAvLyAgICAgfSxcclxuICAvLyAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoZXZlbnQpLFxyXG4gIC8vICAgfSk7XHJcbiAgLy8gICBpZiAoIXJlc3BvbnNlLm9rKSB7XHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKFwiW0NPT0tCT09LXVwiLCBhd2FpdCByZXNwb25zZS50ZXh0KCkpO1xyXG4gIC8vICAgICBjb25zb2xlLmxvZyhcIltDT09LQk9PS11cIiwgXCJJcyBDb29rYm9vayBjbG9zZWQ/IFRoZXJlIGlzIGFuIGFibm9ybWFsaXR5IGluIHRoZSBjb21tdW5pY2F0aW9uIHdpdGggQ29va2Jvb2suXCIpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgLy8gICBjb25zb2xlLmxvZyhcIltDT09LQk9PS11cIiwgZXJyb3IpO1xyXG4gIC8vICAgY29uc29sZS5sb2coXCJbQ09PS0JPT0tdXCIsIFwiSXMgQ29va2Jvb2sgY2xvc2VkPyBUaGVyZSBpcyBhbiBhYm5vcm1hbGl0eSBpbiB0aGUgY29tbXVuaWNhdGlvbiB3aXRoIENvb2tib29rLlwiKTtcclxuICAvLyB9XHJcbn1cclxuIiwKICAgICJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tIFwiZGF0ZS1mbnNcIjtcclxuaW1wb3J0IHR5cGUgeyAkY29udGV4dCwgTWlsa2lvSW5pdCwgTWlsa2lvUnVudGltZUluaXQgfSBmcm9tIFwiLi4vaW5kZXgudHNcIjtcclxuaW1wb3J0IHsgc2VuZENvb2tib29rRXZlbnQgfSBmcm9tIFwiLi4vdXRpbHMvc2VuZC1jb29rYm9vay1ldmVudC50c1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgTG9nID0gW1wiKGRlYnVnKVwiIHwgXCIoaW5mbylcIiB8IFwiKHdhcm4pXCIgfCBcIihlcnJvcilcIiB8IFwiKHJlcXVlc3QpXCIgfCBcIihyZXNwb25zZSlcIiwgc3RyaW5nIC8qIGV4ZWN1dGVJZCAqLywgc3RyaW5nLCBzdHJpbmcsIHN0cmluZywgLi4uQXJyYXk8dW5rbm93bj5dO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXIge1xyXG4gICAgXzoge1xyXG4gICAgICAgIGxvZ3M6IEFycmF5PExvZz47XHJcbiAgICAgICAgdGFnczogTWFwPHN0cmluZywgdW5rbm93bj47XHJcbiAgICAgICAgc3VibWl0OiAoY29udGV4dDogJGNvbnRleHQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xyXG4gICAgfTtcclxuICAgIHNldFRhZzogKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4gdm9pZDtcclxuICAgIHNldExvZzogKC4uLmxvZzogTG9nKSA9PiB2b2lkO1xyXG4gICAgZGVidWc6IChkZXNjcmlwdGlvbjogc3RyaW5nLCAuLi5wYXJhbXM6IEFycmF5PHVua25vd24+KSA9PiBMb2c7XHJcbiAgICBpbmZvOiAoZGVzY3JpcHRpb246IHN0cmluZywgLi4ucGFyYW1zOiBBcnJheTx1bmtub3duPikgPT4gTG9nO1xyXG4gICAgd2FybjogKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IExvZztcclxuICAgIGVycm9yOiAoZGVzY3JpcHRpb246IHN0cmluZywgLi4ucGFyYW1zOiBBcnJheTx1bmtub3duPikgPT4gTG9nO1xyXG4gICAgcmVxdWVzdDogKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IExvZztcclxuICAgIHJlc3BvbnNlOiAoZGVzY3JpcHRpb246IHN0cmluZywgLi4ucGFyYW1zOiBBcnJheTx1bmtub3duPikgPT4gTG9nO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBMb2dnZXJJbnNlcnRpbmdIYW5kbGVyID0gKGxvZzogTG9nKSA9PiBib29sZWFuO1xyXG5cclxuZXhwb3J0IHR5cGUgTG9nZ2VyU3VibWl0dGluZ0hhbmRsZXIgPSAoY29udGV4dDogJGNvbnRleHQsIGxvZ3M6IEFycmF5PExvZz4sIHRhZ3M6IE1hcDxzdHJpbmcsIHVua25vd24+KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb2dnZXI8TWlsa2lvUnVudGltZSBleHRlbmRzIE1pbGtpb1J1bnRpbWVJbml0PE1pbGtpb1J1bnRpbWVJbml0PE1pbGtpb0luaXQ+PiA9IE1pbGtpb1J1bnRpbWVJbml0PE1pbGtpb0luaXQ+PihydW50aW1lOiBNaWxraW9SdW50aW1lLCBwYXRoOiBzdHJpbmcsIGV4ZWN1dGVJZDogc3RyaW5nKTogTG9nZ2VyIHtcclxuICAgIGNvbnN0IGxvZ2dlciA9IHt9IGFzIExvZ2dlcjtcclxuXHJcbiAgICBsb2dnZXIuXyA9IHtcclxuICAgICAgICBsb2dzOiBbXSxcclxuICAgICAgICB0YWdzOiBuZXcgTWFwKCksXHJcbiAgICAgICAgc3VibWl0OiAoY29udGV4dDogJGNvbnRleHQpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFydW50aW1lLm9uTG9nZ2VyU3VibWl0dGluZykgcmV0dXJuO1xyXG4gICAgICAgICAgICByZXR1cm4gcnVudGltZS5vbkxvZ2dlclN1Ym1pdHRpbmcoY29udGV4dCwgbG9nZ2VyLl8ubG9ncywgbG9nZ2VyLl8udGFncyk7XHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgX190YWdQdXNoID0gKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQgPT4ge1xyXG4gICAgICAgIGxvZ2dlci5fLnRhZ3Muc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IF9fbG9nUHVzaCA9IChsb2c6IExvZyk6IExvZyA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5zZXJ0aW5nID0gcnVudGltZS5vbkxvZ2dlckluc2VydGluZ1xyXG4gICAgICAgICAgICA/IHJ1bnRpbWUub25Mb2dnZXJJbnNlcnRpbmdcclxuICAgICAgICAgICAgOiAobG9nOiBMb2cpID0+IHtcclxuICAgICAgICAgICAgICAgIGxvZyA9IFsuLi5sb2ddO1xyXG4gICAgICAgICAgICAgICAgbG9nWzBdID0gYFxcbiR7bG9nWzBdfWAgYXMgYW55O1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coLi4ubG9nKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoIWluc2VydGluZyhsb2cpKSByZXR1cm4gbG9nO1xyXG5cclxuICAgICAgICBsb2dnZXIuXy5sb2dzLnB1c2goWy4uLmxvZ10pO1xyXG5cclxuICAgICAgICBpZiAocnVudGltZS5kZXZlbG9wKSB7XHJcbiAgICAgICAgICAgIHZvaWQgc2VuZENvb2tib29rRXZlbnQocnVudGltZSwge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJtaWxraW9AbG9nZ2VyXCIsXHJcbiAgICAgICAgICAgICAgICBsb2csXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGxvZztcclxuICAgIH07XHJcblxyXG4gICAgbG9nZ2VyLnNldFRhZyA9IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IF9fdGFnUHVzaChrZXksIHZhbHVlKTtcclxuICAgIGxvZ2dlci5zZXRMb2cgPSAoLi4ubG9nOiBMb2cpID0+IF9fbG9nUHVzaChsb2cpO1xyXG5cclxuICAgIGNvbnN0IGdldE5vdyA9ICgpID0+IGAke2Zvcm1hdChuZXcgRGF0ZSgpLCBcIih5eXl5LU1NLWRkIGhoOm1tOnNzKVwiKX1gO1xyXG5cclxuICAgIGxvZ2dlci5kZWJ1ZyA9IChkZXNjcmlwdGlvbjogc3RyaW5nLCAuLi5wYXJhbXM6IEFycmF5PHVua25vd24+KSA9PiBfX2xvZ1B1c2goW1wiKGRlYnVnKVwiLCBwYXRoLCBleGVjdXRlSWQsIGdldE5vdygpLCBgXFxuJHtkZXNjcmlwdGlvbn1gLCAuLi5wYXJhbXNdKTtcclxuICAgIGxvZ2dlci5pbmZvID0gKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IF9fbG9nUHVzaChbXCIoaW5mbylcIiwgcGF0aCwgZXhlY3V0ZUlkLCBnZXROb3coKSwgYFxcbiR7ZGVzY3JpcHRpb259YCwgLi4ucGFyYW1zXSk7XHJcbiAgICBsb2dnZXIud2FybiA9IChkZXNjcmlwdGlvbjogc3RyaW5nLCAuLi5wYXJhbXM6IEFycmF5PHVua25vd24+KSA9PiBfX2xvZ1B1c2goW1wiKHdhcm4pXCIsIHBhdGgsIGV4ZWN1dGVJZCwgZ2V0Tm93KCksIGBcXG4ke2Rlc2NyaXB0aW9ufWAsIC4uLnBhcmFtc10pO1xyXG4gICAgbG9nZ2VyLmVycm9yID0gKGRlc2NyaXB0aW9uOiBzdHJpbmcsIC4uLnBhcmFtczogQXJyYXk8dW5rbm93bj4pID0+IF9fbG9nUHVzaChbXCIoZXJyb3IpXCIsIHBhdGgsIGV4ZWN1dGVJZCwgZ2V0Tm93KCksIGBcXG4ke2Rlc2NyaXB0aW9ufWAsIC4uLnBhcmFtc10pO1xyXG4gICAgbG9nZ2VyLnJlcXVlc3QgPSAoZGVzY3JpcHRpb246IHN0cmluZywgLi4ucGFyYW1zOiBBcnJheTx1bmtub3duPikgPT4gX19sb2dQdXNoKFtcIihyZXF1ZXN0KVwiLCBwYXRoLCBleGVjdXRlSWQsIGdldE5vdygpLCBgXFxuJHtkZXNjcmlwdGlvbn1gLCAuLi5wYXJhbXNdKTtcclxuICAgIGxvZ2dlci5yZXNwb25zZSA9IChkZXNjcmlwdGlvbjogc3RyaW5nLCAuLi5wYXJhbXM6IEFycmF5PHVua25vd24+KSA9PiBfX2xvZ1B1c2goW1wiKHJlc3BvbnNlKVwiLCBwYXRoLCBleGVjdXRlSWQsIGdldE5vdygpLCBgXFxuJHtkZXNjcmlwdGlvbn1gLCAuLi5wYXJhbXNdKTtcclxuXHJcbiAgICByZXR1cm4gbG9nZ2VyO1xyXG59XHJcbiIsCiAgICAiZXhwb3J0IGludGVyZmFjZSBTdGVwczxTdGFnZVQgZXh0ZW5kcyBSZWNvcmQ8YW55LCBhbnk+PiB7XHJcbiAgc3RlcDogU3RlcEZ1bmN0aW9uPFN0YWdlVD47XHJcbiAgcnVuOiAoKSA9PiBQcm9taXNlPFJlbW92ZV88U3RhZ2VUPj47XHJcbn1cclxuXHJcbnR5cGUgUmVtb3ZlXzxUPiA9IHtcclxuICBbSyBpbiBrZXlvZiBUIGFzIEsgZXh0ZW5kcyBgXyR7c3RyaW5nfWAgPyBuZXZlciA6IEtdOiBUW0tdO1xyXG59O1xyXG5cclxudHlwZSBUb0VtcHR5T2JqZWN0PFQ+ID0gVCBleHRlbmRzIHVuZGVmaW5lZCB8IG51bGwgfCBuZXZlciA/IHt9IDogVCBleHRlbmRzIG9iamVjdCA/IFQgOiB7fTtcclxuXHJcbmV4cG9ydCB0eXBlIFN0ZXBGdW5jdGlvbjxTdGFnZVQgZXh0ZW5kcyBSZWNvcmQ8YW55LCBhbnk+PiA9IDxIYW5kbGVyVCBleHRlbmRzIChzdGFnZTogUmVhZG9ubHk8U3RhZ2VUPikgPT4gUmVjb3JkPGFueSwgYW55PiB8IFByb21pc2U8UmVjb3JkPGFueSwgYW55Pj4+KGhhbmRsZXI6IEhhbmRsZXJUKSA9PiBTdGVwczxBd2FpdGVkPFN0YWdlVD4gJiBUb0VtcHR5T2JqZWN0PEF3YWl0ZWQ8UmV0dXJuVHlwZTxIYW5kbGVyVD4+Pj47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RlcCgpOiBTdGVwczx7fT4ge1xyXG4gIGNvbnN0IHN0ZXBDb250cm9sbGVyID0ge1xyXG4gICAgJG1pbGtpb1R5cGU6IFwic3RlcFwiLFxyXG4gICAgX3N0ZXBzOiBbXSBhcyBBcnJheTwoc3RhZ2U6IGFueSkgPT4gUHJvbWlzZTxhbnk+PixcclxuICAgIHN0ZXAoaGFuZGxlcjogKHN0YWdlOiBhbnkpID0+IFByb21pc2U8YW55Pikge1xyXG4gICAgICBzdGVwQ29udHJvbGxlci5fc3RlcHMucHVzaChoYW5kbGVyKTtcclxuICAgICAgcmV0dXJuIHN0ZXBDb250cm9sbGVyO1xyXG4gICAgfSxcclxuICAgIGFzeW5jIHJ1bigpIHtcclxuICAgICAgbGV0IHN0YWdlID0ge307XHJcbiAgICAgIGZvciAoY29uc3Qgc3RlcCBvZiBzdGVwQ29udHJvbGxlci5fc3RlcHMpIHtcclxuICAgICAgICBzdGFnZSA9IHsgLi4uc3RhZ2UsIC4uLihhd2FpdCBzdGVwKHN0YWdlKSkgfTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxhbnksIGFueT4gPSB7fTtcclxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gc3RhZ2UpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IChzdGFnZSBhcyBhbnkpW2tleV07XHJcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChcIl9cIikpIHJlc3VsdFtrZXldID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0sXHJcbiAgfTtcclxuICByZXR1cm4gc3RlcENvbnRyb2xsZXIgYXMgYW55IGFzIFN0ZXBzPHt9PjtcclxufVxyXG4iLAogICAgImV4cG9ydCBjbGFzcyBUcmllPFQ+IHtcclxuICBwcml2YXRlIHJvb3Q6IFRyaWVOb2RlPFQ+O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMucm9vdCA9IG5ldyBUcmllTm9kZSgpO1xyXG4gIH1cclxuXHJcbiAgYWRkKHBhdGg6IHN0cmluZywgdmFsdWU6IFQpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBhcnRzID0gcGF0aFxyXG4gICAgICAucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgXCJcIilcclxuICAgICAgLnNwbGl0KFwiL1wiKVxyXG4gICAgICAuZmlsdGVyKChwKSA9PiBwICE9PSBcIlwiKTtcclxuICAgIGxldCBjdXJyZW50Tm9kZSA9IHRoaXMucm9vdDtcclxuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY3VycmVudE5vZGUudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XHJcbiAgICAgIGlmICghY3VycmVudE5vZGUuY2hpbGRyZW4uaGFzKHBhcnQpKSB7XHJcbiAgICAgICAgY3VycmVudE5vZGUuY2hpbGRyZW4uc2V0KHBhcnQsIG5ldyBUcmllTm9kZSgpKTtcclxuICAgICAgfVxyXG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmNoaWxkcmVuLmdldChwYXJ0KSE7XHJcbiAgICB9XHJcbiAgICBjdXJyZW50Tm9kZS52YWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0KHBhdGg6IHN0cmluZyk6IFQgfCBudWxsIHtcclxuICAgIGNvbnN0IHBhcnRzID0gcGF0aFxyXG4gICAgICAucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgXCJcIilcclxuICAgICAgLnNwbGl0KFwiL1wiKVxyXG4gICAgICAuZmlsdGVyKChwKSA9PiBwICE9PSBcIlwiKTtcclxuICAgIGxldCBjdXJyZW50Tm9kZSA9IHRoaXMucm9vdDtcclxuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xyXG4gICAgICBpZiAoIWN1cnJlbnROb2RlLmNoaWxkcmVuLmhhcyhwYXJ0KSkgcmV0dXJuIG51bGw7XHJcbiAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuY2hpbGRyZW4uZ2V0KHBhcnQpITtcclxuICAgIH1cclxuICAgIHJldHVybiBjdXJyZW50Tm9kZS52YWx1ZTtcclxuICB9XHJcblxyXG4gIGhhcyhwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHBhcnRzID0gcGF0aFxyXG4gICAgICAucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgXCJcIilcclxuICAgICAgLnNwbGl0KFwiL1wiKVxyXG4gICAgICAuZmlsdGVyKChwKSA9PiBwICE9PSBcIlwiKTtcclxuICAgIGxldCBjdXJyZW50Tm9kZSA9IHRoaXMucm9vdDtcclxuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHJldHVybiBjdXJyZW50Tm9kZS52YWx1ZSAhPT0gbnVsbDtcclxuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xyXG4gICAgICBpZiAoIWN1cnJlbnROb2RlLmNoaWxkcmVuLmhhcyhwYXJ0KSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBlbHNlIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuY2hpbGRyZW4uZ2V0KHBhcnQpITtcclxuICAgIH1cclxuICAgIHJldHVybiBjdXJyZW50Tm9kZS52YWx1ZSAhPT0gbnVsbDtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIFRyaWVOb2RlPFQ+IHtcclxuICBjaGlsZHJlbjogTWFwPHN0cmluZywgVHJpZU5vZGU8VD4+O1xyXG4gIHZhbHVlOiBUIHwgbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmNoaWxkcmVuID0gbmV3IE1hcCgpO1xyXG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XHJcbiAgfVxyXG59XHJcbiIsCiAgICAiaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCBleGNlcHRpb25IYW5kbGVyLCByZWplY3QgfSBmcm9tIFwiLi4vaW5kZXgudHNcIjtcclxuaW1wb3J0IHR5cGUgeyBNaXhpbiwgR2VuZXJhdGVkSW5pdCwgJHR5cGVzLCBDb250ZXh0SHR0cCwgTWlsa2lvUmVzcG9uc2VSZWplY3QsIFJlc3VsdHMsIE1pbGtpb1Jlc3BvbnNlU3VjY2VzcyB9IGZyb20gXCIuLi9pbmRleC50c1wiO1xyXG5pbXBvcnQgdHlwZSB7IF9faW5pdEV4ZWN1dGVyIH0gZnJvbSBcIi4uL2V4ZWN1dGUvaW5kZXgudHNcIjtcclxuaW1wb3J0IHsgX19jcmVhdGVJZCB9IGZyb20gXCIuLi91dGlscy9jcmVhdGUtaWQudHNcIjtcclxuaW1wb3J0IHsgVHJpZSB9IGZyb20gXCIuLi91dGlscy90cmllLnRzXCI7XHJcblxyXG5leHBvcnQgdHlwZSBNaWxraW9IdHRwUmVxdWVzdCA9IFJlcXVlc3Q7XHJcblxyXG5leHBvcnQgdHlwZSBNaWxraW9IdHRwUmVzcG9uc2UgPSBNaXhpbjxcclxuICAgIFJlc3BvbnNlSW5pdCxcclxuICAgIHtcclxuICAgICAgICAvLyBib2R5OiBzdHJpbmcgfCBCbG9iIHwgRm9ybURhdGEgfCBVUkxTZWFyY2hQYXJhbXMgfCBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5PjtcclxuICAgICAgICBib2R5OiBhbnk7XHJcbiAgICAgICAgc3RhdHVzOiBudW1iZXI7XHJcbiAgICAgICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuICAgIH1cclxuPjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2luaXRMaXN0ZW5lcihnZW5lcmF0ZWQ6IEdlbmVyYXRlZEluaXQsIHJ1bnRpbWU6IGFueSwgZXhlY3V0ZXI6IFJldHVyblR5cGU8dHlwZW9mIF9faW5pdEV4ZWN1dGVyPikge1xyXG4gICAgY29uc3QgcG9ydCA9IHJ1bnRpbWUucG9ydDtcclxuICAgIGNvbnN0IHRyaWUgPSBuZXcgVHJpZTxhbnk+KCk7XHJcbiAgICBjb25zdCBmZXRjaCA9IGFzeW5jIChvcHRpb25zOiB7XHJcbiAgICAgICAgcmVxdWVzdDogTWlsa2lvSHR0cFJlcXVlc3Q7XHJcbiAgICAgICAgZW52TW9kZT86IHN0cmluZztcclxuICAgICAgICBlbnY/OiBSZWNvcmQ8YW55LCBhbnk+O1xyXG4gICAgICAgIHJvdXRlU2NoZW1hPzogYW55O1xyXG4gICAgfSk6IFByb21pc2U8UmVzcG9uc2U+ID0+IHtcclxuICAgICAgICBpZiAob3B0aW9ucy5yZXF1ZXN0Lm1ldGhvZCA9PT0gXCJPUFRJT05TXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSh1bmRlZmluZWQsIHtcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcIjogcnVudGltZS5jb3JzPy5jb3JzQWxsb3dNZXRob2RzID8/IFwiKlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXCI6IHJ1bnRpbWUuY29ycz8uY29yc0FsbG93T3JpZ2luID8/IFwiKlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVyc1wiOiBydW50aW1lLmNvcnM/LmNvcnNBbGxvd0hlYWRlcnMgPz8gXCIqXCIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLnJlcXVlc3QudXJsLmVuZHNXaXRoKFwiL2dlbmVyYXRlXzIwNFwiKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogMjA0LFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIFNlcnZlcjogXCJtaWxraW9cIixcclxuICAgICAgICAgICAgICAgICAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcIjogcnVudGltZS5jb3JzPy5jb3JzQWxsb3dNZXRob2RzID8/IFwiKlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXCI6IHJ1bnRpbWUuY29ycz8uY29yc0FsbG93T3JpZ2luID8/IFwiKlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVyc1wiOiBydW50aW1lLmNvcnM/LmNvcnNBbGxvd0hlYWRlcnMgPz8gXCIqXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJDYWNoZS1Db250cm9sXCI6IFwibm8tc3RvcmVcIixcclxuICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBgdGV4dC9wbGFpbjsgdGltZT0ke0RhdGUubm93KCl9YCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChvcHRpb25zLnJlcXVlc3QudXJsKTtcclxuICAgICAgICBsZXQgcGF0aEFycmF5ID0gdXJsLnBhdGhuYW1lLnN1YnN0cmluZygxKS5zcGxpdChcIi9cIik7XHJcbiAgICAgICAgaWYgKHJ1bnRpbWUuYWNjZXNzS2V5ICYmIHBhdGhBcnJheS5hdCgwKSAhPT0gcnVudGltZS5hY2Nlc3NLZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSh1bmRlZmluZWQsIHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogNDAzLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kc1wiOiBydW50aW1lLmNvcnM/LmNvcnNBbGxvd01ldGhvZHMgPz8gXCIqXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5cIjogcnVudGltZS5jb3JzPy5jb3JzQWxsb3dPcmlnaW4gPz8gXCIqXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzXCI6IHJ1bnRpbWUuY29ycz8uY29yc0FsbG93SGVhZGVycyA/PyBcIipcIixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocnVudGltZS5pZ25vcmVQYXRoTGV2ZWwgIT09IHVuZGVmaW5lZCAmJiBydW50aW1lLmlnbm9yZVBhdGhMZXZlbCAhPT0gMCkgcGF0aEFycmF5ID0gcGF0aEFycmF5LnNsaWNlKHJ1bnRpbWUuaWdub3JlUGF0aExldmVsKTtcclxuICAgICAgICBjb25zdCBwYXRoU3RyaW5nID0gYC8ke3BhdGhBcnJheS5qb2luKFwiL1wiKX1gO1xyXG5cclxuICAgICAgICBjb25zdCBleGVjdXRlSWQgPSBydW50aW1lPy5leGVjdXRlSWQgPyBhd2FpdCBydW50aW1lLmV4ZWN1dGVJZChvcHRpb25zLnJlcXVlc3QuaGVhZGVycykgOiBfX2NyZWF0ZUlkKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcihydW50aW1lLCBwYXRoU3RyaW5nLCBleGVjdXRlSWQpO1xyXG4gICAgICAgIHJ1bnRpbWUucnVudGltZS5yZXF1ZXN0LnNldChleGVjdXRlSWQsIHsgbG9nZ2VyIH0pO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBNaWxraW9IdHRwUmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgIGJvZHk6IFwiXCIsXHJcbiAgICAgICAgICAgIHN0YXR1czogMjAwLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHNcIjogcnVudGltZS5jb3JzPy5jb3JzQWxsb3dNZXRob2RzID8/IFwiKlwiLFxyXG4gICAgICAgICAgICAgICAgXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5cIjogcnVudGltZS5jb3JzPy5jb3JzQWxsb3dPcmlnaW4gPz8gXCIqXCIsXHJcbiAgICAgICAgICAgICAgICBcIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnNcIjogcnVudGltZS5jb3JzPy5jb3JzQWxsb3dIZWFkZXJzID8/IFwiKlwiLFxyXG4gICAgICAgICAgICAgICAgXCJDYWNoZS1Db250cm9sXCI6IFwibm8tc3RvcmVcIixcclxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBmaW5hbGVzOiBBcnJheTwoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPj4gPSBbXTtcclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGh0dHAgPSAoYXdhaXQgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXAgPSBydW50aW1lLnJlYWxJcCA/IHJ1bnRpbWUucmVhbElwKG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzKSA6IFwiOjoxXCI7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgIHN0cmluZzogYXdhaXQgb3B0aW9ucy5yZXF1ZXN0LnRleHQoKSxcclxuICAgICAgICAgICAgICAgIHBhcnNlZDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHVybCxcclxuICAgICAgICAgICAgICAgIGlwLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogeyBzdHJpbmc6IHBhdGhTdHJpbmcgYXMga2V5b2YgJHR5cGVzW1wiZ2VuZXJhdGVkXCJdW1wicm91dGVTY2hlbWFcIl0sIGFycmF5OiBwYXRoQXJyYXkgfSxcclxuICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3Q6IG9wdGlvbnMucmVxdWVzdCxcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxyXG4gICAgICAgICAgICB9IGFzIENvbnRleHRIdHRwO1xyXG4gICAgICAgIH0pKCkpITtcclxuXHJcbiAgICAgICAgY29uc3QgY29udGV4dDogYW55ID0geyByZWplY3QgfTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBydW50aW1lLmVtaXQoXCJtaWxraW86aHR0cFJlcXVlc3RcIiwgeyBleGVjdXRlSWQsIGxvZ2dlciwgcGF0aDogaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsIGh0dHAsIHJlamVjdCB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuZ2V0KFwiQWNjZXB0XCIpPy5zdGFydHNXaXRoKFwidGV4dC9ldmVudC1zdHJlYW1cIikpIHtcclxuICAgICAgICAgICAgICAgIC8vIGFjdGlvblxyXG4gICAgICAgICAgICAgICAgbGV0IHJvdXRlU2NoZW1hID0gb3B0aW9ucy5yb3V0ZVNjaGVtYTtcclxuICAgICAgICAgICAgICAgIGlmICghcm91dGVTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgICAgICByb3V0ZVNjaGVtYSA9IHRyaWUuZ2V0KGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocm91dGVTY2hlbWEgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVTY2hlbWEgPSBnZW5lcmF0ZWQucm91dGVTY2hlbWE/LltodHRwLnBhdGguc3RyaW5nXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlU2NoZW1hID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJ1bnRpbWUuZW1pdChcIm1pbGtpbzpodHRwTm90Rm91bmRcIiwgeyBleGVjdXRlSWQsIGxvZ2dlciwgcGF0aDogaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsIGh0dHAsIHJlamVjdCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlamVjdChcIk5PVF9GT1VORFwiLCB7IHBhdGg6IGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygcm91dGVTY2hlbWEubW9kdWxlICE9PSBcImZ1bmN0aW9uXCIpIHJvdXRlU2NoZW1hLm1vZHVsZSA9IGF3YWl0IHJvdXRlU2NoZW1hLm1vZHVsZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSByb3V0ZVNjaGVtYS5tb2R1bGUgPSBhd2FpdCByb3V0ZVNjaGVtYS5tb2R1bGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZS5hZGQoaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsIHJvdXRlU2NoZW1hKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZVNjaGVtYS50eXBlICE9PSBcImFjdGlvblwiKSB0aHJvdyByZWplY3QoXCJVTkFDQ0VQVEFCTEVcIiwgeyBleHBlY3RlZDogXCJzdHJlYW1cIiwgbWVzc2FnZTogYE5vdCBhY2NlcHRhYmxlLCB0aGUgQWNjZXB0IGluIHRoZSByZXF1ZXN0IGhlYWRlciBzaG91bGQgYmUgXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiLiBJZiB5b3UgYXJlIHVzaW5nIHRoZSBcIkBtaWxraW8vc3RhcmdhdGVcIiBwYWNrYWdlLCBwbGVhc2UgYWRkIFxcYHR5cGU6IFwic3RyZWFtXCJcXGAgdG8gdGhlIGV4ZWN1dGUgb3B0aW9ucy5gIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRleHQuaHR0cCA9IGh0dHA7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmhlYWRlcnMgPSBodHRwLnJlcXVlc3QuaGVhZGVycztcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBleGVjdXRlZCA9IGF3YWl0IGV4ZWN1dGVyLl9fZXhlY3V0ZShyb3V0ZVNjaGVtYSwge1xyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRFeGVjdXRlSWQ6IGV4ZWN1dGVJZCxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkTG9nZ2VyOiBsb2dnZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMgYXMgSGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogaHR0cC5wYXJhbXMuc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtc1R5cGU6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGZpbmFsZXMgPSBleGVjdXRlZC5maW5hbGVzO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5ib2R5ID09PSBcIlwiICYmIGV4ZWN1dGVkLnJlc3VsdHMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleGVjdXRlZC5lbXB0eVJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5ib2R5ID0gYHtcImRhdGFcIjp7fSxcImV4ZWN1dGVJZFwiOlwiJHtleGVjdXRlSWR9XCIsXCJzdWNjZXNzXCI6dHJ1ZX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXhlY3V0ZWQucmVzdWx0c1R5cGVTYWZldHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuYm9keSA9IGB7XCJkYXRhXCI6JHtyb3V0ZVNjaGVtYS5yZXN1bHRzVG9KU09OKGV4ZWN1dGVkLnJlc3VsdHMudmFsdWUpfSxcImV4ZWN1dGVJZFwiOlwiJHtleGVjdXRlSWR9XCIsXCJzdWNjZXNzXCI6dHJ1ZX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmJvZHkgPSBge1wiZGF0YVwiOiR7SlNPTi5zdHJpbmdpZnkoZXhlY3V0ZWQucmVzdWx0cy52YWx1ZSl9LFwiZXhlY3V0ZUlkXCI6XCIke2V4ZWN1dGVJZH1cIixcInN1Y2Nlc3NcIjp0cnVlfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGF3YWl0IHJ1bnRpbWUuZW1pdChcIm1pbGtpbzpodHRwUmVzcG9uc2VcIiwgeyBleGVjdXRlSWQsIGxvZ2dlciwgcGF0aDogaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsIGh0dHAsIGhlYWRlcnM6IGh0dHAucmVxdWVzdC5oZWFkZXJzLCBjb250ZXh0OiBleGVjdXRlZC5jb250ZXh0LCBzdWNjZXNzOiB0cnVlLCByZWplY3QgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGZpbmFsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiQW4gZXJyb3Igb2NjdXJyZWQgaW5zaWRlIG9uRmluYWxseS5cIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBydW50aW1lLnJ1bnRpbWUucmVxdWVzdC5kZWxldGUoZXhlY3V0ZUlkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UocmVzcG9uc2UuYm9keSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gc3RyZWFtXHJcbiAgICAgICAgICAgICAgICBsZXQgcm91dGVTY2hlbWEgPSBvcHRpb25zLnJvdXRlU2NoZW1hO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyb3V0ZVNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdXRlU2NoZW1hID0gdHJpZS5nZXQoaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3V0ZVNjaGVtYSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZVNjaGVtYSA9IGdlbmVyYXRlZC5yb3V0ZVNjaGVtYT8uW2h0dHAucGF0aC5zdHJpbmddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm91dGVTY2hlbWEgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcnVudGltZS5lbWl0KFwibWlsa2lvOmh0dHBOb3RGb3VuZFwiLCB7IGV4ZWN1dGVJZCwgbG9nZ2VyLCBwYXRoOiBodHRwLnBhdGguc3RyaW5nIGFzIHN0cmluZywgaHR0cCwgcmVqZWN0IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVqZWN0KFwiTk9UX0ZPVU5EXCIsIHsgcGF0aDogaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByb3V0ZVNjaGVtYS5tb2R1bGUgIT09IFwiZnVuY3Rpb25cIikgcm91dGVTY2hlbWEubW9kdWxlID0gYXdhaXQgcm91dGVTY2hlbWEubW9kdWxlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJvdXRlU2NoZW1hLm1vZHVsZSA9IGF3YWl0IHJvdXRlU2NoZW1hLm1vZHVsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmllLmFkZChodHRwLnBhdGguc3RyaW5nIGFzIHN0cmluZywgcm91dGVTY2hlbWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocm91dGVTY2hlbWEudHlwZSAhPT0gXCJzdHJlYW1cIikgdGhyb3cgcmVqZWN0KFwiVU5BQ0NFUFRBQkxFXCIsIHsgZXhwZWN0ZWQ6IFwic3RyZWFtXCIsIG1lc3NhZ2U6IGBOb3QgYWNjZXB0YWJsZSwgdGhlIEFjY2VwdCBpbiB0aGUgcmVxdWVzdCBoZWFkZXIgc2hvdWxkIGJlIFwiYXBwbGljYXRpb24vanNvblwiLiBJZiB5b3UgYXJlIHVzaW5nIHRoZSBcIkBtaWxraW8vc3RhcmdhdGVcIiBwYWNrYWdlLCBwbGVhc2UgcmVtb3ZlIFxcYHR5cGU6IFwic3RyZWFtXCJcXGAgdG8gdGhlIGV4ZWN1dGUgb3B0aW9ucy5gIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZUNsb3NlID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUucnVudGltZS5yZXF1ZXN0LmRlbGV0ZShleGVjdXRlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBmaW5hbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJBbiBlcnJvciBvY2N1cnJlZCBpbnNpZGUgb25GaW5hbGx5LlwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRleHQuaHR0cCA9IGh0dHA7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmhlYWRlcnMgPSBodHRwLnJlcXVlc3QuaGVhZGVycztcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBleGVjdXRlZCA9IGF3YWl0IGV4ZWN1dGVyLl9fZXhlY3V0ZShyb3V0ZVNjaGVtYSwge1xyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRFeGVjdXRlSWQ6IGV4ZWN1dGVJZCxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkTG9nZ2VyOiBsb2dnZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMgYXMgSGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogaHR0cC5wYXJhbXMuc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtc1R5cGU6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGZpbmFsZXMgPSBleGVjdXRlZC5maW5hbGVzO1xyXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZTogYnVuXHJcbiAgICAgICAgICAgICAgICBsZXQgc3RyZWFtOiBSZWFkYWJsZVN0cmVhbTtcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmU6IGJ1blxyXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRyb2w6IFJlYWRhYmxlU3RyZWFtRGlyZWN0Q29udHJvbGxlciB8IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZTogYnVuXHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEJ1biAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmU6IGJ1blxyXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZGlyZWN0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmU6IGJ1blxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXI6IFJlYWRhYmxlU3RyZWFtRGlyZWN0Q29udHJvbGxlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbCA9IGNvbnRyb2xsZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIud3JpdGUoYGRhdGE6QCR7SlNPTi5zdHJpbmdpZnkoeyBzdWNjZXNzOiB0cnVlLCBkYXRhOiB1bmRlZmluZWQsIGV4ZWN1dGVJZCB9IHNhdGlzZmllcyBNaWxraW9SZXNwb25zZVN1Y2Nlc3M8YW55Pil9XFxuXFxuYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiBleGVjdXRlZC5yZXN1bHRzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5yZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KFtudWxsLCB2YWx1ZV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci53cml0ZShgZGF0YToke3Jlc3VsdH1cXG5cXG5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVkLnJlc3VsdHMudmFsdWUucmV0dXJuKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGNlcHRpb24gPSBleGNlcHRpb25IYW5kbGVyKGV4ZWN1dGVJZCwgbG9nZ2VyLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbZXhjZXB0aW9uLmNvZGVdID0gZXhjZXB0aW9uLnJlamVjdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLndyaXRlKGBkYXRhOiR7SlNPTi5zdHJpbmdpZnkoW3Jlc3VsdCwgbnVsbF0pfVxcblxcbmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgY2FuY2VsKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9IGFzIGFueSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vZGUuanMgb3Igb3RoZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZTogYnVuXHJcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZTogYnVuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbCA9IGNvbnRyb2xsZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShgZGF0YTpAJHtKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGRhdGE6IHVuZGVmaW5lZCwgZXhlY3V0ZUlkIH0gc2F0aXNmaWVzIE1pbGtpb1Jlc3BvbnNlU3VjY2Vzczxhbnk+KX1cXG5cXG5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbHVlIG9mIGV4ZWN1dGVkLnJlc3VsdHMudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoW251bGwsIHZhbHVlXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoYGRhdGE6JHtyZXN1bHR9XFxuXFxuYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlZC5yZXN1bHRzLnZhbHVlLnJldHVybih1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhjZXB0aW9uID0gZXhjZXB0aW9uSGFuZGxlcihleGVjdXRlSWQsIGxvZ2dlciwgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2V4Y2VwdGlvbi5jb2RlXSA9IGV4Y2VwdGlvbi5yZWplY3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGBkYXRhOiR7SlNPTi5zdHJpbmdpZnkoW3Jlc3VsdCwgbnVsbF0pfVxcblxcbmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgY2FuY2VsKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9IGFzIGFueSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuYm9keSA9IHN0cmVhbTtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcInRleHQvZXZlbnQtc3RyZWFtXCI7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZS5oZWFkZXJzW1wiQ2FjaGUtQ29udHJvbFwiXSA9IFwibm8tY2FjaGVcIjtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCBydW50aW1lLmVtaXQoXCJtaWxraW86aHR0cFJlc3BvbnNlXCIsIHsgZXhlY3V0ZUlkLCBsb2dnZXIsIHBhdGg6IGh0dHAucGF0aC5zdHJpbmcgYXMgc3RyaW5nLCBodHRwLCBoZWFkZXJzOiBodHRwLnJlcXVlc3QuaGVhZGVycywgY29udGV4dDogZXhlY3V0ZWQuY29udGV4dCwgc3VjY2VzczogdHJ1ZSwgcmVqZWN0IH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UocmVzcG9uc2UuYm9keSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0czogUmVzdWx0czxNaWxraW9SZXNwb25zZVJlamVjdD4gPSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXhjZXB0aW9uSGFuZGxlcihleGVjdXRlSWQsIGxvZ2dlciwgZXJyb3IpLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0cy52YWx1ZSAhPT0gdW5kZWZpbmVkKSByZXNwb25zZS5ib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVzdWx0cy52YWx1ZSk7XHJcbiAgICAgICAgICAgIGF3YWl0IHJ1bnRpbWUuZW1pdChcIm1pbGtpbzpodHRwUmVzcG9uc2VcIiwgeyBleGVjdXRlSWQsIGxvZ2dlciwgcGF0aDogaHR0cC5wYXRoLnN0cmluZyBhcyBzdHJpbmcsIGh0dHAsIGhlYWRlcnM6IGh0dHAucmVxdWVzdC5oZWFkZXJzLCBjb250ZXh0LCBzdWNjZXNzOiBmYWxzZSwgcmVqZWN0IH0pO1xyXG4gICAgICAgICAgICBydW50aW1lLnJ1bnRpbWUucmVxdWVzdC5kZWxldGUoZXhlY3V0ZUlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShyZXNwb25zZS5ib2R5LCByZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzdHJlYW1DbG9zZXJzOiBNYXA8c3RyaW5nLCB7IGdlbmVyYXRvcjogQXN5bmNHZW5lcmF0b3I7IGhhbmRsZUNsb3NlOiBhbnkgfT4gPSBuZXcgTWFwKCk7XHJcbiAgICBjb25zdCBoYW5kbGVNZXNzYWdlID0gYXN5bmMgKFxyXG4gICAgICAgIHBvcnQ6IHsgcG9zdE1lc3NhZ2UobWVzc2FnZTogYW55KTogdm9pZCB9LFxyXG4gICAgICAgIG9wdGlvbnM6XHJcbiAgICAgICAgICAgIHwge1xyXG4gICAgICAgICAgICAgICAgZXhlY3V0ZUlkOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICBwYXRoOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXM/OiBSZWNvcmQ8YW55LCBhbnk+O1xyXG4gICAgICAgICAgICAgICAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfCBzdHJpbmcsXHJcbiAgICApID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IFwiUElOR1wiKSB7XHJcbiAgICAgICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKFwiUE9OR1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdGFydHNXaXRoKFwiQ0xPU0VfU1RSRUFNOlwiKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY3V0ZUlkID0gb3B0aW9ucy5zcGxpdChcIkNMT1NFX1NUUkVBTTpcIilbMV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW1DbG9zZXIgPSBzdHJlYW1DbG9zZXJzLmdldChleGVjdXRlSWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0cmVhbUNsb3Nlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbUNsb3Nlci5nZW5lcmF0b3IucmV0dXJuKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtQ2xvc2VyLmhhbmRsZUNsb3NlKFwic3RyZWFtXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJvdXRlU2NoZW1hID0gdHJpZS5nZXQob3B0aW9ucy5wYXRoKTtcclxuICAgICAgICBpZiAocm91dGVTY2hlbWEgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcm91dGVTY2hlbWEgPSBnZW5lcmF0ZWQucm91dGVTY2hlbWE/LltvcHRpb25zLnBhdGhdO1xyXG4gICAgICAgICAgICBpZiAocm91dGVTY2hlbWEgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgcmVqZWN0KFwiTk9UX0ZPVU5EXCIsIHsgcGF0aDogb3B0aW9ucy5wYXRoIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygcm91dGVTY2hlbWEubW9kdWxlICE9PSBcImZ1bmN0aW9uXCIpIHJvdXRlU2NoZW1hLm1vZHVsZSA9IGF3YWl0IHJvdXRlU2NoZW1hLm1vZHVsZTtcclxuICAgICAgICAgICAgZWxzZSByb3V0ZVNjaGVtYS5tb2R1bGUgPSBhd2FpdCByb3V0ZVNjaGVtYS5tb2R1bGUoKTtcclxuICAgICAgICAgICAgdHJpZS5hZGQob3B0aW9ucy5wYXRoLCByb3V0ZVNjaGVtYSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKTtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSBvcHRpb25zLnBhcmFtcyA/PyB7fTtcclxuICAgICAgICBjb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIocnVudGltZSwgb3B0aW9ucy5wYXRoLCBvcHRpb25zLmV4ZWN1dGVJZCk7XHJcbiAgICAgICAgbGV0IGZpbmFsZXM6IEFycmF5PCgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+PiA9IFtdO1xyXG5cclxuICAgICAgICBjb25zdCBodHRwID0gbmV3IFByb3h5KFxyXG4gICAgICAgICAgICB7fSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiAodGFyZ2V0LCBwcm9wZXJ0eSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PT0gXCJub3RGb3VuZFwiKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IHJlamVjdChcIlVOQUNDRVBUQUJMRVwiLCB7IGV4cGVjdGVkOiBcImNvbnRleHQuaHR0cFwiLCBtZXNzYWdlOiBcIlRoaXMgcmVxdWVzdCB3YXMgaW52b2tlZCB0aHJvdWdoIHRoZSBleGVjdXRlIG1ldGhvZC4gU2luY2Ugbm8gYWN0dWFsIHJlcXVlc3Qgd2FzIGdlbmVyYXRlZCwgdGhlIEhUVFAgbWV0aG9kcyB1bmRlciB0aGUgY29udGV4dCBjYW5ub3QgYmUgYWNjZXNzZWQuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGhhbmRsZUNsb3NlID0gYXN5bmMgKHR5cGU6IFwiYWN0aW9uXCIgfCBcInN0cmVhbVwiKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSBcInN0cmVhbVwiKSBzdHJlYW1DbG9zZXJzLmRlbGV0ZShvcHRpb25zLmV4ZWN1dGVJZCk7XHJcbiAgICAgICAgICAgIHJ1bnRpbWUucnVudGltZS5yZXF1ZXN0LmRlbGV0ZShvcHRpb25zLmV4ZWN1dGVJZCk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBmaW5hbGVzKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZXIoKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiQW4gZXJyb3Igb2NjdXJyZWQgaW5zaWRlIG9uRmluYWxseS5cIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHsgaHR0cDogaHR0cCwgaGVhZGVycywgcmVqZWN0IH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyb3V0ZVNjaGVtYS50eXBlID09PSBcImFjdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBleGVjdXRlZCA9IGF3YWl0IGV4ZWN1dGVyLl9fZXhlY3V0ZShyb3V0ZVNjaGVtYSwge1xyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRFeGVjdXRlSWQ6IG9wdGlvbnMuZXhlY3V0ZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRMb2dnZXI6IGxvZ2dlcixcclxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBvcHRpb25zLnBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVycyxcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXNUeXBlOiBcInJhd1wiLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBmaW5hbGVzID0gZXhlY3V0ZWQuZmluYWxlcztcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDbG9zZShcImFjdGlvblwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZXhlY3V0ZWQuZW1wdHlSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUlkOiBvcHRpb25zLmV4ZWN1dGVJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUlkOiBvcHRpb25zLmV4ZWN1dGVJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZXhlY3V0ZWQucmVzdWx0cy52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocm91dGVTY2hlbWEudHlwZSA9PT0gXCJzdHJlYW1cIikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY3V0ZWQgPSBhd2FpdCBleGVjdXRlci5fX2V4ZWN1dGUocm91dGVTY2hlbWEsIHtcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRXhlY3V0ZUlkOiBvcHRpb25zLmV4ZWN1dGVJZCxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkTG9nZ2VyOiBsb2dnZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogb3B0aW9ucy5wYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zVHlwZTogXCJyYXdcIixcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZmluYWxlcyA9IGV4ZWN1dGVkLmZpbmFsZXM7XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogdW5kZWZpbmVkLCBleGVjdXRlSWQ6IG9wdGlvbnMuZXhlY3V0ZUlkLCBkb25lOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICBzdHJlYW1DbG9zZXJzLnNldChvcHRpb25zLmV4ZWN1dGVJZCwgeyBnZW5lcmF0b3I6IGV4ZWN1dGVkLnJlc3VsdHMudmFsdWUsIGhhbmRsZUNsb3NlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgdmFsdWUgb2YgZXhlY3V0ZWQucmVzdWx0cy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geyBzdWNjZXNzOiB0cnVlLCBkYXRhOiBbbnVsbCwgdmFsdWVdLCBleGVjdXRlSWQ6IG9wdGlvbnMuZXhlY3V0ZUlkLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogdW5kZWZpbmVkLCBleGVjdXRlSWQ6IG9wdGlvbnMuZXhlY3V0ZUlkLCBkb25lOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGNlcHRpb24gPSBleGNlcHRpb25IYW5kbGVyKG9wdGlvbnMuZXhlY3V0ZUlkLCBsb2dnZXIsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtleGNlcHRpb24uY29kZV0gPSBleGNlcHRpb24ucmVqZWN0O1xyXG4gICAgICAgICAgICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoeyBzdWNjZXNzOiB0cnVlLCBkYXRhOiBbcmVzdWx0LCBudWxsXSwgZXhlY3V0ZUlkOiBvcHRpb25zLmV4ZWN1dGVJZCwgZG9uZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNsb3NlKFwic3RyZWFtXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZXhjZXB0aW9uSGFuZGxlcihvcHRpb25zLmV4ZWN1dGVJZCwgbG9nZ2VyLCBlcnJvcik7XHJcbiAgICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoeyBzdWNjZXNzOiBmYWxzZSwgZGF0YTogdW5kZWZpbmVkLCBlcnJvcjogcmVzdWx0LCBleGVjdXRlSWQ6IG9wdGlvbnMuZXhlY3V0ZUlkLCBkb25lOiB0cnVlIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBwb3J0LFxyXG4gICAgICAgIGZldGNoLFxyXG4gICAgICAgIGhhbmRsZU1lc3NhZ2UsXHJcbiAgICB9O1xyXG59XHJcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBNaWxraW9SZXNwb25zZVJlamVjdCwgTG9nZ2VyIH0gZnJvbSBcIi4uL2luZGV4LnRzXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlICRyZWplY3RDb2RlIHtcclxuICAgIFJFUVVFU1RfRkFJTDogYW55O1xyXG4gICAgTk9UX0RFVkVMT1BfTU9ERTogc3RyaW5nO1xyXG4gICAgUkVRVUVTVF9USU1FT1VUOiB7IHRpbWVvdXQ6IG51bWJlcjsgbWVzc2FnZTogc3RyaW5nIH07XHJcbiAgICBOT1RfRk9VTkQ6IHsgcGF0aDogc3RyaW5nIH07XHJcbiAgICBQQVJBTVNfVFlQRV9JTkNPUlJFQ1Q6IHsgcGF0aDogc3RyaW5nOyBleHBlY3RlZDogc3RyaW5nOyB2YWx1ZTogYW55OyBtZXNzYWdlOiBzdHJpbmcgfSB8IG51bGw7XHJcbiAgICBSRVNVTFRTX1RZUEVfSU5DT1JSRUNUOiB7IHBhdGg6IHN0cmluZzsgZXhwZWN0ZWQ6IHN0cmluZzsgdmFsdWU6IGFueTsgbWVzc2FnZTogc3RyaW5nIH0gfCBudWxsO1xyXG4gICAgVU5BQ0NFUFRBQkxFOiB7IGV4cGVjdGVkOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9O1xyXG4gICAgUEFSQU1TX1RZUEVfTk9UX1NVUFBPUlRFRDogeyBleHBlY3RlZDogc3RyaW5nIH07XHJcbiAgICBSRVNVTFRTX1RZUEVfTk9UX1NVUFBPUlRFRDogeyBleHBlY3RlZDogc3RyaW5nIH07XHJcbiAgICBJTlRFUk5BTF9TRVJWRVJfRVJST1I6IHVuZGVmaW5lZDtcclxuICAgIE1FVEhPRF9OT1RfQUxMT1dFRDogdW5kZWZpbmVkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVqZWN0PENvZGUgZXh0ZW5kcyBrZXlvZiAkcmVqZWN0Q29kZSwgUmVqZWN0RGF0YSBleHRlbmRzICRyZWplY3RDb2RlW0NvZGVdPihjb2RlOiBDb2RlLCBkYXRhOiBSZWplY3REYXRhKTogTWlsa2lvUmVqZWN0RXJyb3I8Q29kZSwgUmVqZWN0RGF0YT4ge1xyXG4gICAgY29uc3QgZXJyb3IgPSB7ICRtaWxraW9SZWplY3Q6IHRydWUsIGNvZGUsIGRhdGEgfSBhcyBNaWxraW9SZWplY3RFcnJvcjxDb2RlLCBSZWplY3REYXRhPjtcclxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVycm9yKTtcclxuICAgIHJldHVybiBlcnJvcjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgTWlsa2lvUmVqZWN0RXJyb3I8Q29kZSBleHRlbmRzIGtleW9mICRyZWplY3RDb2RlID0ga2V5b2YgJHJlamVjdENvZGUsIFJlamVjdERhdGEgZXh0ZW5kcyAkcmVqZWN0Q29kZVtDb2RlXSA9ICRyZWplY3RDb2RlW0NvZGVdPiA9IHsgY29kZTogQ29kZTsgZGF0YTogUmVqZWN0RGF0YTsgc3RhY2s6IHN0cmluZzsgJG1pbGtpb1JlamVjdDogdHJ1ZSB9O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGV4Y2VwdGlvbkhhbmRsZXIoZXhlY3V0ZUlkOiBzdHJpbmcsIGxvZ2dlcjogTG9nZ2VyLCBlcnJvcjogTWlsa2lvUmVqZWN0RXJyb3I8YW55LCBhbnk+IHwgYW55KTogTWlsa2lvUmVzcG9uc2VSZWplY3Qge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBpZiAoXCJ2aXRlU2VydmVyXCIgaW4gZ2xvYmFsVGhpcykgKGdsb2JhbFRoaXMgYXMgYW55KS52aXRlU2VydmVyPy5zc3JGaXhTdGFja3RyYWNlKGVycm9yKTsgLy8gZml4IHZpdGUgc3NyIHN0YWNrdHJhY2VcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7IH1cclxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIFwidml0ZVNlcnZlclwiIGluIGdsb2JhbFRoaXMpIChnbG9iYWxUaGlzIGFzIGFueSkudml0ZVNlcnZlci5zc3JGaXhTdGFja3RyYWNlKGVycm9yKTtcclxuICAgIGNvbnN0IG5hbWUgPSBlcnJvcj8uY29kZSA/PyBlcnJvcj8ubmFtZSA/PyBlcnJvcj8uY29uc3RydWN0b3I/Lm5hbWUgPz8gXCJVbm5hbWVkIEV4Y2VwdGlvblwiO1xyXG5cclxuICAgIGlmIChlcnJvcj8uJG1pbGtpb1JlamVjdCA9PT0gdHJ1ZSAmJiBlcnJvcj8uY29kZSA9PT0gXCJOT1RfRk9VTkRcIikge1xyXG4gICAgICAgIGxvZ2dlci5pbmZvKG5hbWUsIGVycm9yPy5kYXRhPy5wYXRoID8/IFwiVW5rbm93biBwYXRoXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFjayA9IGVycm9yPy4kbWlsa2lvUmVqZWN0ID8gKGVycm9yPy5zdGFjayA/PyBcIlwiKS5zcGxpdChcIlxcblwiKS5zbGljZSgyKS5qb2luKFwiXFxuXCIpIDogKGVycm9yPy5zdGFjayA/PyBcIlwiKTtcclxuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKG5hbWUsIGBcXG4ke0pTT04uc3RyaW5naWZ5KGVycm9yPy5kYXRhKX1gLCBgXFxuJHtzdGFja31cXG5gKTtcclxuICAgICAgICB9IGNhdGNoIChfKSB7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihuYW1lLCBgXFxuJHtlcnJvcj8udG9TdHJpbmcoKX1gLCBgXFxuJHtlcnJvcj8uc3RhY2t9XFxuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXN1bHQ6IE1pbGtpb1Jlc3BvbnNlUmVqZWN0O1xyXG5cclxuICAgIGlmIChlcnJvcj8uJG1pbGtpb1JlamVjdCA9PT0gdHJ1ZSkgcmVzdWx0ID0geyBzdWNjZXNzOiBmYWxzZSwgY29kZTogZXJyb3IuY29kZSwgcmVqZWN0OiBlcnJvci5kYXRhLCBleGVjdXRlSWQgfTtcclxuICAgIGVsc2UgcmVzdWx0ID0geyBzdWNjZXNzOiBmYWxzZSwgY29kZTogXCJJTlRFUk5BTF9TRVJWRVJfRVJST1JcIiwgcmVqZWN0OiB1bmRlZmluZWQsIGV4ZWN1dGVJZCB9O1xyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjtBQUFPLFNBQVMsSUFBNkIsQ0FBQyxTQUEyQjtBQUFBLEVBQ3ZFLE9BQU8sUUFBUTtBQUFBOztBQ1VWLFNBQVMsVUFBMEMsQ0FBQyxPQUErQjtBQUFBLEVBQ3hGLE9BQU87QUFBQSxJQUNMLE1BQU0sT0FBTyxFQUFFLGFBQWEsZUFBZSxNQUFNO0FBQUEsRUFDbkQ7QUFBQTs7QUNkSyxTQUFTLE1BQThCLENBQUMsU0FBMEI7QUFBQSxFQUN2RSxPQUFPO0FBQUE7QUFTRixTQUFTLFdBQVcsQ0FBQyxPQUFvQyxjQUFzQjtBQUFBLEVBQ3BGLElBQUksVUFBVTtBQUFBLElBQVcsT0FBTztBQUFBLEVBRWhDLE9BQU8sR0FBRztBQUFBO0FBR0wsU0FBUyxXQUFXLENBQUMsT0FBMkIsY0FBc0I7QUFBQSxFQUMzRSxJQUFJLFVBQVU7QUFBQSxJQUFXLE9BQU87QUFBQSxFQUVoQyxPQUFPLE9BQU8sU0FBUyxPQUFPLEVBQUU7QUFBQTtBQUczQixTQUFTLFlBQVksQ0FBQyxPQUFvQyxjQUF1QjtBQUFBLEVBQ3RGLElBQUksVUFBVTtBQUFBLElBQVEsT0FBTztBQUFBLEVBRTdCLElBQUksVUFBVTtBQUFBLElBQVMsT0FBTztBQUFBLEVBRTlCLElBQUksVUFBVTtBQUFBLElBQUksT0FBTztBQUFBLEVBRXpCLElBQWtCLFVBQWQ7QUFBQSxJQUFxQixPQUFPO0FBQUEsRUFFaEMsT0FBTyxRQUFRLEtBQUs7QUFBQTs7QUMvQmYsU0FBUyxhQUFhLENBQUMsU0FB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QUFPO0FBQUEsTUFDWixNQUFNLFNBQVMsaUJBQWlCLFFBQVEsV0FBVyxRQUFRLEtBQUs7QUFBQSxNQUNoRSxNQUFLLFlBQVksRUFBRSxTQUFTLE9BQU8sTUFBTSxXQUFXLE9BQU8sUUFBUSxXQUFXLFFBQVEsV0FBVyxNQUFNLEtBQUssQ0FBQztBQUFBO0FBQUE7QUFBQSxFQUlySCxPQUFPO0FBQUEsSUFDSDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDSjtBQUFBOztBQ2xhRyxTQUFTLE1BQTRFLENBQUMsTUFBWSxNQUF1RDtBQUFBLEVBQzVKLE1BQU0sUUFBUSxFQUFFLGVBQWUsTUFBTSxNQUFNLEtBQUs7QUFBQSxFQUNoRCxNQUFNLGtCQUFrQixLQUFLO0FBQUEsRUFDN0IsT0FBTztBQUFBO0FBS0osU0FBUyxnQkFBZ0IsQ0FBQyxXQUFtQixRQUFnQixPQUFnRTtBQUFBLEVBQ2hJLElBQUk7QUFBQSxJQUNBLElBQUksZ0JBQWdCO0FBQUEsTUFBYSxXQUFtQixZQUFZLGlCQUFpQixLQUFLO0FBQUEsSUFDeEYsT0FBTyxRQUFPO0FBQUEsRUFDaEIsSUFBSSxpQkFBaUIsU0FBUyxnQkFBZ0I7QUFBQSxJQUFhLFdBQW1CLFdBQVcsaUJBQWlCLEtBQUs7QUFBQSxFQUMvRyxNQUFNLE9BQU8sT0FBTyxRQUFRLE9BQU8sUUFBUSxPQUFPLGFBQWEsUUFBUTtBQUFBLEVBRXZFLElBQUksT0FBTyxrQkFBa0IsUUFBUSxPQUFPLFNBQVMsYUFBYTtBQUFBLElBQzlELE9BQU8sS0FBSyxNQUFNLE9BQU8sTUFBTSxRQUFRLGNBQWM7QUFBQSxFQUN6RCxFQUFPO0FBQUEsSUFDSCxJQUFJO0FBQUEsTUFDQSxNQUFNLFFBQVEsT0FBTyxpQkFBaUIsT0FBTyxTQUFTLElBQUksTUFBTTtBQUFBLENBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLO0FBQUEsQ0FBSSxJQUFLLE9BQU8sU0FBUztBQUFBLE1BQzdHLE9BQU8sTUFBTSxNQUFNO0FBQUEsRUFBSyxLQUFLLFVBQVUsT0FBTyxJQUFJLEtBQUs7QUFBQSxFQUFLO0FBQUEsQ0FBUztBQUFBLE1BQ3ZFLE9BQU8sR0FBRztBQUFBLE1BQ1IsT0FBTyxNQUFNLE1BQU07QUFBQSxFQUFLLE9BQU8sU0FBUyxLQUFLO0FBQUEsRUFBSyxPQUFPO0FBQUEsQ0FBUztBQUFBO0FBQUE7QUFBQSxFQUkxRSxJQUFJO0FBQUEsRUFFSixJQUFJLE9BQU8sa0JBQWtCO0FBQUEsSUFBTSxTQUFTLEVBQUUsU0FBUyxPQUFPLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLFVBQVU7QUFBQSxFQUN6RztBQUFBLGFBQVMsRUFBRSxTQUFTLE9BQU8sTUFBTSx5QkFBeUIsUUFBUSxXQUFXLFVBQVU7QUFBQSxFQUU1RixPQUFPO0FBQUE7IiwKICAiZGVidWdJZCI6ICI2OEQxRkUxQjAyNEUyNDZGNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|