@ditojs/admin 2.43.0 → 2.45.0
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/dist/dito-admin.es.js +30 -36
- package/dist/dito-admin.umd.js +2 -2
- package/package.json +34 -34
- package/src/components/DitoTreeItem.vue +26 -25
- package/src/types/DitoTypeList.vue +1 -1
package/dist/dito-admin.es.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
var bn = Object.defineProperty;
|
|
2
2
|
var yn = (e, t, s) => t in e ? bn(e, t, { enumerable: !0, configurable: !0, writable: !0, value: s }) : e[t] = s;
|
|
3
3
|
var dt = (e, t, s) => yn(e, typeof t != "symbol" ? t + "" : t, s);
|
|
4
|
-
import { reactive as Qe, toRaw as us, markRaw as kt, computed as ds,
|
|
4
|
+
import { reactive as Qe, toRaw as us, markRaw as kt, computed as ds, createElementBlock as h, openBlock as l, createElementVNode as p, createCommentVNode as m, Fragment as S, toDisplayString as V, renderList as L, normalizeClass as P, createVNode as k, renderSlot as I, Transition as Xe, withCtx as O, withDirectives as U, normalizeStyle as G, vShow as Z, mergeProps as T, vModelDynamic as $n, resolveComponent as g, createBlock as w, withModifiers as N, createTextVNode as te, vModelCheckbox as Vt, h as Ze, Comment as vn, useSlots as Dn, defineComponent as hs, ref as Ot, watch as wn, onScopeDispose as Sn, resolveDirective as _e, TransitionGroup as Cn, resolveDynamicComponent as x, Teleport as gt, isRef as Pn, toValue as Gt, nextTick as kn, vModelText as Bt, normalizeProps as Vn, guardReactiveProps as On, vModelRadio as Bn, vModelSelect as Tn, createApp as Ln } from "vue";
|
|
5
5
|
import { createRouter as En, createWebHistory as Fn } from "vue-router";
|
|
6
6
|
import Qt from "@kyvg/vue3-notification";
|
|
7
|
-
import { normalizeDataPath as ae,
|
|
7
|
+
import { normalizeDataPath as ae, isInteger as Me, getValueAtDataPath as $e, parseDataPath as ie, isFunction as E, isArray as M, isPlainObject as bt, isCreditCard as Rn, isEmail as In, isHostname as Mn, isDomain as jn, isUrl as Un, isString as z, asArray as J, camelize as ve, isRegExp as Tt, isObject as R, isDate as Lt, isNumber as de, isBoolean as cs, mapConcurrently as Te, isPromise as ps, isModule as Nn, assignDeeply as he, clone as xe, pickBy as ms, labelize as se, format as Le, equals as et, hyphenate as De, defaultFormats as Ee, getCommonPrefix as qn, stripTags as An, capitalize as Ve, deindent as zn, escapeHtml as Hn, debounceAsync as Wn, debounce as Kn, deprecate as Yn, isAbsoluteUrl as fs } from "@ditojs/utils";
|
|
8
8
|
import Jn, { delegate as Gn } from "tippy.js";
|
|
9
9
|
import { nanoid as Qn } from "nanoid";
|
|
10
|
-
import { unrefElement as gs, useVModel as Xn,
|
|
10
|
+
import { unrefElement as gs, useVModel as Xn, defaultDocument as Zn, tryOnMounted as _n, tryOnScopeDispose as xn } from "@vueuse/core";
|
|
11
11
|
import { createFocusTrap as eo } from "focus-trap";
|
|
12
12
|
import to from "sortablejs";
|
|
13
13
|
import so from "codeflask";
|
|
14
14
|
import yt from "tinycolor2";
|
|
15
15
|
import { Sketch as Et } from "@lk77/vue3-color";
|
|
16
16
|
import { raw as no } from "@ditojs/ui";
|
|
17
|
-
import { EditorContent as oo,
|
|
17
|
+
import { EditorContent as oo, Mark as ao, getMarkAttributes as io, Editor as ro } from "@tiptap/vue-3";
|
|
18
18
|
import { Document as Xt } from "@tiptap/extension-document";
|
|
19
19
|
import { Text as lo } from "@tiptap/extension-text";
|
|
20
20
|
import { Bold as uo } from "@tiptap/extension-bold";
|
|
@@ -932,16 +932,16 @@ const ct = {
|
|
|
932
932
|
Boolean: cs,
|
|
933
933
|
Number: de,
|
|
934
934
|
String: z,
|
|
935
|
-
Date:
|
|
935
|
+
Date: Lt,
|
|
936
936
|
Array: M,
|
|
937
937
|
Object: R,
|
|
938
|
-
RegExp:
|
|
938
|
+
RegExp: Tt,
|
|
939
939
|
Function: E
|
|
940
|
-
}, ua = (e) => !!e, da = (e) => +e, ha = (e) => String(e), ca = (e) =>
|
|
940
|
+
}, ua = (e) => !!e, da = (e) => +e, ha = (e) => String(e), ca = (e) => Lt(e) ? e : new Date(e), pa = (e) => M(e) ? e : z(e) ? e.split(",") : J(e), ma = (e) => R(e) ? e : (
|
|
941
941
|
// If a Object is expected but a Boolean provide, convert to an empty
|
|
942
942
|
// object. Used by `creatable` & co, that can be both.
|
|
943
943
|
e === !0 ? {} : null
|
|
944
|
-
), fa = (e) =>
|
|
944
|
+
), fa = (e) => Tt(e) ? e : new RegExp(e), ga = {
|
|
945
945
|
Boolean: ua,
|
|
946
946
|
Number: da,
|
|
947
947
|
String: ha,
|
|
@@ -5346,7 +5346,7 @@ const al = B.component("DitoSchema", {
|
|
|
5346
5346
|
const { componentsByDataPath: s } = this;
|
|
5347
5347
|
let n;
|
|
5348
5348
|
if (e) {
|
|
5349
|
-
const a = E(e) ? e :
|
|
5349
|
+
const a = E(e) ? e : Tt(e) ? (r) => e.test(r) : null;
|
|
5350
5350
|
n = a ? Object.keys(s).filter(a) : M(e) ? e : [e];
|
|
5351
5351
|
}
|
|
5352
5352
|
t && this.clearErrors();
|
|
@@ -7382,9 +7382,9 @@ function Bu(e, t, s, n, o, i) {
|
|
|
7382
7382
|
]) : m("", !0),
|
|
7383
7383
|
e.childrenSchema ? U((l(), w(d, {
|
|
7384
7384
|
key: 2,
|
|
7385
|
-
modelValue: e.updateOrder(e.childrenSchema, e.childrenList),
|
|
7386
7385
|
options: e.getDraggableOptions(!0),
|
|
7387
7386
|
draggable: e.childrenDraggable,
|
|
7387
|
+
modelValue: e.updateOrder(e.childrenSchema, e.childrenList),
|
|
7388
7388
|
"onUpdate:modelValue": t[3] || (t[3] = (c) => e.childrenList = c)
|
|
7389
7389
|
}, {
|
|
7390
7390
|
default: O(() => [
|
|
@@ -7402,7 +7402,7 @@ function Bu(e, t, s, n, o, i) {
|
|
|
7402
7402
|
}, null, 8, ["schema", "dataPath", "data", "path", "open", "active", "draggable", "label", "level"]))), 128))
|
|
7403
7403
|
]),
|
|
7404
7404
|
_: 1
|
|
7405
|
-
}, 8, ["
|
|
7405
|
+
}, 8, ["options", "draggable", "modelValue"])), [
|
|
7406
7406
|
[Z, e.opened]
|
|
7407
7407
|
]) : m("", !0)
|
|
7408
7408
|
], 14, Du);
|
|
@@ -7451,14 +7451,16 @@ const Tu = B.component("DitoTreeItem", {
|
|
|
7451
7451
|
},
|
|
7452
7452
|
childrenList: {
|
|
7453
7453
|
get() {
|
|
7454
|
-
|
|
7455
|
-
|
|
7456
|
-
return e && this.data[e];
|
|
7454
|
+
const { name: e, orderKey: t } = this.childrenSchema ?? {}, s = e && this.data[e];
|
|
7455
|
+
return s == null || s.map((n) => n[t]), s;
|
|
7457
7456
|
},
|
|
7458
7457
|
set(e) {
|
|
7459
7458
|
var s;
|
|
7460
7459
|
const t = (s = this.childrenSchema) == null ? void 0 : s.name;
|
|
7461
|
-
t && (this.data[t] =
|
|
7460
|
+
t && (this.data[t] = this.updateOrder(
|
|
7461
|
+
this.childrenSchema,
|
|
7462
|
+
e
|
|
7463
|
+
));
|
|
7462
7464
|
}
|
|
7463
7465
|
},
|
|
7464
7466
|
childrenDraggable() {
|
|
@@ -7484,19 +7486,11 @@ const Tu = B.component("DitoTreeItem", {
|
|
|
7484
7486
|
const { childrenSchema: e, childrenList: t } = this;
|
|
7485
7487
|
if (e && t) {
|
|
7486
7488
|
const { editPath: s } = this.container, n = !this.path && e.open;
|
|
7487
|
-
return
|
|
7488
|
-
e
|
|
7489
|
-
|
|
7490
|
-
|
|
7491
|
-
|
|
7492
|
-
return {
|
|
7493
|
-
data: o,
|
|
7494
|
-
path: a,
|
|
7495
|
-
open: r,
|
|
7496
|
-
active: s === a
|
|
7497
|
-
};
|
|
7498
|
-
})
|
|
7499
|
-
);
|
|
7489
|
+
return t.map((o, i) => {
|
|
7490
|
+
const a = e.path && `${this.path}/${e.path}/${i}`, r = n || // Only count as "in edit path" when it's not the full edit path.
|
|
7491
|
+
s.startsWith(a) && a.length < s.length;
|
|
7492
|
+
return { data: o, path: a, open: r, active: s === a };
|
|
7493
|
+
});
|
|
7500
7494
|
}
|
|
7501
7495
|
return [];
|
|
7502
7496
|
},
|
|
@@ -7744,7 +7738,7 @@ const Gu = B.component("DitoUploadFile", {
|
|
|
7744
7738
|
}, Xu = /* @__PURE__ */ D(Gu, [["render", Ju]]);
|
|
7745
7739
|
function Zu(e, t, s = {}) {
|
|
7746
7740
|
let n;
|
|
7747
|
-
const { document: o =
|
|
7741
|
+
const { document: o = Zn, ...i } = s, a = {
|
|
7748
7742
|
onUpdate: (c) => {
|
|
7749
7743
|
ed(t, c.oldIndex, c.newIndex, c);
|
|
7750
7744
|
}
|
|
@@ -7759,7 +7753,7 @@ function Zu(e, t, s = {}) {
|
|
|
7759
7753
|
else
|
|
7760
7754
|
return n == null ? void 0 : n.option(c);
|
|
7761
7755
|
};
|
|
7762
|
-
return
|
|
7756
|
+
return _n(r), xn(u), {
|
|
7763
7757
|
stop: u,
|
|
7764
7758
|
start: r,
|
|
7765
7759
|
option: d
|
|
@@ -8694,7 +8688,7 @@ const Zd = j.register(
|
|
|
8694
8688
|
}
|
|
8695
8689
|
},
|
|
8696
8690
|
processValue({ value: e }) {
|
|
8697
|
-
return
|
|
8691
|
+
return Lt(e) ? e.toISOString() : e;
|
|
8698
8692
|
}
|
|
8699
8693
|
}
|
|
8700
8694
|
), _d = /* @__PURE__ */ D(Zd, [["render", Xd]]);
|
|
@@ -9370,9 +9364,9 @@ function fh(e, t, s, n, o, i) {
|
|
|
9370
9364
|
}, null, 8, ["query", "columns", "hasEditButtons"])) : m("", !0),
|
|
9371
9365
|
k(b, {
|
|
9372
9366
|
tag: "tbody",
|
|
9373
|
-
modelValue: e.updateOrder(e.sourceSchema, e.listData, e.paginationRange),
|
|
9374
9367
|
options: e.getDraggableOptions(),
|
|
9375
9368
|
draggable: e.draggable,
|
|
9369
|
+
modelValue: e.updateOrder(e.sourceSchema, e.listData, e.paginationRange),
|
|
9376
9370
|
"onUpdate:modelValue": t[0] || (t[0] = (y) => e.listData = y)
|
|
9377
9371
|
}, {
|
|
9378
9372
|
default: O(() => [
|
|
@@ -9441,7 +9435,7 @@ function fh(e, t, s, n, o, i) {
|
|
|
9441
9435
|
], 8, lh))), 128))
|
|
9442
9436
|
]),
|
|
9443
9437
|
_: 1
|
|
9444
|
-
}, 8, ["
|
|
9438
|
+
}, 8, ["options", "draggable", "modelValue"]),
|
|
9445
9439
|
e.hasListButtons && !e.single ? (l(), h("tfoot", ph, [
|
|
9446
9440
|
p("tr", null, [
|
|
9447
9441
|
p("td", {
|
|
@@ -9751,7 +9745,7 @@ const kh = j.register("markup", {
|
|
|
9751
9745
|
const r = this.hardBreak ? `<p>${a}</p>` : a;
|
|
9752
9746
|
this.editor.commands.setContent(r, !1, this.parseOptions);
|
|
9753
9747
|
}
|
|
9754
|
-
}), this.editor = new
|
|
9748
|
+
}), this.editor = new ro({
|
|
9755
9749
|
...this.editorOptions,
|
|
9756
9750
|
onFocus: t,
|
|
9757
9751
|
onBlur: s,
|
|
@@ -9909,7 +9903,7 @@ const kh = j.register("markup", {
|
|
|
9909
9903
|
this.editor.commands.blur();
|
|
9910
9904
|
}
|
|
9911
9905
|
}
|
|
9912
|
-
}), Vh =
|
|
9906
|
+
}), Vh = ao.create({
|
|
9913
9907
|
name: "small",
|
|
9914
9908
|
parseHTML() {
|
|
9915
9909
|
return [{ tag: "small" }];
|
|
@@ -11385,4 +11379,4 @@ function vp(e, t) {
|
|
|
11385
11379
|
export {
|
|
11386
11380
|
rm as default
|
|
11387
11381
|
};
|
|
11388
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzL2FnZW50LmpzIiwiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvVmFsdWVNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvQ29udGV4dE1peGluLmpzIiwiLi4vc3JjL3ZhbGlkYXRvcnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9fZGVjaW1hbHMuanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9fZW1haWwuanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9fZG9tYWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRvcnMvX2ludGVnZXIuanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRvcnMvX21pbi5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL19wYXNzd29yZC5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL19yZXF1aXJlZC5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL191cmwuanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRpb25NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9hY2Nlc3Nvci5qcyIsIi4uL3NyYy9taXhpbnMvVHlwZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL3VpZC5qcyIsIi4uL3NyYy91dGlscy9TY2hlbWFHcmFwaC5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3NjaGVtYS5qcyIsIi4uL3NyYy91dGlscy9yZXNvdXJjZS5qcyIsIi4uL3NyYy9taXhpbnMvRGl0b01peGluLmpzIiwiLi4vc3JjL3V0aWxzL29wdGlvbnMuanMiLCIuLi9zcmMvRGl0b0NvbXBvbmVudC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy9kYXRlLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvQ2FsZW5kYXIudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL2V2ZW50LmpzIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3RyaWdnZXIuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UcmlnZ2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0lucHV0RmllbGQudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvSWNvbi52dWUiLCIuLi8uLi91aS9zcmMvdXRpbHMvc2VsZWN0aW9uLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvRGF0ZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24udnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvU3dpdGNoQnV0dG9uLnZ1ZSIsIi4uLy4uL3VpL3NyYy90cmFuc2l0aW9ucy9UcmFuc2l0aW9uSGVpZ2h0LnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy92dWUuanMiLCIuLi9zcmMvbWl4aW5zL0RvbU1peGluLmpzIiwiLi4vc3JjL0RpdG9Vc2VyLmpzIiwiLi4vc3JjL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1JvdXRlTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWUiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlRm9jdXNUcmFwL2NvbXBvbmVudC5tanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRGlhbG9nLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmFpbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvSGVhZGVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9OYXZpZ2F0aW9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Ob3RpZmljYXRpb25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TaWRlYmFyLnZ1ZSIsIi4uL3NyYy9taXhpbnMvUHVsbGRvd25NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9BY2NvdW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FbGVtZW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWUiLCIuLi9zcmMvbWl4aW5zL0l0ZW1NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWEudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYUlubGluZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlIiwiLi4vc3JjL3V0aWxzL21hdGguanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DbGlwYm9hcmQudnVlIiwiLi4vc3JjL21peGlucy9Mb2FkaW5nTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1Jlc291cmNlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvcGF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtSW5uZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU29ydGFibGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1VwbG9hZEZpbGUudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZVNvcnRhYmxlL2NvbXBvbmVudC5tanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRHJhZ2dhYmxlLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TcGlubmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvRGl0b1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29kZS52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb2xvci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlRGF0ZS52dWUiLCIuLi9zcmMvdXRpbHMvcm91dGUuanMiLCIuLi9zcmMvbWl4aW5zL1NvdXJjZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2ZpbHRlci5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTWFya3VwLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU11bHRpc2VsZWN0LnZ1ZSIsIi4uL3NyYy9taXhpbnMvTnVtYmVyTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNlY3Rpb24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTcGFjZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU3dpdGNoLnZ1ZSIsIi4uL3NyYy9taXhpbnMvVGV4dE1peGluLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVGV4dC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUZXh0YXJlYS52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUcmVlTGlzdC52dWUiLCIuLi9zcmMvdXRpbHMvdW5pdHMuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVVcGxvYWQudnVlIiwiLi4vc3JjL2RpcmVjdGl2ZXMvcmVzaXplLmpzIiwiLi4vc3JjL3ZlcmJzLmpzIiwiLi4vc3JjL0RpdG9BZG1pbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIHVzZXItYWdlbnQgcGFyc2VyIHdhcyBsaWZ0ZWQgZnJvbSBQYXBlci5qczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXBlcmpzL3BhcGVyLmpzL2Jsb2IvY2MxNTY5Njc1MDAzNWFiMDBlMDBjNjRjN2M5NWRhYTJjODVlZmUwMS9zcmMvY29yZS9QYXBlclNjb3BlLmpzI0w3NS1MMTA3XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVVzZXJBZ2VudCh1c2VyQWdlbnQgPSAnJykge1xuICBjb25zdCBhZ2VudCA9IHt9XG4gIC8vIFVzZSByZXBsYWNlKCkgdG8gZ2V0IGFsbCBtYXRjaGVzLCBhbmQgZGVhbCB3aXRoIENocm9tZS9XZWJraXQgb3ZlcmxhcDpcbiAgY29uc3QgdWEgPSB1c2VyQWdlbnQudG9Mb3dlckNhc2UoKVxuICBjb25zdCBbb3NdID1cbiAgICAvKGlwaG9uZXxpcGFkfGxpbnV4OyBhbmRyb2lkfGRhcndpbnx3aW58bWFjfGxpbnV4fGZyZWVic2R8c3Vub3MpLy5leGVjKFxuICAgICAgdWFcbiAgICApIHx8IFtdXG4gIGNvbnN0IHBsYXRmb3JtID0gKFxuICAgIHtcbiAgICAgICdkYXJ3aW4nOiAnbWFjJyxcbiAgICAgICdpcGhvbmUnOiAnaW9zJyxcbiAgICAgICdpcGFkJzogJ2lvcycsXG4gICAgICAnbGludXg7IGFuZHJvaWQnOiAnYW5kcm9pZCdcbiAgICB9W29zXSB8fFxuICAgIG9zXG4gIClcbiAgaWYgKHBsYXRmb3JtKSB7XG4gICAgYWdlbnQucGxhdGZvcm0gPSBwbGF0Zm9ybVxuICAgIGFnZW50W3BsYXRmb3JtXSA9IHRydWVcbiAgfVxuICB1YS5yZXBsYWNlKFxuICAgIC8ob3BlcmF8Y2hyb21lfHNhZmFyaXx3ZWJraXR8ZmlyZWZveHxtc2llfHRyaWRlbnQpXFwvP1xccyooWy5cXGRdKykoPzouKnZlcnNpb25cXC8oWy5cXGRdKykpPyg/Oi4qcnY6dj8oWy5cXGRdKykpPy9nLFxuICAgIChtYXRjaCwgYnJvd3NlciwgdjEsIHYyLCBydikgPT4ge1xuICAgICAgLy8gRG8gbm90IHNldCBhZGRpdGlvbmFsIGJyb3dzZXJzIG9uY2UgY2hyb21lIGlzIGRldGVjdGVkLlxuICAgICAgaWYgKCFhZ2VudC5jaHJvbWUpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IHJ2IHx8IHYyIHx8IHYxXG4gICAgICAgIGlmICghYWdlbnQudmVyc2lvbiB8fCBicm93c2VyICE9PSAnc2FmYXJpJykge1xuICAgICAgICAgIC8vIFVzZSB0aGUgdmVyc2lvbiB3ZSBnZXQgZm9yIHdlYmtpdCBmb3IgU2FmYXJpLCB3aGljaCBpcyBhY3R1YWxseVxuICAgICAgICAgIC8vIFRoZSBTYWZhcmkgdmVyc2lvbiwgZS5nLiAxNi4wXG4gICAgICAgICAgYWdlbnQudmVyc2lvbiA9IHZlcnNpb25cbiAgICAgICAgICBhZ2VudC52ZXJzaW9uTnVtYmVyID0gcGFyc2VGbG9hdCh2ZXJzaW9uKVxuICAgICAgICB9XG4gICAgICAgIGFnZW50LmJyb3dzZXIgPSBicm93c2VyXG4gICAgICAgIGFnZW50W2Jyb3dzZXJdID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgKVxuICBpZiAoYWdlbnQuY2hyb21lKSB7XG4gICAgLy8gQ2FuJ3QgaGF2ZSBpdCBib3RoIHdheXMsIENocm9tZS5cbiAgICBkZWxldGUgYWdlbnQud2Via2l0XG4gIH1cbiAgcmV0dXJuIGFnZW50XG59XG4iLCJpbXBvcnQgeyByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IHBhcnNlVXNlckFnZW50IH0gZnJvbSAnLi91dGlscy9hZ2VudCdcblxuZXhwb3J0IGRlZmF1bHQgcmVhY3RpdmUoe1xuICB0aXRsZTogJycsXG4gIHJvdXRlQ29tcG9uZW50czogW10sXG4gIHVzZXI6IG51bGwsXG4gIGFnZW50OiBwYXJzZVVzZXJBZ2VudChuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnKSxcbiAgbG9hZENhY2hlOiB7fSwgLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgYWN0aXZlTGFiZWw6IG51bGwsXG4gIGNsaXBib2FyZERhdGE6IG51bGxcbn0pXG4iLCJpbXBvcnQge1xuICBpc0ludGVnZXIsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aCxcbiAgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbikge1xuICByZXR1cm4gZGF0YVBhdGhcbiAgICA/IGAke2RhdGFQYXRofS8ke3Rva2VufWBcbiAgICA6IHRva2VuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICBwYXRoPy5wb3AoKVxuICByZXR1cm4gcGF0aFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBuZXN0ZWQgPyBwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSA6IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgaWYgKHBhdGgpIHtcbiAgICAvLyBSZW1vdmUgdGhlIHBhcmVudCB0b2tlbi4gSWYgaXQncyBhIG51bWJlciwgdGhlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYW5cbiAgICAvLyBhcnJheSBhbmQgbmVlZCB0byByZW1vdmUgbW9yZSB0b2tlbnMgdW50aWwgd2UgbWVldCB0aGUgYWN0dWFsIHBhcmVudDpcbiAgICBsZXQgdG9rZW5cbiAgICBkbyB7XG4gICAgICB0b2tlbiA9IHBhdGgucG9wKClcbiAgICB9IHdoaWxlICh0b2tlbiAhPSBudWxsICYmIGlzSW50ZWdlcigrdG9rZW4pKVxuICAgIC8vIElmIHRoZSByZW1vdmVkIHRva2VuIGlzIHZhbGlkLCB3ZSBjYW4gZ2V0IHRoZSBwYXJlbnQgZGF0YTpcbiAgICBpZiAodG9rZW4gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHBhdGhcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICByZXR1cm4gcGF0aFtwYXRoLmxlbmd0aCAtIDFdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhOYW1lKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIHJldHVybiB0b2tlbiA9PSBudWxsIHx8IGlzSW50ZWdlcigrdG9rZW4pID8gbnVsbCA6IHRva2VuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhJbmRleChkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICBjb25zdCBpbmRleCA9IHRva2VuID09IG51bGwgPyBudWxsIDogK3Rva2VuXG4gIHJldHVybiBpc0ludGVnZXIoaW5kZXgpID8gaW5kZXggOiBudWxsXG59XG5cbmxldCB0ZW1wb3JhcnlJZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBzZXRUZW1wb3JhcnlJZChkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gVGVtcG9yYXJ5IGlkcyBhcmUgbWFya2VkIHdpdGggYSAnQCcgYXQgdGhlIGJlZ2lubmluZy5cbiAgZGF0YVtpZEtleV0gPSBgQCR7Kyt0ZW1wb3JhcnlJZH1gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RlbXBvcmFyeUlkKGlkKSB7XG4gIHJldHVybiAvXkAvLnRlc3QoaWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgdG9SYXcgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBnZXRWYWx1ZUF0RGF0YVBhdGgsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbURhdGFQYXRoLFxuICBnZXRQYXJlbnRJdGVtRGF0YVBhdGgsXG4gIGdldFBhcmVudEl0ZW0sXG4gIGdldEl0ZW0sXG4gIGdldExhc3REYXRhUGF0aE5hbWUsXG4gIGdldExhc3REYXRhUGF0aEluZGV4XG59IGZyb20gJy4vdXRpbHMvZGF0YS5qcydcblxuY29uc3QgeyBoYXNPd25Qcm9wZXJ0eSB9ID0gT2JqZWN0LnByb3RvdHlwZVxuXG4vLyBTZWUgYWxzbyBgQ29udGV4dE1peGluYDogYERpdG9Db250ZXh0YCBpbnN0YW5jZXMgYXJlIGEgdGhpbiB3cmFwcGVyIGFyb3VuZFxuLy8gcmF3IGBjb250ZXh0YCBvYmplY3RzLCB3aGljaCB0aGVtc2VsdmVzIGFjdHVhbGx5IGluaGVyaXQgZnJvbSB0aGUgbGlua2VkXG4vLyBgY29tcG9uZW50YCBpbnN0YW5jZSwgc28gdGhhdCB0aGV5IG9ubHkgbmVlZCB0byBwcm92aWRlIHRoZSB2YWx1ZXMgdGhhdFxuLy8gc2hvdWxkIGJlIGRpZmZlcmVudCB0aGFuIGluIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudC4gSW4gb3JkZXIgdG8gbm90IGV4cG9zZVxuLy8gYWxsIGZpZWxkcyBmcm9tIHRoZSBjb21wb25lbnQsIHRoZSB3cmFwcGVyIGlzIGludHJvZHVjZWQuXG5cbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIHRvT2JqZWN0KGNvbnRleHQpIHtcbiAgY29uc3QgcmF3U3RhcnQgPSB0b1Jhdyhjb250ZXh0KVxuICBsZXQgcmF3ID0gcmF3U3RhcnRcbiAgbGV0IG9iamVjdCA9IG51bGxcbiAgLy8gSW4gY2FzZSBgRGl0b0NvbnRleHQuZXh0ZW5kKClgIHdhcyB1c2VkLCB3ZSBuZWVkIHRvIGZpbmQgdGhlIGFjdHVhbCBjb250ZXh0XG4gIC8vIG9iamVjdCBmcm9tIHRoZSBvYmplY3QncyB0aGUgaW5oZXJpdGFuY2UgY2hhaW46XG4gIGRvIHtcbiAgICBvYmplY3QgPSBjb250ZXh0cy5nZXQocmF3KVxuICAgIGlmIChvYmplY3QpIGJyZWFrXG4gICAgcmF3ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHJhdylcbiAgfSB3aGlsZSAocmF3KVxuICBpZiAob2JqZWN0ICYmIHJhdyAhPT0gcmF3U3RhcnQpIHtcbiAgICAvLyBBc3NpZ24gdGhlIHBhc3NlZCBjb250ZXh0IHdpdGggdGhlIG9yaWdpbmFsIG9iamVjdCBhcyB3ZWxsLCBzbyB3ZSBkb24ndFxuICAgIC8vIGhhdmUgdG8gc2VhcmNoIGZvciBpdCBhZ2FpbjpcbiAgICBjb250ZXh0cy5zZXQocmF3LCBvYmplY3QpXG4gIH1cbiAgcmV0dXJuIG9iamVjdFxufVxuXG5mdW5jdGlvbiBnZXQoY29udGV4dCwga2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgY29uc3Qgb2JqZWN0ID0gdG9PYmplY3QoY29udGV4dClcbiAgY29uc3QgdmFsdWUgPSBrZXkgaW4gb2JqZWN0ID8gb2JqZWN0W2tleV0gOiB1bmRlZmluZWRcbiAgLy8gSWYgYG9iamVjdGAgZXhwbGljaXRseSBzZXRzIHRoZSBrZXkgdG8gYHVuZGVmaW5lZGAsIHJldHVybiBpdC5cbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSlcbiAgICAgID8gZGVmYXVsdFZhbHVlKClcbiAgICAgIDogZGVmYXVsdFZhbHVlXG59XG5cbmZ1bmN0aW9uIHNldChjb250ZXh0LCBrZXksIHZhbHVlKSB7XG4gIHRvT2JqZWN0KGNvbnRleHQpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IGlzRnVuY3Rpb24oY29udGV4dClcbiAgICAgICAgPyBjb250ZXh0KClcbiAgICAgICAgOiB7IC4uLmNvbnRleHQgfVxuICAgICAgOiB7fVxuICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNldCAodG8gZmFsc2UpLCBkZWZhdWx0IHRvIHRydWUgc28gd2UgZG9uJ3QgZmFsbCBiYWNrXG4gICAgLy8gdG8gYGNvbXBvbmVudGAgZm9yIGl0cyB2YWx1ZS5cbiAgICBjb250ZXh0Lm5lc3RlZCA/Pz0gdHJ1ZVxuICAgIGNvbnRleHQuY29tcG9uZW50ID0gY29tcG9uZW50XG4gICAgLy8gSGF2ZSBgb2JqZWN0YCBpbmhlcml0IGZyb20gdGhlIGBjb21wb25lbnRgIGluc3RhbmNlLCBzbyBpdCBjYW4gb3ZlcnJpZGVcbiAgICAvLyBpdHMgdmFsdWVzIGFuZCBzdGlsbCByZXRyaWV2ZSBmcm9tIGl0LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYHRoaXNgXG4gICAgLy8gdGhyb3VnaCBgY29udGV4dHNgIG1hcDpcbiAgICBjb25zdCBvYmplY3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29udGV4dCwgY29tcG9uZW50KVxuICAgIC8vIE5vIG5lZWQgZm9yIGB0b1Jhdyh0aGlzKWAgaGVyZSBhcyBpdCdzIGFsd2F5cyByYXcgaW5zaWRlIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb250ZXh0cy5zZXQodGhpcywgb2JqZWN0KVxuICB9XG5cbiAgc3RhdGljIGdldChjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dCBpbnN0YW5jZW9mIERpdG9Db250ZXh0XG4gICAgICA/IGNvbnRleHRcbiAgICAgIDogbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwgY29udGV4dClcbiAgfVxuXG4gIGV4dGVuZChvYmplY3QpIHtcbiAgICAvLyBDcmVhdGUgYSBjb3B5IG9mIHRoaXMgY29udGV4dCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIHJlYWwgb25lLCBidXRcbiAgICAvLyBvdmVycmlkZXMgc29tZSBwcm9wZXJ0aWVzIHdpdGggdGhlIG9uZXMgZnJvbSB0aGUgcGFzc2VkIGBvYmplY3RgLlxuICAgIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Yob2JqZWN0LCB0aGlzKVxuICB9XG5cbiAgLy8gYG5lc3RlZGAgaXMgYHRydWVgIHdoZW4gdGhlIGRhdGEtcGF0aCBwb2ludHMgYSB2YWx1ZSBpbnNpZGUgYW4gaXRlbSwgYW5kXG4gIC8vIGBmYWxzZWAgd2hlbiBpdCBwb2ludHMgdG8gdGhlIGl0ZW0gaXRzZWxmLlxuICBnZXQgbmVzdGVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25lc3RlZCcsIHRydWUpXG4gIH1cblxuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NjaGVtYScsIG51bGwpXG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldChcbiAgICAgIHRoaXMsXG4gICAgICAndmFsdWUnLFxuICAgICAgKCkgPT5cbiAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBkZWZpbmVkIG9uIHRoZSB1bmRlcmx5aW5nIG9iamVjdCwgaXQncyBub3QgYSB0eXBlXG4gICAgICAgIC8vIGNvbXBvbmVudC4gSWYgaXQgaXMgbmVzdGVkLCB3ZSBjYW4gc3RpbGwgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSByb290LlxuICAgICAgICB0aGlzLm5lc3RlZFxuICAgICAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICApXG4gIH1cblxuICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YVBhdGgnLCAnJylcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25hbWUnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhOYW1lKHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGluZGV4KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2luZGV4JywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgaXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLml0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMucGFyZW50SXRlbURhdGFQYXRoKVxuICB9XG5cbiAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHM6XG4gIGdldCBpdGVtKCkge1xuICAgIHJldHVybiBnZXQoXG4gICAgICB0aGlzLFxuICAgICAgJ2RhdGEnLFxuICAgICAgLy8gSWYgYGRhdGFgIGlzbid0IHByb3ZpZGVkLCB3ZSBjYW4gZGV0ZXJtaW5lIGl0IGZyb20gcm9vdERhdGEgJiBkYXRhUGF0aDpcbiAgICAgICgpID0+IGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpIHx8IG51bGxcbiAgICApXG4gIH1cblxuICAvLyBOT1RFOiBgcGFyZW50SXRlbWAgaXNuJ3QgdGhlIGNsb3Nlc3QgZGF0YSBwYXJlbnQgdG8gYGl0ZW1gLCBpdCdzIHRoZVxuICAvLyBjbG9zZXN0IHBhcmVudCB0aGF0IGlzbid0IGFuIGFycmF5LCBlLmcuIGZvciByZWxhdGlvbnMgb3IgbmVzdGVkIEpTT04gZGF0YS5cbiAgLy8gVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlIHVzZSBvZlxuICAvLyBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0IHBhcmVudC4gSWZcbiAgLy8gbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsIHNvcnRzIG9mIGRhdGFcbiAgLy8gcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IGl0ZW0gPSAoXG4gICAgICBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKSB8fCBudWxsXG4gICAgKVxuICAgIHJldHVybiBpdGVtICE9PSB0aGlzLml0ZW0gPyBpdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHByb2Nlc3NlZFJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZFJvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBjbGlwYm9hcmRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NsaXBib2FyZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHVzZXIoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndXNlcicsIG51bGwpXG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2FwaScsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld3MoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld3MnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZsYXR0ZW5lZFZpZXdzKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2ZsYXR0ZW5lZFZpZXdzJywgbnVsbClcbiAgfVxuXG4gIGdldCBpdGVtTGFiZWwoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaXRlbUxhYmVsJywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZm9ybUxhYmVsJywgbnVsbClcbiAgfVxuXG4gIC8vIE5PVEU6IExpa2UgJ29wdGlvbnMnLCB0aGUgYXNzb2NpYXRlZCBjb21wb25lbnQgZG9lc24ndCBhbHdheXMgZXhpc3QsIGUuZy5cbiAgLy8gaW4gbmVzdGVkIGZvcm1zIGR1cmluZyBgcHJvY2Vzc0RhdGEoKWAuIEJ1dCBgc2NoZW1hYCBpcyBndWFyYW50ZWVkIHRvXG4gIC8vIGFsd2F5cyBiZSBhdmFpbGFibGUuXG4gIGdldCBjb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFRPRE86IEFkZCBgY29tcG9uZW50U2NoZW1hYCBnZXR0ZXIgZm9yIHRoZSBzY2hlbWEgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50LFxuICAvLyBldmVuIHdoZW4gdGhlIGNvbXBvbmVudCBpc24ndCBhY3R1YWxseSBpbnN0YW50aWF0ZWQuIENvbnNpZGVyIGFkZGluZ1xuICAvLyBgc291cmNlU2NoZW1hYCBhcyB3ZWxsP1xuXG4gIC8vIFRPRE86IEZpeCB1bmNsZWFyIG5hbWluZzogV2hpY2ggc2NoZW1hIGlzIHRoaXMsIHRoYXQgb2YgdGhlIGNvbXBvbmVudCBvciBvZlxuICAvLyBpdHMgcGFyZW50PyBJc24ndCBleHBvc2luZyBgZm9ybUNvbXBvbmVudGAgYW5kIGB2aWV3Q29tcG9uZW50YCBlbm91Z2gsIG9uY2VcbiAgLy8gd2Ugb2ZmZXIgYWNjZXNzIHRvIHRoZWlyIGNvbXBvbmVudHMgdGhlcmUgdGhyb3VnaCBgZ2V0Q29tcG9uZW50KClgICYgY28uIG9uXG4gIC8vIGBEaXRvTWl4aW5gIHBlcmhhcHM/ICBBbHNvLCB0aGVyZSBjb3VsZCBiZSBhIGB0YWJDb21wb25lbnRgIGdldHRlciBmb3JcbiAgLy8gc2NoZW1hcyBpbiB0YWJzP1xuICBnZXQgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NjaGVtYUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3Q29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkaWFsb2dDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHBhbmVsQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3BhbmVsQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyZXNvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBXaGVuIHVzZWQgaW4gT3B0aW9uc01peGluIGZvciBgc2NoZW1hLm9wdGlvbnMudmFsdWUoKWAsXG4gIC8vIGBzY2hlbWEub3B0aW9ucy5sYWJlbCgpYCBhbmQgIGBzY2hlbWEuc2VhcmNoLmZpbHRlcigpYCBjYWxsYmFja3M6XG4gIGdldCBvcHRpb24oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9uJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9ucycsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBvcGVuKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wZW4nLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUT0RPOiBSZW5hbWUgdGhpcyB0byBgc2VhcmNoVGVybWAgb3IgYHNlYXJjaFF1ZXJ5YCwgdG8gcGVyaGFwcyBmcmVlIGBxdWVyeWBcbiAgLy8gZm9yIHRoZSBhY3R1YWwgYHJlc291cmNlQ29tcG9uZW50LnF1ZXJ5YCBvYmplY3Q/XG4gIGdldCBxdWVyeSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdxdWVyeScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIC8vIFRoZSBlcnJvciBmaWVsZCBpcyBvbmx5IHBvcHVsYXRlZCBpbiB0aGUgY29udGV4dCBvZiBidXR0b25zIHRoYXQgc2VuZFxuICAvLyByZXF1ZXN0cywgc2VlIGBSZXNvdXJjZU1peGluLmVtaXRCdXR0b25FdmVudCgpYDpcbiAgZ2V0IGVycm9yKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Vycm9yJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IHdhc05vdGlmaWVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3dhc05vdGlmaWVkJywgZmFsc2UpXG4gIH1cblxuICAvLyBIZWxwZXIgTWV0aG9kc1xuXG4gIGdldCByZXF1ZXN0KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHRoaXMuY29tcG9uZW50LnJlcXVlc3Qob3B0aW9ucylcbiAgfVxuXG4gIGdldCBmb3JtYXQoKSB7XG4gICAgcmV0dXJuICh2YWx1ZSwgb3B0aW9ucykgPT4gdGhpcy5jb21wb25lbnQuZm9ybWF0KHZhbHVlLCBvcHRpb25zKVxuICB9XG5cbiAgZ2V0IG5hdmlnYXRlKCkge1xuICAgIHJldHVybiBsb2NhdGlvbiA9PiB0aGlzLmNvbXBvbmVudC5uYXZpZ2F0ZShsb2NhdGlvbilcbiAgfVxuXG4gIGdldCBkb3dubG9hZCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5kb3dubG9hZChvcHRpb25zKVxuICB9XG5cbiAgZ2V0IGdldFJlc291cmNlVXJsKCkge1xuICAgIHJldHVybiByZXNvdXJjZSA9PiB0aGlzLmNvbXBvbmVudC5nZXRSZXNvdXJjZVVybChyZXNvdXJjZSlcbiAgfVxuXG4gIGdldCBub3RpZnkoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4ge1xuICAgICAgdGhpcy5jb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgICBzZXQodGhpcywgJ3dhc05vdGlmaWVkJywgdHJ1ZSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQXJyYXksIGlzUGxhaW5PYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaXN0ZW5lcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEFzeW5jIG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGUgZXZlbnRzIGFkZGVkIC9cbiAgICAvLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrcyBpZiB0aGUgY29tcG9uZW50XG4gICAgLy8gaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSAodGhpcy5saXN0ZW5lcnMgfHw9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSAobGlzdGVuZXJzW2V2ZW50XSB8fD0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy5saXN0ZW5lcnNcbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgIHRoaXMub2ZmKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub2ZmKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIHNwZWNpZmljIGV2ZW50XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5saXN0ZW5lcnM/LltldmVudF1cbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCBoYW5kbGVycyBmb3IgdGhpcyBldmVudFxuICAgICAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgY29uc3QgeyBxdWV1ZSwgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIEVtaXQgdGhlIG5leHQgZXZlbnQgaW4gdGhlIHF1ZXVlIHdpdGggaXRzIHBhcmFtcy5cbiAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBpdCBvbmx5IGdldHMgcmVtb3ZlZCBvbmNlIGBuZXh0KClgIGlzIGNhbGxlZC5cbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gcXVldWUuc2hpZnQoKVxuICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgIGxldCByZXN1bHRcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBjYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY2FsbGJhY2suYXBwbHkodGhpcywgZW50cnkuYXJncylcbiAgICAgICAgICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYEVycm9yIGR1cmluZyBldmVudCBoYW5kbGVyIGZvciAnJHtldmVudH0nOmAsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIFJlc29sdmUgdGhlIHByb21pc2UgdGhhdCB3YXMgYWRkZWQgdG8gdGhlIHF1ZXVlIGZvciB0aGUgZXZlbnRcbiAgICAgICAgICAgICAgLy8gdGhhdCB3YXMganVzdCBjb21wbGV0ZWQgYnkgdGhlIHdyYXBwZXIgdGhhdCBjYWxsZWQgYG5leHQoKWBcbiAgICAgICAgICAgICAgZW50cnkucmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBxdWV1ZS5wdXNoKHsgYXJncywgcmVzb2x2ZSB9KVxuICAgICAgICAgIC8vIEZvciBuZXcgcXVldWVzICg9IG9ubHkgb25lIGVudHJ5KSBlbWl0IHRoZSBmaXJzdCBldmVudCBpbW1lZGlhdGVseSxcbiAgICAgICAgICAvLyB0byBnZXQgdGhlIHF1ZXVlIHJ1bm5pbmcuXG4gICAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgLy8gTWFrZSBzdXJlIGl0J3MgdGhlbmFibGUgZXZlbiBpZiB0aGVyZSBhcmUgbm8gbGlzdGVuZXJzLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfSxcblxuICAgIC8vIENoZWNrcyBpZiB0aGUgY29tcG9uZW50IGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQgdHlwZTpcbiAgICBoYXNMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycyhldikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnQubGVuZ3RoID4gMFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5saXN0ZW5lcnM/LltldmVudF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZWdhdGUoZXZlbnQsIHRhcmdldCkge1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlKGV2LCB0YXJnZXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub24oZXZlbnQsICguLi5hcmdzKSA9PiB0YXJnZXQuZW1pdChldmVudCwgLi4uYXJncykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShcbiAgICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgeyBjb21wb25lbnQ6IHRoaXMgfVxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHsgZm9ybWF0IH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICByZXR1cm4gZm9ybWF0XG4gICAgICAgICAgPyBmb3JtYXQobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgdmFsdWUgfSkpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgcGFyc2UgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIGlmIChwYXJzZSkge1xuICAgICAgICAgIHZhbHVlID0gcGFyc2UobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgdmFsdWUgfSkpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSA9IHZhbHVlXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgdGhpcy5kYXRhW3RoaXMubmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbSwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAgIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHMuXG4gICAgLy8gTk9URTogVGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBhczpcbiAgICAvLyByZXR1cm4gZ2V0SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICBwYXJlbnREYXRhKCkge1xuICAgICAgY29uc3QgZGF0YSA9IGdldFBhcmVudEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgICByZXR1cm4gZGF0YSAhPT0gdGhpcy5kYXRhID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgcHJvY2Vzc2VkRGF0YSgpIHtcbiAgICAgIHJldHVybiBnZXRQcm9jZXNzZWRQYXJlbnREYXRhKHRoaXMsIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRSb290RGF0YSgpIHtcbiAgICAgIHJldHVybiBnZXRQcm9jZXNzZWRQYXJlbnREYXRhKHRoaXMsICcnLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudERhdGFcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkRGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRSb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZFJvb3REYXRhXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFByb2Nlc3NlZFBhcmVudERhdGEoY29tcG9uZW50LCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgZGF0YSB0aHJvdWdoIHRoZSBzY2hlbWFDb21wb25lbnQsIGJ1dFxuICAvLyB0aGF0J3Mgbm90IG5lY2Vzc2FyaWx5IHRoZSBpdGVtIHJlcHJlc2VudGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuICAvLyBTb2x1dGlvbjogRmluZCB0aGUgcmVsYXRpdmUgcGF0aCBhbmQgdGhlIHByb2Nlc3NlZCBzdWItaXRlbSBmcm9tIHRoZXJlOlxuICBsZXQgeyBzY2hlbWFDb21wb25lbnQgfSA9IGNvbXBvbmVudFxuICAvLyBGaW5kIHRoZSBzY2hlbWEgY29tcG9uZW50IHRoYXQgY29udGFpbnMgdGhlIGRlc2lyZWQgZGF0YS1wYXRoOlxuICB3aGlsZSAoc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoLmxlbmd0aCA+IGRhdGFQYXRoLmxlbmd0aCkge1xuICAgIHNjaGVtYUNvbXBvbmVudCA9IHNjaGVtYUNvbXBvbmVudC5wYXJlbnRTY2hlbWFDb21wb25lbnRcbiAgfVxuICByZXR1cm4gZ2V0SXRlbShcbiAgICBzY2hlbWFDb21wb25lbnQucHJvY2Vzc2VkRGF0YSxcbiAgICAvLyBHZXQgdGhlIGRhdGFQYXRoIHJlbGF0aXZlIHRvIHRoZSBzY2hlbWFDb21wb25lbnQncyBkYXRhOlxuICAgIGRhdGFQYXRoLnNsaWNlKHNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aC5sZW5ndGgpLFxuICAgIG5lc3RlZFxuICApXG59XG4iLCJpbXBvcnQgeyBpc0NyZWRpdENhcmQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgY3JlZGl0Y2FyZCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzQ3JlZGl0Q2FyZCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBpbnZhbGlkJ1xufVxuIiwiZXhwb3J0IGNvbnN0IGRlY2ltYWxzID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBkZWNpbWFscykgPT4ge1xuICAgIGNvbnN0IG1hdGNoID0gZGVjaW1hbHMgPT09ICcqJyA/ICcrJyA6IGB7MSwke2RlY2ltYWxzfX1gXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5bLStdP1xcXFxkKihcXFxcLlxcXFxkJHttYXRjaH0pPyRgKS50ZXN0KHZhbHVlKVxuICB9LFxuXG4gIG1lc3NhZ2U6ICh2YWx1ZSwgZGVjaW1hbHMpID0+XG4gICAgYG11c3QgYmUgbnVtZXJpYyBhbmQgbWF5IGNvbnRhaW4gJHtcbiAgICAgICFkZWNpbWFscyB8fCBkZWNpbWFscyA9PT0gJyonID8gJycgOiBkZWNpbWFsc1xuICAgIH0gZGVjaW1hbCBwb2ludHNgXG59XG4iLCJpbXBvcnQgeyBpc0VtYWlsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGVtYWlsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNFbWFpbCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIGEgdmFsaWQgZW1haWwnXG59XG4iLCJpbXBvcnQgeyBpc0hvc3RuYW1lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGhvc3RuYW1lID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNIb3N0bmFtZSh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBob3N0IG5hbWUnXG59XG4iLCJpbXBvcnQgeyBpc0RvbWFpbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBkb21haW4gPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0RvbWFpbih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBkb21haW4nXG59XG4iLCJpbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaW50ZWdlciA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSW50ZWdlcih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIHdob2xlIG51bWJlcidcbn1cbiIsImV4cG9ydCBjb25zdCBtYXggPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1heCkgPT4gdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBtYXgpIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttYXh9IG9yIGxlc3NgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBtaW4gPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1pbikgPT4gdmFsdWUgPj0gbWluLFxuICBtZXNzYWdlKHZhbHVlLCBtaW4pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttaW59IG9yIG1vcmVgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBwYXNzd29yZCA9IHtcbiAgLy8gQWxsb3cgYW55IHZhbHVlLiBGb3Igbm93IHRoaXMgaXMgb25seSB1c2VkIGFzIGEgbWFya2VyLCB0byBhbGxvdyB0aGVcbiAgLy8gcmVxdWlyZWQgdmFsaWRhdGlvbiB0byBoYW5kbGUgdW5jaGFuZ2VkIHBhc3N3b3JkcyBzZXBhcmF0ZWx5LlxuICB2YWxpZGF0ZTogKCkgPT4gdHJ1ZVxufVxuIiwiZXhwb3J0IGNvbnN0IHJhbmdlID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBbbWluLCBtYXhdKSA9PiB2YWx1ZSA+PSBtaW4gJiYgdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBbbWluLCBtYXhdKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlIGJldHdlZW4gJHttaW59IGFuZCAke21heH1gXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCByZXF1aXJlZCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgc2V0dGluZ3MsIHsgcGFzc3dvcmQgfSkgPT4gKFxuICAgICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSAnJykgfHxcbiAgICAvLyBQYXNzd29yZCBmaWVsZHMgdXNlIGB1bmRlZmluZWRgIGFzIG9wcG9zZWQgdG8gYG51bGxgIHdoZW4gdGhleSdyZSBzZXRcbiAgICAvLyBidXQgdW5jaGFuZ2VkLCBhbGxvdyB0aGlzIHRvIHBhc3MgdGhyb3VnaDpcbiAgICAocGFzc3dvcmQgJiYgdmFsdWUgPT09IHVuZGVmaW5lZClcbiAgKSxcbiAgbWVzc2FnZTogJ2lzIHJlcXVpcmVkJ1xufVxuIiwiaW1wb3J0IHsgaXNVcmwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgdXJsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNVcmwodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgdmFsaWQgVVJMJ1xufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyB2YWxpZGF0b3JzIGZyb20gJy4uL3ZhbGlkYXRvcnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ2Vycm9ycyddLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzRXJyb3JzKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5lcnJvcnNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuaXNUb3VjaGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgdmFsaWRhdGUobm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uYW1lc3BhY2VcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdG9yc1tydWxlXVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdmFsaWRhdG9yICYmXG4gICAgICAgICAgLy8gT25seSBhcHBseSAncmVxdWlyZWQnIHZhbGlkYXRvciB0byBlbXB0eSB2YWx1ZXMuXG4gICAgICAgICAgLy8gQXBwbHkgYWxsIG90aGVyIHZhbGlkYXRvcnMgb25seSB0byBub24tZW1wdHkgdmFsdWVzLlxuICAgICAgICAgIChydWxlID09PSAncmVxdWlyZWQnIHx8IHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtUb3VjaGVkKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlXG4gICAgICAvLyBDbGVhciBjdXJyZW50bHkgZGlzcGxheWVkIGVycm9ycyB3aGVuIGZvY3VzaW5nIGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCB7IG1lc3NhZ2UgfSBvZiBlcnJvcnMpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihtZXNzYWdlLCB0cnVlKVxuICAgICAgfVxuICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuXG4gICAgZ2V0RXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzID8gWy4uLnRoaXMuZXJyb3JzXSA6IG51bGxcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IG51bGxcbiAgICAgIHRoaXMuJGVtaXQoJ2Vycm9ycycsIHRoaXMuZXJyb3JzKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJpbmcsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFBY2Nlc3NvcihcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIGdldCwgc2V0LCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4pIHtcbiAgLy8gYGtleU9yRGF0YVBhdGhgIGNhbiBiZSBhIHNpbXBsZSBwcm9wZXJ0eSBrZXksXG4gIC8vIG9yIGEgZGF0YS1wYXRoIGludG8gc3ViLXByb3BlcnRpZXMsIGJvdGggaW4gYXJyYXkgb3Igc3RyaW5nIGZvcm1hdC5cbiAgaWYgKGlzU3RyaW5nKGtleU9yRGF0YVBhdGgpICYmIGtleU9yRGF0YVBhdGguaW5jbHVkZXMoJy4nKSkge1xuICAgIGtleU9yRGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIH1cbiAgLy8gVXNlIHRoZSBub3JtYWxpemVkIGRhdGEgcGF0aCBmb3IgdGhlIGhhbmRsaW5nIG92ZXJyaWRlc1xuICBjb25zdCBuYW1lID0gbm9ybWFsaXplRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgcmV0dXJuIHtcbiAgICBnZXQoKSB7XG4gICAgICAvLyBPbmx5IGRldGVybWluZSBzY2hlbWEgdmFsdWUgaWYgd2UgaGF2ZSBubyBnZXR0ZXIsIG9yIHRoZSBnZXR0ZXJcbiAgICAgIC8vIHdhbnRzIHRvIHJlY2VpdmUgdGhlIHZhbHVlIGFuZCBwcm9jZXNzIGl0IGZ1cnRoZXI6XG4gICAgICBjb25zdCB2YWx1ZSA9XG4gICAgICAgICFnZXQgfHwgZ2V0Lmxlbmd0aCA+IDBcbiAgICAgICAgICA/IC8vIE5PVEU6IEJlY2F1c2UgYHNjaGVtYWAgb2JqZWN0cyBhcmUgcmV0cmlldmVkIGZyb20gYG1ldGFgLCB0aGV5XG4gICAgICAgICAgICAvLyBkb24ndCBzZWVtIHRvIGJlIHJlYWN0aXZlLiBUbyBhbGxvdyBjaGFuZ2VkIGluIGBzY2hlbWFgIHZhbHVlcyxcbiAgICAgICAgICAgIC8vIGBzZXQoKWAgc3RvcmVzIGNoYW5nZWQgdmFsdWVzIGluIHRoZSBzZXBhcmF0ZSBgb3ZlcnJpZGVzYCBvYmplY3QuXG4gICAgICAgICAgICB0aGlzLm92ZXJyaWRlcyAmJiBuYW1lIGluIHRoaXMub3ZlcnJpZGVzXG4gICAgICAgICAgICA/IHRoaXMub3ZlcnJpZGVzW25hbWVdXG4gICAgICAgICAgICA6IHRoaXMuZ2V0U2NoZW1hVmFsdWUoa2V5T3JEYXRhUGF0aCwge1xuICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogZGVmLFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJyaWRlcyB8fD0ge31cbiAgICAgICAgdGhpcy5vdmVycmlkZXNbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmVBY2Nlc3NvcihuYW1lLCB7IGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQgfSA9IHt9KSB7XG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgZGVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnM6XG4gICAgICAgIHZhbHVlID0gaXNGdW5jdGlvbihkZWYpID8gZGVmLmNhbGwodGhpcykgOiBkZWZcbiAgICAgICAgLy8gVHJpZ2dlciBzZXR0ZXIgYnkgc2V0dGluZyB2YWx1ZSBhbmQgYWNjZXNzb3IgdG8gZGVmYXVsdDpcbiAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlXG4gICAgICAgIC8vIE5vdyBhY2Nlc3Mgc3RvcmUgYWdhaW4sIGZvciByZWFjdGl2aXR5IHRyYWNraW5nXG4gICAgICAgIHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBnZXR0ZXIgdG8gZnVydGhlciBjaGFuZ2Ugb3IgcHJvY2VzcyB0aGUgdmFsdWVcbiAgICAgIC8vIHJldHJpZXZlZCBmcm9tIHRoZSBzdG9yZTpcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBzZXR0ZXIgdG8gcmV0dXJuIGEgbmV3IHZhbHVlIHRvIHNldCwgb3IgZG8gdGhlXG4gICAgICAvLyBzZXR0aW5nIGl0c2VsZiwgYW5kIHRoZW4gcmV0dXJuIGB1bmRlZmluZWRgOlxuICAgICAgaWYgKCFzZXQgfHwgKHZhbHVlID0gc2V0LmNhbGwodGhpcywgdmFsdWUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmUobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgVmFsdWVNaXhpbiBmcm9tICcuL1ZhbHVlTWl4aW4uanMnXG5pbXBvcnQgQ29udGV4dE1peGluIGZyb20gJy4vQ29udGV4dE1peGluLmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBhc0FycmF5LCBjYW1lbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbHVlTWl4aW4sIENvbnRleHRNaXhpbiwgVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHdpZHRoOiB7IHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGVcbiAgICB9LFxuXG4gICAgbGFiZWxOb2RlKCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuaXNNb3VudGVkID8gdGhpcy4kZWwucHJldmlvdXNFbGVtZW50U2libGluZyA6IG51bGxcbiAgICAgIHJldHVybiBub2RlPy5tYXRjaGVzKCcuZGl0by1sYWJlbCcpID8gbm9kZSA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZXhjbHVkZWRgIGZvciBjb25zaXN0ZW50IG5hbWluZz9cbiAgICBleGNsdWRlOiBnZXRTY2hlbWFBY2Nlc3NvcignZXhjbHVkZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcmVxdWlyZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXF1aXJlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byBhIHN1Yi1jbGFzcyBjb21wb25lbnQgdXNlZCBmb3IgYWxsIGlucHV0IGNvbXBvbmVudHM/XG4gICAgcmVhZG9ubHk6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWFkb25seScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgYXV0b2ZvY3VzOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2ZvY3VzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUbyBiZSB1c2VkIGZvciBzZWxlY3RzIGFuZCBpbnB1dHMgb25seT9cbiAgICBjbGVhcmFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjbGVhcmFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG5cbiAgICAgIGdldChjbGVhcmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNsZWFyYWJsZSAmJiAhdGhpcy5yZWFkb25seVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4TGVuZ3RoOiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4TGVuZ3RoJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BsYWNlaG9sZGVyJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdXRvY29tcGxldGU6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvY29tcGxldGUnLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGV2ZW50cygpIHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuZ2V0RXZlbnRzKClcbiAgICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgYWxsIHByb3ZpZGVzIG5vbi1yZWNvZ25pemVkIGV2ZW50cyxcbiAgICAgIC8vIGFzc3VtaW5nIHRoZXkgYXJlIG5hdGl2ZSBldmVudHMuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHRvIHZ1ZTMtc3R5bGUgYG9uW0EtWl1gIGV2ZW50IGhhbmRsZXJzIG5hbWluZyB0aGF0IGFyZW4ndFxuICAgICAgLy8gbmFtZXNwYWNlZCBpbiBgc2NoZW1hLmV2ZW50c2Agb25jZSB0aGUgdHJhbnNpdGlvbiBpcyBjb21wbGV0ZS5cbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgT2JqZWN0LmtleXModGhpcy5zY2hlbWEuZXZlbnRzIHx8IHt9KSkge1xuICAgICAgICBldmVudHNbYG9uJHtjYW1lbGl6ZShldmVudCwgdHJ1ZSl9YF0gPz89ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmVtaXRFdmVudChldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGV2ZW50c1xuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBuYXRpdmVGaWVsZCwgdGV4dEZpZWxkIH0gPSB0aGlzLiRvcHRpb25zXG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXZlbnRzLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuXG4gICAgICBpZiAobmF0aXZlRmllbGQpIHtcbiAgICAgICAgYXR0cmlidXRlcy5uYW1lID0gdGhpcy5kYXRhUGF0aFxuICAgICAgICBpZiAodGhpcy5sYWJlbCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMudGl0bGUgPSB0aGlzLmxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHlcbiAgICAgICAgYXR0cmlidXRlcy5hdXRvZm9jdXMgPSB0aGlzLmF1dG9mb2N1c1xuICAgICAgICBpZiAodGV4dEZpZWxkKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5tYXhsZW5ndGggPSB0aGlzLm1heExlbmd0aFxuICAgICAgICAgIGF0dHJpYnV0ZXMucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyXG4gICAgICAgICAgYXR0cmlidXRlcy5hdXRvY29tcGxldGUgPSB0aGlzLmF1dG9jb21wbGV0ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIHZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7IC4uLnRoaXMuZ2V0VmFsaWRhdGlvbnMoKSB9XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yZXF1aXJlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBkZWZhdWx0IHJ1bGVzIGFuZCBhZGQgYW55IG5ldyBvbmVzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEucnVsZXMgfHwge30pKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHZhbGlkYXRpb25zW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uc1trZXldID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfSxcblxuICAgIHNob3dDbGVhckJ1dHRvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZSAmJiB0aGlzLnZhbHVlICE9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0RXZlbnRzKCkge1xuICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH0gPSB0aGlzXG4gICAgICByZXR1cm4geyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBhc3luYyBzY3JvbGxJbnRvVmlldygpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9jdXNTY2hlbWEoKVxuICAgICAgdGhpcy5nZXRGb2N1c0VsZW1lbnQoKT8uc2Nyb2xsSW50b1ZpZXc/Lih7XG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgYmxvY2s6ICdjZW50ZXInXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLmdldEZvY3VzRWxlbWVudCgpPy5mb2N1cz8uKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgYmx1ckVsZW1lbnQoKSB7XG4gICAgICB0aGlzLmdldEZvY3VzRWxlbWVudCgpPy5ibHVyPy4oKVxuICAgIH0sXG5cbiAgICBnZXRGb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gYXNBcnJheSh0aGlzLiRyZWZzLmVsZW1lbnQpWzBdID8/IHRoaXNcbiAgICAgIHJldHVybiBlbGVtZW50LiRlbCA/PyBlbGVtZW50XG4gICAgfSxcblxuICAgIGFzeW5jIGZvY3VzU2NoZW1hKCkge1xuICAgICAgLy8gQWxzbyBmb2N1cyB0aGlzIGNvbXBvbmVudCdzIHNjaGVtYSBhbmQgcGFuZWwgaW4gY2FzZSBpdCdzIGEgdGFiLlxuICAgICAgYXdhaXQgdGhpcy5zY2hlbWFDb21wb25lbnQuZm9jdXMoKVxuICAgICAgYXdhaXQgdGhpcy50YWJDb21wb25lbnQ/LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9jdXMoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZvY3VzU2NoZW1hKClcbiAgICAgIHRoaXMuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5ibHVyRWxlbWVudCgpXG4gICAgfSxcblxuICAgIGNsZWFyKCkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgIHRoaXMuYmx1cigpXG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgb25Gb2N1cygpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWVcbiAgICAgIHRoaXMubWFya1RvdWNoZWQoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2ZvY3VzJylcbiAgICB9LFxuXG4gICAgb25CbHVyKCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2VcbiAgICAgIHRoaXMudmFsaWRhdGUoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2JsdXInKVxuICAgIH0sXG5cbiAgICBvbklucHV0KCkge1xuICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJywge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLy8gUHJldmVudCBlbmRsZXNzIHBhcnNlIHJlY3Vyc2lvbjpcbiAgICAgICAgICB2YWx1ZTogdGhpcy5wYXJzZWRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5wYXJzZWRWYWx1ZSA6IHRoaXMudmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUGFzcyBgc2NoZW1hQ29tcG9uZW50YCBhcyBwYXJlbnQsIHNvIGNoYW5nZSBldmVudHMgY2FuIHByb3BhZ2F0ZSB1cC5cbiAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IHRvUmF3IH0gZnJvbSAndnVlJ1xuXG5jb25zdCB1aWRNYXAgPSBuZXcgV2Vha01hcCgpXG5cbi8vIEdlbmVyYXRlZCBhbmQgcmVtZW1iZXJzIHVuaXF1ZSBpZHMgcGVyIHBhc3NlZCBvYmplY3QgdXNpbmcgYSB3ZWFrIG1hcC5cbmxldCB1aWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlkKGl0ZW0sIGdldEl0ZW1JZCA9IG51bGwpIHtcbiAgY29uc3QgcmF3ID0gdG9SYXcoaXRlbSlcbiAgbGV0IGlkID0gdWlkTWFwLmdldChyYXcpXG4gIGlmICghaWQpIHtcbiAgICBpZCA9IGdldEl0ZW1JZD8uKGl0ZW0pIHx8IGBAJHsrK3VpZH1gXG4gICAgdWlkTWFwLnNldChyYXcsIGlkKVxuICB9XG4gIHJldHVybiBpZFxufVxuIiwiaW1wb3J0IHsgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzSW50ZWdlcixcbiAgYXNBcnJheSxcbiAgcGFyc2VEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnXG5cbi8vIFNjaGVtYUdyYXBoIGlzIGEgY2xhc3MgdG8gY29sbGVjdCBzY2hlbWEgZ3JhcGggbWV0YSBpbmZvcm1hdGlvbiBpbiBvcmRlciB0b1xuLy8gcHJvY2VzcyBzb3VyY2VzIGFuZCByZWxhdGlvbnMgZm9yIHRoZSBnaXZlbiB0YXJnZXRzICdzZXJ2ZXInIGFuZCAnY2xpcGJvYXJkJyxcbi8vIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOlxuLy9cbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXJ2ZXIgICAgfCBjbGlwYm9hcmQgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IGZhbHNlICAgICAgICAgICB8IGtlZXAgaWQgICB8IGtlZXAgaWQgICB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSwgdGVtcG9yYXJ5IHwgcmVmLCAjcmVmIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSwgdGVtcG9yYXJ5ICAgfCByZWYsICNpZCAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSAgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjaWQgIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUsIHRlbXBvcmFyeSAgICB8IHJlZiwgI2lkICB8IHJlZiwgI2lkICB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuXG5leHBvcnQgY2xhc3MgU2NoZW1hR3JhcGgge1xuICBncmFwaCA9IHt9XG4gIHJlZmVyZW5jZXMgPSB7fVxuXG4gIHNldChkYXRhUGF0aCwgc2V0dGluZ3MsIGRlZmF1bHRzKSB7XG4gICAgZGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgIGxldCBzdWJHcmFwaCA9IHRoaXMuZ3JhcGhcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGF0YVBhdGgpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlzSW50ZWdlcigrcGFydCkgPyAnKicgOiBwYXJ0XG4gICAgICBzdWJHcmFwaCA9IHN1YkdyYXBoW2tleV0gPz89IHt9XG4gICAgfVxuICAgIHN1YkdyYXBoLiRzZXR0aW5ncyA9IHtcbiAgICAgIC4uLmRlZmF1bHRzLCAvLyBTZWUgYGFkZFNvdXJjZShkYXRhUGF0aClgXG4gICAgICAuLi5zdWJHcmFwaC4kc2V0dGluZ3MsXG4gICAgICAuLi5zZXR0aW5nc1xuICAgIH1cbiAgfVxuXG4gIGFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgLy8gT25seSBzZXQgYHJlbGF0ZWQ6IGZhbHNlYCB0aHJvdWdoIHRoZSBkZWZhdWx0cywgYXMgYHNldFNvdXJjZVJlbGF0ZWQoKWBcbiAgICAvLyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBgYWRkU291cmNlKClgLCBkZXBlbmRpbmcgb24gdGhlIGdyYXBoIHN0cnVjdHVyZS5cbiAgICB0aGlzLnNldChkYXRhUGF0aCwgeyB0eXBlOiAnc291cmNlJywgc2NoZW1hIH0sIHsgcmVsYXRlZDogZmFsc2UgfSlcbiAgfVxuXG4gIHNldFNvdXJjZVJlbGF0ZWQoZGF0YVBhdGgpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgcmVsYXRlZDogdHJ1ZSxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICB0eXBlOiAncmVsYXRpb24nLFxuICAgICAgc2NoZW1hLFxuICAgICAgaW50ZXJuYWw6ICEhcmVsYXRlZERhdGFQYXRoLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChyZWxhdGVkRGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aCkge1xuICAgIHJldHVybiBkYXRhUGF0aFxuICAgICAgPyAodGhpcy5yZWZlcmVuY2VzW2RhdGFQYXRoXSA/Pz0gbmFub2lkKDYpKVxuICAgICAgOiBudWxsXG4gIH1cblxuICBmbGF0dGVuKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSBncmFwaCA9PiB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gW11cbiAgICAgIGZvciAoY29uc3QgW2tleSwgeyAkc2V0dGluZ3MsIC4uLnN1YkdyYXBoIH1dIG9mIE9iamVjdC5lbnRyaWVzKGdyYXBoKSkge1xuICAgICAgICBpZiAoJHNldHRpbmdzKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksICRzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbc3ViS2V5LCBzZXR0aW5nc10gb2YgZmxhdHRlbihzdWJHcmFwaCkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2Ake2tleX0vJHtzdWJLZXl9YCwgc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllc1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuKHRoaXMuZ3JhcGgpXG4gIH1cblxuICBwcm9jZXNzKHNvdXJjZVNjaGVtYSwgZGF0YSwgeyB0YXJnZXQgfSkge1xuICAgIGNvbnN0IGNsaXBib2FyZCA9IHRhcmdldCA9PT0gJ2NsaXBib2FyZCdcbiAgICBpZiAoY2xpcGJvYXJkKSB7XG4gICAgICBkZWxldGUgZGF0YVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIHNldHRpbmdzXSBvZiB0aGlzLmZsYXR0ZW4oKSkge1xuICAgICAgY29uc3QgeyB0eXBlLCBzY2hlbWEsIGludGVybmFsLCByZWxhdGVkLCByZWZlcmVuY2UgfSA9IHNldHRpbmdzXG4gICAgICBjb25zdCBzb3VyY2UgPSB0eXBlID09PSAnc291cmNlJ1xuICAgICAgY29uc3QgcmVsYXRpb24gPSB0eXBlID09PSAncmVsYXRpb24nXG4gICAgICBpZiAoc291cmNlIHx8IHJlbGF0aW9uICYmIGludGVybmFsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGdldFZhbHVlQXREYXRhUGF0aChkYXRhLCBkYXRhUGF0aCwgKCkgPT4gbnVsbClcbiAgICAgICAgY29uc3QgcmVtb3ZlSWQgPSBjbGlwYm9hcmQgJiYgc291cmNlICYmICFyZWxhdGVkXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gKFxuICAgICAgICAgIGNsaXBib2FyZCAmJiAoXG4gICAgICAgICAgICByZWxhdGlvbiAmJiBpbnRlcm5hbCB8fFxuICAgICAgICAgICAgc291cmNlICYmIHJlbGF0ZWRcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhc0FycmF5KHZhbHVlcykuZmxhdCgpKSB7XG4gICAgICAgICAgY29uc3QgaWRLZXkgPSAoXG4gICAgICAgICAgICBzb3VyY2UgJiYgc2NoZW1hLmlkS2V5IHx8XG4gICAgICAgICAgICByZWxhdGlvbiAmJiBzY2hlbWEucmVsYXRlQnkgfHxcbiAgICAgICAgICAgICdpZCdcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWU/LltpZEtleV1cbiAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZUlkKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VJZCB8fCBpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICBpZiAoaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgICBpZCA9IGlkLnNsaWNlKDEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmVmS2V5ID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyAvLyBDbGlwYm9hcmQganVzdCBuZWVkcyB0ZW1wb3JhcnkgaWRzIHVuZGVyIHRoZSBhY3R1YWwgYGlkS2V5YFxuICAgICAgICAgICAgICAgICAgaWRLZXlcbiAgICAgICAgICAgICAgICA6IC8vIFNlcnZlciB3YW50cyBPYmplY3Rpb24tc3R5bGUgJyNpZCcgLyAnI3JlZicgcGFpcnMuXG4gICAgICAgICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgICAgID8gJyNpZCdcbiAgICAgICAgICAgICAgICAgIDogJyNyZWYnXG4gICAgICAgICAgICAgIGNvbnN0IHJldlZhbHVlID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyBgQCR7aWR9YFxuICAgICAgICAgICAgICAgIDogLy8gS2VlcCB0aGUgaWRzIHVuaXF1ZSBpbiByZWZlcmVuY2UgZ3JvdXBzLCBzaW5jZSB0aGV5XG4gICAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2UgYWNyb3NzIHRoZSBmdWxsIGdyYXBoLlxuICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICA/IGAke3JlZmVyZW5jZX0tJHtpZH1gXG4gICAgICAgICAgICAgICAgICA6IGlkIC8vIEEgdGVtcG9yYXJ5IGlkIHdpdGhvdXQgYSByZWxhdGVkLCBqdXN0IHByZXNlcnZlIGl0LlxuICAgICAgICAgICAgICB2YWx1ZVtyZWZLZXldID0gcmV2VmFsdWVcbiAgICAgICAgICAgICAgaWYgKHJlZktleSAhPT0gaWRLZXkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNBcnJheSxcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0Jvb2xlYW4sXG4gIGlzTnVtYmVyLFxuICBpc0Z1bmN0aW9uLFxuICBpc0RhdGUsXG4gIGlzUmVnRXhwLFxuICBhc0FycmF5XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHR5cGVDaGVja2VycyA9IHtcbiAgQm9vbGVhbjogaXNCb29sZWFuLFxuICBOdW1iZXI6IGlzTnVtYmVyLFxuICBTdHJpbmc6IGlzU3RyaW5nLFxuICBEYXRlOiBpc0RhdGUsXG4gIEFycmF5OiBpc0FycmF5LFxuICBPYmplY3Q6IGlzT2JqZWN0LFxuICBSZWdFeHA6IGlzUmVnRXhwLFxuICBGdW5jdGlvbjogaXNGdW5jdGlvblxufVxuXG4vLyBEZWNsYXJlIHRoZXNlIHNlcGFyYXRlbHkgZnJvbSB0aGUgYHR5cGVDb252ZXJ0ZXJzYCBvYmplY3QsIHRvIHByZXZlbnRcbi8vIEJhYmVsIGlzc3VlcyB3aXRoIGBPYmplY3RgIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBgT2JqZWN0YDpcbmNvbnN0IHRvQm9vbGVhbiA9IHZhbHVlID0+ICEhdmFsdWVcbmNvbnN0IHRvTnVtYmVyID0gdmFsdWUgPT4gK3ZhbHVlXG5jb25zdCB0b1N0cmluZyA9IHZhbHVlID0+IFN0cmluZyh2YWx1ZSlcblxuY29uc3QgdG9EYXRlID0gdmFsdWUgPT5cbiAgaXNEYXRlKHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IG5ldyBEYXRlKHZhbHVlKVxuXG5jb25zdCB0b0FycmF5ID0gdmFsdWUgPT5cbiAgaXNBcnJheSh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc1N0cmluZyh2YWx1ZSlcbiAgICAgID8gdmFsdWUuc3BsaXQoJywnKVxuICAgICAgOiBhc0FycmF5KHZhbHVlKVxuXG5jb25zdCB0b09iamVjdCA9IHZhbHVlID0+XG4gIGlzT2JqZWN0KHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IC8vIElmIGEgT2JqZWN0IGlzIGV4cGVjdGVkIGJ1dCBhIEJvb2xlYW4gcHJvdmlkZSwgY29udmVydCB0byBhbiBlbXB0eVxuICAgICAgLy8gb2JqZWN0LiBVc2VkIGJ5IGBjcmVhdGFibGVgICYgY28sIHRoYXQgY2FuIGJlIGJvdGguXG4gICAgICB2YWx1ZSA9PT0gdHJ1ZVxuICAgICAgPyB7fVxuICAgICAgOiBudWxsXG5cbmNvbnN0IHRvUmVnRXhwID0gdmFsdWUgPT5cbiAgaXNSZWdFeHAodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogbmV3IFJlZ0V4cCh2YWx1ZSlcblxuY29uc3QgdHlwZUNvbnZlcnRlcnMgPSB7XG4gIEJvb2xlYW46IHRvQm9vbGVhbixcbiAgTnVtYmVyOiB0b051bWJlcixcbiAgU3RyaW5nOiB0b1N0cmluZyxcbiAgRGF0ZTogdG9EYXRlLFxuICBBcnJheTogdG9BcnJheSxcbiAgT2JqZWN0OiB0b09iamVjdCxcbiAgUmVnRXhwOiB0b1JlZ0V4cFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSB7XG4gIC8vIFNlZSBpZiBhbnkgb2YgdGhlIGV4cGVjdCB0eXBlcyBtYXRjaCwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZXkgZG86XG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAodHlwZUNoZWNrZXJzW3R5cGUubmFtZV0/Lih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSkge1xuICBjb25zdCBjb252ZXJ0ZXIgPSB0eXBlICYmIHR5cGVDb252ZXJ0ZXJzW3R5cGUubmFtZSB8fCB0eXBlXVxuICByZXR1cm4gY29udmVydGVyID8gY29udmVydGVyKHZhbHVlKSA6IHZhbHVlXG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRGl0b01peGluIGZyb20gJy4uL21peGlucy9EaXRvTWl4aW4uanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRVaWQgfSBmcm9tICcuL3VpZC5qcydcbmltcG9ydCB7IFNjaGVtYUdyYXBoIH0gZnJvbSAnLi9TY2hlbWFHcmFwaC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi90eXBlLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0FycmF5LFxuICBpc0Z1bmN0aW9uLFxuICBpc1Byb21pc2UsXG4gIGlzTW9kdWxlLFxuICBhc0FycmF5LFxuICBjbG9uZSxcbiAgY2FtZWxpemUsXG4gIGFzc2lnbkRlZXBseSxcbiAgbWFwQ29uY3VycmVudGx5LFxuICBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IG1hcmtSYXcsIHJlYWN0aXZlIH0gZnJvbSAndnVlJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cbmNvbnN0IGVtcHR5U2NoZW1hID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWFzLCBjYWxsYmFjaykge1xuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEuY29tcG9uZW50LCBzY2hlbWEubmFtZSwgMClcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1NjaGVtYShzY2hlbWEpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5jb21wb25lbnRzIHx8IHt9KSkge1xuICAgICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUsIDEpXG4gICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhbc2NoZW1hLCAuLi5nZXRUYWJTY2hlbWFzKHNjaGVtYSldLCBjYWxsYmFjaylcbiAgICA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICBjb21wb25lbnQgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCkgPyBjb21wb25lbnQgOiB1bmRlZmluZWQpXG4gICAgKSA/PyBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgY29tcG9uZW50ID0+IChjYWxsYmFjayhjb21wb25lbnQpID8gdHJ1ZSA6IHVuZGVmaW5lZClcbiAgICApID8/IGZhbHNlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5TmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIChcbiAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbXBvbmVudCA9PiAoY2FsbGJhY2soY29tcG9uZW50KSA/IHVuZGVmaW5lZCA6IGZhbHNlKVxuICAgICkgPz8gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSkge1xuICByZXR1cm4gc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsICgpID0+IHRydWUpID8/IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NjaGVtYShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYSkgJiYgaXNTdHJpbmcoc2NoZW1hLnR5cGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm0oc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAnZm9ybSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICd2aWV3J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUYWIoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAndGFiJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYW5lbChzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdwYW5lbCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWVudShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdtZW51J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNjaGVtYSlcbn1cblxuY29uc3QgcmVzb2x2ZWRTY2hlbWFzID0gbmV3IFdlYWtNYXAoKVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWEodmFsdWUsIHVud3JhcE1vZHVsZSA9IGZhbHNlKSB7XG4gIGlmIChyZXNvbHZlZFNjaGVtYXMuaGFzKHZhbHVlKSkge1xuICAgIHJldHVybiByZXNvbHZlZFNjaGVtYXMuZ2V0KHZhbHVlKVxuICB9XG4gIGxldCBzY2hlbWEgPSB2YWx1ZVxuICBpZiAoaXNGdW5jdGlvbihzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gc2NoZW1hKClcbiAgfVxuICBpZiAoaXNQcm9taXNlKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBhd2FpdCBzY2hlbWFcbiAgfVxuICBpZiAoaXNNb2R1bGUoc2NoZW1hKSkge1xuICAgIC8vIENvcHkgdG8gY29udmVydCBmcm9tIG1vZHVsZSB0byBvYmplY3Q6XG4gICAgc2NoZW1hID0geyAuLi5zY2hlbWEgfVxuICAgIC8vIFVud3JhcCBkZWZhdWx0IG9yIG5hbWVkIHNjaGVtYVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgKHVud3JhcE1vZHVsZSB8fCBzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICAgIC8vIEZpbHRlciBvdXQgaW50ZXJuYWwga2V5IGFkZGVkIGJ5IHZpdGUgLyB2dWUgMyBwbHVnaW4gd2hlbiBjaGFuZ2luZ1xuICAgICAgLy8gY29kZSBpbiBhIGR5bmFtaWNhbGx5IGltcG9ydGVkIHZ1ZSBjb21wb25lbnQsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRlanMvdml0ZS1wbHVnaW4tdnVlL2Jsb2IvYWJkZjVmNGYzMmQwMmFmNjQxZTVmNjA4NzFiZGUxNDUzNTU2OWIxZS9wYWNrYWdlcy9wbHVnaW4tdnVlL3NyYy9tYWluLnRzI0wxMzNcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpLmZpbHRlcihrZXkgPT4ga2V5ICE9PSAnX3JlcmVuZGVyX29ubHknKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmVzb2x2ZWRTY2hlbWFzLnNldCh2YWx1ZSwgc2NoZW1hKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hcyhcbiAgdW5yZXNvbHZlZFNjaGVtYXMsXG4gIHJlc29sdmVJdGVtID0gcmVzb2x2ZVNjaGVtYVxuKSB7XG4gIGxldCBzY2hlbWFzID0gaXNGdW5jdGlvbih1bnJlc29sdmVkU2NoZW1hcylcbiAgICA/IHVucmVzb2x2ZWRTY2hlbWFzKClcbiAgICA6IHVucmVzb2x2ZWRTY2hlbWFzXG4gIHNjaGVtYXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYXMsIGZhbHNlKVxuICBpZiAoaXNBcnJheShzY2hlbWFzKSkge1xuICAgIC8vIFRyYW5zbGF0ZSBhbiBhcnJheSBvZiBkeW5hbWljIGltcG9ydCwgZWFjaCBpbXBvcnRpbmcgb25lIG5hbWVkIHNjaGVtYVxuICAgIC8vIG1vZHVsZSB0byBhbiBvYmplY3Qgd2l0aCBuYW1lZCBlbnRyaWVzLlxuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIHNjaGVtYXMsXG4gICAgICAgIGFzeW5jIGl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgICAgcmV0dXJuIFtzY2hlbWEubmFtZSwgc2NoZW1hXVxuICAgICAgICB9XG4gICAgICApXG4gICAgKVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNjaGVtYXMpKSB7XG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIGF3YWl0IG1hcENvbmN1cnJlbnRseShcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hcyksXG4gICAgICAgIGFzeW5jIChba2V5LCBpdGVtXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfVxuICByZXR1cm4gc2NoZW1hc1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVZpZXdzKHVucmVzb2x2ZWRWaWV3cykge1xuICByZXR1cm4gcmVzb2x2ZVNjaGVtYXModW5yZXNvbHZlZFZpZXdzLCBhc3luYyAoc2NoZW1hLCB1bndyYXBNb2R1bGUpID0+IHtcbiAgICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlKVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgaXNNZW51KHNjaGVtYSkpIHtcbiAgICAgIC8vIEdlbmVyYXRlIGEgbmFtZSBmb3Igc3ViLW1lbnVzIGZyb20gdGhlaXIgbGFiZWwgaWYgaXQncyBtaXNzaW5nLlxuICAgICAgLy8gTk9URTogVGhpcyBpcyBuZXZlciBhY3R1YWxseSByZWZlcmVuY2VkIGZyb20gYW55d2hlcmUsIGJ1dCB0aGV5IG5lZWRcbiAgICAgIC8vIGEgbmFtZSBieSB3aGljaCB0aGV5J3JlIHN0b3JlZCBpbiB0aGUgcGFyZW50IG9iamVjdC5cbiAgICAgIHNjaGVtYS5uYW1lID0gY2FtZWxpemUoc2NoZW1hLmxhYmVsKVxuICAgICAgc2NoZW1hLml0ZW1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoc2NoZW1hLml0ZW1zKVxuICAgIH1cbiAgICByZXR1cm4gc2NoZW1hXG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuVmlld3Modmlld3MpIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyh2aWV3cykucmVkdWNlKFxuICAgICAgKGVudHJpZXMsIFtrZXksIHNjaGVtYV0pID0+IHtcbiAgICAgICAgaWYgKGlzTWVudShzY2hlbWEpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKC4uLk9iamVjdC5lbnRyaWVzKHNjaGVtYS5pdGVtcykpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksIHNjaGVtYV0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICAgIH0sXG4gICAgICBbXVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpIHtcbiAgLy8gUmVzb2x2ZXMgYXN5bmMgc2NoZW1hIGNvbXBvbmVudHMgYW5kIGFkZHMgRGl0b01peGluIGFuZCBUeXBlTWl4aW4gdG8gdGhlbS5cbiAgbGV0IHsgY29tcG9uZW50IH0gPSBzY2hlbWFcbiAgaWYgKGNvbXBvbmVudCkge1xuICAgIGNvbXBvbmVudCA9IGF3YWl0IHJlc29sdmVTY2hlbWEoY29tcG9uZW50LCB0cnVlKVxuICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgIC8vIFByZXZlbnQgd2FybmluZzogXCJWdWUgcmVjZWl2ZWQgYSBDb21wb25lbnQgd2hpY2ggd2FzIG1hZGUgYSByZWFjdGl2ZVxuICAgICAgLy8gb2JqZWN0LiBUaGlzIGNhbiBsZWFkIHRvIHVubmVjZXNzYXJ5IHBlcmZvcm1hbmNlIG92ZXJoZWFkLCBhbmQgc2hvdWxkXG4gICAgICAvLyBiZSBhdm9pZGVkIGJ5IG1hcmtpbmcgdGhlIGNvbXBvbmVudCB3aXRoIGBtYXJrUmF3YFwiOlxuICAgICAgc2NoZW1hLmNvbXBvbmVudCA9IG1hcmtSYXcoe1xuICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgIG1peGluczogW0RpdG9NaXhpbiwgVHlwZU1peGluLCAuLi4oY29tcG9uZW50Lm1peGlucyB8fCBbXSldXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hcykge1xuICAvLyBgc2NoZW1hc2AgYXJlIG9mIHRoZSBzYW1lIHBvc3NpYmxlIGZvcm1zIGFzIHBhc3NlZCB0byBgZ2V0TmFtZWRTY2hlbWFzKClgXG4gIGF3YWl0IG1hcENvbmN1cnJlbnRseShPYmplY3QudmFsdWVzKHNjaGVtYXMgfHwge30pLCByZXNvbHZlU2NoZW1hQ29tcG9uZW50KVxufVxuXG5jb25zdCBwcm9jZXNzZWRTY2hlbWFEZXB0aHMgPSBuZXcgV2Vha01hcCgpXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoXG4gIGFwaSxcbiAgc2NoZW1hLFxuICByb3V0ZXMgPSBudWxsLFxuICBsZXZlbCA9IDAsXG4gIG1heERlcHRoID0gMVxuKSB7XG4gIGlmIChzY2hlbWEpIHtcbiAgICBjb25zdCBkZXB0aCA9IHByb2Nlc3NlZFNjaGVtYURlcHRocy5nZXQoc2NoZW1hKSA/PyAwXG4gICAgaWYgKGRlcHRoIDwgbWF4RGVwdGgpIHtcbiAgICAgIHByb2Nlc3NlZFNjaGVtYURlcHRocy5zZXQoc2NoZW1hLCBkZXB0aCArIDEpXG4gICAgICBjb25zdCBwcm9taXNlcyA9IFtdXG4gICAgICBjb25zdCBwcm9jZXNzID0gKGNvbXBvbmVudCwgbmFtZSwgcmVsYXRpdmVMZXZlbCkgPT4ge1xuICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgIHByb2Nlc3NTY2hlbWFDb21wb25lbnQoXG4gICAgICAgICAgICBhcGksXG4gICAgICAgICAgICBjb21wb25lbnQsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgcm91dGVzLFxuICAgICAgICAgICAgbGV2ZWwgKyByZWxhdGl2ZUxldmVsXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSwgcHJvY2VzcylcbiAgICAgIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLCBwcm9jZXNzKVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50KFxuICBhcGksXG4gIHNjaGVtYSxcbiAgbmFtZSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwXG4pIHtcbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuXG4gIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgLy8gQWxzbyBwcm9jZXNzIG5lc3RlZCBwYW5lbCBzY2hlbWFzLlxuICAgIG1hcENvbmN1cnJlbnRseShcbiAgICAgIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBwYW5lbCwgcm91dGVzLCBsZXZlbClcbiAgICApLFxuICAgIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICAgIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NTY2hlbWE/LihcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG5hbWUsXG4gICAgICByb3V0ZXMsXG4gICAgICBsZXZlbFxuICAgIClcbiAgXSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUsIGZ1bGxQYXRoID0gJycpIHtcbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIGZ1bGxQYXRoKVxuICBsZXQgY2hpbGRyZW4gPSBbXVxuICBpZiAoaXNWaWV3KHNjaGVtYSkpIHtcbiAgICBhd2FpdCBwcm9jZXNzTmVzdGVkU2NoZW1hcyhhcGksIHNjaGVtYSlcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4pXG4gIH0gZWxzZSBpZiAoaXNNZW51KHNjaGVtYSkpIHtcbiAgICBjaGlsZHJlbiA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hLml0ZW1zKS5tYXAoYXN5bmMgKFtuYW1lLCBpdGVtXSkgPT5cbiAgICAgICAgcHJvY2Vzc1ZpZXcoY29tcG9uZW50LCBhcGksIGl0ZW0sIG5hbWUsIHNjaGVtYS5mdWxsUGF0aClcbiAgICAgIClcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZpZXcgc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBzY2hlbWEuZnVsbFBhdGgsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKSB7XG4gIGxldCBkZWZhdWx0cyA9IGFwaS5kZWZhdWx0c1tzY2hlbWEudHlwZV1cbiAgaWYgKGRlZmF1bHRzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdHMpKSB7XG4gICAgICBkZWZhdWx0cyA9IGRlZmF1bHRzKHNjaGVtYSlcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KGRlZmF1bHRzKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdHMpKSB7XG4gICAgICAgIGlmIChzY2hlbWFba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NoZW1hW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjaGVtYVtrZXldID0gYXNzaWduRGVlcGx5KHNjaGVtYVtrZXldLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKSB7XG4gIC8vIFByb2Nlc3MgZGVmYXVsdHMgZm9yIG5lc3RlZCBzY2hlbWFzLiBOb3RlIHRoYXQgdGhpcyBpcyBhbHNvIGRvbmUgd2hlblxuICAvLyBjYWxsaW5nIGBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cygpYCwgYnV0IHRoYXQgZnVuY3Rpb24gaXMgYXN5bmMsIGFuZCB3ZVxuICAvLyBuZWVkIGEgc3luYyB2ZXJzaW9uIHRoYXQgb25seSBoYW5kbGVzIHRoZSBkZWZhdWx0cyBmb3IgZmlsdGVycywgc2VlXG4gIC8vIGBnZXRGaWx0ZXJzUGFuZWwoKWAuXG4gIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSwgY29tcG9uZW50ID0+IHtcbiAgICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBjb21wb25lbnQpXG4gICAgY29uc3QgZm9ybXMgPSBnZXRGb3JtU2NoZW1hcyhjb21wb25lbnQpXG4gICAgZm9yIChjb25zdCBmb3JtIG9mIE9iamVjdC52YWx1ZXMoZm9ybXMpKSB7XG4gICAgICBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBmb3JtKVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgZnVsbFBhdGggPSBudWxsKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW4uXG4gIHNjaGVtYS5uYW1lID8/PSBuYW1lXG4gIHNjaGVtYS5wYXRoID8/PSBhcGkubm9ybWFsaXplUGF0aChuYW1lKVxuICBpZiAoZnVsbFBhdGggIT09IG51bGwpIHtcbiAgICBzY2hlbWEuZnVsbFBhdGggPSBgJHtmdWxsUGF0aH0vJHtzY2hlbWEucGF0aH1gXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpIHtcbiAgY29uc3Qgcm91dGVzID0gW11cbiAgLy8gRmlyc3QgcmVzb2x2ZSB0aGUgZm9ybXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGJhY2sgb24gdGhlIHNjaGVtYS5cbiAgY29uc3QgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cywgbWF4RGVwdGggPSAxIH0gPSBzY2hlbWFcbiAgaWYgKGZvcm1zKSB7XG4gICAgc2NoZW1hLmZvcm1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoZm9ybXMsIGZvcm0gPT5cbiAgICAgIHByb2Nlc3NGb3JtKGFwaSwgZm9ybSwgcm91dGVzLCBsZXZlbCwgbWF4RGVwdGgpXG4gICAgKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBzY2hlbWEuZm9ybSA9IGF3YWl0IHByb2Nlc3NGb3JtKGFwaSwgZm9ybSwgcm91dGVzLCBsZXZlbCwgbWF4RGVwdGgpXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoY29tcG9uZW50cykpIHtcbiAgICAvLyBOT1RFOiBQcm9jZXNzaW5nIGZvcm1zIGluIGNvbXB1dGVkIGNvbXBvbmVudHMgaXMgbm90IHN1cHBvcnRlZCwgc2luY2UgaXRcbiAgICAvLyBvbmx5IGNhbiBiZSBjb21wdXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFjdHVhbCBkYXRhLlxuICAgIGNvbnN0IGZvcm0gPSB7XG4gICAgICB0eXBlOiAnZm9ybScsXG4gICAgICBjb21wb25lbnRzXG4gICAgfVxuICAgIGF3YWl0IHByb2Nlc3NGb3JtKGFwaSwgZm9ybSwgcm91dGVzLCBsZXZlbCwgbWF4RGVwdGgpXG4gIH1cbiAgcmV0dXJuIHJvdXRlc1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oXG4gIGFwaSxcbiAgc2NoZW1hLFxuICByb3V0ZXMgPSBudWxsLFxuICBsZXZlbCA9IDAsXG4gIG1heERlcHRoID0gMVxuKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzRm9ybShzY2hlbWEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZvcm0gc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICBhd2FpdCBwcm9jZXNzTmVzdGVkU2NoZW1hcyhhcGksIHNjaGVtYSlcbiAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwsIG1heERlcHRoKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVGFiKGFwaSwgc2NoZW1hKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzVGFiKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGFiIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1BhbmVsKGFwaSwgc2NoZW1hKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzUGFuZWwoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYW5lbCBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKSB7XG4gIGNvbnN0IHsgdGFicywgcGFuZWxzIH0gPSBzY2hlbWFcbiAgaWYgKHRhYnMpIHtcbiAgICBzY2hlbWEudGFicyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKFxuICAgICAgdGFicyxcbiAgICAgIHRhYiA9PiBwcm9jZXNzVGFiKGFwaSwgdGFiKVxuICAgIClcbiAgfVxuICBpZiAocGFuZWxzKSB7XG4gICAgc2NoZW1hLnBhbmVscyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKFxuICAgICAgcGFuZWxzLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1BhbmVsKGFwaSwgcGFuZWwpXG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNGb3JtU2NoZW1hKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGJvdGggc2luZ2xlIGZvcm0gYW5kIG11bHRpcGxlIGZvcm1zIG5vdGF0aW9uLCBhcyB3ZWxsIGFzIGlubGluZWRcbiAgLy8gY29tcG9uZW50cy5cbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmZvcm0gfHwgc2NoZW1hLmZvcm1zIHx8IHNjaGVtYS5jb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBPYmplY3Qua2V5cyhzY2hlbWE/LmZvcm1zIHx8IHt9KS5sZW5ndGggPiAxXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1ZpZXcoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5jb21wb25lbnQpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB7IHZpZXcgfSA9IHNjaGVtYVxuICBjb25zdCB2aWV3U2NoZW1hID0gdmlldyAmJiBjb250ZXh0LmZsYXR0ZW5lZFZpZXdzW3ZpZXddXG4gIHJldHVybiB2aWV3U2NoZW1hXG4gICAgPyAvLyBOT1RFOiBWaWV3cyBjYW4gaGF2ZSB0YWJzLCBpbiB3aGljaCBjYXNlIHRoZSB2aWV3IGNvbXBvbmVudCBpcyBuZXN0ZWRcbiAgICAgIC8vIGluIG9uZSBvZiB0aGUgdGFicywgZ28gZmluZCBpdC5cbiAgICAgIGZpbmROZXN0ZWRTY2hlbWFDb21wb25lbnQodmlld1NjaGVtYSwgaGFzRm9ybVNjaGVtYSkgfHwgbnVsbFxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgICA/IGNvbnRleHQuZmxhdHRlbmVkVmlld3Nbc2NoZW1hLnZpZXddXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICByZXR1cm4gISFnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdFZGl0UGF0aChzY2hlbWEsIGlkLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXcpIHtcbiAgICBjb25zdCBwYXRoID0gaXNTaW5nbGVDb21wb25lbnRWaWV3KHZpZXcpXG4gICAgICA/IHZpZXcuZnVsbFBhdGhcbiAgICAgIDogYCR7dmlldy5mdWxsUGF0aH0vJHt2aWV3LnBhdGh9YFxuICAgIHJldHVybiBgJHtwYXRofS8ke2lkfWBcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBtb2RpZnlGb3JtKSB7XG4gIGNvbnN0IHZpZXdTY2hlbWEgPSBjb250ZXh0ICYmIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXdTY2hlbWEpIHtcbiAgICBzY2hlbWEgPSB2aWV3U2NoZW1hXG4gIH0gZWxzZSBpZiAoc2NoZW1hLnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmlldzogJyR7c2NoZW1hLnZpZXd9J2ApXG4gIH1cblxuICBsZXQgeyBmb3JtLCBmb3JtcyB9ID0gc2NoZW1hXG4gIGlmICghZm9ybSAmJiAhZm9ybXMpIHtcbiAgICBjb25zdCB7IG5hbWUsIGNvbXBhY3QsIGNsaXBib2FyZCwgdGFicywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gICAgaWYgKGNvbXBvbmVudHMgfHwgdGFicykge1xuICAgICAgLy8gQ29udmVydCBpbmxpbmVkIGZvcm1zIHRvIHN0YW5kLWFsb25lIGZvcm1zLCBzdXBwb3J0aW5nIGBuYW1lYCxcbiAgICAgIC8vIGBjb21wYWN0YCwgYGNsaXBib2FyZGAsIGB0YWJzYCBhbmQgYGNvbXBvbmVudHNgIHNldHRpbmdzLlxuICAgICAgZm9ybSA9IHsgdHlwZTogJ2Zvcm0nLCBuYW1lLCBjb21wYWN0LCBjbGlwYm9hcmQsIHRhYnMsIGNvbXBvbmVudHMgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBgZm9ybXNgLCBgZm9ybWAgb3IgYGNvbXBvbmVudHNgLCByZXR1cm4gYW5kIGVtcHR5IGBmb3Jtc2Agb2JqZWN0LlxuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGZvcm1zKS5tYXAoKFt0eXBlLCBmb3JtXSkgPT4ge1xuICAgICAgLy8gU3VwcG9ydCBgc2NoZW1hLmNvbXBvbmVudHNgIGNhbGxiYWNrcyB0byBjcmVhdGUgY29tcG9uZW50cyBvbiB0aGUgZmx5LlxuICAgICAgaWYgKGNvbnRleHQgJiYgaXNGdW5jdGlvbihmb3JtLmNvbXBvbmVudHMpKSB7XG4gICAgICAgIC8vIE1ha2UgdGhlIGZvcm0gc2NoZW1hIHJlYWN0aXZlIHNpbmNlIGBwcm9jZXNzRm9ybSgpYCBpcyBhc3luYywgc28gdGhhdFxuICAgICAgICAvLyB0aGUgc2V0dGluZyBvZiBkZWZhdWx0cyB3aWxsIGJlIHBpY2tlZCB1cCBieSBkb3duc3RyZWFtIGNvZGUuXG4gICAgICAgIGZvcm0gPSByZWFjdGl2ZSh7XG4gICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmb3JtLmNvbXBvbmVudHMoY29udGV4dClcbiAgICAgICAgfSlcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgZm9ybSBhZ2Fpbiwgbm93IHRoYXQgd2UgaGF2ZSB0aGUgY29tcG9uZW50cy5cbiAgICAgICAgcHJvY2Vzc0Zvcm0oY29udGV4dC5hcGksIGZvcm0pLmNhdGNoKGNvbnNvbGUuZXJyb3IpXG4gICAgICB9XG4gICAgICByZXR1cm4gW3R5cGUsIG1vZGlmeUZvcm0/Lihmb3JtKSA/PyBmb3JtXVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKSB7XG4gIHJldHVybiBmb3Jtc1tpdGVtPy50eXBlXSB8fCBmb3Jtcy5kZWZhdWx0IHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dCkge1xuICByZXR1cm4gKFxuICAgIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCksIGl0ZW0pIHx8XG4gICAgLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgZW1wdHlTY2hlbWFcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eVNjaGVtYShzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYSA9PT0gZW1wdHlTY2hlbWFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGFjdChzY2hlbWEpIHtcbiAgcmV0dXJuICEhc2NoZW1hLmNvbXBhY3Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5saW5lZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5pbmxpbmVkIHx8IHNjaGVtYS5jb21wb25lbnRzKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEubmVzdGVkIHx8IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHROZXN0ZWQgPT09IHRydWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbChzY2hlbWEsIGdlbmVyYXRlTGFiZWxzKSB7XG4gIGNvbnN0IHsgbGFiZWwgfSA9IHNjaGVtYVxuICByZXR1cm4gKFxuICAgIGxhYmVsICE9PSBmYWxzZSAmJiAoXG4gICAgICAhIWxhYmVsIHx8XG4gICAgICBnZW5lcmF0ZUxhYmVscyAmJiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZW5lcmF0ZUxhYmVsXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbWl0U3BhY2luZyhzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ub21pdFNwYWNpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYVZhbHVlKFxuICBrZXlPckRhdGFQYXRoLFxuICB7IHR5cGUsIHNjaGVtYSwgY2FsbGJhY2sgPSB0cnVlLCBkZWZhdWx0OiBkZWYsIGNvbnRleHQgfSA9IHt9XG4pIHtcbiAgY29uc3QgdHlwZXMgPSB0eXBlICYmIGFzQXJyYXkodHlwZSlcbiAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGRhdGEtcGF0aHMgaW4gYGtleU9yRGF0YVBhdGhgIGNhbiBvbmx5IGJlXG4gIC8vIHByb3ZpZGVkIGluIGluIGFycmF5IGZvcm1hdCBoZXJlOlxuICBsZXQgdmFsdWUgPSBzY2hlbWFcbiAgICA/IGlzQXJyYXkoa2V5T3JEYXRhUGF0aClcbiAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHNjaGVtYSwga2V5T3JEYXRhUGF0aCwgKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgOiBzY2hlbWFba2V5T3JEYXRhUGF0aF1cbiAgICA6IHVuZGVmaW5lZFxuXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oZGVmKSAmJiAhaXNNYXRjaGluZ1R5cGUodHlwZXMsIGRlZikpIHtcbiAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zIGZvciBhbnkgdHlwZSBleGNlcHQgYEZ1bmN0aW9uYDpcbiAgICAgIGRlZiA9IGRlZihjb250ZXh0KVxuICAgIH1cbiAgICByZXR1cm4gZGVmXG4gIH1cblxuICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG4gIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAvLyBhIGZ1bmN0aW9uIHRoYXQncyByZXNvbHZlZCB3aGVuIHRoZSB2YWx1ZSBpcyBldmFsdWF0ZWQ6XG4gIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhbHVlID0gdmFsdWUoY29udGV4dClcbiAgfVxuICAvLyBOb3cgZmluYWxseSBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgdG8gdGhlIGV4cGVjdCB0eXBlcy5cbiAgaWYgKHR5cGVzICYmIHZhbHVlICE9IG51bGwgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKVxuICAgICAgaWYgKGNvbnZlcnRlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuIChcbiAgICBnZXRTY2hlbWFWYWx1ZSgnaWYnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgc2NoZW1hLFxuICAgICAgY29udGV4dCxcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSAmJiAoXG4gICAgICAhaGFzTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEpIHx8XG4gICAgICBzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY29tcG9uZW50ID0+XG4gICAgICAgIHNob3VsZFJlbmRlclNjaGVtYShjb21wb25lbnQsIGNvbnRleHQpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHQoY29udGV4dCkge1xuICByZXR1cm4gaXNGdW5jdGlvbihjb250ZXh0KSA/IGNvbnRleHQoKSA6IGNvbnRleHRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZShzY2hlbWEsIGNvbnRleHQpIHtcbiAgLy8gU3VwcG9ydCBkZWZhdWx0IHZhbHVlcyBib3RoIG9uIHNjaGVtYSBhbmQgb24gY29tcG9uZW50IGxldmVsLlxuICAvLyBOT1RFOiBBdCB0aGUgdGltZSBvZiBjcmVhdGlvbiwgY29tcG9uZW50cyBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCwgKGUuZy4gaWZcbiAgLy8gZW50cmllcyBhcmUgY3JlYXRlZCB0aHJvdWdoIG5lc3RlZCBmb3JtcywgdGhlIHBhcmVudCBmb3JtIGlzbid0IG1vdW50ZWQpIHNvXG4gIC8vIHdlIGNhbid0IHVzZSBgZGF0YVBhdGhgIHRvIGdldCB0byBjb21wb25lbnRzLCBhbmQgdGhlIGBkZWZhdWx0VmFsdWVgIGZyb21cbiAgLy8gdGhlcmUuIFRoYXQncyB3aHkgYGRlZmF1bHRWYWx1ZWAgaXMgZGVmaW5lZCBzdGF0aWNhbGx5IGluIHRoZSBjb21wb25lbnRzOlxuICBjb25zdCBkZWZhdWx0VmFsdWUgPVxuICAgIHNjaGVtYS5kZWZhdWx0ICE9PSB1bmRlZmluZWRcbiAgICAgID8gc2NoZW1hLmRlZmF1bHRcbiAgICAgIDogZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdFZhbHVlXG4gIHJldHVybiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSlcbiAgICA/IGRlZmF1bHRWYWx1ZShnZXRDb250ZXh0KGNvbnRleHQpKVxuICAgIDogY2xvbmUoZGVmYXVsdFZhbHVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkRXhjbHVkZVZhbHVlKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCBleGNsdWRlVmFsdWUgPVxuICAgIHNjaGVtYS5leGNsdWRlICE9PSB1bmRlZmluZWRcbiAgICAgID8gc2NoZW1hLmV4Y2x1ZGVcbiAgICAgIDogZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZXhjbHVkZVZhbHVlXG4gIHJldHVybiBpc0Z1bmN0aW9uKGV4Y2x1ZGVWYWx1ZSlcbiAgICA/IGV4Y2x1ZGVWYWx1ZShnZXRDb250ZXh0KGNvbnRleHQpKVxuICAgIDogISFleGNsdWRlVmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZElnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oZ2V0Q29udGV4dChjb250ZXh0KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZXMoc2NoZW1hLCBkYXRhID0ge30sIGNvbXBvbmVudCkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHJvb3REYXRhOiBkYXRhIH1cblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gKCkgPT5cbiAgICAgIG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBuYW1lLFxuICAgICAgICBkYXRhLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGFcbiAgICAgIH0pXG4gICAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhc2hvdWxkSWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSwgY29udGV4dCkpIHtcbiAgICAgIGRhdGFbbmFtZV0gPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hLCBjb250ZXh0KVxuICAgIH1cbiAgfVxuXG4gIC8vIFNldHMgdXAgYSBkYXRhIG9iamVjdCB0aGF0IGhhcyBrZXlzIHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbFxuICAvLyBmb3JtIGZpZWxkcywgc28gdGhleSBjYW4gYmUgY29ycmVjdGx5IHdhdGNoZWQgZm9yIGNoYW5nZXMuXG4gIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsXG4gICAgZGF0YSxcbiAgICBudWxsLFxuICAgIG51bGwsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBudWxsLFxuICAgIG9wdGlvbnNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50ID0gbnVsbCxcbiAgcm9vdERhdGEgPSBjb21wb25lbnQ/LnJvb3REYXRhXG59ID0ge30pIHtcbiAgY29uc3QgY29udGV4dCA9ICgpID0+XG4gICAgbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwge1xuICAgICAgc2NoZW1hLFxuICAgICAgLy8gT3ZlcnJpZGUgdmFsdWUgdG8gcHJldmVudCBlbmRsZXNzIHJlY3Vyc2lvbiB0aHJvdWdoIGNhbGxpbmcgdGhlXG4gICAgICAvLyBnZXR0ZXIgZm9yIGB0aGlzLnZhbHVlYCBpbiBgRGl0b0NvbnRleHRgOlxuICAgICAgdmFsdWU6IGRhdGFbbmFtZV0sXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGFcbiAgICB9KVxuICBjb25zdCB7IGNvbXB1dGUgfSA9IHNjaGVtYVxuICBpZiAoY29tcHV0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZShnZXRDb250ZXh0KGNvbnRleHQpKVxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBY2Nlc3MgYGRhdGFbbmFtZV1gIGRpcmVjdGx5IHRvIHVwZGF0ZSB0aGUgdmFsdWUgd2l0aG91dCBjYWxsaW5nXG4gICAgICAvLyBwYXJzZSgpOlxuICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgZGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgfVxuICB9XG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBzdGlsbCBtaXNzaW5nIGFmdGVyIGNvbXB1dGUsIHNldCB0aGUgZGVmYXVsdCBmb3IgaXQ6XG4gIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIXNob3VsZElnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEsIGNvbnRleHQpKSB7XG4gICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSwgY29udGV4dClcbiAgfVxuICAvLyBOb3cgYWNjZXNzIHRoZSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHJlYWN0aXZpdHkgYW5kIG5lZWRzIHRvXG4gIC8vIGhhcHBlbiBhZnRlciBhbGwgcHJpb3IgbWFuaXB1bGF0aW9uIG9mIGBkYXRhW25hbWVdYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHJvb3REYXRhLFxuICBzY2hlbWFPbmx5LCAvLyB3aGV0aGVyIHRvIG9ubHkgaW5jbHVkZSBkYXRhIGNvdmVyZWQgYnkgdGhlIHNjaGVtYSwgb3IgYWxsIGRhdGFcbiAgdGFyZ2V0XG59ID0ge30pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YSwgc2NoZW1hT25seSwgdGFyZ2V0IH1cbiAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGRhdGEsIG9wdGlvbnMpXG4gIGNvbnN0IGdyYXBoID0gbmV3IFNjaGVtYUdyYXBoKClcblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgb3B0aW9ucylcbiAgICAvLyBUaGUgc2NoZW1hIGV4cGVjdHMgdGhlIGB3cmFwUHJpbWl0aXZlc2AgdHJhbnNmb3JtYXRpb25zIHRvIGJlIHByZXNlbnQgb25cbiAgICAvLyB0aGUgZGF0YSB0aGF0IGl0IGlzIGFwcGxpZWQgb24sIHNvIHdhcnAgYmVmb3JlIGFuZCB1bndyYXAgYWZ0ZXIuXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBvcmRlcktleSwgaWRLZXkgPSAnaWQnIH0gPSBzY2hlbWFcbiAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChlbnRyeSA9PiAoe1xuICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IGVudHJ5XG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWx3YXlzIHNoYWxsb3ctY2xvbmUgYXJyYXkgdmFsdWVzOlxuICAgICAgICB2YWx1ZSA9IFsuLi52YWx1ZV1cbiAgICAgIH1cbiAgICAgIGlmIChvcmRlcktleSAmJiB0YXJnZXQgPT09ICdjbGlwYm9hcmQnKSB7XG4gICAgICAgIC8vIFNvcnQgdGhlIGRhdGEgYmFjayBpbnRvIHRoZSBuYXR1cmFsIHNlcXVlbmNlIGFzIGRlZmluZWQgYnkgdGhlaXIgaWRzLFxuICAgICAgICAvLyBzbyBjb3B5LXBhc3RpbmcgYmV0d2VlbiBzZXJ2ZXJzIChlLmcuIG5lc3RlZCBmb250LWN1dHMgb24gTGluZXRvKVxuICAgICAgICAvLyBuYXR1cmFsbHkgZ2V0cyBtYXBwZWQgdG8gdGhlIHNhbWUgZW50cmllcyBpbiB0aGUgZ3JhcGguXG4gICAgICAgIHZhbHVlLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCBpZDEgPSBhPy5baWRLZXldXG4gICAgICAgICAgY29uc3QgaWQyID0gYj8uW2lkS2V5XVxuICAgICAgICAgIHJldHVybiBpZDEgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMSlcbiAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMilcbiAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICA6IGlkMSAtIGlkMlxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IHByb2Nlc3NBZnRlciA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgcHJvY2VzcyB9ID0gc2NoZW1hXG4gICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YVtuYW1lXVxuXG4gICAgLy8gTk9URTogV2UgZG9uJ3QgY2FjaGUgdGhpcyBjb250ZXh0LCBzaW5jZSBgdmFsdWVgIGlzIGNoYW5naW5nLlxuICAgIGNvbnN0IGNvbnRleHQgPSAoKSA9PlxuICAgICAgbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBuYW1lLFxuICAgICAgICBkYXRhLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGEsXG4gICAgICAgIC8vIFBhc3MgdGhlIGFscmVhZHkgcHJvY2Vzc2VkIGRhdGEgdG8gYHByb2Nlc3MoKWAsIHNvIGl0IGNhbiBiZSBtb2RpZmllZFxuICAgICAgICAvLyB0aHJvdWdoIGBwcm9jZXNzZWRJdGVtYCBmcm9tIHRoZXJlLlxuICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICB9KVxuXG4gICAgLy8gRmlyc3QgdW53cmFwIHRoZSB3cmFwcGVkIHByaW1pdGl2ZXMgYWdhaW4sIHRvIGJyaW5nIHRoZSBkYXRhIGJhY2sgaW50b1xuICAgIC8vIGl0cyBuYXRpdmUgZm9ybS4gU2UgYHByb2Nlc3NCZWZvcmUoKWAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgIH1cblxuICAgIC8vIEVhY2ggY29tcG9uZW50IHR5cGUgY2FuIHByb3ZpZGUgaXRzIG93biBzdGF0aWMgYHByb2Nlc3NWYWx1ZSgpYCBtZXRob2RcbiAgICAvLyB0byBjb252ZXJ0IHRoZSBkYXRhIGZvciBzdG9yYWdlLlxuICAgIGNvbnN0IHByb2Nlc3NWYWx1ZSA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NWYWx1ZVxuICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKGdldENvbnRleHQoY29udGV4dCksIGdyYXBoKVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgdXNlcidzIGBwcm9jZXNzKClgIGNhbGxiYWNrIG5leHQsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoY29udGV4dCkpXG4gICAgfVxuXG4gICAgaWYgKHNob3VsZEV4Y2x1ZGVWYWx1ZShzY2hlbWEsIGNvbnRleHQpKSB7XG4gICAgICBkZWxldGUgcHJvY2Vzc2VkRGF0YVtuYW1lXVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsXG4gICAgZGF0YSxcbiAgICBkYXRhUGF0aCxcbiAgICBwcm9jZXNzZWREYXRhLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgcHJvY2Vzc0FmdGVyLFxuICAgIG9wdGlvbnNcbiAgKVxuXG4gIHJldHVybiBncmFwaC5wcm9jZXNzKHNvdXJjZVNjaGVtYSwgcHJvY2Vzc2VkRGF0YSwgb3B0aW9ucylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFEYXRhKFxuICBzY2hlbWEsXG4gIGRhdGEsXG4gIGRhdGFQYXRoLFxuICBwcm9jZXNzZWREYXRhLFxuICBwcm9jZXNzQmVmb3JlLFxuICBwcm9jZXNzQWZ0ZXIsXG4gIG9wdGlvbnNcbikge1xuICBjb25zdCBwcm9jZXNzQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT4ge1xuICAgIGNvbnN0IGdldERhdGFQYXRoID0gKGRhdGFQYXRoLCB0b2tlbikgPT5cbiAgICAgIGRhdGFQYXRoICE9IG51bGxcbiAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pXG4gICAgICAgIDogbnVsbFxuXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKCFpc05lc3RlZChjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIHVubmVzdGVkIGNvbXBvbmVudHMuXG4gICAgICAgICAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhLFxuICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RGF0YVBhdGggPSBnZXREYXRhUGF0aChkYXRhUGF0aCwgbmFtZSlcblxuICAgICAgICAgIGNvbnN0IHByb2Nlc3NJdGVtID0gKGl0ZW0sIGluZGV4ID0gbnVsbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbURhdGFQYXRoID1cbiAgICAgICAgICAgICAgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgICAgICA/IGdldERhdGFQYXRoKGNvbXBvbmVudERhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBkYXRhUGF0aDogY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICBnZXRGb3JtU2NoZW1hc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgZm9ybXMgPSBnZXRGb3Jtcyhjb21wb25lbnRTY2hlbWEsIGNvbnRleHQpXG4gICAgICAgICAgICBjb25zdCBmb3JtID0gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pXG4gICAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRJdGVtID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gY2xvbmVJdGVtKGNvbXBvbmVudFNjaGVtYSwgaXRlbSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgICAgICAgICAgICAgIGZvcm0sXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBpdGVtRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc0FmdGVyPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGNvbXBvbmVudERhdGFQYXRoLFxuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBmb3IgKGNvbnN0IHRhYiBvZiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyh0YWIuY29tcG9uZW50cylcbiAgfVxuICBmb3IgKGNvbnN0IHBhbmVsIG9mIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuY29tcG9uZW50cylcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWREYXRhIHx8IGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkU2NoZW1hcyhzY2hlbWFzLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0b1NjaGVtYSh2YWx1ZSlcbiAgICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID1cbiAgICAgICAgICAgICAgc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgICAgIDogc2NoZW1hXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgICAgfSwge30pXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBpc0FycmF5KHNjaGVtYXMpXG4gICAgPyB0b09iamVjdChzY2hlbWFzLCB2YWx1ZSA9PlxuICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG5hbWU6IGNhbWVsaXplKHZhbHVlLCBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgIClcbiAgICA6IGlzT2JqZWN0KHNjaGVtYXMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiAoXG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKT8uZ2V0U291cmNlVHlwZT8uKGdldFR5cGUoc2NoZW1hT3JUeXBlKSkgPz9cbiAgICBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsRW50cnkoc2NoZW1hLCBkYXRhUGF0aCA9IG51bGwsIHRhYkNvbXBvbmVudCA9IG51bGwpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIG5hbWUsIGFwcGVuZCBpdCB0byB0aGUgZGF0YVBhdGguXG4gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgIGRhdGFQYXRoICE9IG51bGwgJiYgc2NoZW1hLm5hbWVcbiAgICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNjaGVtYS5uYW1lKVxuICAgICAgICAgICAgOiBkYXRhUGF0aCxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbEVudHJpZXMoXG4gIHBhbmVsU2NoZW1hcyxcbiAgZGF0YVBhdGgsXG4gIHRhYkNvbXBvbmVudCA9IG51bGwsXG4gIHBhbmVsRW50cmllcyA9IFtdXG4pIHtcbiAgaWYgKHBhbmVsU2NoZW1hcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhwYW5lbFNjaGVtYXMpKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGdldFBhbmVsRW50cnkoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGtleSksXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHBhbmVsRW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxFbnRyaWVzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy50YWJzID8gT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicykgOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy5wYW5lbHMgPyBPYmplY3QudmFsdWVzKHNjaGVtYS5wYW5lbHMpIDogW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFBhbmVsRW50cmllcyhcbiAgYXBpLFxuICBzY2hlbWEsXG4gIGRhdGFQYXRoLFxuICBjb21wb25lbnQgPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsXG4pIHtcbiAgY29uc3QgcGFuZWxTY2hlbWEgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZXRQYW5lbFNjaGVtYT8uKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgZGF0YVBhdGgsXG4gICAgY29tcG9uZW50XG4gIClcbiAgY29uc3QgcGFuZWxFbnRyaWVzID0gcGFuZWxTY2hlbWFcbiAgICA/IFtnZXRQYW5lbEVudHJ5KHBhbmVsU2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV1cbiAgICA6IFtdXG4gIC8vIEFsbG93IGVhY2ggY29tcG9uZW50IHRvIHByb3ZpZGUgaXRzIG93biBzZXQgb2YgcGFuZWxzLCBpblxuICAvLyBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBvbmUgKGUuZy4gZ2V0RmlsdGVyc1BhbmVsKCksICRmaWx0ZXJzKTpcbiAgZ2V0UGFuZWxFbnRyaWVzKHNjaGVtYT8ucGFuZWxzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbEVudHJpZXMpXG4gIHJldHVybiBwYW5lbEVudHJpZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnb2JqZWN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaXN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnbGlzdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgY29uc3QgaWQgPSBpdGVtW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICByZXR1cm4gaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIC8vIFRyeSB0byB1c2UgdGhlIGl0ZW0gaWQgYXMgdGhlIHVpZCwgZmFsbGluZyBiYWNrIG9uIGF1dG8tZ2VuZXJhdGVkIGlkcywgYnV0XG4gIC8vIGVpdGhlciB3YXksIHBhc3MgdGhyb3VnaCBgZ2V0VWlkKClgIHNvIHRoYXQgdGhlIGlkcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBpdGVtIHRocm91Z2ggYSB3ZWFrIG1hcCwgYXMgdGhlIGlkcyBjYW4gYmUgZmlsdGVyZWQgb3V0IGluIGBwcm9jZXNzRGF0YSgpYFxuICAvLyB3aGlsZSB0aGUgY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgdWlkcyBhcyBrZXkgYXJlIHN0aWxsIHZpc2libGUuXG4gIHJldHVybiBnZXRVaWQoaXRlbSwgaXRlbSA9PiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSlcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzT2JqZWN0LCBpc1N0cmluZywgcGlja0J5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Jlc291cmNlKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRSZXNvdXJjZShzY2hlbWEucmVzb3VyY2UpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNvdXJjZShyZXNvdXJjZSwgZGVmYXVsdHMgPSB7fSkge1xuICBjb25zdCB7IHBhcmVudCwgLi4uZGVmcyB9ID0gZGVmYXVsdHNcbiAgaWYgKGlzRnVuY3Rpb24ocmVzb3VyY2UpKSB7XG4gICAgcmVzb3VyY2UgPSByZXNvdXJjZShkZWZhdWx0cylcbiAgfVxuICByZXNvdXJjZSA9IGlzT2JqZWN0KHJlc291cmNlKVxuICAgID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSlcbiAgICAgID8geyAuLi5kZWZzLCBwYXRoOiByZXNvdXJjZSB9XG4gICAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICAgIHR5cGU6ICdtZW1iZXInLFxuICAgICAgICAuLi5waWNrQnkoXG4gICAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICAgKHZhbHVlLCBrZXkpID0+IFsnbWV0aG9kJywgJ3BhdGgnLCAncGFyZW50J10uaW5jbHVkZXMoa2V5KVxuICAgICAgICApLFxuICAgICAgICBpZDogYCR7aWR9YFxuICAgICAgfVxuICAgIDogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0Z1bmN0aW9uLFxuICBlcXVhbHMsXG4gIGxhYmVsaXplLFxuICBoeXBoZW5hdGUsXG4gIGZvcm1hdFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IGFwcFN0YXRlIGZyb20gJy4uL2FwcFN0YXRlLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IEVtaXR0ZXJNaXhpbiBmcm9tICcuL0VtaXR0ZXJNaXhpbi5qcydcbmltcG9ydCB7XG4gIGZsYXR0ZW5WaWV3cyxcbiAgZ2V0U2NoZW1hVmFsdWUsXG4gIHNob3VsZFJlbmRlclNjaGVtYVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGNvbXB1dGVkLCByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRW1pdHRlck1peGluXSxcblxuICBpbmplY3Q6IFtcbiAgICAnYXBpJyxcbiAgICAnJHZlcmJzJyxcbiAgICAnJHZpZXdzJyxcbiAgICAnJGlzUG9wdWxhdGVkJyxcbiAgICAnJHBhcmVudENvbXBvbmVudCcsXG4gICAgJyRzY2hlbWFDb21wb25lbnQnLFxuICAgICckcm91dGVDb21wb25lbnQnLFxuICAgICckZGF0YUNvbXBvbmVudCcsXG4gICAgJyRzb3VyY2VDb21wb25lbnQnLFxuICAgICckcmVzb3VyY2VDb21wb25lbnQnLFxuICAgICckZGlhbG9nQ29tcG9uZW50JyxcbiAgICAnJHBhbmVsQ29tcG9uZW50JyxcbiAgICAnJHRhYkNvbXBvbmVudCdcbiAgXSxcblxuICBwcm92aWRlKCkge1xuICAgIGNvbnN0IHNlbGYgPSAoKSA9PiB0aGlzXG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhXG4gICAgICA/IHtcbiAgICAgICAgICAkcGFyZW50Q29tcG9uZW50OiBzZWxmLFxuICAgICAgICAgICRkYXRhQ29tcG9uZW50OiBzZWxmXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgICRwYXJlbnRDb21wb25lbnQ6IHNlbGZcbiAgICAgICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcFN0YXRlLFxuICAgICAgaXNNb3VudGVkOiBmYWxzZSxcbiAgICAgIG92ZXJyaWRlczogbnVsbCAvLyBTZWUgYWNjZXNzb3IuanNcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBOT1RFOiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gUmVzb3VyY2VNaXhpbiwgdXNlZCBieSBsaXN0cy5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhPy5zY2hlbWFcbiAgICB9LFxuXG4gICAgdXNlcigpIHtcbiAgICAgIHJldHVybiBhcHBTdGF0ZS51c2VyXG4gICAgfSxcblxuICAgIC8vICR2ZXJicywgJHZlcmJzIGFuZCAkaXNQb3B1bGF0ZWQgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZVxuICAgIC8vIHJlYWN0aXZlbmVzcyBhY3Jvc3MgcHJvdmlkZS9pbmplY3QuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICB2ZXJicygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2ZXJicygpXG4gICAgfSxcblxuICAgIHZpZXdzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZpZXdzKClcbiAgICB9LFxuXG4gICAgZmxhdHRlbmVkVmlld3MoKSB7XG4gICAgICByZXR1cm4gZmxhdHRlblZpZXdzKHRoaXMudmlld3MpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRyZWZzLnJvb3RcbiAgICB9LFxuXG4gICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gRGl0b1NjaGVtYSBjYW5cbiAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgIHBhcmVudENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnRDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2NoZW1hQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50Q29tcG9uZW50KHRoaXMsICdzY2hlbWFDb21wb25lbnQnKVxuICAgIH0sXG5cbiAgICBwYXJlbnRSb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRDb21wb25lbnQodGhpcywgJ3JvdXRlQ29tcG9uZW50JylcbiAgICB9LFxuXG4gICAgcGFyZW50Rm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRDb21wb25lbnQodGhpcywgJ2Zvcm1Db21wb25lbnQnKVxuICAgIH0sXG5cbiAgICBwYXJlbnRSZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRDb21wb25lbnQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JylcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmlzTW91bnRlZCA9IHRydWVcbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgY29uc3QgdWlkID0gbmV4dFVpZCsrXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICckdWlkJywgeyBnZXQ6ICgpID0+IHVpZCB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsYWJlbGl6ZSxcblxuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICB0aGlzLnN0b3JlW2tleV0gPSB2YWx1ZVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHJlbW92ZVN0b3JlKGtleSkge1xuICAgICAgZGVsZXRlIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBnZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleD8uW2luZGV4XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgsIGtleSkge1xuICAgICAgdGhpcy5zdG9yZS4ka2V5c0J5SW5kZXggPz89IHt9XG4gICAgICB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleFtpbmRleF0gPSBrZXlcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXksIGluZGV4KSB7XG4gICAgICBsZXQgc3RvcmUgPSB0aGlzLmdldFN0b3JlKGtleSlcbiAgICAgIGlmICghc3RvcmUgJiYgaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAvLyBXaGVuIHN0b3JpbmcsIHRlbXBvcmFyeSBpZHMgY2hhbmdlIHRvIHBlcm1hbmVudCBvbmVzIGFuZCB0aHVzIHRoZSBrZXlcbiAgICAgICAgLy8gY2FuIGNoYW5nZS4gVG8gc3RpbGwgZmluZCB0aGUgc3RvcmUsIHdlIHJlZmVyZW5jZSBieSBpbmRleCBhcyB3ZWxsLFxuICAgICAgICAvLyB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIHN0b3JlIGFnYWluIGFmdGVyIHRoZSBpdGVtIHdhcyBzYXZlZC5cbiAgICAgICAgY29uc3Qgb2xkS2V5ID0gdGhpcy5nZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgpXG4gICAgICAgIHN0b3JlID0gdGhpcy5nZXRTdG9yZShvbGRLZXkpXG4gICAgICAgIGlmIChzdG9yZSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RvcmUoa2V5LCBzdG9yZSlcbiAgICAgICAgICB0aGlzLnJlbW92ZVN0b3JlKG9sZEtleSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFzdG9yZSkge1xuICAgICAgICBzdG9yZSA9IHRoaXMuc2V0U3RvcmUoa2V5LCByZWFjdGl2ZSh7fSkpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAvLyB0ZW1wb3JhcnkgdWlkIGtleXMgd2lsbCBjaGFuZ2UgYmV0d2VlbiBwZXJzaXN0ZW5jZSwgc28gd2UgbmVlZCB0b1xuICAgICAgICAvLyBhc3NpZ24gdGhlIGtleSB0byB0aGUgaW5kZXggZXZlbiB3aGVuIHRoZSBzdG9yZSBhbHJlYWR5IGV4aXN0ZWQuXG4gICAgICAgIHRoaXMuc2V0U3RvcmVLZXlCeUluZGV4KGluZGV4LCBrZXkpXG4gICAgICB9XG4gICAgICByZXR1cm4gc3RvcmVcbiAgICB9LFxuXG4gICAgcmVtb3ZlQ2hpbGRTdG9yZShrZXksIGluZGV4KSB7XG4gICAgICAvLyBHRXQgdGhlIGNoaWxkLXN0b3JlIGZpcnN0LCBzbyB0aGF0IGluZGljZXMgY2FuIGJlIHRyYW5zZmVycmVkIG92ZXJcbiAgICAgIC8vIHRlbXBvcmFyeSBpZCBjaGFuZ2VzIGR1cmluZyBwZXJzaXN0ZW5jZS5cbiAgICAgIHRoaXMuZ2V0Q2hpbGRTdG9yZShrZXksIGluZGV4KVxuICAgICAgdGhpcy5yZW1vdmVTdG9yZShrZXkpXG4gICAgfSxcblxuICAgIGdldFNjaGVtYVZhbHVlKFxuICAgICAga2V5T3JEYXRhUGF0aCxcbiAgICAgIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgZGVmYXVsdDogZGVmLFxuICAgICAgICBzY2hlbWEgPSB0aGlzLnNjaGVtYSxcbiAgICAgICAgY29udGV4dCA9IHRoaXMuY29udGV4dCxcbiAgICAgICAgY2FsbGJhY2sgPSB0cnVlXG4gICAgICB9ID0ge31cbiAgICApIHtcbiAgICAgIHJldHVybiBnZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgIGRlZmF1bHQ6IGlzRnVuY3Rpb24oZGVmKSA/ICgpID0+IGRlZi5jYWxsKHRoaXMpIDogZGVmXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRMYWJlbChzY2hlbWEsIG5hbWUpIHtcbiAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdsYWJlbCcsIHsgc2NoZW1hLCB0eXBlOiBbU3RyaW5nLCBPYmplY3RdIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsYXNzOiBgZGl0by1idXR0b24tJHt2ZXJifWAsXG4gICAgICAgIHRpdGxlOiBsYWJlbGl6ZSh2ZXJiKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgKkxpbmsoKSB0byAqUm91dGUoKS5cbiAgICBnZXRRdWVyeUxpbmsocXVlcnkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICAvLyBQcmVzZXJ2ZSBoYXNoIGZvciB0YWJzOlxuICAgICAgICBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gc2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBzaG91bGRTaG93U2NoZW1hKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYVZhbHVlKCd2aXNpYmxlJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3VsZERpc2FibGVTY2hlbWEoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2Rpc2FibGVkJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpIHtcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIHtcbiAgICAgICAgLy8gUmVzb3VyY2VzIHdpdGhvdXQgYSBwYXJlbnQgaW5oZXJpdCB0aGUgb25lIGZyb20gYGRhdGFDb21wb25lbnRgXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkuXG4gICAgICAgIHBhcmVudDogdGhpcy5kYXRhQ29tcG9uZW50Py5nZXRSZXNvdXJjZSh7XG4gICAgICAgICAgbWV0aG9kOiByZXNvdXJjZT8ubWV0aG9kLFxuICAgICAgICAgIGNoaWxkOiByZXNvdXJjZVxuICAgICAgICB9KSA/PyBudWxsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc291cmNlcy5hbnkocmVzb3VyY2UpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIHJldHVybiB1cmwgPyB0aGlzLmFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5OiByZXNvdXJjZS5xdWVyeSB9KSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qoe1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBxdWVyeSxcbiAgICAgIGRhdGEsXG4gICAgICBzaWduYWwsXG4gICAgICBpbnRlcm5hbFxuICAgIH0pIHtcbiAgICAgIHVybCB8fD0gdGhpcy5nZXRSZXNvdXJjZVVybChyZXNvdXJjZSlcbiAgICAgIG1ldGhvZCB8fD0gcmVzb3VyY2U/Lm1ldGhvZFxuICAgICAgY29uc3QgY2hlY2tVc2VyID0gIWludGVybmFsICYmIHRoaXMuYXBpLmlzQXBpVXJsKHVybClcbiAgICAgIGlmIChjaGVja1VzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmVuc3VyZVVzZXIoKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5yZXF1ZXN0KHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmwsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhLFxuICAgICAgICBzaWduYWxcbiAgICAgIH0pXG4gICAgICAvLyBEZXRlY3QgY2hhbmdlIG9mIHRoZSBvd24gdXNlciwgYW5kIGZldGNoIGl0IGFnYWluIGlmIGl0IHdhcyBjaGFuZ2VkLlxuICAgICAgaWYgKFxuICAgICAgICBjaGVja1VzZXIgJiZcbiAgICAgICAgbWV0aG9kID09PSAncGF0Y2gnICYmXG4gICAgICAgIGVxdWFscyhyZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy51c2VyLmlkLCB0aGlzLmFwaS51c2VycykpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmZldGNoVXNlcigpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7IGNvbXBvbmVudHMsIGJ1dHRvbnMsIGRhdGEsIHNldHRpbmdzIH0pIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RDb21wb25lbnQuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGJ1dHRvbnMsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNldHRpbmdzXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IChcbiAgICAgICAgY2FjaGUgJiZcbiAgICAgICAge1xuICAgICAgICAgIGdsb2JhbDogdGhpcy5hcHBTdGF0ZSxcbiAgICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICAgIH1bY2FjaGVdXG4gICAgICApXG4gICAgICBjb25zdCBsb2FkQ2FjaGUgPSBjYWNoZVBhcmVudD8ubG9hZENhY2hlXG4gICAgICAvLyBCdWlsZCBhIGNhY2hlIGtleSBmcm9tIHRoZSBjb25maWc6XG4gICAgICBjb25zdCBjYWNoZUtleSA9IChcbiAgICAgICAgbG9hZENhY2hlICYmXG4gICAgICAgIGAke1xuICAgICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnXG4gICAgICAgIH0gJHtcbiAgICAgICAgICBvcHRpb25zLnVybFxuICAgICAgICB9ICR7XG4gICAgICAgICAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgYHF1ZXJ5YCBvblxuICAgICAgICAgIC8vIDIwMjItMTEtMDEsIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55IG1vcmUuXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCBvcHRpb25zLnBhcmFtcyB8fCAnJylcbiAgICAgICAgfSAke1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgICAgfWBcbiAgICAgIClcbiAgICAgIGlmIChsb2FkQ2FjaGUgJiYgKGNhY2hlS2V5IGluIGxvYWRDYWNoZSkpIHtcbiAgICAgICAgcmV0dXJuIGxvYWRDYWNoZVtjYWNoZUtleV1cbiAgICAgIH1cbiAgICAgIC8vIE5PVEU6IE5vIGF3YWl0IGhlcmUsIHJlcyBpcyBhIHByb21pc2UgdGhhdCB3ZSBjYW4gZWFzaWx5IGNhY2hlLlxuICAgICAgLy8gVGhhdCdzIGZpbmUgYmVjYXVzZSBwcm9taXNlcyBjYW4gYmUgcmVzb2x2ZWQgb3ZlciBhbmQgb3ZlciBhZ2Fpbi5cbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2VuZFJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAvLyBDb252ZXJ0IGF4aW9zIGVycm9ycyB0byBub3JtYWwgZXJyb3JzXG4gICAgICAgICAgY29uc3QgZGF0YSA9IGVycm9yLnJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgdGhyb3cgZGF0YVxuICAgICAgICAgICAgPyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihkYXRhLm1lc3NhZ2UpLCBkYXRhKVxuICAgICAgICAgICAgOiBlcnJvclxuICAgICAgICB9KVxuICAgICAgaWYgKGxvYWRDYWNoZSkge1xuICAgICAgICBsb2FkQ2FjaGVbY2FjaGVLZXldID0gcmVzXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfSxcblxuICAgIGZvcm1hdCh2YWx1ZSwge1xuICAgICAgbG9jYWxlID0gdGhpcy5hcGkubG9jYWxlLFxuICAgICAgZGVmYXVsdHMgPSB0aGlzLmFwaS5mb3JtYXRzLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIGZvcm1hdCh2YWx1ZSwge1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIGRlZmF1bHRzLFxuICAgICAgICAuLi5vcHRpb25zXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZShsb2NhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlci5wdXNoKGxvY2F0aW9uKVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gb3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2Jsb2I6JylcbiAgICAgICAgPyBvcHRpb25zLnVybFxuICAgICAgICA6IHRoaXMuYXBpLmdldEFwaVVybChvcHRpb25zKVxuICAgICAgYS5kb3dubG9hZCA9IG9wdGlvbnMuZmlsZW5hbWUgPz8gbnVsbFxuICAgICAgY29uc3QgeyBib2R5IH0gPSBkb2N1bWVudFxuICAgICAgYm9keS5hcHBlbmRDaGlsZChhKVxuICAgICAgYS5jbGljaygpXG4gICAgICBib2R5LnJlbW92ZUNoaWxkKGEpXG4gICAgfSxcblxuICAgIG5vdGlmeShvcHRpb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5jbG9zZU5vdGlmaWNhdGlvbnMoKVxuICAgIH0sXG5cbiAgICBzZXR1cFNjaGVtYUZpZWxkcygpIHtcbiAgICAgIHRoaXMuc2V0dXBNZXRob2RzKClcbiAgICAgIHRoaXMuc2V0dXBDb21wdXRlZCgpXG4gICAgICB0aGlzLnNldHVwRXZlbnRzKClcbiAgICB9LFxuXG4gICAgc2V0dXBNZXRob2RzKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEubWV0aG9kcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdGhpc1trZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIG1ldGhvZCBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cENvbXB1dGVkKCkge1xuICAgICAgY29uc3QgZ2V0Q29tcHV0ZWRBY2Nlc3NvciA9ICh7IGdldCwgc2V0IH0pID0+IHtcbiAgICAgICAgY29uc3QgZ2V0dGVyID0gY29tcHV0ZWQoKCkgPT4gZ2V0LmNhbGwodGhpcykpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZ2V0OiAoKSA9PiBnZXR0ZXIudmFsdWUsXG4gICAgICAgICAgc2V0OiBzZXQgPyB2YWx1ZSA9PiBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGl0ZW1dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLmNvbXB1dGVkIHx8IHt9KSkge1xuICAgICAgICBjb25zdCBhY2Nlc3NvciA9IGlzRnVuY3Rpb24oaXRlbSlcbiAgICAgICAgICA/IGdldENvbXB1dGVkQWNjZXNzb3IoeyBnZXQ6IGl0ZW0gfSlcbiAgICAgICAgICA6IGlzT2JqZWN0KGl0ZW0pICYmIGlzRnVuY3Rpb24oaXRlbS5nZXQpXG4gICAgICAgICAgICA/IGdldENvbXB1dGVkQWNjZXNzb3IoaXRlbSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke2l0ZW19YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgd2F0Y2gsIGV2ZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmICh3YXRjaCkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IGlzRnVuY3Rpb24od2F0Y2gpID8gd2F0Y2guY2FsbCh0aGlzKSA6IHdhdGNoXG4gICAgICAgIGlmIChpc09iamVjdChoYW5kbGVycykpIHtcbiAgICAgICAgICAvLyBJbnN0YWxsIHRoZSB3YXRjaCBoYW5kbGVycyBpbiB0aGUgbmV4dCB0aWNrLCBzbyBhbGwgY29tcG9uZW50cyBhcmVcbiAgICAgICAgICAvLyBpbml0aWFsaXplZCBhbmQgd2UgY2FuIGNoZWNrIGFnYWluc3QgdGhlaXIgbmFtZXMuXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgICAgIC8vIEV4cGFuZCBwcm9wZXJ0eSBuYW1lcyB0byAnZGF0YS5wcm9wZXJ0eSc6XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeU5hbWUoa2V5KVxuICAgICAgICAgICAgICAgID8gYGRhdGEuJHtrZXl9YFxuICAgICAgICAgICAgICAgIDoga2V5XG4gICAgICAgICAgICAgIHRoaXMuJHdhdGNoKGV4cHIsIGNhbGxiYWNrKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkRXZlbnQgPSAoa2V5LCBldmVudCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgdGhpcy5vbihoeXBoZW5hdGUoZXZlbnQpLCBjYWxsYmFjaylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGV2ZW50IGRlZmluaXRpb246ICR7a2V5fTogJHtjYWxsYmFja31gKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBzY2FuIHNjaGVtYSBmb3IgYG9uW0EtWl1gLXN0eWxlIGNhbGxiYWNrcyBhbmQgYWRkIHRoZW1cbiAgICAgIC8vIFRPRE86IERlcHJlY2F0ZSBvbmUgZm9ybWF0IG9yIHRoZSBvdGhlciwgaW4gZmF2b3VyIG9mIG9ubHkgb25lIHdheSBvZlxuICAgICAgLy8gZG9pbmcgdGhpbmdzLiBEZWNpZGUgd2hpY2ggb25lIHRvIHJlbW92ZS5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hKSkge1xuICAgICAgICBpZiAoL15vbltBLVpdLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleS5zbGljZSgyKSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW1pdEV2ZW50KGV2ZW50LCB7XG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIHBhcmVudCA9IG51bGxcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IGhhc0xpc3RlbmVycyA9IHRoaXMuaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgY29uc3QgcGFyZW50SGFzTGlzdGVuZXJzID0gcGFyZW50Py5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBpZiAoaGFzTGlzdGVuZXJzIHx8IHBhcmVudEhhc0xpc3RlbmVycykge1xuICAgICAgICBjb25zdCBlbWl0RXZlbnQgPSB0YXJnZXQgPT5cbiAgICAgICAgICB0YXJnZXQuZW1pdChldmVudCwgKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpKVxuXG4gICAgICAgIGNvbnN0IGhhbmRsZVBhcmVudExpc3RlbmVycyA9IHJlc3VsdCA9PlxuICAgICAgICAgIC8vIERvbid0IGJ1YmJsZSB0byBwYXJlbnQgaWYgaGFuZGxlZCBldmVudCByZXR1cm5lZCBgZmFsc2VgXG4gICAgICAgICAgcGFyZW50SGFzTGlzdGVuZXJzICYmIHJlc3VsdCAhPT0gZmFsc2VcbiAgICAgICAgICAgID8gZW1pdEV2ZW50KHBhcmVudCkudGhlbigoKSA9PiByZXN1bHQpXG4gICAgICAgICAgICA6IHJlc3VsdFxuXG4gICAgICAgIGNvbnN0IGhhbmRsZUxpc3RlbmVycyA9ICgpID0+XG4gICAgICAgICAgaGFzTGlzdGVuZXJzXG4gICAgICAgICAgICA/IGVtaXRFdmVudCh0aGlzKS50aGVuKGhhbmRsZVBhcmVudExpc3RlbmVycylcbiAgICAgICAgICAgIDogaGFuZGxlUGFyZW50TGlzdGVuZXJzKHVuZGVmaW5lZClcblxuICAgICAgICByZXR1cm4gWydsb2FkJywgJ2NoYW5nZSddLmluY2x1ZGVzKGV2ZW50KVxuICAgICAgICAgID8gLy8gVGhlIGVmZmVjdHMgb2Ygc29tZSBldmVudHMgbmVlZCB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgICAgIC8vIFVzZSAkbmV4dFRpY2soKSB0byBtYWtlIHN1cmUgb3VyIGhhbmRsZXJzIHNlZSB0aGVzZSBjaGFuZ2VzLlxuICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGBwcm9jZXNzZWRJdGVtYCBpcyBvbmx5IGNvcnJlY3QgYWZ0ZXIgY29tcG9uZW50c1xuICAgICAgICAgICAgLy8gdGhhdCBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQuXG4gICAgICAgICAgICAvLyBOT1RFOiBUaGUgcmVzdWx0IG9mIGBoYW5kbGVMaXN0ZW5lcnMoKWAgbWFrZXMgaXQgdGhyb3VnaCB0aGVcbiAgICAgICAgICAgIC8vIGAkbmV4dFRpY2soKWAgY2FsbCBhbmQgd2lsbCBiZSByZXR1cm5lZCBhcyBleHBlY3RlZC5cbiAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKGhhbmRsZUxpc3RlbmVycylcbiAgICAgICAgICA6IGhhbmRsZUxpc3RlbmVycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCBuZXh0VWlkID0gMFxuXG5mdW5jdGlvbiBnZXRQYXJlbnRDb21wb25lbnQoY29tcG9uZW50LCBrZXkpIHtcbiAgY29uc3QgY3VycmVudCA9IGNvbXBvbmVudFtrZXldXG4gIGxldCBwYXJlbnQgPSBjb21wb25lbnQucGFyZW50Q29tcG9uZW50XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50W2tleV0gPT09IGN1cnJlbnQpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Q29tcG9uZW50XG4gIH1cbiAgcmV0dXJuIHBhcmVudD8uW2tleV0gPz8gbnVsbFxufVxuIiwiLy8gQSBtaW5pLXJlcGxpY2F0aW9uIG9mIHZ1ZSdzIGludGVybmFsIGByZXNvbHZlTWVyZ2VkT3B0aW9ucygpYCBidXQgb25seVxuLy8gaGFuZGxpbmcgb3VyIG93biBhZGRlZCBvcHRpb25zIHByb3BlcnRpZXMgYW5kIG1lcmdpbmcgdGhlbSBlYXJseSBpbnN0ZWFkXG4vLyBvZiBsYXppbHkuXG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTWVyZ2VkT3B0aW9ucyhvcHRpb25zKSB7XG4gIGNvbnN0IHsgbWl4aW5zIH0gPSBvcHRpb25zXG4gIHJldHVybiBtaXhpbnMgfHwgb3B0aW9ucy5leHRlbmRzXG4gICAgPyBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHsgLi4ub3B0aW9ucyB9LFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgOiBvcHRpb25zXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU9wdGlvbnModG8sIGZyb20pIHtcbiAgaWYgKGZyb20uZXh0ZW5kcykge1xuICAgIG1lcmdlT3B0aW9ucyh0bywgZnJvbS5leHRlbmRzKVxuICB9XG4gIGlmIChmcm9tLm1peGlucykge1xuICAgIGZvciAoY29uc3QgbWl4aW4gb2YgZnJvbS5taXhpbnMpIHtcbiAgICAgIG1lcmdlT3B0aW9ucyh0bywgbWl4aW4pXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIGRpdG9PcHRpb25LZXlzKSB7XG4gICAgaWYgKGtleSBpbiBmcm9tKSB7XG4gICAgICB0b1trZXldID0gZnJvbVtrZXldXG4gICAgfVxuICB9XG4gIHJldHVybiB0b1xufVxuXG5jb25zdCBkaXRvT3B0aW9uS2V5cyA9IFtcbiAgJ2RlZmF1bHRWYWx1ZScsXG4gICdkZWZhdWx0TmVzdGVkJyxcbiAgJ2RlZmF1bHRWaXNpYmxlJyxcbiAgJ2dlbmVyYXRlTGFiZWwnLFxuICAnZXhjbHVkZVZhbHVlJyxcbiAgJ2lnbm9yZU1pc3NpbmdWYWx1ZScsXG4gICdvbWl0U3BhY2luZycsXG4gICdwcm9jZXNzVmFsdWUnLFxuICAncHJvY2Vzc1NjaGVtYScsXG4gICdnZXRQYW5lbFNjaGVtYScsXG4gICdnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcnLFxuICAvLyBWdWUgMyAvIFZ1ZS1yb3V0ZXIgNCBmb3JnZXRzIHRoZXNlLlxuICAvLyBUT0RPOiBDcmVhdGUgYnVnLXJlcG9ydD9cbiAgJ2JlZm9yZVJvdXRlVXBkYXRlJyxcbiAgJ2JlZm9yZVJvdXRlTGVhdmUnXG5dXG4iLCJpbXBvcnQgRGl0b01peGluIGZyb20gJy4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVNZXJnZWRPcHRpb25zIH0gZnJvbSAnLi91dGlscy9vcHRpb25zLmpzJ1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuICAvLyBNYWtlIHN1cmUgdGhhdCByZWdpc3RlcmVkIGNvbXBvbmVudHMgYXJlIHByZXNlbnQgaW4gYWxsIERpdG9Db21wb25lbnQuXG4gIGNvbXBvbmVudHMsXG5cbiAgY29tcG9uZW50KG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgZGVmaW5pdGlvbiA9IHJlc29sdmVNZXJnZWRPcHRpb25zKHtcbiAgICAgICAgICBleHRlbmRzOiB0aGlzLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgLi4uZGVmaW5pdGlvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29tcG9uZW50c1tuYW1lXSA9IGRlZmluaXRpb25cbiAgICB9XG4gICAgaWYgKCEobmFtZSBpbiBjb21wb25lbnRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgXCIke25hbWV9XCIgbm90IHJlZ2lzdGVyZWRgKVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBkZXNjcmliZURhdGUoZGF0ZSkge1xuICByZXR1cm4ge1xuICAgIHllYXI6IGRhdGU/LmdldEZ1bGxZZWFyKCkgPz8gMCxcbiAgICBtb250aDogZGF0ZT8uZ2V0TW9udGgoKSA/PyAwLFxuICAgIGRheTogZGF0ZT8uZ2V0RGF0ZSgpID8/IDAsXG4gICAgaG91cjogZGF0ZT8uZ2V0SG91cnMoKSA/PyAwLFxuICAgIG1pbnV0ZTogZGF0ZT8uZ2V0TWludXRlcygpID8/IDAsXG4gICAgc2Vjb25kOiBkYXRlPy5nZXRTZWNvbmRzKCkgPz8gMCxcbiAgICBtaWxsaXNlY29uZDogZGF0ZT8uZ2V0TWlsbGlzZWNvbmRzKCkgPz8gMFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbHRlckRhdGUoZGF0ZSwgb3ZlcnJpZGVzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBEYXRlKC4uLk9iamVjdC52YWx1ZXMoeyAuLi5kZXNjcmliZURhdGUoZGF0ZSksIC4uLm92ZXJyaWRlcyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZShzdHJpbmcsIHtcbiAgbG9jYWxlID0gJ2VuLVVTJyxcbiAgZGF0ZSA9IHRydWUsXG4gIHRpbWUgPSB0cnVlXG59ID0ge30pIHtcbiAgY29uc3QgdGltZURlZmF1bHQgPSB0aW1lID8gbnVsbCA6IDBcbiAgbGV0IFtcbiAgICBkYXksXG4gICAgc2VwMSxcbiAgICBtb250aCxcbiAgICBzZXAyLFxuICAgIHllYXIsXG4gICAgLFxuICAgIGhvdXIgPSB0aW1lRGVmYXVsdCxcbiAgICAsXG4gICAgbWludXRlID0gdGltZURlZmF1bHQsXG4gICAgLFxuICAgIHNlY29uZCA9IHRpbWVEZWZhdWx0LFxuICAgICxcbiAgICBtaWxsaXNlY29uZCA9IHRpbWVEZWZhdWx0XG4gIF0gPSBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUsIHRpbWUgfSlcbiAgaWYgKHllYXIgJiYgeWVhci5sZW5ndGggPj0gNCkge1xuICAgIGlmIChsb2NhbGUgPT09ICdlbi1VUycgJiYgc2VwMSA9PT0gJy8nICYmIHNlcDIgPT09ICcvJykge1xuICAgICAgLy8gQW1lcmljYW4gZm9ybWF0OiBNTS9ERC9ZWVlZXG4gICAgICA7W2RheSwgbW9udGhdID0gW21vbnRoLCBkYXldXG4gICAgfVxuICAgIG1vbnRoID0gZ2V0TW9udGhJbmRleChtb250aCwgeyBsb2NhbGUgfSlcbiAgICBjb25zdCBpc1ZhbGlkVGltZVBhcnQgPSBwYXJ0ID0+IHBhcnQgPT09IG51bGwgfHwgcGFydC5sZW5ndGggPT09IDJcbiAgICBpZiAoXG4gICAgICBtb250aCAhPT0gbnVsbCAmJiAoXG4gICAgICAgICF0aW1lIHx8IChcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQoaG91cikgJiZcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQobWludXRlKSAmJlxuICAgICAgICAgIGlzVmFsaWRUaW1lUGFydChzZWNvbmQpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgICAgK3llYXIsXG4gICAgICAgICttb250aCxcbiAgICAgICAgK2RheSxcbiAgICAgICAgK2hvdXIsXG4gICAgICAgICttaW51dGUsXG4gICAgICAgICtzZWNvbmQsXG4gICAgICAgICttaWxsaXNlY29uZFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHN0cmluZywgcG9zaXRpb24sIHtcbiAgbG9jYWxlID0gJ2VuLVVTJyxcbiAgZGF0ZSA9IHRydWUsXG4gIHRpbWUgPSB0cnVlXG59ID0ge30pIHtcbiAgY29uc3QgcGFydHMgPSBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUsIHRpbWUgfSlcblxuICBjb25zdCBnZXRQb3NpdGlvbiA9IChwb3NpdGlvbiwgbGVuZ3RoID0gcGFydHMubGVuZ3RoKSA9PiB7XG4gICAgbGV0IHBvcyA9IDBcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICB3aGlsZSAoKHBvc2l0aW9uID09PSBudWxsIHx8IHBvcyA8PSBwb3NpdGlvbikgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHBvcyArPSBwYXJ0c1tpbmRleCsrXT8ubGVuZ3RoID8/IDBcbiAgICB9XG4gICAgcmV0dXJuIHsgcG9zaXRpb246IHBvcywgaW5kZXggfVxuICB9XG5cbiAgLy8gVGltZSBzdGFydHMgYXQgaW5kZXggNiwgZHVlIHRvIHRoZSBzZXBhcmF0b3IgYWZ0ZXIgdGhlIGRhdGUuXG4gIGNvbnN0IG9mZnNldCA9ICFkYXRlID8gZ2V0UG9zaXRpb24obnVsbCwgNikucG9zaXRpb24gOiAwXG4gIHBvc2l0aW9uICs9IG9mZnNldFxuXG4gIGxldCB7IGluZGV4IH0gPSBnZXRQb3NpdGlvbihwb3NpdGlvbilcblxuICBjb25zdCBpc1VTID0gbG9jYWxlID09PSAnZW4tVVMnXG4gIGNvbnN0IHZhbHVlcyA9IFtcbiAgICBpc1VTID8gJ21vbnRoJyA6ICdkYXknLFxuICAgIG51bGwsXG4gICAgaXNVUyA/ICdkYXknIDogJ21vbnRoJyxcbiAgICBudWxsLFxuICAgICd5ZWFyJyxcbiAgICBudWxsLFxuICAgICdob3VyJyxcbiAgICBudWxsLFxuICAgICdtaW51dGUnLFxuICAgIG51bGwsXG4gICAgJ3NlY29uZCcsXG4gICAgbnVsbCxcbiAgICAnbWlsbGlzZWNvbmQnXG4gIF1cbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICBpZiAodmFsdWVzW2luZGV4XSkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBnZXRQb3NpdGlvbihudWxsLCBpbmRleCkucG9zaXRpb24gLSBvZmZzZXRcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgcGFydHNbaW5kZXhdLmxlbmd0aFxuICAgICAgcmV0dXJuIHsgbmFtZTogdmFsdWVzW2luZGV4XSwgc3RhcnQsIGVuZCB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGdldERhdGVQYXJ0cyhzdHJpbmcsIHsgZGF0ZSA9IHRydWUsIHRpbWUgPSB0cnVlIH0gPSB7fSkge1xuICBjb25zdCBwYXJ0cyA9IHN0cmluZz8uc3BsaXQoLyhbXFxzLiw6L10rKS8pIHx8IFtdXG4gIGlmICghZGF0ZSkge1xuICAgIC8vIEFkZCBkdW1teSBkYXRlIHBhcnRzIHRvIG1ha2Ugc3VyZSB3ZSBnZXQgYSB0aW1lLW9ubHkgZGF0ZS5cbiAgICBwYXJ0cy51bnNoaWZ0KCcxJywgJy4nLCAnMScsICcuJywgJzIwMDAnLCAnICcpXG4gIH1cbiAgaWYgKCF0aW1lICYmIHBhcnRzLmxlbmd0aCA+IDUpIHtcbiAgICBwYXJ0cy5sZW5ndGggPSA1XG4gIH1cbiAgcmV0dXJuIHBhcnRzXG59XG5cbmZ1bmN0aW9uIGdldE1vbnRoSW5kZXgobW9udGgsIHsgbG9jYWxlID0gJ2VuLVVTJyB9ID0ge30pIHtcbiAgY29uc3QgdmFsdWUgPSArbW9udGhcbiAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUgLSAxXG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtb250aC50cmltKCkudG9Mb3dlckNhc2UoKVxuICBpZiAobWF0Y2gubGVuZ3RoIDwgMykgcmV0dXJuIG51bGxcbiAgY29uc3Qgc2hvcnRGb3JtYXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgY29uc3QgbG9uZ0Zvcm1hdCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgyMDAwLCBpLCAxKVxuICAgIGlmIChcbiAgICAgIHNob3J0Rm9ybWF0LmZvcm1hdChkYXRlKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobWF0Y2gpIHx8XG4gICAgICBsb25nRm9ybWF0LmZvcm1hdChkYXRlKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobWF0Y2gpXG4gICAgKSB7XG4gICAgICByZXR1cm4gaVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jYWxlbmRhclxuICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgIC5kaXRvLWNhbGVuZGFyLWlubmVyXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cImN1cnJlbnRNb2RlID09PSAnZGF5J1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogdHJ1ZSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC1tb250aChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgbW9udGg6IHRydWUgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwid2Vla2RheSBpbiB3ZWVrZGF5TmFtZXNcIlxuICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItZGF0ZXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJkYXRlLnN0YXRlICYmIGBkaXRvLWNhbGVuZGFyLWl0ZW0tJHtkYXRlLnN0YXRlfWBcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJkYXRlLnN0YXRlICE9PSAnZGlzYWJsZWQnICYmIHNlbGVjdERhdGUoZGF0ZS5kYXRlKVwiXG4gICAgICAgICAgICApIHt7IGRhdGUudGV4dCB9fVxuICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW5vdyhcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOnRpdGxlPVwiZGF0ZVRvU3RyaW5nKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUobmV3IERhdGUoKSlcIlxuICAgICAgICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogdHJ1ZSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIihtb250aCwgaW5kZXgpIGluIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICApIHt7IG1vbnRoLnNob3J0IH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ5ZWFyIGluIHllYXJSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgKSB7eyB5ZWFyIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZGVzY3JpYmVEYXRlLCBhbHRlckRhdGUgfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3NlbGVjdCddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBtb2RlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2RheScgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyB3ZWVrZGF5TmFtZXMsIG1vbnRoTmFtZXMgfSA9IGdldExvY2FsZU5hbWVzKHRoaXMubG9jYWxlKVxuICAgIHJldHVybiB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzLFxuICAgICAgZGF0ZVJhbmdlOiBbXSxcbiAgICAgIHllYXJSYW5nZTogW10sXG4gICAgICBjdXJyZW50VmFsdWU6IChcbiAgICAgICAgdGhpcy5tb2RlbFZhbHVlIHx8XG4gICAgICAgIC8vIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCB1c2UgY3VycmVudCBkYXRlIGJ1dCBjbGVhciB0aW1lIGZpZWxkczpcbiAgICAgICAgYWx0ZXJEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pXG4gICAgICApLFxuICAgICAgY3VycmVudE1vZGU6IHRoaXMubW9kZVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG8gfHwgbmV3IERhdGUoKVxuICAgICAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZERhdGU6ICd1cGRhdGVEYXRlUmFuZ2UnLFxuXG4gICAgbW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TW9udGhDbGFzcyhtb250aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOiAoXG4gICAgICAgICAgdGhpcy5tb2RlbFZhbHVlICYmXG4gICAgICAgICAgbW9udGggPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRNb250aCgpICYmXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzogbW9udGggPT09IHRoaXMuY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0WWVhckNsYXNzKHllYXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzogKFxuICAgICAgICAgIHRoaXMubW9kZWxWYWx1ZSAmJiB5ZWFyID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgICApLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOiB5ZWFyID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldERhdGUob3ZlcnJpZGVzLCB1cGRhdGUgPSBmYWxzZSkge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBhbHRlckRhdGUodGhpcy5jdXJyZW50VmFsdWUsIG92ZXJyaWRlcylcbiAgICAgIGlmICh1cGRhdGUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RlcERlY2FkZShzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIDEwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZXRNb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfSxcblxuICAgIHN0ZXBNb250aChzdGVwKSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyB5ZWFyLCBtb250aCB9ID0gdGhpcy5nZXRZZWFyTW9udGgoXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIHN0ZXBcbiAgICAgIClcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIG1vbnRoLFxuICAgICAgICBkYXk6IE1hdGgubWluKFxuICAgICAgICAgIHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpLFxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldERhdGUoKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzdGVwWWVhcihzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0RGF0ZShkYXRlKSB7XG4gICAgICB0aGlzLnNldERhdGUoZGVzY3JpYmVEYXRlKGRhdGUpLCB0cnVlKVxuICAgICAgdGhpcy4kZW1pdCgnc2VsZWN0JylcbiAgICB9LFxuXG4gICAgc2VsZWN0TW9udGgobW9udGgpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgIC8vIFNldCBkYXkgdG8gMSB0byBhdm9pZCBzZWxlY3RpbmcgYSBkYXRlIHRoYXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGVcbiAgICAgIC8vIG5ldyBtb250aCwgZS5nLiBGZWIgMzEgLT4gTWFyIDMuXG4gICAgICB0aGlzLnNldERhdGUoeyBtb250aCwgZGF5OiAxIH0sIHRydWUpXG4gICAgfSxcblxuICAgIHNlbGVjdFllYXIoeWVhcikge1xuICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICB0aGlzLnNldERhdGUoeyB5ZWFyIH0sIHRydWUpXG4gICAgfSxcblxuICAgIGdldFllYXJNb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgaWYgKG1vbnRoID4gMTEpIHtcbiAgICAgICAgeWVhcisrXG4gICAgICAgIG1vbnRoID0gMFxuICAgICAgfSBlbHNlIGlmIChtb250aCA8IDApIHtcbiAgICAgICAgeWVhci0tXG4gICAgICAgIG1vbnRoID0gMTFcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHllYXIsIG1vbnRoIH1cbiAgICB9LFxuXG4gICAgZGF0ZVRvU3RyaW5nKFxuICAgICAgZGF0ZSxcbiAgICAgIHsgeWVhciwgbW9udGgsIGRheSB9ID0geyB5ZWFyOiB0cnVlLCBtb250aDogdHJ1ZSwgZGF5OiB0cnVlIH1cbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMubG9jYWxlLCB7XG4gICAgICAgIHllYXI6IHllYXIgJiYgJ251bWVyaWMnLFxuICAgICAgICBtb250aDogbW9udGggJiYgJ2xvbmcnLFxuICAgICAgICBkYXk6IGRheSAmJiAnbnVtZXJpYydcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGRlY2FkZVRvU3RyaW5nKGRhdGUpIHtcbiAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKGRhdGUuZ2V0RnVsbFllYXIoKSlcbiAgICAgIHJldHVybiBgJHt5ZWFyfSDigJMgJHt5ZWFyICsgOX1gXG4gICAgfSxcblxuICAgIGdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKS5nZXREYXRlKClcbiAgICB9LFxuXG4gICAgZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcikge1xuICAgICAgY29uc3QgeWVhclN0ciA9IHllYXIudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuICtgJHt5ZWFyU3RyLnNsaWNlKDAsIC0xKX0wYFxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZSh7IHN0ZXAsIGVudGVyLCBtb2RlID0gdGhpcy5jdXJyZW50TW9kZSwgdXBkYXRlID0gZmFsc2UgfSkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoeyBkYXk6IGN1cnJlbnRWYWx1ZS5nZXREYXRlKCkgKyBzdGVwIH0sIHVwZGF0ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHsgbW9udGg6IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgc3RlcCB9LCB1cGRhdGUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHsgeWVhcjogY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwIH0sIHVwZGF0ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gZWxzZSBpZiAoZW50ZXIpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlRGF0ZVJhbmdlKCkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSBbXVxuICAgICAgdGhpcy55ZWFyUmFuZ2UgPSBbXVxuXG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeWVhciA9IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICBjb25zdCBtb250aCA9IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICBjb25zdCBzdGFydFllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgdGhpcy55ZWFyUmFuZ2UucHVzaChzdGFydFllYXIgKyBpKVxuICAgICAgfVxuICAgICAgY29uc3QgY3Vyck1vbnRoRmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSlcbiAgICAgIGxldCBmaXJzdERheVdlZWsgPSBjdXJyTW9udGhGaXJzdERheS5nZXREYXkoKSArIDFcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPT09IDApIHtcbiAgICAgICAgZmlyc3REYXlXZWVrID0gN1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID4gMSkge1xuICAgICAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCAtIDEpXG4gICAgICAgIGNvbnN0IHByZXZNb250aE51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKFxuICAgICAgICAgIHByZXZNb250aC55ZWFyLFxuICAgICAgICAgIHByZXZNb250aC5tb250aFxuICAgICAgICApXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZmlyc3REYXlXZWVrOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXkgPSBwcmV2TW9udGhOdW1EYXlzIC0gZmlyc3REYXlXZWVrICsgaSArIDFcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUocHJldk1vbnRoLnllYXIsIHByZXZNb250aC5tb250aCwgZGF5KVxuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogZGF5LFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG51bURheXM7IGkrKykge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGkpXG4gICAgICAgIGNvbnN0IGlzRGF5ID0gZGF0ZSA9PiAoXG4gICAgICAgICAgZGF0ZSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpID09PSBpICYmXG4gICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXG4gICAgICAgICAgZGF0ZS5nZXRNb250aCgpID09PSBtb250aFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHN0YXRlID0gaXNEYXkodGhpcy5tb2RlbFZhbHVlKVxuICAgICAgICAgID8gJ2FjdGl2ZSdcbiAgICAgICAgICA6IGlzRGF5KG5vdylcbiAgICAgICAgICAgID8gJ3RvZGF5J1xuICAgICAgICAgICAgOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKVxuICAgICAgICAgICAgICA/ICdkaXNhYmxlZCdcbiAgICAgICAgICAgICAgOiBpc0RheShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgICAgICAgPyAnY3VycmVudCdcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBkYXRlLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRNb250aE5lZWQgPSA0MiAtIHRoaXMuZGF0ZVJhbmdlLmxlbmd0aFxuICAgICAgaWYgKG5leHRNb250aE5lZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoICsgMSlcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbmV4dE1vbnRoTmVlZDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG5leHRNb250aC55ZWFyLCBuZXh0TW9udGgubW9udGgsIGkpXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGxvY2FsZU5hbWVzID0ge31cblxuLy8gQ2FsbGluZyBgdG9Mb2NhbGVTdHJpbmcoKWAgdGhpcyBtdWNoIGFwcGVhcnMgdG8gYmUgZXhwZW5zaXZlLCBzbyBjYWNoZSBpdDpcbmZ1bmN0aW9uIGdldExvY2FsZU5hbWVzKGxvY2FsZSkge1xuICBsZXQgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdXG4gIGlmICghbmFtZXMpIHtcbiAgICBjb25zdCB3ZWVrZGF5TmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgMCwgaSlcbiAgICAgIHdlZWtkYXlOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIGksIDApXG4gICAgICBtb250aE5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXSA9IHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jYWxlbmRhciB7XG4gIG1pbi13aWR0aDogMjQwcHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5kaXRvLWNhbGVuZGFyLXBvcHVwIHtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgei1pbmRleDogJHotaW5kZXgtcG9wdXA7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWJvZHkge1xuICBwYWRkaW5nOiAwIDAuNWVtO1xuXG4gIHNwYW4ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNyk7XG4gICAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICAgIGxpbmUtaGVpZ2h0OiBjYWxjKCN7JGlucHV0LWhlaWdodH0gLSAycHgpO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tdG9kYXkge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlO1xuICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUge1xuICAgICYsXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQsXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZ3JheSB7XG4gICAgY29sb3I6ICM5OTk5OTk7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItbW9udGhzLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMge1xuICBzcGFuIHtcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNCk7XG4gICAgbWFyZ2luOiAwLjVlbSAwO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW4ge1xuICB3aWR0aDogY2FsYygxMDAlIC8gNSk7XG59XG5cbi5kaXRvLWNhbGVuZGFyIGEsXG4uZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuLFxuLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW4sXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIgc3BhbiB7XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICBhIHtcbiAgICBwYWRkaW5nOiAwIDAuMmVtO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLWRhdGVzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhcjpub3QoOmhvdmVyKSAuZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQge1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xufVxuXG4uZGl0by1jYWxlbmRhci13ZWVrZGF5cyBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIsXG4uZGl0by1jYWxlbmRhci1mb290ZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbn1cblxuLmRpdG8tY2FsZW5kYXItZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogJGJvcmRlci1zdHlsZTtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGU7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgPiBzcGFuIHtcbiAgICBtYXJnaW46IGF1dG87XG4gICAgcGFkZGluZzogMCAwLjVlbTtcbiAgfVxuXG4gIGEge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LFxuLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNSU7XG4gIG1pbi13aWR0aDogMmVtO1xuICBtYXgtd2lkdGg6IDNlbTtcblxuICAmOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgZm9udC1zaXplOiAxLjI1ZW07XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfigLknO1xuICB9XG5cbiAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfCqyc7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfigLonO1xuICB9XG5cbiAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfCuyc7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc2VsZWN0LW5vdyB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnTm93JztcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkRXZlbnRzKHRhcmdldHMsIGV2ZW50cykge1xuICB0YXJnZXRzID1cbiAgICB0YXJnZXRzIGluc3RhbmNlb2YgTm9kZUxpc3RcbiAgICAgID8gQXJyYXkuZnJvbSh0YXJnZXRzKVxuICAgICAgOiBhc0FycmF5KHRhcmdldHMpXG5cbiAgZm9yIChjb25zdCBbdHlwZSwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgZm9yIChjb25zdCBbdHlwZSwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVFdmVudHMoLi4uZXZlbnRzKSB7XG4gIHJldHVybiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgZXZlbnQucmVtb3ZlKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleShldmVudCkge1xuICByZXR1cm4ge1xuICAgIDM3OiAnbGVmdCcsXG4gICAgMzg6ICd1cCcsXG4gICAgMzk6ICdyaWdodCcsXG4gICAgNDA6ICdkb3duJyxcbiAgICAxMzogJ2VudGVyJ1xuICB9W2V2ZW50Py5rZXlDb2RlXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5TmF2aWdhdGlvbihldmVudCkge1xuICBjb25zdCBrZXkgPSBnZXRLZXkoZXZlbnQpXG4gIHJldHVybiB7XG4gICAgaG9yOiB7IGxlZnQ6IC0xLCByaWdodDogMSB9W2tleV0gfHwgMCxcbiAgICB2ZXI6IHsgdXA6IC0xLCBkb3duOiAxIH1ba2V5XSB8fCAwLFxuICAgIGVudGVyOiBrZXkgPT09ICdlbnRlcidcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0KGNvbXBvbmVudCkge1xuICBjb25zdCB0YXJnZXQgPSBpc1N0cmluZyhjb21wb25lbnQudGFyZ2V0KVxuICAgID8gY29tcG9uZW50LiRyZWZzW2NvbXBvbmVudC50YXJnZXRdXG4gICAgOiBjb21wb25lbnQudGFyZ2V0XG4gIHJldHVybiB0YXJnZXQ/LiRlbCA/PyB0YXJnZXRcbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWlmPVwiYWx3YXlzU2hvd1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnY2xpY2snXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnZm9jdXMnIHx8IHRyaWdnZXIgPT09ICdhbHdheXMnXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICBUcmFuc2l0aW9uKDpuYW1lPVwiYGRpdG8tJHt0cmFuc2l0aW9ufWBcIilcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1lbHNlXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzLCBjb21iaW5lRXZlbnRzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5pbXBvcnQgeyBnZXRUYXJnZXQgfSBmcm9tICcuLi91dGlscy90cmlnZ2VyJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpzaG93J10sXG5cbiAgcHJvcHM6IHtcbiAgICB0cmlnZ2VyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2NsaWNrJyB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbScgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3VzdG9tQ2xhc3M6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgekluZGV4OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIGtlZXBJblZpZXc6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhpZGVXaGVuQ2xpY2tPdXRzaWRlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBhbHdheXNTaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY292ZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoaWRlRGVsYXk6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIHBvcHVwUGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudCxcbiAgICAgIGZvY3VzRXZlbnRzOiBudWxsLFxuICAgICAgY2xvc2VFdmVudHM6IG51bGwsXG4gICAgICBwb3B1cEV2ZW50czogbnVsbCxcbiAgICAgIGJsdXJUaW1lcjogbnVsbCxcbiAgICAgIG1vdXNlTGVhdmVUaW1lcjogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyaWdnZXJDbGFzcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXRyaWdnZXItZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBvcHVwQ2xhc3MoKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICBbYGRpdG8tcG9wdXAtJHtoeXBoZW5hdGUodGhpcy5wbGFjZW1lbnQpfWBdOiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXN0b21DbGFzcykge1xuICAgICAgICBjbGFzc2VzW3RoaXMuY3VzdG9tQ2xhc3NdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgcG9wdXBTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnpJbmRleCA/IGB6LWluZGV4OiAke3RoaXMuekluZGV4fWAgOiAnJ1xuICAgIH0sXG5cbiAgICB0cmlnZ2VyVGFyZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFRhcmdldCh0aGlzKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93IHx8IHRoaXMuYWx3YXlzU2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy5vblNob3dQb3B1cCh0bykpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgIHRoaXMuZm9jdXNFdmVudHMgPSB0aGlzLmFkZEZvY3VzRXZlbnRzKHRoaXMudHJpZ2dlclRhcmdldCA/PyB0cmlnZ2VyKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVXaGVuQ2xpY2tPdXRzaWRlICYmICF0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIC8vIFVzZSAnbW91c2V1cCcgaW5zdGVhZCBvZiAnY2xpY2snLCBzaW5jZSBjbGljayBhcHBlYXJzIHRvIGhhcHBlbiBhZnRlclxuICAgICAgLy8gdGhlIERPTSBpbnNpZGUgb2YgcG9wdXBzIGNvdWxkIGNoYW5nZSBpbiBhIHdheSBzbyB0aGF0IHRoZSBjaGVja1xuICAgICAgLy8gYHBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldClgIHdvdWxkIGZhaWw6XG4gICAgICB0aGlzLmNsb3NlRXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgJiZcbiAgICAgICAgICAgICFwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdHJpZ2dlci5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdGhpcy50cmlnZ2VyVGFyZ2V0Py5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5zaG93UG9wdXAgPSB0aGlzLnNob3dcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5mb2N1c0V2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLmNsb3NlRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMucG9wdXBFdmVudHM/LnJlbW92ZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZVBvc2l0aW9uKCkge1xuICAgICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgICAgaWYgKHRoaXMuc2hvdyAmJiBwb3B1cC5vZmZzZXRXaWR0aCA9PT0gMCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSwgMClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudHJpZ2dlclRhcmdldCA/PyB0cmlnZ2VyXG4gICAgICAvLyBBY3R1YWxseSByZXNpemUgdGhlIHBvcHVwJ3MgZmlyc3QgY2hpbGQsIHNvIHRoZXkgY2FuIHNldCBzaXplIGxpbWl0cy5cbiAgICAgIGNvbnN0IGVsID0gdGhpcy50YXJnZXQgPT09ICdwb3B1cCcgPyB0cmlnZ2VyIDogcG9wdXAuZmlyc3RFbGVtZW50Q2hpbGRcbiAgICAgIGlmIChlbCkge1xuICAgICAgICBlbC5zdHlsZS53aWR0aCA9IGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS53aWR0aFxuICAgICAgfVxuXG4gICAgICBjb25zdCBib3VuZHMgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IHRyaWdnZXJMZWZ0ID0gYm91bmRzLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICAgY29uc3QgdHJpZ2dlclRvcCA9IGJvdW5kcy50b3AgKyB3aW5kb3cuc2Nyb2xsWVxuICAgICAgY29uc3QgdHJpZ2dlcldpZHRoID0gYm91bmRzLndpZHRoXG4gICAgICBjb25zdCB0cmlnZ2VySGVpZ2h0ID0gYm91bmRzLmhlaWdodFxuICAgICAgY29uc3QgcG9wdXBXaWR0aCA9IHBvcHVwLm9mZnNldFdpZHRoXG4gICAgICBjb25zdCBwb3B1cEhlaWdodCA9IHBvcHVwLm9mZnNldEhlaWdodFxuXG4gICAgICBsZXQgW3BhcnQxLCBwYXJ0Ml0gPSB0aGlzLnBvcHVwUGxhY2VtZW50LnNwbGl0KCctJykgfHwgW11cbiAgICAgIGlmICh0aGlzLmtlZXBJblZpZXcpIHtcbiAgICAgICAgY29uc3Qgd2luV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgICBjb25zdCB3aW5IZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgLSB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IC0gdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydDIgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCArIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgKyB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgbGVmdCA9IDBcbiAgICAgIGxldCB0b3AgPSAwXG4gICAgICBzd2l0Y2ggKHBhcnQxKSB7XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgdG9wIC09IHBvcHVwSGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIGxlZnQgKz0gdHJpZ2dlcldpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICB0b3AgKz0gdHJpZ2dlckhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHBhcnQyKSB7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBsZWZ0IC09IHBvcHVwV2lkdGggLSB0cmlnZ2VyV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodCAtIHRyaWdnZXJIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY292ZXIpIHtcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgdG9wIC09IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRhcmdldCAhPT0gdHJpZ2dlcikge1xuICAgICAgICBjb25zdCB0cmlnZ2VyQm91bmRzID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJMZWZ0IC0gdHJpZ2dlckJvdW5kcy5sZWZ0XG4gICAgICAgIHRvcCArPSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckJvdW5kcy50b3BcbiAgICAgIH1cbiAgICAgIHBvcHVwLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YFxuICAgICAgcG9wdXAuc3R5bGUudG9wID0gYCR7dG9wfXB4YFxuICAgIH0sXG5cbiAgICBhZGRGb2N1c0V2ZW50cyhwYXJlbnQpIHtcbiAgICAgIGNvbnN0IHRhcmdldHMgPSBwYXJlbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsIHRleHRhcmVhJylcbiAgICAgIGxldCBpbnB1dFxuXG4gICAgICByZXR1cm4gY29tYmluZUV2ZW50cyhcbiAgICAgICAgYWRkRXZlbnRzKHRhcmdldHMsIHtcbiAgICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZXIpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSB0aW1lb3V0IHRvIGFsbG93IGNsaWNrZWQgaW5wdXRzIHRvIGdyYWIgZm9jdXNcbiAgICAgICAgICAgIHRoaXMuYmx1clRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy4kcmVmcy5wb3B1cC5tYXRjaGVzKCc6Zm9jdXMtd2l0aGluJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcblxuICAgICAgICBhZGRFdmVudHMocGFyZW50LCB7XG4gICAgICAgICAgbW91c2Vkb3duOiBldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKCdpbnB1dCwgdGV4dGFyZWEsIGJ1dHRvbicpKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJy5kaXRvLWJ1dHRvbi1jbGVhcicpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLnRyaWdnZXJUYXJnZXQgPz8gdGhpcy4kcmVmcy50cmlnZ2VyXG4gICAgICAgICAgICAgIC8vIE1hcmsgdHJpZ2dlciBpbnB1dCBhcyByZWFkb25seSBzbyBpdCBjYW4ndCBsb29zZSBmb2N1cyB3aGlsZVxuICAgICAgICAgICAgICAvLyB1c2VyIGRvZXMgb3RoZXIgbW91c2UtYWN0aXZpdGllcyBpbiBwb3B1cC5cbiAgICAgICAgICAgICAgaW5wdXQgPSB0cmlnZ2VyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCB0ZXh0YXJlYScpXG4gICAgICAgICAgICAgIGlmIChpbnB1dCAmJiAhaW5wdXQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdyZWFkb25seScsICd0cnVlJylcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgICAgLy8gR2l2ZSBzb21lIHRpbWUgZm9yIG90aGVyIGV2ZW50cyB0byB1cGRhdGUgaW5wdXQgYmVmb3JlIGl0XG4gICAgICAgICAgICAgIC8vIGJlY29tZXMgZWRpdGFibGUgYW5kIHN0aWxsIGZvY3VzZWQgYWdhaW4uXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlucHV0LnJlbW92ZUF0dHJpYnV0ZSgncmVhZG9ubHknKVxuICAgICAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJ2lucHV0LCB0ZXh0YXJlYSwgYnV0dG9uJykpIHtcbiAgICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBudWxsXG4gICAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBvblNob3dQb3B1cChzaG93KSB7XG4gICAgICBpZiAoc2hvdykge1xuICAgICAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG4gICAgICAgICAgdGhpcy5wb3B1cEV2ZW50cyA9IHRoaXMuYWRkRm9jdXNFdmVudHModGhpcy4kcmVmcy5wb3B1cClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucG9wdXBFdmVudHM/LnJlbW92ZSgpXG4gICAgICAgIHRoaXMucG9wdXBFdmVudHMgPSBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uSG92ZXIoZW50ZXIpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZUxlYXZlVGltZXIpXG4gICAgICAgIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmhpZGVEZWxheSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUxlYXZlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgICAgfSwgdGhpcy5oaWRlRGVsYXkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5AaW1wb3J0ICcuLi9zdHlsZXMvdHJhbnNpdGlvbnMnO1xuXG4uZGl0by10cmlnZ2VyLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmRpdG8tdHJpZ2dlci1kaXNhYmxlZCB7XG4gIGNvbG9yOiAkY29sb3ItZGlzYWJsZWQ7XG4gIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuXG4gICoge1xuICAgIGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50O1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgJjpmb2N1cyB7XG4gICAgICBib3gtc2hhZG93OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1wb3B1cCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAkei1pbmRleC1wb3B1cDtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8taW5wdXQoOmNsYXNzPVwiY2xhc3Nlc1wiKVxuICBzbG90KG5hbWU9XCJiZWZvcmVcIilcbiAgaW5wdXQoXG4gICAgOmlkPVwiaWRcIlxuICAgIHJlZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICA6dHlwZT1cInR5cGVcIlxuICAgIDpuYW1lPVwibmFtZVwiXG4gICAgOnRpdGxlPVwidGl0bGVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6cmVhZG9ubHk9XCJyZWFkb25seVwiXG4gICAgOmF1dG9mb2N1cz1cImF1dG9mb2N1c1wiXG4gICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgIDphdXRvY29tcGxldGU9XCJhdXRvY29tcGxldGVcIlxuICAgIDphcmlhLWxhYmVsPVwidGl0bGVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICApXG4gIHNsb3QobmFtZT1cImFmdGVyXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHlwZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICd0ZXh0JyB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdGl0bGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICByZWFkb25seTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGF1dG9mb2N1czogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGF1dG9jb21wbGV0ZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdvZmYnIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIGhvdmVyaW5nOiBmYWxzZSxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRhdHRycy5jbGFzc1xuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBjbGFzczogXywgLi4uYXR0cmlidXRlcyB9ID0gdGhpcy4kYXR0cnNcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMuaW5wdXRcbiAgICB9LFxuXG4gICAgc2l6ZSgpIHtcbiAgICAgIC8vIERldGVybWluZSBzaXplIGJhc2VkIG9uIG1pbiAmIG1heCBzZXR0aW5ncywgaWYgdGhleSdyZSBwcm92aWRlZC5cbiAgICAgIGNvbnN0IHsgc2l6ZSwgbWluLCBtYXggfSA9IHRoaXMuJGF0dHJzXG4gICAgICBjb25zdCBnZXRMZW5ndGggPSB2YWx1ZSA9PiAodmFsdWUgIT0gbnVsbCA/IGAke3ZhbHVlfWAubGVuZ3RoIDogMClcbiAgICAgIHJldHVybiBzaXplIHx8IGdldExlbmd0aChtaW4pIHx8IGdldExlbmd0aChtYXgpIHx8IHVuZGVmaW5lZFxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShjdXJyZW50VmFsdWUpIHtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IHRoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8taW5wdXQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgaW5wdXQge1xuICAgIC8vIEluaGVyaXQgYWxsIHN0eWxpbmcgZnJvbSAuZGl0by1pbnB1dFxuICAgIGFsbDogaW5oZXJpdDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyOiAwO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmkuZGl0by1pY29uKFxuICA6Y2xhc3M9YHtcbiAgICBbJ2RpdG8taWNvbi0tJyArIG5hbWVdOiB0cnVlLFxuICAgICdkaXRvLWljb24tLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgfWBcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgbmFtZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGRpc2FibGVkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi8vIGB5YXJuIGJ1aWxkOmljb25zYCBjb252ZXJ0cyB0aGUgaWNvbiBTVkcgZmlsZXMgdG8gc2lsZW50IGNsYXNzZXMgaW5zaWRlXG4vLyBgc3JjL3N0eWxlcy9taXhpbnMvX2ljb25zLnNjc3NgLCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgdG8gYWxsIG90aGVyIHNhc3Ncbi8vIGNvZGUgdGhyb3VnaCBgX2ltcG9ydHNgLlxuLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1c2UgdGhlbSBhcyBub3JtYWwgQ1NTIGNsYXNzZXMsIGNvbnZlcnQgdGhlbSBoZXJlOlxuQGVhY2ggJG5hbWUgaW4gJGljb25zIHtcbiAgLmRpdG8taWNvbi0tI3skbmFtZX0ge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIEBleHRlbmQgJWljb24tI3skbmFtZX07XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8taWNvbiB7XG4gIEBhdC1yb290IC5kaXRvLWlucHV0ICYge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogJGJvcmRlci13aWR0aDtcbiAgICBsZWZ0OiB1bnNldDtcbiAgICB3aWR0aDogMmVtO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBjb2xvcjogJGNvbG9yLWdyZXk7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuXG4gICAgJi0tZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICRjb2xvci1saWdodDtcbiAgICB9XG4gIH1cblxuICBAYXQtcm9vdCAuZGl0by1pbnB1dDpmb2N1cy13aXRoaW4gJiB7XG4gICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJleHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0LCBlbmQgfSkge1xuICBpZiAoaW5wdXQ/LnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgaW5wdXQuZm9jdXMoKVxuICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbihpbnB1dCkge1xuICByZXR1cm4gaW5wdXQgJiYgJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dFxuICAgID8geyBzdGFydDogaW5wdXQuc2VsZWN0aW9uU3RhcnQsIGVuZDogaW5wdXQuc2VsZWN0aW9uRW5kIH1cbiAgICA6IG51bGxcbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVHJpZ2dlci5kaXRvLWRhdGUtcGlja2VyKFxuICByZWY9XCJ0cmlnZ2VyXCJcbiAgdi1tb2RlbDpzaG93PVwic2hvd1BvcHVwXCJcbiAgdHJpZ2dlcj1cImZvY3VzXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiJHNsb3RzLnRyaWdnZXJcIlxuICAgICAgbmFtZT1cInRyaWdnZXJcIlxuICAgIClcbiAgICBJbnB1dEZpZWxkLmRpdG8tZGF0ZS1waWNrZXItaW5wdXQoXG4gICAgICB2LWVsc2VcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCAuLi4kYXR0cnMgfVwiXG4gICAgICBAZm9jdXM9XCJvbkZvY3VzKHRydWUpXCJcbiAgICAgIEBibHVyPVwib25Gb2N1cyhmYWxzZSlcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25Nb3VzZURvd24oZmFsc2UpXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgICBzbG90KG5hbWU9XCJiZWZvcmVcIilcbiAgICAgIHRlbXBsYXRlKCNhZnRlcilcbiAgICAgICAgSWNvbihcbiAgICAgICAgICBuYW1lPVwiY2FsZW5kYXJcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCJvbk1vdXNlRG93bih0cnVlKVwiXG4gICAgICAgIClcbiAgICAgICAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIENhbGVuZGFyLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAoXG4gICAgICByZWY9XCJjYWxlbmRhclwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtYmluZD1cInsgbG9jYWxlLCBkaXNhYmxlZERhdGUgfVwiXG4gICAgICBAc2VsZWN0PVwic2hvd1BvcHVwID0gZmFsc2VcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgQ2FsZW5kYXIgZnJvbSAnLi9DYWxlbmRhci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uLnZ1ZSdcbmltcG9ydCB7IHBhcnNlRGF0ZSwgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IGdldFNlbGVjdGlvbiwgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuaW1wb3J0IHsgZ2V0VGFyZ2V0IH0gZnJvbSAnLi4vdXRpbHMvdHJpZ2dlci5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIENhbGVuZGFyLCBJbnB1dEZpZWxkLCBJY29uIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3VwZGF0ZTpzaG93JywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICBkYXRlOiBkZWZhdWx0Rm9ybWF0cy5kYXRlLFxuICAgICAgICB0aW1lOiBmYWxzZVxuICAgICAgfSlcbiAgICB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiBnZXRUYXJnZXQodGhpcyk/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgZm9ybWF0T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgIC4uLnRoaXMuZm9ybWF0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykgfHwgJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBkYXRlID0gcGFyc2VEYXRlKHZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh2YWx1ZSkge1xuICAgICAgaWYgKCt2YWx1ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkZvY3VzKGZvY3VzKSB7XG4gICAgICB0aGlzLmlucHV0Rm9jdXNlZCA9IGZvY3VzXG4gICAgICB0aGlzLnNob3dQb3B1cCA9IGZvY3VzXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3QgeyB2ZXI6IHN0ZXAsIGVudGVyIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgaWYgKHN0ZXAgfHwgZW50ZXIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQpPy5zdGFydFxuICAgICAgICBjb25zdCBnZXREYXRlUGFydCA9IHBvc2l0aW9uID0+XG4gICAgICAgICAgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHRoaXMuY3VycmVudFRleHQsIHBvc2l0aW9uLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHN0ZXAgJiYgIXRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgeyBjYWxlbmRhciB9ID0gdGhpcy4kcmVmc1xuICAgICAgICAgIGlmIChjYWxlbmRhcikge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lOiBtb2RlLCBzdGFydCB9ID0gZ2V0RGF0ZVBhcnQocG9zaXRpb24pIHx8IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG1vZGUgJiZcbiAgICAgICAgICAgICAgY2FsZW5kYXIubmF2aWdhdGUoeyBzdGVwLCBlbnRlciwgbW9kZSwgdXBkYXRlOiB0cnVlIH0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQsIGdldERhdGVQYXJ0KHN0YXJ0KSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKHRvZ2dsZSkge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5kaXNhYmxlZCAmJiAoIXRvZ2dsZSB8fCAhdGhpcy5zaG93UG9wdXApXG4gICAgICBpZiAodGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGF0ZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4td2lkdGg6IDhlbTtcbiAgfVxufVxuXG4uZGl0by1kYXRlLXBpY2tlci1wb3B1cCB7XG4gIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbn1cbjwvc3R5bGU+XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by10aW1lLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJmb2N1c1wiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiRzbG90cy50cmlnZ2VyXCJcbiAgICAgIG5hbWU9XCJ0cmlnZ2VyXCJcbiAgICApXG4gICAgSW5wdXRGaWVsZC5kaXRvLXRpbWUtcGlja2VyLWlucHV0KFxuICAgICAgdi1lbHNlXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cIlxuICAgICAgQGZvY3VzPVwib25Gb2N1cyh0cnVlKVwiXG4gICAgICBAYmx1cj1cIm9uRm9jdXMoZmFsc2UpXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uTW91c2VEb3duKGZhbHNlKVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2JlZm9yZSlcbiAgICAgICAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gICAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICAgIEljb24oXG4gICAgICAgICAgbmFtZT1cImNsb2NrXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5wcmV2ZW50PVwib25Nb3VzZURvd24odHJ1ZSlcIlxuICAgICAgICApXG4gICAgICAgIHNsb3QobmFtZT1cImFmdGVyXCIpXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICAuZGl0by10aW1lLXBpY2tlci1wb3B1cFxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1ob3VyKHJlZj1cImhvdXJcIilcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gMjRcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkSG91cihpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogaG91ciA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJob3VyID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLW1pbnV0ZShyZWY9XCJtaW51dGVcIilcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkTWludXRlKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwibWludXRlID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLXNlY29uZChyZWY9XCJzZWNvbmRcIilcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkU2Vjb25kKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBzZWNvbmQgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2Vjb25kID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCBJY29uIGZyb20gJy4vSWNvbi52dWUnXG5pbXBvcnQgeyBhbHRlckRhdGUsIHBhcnNlRGF0ZSwgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IGdldFNlbGVjdGlvbiwgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuaW1wb3J0IHsgZ2V0VGFyZ2V0IH0gZnJvbSAnLi4vdXRpbHMvdHJpZ2dlci5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIElucHV0RmllbGQsIEljb24gfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAndXBkYXRlOnNob3cnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6ICgpID0+ICh7XG4gICAgICAgIHRpbWU6IGRlZmF1bHRGb3JtYXRzLnRpbWUsXG4gICAgICAgIGRhdGU6IGZhbHNlXG4gICAgICB9KVxuICAgIH0sXG4gICAgZGlzYWJsZWRIb3VyOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkTWludXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkU2Vjb25kOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBpZ25vcmVOZXh0Q2hhbmdlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gZ2V0VGFyZ2V0KHRoaXMpPy5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpXG4gICAgfSxcblxuICAgIGZvcm1hdE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAuLi50aGlzLmZvcm1hdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpIHx8ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHBhcnNlRGF0ZSh2YWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKVxuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnREYXRlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgfHxcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IERhdGUoKSBvYmplY3Qgd2l0aCB0aGUgdGltZSBzZXQgdG8gMCwgdG8gYmUgdXNlZCB3aGVuXG4gICAgICAgIC8vIGZpcnN0IHNldHRpbmcgYW55IG9mIHRoZSB0aW1lcywgZm9yIG1lYW5pbmdmdWwgZGF0ZXMgaW4gY2FzZSB0aGVcbiAgICAgICAgLy8gb2JqZWN0IGlzIHNoYXJlZCB3aXRoIGEgRGF0ZVBpY2tlciwgZS5nLiB0aHJvdWdoIERhdGVUaW1lUGlja2VyLlxuICAgICAgICBhbHRlckRhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaG91cjoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRIb3VycygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoaG91cikge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBob3VyIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1pbnV0ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRNaW51dGVzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChtaW51dGUpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgbWludXRlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlY29uZDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRTZWNvbmRzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChzZWNvbmQpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgc2Vjb25kIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgICB0aGlzLnNjcm9sbEFsbCh0cnVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodmFsdWUpIHtcbiAgICAgIGlmICgrdmFsdWUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB2YWx1ZSlcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKHRydWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0KCkge1xuICAgICAgY29uc3QgeyBpbnB1dCB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKGlucHV0KVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmZvY3VzZWQgJiZcbiAgICAgICAgIXRoaXMuaWdub3JlTmV4dENoYW5nZSAmJlxuICAgICAgICBzZWxlY3Rpb24uc3RhcnQgPT09IHNlbGVjdGlvbi5lbmRcbiAgICAgICkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24oaW5wdXQsIHNlbGVjdGlvbikpXG4gICAgICB9XG4gICAgICB0aGlzLmlnbm9yZU5leHRDaGFuZ2UgPSBmYWxzZVxuICAgIH0sXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0bykge1xuICAgICAgICB0aGlzLnNjcm9sbEFsbChmYWxzZSlcbiAgICAgIH1cbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGxlZnRQYWQodmFsdWUpIHtcbiAgICAgIHJldHVybiAoJzAnICsgdmFsdWUpLnNsaWNlKC0yKVxuICAgIH0sXG5cbiAgICBzZXRUaW1lKG92ZXJyaWRlcykge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBhbHRlckRhdGUodGhpcy5jdXJyZW50RGF0ZSwge1xuICAgICAgICAuLi5vdmVycmlkZXMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzY3JvbGxBbGwoc21vb3RoKSB7XG4gICAgICBjb25zdCBzY3JvbGwgPSAocmVmLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRyZWZzW3JlZl1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSAoXG4gICAgICAgICAgICB0YXJnZXQuc2Nyb2xsSGVpZ2h0IC9cbiAgICAgICAgICAgIC8vIEZpcnN0IGFuZCBsYXN0IG9uZSBhZGQgMyB0aW1lcyB0aGUgbWFyZ2luLlxuICAgICAgICAgICAgKHRhcmdldC5jaGlsZEVsZW1lbnRDb3VudCArIDYpXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IHRvcCA9IE1hdGgucm91bmQodmFsdWUgKiBsaW5lSGVpZ2h0KVxuICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnModGFyZ2V0LnNjcm9sbFRvcCAtIHRvcClcbiAgICAgICAgICB0YXJnZXQuc2Nyb2xsVG8oe1xuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgYmVoYXZpb3I6IHNtb290aCAmJiBkaXN0YW5jZSA8IDEwMCA/ICdzbW9vdGgnIDogJ2F1dG8nXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBzY3JvbGwoJ2hvdXInLCB0aGlzLmhvdXIpXG4gICAgICAgIHNjcm9sbCgnbWludXRlJywgdGhpcy5taW51dGUpXG4gICAgICAgIHNjcm9sbCgnc2Vjb25kJywgdGhpcy5zZWNvbmQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZvY3VzKGZvY3VzKSB7XG4gICAgICB0aGlzLmlucHV0Rm9jdXNlZCA9IGZvY3VzXG4gICAgICB0aGlzLnNob3dQb3B1cCA9IGZvY3VzXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3QgeyBpbnB1dCB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKGlucHV0KVxuICAgICAgY29uc3QgeyB2ZXI6IHN0ZXAsIGVudGVyIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgaWYgKHN0ZXAgfHwgZW50ZXIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgICAgIGNvbnN0IGdldERhdGVQYXJ0ID0gcG9zaXRpb24gPT5cbiAgICAgICAgICBnZXREYXRlUGFydEF0UG9zaXRpb24odGhpcy5jdXJyZW50VGV4dCwgcG9zaXRpb24sIHRoaXMuZm9ybWF0T3B0aW9ucylcblxuICAgICAgICBpZiAoc3RlcCkge1xuICAgICAgICAgIGlmICghdGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWUsIHN0YXJ0IH0gPSBnZXREYXRlUGFydChzZWxlY3Rpb24uc3RhcnQpIHx8IHt9XG4gICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbbmFtZV0gKyBzdGVwXG4gICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy4kcmVmc1tuYW1lXS5jaGlsZEVsZW1lbnRDb3VudFxuICAgICAgICAgICAgICB0aGlzW25hbWVdID1cbiAgICAgICAgICAgICAgICB2YWx1ZSA8IDBcbiAgICAgICAgICAgICAgICAgID8gdmFsdWUgKyBjb3VudFxuICAgICAgICAgICAgICAgICAgOiB2YWx1ZSA+PSBjb3VudFxuICAgICAgICAgICAgICAgICAgICA/IHZhbHVlIC0gY291bnRcbiAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICAgICAgICB0aGlzLmlnbm9yZU5leHRDaGFuZ2UgPSB0cnVlXG4gICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbihpbnB1dCwgZ2V0RGF0ZVBhcnQoc3RhcnQpKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLnN0YXJ0ID09PSBzZWxlY3Rpb24uZW5kKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IGlucHV0XG4gICAgICAgIGxldCBwb3MgPSBzZWxlY3Rpb24uc3RhcnRcblxuICAgICAgICBjb25zdCBpc0RpZ2l0ID0gY2hhciA9PiAhaXNOYU4ocGFyc2VJbnQoY2hhciwgMTApKVxuXG4gICAgICAgIGlmIChldmVudC5rZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgaWYgKGlzRGlnaXQoZXZlbnQua2V5KSAmJiBwb3MgPCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdmFsdWVbcG9zXSA9PT0gJzonICYmXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zIC0gMV0pICYmXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zIC0gMl0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcG9zKytcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW92ZSBuZXh0IGRpZ2l0IHNvIHRoZSBldmVudCBvdmVycmlkZXMgaXQgaW5zdGVhZCBvZiBpbnNlcnRpbmdcbiAgICAgICAgICAgIC8vIG5ldyBjaGFycy5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3NdKSAmJiAoXG4gICAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgKyAxXSkgfHxcbiAgICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyAtIDFdKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSAoXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgcG9zKSArXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UocG9zICsgMSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQ6IHBvcywgZW5kOiBwb3MgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpLmxlbmd0aFxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgbGVuZ3RoKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHNlbGVjdGlvbilcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcG9zID09PSAxIHx8XG4gICAgICAgICAgICBbJyAnLCAnOiddLmluY2x1ZGVzKHZhbHVlW3BvcyAtIDJdKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwb3MgPT09IHZhbHVlLmxlbmd0aCB8fFxuICAgICAgICAgICAgICB2YWx1ZVtwb3NdID09PSAnOidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBwb3MtLVxuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IChcbiAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCBwb3MpICtcbiAgICAgICAgICAgICAgICAoKHZhbHVlW3BvcyAtIDFdID8/ICcnKSArICcwMCcpICtcbiAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZShwb3MgKyAxKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNldFNlbGVjdGlvbihpbnB1dCwgeyBzdGFydDogcG9zLCBlbmQ6IHBvcyB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3NdKSAmJlxuICAgICAgICAgICAgICAhaXNEaWdpdCgrdmFsdWVbcG9zICsgMV0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gV2hlbiByZW1vdmluZyB0aGUgZmlyc3Qgb2YgdHdvIGRpZ2l0cywgcmVwbGFjZSB3aXRoIDBcbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBwb3MpICsgJzAnICsgdmFsdWUuc2xpY2UocG9zKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQ6IHBvcywgZW5kOiBwb3MgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Nb3VzZURvd24odG9nZ2xlKSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9ICF0aGlzLmRpc2FibGVkICYmICghdG9nZ2xlIHx8ICF0aGlzLnNob3dQb3B1cClcbiAgICAgIGlmICh0aGlzLnNob3dQb3B1cCkge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10aW1lLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4td2lkdGg6IDZlbTtcbiAgfVxufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCB7XG4gIG1heC13aWR0aDogMTYwcHg7XG4gIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbn1cblxuJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0OiAyNHB4O1xuXG4uZGl0by10aW1lLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAgLmRpdG8tdGltZS1waWNrZXItcGFuZWwge1xuICBmbG9hdDogbGVmdDtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItd2lkdGg6IDAgMXB4IDA7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB3aWR0aDogY2FsYygxMDAlIC8gMyArIDFweCk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgJjpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gIH1cblxuICB1bCB7XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW46IDA7XG4gICAgLy8gSGlkZSBzY3JvbGxiYXI6XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgcGFkZGluZzogMCAxN3B4IDAgMDtcbiAgICBoZWlnaHQ6IDcgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG5cbiAgICAmID4gbGkge1xuICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgbGluZS1oZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG4gICAgICB9XG5cbiAgICAgICYuc2VsZWN0ZWQsXG4gICAgICAmLnNlbGVjdGVkOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRhdGUtdGltZS1waWNrZXIocmVmPVwicGlja2VyXCIpXG4gIC5kaXRvLWRhdGUtdGltZS1waWNrZXJfX2lubmVyKDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIilcbiAgICBJbnB1dEZpZWxkLmRpdG8tZGF0ZS10aW1lLXBpY2tlcl9faW5wdXQoXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cIlxuICAgICAgQGZvY3VzPVwib25Gb2N1cyh0cnVlKVwiXG4gICAgICBAYmx1cj1cIm9uRm9jdXMoZmFsc2UpXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uTW91c2VEb3duKGZhbHNlKVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2JlZm9yZSlcbiAgICAgICAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gICAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICAgIEljb24oXG4gICAgICAgICAgbmFtZT1cImNhbGVuZGFyXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5wcmV2ZW50PVwib25Nb3VzZURvd24odHJ1ZSlcIlxuICAgICAgICApXG4gICAgICAgIHNsb3QobmFtZT1cImFmdGVyXCIpXG4gICAgRGF0ZVBpY2tlcihcbiAgICAgIHJlZj1cImRhdGVcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LW1vZGVsOnNob3c9XCJzaG93RGF0ZVwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgICAgICAvLy0gSW50ZW50aW9uYWxseSBlbXB0eVxuICAgIFRpbWVQaWNrZXIoXG4gICAgICByZWY9XCJ0aW1lXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd1RpbWVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgICAgIC8vLSBJbnRlbnRpb25hbGx5IGVtcHR5XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cywgYXNzaWduRGVlcGx5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tICcuL0RhdGVQaWNrZXIudnVlJ1xuaW1wb3J0IFRpbWVQaWNrZXIgZnJvbSAnLi9UaW1lUGlja2VyLnZ1ZSdcbmltcG9ydCBJY29uIGZyb20gJy4vSWNvbi52dWUnXG5pbXBvcnQgeyBwYXJzZURhdGUgfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uLCBzZXRTZWxlY3Rpb24gfSBmcm9tICcuLi91dGlscy9zZWxlY3Rpb24uanMnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkLCBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBJY29uIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd0RhdGU6IGZhbHNlLFxuICAgICAgc2hvd1RpbWU6IGZhbHNlLFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGRhdGVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHRpbWVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNsb3NlZE1vZGU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyB0cmFuc2l0aW9uLCBkaXNhYmxlZCwgbG9jYWxlLCBmb3JtYXRPcHRpb25zOiBmb3JtYXQgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7IHRyYW5zaXRpb24sIGRpc2FibGVkLCBsb2NhbGUsIGZvcm1hdCB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93RGF0ZSB8fCB0aGlzLnNob3dUaW1lXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMuaW5wdXQuaW5wdXRcbiAgICB9LFxuXG4gICAgZm9ybWF0T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBhc3NpZ25EZWVwbHkoXG4gICAgICAgIHtcbiAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAgIHRpbWU6IGRlZmF1bHRGb3JtYXRzLnRpbWUsXG4gICAgICAgICAgZGF0ZTogZGVmYXVsdEZvcm1hdHMuZGF0ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgICAgICBmb3JtYXQ6ICh2YWx1ZSwgdHlwZSwgb3B0aW9ucykgPT5cbiAgICAgICAgICAgICAgdHlwZSA9PT0gJ2xpdGVyYWwnICYmIC9cXGJhdFxcYi8udGVzdCh2YWx1ZSlcbiAgICAgICAgICAgICAgICA/ICcsICdcbiAgICAgICAgICAgICAgICA6IHRoaXMuZm9ybWF0Py5kYXRlPy5mb3JtYXQ/Lih2YWx1ZSwgdHlwZSwgb3B0aW9ucykgPz8gdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuZm9ybWF0XG4gICAgICApXG4gICAgfSxcblxuICAgIHRpbWVJbmRleCgpIHtcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmN1cnJlbnRUZXh0XG4gICAgICBpZiAodGV4dCkge1xuICAgICAgICBjb25zdCB0aW1lID0gdGV4dC5tYXRjaCgvKFtcXFNdK1xccyopJC8pPy5bMV1cbiAgICAgICAgaWYgKHRpbWUpIHtcbiAgICAgICAgICByZXR1cm4gdGV4dC5sZW5ndGggLSB0aW1lLmxlbmd0aFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpIHx8ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHBhcnNlRGF0ZSh2YWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKVxuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbih0aGlzLmlucHV0KVxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbih0aGlzLmlucHV0LCBzZWxlY3Rpb24pKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodmFsdWUpIHtcbiAgICAgIGlmICgrdmFsdWUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB2YWx1ZSlcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkZvY3VzKGZvY3VzKSB7XG4gICAgICB0aGlzLmlucHV0Rm9jdXNlZCA9IGZvY3VzXG4gICAgICBpZiAoZm9jdXMpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3B1cHMoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93RGF0ZSA9IGZhbHNlXG4gICAgICAgIHRoaXMuc2hvd1RpbWUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbk1vdXNlRG93bih0b2dnbGUpIHtcbiAgICAgIGlmICh0b2dnbGUgJiYgKHRoaXMuc2hvd0RhdGUgfHwgdGhpcy5zaG93VGltZSkpIHtcbiAgICAgICAgdGhpcy5zaG93RGF0ZSA9IGZhbHNlXG4gICAgICAgIHRoaXMuc2hvd1RpbWUgPSBmYWxzZVxuICAgICAgfSBlbHNlIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMudXBkYXRlUG9wdXBzKCkpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3QgbW9kZSA9IHRoaXMuZ2V0TW9kZShldmVudClcbiAgICAgIHRoaXMuJHJlZnNbbW9kZV0ub25LZXlEb3duKGV2ZW50KVxuICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgdGhpcy5jbG9zZWRNb2RlID0gbW9kZVxuICAgICAgfSBlbHNlIGlmIChtb2RlICE9PSB0aGlzLmNsb3NlZE1vZGUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3B1cHMobW9kZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0TW9kZShldmVudCA9IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnQgfSA9IGdldFNlbGVjdGlvbih0aGlzLmlucHV0KVxuICAgICAgY29uc3QgeyBob3I6IHN0ZXAgfSA9IGdldEtleU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICByZXR1cm4gdGhpcy50aW1lSW5kZXggPT09IG51bGwgfHwgc3RhcnQgKyBzdGVwIDwgdGhpcy50aW1lSW5kZXhcbiAgICAgICAgPyAnZGF0ZSdcbiAgICAgICAgOiAndGltZSdcbiAgICB9LFxuXG4gICAgdXBkYXRlUG9wdXBzKG1vZGUgPSB0aGlzLmdldE1vZGUoKSkge1xuICAgICAgaWYgKG1vZGUpIHtcbiAgICAgICAgdGhpcy5jbG9zZWRNb2RlID0gbnVsbFxuICAgICAgfVxuICAgICAgdGhpcy5zaG93RGF0ZSA9IG1vZGUgPT09ICdkYXRlJ1xuICAgICAgdGhpcy5zaG93VGltZSA9IG1vZGUgPT09ICd0aW1lJ1xuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWRhdGUtdGltZS1waWNrZXIge1xuICAmX19pbm5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgfVxuXG4gICZfX2lucHV0IHtcbiAgICBmbGV4OiAxO1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgbWluLXdpZHRoOiAxMmVtO1xuICB9XG5cbiAgLmRpdG8tZGF0ZS1waWNrZXIsXG4gIC5kaXRvLXRpbWUtcGlja2VyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tIGVzbGludC1kaXNhYmxlIHZ1ZS9uby10ZW1wbGF0ZS1zaGFkb3cgLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcGFnaW5hdGlvblxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsKFxuICAgIHYtaWY9XCJzaG93VG90YWxcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWlmPVwidG90YWwgPiAwXCJcbiAgICApIHt7IGZpcnN0IH19IOKAkyB7eyBsYXN0IH19IC8ge3sgdG90YWwgfX1cbiAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gICAgdi1pZj1cIm51bVBhZ2VzID4gMVwiXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWZvcj1cImJ1dHRvbiBpbiBidXR0b25zXCJcbiAgICAgIDpjbGFzcz1cImdldEJ1dHRvbkNsYXNzZXMoYnV0dG9uKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJidXR0b24uZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25DbGlja0J1dHRvbihidXR0b24pXCJcbiAgICApXG4gICAgICBzcGFuKFxuICAgICAgICB2LWlmPVwiYnV0dG9uLnRleHRcIlxuICAgICAgKSB7eyBidXR0b24udGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOnBhZ2UnXSxcblxuICBwcm9wczoge1xuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIHBhZ2U6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH0sXG4gICAgcGFnZVNpemU6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxMCB9LFxuICAgIHNob3dUb3RhbDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UHJldjogdHJ1ZSxcbiAgICAgIHNob3dOZXh0OiB0cnVlLFxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZpcnN0KCkge1xuICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplICsgMVxuICAgIH0sXG5cbiAgICBsYXN0KCkge1xuICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuZmlyc3QgKyB0aGlzLnBhZ2VTaXplIC0gMSwgdGhpcy50b3RhbClcbiAgICB9LFxuXG4gICAgbnVtUGFnZXMoKSB7XG4gICAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMudG90YWwgLyB0aGlzLnBhZ2VTaXplKVxuICAgIH0sXG5cbiAgICBidXR0b25zKCkge1xuICAgICAgY29uc3QgeyBzaG93UHJldiwgc2hvd05leHQsIGN1cnJlbnRQYWdlLCBudW1QYWdlcyB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2hvd0xlbmd0aCA9IHNob3dQcmV2ICsgc2hvd05leHQgKyAxXG5cbiAgICAgIGxldCBzdGFydCA9IDFcbiAgICAgIGxldCBlbmQgPSAxXG4gICAgICBpZiAobnVtUGFnZXMgPD0gc2hvd0xlbmd0aCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UGFnZSA8PSBzaG93UHJldiArIDEpIHtcbiAgICAgICAgZW5kID0gc2hvd0xlbmd0aFxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UGFnZSA+PSBudW1QYWdlcyAtIHNob3dOZXh0KSB7XG4gICAgICAgIGVuZCA9IG51bVBhZ2VzXG4gICAgICAgIHN0YXJ0ID0gbnVtUGFnZXMgLSBzaG93TGVuZ3RoICsgMVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnQgPSBjdXJyZW50UGFnZSAtIHNob3dQcmV2XG4gICAgICAgIGVuZCA9IGN1cnJlbnRQYWdlICsgc2hvd05leHRcbiAgICAgIH1cblxuICAgICAgY29uc3QgYnV0dG9ucyA9IFtdXG4gICAgICBidXR0b25zLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgLSAxLFxuICAgICAgICB0eXBlOiAncHJldicsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA8PSAxXG4gICAgICB9KVxuICAgICAgaWYgKHN0YXJ0ID49IDIpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHsgaW5kZXg6IDEsIHRleHQ6IDEgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCA+IDIpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5tYXgoMSwgY3VycmVudFBhZ2UgLSAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLXByZXYnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGFjdGl2ZTogaSA9PT0gY3VycmVudFBhZ2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5taW4obnVtUGFnZXMsIGN1cnJlbnRQYWdlICsgMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1uZXh0J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8PSBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHsgaW5kZXg6IG51bVBhZ2VzLCB0ZXh0OiBudW1QYWdlcyB9KVxuICAgICAgfVxuICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlICsgMSxcbiAgICAgICAgdHlwZTogJ25leHQnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPj0gbnVtUGFnZXNcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBidXR0b25zXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgcGFnZShwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZVxuICAgIH0sXG5cbiAgICBwYWdlU2l6ZSgpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID4gdGhpcy5udW1QYWdlcykge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5udW1QYWdlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpwYWdlJywgdG8pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRCdXR0b25DbGFzc2VzKGJ1dHRvbikge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgJ2RpdG8tc2VsZWN0ZWQnOiBidXR0b24uYWN0aXZlXG4gICAgICB9XG4gICAgICBpZiAoYnV0dG9uLnR5cGUpIHtcbiAgICAgICAgY2xhc3Nlc1tgZGl0by1idXR0b24tJHtidXR0b24udHlwZX1gXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIG9uQ2xpY2tCdXR0b24oYnV0dG9uKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGJ1dHRvbi5pbmRleCAmJlxuICAgICAgICAhYnV0dG9uLmRpc2FibGVkICYmXG4gICAgICAgIGJ1dHRvbi5pbmRleCAhPT0gdGhpcy5jdXJyZW50UGFnZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBidXR0b24uaW5kZXhcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhZ2luYXRpb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgbWFyZ2luOiAwIDAuNWVtO1xuICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICB9XG5cbiAgLmRpdG8tYnV0dG9uIHtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgYWxsIDAuM3MgZWFzZSxcbiAgICAgIGNvbG9yIDBzLFxuICAgICAgYmFja2dyb3VuZCAwcyxcbiAgICAgIGJvcmRlciAwcztcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIHBhZGRpbmc6IDAgMC41ZW07XG5cbiAgICAmLXByZXYsXG4gICAgJi1uZXh0IHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tYXJyb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi1wcmV2OjpiZWZvcmUge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgIH1cblxuICAgICYtZWxsaXBzaXMtcHJldixcbiAgICAmLWVsbGlwc2lzLW5leHQge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tZWxsaXBzaXM7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXI6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tY2hldnJvbnM7XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgICYtZWxsaXBzaXMtcHJldjo6YmVmb3JlIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc3dpdGNoKFxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbilcbiAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICBpbnB1dChcbiAgICAgIDppZD1cImlkXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1tb2RlbD1cImNoZWNrZWRcIlxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgIDpuYW1lPVwibmFtZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICBzcGFuLmRpdG8tc3dpdGNoLWxhYmVsKFxuICAgICAgdi1pZj1cImxhYmVsc1wiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cImNoZWNrZWRcIlxuICAgICAgICBuYW1lPVwiY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy5jaGVja2VkIHx8ICdvbicgfX1cbiAgICAgIHNsb3QoXG4gICAgICAgIHYtZWxzZVxuICAgICAgICBuYW1lPVwidW5jaGVja2VkXCJcbiAgICAgICkge3sgbGFiZWxzLnVuY2hlY2tlZCB8fCAnb2ZmJyB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsczogeyB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrZWQ6IHRoaXMubW9kZWxWYWx1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLiRhdHRycy5jbGFzcyxcbiAgICAgICAge1xuICAgICAgICAgICdkaXRvLWNoZWNrZWQnOiB0aGlzLmNoZWNrZWQsXG4gICAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBsYWJlbHM6IHsgY2hlY2tlZCwgdW5jaGVja2VkIH0gPSB7fSB9ID0gdGhpc1xuICAgICAgLy8gQ2FsY3VsYXRlIGAtLXN3aXRjaC13aWR0aGAgaW4gYHJlbWAsIGJhc2VkIG9uIGxhYmVsIGxlbmd0aC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIGNoZWNrZWQ/Lmxlbmd0aCwgdW5jaGVja2VkPy5sZW5ndGgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zd2l0Y2gtd2lkdGgnOiBsZW5ndGggPyBgJHtsZW5ndGggKiAxLjV9cmVtYCA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IF8sIC4uLmF0dHJpYnV0ZXMgfSA9IHRoaXMuJGF0dHJzXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUobW9kZWxWYWx1ZSkge1xuICAgICAgdGhpcy5jaGVja2VkID0gbW9kZWxWYWx1ZVxuICAgIH0sXG5cbiAgICBjaGVja2VkKGNoZWNrZWQpIHtcbiAgICAgIGlmIChjaGVja2VkICE9PSB0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBjaGVja2VkKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBjaGVja2VkKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXN3aXRjaCB7XG4gIC8vIFVzZSB3aG9sZSBtdWx0aXBsZXMgb2YgYHJlbWAgZm9yIHNpemVzIGFuZCBgcHhgIG1hcmdpbnMvcGFkZGluZyBhbG9uZ1xuICAvLyB3aXRoIGBjYWxjKClgIHRvIGVuZCB1cCB3aXRoIGV2ZW4gcGl4ZWwgc2l6ZXMuXG4gIC0tc3dpdGNoLXdpZHRoOiA0ZW07XG4gIC0tc3dpdGNoLWhlaWdodDogMmVtO1xuICAtLXN3aXRjaC1tYXJnaW46IDJweDtcbiAgLS1zd2l0Y2gtcGFkZGluZzogM3B4O1xuICAtLXN3aXRjaC1zcGVlZDogMzAwbXM7XG4gIC0tbGFiZWwtbWFyZ2luOiAwLjVlbTtcbiAgLS13aWR0aDogY2FsYyh2YXIoLS1zd2l0Y2gtd2lkdGgpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKTtcbiAgLS1oZWlnaHQ6IGNhbGModmFyKC0tc3dpdGNoLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpO1xuICAtLW9mZnNldDogY2FsYyh2YXIoLS13aWR0aCkgLSB2YXIoLS1oZWlnaHQpKTtcblxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KTtcbiAgLy8gVG8gbWFrZSBpbmxpbmUgbGFiZWxzIGFwcGVhciBvbiBjb25zaXN0ZW50IGJhc2VsaW5lOlxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAuZGl0by1zd2l0Y2gtcGFuZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiB2YXIoLS13aWR0aCk7XG4gICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLXBhbmUsXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgdG9wOiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0O1xuICAgIHRyYW5zaXRpb246XG4gICAgICBib3JkZXItY29sb3IgMC4zcyxcbiAgICAgIGJhY2tncm91bmQtY29sb3IgMC4zcztcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgIC0tc2l6ZTogY2FsYyh2YXIoLS1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1wYWRkaW5nKSk7XG5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiB2YXIoLS1zd2l0Y2gtcGFkZGluZyk7XG4gICAgbGVmdDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpO1xuICAgIHdpZHRoOiB2YXIoLS1zaXplKTtcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUpO1xuICAgIGJvcmRlci1yYWRpdXM6IGNhbGModmFyKC0tc2l6ZSkgLyAyKTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tc3dpdGNoLXNwZWVkKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uLFxuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICB9XG5cbiAgJi5kaXRvLWNoZWNrZWQge1xuICAgIGlucHV0IHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgodmFyKC0tb2Zmc2V0KSk7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICAgIGxlZnQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgICByaWdodDogdW5zZXQ7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWRpc2FibGVkIHtcbiAgICBAZXh0ZW5kICVidXR0b24tZGlzYWJsZWQ7XG4gIH1cblxuICAmOmZvY3VzLXdpdGhpbjpub3QoOmhvdmVyKSB7XG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgeyBoIGFzIGNyZWF0ZUVsZW1lbnQsIFRyYW5zaXRpb24gfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5mdW5jdGlvbiBUcmFuc2l0aW9uSGVpZ2h0KHsgZW5hYmxlZCB9LCB7IHNsb3RzIH0pIHtcbiAgcmV0dXJuIGVuYWJsZWRcbiAgICA/IGNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgcHJvcHMsIHNsb3RzKVxuICAgIDogc2xvdHMuZGVmYXVsdCgpXG59XG5cblRyYW5zaXRpb25IZWlnaHQucHJvcHMgPSB7XG4gIGVuYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25IZWlnaHRcblxuY29uc3Qgc2V0U3R5bGUgPSAoZWxlbWVudCwgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpXG5cbmNvbnN0IG5leHRUaW1lb3V0ID0gY2FsbGJhY2sgPT4gc2V0VGltZW91dChjYWxsYmFjaywgMClcblxuLy8gRm9yY2UgcmVwYWludCB0byBtYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyB0cmlnZ2VyZWQgY29ycmVjdGx5LlxuY29uc3QgZm9yY2VSZXBhaW50ID0gZWxlbWVudCA9PiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmhlaWdodFxuXG5jb25zdCBwcm9wcyA9IHtcbiAgbmFtZTogJ2RpdG8taGVpZ2h0JyxcblxuICBvbkFmdGVyRW50ZXIoZWxlbWVudCkge1xuICAgIC8vIEEgdGltZW91dCBiZWZvcmUgc2V0dGluZyBzdHlsZSBpcyBvbmx5IHJlYWxseSBuZWVkZWQgYWZ0ZXIgY2FsbHMgdG9cbiAgICAvLyBgZm9yY2VSZXBhaW50KClgLCBidXQgdXNpbmcgb25lIGhlcmUgdG9vIHByZXNlcnZlcyBleGVjdXRpb24gc2VxdWVuY2Ugc29cbiAgICAvLyB0aGF0IHRoZSBjYWxsIGZyb20gYGVudGVyKClgIGNhbiBuZXZlciBvdXRydW4gdGhlIG9uZSBmcm9tIGBhZnRlckVudGVyKClgXG4gICAgbmV4dFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQ6IG51bGwgfSkpXG4gIH0sXG5cbiAgb25FbnRlcihlbGVtZW50KSB7XG4gICAgLy8gRm9yIHNvbWUgcmVhc29uIHdlJ3JlIGdldHRpbmcgdHdvIGBvbkVudGVyKClgIGNhbGxzIHBlciB0cmFuc2l0aW9uLFxuICAgIC8vIHNvIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBzZWNvbmQgb25lLiBUaGlzIG1pZ2h0IGJlIGxpbmtlZCB0byB0aGUgdXNlXG4gICAgLy8gb2YgYG5leHRUaW1lb3V0KClgLCB3aGljaCBpcyByZXF1aXJlZCB0byBnZXQgdGhlIGNvcnJlY3QgdmFsdWUgZm9yXG4gICAgLy8gYGhlaWdodGAsIGJhc2VkIG9uIGAmLS1sYWJlbC12ZXJ0aWNhbGAgY2FsY3VsYXRpb25zLlxuICAgIGNvbnN0IHsgd2lkdGggfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICBzZXRTdHlsZShlbGVtZW50LCB7XG4gICAgICB3aWR0aCxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgICBoZWlnaHQ6ICdhdXRvJ1xuICAgIH0pXG4gICAgbmV4dFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgeyBoZWlnaHQgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgIHBvc2l0aW9uOiBudWxsLFxuICAgICAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgICAgICBoZWlnaHQ6IDBcbiAgICAgIH0pXG4gICAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pKVxuICAgIH0pXG4gIH0sXG5cbiAgb25MZWF2ZShlbGVtZW50KSB7XG4gICAgY29uc3QgeyBoZWlnaHQgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodCB9KVxuICAgIGZvcmNlUmVwYWludChlbGVtZW50KVxuICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAwIH0pKVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kZHVyYXRpb246IDAuMTVzO1xuXG4uZGl0by1oZWlnaHQtZW50ZXItYWN0aXZlLFxuLmRpdG8taGVpZ2h0LWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IGhlaWdodCAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uZGl0by1oZWlnaHQtZW50ZXItYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBkaXRvLXNsaWRlLWVudGVyICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG59XG5cbi5kaXRvLWhlaWdodC1sZWF2ZS1hY3RpdmUge1xuICBhbmltYXRpb246IGRpdG8tc2xpZGUtbGVhdmUgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbn1cblxuLmRpdG8taGVpZ2h0LWVudGVyLWZyb20sXG4uZGl0by1oZWlnaHQtbGVhdmUtdG8ge1xuICBoZWlnaHQ6IDA7XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgbWFya1JhdywgdXNlU2xvdHMsIENvbW1lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNWTm9kZUNvbnRlbnQodm5vZGUpIHtcbiAgcmV0dXJuIHZub2RlICYmIGFzQXJyYXkodm5vZGUpLnNvbWUodm5vZGUgPT4gdm5vZGUudHlwZSAhPT0gQ29tbWVudClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Nsb3RDb250ZW50KHNsb3QsIHByb3BzID0ge30pIHtcbiAgc2xvdCA9IGlzU3RyaW5nKHNsb3QpID8gdXNlU2xvdHMoKVtzbG90XSA6IHNsb3RcbiAgcmV0dXJuIGhhc1ZOb2RlQ29udGVudChzbG90Py4ocHJvcHMpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmF3KHZhbHVlKSB7XG4gIHJldHVybiBtYXJrUmF3KHsgdmFsdWUgfSlcbn1cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21IYW5kbGVyczogW11cbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIGZvciAoY29uc3QgeyByZW1vdmUgfSBvZiB0aGlzLmRvbUhhbmRsZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgICB0aGlzLmRvbUhhbmRsZXJzID0gW11cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZG9tT24oZWxlbWVudCwgdHlwZSwgaGFuZGxlcikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkRXZlbnRzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBpc09iamVjdCh0eXBlKSA/IHR5cGUgOiB7IFt0eXBlXTogaGFuZGxlciB9XG4gICAgICApXG4gICAgICB0aGlzLmRvbUhhbmRsZXJzLnB1c2gocmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS91bm1vdW50ZWQoKWAgb24gaXRzXG4gICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnRgLCBpZiB0aGUgcGFyZW50IHVzZXMgdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHNjaGVtYUNvbXBvbmVudCwgYWRkKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5wdXNoKHNjaGVtYUNvbXBvbmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMuc3BsaWNlKHNjaGVtYUNvbXBvbmVudHMuaW5kZXhPZihzY2hlbWFDb21wb25lbnQpLCAxKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4vU2NoZW1hUGFyZW50TWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1NjaGVtYVBhcmVudE1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZmxhdE1hcCgoeyBlcnJvcnMgfSkgPT4gZXJyb3JzIHx8IFtdKVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSkpXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52ZXJpZnlBbGwobWF0Y2gpKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5yZXNldFZhbGlkYXRpb24oKSlcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5jbGVhckVycm9ycygpKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzLCBmaXJzdCA9IHRydWUpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBzY2hlbWFDb21wb25lbnQgPT4ge1xuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cywgZmlyc3QpKSB7XG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgICByZXR1cm4gIWZpcnN0XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgVmFsaWRhdG9yTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Q29tbW9uUHJlZml4IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZWxvYWQ6IGZhbHNlLFxuICAgICAgLy8gRWFjaCByb3V0ZS1jb21wb25lbnQgZGVmaW5lcyBhIHN0b3JlIHRoYXQgZ2V0cyBwYXNzZWQgb24gdG8gaXRzXG4gICAgICAvLyBjaGlsZCBjb21wb25lbnRzLCBzbyB0aGV5IGNhbiBzdG9yZSB2YWx1ZXMgaW4gdGhlbSB0aGF0IGxpdmUgYmV5b25kXG4gICAgICAvLyB0aGVpciBsaWZlLWN5Y2xlLiBTZWU6IERpdG9QYW5lLCBTb3VyY2VNaXhpblxuICAgICAgc3RvcmU6IHt9LFxuICAgICAgbG9hZENhY2hlOiB7fSAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgcm91dGVDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJvdXRlTGV2ZWwoKSB7XG4gICAgICBsZXQgbGV2ZWwgPSAwXG4gICAgICBsZXQgcm91dGVDb21wb25lbnQgPSB0aGlzXG4gICAgICB3aGlsZSAoKHJvdXRlQ29tcG9uZW50ID0gcm91dGVDb21wb25lbnQucGFyZW50Um91dGVDb21wb25lbnQpKSB7XG4gICAgICAgIGxldmVsKytcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZXZlbFxuICAgIH0sXG5cbiAgICByb3V0ZVJlY29yZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5tYXRjaGVkW3RoaXMucm91dGVMZXZlbF1cbiAgICB9LFxuXG4gICAgaXNMYXN0Um91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGlzIHJvdXRlciBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSBtYXRjaGVkW21hdGNoZWQubGVuZ3RoIC0gMV1cbiAgICB9LFxuXG4gICAgaXNMYXN0VW5uZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJvdXRlIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlIHRoYXRcbiAgICAgIC8vIG5lZWRzIGl0cyBvd24gcm91dGVyLXZpZXcgKD0gaXMgbm90IG5lc3RlZCkuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICBmb3IgKGxldCBpID0gbWF0Y2hlZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBtYXRjaGVkW2ldXG4gICAgICAgIGlmICghcmVjb3JkLm1ldGEubmVzdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IHJlY29yZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNOZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEubmVzdGVkXG4gICAgfSxcblxuICAgIGlzVmlldygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQ/Lm1ldGFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJvdXRlUGF0aCh0aGlzLnJvdXRlUmVjb3JkPy5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgaXNNdXRhdGluZygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVSb3V0ZVVwZGF0ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXM/LmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzPy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdXRhdGluZykge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgocmVjb3JkUGF0aCkge1xuICAgICAgLy8gTWFwcyB0aGUgcm91dGUncyBhY3R1YWwgcGF0aCB0byB0aGUgbWF0Y2hlZCByb3V0ZXMgYnkgY291bnRpbmcgaXRzXG4gICAgICAvLyBwYXJ0cyBzZXBhcmF0ZWQgYnkgJy8nLCBzcGxpdHRpbmcgdGhlIHBhdGggaW50byB0aGUgbWFwcGVkIHBhcnRzXG4gICAgICAvLyBjb250YWluaW5nIGFjdHVhbCBwYXJhbWV0ZXJzLlxuICAgICAgY29uc3QgeyBwYXRoIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHJlY29yZFBhdGhcbiAgICAgICAgPyBwYXRoXG4gICAgICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAgICAgLnNsaWNlKDAsIHJlY29yZFBhdGguc3BsaXQoJy8nKS5sZW5ndGgpXG4gICAgICAgICAgICAuam9pbignLycpXG4gICAgICAgIDogcGF0aFxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHtcbiAgICAgIC8vIFRoZSByb3V0ZSBwYXRoIGlzIHRoZSBwYXRoIHVwIHRvIHRoZSBmaXJzdCAvIChleGNsdWRpbmcgdGhlIGluaXRpYWwgLyk6XG4gICAgICBjb25zdCByb290UGF0aCA9IHRoaXMucGF0aC5tYXRjaCgvXihcXC9bXi9dKikvKVsxXVxuICAgICAgcmV0dXJuICFnZXRDb21tb25QcmVmaXgodG8ucGF0aCwgZnJvbS5wYXRoKS5zdGFydHNXaXRoKHJvb3RQYXRoKVxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRlbXBsYXRlKFxuICB2LWlmPVwidXNlclwiXG4pXG4gIC8vLSBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4gIC8vLSBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbiAgLy8tIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuICAvLy0gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG4gIFJvdXRlclZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gICAgOmtleT1cIm5hbWVcIlxuICApXG4gIC5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlclNjaGVtYSh2aWV3U2NoZW1hKVwiXG4gICAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4gIClcbiAgICBEaXRvU2NoZW1hKFxuICAgICAgOmtleT1cIm5hbWVcIlxuICAgICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICAgIHBhZGRpbmc9XCJyb290XCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICBzY3JvbGxhYmxlXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCB7XG4gIGlzU2luZ2xlQ29tcG9uZW50VmlldyxcbiAgc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudFxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9WaWV3Jywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIC8vIFJlZGlyZWN0ICRzb3VyY2VDb21wb25lbnQgYW5kICRyZXNvdXJjZUNvbXBvbmVudCB0byB0aGUgbWFpbiBjb21wb25lbnQ6XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8uc291cmNlQ29tcG9uZW50IHx8IG51bGwsXG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8ucmVzb3VyY2VDb21wb25lbnQgfHwgbnVsbFxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBVcGRhdGVkIGZyb20gTG9hZGluZ01peGluIHRocm91Z2ggYHNldExvYWRpbmcoaXNMb2FkaW5nKWA6XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgLy8gTk9URTogRGF0YSBpcyBzaGFyZWQgYWNyb3NzIGFsbCB2aWV3cyBiZWNhdXNlIHRoZSByb3V0ZXIgcmVjeWNsZXMgdGhlXG4gICAgICAvLyBEaXRvVmlldyBjb21wb25lbnQuXG4gICAgICBkYXRhOiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEuc2NoZW1hXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICBpc1ZpZXcoKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudFZpZXcoKSB7XG4gICAgICByZXR1cm4gaXNTaW5nbGVDb21wb25lbnRWaWV3KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBtYWluQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uZ2V0Q29tcG9uZW50QnlEYXRhUGF0aCh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHZpZXdTY2hlbWEoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudCwgLi4uc2NoZW1hIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgLy8gVHJhbnNsYXRlIHNpbmdsZS1jb21wb25lbnQgc2NoZW1hcyBpbnRvIG11bHRpLWNvbXBvbmVudCBzY2hlbWFzLFxuICAgICAgLy8gc28gdGhleSBjYW4gYmUgcmVuZGVyZWQgZGlyZWN0bHkgdGhyb3VnaCBEaXRvU2NoZW1hIGFsc286XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICAgIFtzY2hlbWEubmFtZV06IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBzY2hlbWEubmFtZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgLi4uY29tcG9uZW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc2NoZW1hXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIHJldHVybiBzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50KHRoaXMudmlld1NjaGVtYSwgaGFzUmVzb3VyY2UpXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlOiB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMzM5MyNpc3N1ZWNvbW1lbnQtMTE1ODQ3MDE0OVxuICAgICAgZmx1c2g6ICdwb3N0JyxcbiAgICAgIGhhbmRsZXIodG8sIGZyb20pIHtcbiAgICAgICAgLy8gU2VlIGlmIHRoZSByb3V0ZSBjaGFuZ2VzIGNvbXBsZXRlbHksIGFuZCBjbGVhciB0aGUgZGF0YSBpZiBpdCBkb2VzLlxuICAgICAgICBpZiAodGhpcy5pc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkpIHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5kYXRhID0ge31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICAvLyBMaXN0cyBpbnNpZGUgc2luZ2xlLWNvbXBvbmVudCB2aWV3cyB1c2UgdGhlIHZpZXcncyBwYXRoIGZvciBzdWItcGF0aHM6XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB0aGlzLnBhdGhcbiAgICAgICAgOiBgJHt0aGlzLnBhdGh9LyR7cGF0aH1gXG4gICAgfSxcblxuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyB1bnJlZkVsZW1lbnQgfSBmcm9tICdAdnVldXNlL2NvcmUnO1xuaW1wb3J0IHsgY3JlYXRlRm9jdXNUcmFwIH0gZnJvbSAnZm9jdXMtdHJhcCc7XG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQsIHJlZiwgd2F0Y2gsIG9uU2NvcGVEaXNwb3NlLCBoIH0gZnJvbSAndnVlJztcblxuY29uc3QgVXNlRm9jdXNUcmFwID0gLyogQF9fUFVSRV9fICovIC8qICNfX1BVUkVfXyAqLyBkZWZpbmVDb21wb25lbnQoe1xuICBuYW1lOiBcIlVzZUZvY3VzVHJhcFwiLFxuICBwcm9wczogW1wiYXNcIiwgXCJvcHRpb25zXCJdLFxuICBzZXR1cChwcm9wcywgeyBzbG90cyB9KSB7XG4gICAgbGV0IHRyYXA7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmVmKCk7XG4gICAgY29uc3QgYWN0aXZhdGUgPSAoKSA9PiB0cmFwICYmIHRyYXAuYWN0aXZhdGUoKTtcbiAgICBjb25zdCBkZWFjdGl2YXRlID0gKCkgPT4gdHJhcCAmJiB0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICB3YXRjaChcbiAgICAgICgpID0+IHVucmVmRWxlbWVudCh0YXJnZXQpLFxuICAgICAgKGVsKSA9PiB7XG4gICAgICAgIGlmICghZWwpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0cmFwID0gY3JlYXRlRm9jdXNUcmFwKGVsLCBwcm9wcy5vcHRpb25zIHx8IHt9KTtcbiAgICAgICAgYWN0aXZhdGUoKTtcbiAgICAgIH0sXG4gICAgICB7IGZsdXNoOiBcInBvc3RcIiB9XG4gICAgKTtcbiAgICBvblNjb3BlRGlzcG9zZSgoKSA9PiBkZWFjdGl2YXRlKCkpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoc2xvdHMuZGVmYXVsdClcbiAgICAgICAgcmV0dXJuIGgocHJvcHMuYXMgfHwgXCJkaXZcIiwgeyByZWY6IHRhcmdldCB9LCBzbG90cy5kZWZhdWx0KCkpO1xuICAgIH07XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBVc2VGb2N1c1RyYXAgfTtcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kaWFsb2coXG4gIHJlZj1cImRpYWxvZ1wiXG4gIHJvbGU9XCJkaWFsb2dcIlxuICBhcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXG4gIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgOnN0eWxlPVwieyAnLS13aWR0aCc6IHNldHRpbmdzLndpZHRoID8gYCR7c2V0dGluZ3Mud2lkdGh9cHhgIDogbnVsbCB9XCJcbiAgQG1vdXNldXA9XCJvbk1vdXNlVXBcIlxuKVxuICBVc2VGb2N1c1RyYXAuZGl0by1kaWFsb2dfX2ZvY3VzLXRyYXAoOm9wdGlvbnM9XCJmb2N1c1RyYXBPcHRpb25zXCIpXG4gICAgZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgICBAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIlxuICAgIClcbiAgICAgIC8vIEFkZCBhbiBpbnZpc2libGUgYnV0dG9uIHRoYXQgcHJldmVudHMgdGhlIGNsZWFyYWJsZSBidXR0b25zIGZyb20gYmVpbmdcbiAgICAgIC8vIHByZXNzZWQgd2hlbiB0aGUgdXNlciBwcmVzc2VzIHRoZSBFbnRlciBrZXk6XG4gICAgICBidXR0b24oXG4gICAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIClcbiAgICAgIERpdG9TY2hlbWEoXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgICAgICBwYWRkaW5nPVwicm9vdFwiXG4gICAgICAgIHNjcm9sbGFibGVcbiAgICAgICAgZ2VuZXJhdGVMYWJlbHNcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgICAgRGl0b0J1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IFVzZUZvY3VzVHJhcCB9IGZyb20gJ0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZUZvY3VzVHJhcC9jb21wb25lbnQnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0RpYWxvZycsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFVzZUZvY3VzVHJhcCB9LFxuICBlbWl0czogWydyZW1vdmUnXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzZXR0aW5nczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgd2lkdGg6IDQ4MCxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBNYWtlIHN1cmUgZGlhbG9nIGRhdGEgY29udGFpbnMgYWxsIHRoZSBleHBlY3RlZCBrZXlzXG4gICAgY29uc3QgZGlhbG9nRGF0YSA9IGNsb25lKHRoaXMuZGF0YSlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBkaWFsb2dEYXRhKSkge1xuICAgICAgICBkaWFsb2dEYXRhW2tleV0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkaWFsb2dEYXRhXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2RpYWxvZycsXG4gICAgICAgIGNvbXBvbmVudHM6IHRoaXMuY29tcG9uZW50c1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLmJ1dHRvbnMpKS5tYXAoXG4gICAgICAgICAgLy8gUHJvY2VzcyB0aGUgYnV0dG9uIHNjaGVtYXMgdG8gYWRkIGRlZmF1bHQgY2xpY2sgZXZlbnRzXG4gICAgICAgICAgLy8gZm9yIGJvdGggJ3N1Ym1pdCcgYW5kICdjYW5jZWwnIGJ1dHRvbnM6XG4gICAgICAgICAgKFtrZXksIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdjYW5jZWwnICYmICFzY2hlbWEuZXZlbnRzKSB7XG4gICAgICAgICAgICAgIHNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZm9jdXNUcmFwT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgICAgZmFsbGJhY2tGb2N1czogKCkgPT4gdGhpcy4kcmVmcy5kaWFsb2csXG4gICAgICAgIG9uRGVhY3RpdmF0ZTogdGhpcy5jYW5jZWxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGFzQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmJ1dHRvblNjaGVtYXMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgaGFzQ2FuY2VsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5idXR0b25TY2hlbWFzLmNhbmNlbFxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuZG9tT24od2luZG93LCB7XG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoKHRoaXMuaGFzQ2FuY2VsIHx8ICF0aGlzLmhhc0J1dHRvbnMpICYmIGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgncmVtb3ZlJylcbiAgICB9LFxuXG4gICAgcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICB0aGlzLnJlbW92ZSgpXG4gICAgfSxcblxuICAgIHJlamVjdCh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlamVjdCh2YWx1ZSlcbiAgICAgIHRoaXMucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgLy8gV2hlbiBjYW5jZWxsaW5nLCByZXNvbHZlIGFzIGB1bmRlZmluZWRgIHNvIHdlIGNhbiBoYXZlIGRpYWxvZ3NcbiAgICAgIC8vIHJldHVybmluZyBudWxsIGFzIGEgZGVmaW5lZCB2YWx1ZSBhcyB3ZWxsLlxuICAgICAgdGhpcy5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICB9LFxuXG4gICAgY2xvc2UoKSB7XG4gICAgICB0aGlzLmNhbmNlbCgpXG4gICAgfSxcblxuICAgIG9uTW91c2VVcCgpIHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLmNsaWNrVG9DbG9zZSkge1xuICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kaWFsb2cge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGluc2V0OiAwO1xuICB6LWluZGV4OiAkei1pbmRleC1kaWFsb2c7XG4gIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmc7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAvLyBQcmV2ZW50IHNjcm9sbGluZyBvZiB0aGUgcGFnZSBiZWhpbmQgdGhlIGRpYWxvZzpcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpO1xuXG4gICZfX2ZvY3VzLXRyYXAge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgfVxuXG4gIC8vIFRPRE86IGAmX19pbm5lcmBcbiAgZm9ybSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLCA0ODBweCk7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICBib3gtc2hhZG93OiAwIDIwcHggNjBweCAtMnB4IHJnYmEoMjcsIDMzLCA1OCwgMC40KTtcbiAgfVxufVxuXG4uZGl0by1kaWFsb2ctZW50ZXItYWN0aXZlLFxuLmRpdG8tZGlhbG9nLWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXM7XG5cbiAgZm9ybSB7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMjVzO1xuICB9XG59XG5cbi5kaXRvLWRpYWxvZy1lbnRlci1mcm9tLFxuLmRpdG8tZGlhbG9nLWxlYXZlLXRvIHtcbiAgb3BhY2l0eTogMDtcblxuICBmb3JtIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXJvb3QoXG4gIDpkYXRhLWFnZW50LWJyb3dzZXI9XCJhcHBTdGF0ZS5hZ2VudC5icm93c2VyXCJcbiAgOmRhdGEtYWdlbnQtcGxhdGZvcm09XCJhcHBTdGF0ZS5hZ2VudC5wbGF0Zm9ybVwiXG4gIDpkYXRhLWFnZW50LXZlcnNpb249XCJhcHBTdGF0ZS5hZ2VudC52ZXJzaW9uTnVtYmVyXCJcbilcbiAgVHJhbnNpdGlvbihuYW1lPVwiZGl0by1kcmFnXCIpXG4gICAgLmRpdG8tZHJhZy1vdmVybGF5KFxuICAgICAgdi1pZj1cImlzRHJhZ2dpbmdGaWxlc1wiXG4gICAgKVxuICBUcmFuc2l0aW9uR3JvdXAobmFtZT1cImRpdG8tZGlhbG9nXCIpXG4gICAgRGl0b0RpYWxvZyhcbiAgICAgIHYtZm9yPVwiKGRpYWxvZywga2V5KSBpbiBkaWFsb2dzXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOmNvbXBvbmVudHM9XCJkaWFsb2cuY29tcG9uZW50c1wiXG4gICAgICA6YnV0dG9ucz1cImRpYWxvZy5idXR0b25zXCJcbiAgICAgIDpwcm9taXNlPVwiZGlhbG9nLnByb21pc2VcIlxuICAgICAgOmRhdGE9XCJkaWFsb2cuZGF0YVwiXG4gICAgICA6c2V0dGluZ3M9XCJkaWFsb2cuc2V0dGluZ3NcIlxuICAgICAgQHJlbW92ZT1cInJlbW92ZURpYWxvZyhrZXkpXCJcbiAgICApXG4gIERpdG9OYXZpZ2F0aW9uXG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgICB2LXJlc2l6ZT1cIm9uUmVzaXplUGFnZVwiXG4gICAgOmNsYXNzPVwicGFnZUNsYXNzZXNcIlxuICApXG4gICAgRGl0b0hlYWRlcihcbiAgICAgIDpzcGlubmVyPVwib3B0aW9ucy5zcGlubmVyXCJcbiAgICAgIDppc0xvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgIClcbiAgICBSb3V0ZXJWaWV3XG4gIERpdG9TaWRlYmFyXG4gICAgRGl0b0FjY291bnQoXG4gICAgICB2LWlmPVwidXNlclwiXG4gICAgKVxuICAgIGEuZGl0by1sb2dpbihcbiAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgQGNsaWNrPVwicm9vdENvbXBvbmVudC5sb2dpbigpXCJcbiAgICApXG4gICAgICBzcGFuIExvZ2luXG4gIERpdG9Ob3RpZmljYXRpb25zKHJlZj1cIm5vdGlmaWNhdGlvbnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZWxlZ2F0ZSBhcyB0aXBweURlbGVnYXRlIH0gZnJvbSAndGlwcHkuanMnXG5pbXBvcnQgeyBtYXBDb25jdXJyZW50bHkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgRGl0b1VzZXIgZnJvbSAnLi4vRGl0b1VzZXIuanMnXG5pbXBvcnQgRGl0b1ZpZXcgZnJvbSAnLi4vY29tcG9uZW50cy9EaXRvVmlldy52dWUnXG5pbXBvcnQgRGl0b0RpYWxvZyBmcm9tICcuL0RpdG9EaWFsb2cudnVlJ1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1ZpZXcsXG4gIHJlc29sdmVWaWV3cyxcbiAgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHNcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Sb290Jywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgRGl0b0RpYWxvZyB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR2aWV3czogKCkgPT4gdGhpcy5yZXNvbHZlZFZpZXdzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgdW5yZXNvbHZlZFZpZXdzOiB7IHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uLCBQcm9taXNlXSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBvcHRpb25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzb2x2ZWRWaWV3czoge30sXG4gICAgICByZW1vdmVSb3V0ZXM6IG51bGwsXG4gICAgICBkaWFsb2dzOiB7fSxcbiAgICAgIHBhZ2VXaWR0aDogMCxcbiAgICAgIGxvYWRpbmdDb3VudDogMCxcbiAgICAgIGFsbG93TG9naW46IGZhbHNlLFxuICAgICAgaXNEcmFnZ2luZ0ZpbGVzOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc01vdW50ZWQgJiYgdGhpcy4kcmVmcy5ub3RpZmljYXRpb25zXG4gICAgfSxcblxuICAgIGlzTG9hZGluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdDb3VudCA+IDBcbiAgICB9LFxuXG4gICAgcGFnZUNsYXNzZXMoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1wYWdlJ1xuICAgICAgLy8gTk9URTogS2VlcCBzeW5jZWQgd2l0aCAkY29udGVudC13aWR0aCBpbiBTQ1NTOlxuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gOTAwXG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLmFwcFN0YXRlLnBhZ2VDbGFzcyxcbiAgICAgICAge1xuICAgICAgICAgIFtgJHtwcmVmaXh9LS13aWR0aC04MGBdOiB0aGlzLnBhZ2VXaWR0aCA8PSBjb250ZW50V2lkdGggKiAwLjgsXG4gICAgICAgICAgW2Ake3ByZWZpeH0tLXdpZHRoLTYwYF06IHRoaXMucGFnZVdpZHRoIDw9IGNvbnRlbnRXaWR0aCAqIDAuNlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5hcHBTdGF0ZS50aXRsZSA9IGRvY3VtZW50LnRpdGxlIHx8ICdEaXRvLmpzIEFkbWluJ1xuICAgIC8vIFdpdGggaG90LXJlbG9hZGluZywgaXQgbG9va3MgbGlrZSBkZXN0cm95ZWQgaG9va3MgYXJlbid0IGFsd2F5cyBjYWxsZWRcbiAgICAvLyBmb3Igcm91dGUgY29tcG9uZW50cyBzbyByZXNldCB0aGUgYXJyYXkgb2YgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGluc3RlYWQuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMgPSBbXVxuICB9LFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5zZXR1cERyYWdBbmREcm9wKClcblxuICAgIHRpcHB5RGVsZWdhdGUodGhpcy4kZWwsIHtcbiAgICAgIHRhcmdldDogJy5kaXRvLWluZm8nLFxuICAgICAgdGhlbWU6ICdpbmZvJyxcbiAgICAgIGFuaW1hdGlvbjogJ3NoaWZ0LWF3YXktc3VidGxlJyxcbiAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgZGVsYXk6IDI1MCxcbiAgICAgIHpJbmRleDogMSxcbiAgICAgIGFwcGVuZFRvOiBub2RlID0+IG5vZGUuY2xvc2VzdCgnLmRpdG8tcGFuZScpLFxuICAgICAgb25TaG93OiBpbnN0YW5jZSA9PiBpbnN0YW5jZS5zZXRDb250ZW50KGluc3RhbmNlLnJlZmVyZW5jZS5kYXRhc2V0LmluZm8pXG4gICAgfSlcblxuICAgIC8vIENsZWFyIHRoZSBsYWJlbCBtYXJrZWQgYXMgYWN0aXZlIG9uIGFsbCBtb3VzZSBhbmQga2V5Ym9hcmQgZXZlbnRzLCBleGNlcHRcbiAgICAvLyB0aGUgb25lcyB0aGF0IERpdG9MYWJlbCBpdHNlbGYgaW50ZXJjZXB0cy5cbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICBjbGljazogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5jbG9zZXN0KCcuZGl0by1sYWJlbCcpKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdUYWInKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gZmFsc2VcbiAgICAgIGlmIChhd2FpdCB0aGlzLmZldGNoVXNlcigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgfVxuICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0dXBEcmFnQW5kRHJvcCgpIHtcbiAgICAgIC8vIFRoaXMgY29kZSBvbmx5IGhhcHBlbnMgdGhlIHZpc3VhbCBlZmZlY3RzIGFyb3VuZCBkcmFnZ2luZyBhbmQgZHJvcHBpbmdcbiAgICAgIC8vIGZpbGVzIGludG8gYSBgRGl0b1R5cGVVcGxvYWRgIGNvbXBvbmVudC4gVGhlIGFjdHVhbCB1cGxvYWRpbmcgaXNcbiAgICAgIC8vIGhhbmRsZWQgYnkgdGhlIGBEaXRvVHlwZVVwbG9hZGAgY29tcG9uZW50IGl0c2VsZi5cblxuICAgICAgbGV0IGRyYWdDb3VudCA9IDBcbiAgICAgIGxldCB1cGxvYWRzID0gW11cblxuICAgICAgY29uc3QgdG9nZ2xlRHJvcFRhcmdldENsYXNzID0gZW5hYmxlZCA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgdXBsb2FkIG9mIHVwbG9hZHMpIHtcbiAgICAgICAgICB1cGxvYWRcbiAgICAgICAgICAgIC5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKVxuICAgICAgICAgICAgLmNsYXNzTGlzdC50b2dnbGUoJ2RpdG8tZHJvcC10YXJnZXQnLCBlbmFibGVkKVxuICAgICAgICB9XG4gICAgICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgICAgIHVwbG9hZHMgPSBbXVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldERyYWdnaW5nRmlsZXMgPSBlbmFibGVkID0+IHtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nRmlsZXMgPSBlbmFibGVkXG4gICAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgICAgdG9nZ2xlRHJvcFRhcmdldENsYXNzKHRydWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0b2dnbGVEcm9wVGFyZ2V0Q2xhc3MoZmFsc2UpLCAxNTApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBkcmFnZW50ZXI6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoIWRyYWdDb3VudCAmJiBldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIHVwbG9hZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGl0by11cGxvYWQnKVxuICAgICAgICAgICAgY29uc3QgaGFzVXBsb2FkcyA9IHVwbG9hZHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSBoYXNVcGxvYWRzID8gJ2NvcHknIDogJ25vbmUnXG4gICAgICAgICAgICBpZiAoaGFzVXBsb2Fkcykge1xuICAgICAgICAgICAgICBzZXREcmFnZ2luZ0ZpbGVzKHRydWUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBkcmFnQ291bnQrK1xuICAgICAgICB9LFxuXG4gICAgICAgIGRyYWdsZWF2ZTogZXZlbnQgPT4ge1xuICAgICAgICAgIGRyYWdDb3VudC0tXG4gICAgICAgICAgaWYgKCFkcmFnQ291bnQgJiYgZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICBzZXREcmFnZ2luZ0ZpbGVzKGZhbHNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBkcmFnb3ZlcjogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbkRyb3AgPSBldmVudC50YXJnZXQuY2xvc2VzdChcbiAgICAgICAgICAgICAgJy5kaXRvLWNvbnRhaW5lcjpoYXMoLmRpdG8tdXBsb2FkKSdcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gY2FuRHJvcCA/ICdjb3B5JyA6ICdub25lJ1xuICAgICAgICAgICAgaWYgKCFjYW5Ecm9wKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZHJvcDogZXZlbnQgPT4ge1xuICAgICAgICAgIGRyYWdDb3VudCA9IDBcbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICBzZXREcmFnZ2luZ0ZpbGVzKGZhbHNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQsIGVycm9yIH0gPSB7fSkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLm5vdGlmeSh7IHR5cGUsIHRpdGxlLCB0ZXh0LCBlcnJvciB9KVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZGVzdHJveUFsbCgpXG4gICAgfSxcblxuICAgIHJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMubG9hZGluZ0NvdW50ICs9IGlzTG9hZGluZyA/IDEgOiAtMVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHsgY29tcG9uZW50cywgYnV0dG9ucywgZGF0YSwgc2V0dGluZ3MgfSkge1xuICAgICAgLy8gU2hvd3MgYSBkaXRvLWRpYWxvZyBjb21wb25lbnQgYW5kIHdyYXBzIGl0IGluIGEgcHJvbWlzZSBzbyB0aGF0IHRoZVxuICAgICAgLy8gYnV0dG9ucyBpbiB0aGUgZGlhbG9nIGNhbiB1c2UgYGRpYWxvZy5yZXNvbHZlKClgIGFuZCBgZGlhbG9nLnJlamVjdCgpYFxuICAgICAgLy8gdG8gY2xvc2UgdGhlIG1vZGFsIGRpYWxvZyBhbmQgcmVzb2x2ZSAvIHJlamVjdCB0aGUgcHJvbWlzZSBhdCBvbmNlLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvclxuICAgICAgICBhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgLy8gUHJvY2VzcyBjb21wb25lbnRzIHRvIHJlc29sdmUgYXN5bmMgc2NoZW1hcy5cbiAgICAgICAgICBjb25zdCByb3V0ZXMgPSBbXVxuICAgICAgICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKFxuICAgICAgICAgICAgdGhpcy5hcGksXG4gICAgICAgICAgICB7IHR5cGU6ICdkaWFsb2cnLCBjb21wb25lbnRzIH0sXG4gICAgICAgICAgICByb3V0ZXMsXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChyb3V0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnRGlhbG9ncyBkbyBub3Qgc3VwcG9ydCBjb21wb25lbnRzIHRoYXQgcHJvZHVjZSByb3V0ZXMnXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGtleSA9IGBkaWFsb2ctJHsrK2RpYWxvZ0lkfWBcbiAgICAgICAgICB0aGlzLmRpYWxvZ3Nba2V5XSA9IHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgICBidXR0b25zLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHNldHRpbmdzLFxuICAgICAgICAgICAgcHJvbWlzZTogeyByZXNvbHZlLCByZWplY3QgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICByZW1vdmVEaWFsb2coa2V5KSB7XG4gICAgICBkZWxldGUgdGhpcy5kaWFsb2dzW2tleV1cbiAgICB9LFxuXG4gICAgYXN5bmMgbG9naW4oKSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFkZGl0aW9uYWxDb21wb25lbnRzLFxuICAgICAgICByZWRpcmVjdEFmdGVyTG9naW5cbiAgICAgIH0gPSB0aGlzLm9wdGlvbnMubG9naW4gfHwge31cbiAgICAgIGNvbnN0IGxvZ2luRGF0YSA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICB1c2VybmFtZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbENvbXBvbmVudHNcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge1xuICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICB0ZXh0OiAnQ2FuY2VsJ1xuICAgICAgICAgICAgLy8gTk9URTogVGhlIGNsaWNrIGV2ZW50IGlzIGFkZGVkIGluIERpdG9EaWFsb2cuYnV0dG9uU2NoZW1hcygpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGxvZ2luOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgIHRleHQ6ICdMb2dpbidcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZiAobG9naW5EYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5sb2dpbixcbiAgICAgICAgICAgIGRhdGE6IGxvZ2luRGF0YSxcbiAgICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAocmVkaXJlY3RBZnRlckxvZ2luKSB7XG4gICAgICAgICAgICBsb2NhdGlvbi5yZXBsYWNlKHJlZGlyZWN0QWZ0ZXJMb2dpbilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRVc2VyKHJlc3BvbnNlLmRhdGEudXNlcilcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gZXJyLnJlc3BvbnNlPy5kYXRhPy5lcnJvciB8fCBlcnJcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICAgIHRleHQ6IGVycm9yXG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLmxvZ2luKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZUhvbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSgnLycpXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ291dCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ291dCxcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zZXRVc2VyKG51bGwpXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVXNlcigpIHtcbiAgICAgIGxldCB1c2VyID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMuc2Vzc2lvbixcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICB1c2VyID0gcmVzcG9uc2UuZGF0YS51c2VyIHx8IG51bGxcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3IgfHwgZXJyXG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgIHRleHQ6IGVycm9yXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICB0aGlzLnNldFVzZXIodXNlcilcbiAgICAgIHJldHVybiB1c2VyXG4gICAgfSxcblxuICAgIHNldFVzZXIodXNlcikge1xuICAgICAgdGhpcy5hcHBTdGF0ZS51c2VyID0gKFxuICAgICAgICB1c2VyICYmXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih1c2VyLCBEaXRvVXNlci5wcm90b3R5cGUpXG4gICAgICApXG4gICAgICAvLyBDbGVhciByZXNvbHZlZCB2aWV3cyB3aGVuIHVzZXIgaXMgbG9nZ2VkIG91dC5cbiAgICAgIGlmICghdXNlcikge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSB7fVxuICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVuc3VyZVVzZXIoKSB7XG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmZldGNoVXNlcigpKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzb2x2ZVZpZXdzKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0gYXdhaXQgcmVzb2x2ZVZpZXdzKHRoaXMudW5yZXNvbHZlZFZpZXdzKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFlcnJvci5yZXF1ZXN0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgICAvLyBDb2xsZWN0IGFsbCByb3V0ZXMgZnJvbSB0aGUgcm9vdCBzY2hlbWEgY29tcG9uZW50c1xuICAgICAgY29uc3Qgcm91dGVzID0gYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzLnJlc29sdmVkVmlld3MpLFxuICAgICAgICAoW25hbWUsIHNjaGVtYV0pID0+IHByb2Nlc3NWaWV3KERpdG9WaWV3LCB0aGlzLmFwaSwgc2NoZW1hLCBuYW1lKVxuICAgICAgKVxuICAgICAgLy8gTm93IHRoYXQgdGhlIHJvdXRlcyBhcmUgbG9hZGVkLCByZXBsYWNlIGFsbCBleGlzdGluZyByb3V0ZXMgd2l0aCB0aGVcbiAgICAgIC8vIG5ldyByb3V0ZXMsIGFuZCByZXN0b3JlIHRoZSBjdXJyZW50IHBhdGguXG4gICAgICBjb25zdCB7IGZ1bGxQYXRoIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgdGhpcy5yZW1vdmVSb3V0ZXM/LigpXG4gICAgICB0aGlzLnJlbW92ZVJvdXRlcyA9IGFkZFJvdXRlcyh0aGlzLiRyb3V0ZXIsIFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdyb290JyxcbiAgICAgICAgICBwYXRoOiAnLycsXG4gICAgICAgICAgY29tcG9uZW50czoge31cbiAgICAgICAgfSxcbiAgICAgICAgLi4ucm91dGVzLmZsYXQoKVxuICAgICAgXSlcbiAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKGZ1bGxQYXRoKVxuICAgIH0sXG5cbiAgICBvblJlc2l6ZVBhZ2UoeyBjb250ZW50UmVjdDogeyB3aWR0aCB9IH0pIHtcbiAgICAgIHRoaXMucGFnZVdpZHRoID0gd2lkdGhcbiAgICB9XG4gIH1cbn0pXG5cbmxldCBkaWFsb2dJZCA9IDBcblxuZnVuY3Rpb24gYWRkUm91dGVzKHJvdXRlciwgcm91dGVzKSB7XG4gIGNvbnN0IHJlbW92ZXJzID0gW11cbiAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICBjb25zdCByZW1vdmUgPSByb3V0ZXIuYWRkUm91dGUocm91dGUpXG4gICAgcmVtb3ZlcnMucHVzaChyZW1vdmUpXG4gIH1cblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgcmVtb3ZlIG9mIHJlbW92ZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL3N0eWxlJztcblxuLmRpdG8tYXBwLFxuLmRpdG8tcm9vdCB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5kaXRvLXBhZ2Uge1xuICAtLW1heC1jb250ZW50LXdpZHRoOiAjeyRjb250ZW50LXdpZHRofTtcbiAgLS1tYXgtcGFnZS13aWR0aDogY2FsYyh2YXIoLS1tYXgtY29udGVudC13aWR0aCkgKyAyICogI3skY29udGVudC1wYWRkaW5nfSk7XG5cbiAgZmxleDogMCAxIHZhcigtLW1heC1wYWdlLXdpZHRoKTtcbiAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgbWluLXdpZHRoOiAwJTtcbiAgbWF4LXdpZHRoOiB2YXIoLS1tYXgtcGFnZS13aWR0aCk7XG4gIG92ZXJmbG93OiB2aXNpYmxlOyAvLyBGb3IgLmRpdG8taGVhZGVyIGZ1bGwtd2lkdGggYmFja2dyb3VuZC5cblxuICAmLS13aWRlIHtcbiAgICAtLW1heC1jb250ZW50LXdpZHRoOiAjeyRjb250ZW50LXdpZHRoLXdpZGV9O1xuICB9XG59XG5cbi5kaXRvLWFjY291bnQsXG4uZGl0by1sb2dpbiB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmRpdG8tZHJhZy1vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6ICR6LWluZGV4LWRyYWctb3ZlcmxheTtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpO1xufVxuXG4uZGl0by1kcm9wLXRhcmdldCB7XG4gIC0tc2hhZG93LWFscGhhOiAwLjI1O1xuXG4gIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICB6LWluZGV4OiAkei1pbmRleC1kcmFnLW92ZXJsYXkgKyAxO1xuICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgNHB4IDhweCByZ2JhKDAsIDAsIDAsIHZhcigtLXNoYWRvdy1hbHBoYSkpKTtcbn1cblxuLmRpdG8tZHJhZy1lbnRlci1hY3RpdmUsXG4uZGl0by1kcmFnLWxlYXZlLWFjdGl2ZSB7XG4gICRkdXJhdGlvbjogMC4xNXM7XG5cbiAgdHJhbnNpdGlvbjpcbiAgICBvcGFjaXR5ICRkdXJhdGlvbixcbiAgICBiYWNrZHJvcC1maWx0ZXIgJGR1cmF0aW9uO1xuXG4gIH4gKiAuZGl0by1kcm9wLXRhcmdldCB7XG4gICAgdHJhbnNpdGlvbjogZmlsdGVyICRkdXJhdGlvbjtcbiAgfVxufVxuXG4uZGl0by1kcmFnLWVudGVyLWZyb20sXG4uZGl0by1kcmFnLWxlYXZlLXRvIHtcbiAgb3BhY2l0eTogMDtcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDApO1xuXG4gIH4gKiAuZGl0by1kcm9wLXRhcmdldCB7XG4gICAgLS1zaGFkb3ctYWxwaGE6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1tZW51KFxuICB2LXJlc2l6ZT1cIm9uUmVzaXplXCJcbiAgOnN0eWxlPVwieyAnLS13aWR0aCc6IHdpZHRoID8gYCR7d2lkdGh9cHhgIDogbnVsbCB9XCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJpdGVtIGluIGl0ZW1zXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShpdGVtKVwiXG4gICAgKVxuICAgICAgYS5kaXRvLWxpbmsoXG4gICAgICAgIDpocmVmPVwiZ2V0SXRlbUhyZWYoaXRlbSlcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRJdGVtQ2xhc3MoaXRlbSwgJ2RpdG8tc3ViLW1lbnUtbGluaycpXCJcbiAgICAgICAgQGNsaWNrLnByZXZlbnQuc3RvcD1cIm9uQ2xpY2tJdGVtKGl0ZW0pXCJcbiAgICAgICkge3sgZ2V0TGFiZWwoaXRlbSkgfX1cbiAgICAgIERpdG9NZW51KFxuICAgICAgICB2LWlmPVwiaXRlbS5pdGVtc1wiXG4gICAgICAgIDpjbGFzcz1cImdldEl0ZW1DbGFzcyhpdGVtLCAnZGl0by1zdWItbWVudScpXCJcbiAgICAgICAgOml0ZW1zPVwiaXRlbS5pdGVtc1wiXG4gICAgICAgIDpwYXRoPVwiZ2V0SXRlbVBhdGgoaXRlbSwgZmFsc2UpXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9NZW51Jywge1xuICBwcm9wczoge1xuICAgIGl0ZW1zOiB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBBcnJheV0sXG4gICAgICBkZWZhdWx0OiAoKSA9PiBbXVxuICAgIH0sXG4gICAgcGF0aDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IDBcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUmVzaXplKHsgY29udGVudFJlY3Q6IHsgd2lkdGggfSB9KSB7XG4gICAgICBpZiAod2lkdGgpIHtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEl0ZW1DbGFzcyhpdGVtLCBzdWJNZW51Q2xhc3MpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtzdWJNZW51Q2xhc3NdOiAhIWl0ZW0uaXRlbXMsXG4gICAgICAgICdkaXRvLWFjdGl2ZSc6IHRoaXMuaXNBY3RpdmVJdGVtKGl0ZW0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEl0ZW1QYXRoKGl0ZW0sIGZpcnN0Q2hpbGQpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBpdGVtLnBhdGggPyBgJHt0aGlzLnBhdGh9LyR7aXRlbS5wYXRofWAgOiBudWxsXG4gICAgICByZXR1cm4gZmlyc3RDaGlsZCAmJiBwYXRoICYmIGl0ZW0uaXRlbXNcbiAgICAgICAgPyBgJHtwYXRofSR7dGhpcy5nZXRJdGVtUGF0aChPYmplY3QudmFsdWVzKGl0ZW0uaXRlbXMpWzBdLCBmYWxzZSl9YFxuICAgICAgICA6IHBhdGhcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUhyZWYoaXRlbSkge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0SXRlbVBhdGgoaXRlbSwgdHJ1ZSlcbiAgICAgIHJldHVybiBwYXRoID8gdGhpcy4kcm91dGVyLnJlc29sdmUocGF0aCkuaHJlZiA6IG51bGxcbiAgICB9LFxuXG4gICAgaXNBY3RpdmVJdGVtKGl0ZW0pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuJHJvdXRlLnBhdGguc3RhcnRzV2l0aCh0aGlzLmdldEl0ZW1QYXRoKGl0ZW0sIGZhbHNlKSkgfHxcbiAgICAgICAgaXRlbS5pdGVtcyAmJiBPYmplY3QudmFsdWVzKGl0ZW0uaXRlbXMpLnNvbWUodGhpcy5pc0FjdGl2ZUl0ZW0pXG4gICAgICApXG4gICAgfSxcblxuICAgIG9uQ2xpY2tJdGVtKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldEl0ZW1QYXRoKGl0ZW0sIHRydWUpXG4gICAgICBpZiAocGF0aCkge1xuICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGgsIGZvcmNlOiB0cnVlIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQHVzZSAnc2Fzczpjb2xvcic7XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1tZW51IHtcbiAgJGl0ZW0taGVpZ2h0OiAkbWVudS1mb250LXNpemUgKyAyICogJG1lbnUtcGFkZGluZy12ZXI7XG5cbiAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXN0eWxlO1xuICBwYWRkaW5nOiAwICRtZW51LXNwYWNpbmc7XG5cbiAgbGkge1xuICAgICY6aGFzKC5kaXRvLXN1Yi1tZW51Om5vdCguZGl0by1hY3RpdmUpKSB7XG4gICAgICAvLyBQb3Atb3V0IHN1Yi1tZW51cyBvbiBob3ZlcjpcbiAgICAgICY6aG92ZXIge1xuICAgICAgICAuZGl0by1zdWItbWVudS1saW5rIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3Q7XG4gICAgICAgIH1cblxuICAgICAgICAuZGl0by1zdWItbWVudSB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHdpZHRoOiB2YXIoLS13aWR0aCk7XG4gICAgICAgICAgei1pbmRleDogJHotaW5kZXgtaGVhZGVyO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChjYWxjKHZhcigtLXdpZHRoKSArIDIgKiAkbWVudS1zcGFjaW5nKSlcbiAgICAgICAgICAgIHRyYW5zbGF0ZVkoLSRpdGVtLWhlaWdodCk7XG5cbiAgICAgICAgICBsaTpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAuZGl0by1saW5rIHtcbiAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgICAgLy8gRmlsbCB0aGUgZ2FwIHRvIG5vdCBsb29zZSB0aGUgaG92ZXIgd2hlbiBtb3Zpbmcgb3ZlciBpdC5cbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgbGVmdDogLTIgKiAkbWVudS1zcGFjaW5nO1xuICAgICAgICAgICAgd2lkdGg6IDIgKiAkbWVudS1zcGFjaW5nO1xuICAgICAgICAgICAgaGVpZ2h0OiAkaXRlbS1oZWlnaHQ7XG4gICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC5kaXRvLXN1Yi1tZW51LWxpbmssXG4gICAgICAgIC5kaXRvLXN1Yi1tZW51IHtcbiAgICAgICAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWxpbmsge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmc7XG4gICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIG1hcmdpbi10b3A6ICRtZW51LXNwYWNpbmc7XG5cbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlLCAuZGl0by1hY3RpdmUpIHtcbiAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctZm9jdXM7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gICAgfVxuXG4gICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1zdWItbWVudS1saW5rIHtcbiAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6IGNvbG9yLmFkanVzdCgkY29sb3ItYWN0aXZlLCAkYWxwaGE6IC0wLjMpO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXN1Yi1tZW51IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdDtcblxuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyYWlsXG4gIHVsXG4gICAgbGkoXG4gICAgICB2LWZvcj1cImNvbXBvbmVudCBpbiB0cmFpbFwiXG4gICAgKVxuICAgICAgYS5kaXRvLWxpbmsoXG4gICAgICAgIDpjbGFzcz1cImdldExpbmtDbGFzcyhjb21wb25lbnQpXCJcbiAgICAgICAgOmhyZWY9XCJnZXRDb21wb25lbnRIcmVmKGNvbXBvbmVudClcIlxuICAgICAgICBAY2xpY2sucHJldmVudC5zdG9wPVwib25DbGlja0NvbXBvbmVudChjb21wb25lbnQpXCJcbiAgICAgIClcbiAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRTcGFuQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RyYWlsJywge1xuICBjb21wdXRlZDoge1xuICAgIHRyYWlsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLmZpbHRlcihcbiAgICAgICAgY29tcG9uZW50ID0+ICEhY29tcG9uZW50LnJvdXRlUmVjb3JkXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnRQYXRoKGNvbXBvbmVudCkge1xuICAgICAgLy8gRG8gdGhlIHNhbWUgYXMgaW4gYERpdG9NZW51YDogTGluayBtZW51IGl0ZW1zIHRvIHRoZSBmaXJzdCBjaGlsZHJlbi5cbiAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSBjb21wb25lbnRcbiAgICAgIHJldHVybiBzY2hlbWEudHlwZSA9PT0gJ21lbnUnXG4gICAgICAgID8gT2JqZWN0LnZhbHVlcyhzY2hlbWEuaXRlbXMpWzBdLmZ1bGxQYXRoXG4gICAgICAgIDogY29tcG9uZW50LnBhdGhcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50SHJlZihjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZXIucmVzb2x2ZSh0aGlzLmdldENvbXBvbmVudFBhdGgoY29tcG9uZW50KSkuaHJlZlxuICAgIH0sXG5cbiAgICBvbkNsaWNrQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICBwYXRoOiB0aGlzLmdldENvbXBvbmVudFBhdGgoY29tcG9uZW50KSxcbiAgICAgICAgZm9yY2U6IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldExpbmtDbGFzcyhjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWFjdGl2ZSc6IGNvbXBvbmVudC5wYXRoID09PSB0aGlzLiRyb3V0ZS5wYXRoXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFNwYW5DbGFzcyhjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWRpcnR5JzogY29tcG9uZW50LmlzRGlydHlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmFpbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGhlaWdodDogM2VtO1xuXG4gIHVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG5cbiAgbGkge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICBhIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIHNwYW4ge1xuICAgICAgICBjb2xvcjogJGNvbG9yLWxpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxpOm5vdCg6bGFzdC1jaGlsZCkgYSB7XG4gICAgJGFuZ2xlOiAzM2RlZztcblxuICAgICY6OmJlZm9yZSxcbiAgICAmOjphZnRlciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHdpZHRoOiAxcHg7XG4gICAgICBoZWlnaHQ6IDAuNzVlbTtcbiAgICAgIHJpZ2h0OiAtMC4yNWVtO1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cblxuICAgICY6OmJlZm9yZSB7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKCRhbmdsZSk7XG4gICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3A7XG4gICAgfVxuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgYm90dG9tOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtJGFuZ2xlKTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxubmF2LmRpdG8taGVhZGVyXG4gIERpdG9UcmFpbFxuICAgIERpdG9TcGlubmVyKFxuICAgICAgdi1pZj1cImlzTG9hZGluZ1wiXG4gICAgICA6c2l6ZT1cInNwaW5uZXI/LnNpemVcIlxuICAgICAgOmNvbG9yPVwic3Bpbm5lcj8uY29sb3JcIlxuICAgIClcbiAgLy8tIFRlbGVwb3J0IHRhcmdldCBmb3IgYC5kaXRvLXNjaGVtYS1oZWFkZXJgOlxuICAuZGl0by1oZWFkZXJfX3RlbGVwb3J0XG4gIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9IZWFkZXInLCB7XG4gIHByb3BzOiB7XG4gICAgc3Bpbm5lcjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgaXNMb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1oZWFkZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJhY2tncm91bmQ6ICRjb2xvci1ibGFjaztcbiAgZm9udC1zaXplOiAkaGVhZGVyLWZvbnQtc2l6ZTtcbiAgbGluZS1oZWlnaHQ6ICRoZWFkZXItbGluZS1oZWlnaHQ7XG4gIHotaW5kZXg6ICR6LWluZGV4LWhlYWRlcjtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgJjo6YWZ0ZXIge1xuICAgIC8vIFNldCB0aGUgZnVsbC13aWR0aCBoZWFkZXIgYmFja2dyb3VuZCB0byB0aGUgaGVhZGVyIGNvbG9yLlxuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGluc2V0OiAwO1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYmFja2dyb3VuZDogaW5oZXJpdDtcbiAgICB6LWluZGV4OiAtMTtcbiAgfVxuXG4gIHNwYW4ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nOiAkaGVhZGVyLXBhZGRpbmc7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcblxuICAgICY6ZW1wdHkge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnXFwyMDBiJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1kaXJ0eSB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICB3aWR0aDogOHB4O1xuICAgICAgaGVpZ2h0OiA4cHg7XG4gICAgICBtYXJnaW46IDJweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwLjVlbTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgJl9fdGVsZXBvcnQge1xuICAgIC8vIEFsaWduIHRoZSB0ZWxlcG9ydGVkIHNjaGVtYSBoZWFkZXJzIG9uIHRvcCBvZiB0byB0aGUgaGVhZGVyIG1lbnUuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBwYWRkaW5nOiAwICRoZWFkZXItcGFkZGluZy1ob3I7XG4gICAgLy8gVHVybiBvZmYgcG9pbnRlciBldmVudHMgc28gdGhhdCBEaXRvVHJhaWwga2VlcHMgcmVjZWl2aW5nIGV2ZW50cy4uLlxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIC8vIC4uLmJ1dCBtb3ZlIHRoZW0gdG8gdGhlIGNoaWxkcmVuLlxuICAgID4gKiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICB9XG5cbiAgICAuZGl0by1idXR0b24ge1xuICAgICAgbWFyZ2luOiAwIDAgJHRhYi1tYXJnaW4gJHRhYi1tYXJnaW47XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbm5hdi5kaXRvLW5hdmlnYXRpb24uZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxXG4gICAgUm91dGVyTGluay5kaXRvLWxpbmsodG89XCIvXCIpIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIERpdG9NZW51LmRpdG8tc2Nyb2xsKDppdGVtcz1cInZpZXdzXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTmF2aWdhdGlvbicsIHt9KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbmF2aWdhdGlvbiB7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIGZsZXg6IDAgMCBtaW4tY29udGVudDtcbiAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuXG4gIGgxIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBsaW5lLWhlaWdodDogJGhlYWRlci1saW5lLWhlaWdodDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyO1xuICAgIGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItZGFya2VzdDtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuXG4gICAgLmRpdG8tbGluayB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBhZGRpbmc6ICRoZWFkZXItcGFkZGluZztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbm90aWZpY2F0aW9uc1xuICAuZGl0by1oZWFkZXJcbiAgICBzcGFuXG4gIC5kaXRvLW5vdGlmaWNhdGlvbnNfX2lubmVyXG4gICAgVnVlTm90aWZpY2F0aW9ucyhcbiAgICAgIHJlZj1cIm5vdGlmaWNhdGlvbnNcIlxuICAgICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgICAgIDpkYW5nZXJvdXNseVNldElubmVySHRtbD1cInRydWVcIlxuICAgICAgcG9zaXRpb249XCJcIlxuICAgICAgd2lkdGg9XCJcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXNBcnJheSwgc3RyaXBUYWdzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTm90aWZpY2F0aW9ucycsIHtcbiAgbm90aWZpY2F0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5pc01vdW50ZWQgJiYgdGhpcy4kcmVmcy5ub3RpZmljYXRpb25zXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG5vdGlmeSh7IHR5cGUgPSAnaW5mbycsIHRpdGxlLCB0ZXh0LCBlcnJvciB9ID0ge30pIHtcbiAgICAgIHRpdGxlIHx8PSAoXG4gICAgICAgIHtcbiAgICAgICAgICB3YXJuaW5nOiAnV2FybmluZycsXG4gICAgICAgICAgZXJyb3I6ICdFcnJvcicsXG4gICAgICAgICAgaW5mbzogJ0luZm9ybWF0aW9uJyxcbiAgICAgICAgICBzdWNjZXNzOiAnU3VjY2VzcydcbiAgICAgICAgfVt0eXBlXSB8fFxuICAgICAgICAnTm90aWZpY2F0aW9uJ1xuICAgICAgKVxuICAgICAgdGV4dCA9IGA8cD4ke1xuICAgICAgICBhc0FycmF5KHRleHQpLmpvaW4oJzwvcD4gPHA+JylcbiAgICAgIH08L3A+YC5yZXBsYWNlKC9cXG58XFxyXFxufFxcci9nLCAnPGJyPicpXG4gICAgICBjb25zdCBsb2cgPSAoXG4gICAgICAgIHtcbiAgICAgICAgICB3YXJuaW5nOiAnd2FybicsXG4gICAgICAgICAgZXJyb3I6ICdlcnJvcicsXG4gICAgICAgICAgaW5mbzogJ2xvZycsXG4gICAgICAgICAgc3VjY2VzczogJ2xvZydcbiAgICAgICAgfVt0eXBlXSB8fFxuICAgICAgICAnZXJyb3InXG4gICAgICApXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZVtsb2ddKFxuICAgICAgICAuLi5bXG4gICAgICAgICAgc3RyaXBUYWdzKHRleHQpLFxuICAgICAgICAgIC4uLih0eXBlID09PSAnZXJyb3InICYmIGVycm9yID8gW2Vycm9yXSA6IFtdKVxuICAgICAgICBdXG4gICAgICApXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVzdHJveUFsbCgpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kZXN0cm95QWxsKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOmNvbG9yJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbkBtaXhpbiB0eXBlKCRiYWNrZ3JvdW5kKSB7XG4gIGJhY2tncm91bmQ6IGNvbG9yLmFkanVzdCgkYmFja2dyb3VuZCwgJGxpZ2h0bmVzczogNSUpO1xuICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICBib3JkZXItbGVmdDogMTJweCBzb2xpZCBjb2xvci5hZGp1c3QoJGJhY2tncm91bmQsICRsaWdodG5lc3M6IC0xMCUpO1xufVxuXG4uZGl0by1ub3RpZmljYXRpb25zIHtcbiAgJG5vdGlmaWNhdGlvbi13aWR0aDogMzAwcHg7XG5cbiAgZmxleDogMTtcbiAgei1pbmRleDogJHotaW5kZXgtbm90aWZpY2F0aW9ucztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG4gIC8vIEZvciB0aGUgYEBjb250YWluZXJgIHJ1bGUgdG8gd29yazpcbiAgY29udGFpbmVyLXR5cGU6IGlubGluZS1zaXplO1xuXG4gIC5kaXRvLWhlYWRlciB7XG4gICAgc3BhbiB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxuXG4gICZfX2lubmVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAudnVlLW5vdGlmaWNhdGlvbi1ncm91cCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAkbm90aWZpY2F0aW9uLXdpZHRoO1xuXG4gICAgQGNvbnRhaW5lciAod2lkdGggPCAjeyRub3RpZmljYXRpb24td2lkdGggKyAkY29udGVudC1wYWRkaW5nfSkge1xuICAgICAgbGVmdDogdW5zZXQ7XG4gICAgICByaWdodDogJGNvbnRlbnQtcGFkZGluZztcbiAgICB9XG4gIH1cblxuICAudnVlLW5vdGlmaWNhdGlvbi13cmFwcGVyIHtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgfVxuXG4gIC5kaXRvLW5vdGlmaWNhdGlvbiB7XG4gICAgcGFkZGluZzogOHB4O1xuICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZyAwO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuXG4gICAgLm5vdGlmaWNhdGlvbi10aXRsZSB7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA4cHg7XG4gICAgfVxuXG4gICAgLm5vdGlmaWNhdGlvbi1jb250ZW50IHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG5cbiAgICAgIHAge1xuICAgICAgICBtYXJnaW46IDA7XG5cbiAgICAgICAgJiArIHAge1xuICAgICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYsXG4gICAgJi5pbmZvIHtcbiAgICAgIEBpbmNsdWRlIHR5cGUoJGNvbG9yLWFjdGl2ZSk7XG4gICAgfVxuXG4gICAgJi5zdWNjZXNzIHtcbiAgICAgIEBpbmNsdWRlIHR5cGUoJGNvbG9yLXN1Y2Nlc3MpO1xuICAgIH1cblxuICAgICYud2FybmluZyB7XG4gICAgICBAaW5jbHVkZSB0eXBlKCRjb2xvci13YXJuaW5nKTtcbiAgICB9XG5cbiAgICAmLmVycm9yIHtcbiAgICAgIEBpbmNsdWRlIHR5cGUoJGNvbG9yLWVycm9yKTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuYXNpZGUuZGl0by1zaWRlYmFyLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVNpZGViYXJcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbilcbiAgbmF2LmRpdG8taGVhZGVyXG4gICAgc2xvdFxuICAuZGl0by1zaWRlYmFyX190ZWxlcG9ydC5kaXRvLXNjcm9sbFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NpZGViYXInLCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNpZGViYXJXaWR0aDogMFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1zaWRlYmFyJ1xuICAgICAgLy8gTk9URTogS2VlcCBzeW5jZWQgd2l0aCAkc2lkZWJhci1tYXgtd2lkdGggaW4gU0NTUzpcbiAgICAgIGNvbnN0IHNpZGViYXJXaWR0aCA9IDM2MFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Ake3ByZWZpeH0tLXdpZHRoLTk5YF06IHRoaXMuc2lkZWJhcldpZHRoIDwgc2lkZWJhcldpZHRoLFxuICAgICAgICBbYCR7cHJlZml4fS0td2lkdGgtNjBgXTogdGhpcy5zaWRlYmFyV2lkdGggPD0gc2lkZWJhcldpZHRoICogMC42XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblJlc2l6ZVNpZGViYXIoeyBjb250ZW50UmVjdDogeyB3aWR0aCB9IH0pIHtcbiAgICAgIHRoaXMuc2lkZWJhcldpZHRoID0gd2lkdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zaWRlYmFyIHtcbiAgZmxleDogMCAxICRzaWRlYmFyLW1heC13aWR0aDtcbiAgbWF4LXdpZHRoOiAkc2lkZWJhci1tYXgtd2lkdGg7XG4gIG1pbi13aWR0aDogJHNpZGViYXItbWluLXdpZHRoO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEb21NaXhpbiBmcm9tICcuL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbGRvd246IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIHN0YXJ0VGltZTogMCxcbiAgICAgICAgY2hlY2tUaW1lOiB0cnVlLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBtb3VzZWRvd246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vblB1bGxkb3duTW91c2VVcCgpKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZXJzOiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duTW91c2VEb3duKHZhbHVlID0gbnVsbCkge1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKHRydWUpXG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duTW91c2VVcCh2YWx1ZSA9IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnRUaW1lIH0gPSB0aGlzLnB1bGxkb3duXG4gICAgICBpZiAoIXRoaXMuY2hlY2tUaW1lIHx8IHN0YXJ0VGltZSAmJiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+IDI1MCkpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMub25QdWxsZG93blNlbGVjdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KC8qIHZhbHVlICovKSB7XG4gICAgICAvLyBOT1RFOiBUbyBiZSBvdmVycmlkZGVuLlxuICAgIH0sXG5cbiAgICBzZXRQdWxsZG93bk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5wdWxsZG93bi5vcGVuID0gb3BlblxuICAgICAgdGhpcy5wdWxsZG93bi5zdGFydFRpbWUgPSBvcGVuID8gRGF0ZS5ub3coKSA6IDBcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB0aGlzLnB1bGxkb3duLmV2ZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1hY2NvdW50XG4gIGEoXG4gICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgKVxuICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICB1bC5kaXRvLXB1bGxkb3duKDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiKVxuICAgIGxpKFxuICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgKVxuICAgICAgYShcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICApIHt7IGxhYmVsIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9BY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlICdsb2dvdXQnOlxuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5sb2dvdXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgICBjb25zb2xlLmluZm8oJ1RPRE86IEltcGxlbWVudCBTZXR0aW5ncycpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1hY2NvdW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgLmRpdG8tcHVsbGRvd24ge1xuICAgIHRvcDogJHB1bGxkb3duLXBhZGRpbmctdmVyO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudChcbiAgdi1pZj1cIm9wdGlvbnM/LnRleHQgIT0gbnVsbFwiXG4gIDppcz1cInRhZ05hbWVcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbikge3sgb3B0aW9ucy50ZXh0IH19XG5jb21wb25lbnQoXG4gIHYtZWxzZS1pZj1cIm9wdGlvbnM/Lmh0bWwgIT0gbnVsbFwiXG4gIDppcz1cInRhZ05hbWVcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbiAgdi1odG1sPVwib3B0aW9ucy5odG1sXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRWxlbWVudCcsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc3BhbicgfSxcbiAgICBjb250ZW50OiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGNvbnRlbnQgIT0gbnVsbFxuICAgICAgICA/IGlzT2JqZWN0KGNvbnRlbnQpXG4gICAgICAgICAgPyBjb250ZW50XG4gICAgICAgICAgOiB7IHRleHQ6IGNvbnRlbnQgfVxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgdGFnTmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGFnIHx8IHRoaXMudGFnXG4gICAgfSxcblxuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hc09iamVjdCh0aGlzLiRhdHRycy5jbGFzcyksXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5jbGFzcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy4kYXR0cnMuc3R5bGUpLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuc3R5bGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5mdW5jdGlvbiBhc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gYXNBcnJheSh2YWx1ZSkucmVkdWNlKChvYmplY3QsIGVudHJ5KSA9PiB7XG4gICAgaWYgKGlzU3RyaW5nKGVudHJ5KSkge1xuICAgICAgb2JqZWN0W2VudHJ5XSA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGVudHJ5KSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmplY3QsIGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0XG4gIH0sIHt9KVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgOmlzPVwidGFnXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4pXG4gIC5kaXRvLWNoZXZyb24oXG4gICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiAhY29sbGFwc2VkIH1cIlxuICApXG4gIC5kaXRvLWxhYmVsX19pbm5lcihcbiAgICB2LWlmPVwidGV4dCB8fCBwcmVmaXhlcy5sZW5ndGggPiAwIHx8IHN1ZmZpeGVzLmxlbmd0aCA+IDBcIlxuICApXG4gICAgLmRpdG8tbGFiZWxfX3ByZWZpeChcbiAgICAgIHYtaWY9XCJwcmVmaXhlcy5sZW5ndGggPiAwXCJcbiAgICApXG4gICAgICBEaXRvRWxlbWVudChcbiAgICAgICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgICAgICA6a2V5PVwiYHByZWZpeC0ke2luZGV4fWBcIlxuICAgICAgICB0YWc9XCJzcGFuXCJcbiAgICAgICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICAgICAgKVxuICAgIGxhYmVsKFxuICAgICAgdi1pZj1cInRleHRcIlxuICAgICAgOmZvcj1cImRhdGFQYXRoXCJcbiAgICAgIHYtaHRtbD1cInRleHRcIlxuICAgIClcbiAgICAuZGl0by1sYWJlbF9fc3VmZml4KFxuICAgICAgdi1pZj1cInN1ZmZpeGVzLmxlbmd0aCA+IDBcIlxuICAgIClcbiAgICAgIERpdG9FbGVtZW50KFxuICAgICAgICB2LWZvcj1cIihzdWZmaXgsIGluZGV4KSBvZiBzdWZmaXhlc1wiXG4gICAgICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgICA6Y29udGVudD1cInN1ZmZpeFwiXG4gICAgICApXG4gICAgLmRpdG8taW5mbyhcbiAgICAgIHYtaWY9XCJpbmZvXCJcbiAgICAgIDpkYXRhLWluZm89XCJpbmZvXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTGFiZWwnLCB7XG4gIGVtaXRzOiBbJ29wZW4nXSxcblxuICBwcm9wczoge1xuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGluZm86IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8gJ2EnIDogJ2RpdidcbiAgICB9LFxuXG4gICAgdGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChsYWJlbCkgPyBsYWJlbD8udGV4dCA6IGxhYmVsXG4gICAgfSxcblxuICAgIHByZWZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8ucHJlZml4KVxuICAgIH0sXG5cbiAgICBzdWZmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnN1ZmZpeClcbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8geyBvbkNsaWNrOiB0aGlzLm9uQ2xpY2sgfSA6IHt9XG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPT09IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gdGhpc1xuICAgICAgdGhpcy4kZW1pdCgnb3BlbicsIHRoaXMuY29sbGFwc2VkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWxhYmVsIHtcbiAgJHNlbGY6ICY7XG5cbiAgLy8gRm9yIGJ1dHRvbnMgYW5kIGNoZXZyb24gdG8gYWxpZ24gcmlnaHQ6XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLy8gVmVydGljYWxseSBjZW50ZXIgYWxsIGl0ZW1zIGluIHRoZSBsYWJlbCwgZS5nLiBjaGV2cm9uLCBlZGl0LWJ1dHRvbnMuXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1pbi1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZy1oYWxmOyAvLyBXaGVuIGlubGluZWQuXG5cbiAgJjpoYXMoLmRpdG8tc2NoZW1hLWhlYWRlcikge1xuICAgIC8vIFRoZSBjb250YWluZXIncyBsYWJlbCBpcyB1c2VkIGFzIHRlbGVwb3J0IGZvciBhIG5lc3RlZCBzZWN0aW9uIG9yIG9iamVjdFxuICAgIC8vIGxhYmVsLiBIaWRlIGAmX19pbm5lcmAsIGFzIGl0IGlzIGJlIGR1cGxpY2F0ZWQgaW5zaWRlIHRoZSBuZXN0ZWQgbGFiZWwuXG4gICAgPiAjeyRzZWxmfV9faW5uZXIge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAmOm5vdCg6aGFzKCsgLmRpdG8tdGFicykpIHtcbiAgICAvLyBUYWtlIGZ1bGwgd2lkdGggYnV0IG9ubHkgaWYgdGhlcmUgYXJlbid0IGFsc28gdGFicyB0byBiZSBjZW50ZXJlZC5cbiAgICBmbGV4OiAxO1xuICB9XG5cbiAgJl9faW5uZXIge1xuICAgIGZsZXg6IDEgMCAwJTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gIGxhYmVsIHtcbiAgICBjdXJzb3I6IGluaGVyaXQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gIH1cblxuICAvLyBGaXggYWxpZ25tZW50IG9mIHN1YiBhbmQgc3VwIGVsZW1lbnRzIGluIGxhYmVsIGNvbnRlbnQuXG4gIHN1YixcbiAgc3VwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICB9XG5cbiAgc3ViIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNHB4KTtcbiAgfVxuXG4gIHN1cCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpO1xuICB9XG5cbiAgJl9fcHJlZml4LFxuICAmX19zdWZmaXgge1xuICAgIGZsZXg6IDE7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuXG4gICAgLy8gRm9yIGVsbGlwc2lzIHRvIHdvcmsgb24gcHJlZml4IGFuZCBzdWZmaXggd2l0aCBmbGV4IGxheW91dCwgd2UgbmVlZCB0b1xuICAgIC8vIHVzZSBhIG5lc3RlZCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgc3Bhbi5cblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAnXFwyMDBiJzsgLy8gemVyby13aWR0aCBzcGFjZSB0byBrZWVwIGNvbnRhaW5lciBmcm9tIGNvbGxhcHNpbmcuXG4gICAgfVxuXG4gICAgc3BhbiB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBpbnNldDogMDtcbiAgICB9XG4gIH1cblxuICBsYWJlbCxcbiAgJl9fcHJlZml4IHNwYW4sXG4gICZfX3N1ZmZpeCBzcGFuIHtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAmX19wcmVmaXggKyBsYWJlbCxcbiAgbGFiZWwgKyAmX19zdWZmaXgge1xuICAgICYsXG4gICAgc3BhbiB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnXFxhMCc7IC8vICZuYnNwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbnMge1xuICAgIC8vIE1vdmUgdGhlIGxhYmVsIHBhZGRpbmcgaW5zaWRlIC5kaXRvLWJ1dHRvbnMsIHNvIHRoYXQgaXQgY2FwdHVyZXMgYWxsXG4gICAgLy8gbmVhciBtb3VzZSBldmVudHM6XG4gICAgbWFyZ2luOiBjYWxjKC0xICogdmFyKC0tbGFiZWwtcGFkZGluZykpO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpO1xuICB9XG5cbiAgJi5kaXRvLXdpZHRoLWZpbGwge1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgLy8gSW4gb3JkZXIgZm9yIGVsbGlwc2lzIHRvIHdvcmsgb24gbGFiZWxzIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIGxheW91dCxcbiAgICAvLyB3ZSBuZWVkIHRvIHBvc2l0aW9uIGl0IGFic29sdXRlbHkgaW5zaWRlIGl0cyBjb250YWluZXIuIEJ1dCB3ZSBjYW4gb25seVxuICAgIC8vIGRvIHNvIGlmIHRoZXJlIGlzJ3QgYWxzbyBhIGNoZXZyb24gb3Igb3RoZXIgVVggZWxlbWVudHMgYmVzaWRlcyBpdC5cbiAgICAmOmhhcyg+ICN7JHNlbGZ9X19pbm5lcjpvbmx5LWNoaWxkKSB7XG4gICAgICBmbGV4OiAxOyAvLyBXaGVuIGluIGAuZGl0by1zY2hlbWEtaGVhZGVyYC5cblxuICAgICAgPiAjeyRzZWxmfV9faW5uZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIC8vIFNpbmNlIDxsYWJlbD4gdXNlcyBgcG9zaXRpb246IGFic29sdXRlYCwgc2V0IGNvbnRlbnQgdG8gYSB6ZXJvLXdpZHRoXG4gICAgICAvLyBzcGFjZSBvbiBpdHMgcGFyZW50IHRvIGVuZm9yY2UgdGhlIHJpZ2h0IHRleHQgaGVpZ2h0IGluIHRoZSBjb250YWluZXJcbiAgICAgIGNvbnRlbnQ6ICdcXDIwMGInOyAvLyB6ZXJvLXdpZHRoIHNwYWNlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWluZm8ge1xuICAgIG1hcmdpbi1sZWZ0OiAwLjM1ZW07XG4gIH1cbn1cblxuYS5kaXRvLWxhYmVsIHtcbiAgJjpob3ZlciB7XG4gICAgLmRpdG8tY2hldnJvbiB7XG4gICAgICBjb2xvcjogJGNvbG9yLWRhcmtlcjtcbiAgICB9XG4gIH1cblxuICAmOmZvY3VzOm5vdCg6YWN0aXZlLCAuZGl0by1hY3RpdmUpIHtcbiAgICAuZGl0by1jaGV2cm9uIHtcbiAgICAgIC13ZWJraXQtdGV4dC1zdHJva2U6ICRib3JkZXItd2lkdGggJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG4gICAgLy8gRGlzcGxheSBsYWJlbHMgaW4gY29tcGFjdCBzY2hlbWEgYXMgaW5saW5lLWJsb2NrcywgdG8gYWxsb3cgY29tcGFjdFxuICAgIC8vIGxheW91dHMgd2l0aCBgd2lkdGg6ICdhdXRvJ2AgZWxlbWVudHM6XG4gICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gY29udHJvbCB0aGlzIGJlaGF2aW9yLlxuICB9XG59XG5cbi5kaXRvLXNjaGVtYS1jb21wYWN0IHtcbiAgPiAuZGl0by1zY2hlbWEtY29udGVudCB7XG4gICAgPiAuZGl0by1wYW5lIHtcbiAgICAgID4gLmRpdG8tY29udGFpbmVyOm5vdCguZGl0by1jb250YWluZXItLWxhYmVsLXZlcnRpY2FsKSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbUZvcm1TY2hlbWEsXG4gIGdldEl0ZW1JZCxcbiAgZ2V0SXRlbVVpZCxcbiAgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYSxcblxuICAgIGdldEl0ZW1VaWQsXG5cbiAgICBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVHJhbnNpZW50ICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgID8gU3RyaW5nKGluZGV4KVxuICAgICAgICA6IGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pXG4gICAgfSxcblxuICAgIGdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSB7XG4gICAgICBsZXQgeyBkYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgaWYgKHNvdXJjZVNjaGVtYSAhPT0gdGhpcy5zY2hlbWEpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc291cmNlU2NoZW1hLm5hbWUpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBpbmRleClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhUGF0aFxuICAgIH0sXG5cbiAgICBnZXRJdGVtU3RvcmUoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2hpbGRTdG9yZSh0aGlzLmdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSwgaW5kZXgpXG4gICAgfSxcblxuICAgIHJlbW92ZUl0ZW1TdG9yZShzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSB7XG4gICAgICB0aGlzLnJlbW92ZUNoaWxkU3RvcmUodGhpcy5nZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSksIGluZGV4KVxuICAgIH0sXG5cbiAgICBmaW5kSXRlbUlkSW5kZXgoc291cmNlU2NoZW1hLCBkYXRhLCBpdGVtSWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICA/IC8vIEZvciB0cmFuc2llbnQgZGF0YSwgdGhlIGluZGV4IGlzIHVzZWQgYXMgdGhlIGlkXG4gICAgICAgICAgaXRlbUlkXG4gICAgICAgIDogZGF0YT8uZmluZEluZGV4KFxuICAgICAgICAgICAgKGl0ZW0sIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIHRoaXMuZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXgpID09PSBpdGVtSWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gaW5kZXggOiBudWxsXG4gICAgfSxcblxuICAgIGdldEl0ZW1MYWJlbChzb3VyY2VTY2hlbWEsIGl0ZW0sIHtcbiAgICAgIGluZGV4ID0gbnVsbCxcbiAgICAgIGV4dGVuZGVkID0gZmFsc2UsXG4gICAgICBhc09iamVjdCA9IGZhbHNlXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCB7IGl0ZW1MYWJlbCB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAoIWl0ZW0gfHwgIWV4dGVuZGVkICYmIGl0ZW1MYWJlbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGFQYXRoXG4gICAgICBjb25zdCBnZXREYXRhUGF0aCA9ICgpID0+XG4gICAgICAgIChkYXRhUGF0aCA/Pz0gdGhpcy5nZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkpXG5cbiAgICAgIGxldCBmb3JtTGFiZWxcbiAgICAgIGNvbnN0IGdldEZvcm1MYWJlbCA9ICgpID0+XG4gICAgICAgIChmb3JtTGFiZWwgPz89IHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgICAgZ2V0SXRlbUZvcm1TY2hlbWEoc291cmNlU2NoZW1hLCBpdGVtLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICkpXG5cbiAgICAgIGxldCB0ZXh0XG4gICAgICBsZXQgcHJlZml4XG4gICAgICBsZXQgc3VmZml4XG4gICAgICBpZiAoaXNGdW5jdGlvbihpdGVtTGFiZWwpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbUxhYmVsLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgIGluZGV4LFxuXG4gICAgICAgICAgICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXREYXRhUGF0aCgpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXQgZm9ybUxhYmVsKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIGlmIChpc09iamVjdChsYWJlbCkpIHtcbiAgICAgICAgICA7KHsgdGV4dCwgcHJlZml4LCBzdWZmaXggfSA9IGxhYmVsKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRleHQgPSBsYWJlbFxuICAgICAgICB9XG4gICAgICAgIC8vIEl0J3MgdXAgdG8gYGl0ZW1MYWJlbCgpYCBlbnRpcmVseSB0byBwcm9kdWNlIHRoZSBsYWJlbDpcbiAgICAgICAgZXh0ZW5kZWQgPSBmYWxzZVxuICAgICAgfSBlbHNlIGlmIChpc1N0cmluZyhpdGVtTGFiZWwpICYmICEoaXRlbUxhYmVsIGluIGl0ZW0pKSB7XG4gICAgICAgIC8vIGBpdGVtTGFiZWxgIGNhbiBiZSBib3RoIGEga2V5LCBvciBzaW1wbHkgYSBsYWJlbC5cbiAgICAgICAgdGV4dCA9IGl0ZW1MYWJlbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTG9vayB1cCB0aGUgbmFtZSBvbiB0aGUgaXRlbSwgYnkgdGhlc2UgcnVsZXM6XG4gICAgICAgIC8vIDEuIElmIGBpdGVtTGFiZWxgIGlzIGEgc3RyaW5nLCB1c2UgaXQgYXMgdGhlIHByb3BlcnR5IGtleVxuICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZXJlIGFyZSBjb2x1bW5zLCB1c2UgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdFxuICAgICAgICAvLyAzLiBPdGhlcndpc2UsIHNlZSBpZiB0aGUgaXRlbSBoYXMgYSBwcm9wZXJ0eSBuYW1lZCAnbmFtZSdcbiAgICAgICAgY29uc3QgeyBjb2x1bW5zIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgICAgY29uc3Qga2V5ID0gKFxuICAgICAgICAgIGlzU3RyaW5nKGl0ZW1MYWJlbCkgJiYgaXRlbUxhYmVsIHx8XG4gICAgICAgICAgaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgY29sdW1ucyAmJiBPYmplY3Qua2V5cyhjb2x1bW5zKVswXSB8fFxuICAgICAgICAgICduYW1lJ1xuICAgICAgICApXG4gICAgICAgIHRleHQgPSBpdGVtW2tleV1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhZExhYmVsID0gISF0ZXh0XG4gICAgICAvLyBJZiBubyBsYWJlbCB3YXMgZm91bmQgc28gZmFyLCB0cnkgdG8gcHJvZHVjZSBvbmUgZnJvbSB0aGUgaW5kZXguXG4gICAgICBpZiAodGV4dCA9PSBudWxsKSB7XG4gICAgICAgIC8vIEFsd2F5cyB1c2UgZXh0ZW5kZWQgc3R5bGUgd2hlbiBhdXRvLWdlbmVyYXRpbmcgbGFiZWxzIGZyb20gaW5kZXgvaWQ6XG4gICAgICAgIGV4dGVuZGVkID0gdHJ1ZVxuICAgICAgICB0ZXh0ID1cbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICAgICAgPyAodGV4dCA9IGAke2luZGV4ICsgMX1gKVxuICAgICAgICAgICAgOiAnJ1xuICAgICAgfVxuICAgICAgaWYgKGV4dGVuZGVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm1MYWJlbCA9IGdldEZvcm1MYWJlbCgpXG4gICAgICAgIGlmIChmb3JtTGFiZWwpIHtcbiAgICAgICAgICAvLyBJZiBhIGxhYmVsIHdhcyBwcm92aWRlZCwgcHV0IGluIHF1b3RlcyB3aGVuIHByZWZpeGVkIHdpdGggdGhlXG4gICAgICAgICAgLy8gZm9ybSBsYWJlbCBmb3IgdGhlIGV4dGVuZGVkIHN0eWxlOlxuICAgICAgICAgIHRleHQgPSBgJHtmb3JtTGFiZWx9ICR7aGFkTGFiZWwgPyBgJyR7dGV4dH0nYCA6IHRleHR9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXNPYmplY3RcbiAgICAgICAgPyB0ZXh0IHx8IHByZWZpeCB8fCBzdWZmaXhcbiAgICAgICAgICA/IHsgdGV4dCwgcHJlZml4LCBzdWZmaXggfVxuICAgICAgICAgIDogbnVsbFxuICAgICAgICA6IHRleHRcbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5zbG90KG5hbWU9XCJiZWZvcmVcIilcbi5kaXRvLXNjaGVtYShcbiAgOmNsYXNzPVwieyAnZGl0by1zY3JvbGwtcGFyZW50Jzogc2Nyb2xsYWJsZSwgJ2RpdG8tc2NoZW1hLS1vcGVuJzogb3BlbmVkIH1cIlxuICB2LWJpbmQ9XCIkYXR0cnNcIlxuKVxuICBUZWxlcG9ydChcbiAgICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgcGFuZWxFbnRyaWVzLmxlbmd0aCA+IDBcIlxuICAgIHRvPVwiLmRpdG8tc2lkZWJhcl9fdGVsZXBvcnRcIlxuICApXG4gICAgRGl0b1BhbmVscyhcbiAgICAgIHYtaWY9XCJhY3RpdmVcIlxuICAgICAgOnBhbmVscz1cInBhbmVsRW50cmllc1wiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIFRlbGVwb3J0KFxuICAgIHYtaWY9XCJoYXNIZWFkZXJcIlxuICAgIDp0bz1cImhlYWRlclRlbGVwb3J0XCJcbiAgICA6ZGlzYWJsZWQ9XCIhaGVhZGVyVGVsZXBvcnRcIlxuICApXG4gICAgLmRpdG8tc2NoZW1hLWhlYWRlcihcbiAgICAgIHYtaWY9XCJhY3RpdmVcIlxuICAgIClcbiAgICAgIERpdG9MYWJlbChcbiAgICAgICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICAgICAgOmxhYmVsPVwibGFiZWxcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgOmNvbGxhcHNlZD1cIiFvcGVuZWRcIlxuICAgICAgICBAb3Blbj1cIm9uT3BlblwiXG4gICAgICApXG4gICAgICBUcmFuc2l0aW9uKFxuICAgICAgICB2LWlmPVwidGFic1wiXG4gICAgICAgIG5hbWU9XCJkaXRvLWZhZGVcIlxuICAgICAgKVxuICAgICAgICBEaXRvVGFicyhcbiAgICAgICAgICB2LWlmPVwib3BlbmVkXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgIClcbiAgICAgIERpdG9DbGlwYm9hcmQoXG4gICAgICAgIHYtaWY9XCJjbGlwYm9hcmRcIlxuICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICApXG4gICAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiAgVHJhbnNpdGlvbkhlaWdodCg6ZW5hYmxlZD1cImlubGluZWRcIilcbiAgICAuZGl0by1zY2hlbWEtY29udGVudChcbiAgICAgIHYtaWY9XCJvcGVuZWRcIlxuICAgICAgcmVmPVwiY29udGVudFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjcm9sbCc6IHNjcm9sbGFibGUgfVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJoYXNUYWJzXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1mb3I9XCIodGFiU2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgICApXG4gICAgICAgICAgLy8tIFRPRE86IFN3aXRjaCB0byB2LWlmIGluc3RlYWQgb2Ygdi1zaG93LCBvbmNlIHZhbGlkYXRpb24gaXNcbiAgICAgICAgICAvLy0gZGVjb3VwbGVkIGZyb20gY29tcG9uZW50cy5cbiAgICAgICAgICBEaXRvUGFuZS5kaXRvLXBhbmVfX3RhYihcbiAgICAgICAgICAgIHYtc2hvdz1cInNlbGVjdGVkVGFiID09PSB0YWJcIlxuICAgICAgICAgICAgcmVmPVwidGFic1wiXG4gICAgICAgICAgICA6dGFiPVwidGFiXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJ0YWJTY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICA6cGFkZGluZz1cInBhZGRpbmdcIlxuICAgICAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNNYWluUGFuZVwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICAgICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgICAgICAgIClcbiAgICAgIERpdG9QYW5lLmRpdG8tcGFuZV9fbWFpbihcbiAgICAgICAgdi1pZj1cImhhc01haW5QYW5lXCJcbiAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnBhZGRpbmc9XCJwYWRkaW5nXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4gICAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwiIWlubGluZWQgJiYgaXNQb3B1bGF0ZWRcIlxuICAgICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICApXG4gIHNsb3QoXG4gICAgdi1pZj1cImlubGluZWQgJiYgIWhhc0hlYWRlclwiXG4gICAgbmFtZT1cImVkaXQtYnV0dG9uc1wiXG4gIClcbnNsb3QobmFtZT1cImFmdGVyXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb24sXG4gIGlzUmVnRXhwLFxuICBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoLFxuICBsYWJlbGl6ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgVHJhbnNpdGlvbkhlaWdodCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBDb250ZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL0NvbnRleHRNaXhpbi5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGdldE5hbWVkU2NoZW1hcyxcbiAgZ2V0UGFuZWxFbnRyaWVzLFxuICBzZXREZWZhdWx0VmFsdWVzLFxuICBwcm9jZXNzRGF0YSxcbiAgaXNFbXB0eVNjaGVtYSxcbiAgaXNOZXN0ZWRcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NoZW1hJywge1xuICBtaXhpbnM6IFtDb250ZXh0TWl4aW4sIEl0ZW1NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVHJhbnNpdGlvbkhlaWdodCB9LFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJyRzY2hlbWFQYXJlbnRDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIGBkYXRhU2NoZW1hYCBpcyBvbmx5IHByb3ZpZGVkIGZvciBwYW5lbHMsIHdoZXJlIHRoZSBwYW5lbCBzY2hlbWFcbiAgICAvLyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZGF0YSBzY2hlbWEgZm9yIHBhbmVscyB3aXRob3V0IG93biBkYXRhLlxuICAgIGRhdGFTY2hlbWE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBwcm9wcyA9PiBwcm9wcy5zY2hlbWEgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYWRkaW5nOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGFjdGl2ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgaW5saW5lZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBzY3JvbGxhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaGFzT3duRGF0YTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWxOb2RlOiB7IHR5cGU6IEhUTUxFbGVtZW50LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDEgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIHJldHVybiB7XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gcHJvdmlkZSBtb3JlIGRhdGEgdGhyb3VnaCBgc2NoZW1hLmRhdGFgLCB2dWUtc3R5bGU6XG4gICAgICAuLi4oXG4gICAgICAgIGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICAgID8gZGF0YSh0aGlzLmNvbnRleHQpXG4gICAgICAgICAgOiBkYXRhXG4gICAgICApLFxuICAgICAgc2VsZWN0ZWRUYWI6IG51bGwsXG4gICAgICBjb21wb25lbnRzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZXNSZWdpc3RyeToge30sXG4gICAgICBwYW5lbHNSZWdpc3RyeToge30sXG4gICAgICBzY3JvbGxQb3NpdGlvbnM6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbmVzdGVkKCkge1xuICAgICAgLy8gRm9yIGBDb250ZXh0TWl4aW5gOlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHNjaGVtYUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gRG9uJ3QgcmV0dXJuIHRoZSBhY3R1YWwgcGFyZW50IHNjaGVtYSBpcyB0aGlzIHNjaGVtYSBoYW5kbGVzIGl0cyBvd25cbiAgICAgIC8vIGRhdGEuIFRoaXMgcHJldmVudHMgZGVsZWdhdGluZyBldmVudHMgdG8gdGhlIHBhcmVudCwgYW5kIHJlZ2lzdGVyaW5nXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggdGhlIHBhcmVudCB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIHNldCBpc0RpcnR5IGZsYWdzLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IG51bGwgOiB0aGlzLnBhcmVudENvbXBvbmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFuZWxFbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGdldFBhbmVsRW50cmllcyh0aGlzLnNjaGVtYS5wYW5lbHMsIHRoaXMuZGF0YVBhdGgpXG4gICAgfSxcblxuICAgIHRhYnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnRhYnMpXG4gICAgfSxcblxuICAgIGRlZmF1bHRUYWIoKSB7XG4gICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBPYmplY3QudmFsdWVzKHRoaXMudGFicykuZmlsdGVyKHRoaXMuc2hvdWxkUmVuZGVyU2NoZW1hKVxuICAgICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgZGVmYXVsdFRhYiB9IG9mIHRhYnMpIHtcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihkZWZhdWx0VGFiKSA/IGRlZmF1bHRUYWIodGhpcy5jb250ZXh0KSA6IGRlZmF1bHRUYWIpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lXG4gICAgICAgICAgfVxuICAgICAgICAgIGZpcnN0ID8/PSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmaXJzdFxuICAgIH0sXG5cbiAgICByb3V0ZVRhYigpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5oYXNoPy5zbGljZSgxKSB8fCBudWxsXG4gICAgfSxcblxuICAgIGNsaXBib2FyZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYT8uY2xpcGJvYXJkID8/IG51bGxcbiAgICB9LFxuXG4gICAgaGFzSGVhZGVyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgfHwgdGhpcy5oYXNUYWJzIHx8ICEhdGhpcy5jbGlwYm9hcmRcbiAgICB9LFxuXG4gICAgaGVhZGVyVGVsZXBvcnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RvcExldmVsU2NoZW1hXG4gICAgICAgID8gJy5kaXRvLWhlYWRlcl9fdGVsZXBvcnQnXG4gICAgICAgIDogdGhpcy5sYWJlbE5vZGVcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlXG4gICAgcHJvY2Vzc2VkRGF0YSgpIHtcbiAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnc2VydmVyJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmREYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpcGJvYXJkRGF0YVxuICAgIH0sXG5cbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYSh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB0aGlzLmNvbnRleHQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzTmVzdGVkKCkge1xuICAgICAgcmV0dXJuIGlzTmVzdGVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZGF0ZWQpXG4gICAgfSxcblxuICAgIGhhc0Vycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaGFzRXJyb3JzKVxuICAgIH0sXG5cbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5sYWJlbCB8fCB0aGlzLmNvbGxhcHNpYmxlXG4gICAgfSxcblxuICAgIGhhc1RhYnMoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnRhYnNcbiAgICB9LFxuXG4gICAgaXNUb3BMZXZlbFNjaGVtYSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc05lc3RlZCAmJiAhdGhpcy5pbmxpbmVkXG4gICAgfSxcblxuICAgIGhhc1RvcExldmVsVGFicygpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc1RhYnMgJiYgdGhpcy5pc1RvcExldmVsU2NoZW1hXG4gICAgfSxcblxuICAgIGhhc01haW5QYW5lKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuICEhY29tcG9uZW50cyAmJiBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIG9wZW5lZDogZ2V0U3RvcmVBY2Nlc3Nvcignb3BlbmVkJywge1xuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNvbGxhcHNlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50cygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgY29tcG9uZW50c0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgd2lkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc2NoZW1hOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyKHNjaGVtYSkge1xuICAgICAgICAvLyBGb3IgZm9ybXMgd2l0aCB0eXBlIGRlcGVuZGluZyBvbiBsb2FkZWQgZGF0YSwgd2UgbmVlZCB0byB3YWl0IGZvciB0aGVcbiAgICAgICAgLy8gYWN0dWFsIHNjaGVtYSB0byBiZWNvbWUgcmVhZHkgYmVmb3JlIHNldHRpbmcgdXAgc2NoZW1hIHJlbGF0ZWQgdGhpbmdzXG4gICAgICAgIGlmICghaXNFbXB0eVNjaGVtYShzY2hlbWEpKSB7XG4gICAgICAgICAgdGhpcy5zZXR1cFNjaGVtYSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcm91dGVUYWI6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zMzkzI2lzc3VlY29tbWVudC0xMTU4NDcwMTQ5XG4gICAgICBmbHVzaDogJ3Bvc3QnLFxuICAgICAgaGFuZGxlcihyb3V0ZVRhYikge1xuICAgICAgICAvLyBSZW1lbWJlciB0aGUgY3VycmVudCBwYXRoIHRvIGtub3cgaWYgdGFiIGNoYW5nZXMgc2hvdWxkIHN0aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQsIGJ1dCByZW1vdmUgdGhlIHRyYWlsaW5nIGAvY3JlYXRlYCBvciBgLzppZGAgZnJvbSBpdCBzbyB0aGF0XG4gICAgICAgIC8vIHRhYnMgaW5mb3JtcyB0aGF0IHN0YXkgb3BlbiBhZnRlciBjcmVhdGlvbiBzdGlsbCB3b3JrLlxuICAgICAgICBpZiAodGhpcy5oYXNUb3BMZXZlbFRhYnMpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiID0gcm91dGVUYWJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYihuZXdUYWIsIG9sZFRhYikge1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSkge1xuICAgICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IHRoaXMuJHJlZnNcbiAgICAgICAgdGhpcy5zY3JvbGxQb3NpdGlvbnNbb2xkVGFiXSA9IGNvbnRlbnQuc2Nyb2xsVG9wXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBjb250ZW50LnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsUG9zaXRpb25zW25ld1RhYl0gPz8gMFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaGFzVG9wTGV2ZWxUYWJzKSB7XG4gICAgICAgIGNvbnN0IHRhYiA9IHRoaXMuc2hvdWxkUmVuZGVyU2NoZW1hKHRoaXMudGFic1tuZXdUYWJdKVxuICAgICAgICAgID8gbmV3VGFiXG4gICAgICAgICAgOiB0aGlzLmRlZmF1bHRUYWJcbiAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBoYXNoOiB0YWIgPyBgIyR7dGFifWAgOiBudWxsIH0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5oYXNFcnJvcnMpIHtcbiAgICAgICAgdGhpcy5yZXBvc2l0aW9uRXJyb3JzKClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIGlmICh0aGlzLnNjcm9sbGFibGUgJiYgdGhpcy53aWRlKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnBhZ2VDbGFzcyA9ICdkaXRvLXBhZ2UtLXdpZGUnXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IHRoaXMucm91dGVUYWIgfHwgdGhpcy5kZWZhdWx0VGFiXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuZW1pdEV2ZW50KCdkZXN0cm95JylcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgICBpZiAodGhpcy5zY3JvbGxhYmxlICYmIHRoaXMud2lkZSkge1xuICAgICAgdGhpcy5hcHBTdGF0ZS5wYWdlQ2xhc3MgPSBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cFNjaGVtYSgpIHtcbiAgICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICAgICAgLy8gRGVsZWdhdGUgY2hhbmdlIGV2ZW50cyB0aHJvdWdoIHRvIHBhcmVudCBzY2hlbWE6XG4gICAgICB0aGlzLmRlbGVnYXRlKCdjaGFuZ2UnLCB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdpbml0aWFsaXplJykgLy8gTm90IGAnY3JlYXRlJ2AsIHNpbmNlIHRoYXQncyBmb3IgZGF0YS5cbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50c0J5TmFtZShkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeU5hbWUodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5TmFtZShuYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudChkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSlbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSlcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWwoZGF0YVBhdGhPck5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSlbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBzb21lQ29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuc29tZShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgZXZlcnlDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5ldmVyeShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgb25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdvcGVuJywgeyBjb250ZXh0OiB7IG9wZW4gfSB9KVxuICAgICAgLy8gUHJldmVudCBjbG9zaW5nIHRoZSBzY2hlbWEgd2l0aCBpbnZhbGlkIGRhdGEsIHNpbmNlIHRoZSBpbi1jb21wb25lbnRcbiAgICAgIC8vIHZhbGlkYXRpb24gd2lsbCBub3QgYmUgZXhlY3V0ZWQgb25jZSBpdCdzIGNsb3NlZC5cblxuICAgICAgLy8gVE9ETzogTW92ZSB2YWxpZGF0aW9uIG91dCBvZiBjb21wb25lbnRzLCB0byBzY2hlbWEsIGp1c3QgbGlrZVxuICAgICAgLy8gcHJvY2Vzc2luZywgYW5kIHVzZSBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgZm9yIHRoZSByZXN1bHRpbmcgZXJyb3JzLFxuICAgICAgLy8gdGhlbiByZW1vdmUgdGhpcyByZXF1aXJlbWVudCwgc2luY2Ugd2UgY2FuIHZhbGlkYXRlIGNsb3NlZCBmb3JtcyBhbmRcbiAgICAgIC8vIHNjaGVtYXMgdGhlbi5cbiAgICAgIGlmICghdGhpcy5vcGVuZWQgfHwgb3BlbiB8fCB0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBvcGVuXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwb3NpdGlvbkVycm9ycygpIHtcbiAgICAgIC8vIEZpcmUgYSBmYWtlIHNjcm9sbCBldmVudCB0byBmb3JjZSB0aGUgcmVwb3NpdGlvbmluZyBvZiBlcnJvciB0b29sdGlwcyxcbiAgICAgIC8vIGFzIG90aGVyd2lzZSB0aGV5IHNvbWV0aW1lcyBkb24ndCBzaG93IHVwIGluIHRoZSByaWdodCBwbGFjZSBpbml0aWFsbHlcbiAgICAgIC8vIHdoZW4gY2hhbmdpbmcgdGFicy5cbiAgICAgIGNvbnN0IHNjcm9sbENvbnRhaW5lciA9IHRoaXMuJHJlZnMuY29udGVudC5jbG9zZXN0KCcuZGl0by1zY3JvbGwnKVxuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoKSA9PiBzY3JvbGxDb250YWluZXIuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Njcm9sbCcpKVxuICAgICAgZGlzcGF0Y2goKVxuICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBoYW5kbGUgYCYtLWxhYmVsLXZlcnRpY2FsYCBiYXNlZCBsYXlvdXQgY2hhbmdlcy5cbiAgICAgIHNldFRpbWVvdXQoZGlzcGF0Y2gsIDApXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlXG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/LmZvY3VzKClcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50c0J5RGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGxldCBkYXRhUGF0aHNcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBjaGVjayA9IGlzRnVuY3Rpb24obWF0Y2gpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogaXNSZWdFeHAobWF0Y2gpXG4gICAgICAgICAgICA/IGZpZWxkID0+IG1hdGNoLnRlc3QoZmllbGQpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgZGF0YVBhdGhzID0gY2hlY2tcbiAgICAgICAgICA/IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKS5maWx0ZXIoY2hlY2spXG4gICAgICAgICAgOiBpc0FycmF5KG1hdGNoKVxuICAgICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgICAgOiBbbWF0Y2hdXG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBkYXRhUGF0aHMgfHw9IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKVxuICAgICAgZm9yIChjb25zdCBkYXRhUGF0aCBvZiBkYXRhUGF0aHMpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudC52YWxpZGF0ZShub3RpZnkpKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBmaXJzdCBlcnJvciBmaWVsZFxuICAgICAgICAgICAgaWYgKG5vdGlmeSAmJiBmaXJzdCkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5ICYmICFpc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGwobWF0Y2gsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzLCBmaXJzdCA9IHRydWUpIHtcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgY29uc3QgdW5tYXRjaGVkID0gW11cbiAgICAgIGNvbnN0IHdhc0ZpcnN0ID0gZmlyc3RcbiAgICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBlcnJzXSBvZiBPYmplY3QuZW50cmllcyhlcnJvcnMpKSB7XG4gICAgICAgIC8vIElmIHRoZSBzY2hlbWEgaXMgYSBkYXRhLXJvb3QsIHByZWZpeCBpdHMgb3duIGRhdGFQYXRoIHRvIGFsbCBlcnJvcnMsXG4gICAgICAgIC8vIHNpbmNlIHRoZSBkYXRhIHRoYXQgaXQgc2VuZHMgYW5kIHZhbGlkYXRlcyB3aWxsIGJlIHVucHJlZml4ZWQuXG4gICAgICAgIGNvbnN0IGZ1bGxEYXRhUGF0aCA9IHRoaXMuaGFzT3duRGF0YVxuICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgICAgICAgOiBkYXRhUGF0aFxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLCB0aGlzLmRhdGFQYXRoLCB0aGlzLmhhc093bkRhdGEsIGZ1bGxEYXRhUGF0aClcbiAgICAgICAgLy8gQ29udmVydCBmcm9tIEphdmFTY3JpcHQgcHJvcGVydHkgYWNjZXNzIG5vdGF0aW9uLCB0byBvdXIgb3duIGZvcm1cbiAgICAgICAgLy8gb2YgcmVsYXRpdmUgSlNPTiBwb2ludGVycyBhcyBkYXRhLXBhdGhzOlxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChmdWxsRGF0YVBhdGgpXG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKSkge1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgLy8gQ291bGRuJ3QgZmluZCBhIGNvbXBvbmVudCBpbiBhbiBhY3RpdmUgZm9ybSBmb3IgdGhlIGdpdmVuIGRhdGFQYXRoLlxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIGNvbXBvbmVudCBzZXJ2aW5nIGEgcGFydCBvZiB0aGUgZGF0YVBhdGgsXG4gICAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICBjb25zdCBuYXZpZ2F0ZWQgPSBhd2FpdCBjb21wb25lbnQubmF2aWdhdGVUb0NvbXBvbmVudD8uKFxuICAgICAgICAgICAgICAgIGZ1bGxEYXRhUGF0aCxcbiAgICAgICAgICAgICAgICBzdWJDb21wb25lbnRzID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzdWJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXJyb3JzKS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAoW2RhdGFQYXRoXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpLnN0YXJ0c1dpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmRhdGFQYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG1hdGNoZWQpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMobWF0Y2hlZCwgZmlyc3QgJiYgZm9jdXMpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG5hdmlnYXRlZCkge1xuICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgbmVzdGVkIGZvcm0gdG8gZGlzcGxheSBhdCBsZWFzdCBwYXJ0cyBmbyB0aGUgZXJyb3JzLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHNob3cgYWxsIGVycm9ycyBhdCBvbmNlLCBzbyB3ZSdyZSBkb25lLiBEb24ndCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYG5vdGlmeUVycm9ycygpYCB5ZXQsIGFzIHdlIGNhbiBvbmx5IGRpc3BsYXkgaXQgb25jZVxuICAgICAgICAgICAgICAgIC8vIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCB3YXMgY2FsbGVkIGZyb20gYERpdG9Gb3JtLm1vdW50ZWQoKWBcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RpbGwgaGVyZSwgc28ga2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gV2hlbiB0aGUgZXJyb3IgY2FuJ3QgYmUgbWF0Y2hlZCwgYWRkIGl0IHRvIGEgbGlzdCBvZiB1bm1hdGNoZWRcbiAgICAgICAgICAvLyBlcnJvcnMgd2l0aCBkZWNlbnQgbWVzc2FnZSwgdG8gcmVwb3J0IGF0IHRoZSBlbmQuXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBsYWJlbGl6ZShwcm9wZXJ0eSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSBmaWVsZFxuICAgICAgICAgICAgICA/IGBUaGUgZmllbGQgJHtmaWVsZH1gXG4gICAgICAgICAgICAgIDogYFRoZSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKGAke3ByZWZpeH0gJHtlcnIubWVzc2FnZX1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAod2FzRmlyc3QgJiYgIWZpcnN0KSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKHVubWF0Y2hlZC5qb2luKCdcXG4nKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiAhZmlyc3RcbiAgICB9LFxuXG4gICAgbm90aWZ5RXJyb3JzKG1lc3NhZ2UpIHtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdWYWxpZGF0aW9uIEVycm9ycycsXG4gICAgICAgIHRleHQ6IG1lc3NhZ2UgfHwgJ1BsZWFzZSBjb3JyZWN0IHRoZSBoaWdobGlnaHRlZCBlcnJvcnMuJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVzZXREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGB0aGlzLmRhdGEgPSAuLi5gIGJlY2F1c2UgaXQncyBhIHByb3BlcnR5LCBidXQgd2UgY2FuIHNldFxuICAgICAgLy8gYWxsIGtub3duIHByb3BlcnRpZXMgb24gaXQgdG8gdGhlIHZhbHVlcyByZXR1cm5lZCBieVxuICAgICAgLy8gYHNldERlZmF1bHRWYWx1ZXMoKWAsIGFzIHRoZXkgYXJlIGFsbCByZWFjdGl2ZSBhbHJlYWR5IGZyb20gdGhlIHN0YXJ0czpcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXRhLCBzZXREZWZhdWx0VmFsdWVzKHRoaXMuZGF0YVNjaGVtYSwge30sIHRoaXMpKVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICAgIGlmICghZXF1YWxzKHRoaXMuZGF0YVtuYW1lXSwgZGF0YVtuYW1lXSkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgICAgIHRoaXMuZGF0YVtuYW1lXSA9IGRhdGFbbmFtZV1cbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKSkge1xuICAgICAgICAgICAgICBjb21wb25lbnQubWFya0RpcnR5KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZmlsdGVyRGF0YShkYXRhKSB7XG4gICAgICAvLyBGaWx0ZXJzIG91dCBhcnJheXMgYW5kIG9iamVjdHMgdGhhdCBhcmUgYmFja2VkIGJ5IGRhdGEgcmVzb3VyY2VzXG4gICAgICAvLyB0aGVtc2VsdmVzLCBhcyB0aG9zZSBhcmUgYWxyZWFkeSB0YWtlbiBjYXJlIG9mIHRocm91Z2ggdGhlaXIgb3duIEFQSVxuICAgICAgLy8gcmVzb3VyY2UgZW5kLXBvaW50cyBhbmQgc2hvdWxkbid0IGJlIHNldC5cbiAgICAgIGNvbnN0IGxvY2FsRGF0YSA9IHt9XG4gICAgICBjb25zdCBmb3JlaWduRGF0YSA9IHt9XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSlcbiAgICAgICAgICBpZiAoY29tcG9uZW50cy5zb21lKGNvbXBvbmVudCA9PiBjb21wb25lbnQucHJvdmlkZXNEYXRhKSkge1xuICAgICAgICAgICAgZm9yZWlnbkRhdGFbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbG9jYWxEYXRhW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGxvY2FsRGF0YSwgZm9yZWlnbkRhdGEgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzRGF0YSh7IHRhcmdldCA9ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5ID0gdHJ1ZSB9ID0ge30pIHtcbiAgICAgIHJldHVybiBwcm9jZXNzRGF0YShcbiAgICAgICAgdGhpcy5kYXRhU2NoZW1hLFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICB7XG4gICAgICAgICAgLy8gTmVlZGVkIGZvciBEaXRvQ29udGV4dCBoYW5kbGluZyBpbnNpZGUgYHByb2Nlc3NEYXRhYCBhbmRcbiAgICAgICAgICAvLyBgcHJvY2Vzc1NjaGVtYURhdGEoKWA6XG4gICAgICAgICAgcm9vdERhdGE6IHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIHNjaGVtYU9ubHksXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnQoKWAgaXMgb25seSBzZXQgaWYgb25lIG9mIHRoZSBhbmNlc3RvcnMgdXNlc1xuICAgICAgLy8gdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgICB0aGlzLiRzY2hlbWFQYXJlbnRDb21wb25lbnQoKT8uX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5LCBjb21wb25lbnQsIGFkZClcbiAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgd2l0aCB0aGUgcGFyZW50IGlmIHNjaGVtYSBzaGFyZXMgZGF0YSB3aXRoIGl0LlxuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/Ll9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZShwYW5lLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lc1JlZ2lzdHJ5LCBwYW5lLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmVsKHBhbmVsLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lbHNSZWdpc3RyeSwgcGFuZWwsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyRW50cnkocmVnaXN0cnksIGVudHJ5LCBhZGQpIHtcbiAgICAgIGNvbnN0IHVpZCA9IGVudHJ5LiR1aWRcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgcmVnaXN0cnlbdWlkXSA9IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgcmVnaXN0cnlbdWlkXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfbGlzdEVudHJpZXNCeURhdGFQYXRoKHJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZWdpc3RyeSkucmVkdWNlKChlbnRyaWVzQnlEYXRhUGF0aCwgZW50cnkpID0+IHtcbiAgICAgICAgLy8gTXVsdGlwbGUgZW50cmllcyBjYW4gYmUgbGlua2VkIHRvIHRoZSBzYW1lIGRhdGEtcGF0aCwgZS5nLiB3aGVuXG4gICAgICAgIC8vIHRoZXJlIGFyZSB0YWJzLiBMaW5rIGVhY2ggZGF0YS1wYXRoIHRvIGFuIGFycmF5IG9mIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YVBhdGggfSA9IGVudHJ5XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSAoZW50cmllc0J5RGF0YVBhdGhbZGF0YVBhdGhdIHx8PSBbXSlcbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhcbiAgICAgIH0sIHt9KVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllcyhlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCkuc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICA/IHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICAgICAgOiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoW25vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKV0gfHwgW11cbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIG5hbWUpIHtcbiAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFthcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKV0gfHwgW11cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zY2hlbWEge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gID4gLmRpdG8tc2NoZW1hLWhlYWRlciArIC5kaXRvLXNjaGVtYS1jb250ZW50ID4gLmRpdG8tcGFuZSB7XG4gICAgbWFyZ2luLXRvcDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICB9XG5cbiAgJjpoYXMoPiAuZGl0by1zY2hlbWEtY29udGVudCArIC5kaXRvLWVkaXQtYnV0dG9ucykge1xuICAgIC8vIERpc3BsYXkgdGhlIGlubGluZWQgZWRpdCBidXR0b25zIHRvIHRoZSByaWdodCBvZiB0aGUgc2NoZW1hOlxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcblxuICAgID4gLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICAgIGZsZXg6IDEgMCAwJTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICAgIH1cbiAgfVxuXG4gID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgIGZsZXg6IDAgMSAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAvLyBTbyB0aGF0IHNjaGVtYSBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbS5cbiAgICAvLyBOT1RFOiBXZSBhbHNvIG5lZWQgZ3JpZCBmb3IgYFRyYW5zaXRpb25IZWlnaHRgIHRvIHdvcmsgd2VsbC4gU3dpdGNoaW5nXG4gICAgLy8gdG8gZmxleCBib3ggaGVyZSBjYXVzZXMganVtcHkgY29sbGFwc2luZyB0cmFuc2l0aW9ucy5cbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxMDAlO1xuXG4gICAgPiA6b25seS1jaGlsZCB7XG4gICAgICBncmlkLXJvdy1lbmQ6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgLmRpdG8taGVhZGVyICYge1xuICAgIC8vIFdoZW4gdGVsZXBvcnRlZCBpbnRvIG1haW4gaGVhZGVyLlxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgfVxuXG4gIC5kaXRvLWxhYmVsICYge1xuICAgIC8vIFdoZW4gdGVsZXBvcnRlZCBpbnRvIGNvbnRhaW5lciBsYWJlbC5cbiAgICBmbGV4OiAxO1xuICB9XG5cbiAgPiAuZGl0by1sYWJlbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG4gID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLWJ1dHRvbi1tYXJnaW4sIDApO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbkRpdG9TY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbiAgOnNjaGVtYT1cInNjaGVtYVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICA6cGFkZGluZz1cInBhZGRpbmcgPz8gJ2lubGluZWQnXCJcbiAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICA6Z2VuZXJhdGVMYWJlbHM9XCIhaXNDb21wYWN0XCJcbiAgOmxhYmVsTm9kZT1cImxhYmVsTm9kZVwiXG4gIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4pXG4gIC8vLSBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2NoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gIC8vLSBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNDb21wYWN0IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NoZW1hSW5saW5lZCcsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhZGRpbmc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbGFiZWxOb2RlOiB7IHR5cGU6IEhUTUxFbGVtZW50LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIGlzQ29tcGFjdCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNDb21wYWN0ICYmICEhdGhpcy5sYWJlbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNjaGVtYS1pbmxpbmVkIHtcbiAgLy8gVXNlIGdyaWQgbGF5b3V0IGZvciB0d28gcmVhc29uczogRm9yIGBUcmFuc2l0aW9uSGVpZ2h0YCB0byB3b3JrIHNtb290aGx5LFxuICAvLyBhbmQgdG8gYWxpZ24gdGhlIGhlYWRlciBhYm92ZSB0aGUgY29udGVudCB3aGVuIHRoZSBoZWFkZXIgaXMgbm90IHRlbGVwb3J0ZWRcbiAgLy8gb3V0c2lkZSBvZiB0aGUgc2NoZW1hLlxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDEwMCU7XG5cbiAgJjpub3QoOmhvdmVyLCAuZGl0by1zY2hlbWEtLW9wZW4pIHtcbiAgICA+IC5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICAgICAgPiAuZGl0by1jbGlwYm9hcmQge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlL25vLXRlbXBsYXRlLXNoYWRvdyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYW5lKFxuICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVBhbmVcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0sIGluZGV4IGluIGNvbXBvbmVudFNjaGVtYXNgXG4gIClcbiAgICAvLy0gVXNlIDxzcGFuPiBmb3IgLmRpdG8tYnJlYWsgc28gd2UgY2FuIHVzZSBgLmRpdG8tY29udGFpbmVyOmZpcnN0LW9mLXR5cGVgXG4gICAgLy8tIHNlbGVjdG9yLlxuICAgIHNwYW4uZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJbJ2JlZm9yZScsICdib3RoJ10uaW5jbHVkZXMoc2NoZW1hLmJyZWFrKVwiXG4gICAgKVxuICAgIERpdG9Db250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSlcIlxuICAgICAgcmVmPVwiY29udGFpbmVyc1wiXG4gICAgICA6a2V5PVwibmVzdGVkRGF0YVBhdGhcIlxuICAgICAgOmRhdGEtaW5kZXg9XCJpbmRleFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgOnZlcnRpY2FsTGFiZWxzPVwiaXNJbkxhYmVsZWRSb3coaW5kZXgpXCJcbiAgICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4gICAgKVxuICAgIHNwYW4uZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJbJ2FmdGVyJywgJ2JvdGgnXS5pbmNsdWRlcyhzY2hlbWEuYnJlYWspXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBDb250ZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL0NvbnRleHRNaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzTmVzdGVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYW5lJywge1xuICBtaXhpbnM6IFtDb250ZXh0TWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMudGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGFiOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhZGRpbmc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFjY3VtdWxhdGVkQmFzaXM6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwb3NpdGlvbnM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbmVzdGVkKCkge1xuICAgICAgLy8gRm9yIGBDb250ZXh0TWl4aW5gOlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1wYW5lLS1zaW5nbGUnOiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50LFxuICAgICAgICBbYGRpdG8tcGFuZS0tcGFkZGluZy0ke3RoaXMucGFkZGluZ31gXTogISF0aGlzLnBhZGRpbmdcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFiID8gdGhpcyA6IHRoaXMuJHRhYkNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgY29tcG9uZW50cyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5c1xuICAgICAgLy8gYW5kIGFkZHMgdGhlIGtleSBhcyB0aGUgbmFtZSB0byBlYWNoIGNvbXBvbmVudCwgdXNlZCBmb3IgbGFiZWxzLCBldGMuXG4gICAgICAvLyBOT1RFOiBzY2hlbWEgY2FuIGJlIG51bGwgd2hpbGUgbXVsdGktZm9ybSBsaXN0cyBsb2FkIHRoZWlyIGRhdGEsXG4gICAgICAvLyBiZWNhdXNlIG9ubHkgdGhlIGF2YWlsYWJsZSBkYXRhIHdpbGwgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGZvcm0uXG4gICAgICAvLyBXaGVuIGVkaXRpbmcgcHJpbWl0aXZlIHZhbHVlcyB0aHJvdWdoIGEgZm9ybSwgZG8gbm90IGFwcGVuZCAnbmFtZScgdG9cbiAgICAgIC8vIHRoZSBjb21wb25lbnQncyBkYXRhUGF0aCBzbyBpdCBjYW4gYmUgbWFwcGVkIHRvIGZyb20gdmFsaWRhdGlvbiBlcnJvcnMuXG4gICAgICAvLyBOT1RFOiBOb3QgYWxsIHNjaGVtYXMgLyBjb21wb25lbnRzIGhhdmUgYSBzb3VyY2VTY2hlbWEsIGUuZy4gZGlhbG9ncy5cbiAgICAgIGNvbnN0IHdyYXBQcmltaXRpdmVzID0gdGhpcy5zb3VyY2VTY2hlbWE/LndyYXBQcmltaXRpdmVzXG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWE/LmNvbXBvbmVudHMgfHwge30pLm1hcChcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgLy8gQWx3YXlzIGFkZCBuYW1lIHRvIGNvbXBvbmVudCBzY2hlbWEuXG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgICAgLy8gU2hhcmUgZGF0YVBhdGggYW5kIHN0b3JlIHdpdGggcGFyZW50IGlmIG5vdCBuZXN0ZWQ6XG4gICAgICAgICAgY29uc3QgbmVzdGVkID0gaXNOZXN0ZWQoc2NoZW1hKVxuICAgICAgICAgIGNvbnN0IG5lc3RlZERhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgZGF0YVBhdGg6XG4gICAgICAgICAgICAgIG5lc3RlZCAmJiAhd3JhcFByaW1pdGl2ZXNcbiAgICAgICAgICAgICAgICA/IG5lc3RlZERhdGFQYXRoXG4gICAgICAgICAgICAgICAgOiB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgICBzdG9yZTogdGhpcy5nZXRDaGlsZFN0b3JlKG5hbWUpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2luZ2xlICYmIHRoaXMuY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPT09IDFcbiAgICB9LFxuXG4gICAgdmVydGljYWxMYWJlbHNCeUluZGljZXMoKSB7XG4gICAgICBjb25zdCB7IHBvc2l0aW9ucyB9ID0gdGhpc1xuXG4gICAgICBjb25zdCBpc0xhc3RJblJvdyA9IGluZGV4ID0+IChcbiAgICAgICAgcG9zaXRpb25zW2luZGV4XSAmJiAoXG4gICAgICAgICAgaW5kZXggPT09IHBvc2l0aW9ucy5sZW5ndGggLSAxIHx8XG4gICAgICAgICAgZmluZE5leHRQb3NpdGlvbihpbmRleCkudG9wID4gcG9zaXRpb25zW2luZGV4XS50b3BcbiAgICAgICAgKVxuICAgICAgKVxuXG4gICAgICBjb25zdCBmaW5kTmV4dFBvc2l0aW9uID0gaW5kZXggPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXggKyAxOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHBvc2l0aW9uc1tpXSkgcmV0dXJuIHBvc2l0aW9uc1tpXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvd3MgPSBbXVxuICAgICAgbGV0IHJvdyA9IFtdXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcG9zaXRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByb3cucHVzaChpbmRleClcbiAgICAgICAgaWYgKGlzTGFzdEluUm93KGluZGV4KSkge1xuICAgICAgICAgIHJvd3MucHVzaChyb3cpXG4gICAgICAgICAgcm93ID0gW11cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJvdy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJvd3MucHVzaChyb3cpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzID0gW11cblxuICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgICBsZXQgaGFzTGFiZWxzSW5Sb3cgPSBmYWxzZVxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHJvdykge1xuICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbnNbaW5kZXhdXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcG9zaXRpb24/LmhlaWdodCA+IDIgJiYgKFxuICAgICAgICAgICAgICBwb3NpdGlvbi5ub2RlLm1hdGNoZXMoJzpoYXMoPiAuZGl0by1sYWJlbCknKSB8fFxuICAgICAgICAgICAgICBwb3NpdGlvbi5ub2RlXG4gICAgICAgICAgICAgICAgLmNsb3Nlc3QoJy5kaXRvLWNvbnRhaW5lcicpXG4gICAgICAgICAgICAgICAgLm1hdGNoZXMoJy5kaXRvLWNvbnRhaW5lci0tbGFiZWwtdmVydGljYWwnKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gVE9ETzogSGFuZGxlIG5lc3RlZCBzY2hlbWFzLCBlLmcuICdzZWN0aW9uJyBvciAnb2JqZWN0JyBhbmRcbiAgICAgICAgICAgIC8vIGRldGVjdCBsYWJlbHMgdGhlcmUgdG9vLlxuICAgICAgICAgICAgaGFzTGFiZWxzSW5Sb3cgPSB0cnVlXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHJvdykge1xuICAgICAgICAgIHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzW2luZGV4XSA9IGhhc0xhYmVsc0luUm93XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJ2NvbXBvbmVudFNjaGVtYXMubGVuZ3RoJyhsZW5ndGgpIHtcbiAgICAgIHRoaXMucG9zaXRpb25zLmxlbmd0aCA9IGxlbmd0aFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lKHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICBpZiAodGhpcy50YWIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlci5wdXNoKHsgaGFzaDogYCMke3RoaXMudGFifWAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25SZXNpemVQYW5lKCkge1xuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbnRhaW5lciBvZiB0aGlzLiRyZWZzLmNvbnRhaW5lcnMpIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gY29udGFpbmVyLiRlbFxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gK25vZGUuZGF0YXNldC5pbmRleFxuICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgICBjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUobm9kZSlcbiAgICAgICAgICBjb25zdCBwYWRkaW5nID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nKVxuICAgICAgICAgIGNvbnN0IGZvbnRTaXplID0gcGFyc2VGbG9hdChzdHlsZS5mb250U2l6ZSlcbiAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3VuZHMuaGVpZ2h0IC0gMiAqIHBhZGRpbmdcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uc1tpbmRleF0gPVxuICAgICAgICAgICAgaGVpZ2h0IDw9IDBcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgdG9wOiBib3VuZHMueSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0IC8gZm9udFNpemUsXG4gICAgICAgICAgICAgICAgICBub2RlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBpc0luTGFiZWxlZFJvdyhpbmRleCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52ZXJ0aWNhbExhYmVsc0J5SW5kaWNlc1tpbmRleF1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lIHtcbiAgJHNlbGY6ICY7XG4gICRyb290LXBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmcgLSAkZm9ybS1zcGFjaW5nLWhhbGY7XG5cbiAgLS1wYW5lLXBhZGRpbmc6IDBweDtcbiAgLS1jb250YWluZXItcGFkZGluZzogI3skZm9ybS1zcGFjaW5nLWhhbGZ9O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC8vIFJlbW92ZSB0aGUgcGFkZGluZyBhZGRlZCBieSBgLmRpdG8tY29udGFpbmVyYCBpbnNpZGUgYC5kaXRvLXBhbmVgOlxuICBtYXJnaW46IC0kZm9ybS1zcGFjaW5nLWhhbGY7XG4gIHBhZGRpbmc6IHZhcigtLXBhbmUtcGFkZGluZyk7XG4gIC8vIFVzZSBgZmxleDogMCVgIGZvciBhbGwgYC5kaXRvLXBhbmVgIGV4Y2VwdCBgLmRpdG8tcGFuZV9fbWFpbmAsXG4gIC8vIHNvIHRoYXQgdGhlIGAuZGl0by1idXR0b25zLW1haW5gIGNhbiBiZSBtb3ZlZCBhbGwgdGhlIHdheSB0byB0aGUgYm90dG9tLlxuICBmbGV4OiAwJTtcblxuICAmX19tYWluIHtcbiAgICBmbGV4OiAxMDAlO1xuICB9XG5cbiAgJi0tcGFkZGluZy1yb290IHtcbiAgICAvLyBBIHJvb3QtbGV2ZWwgcGFuZSBpbnNpZGUgYSBzY3JvbGwgdmlldy4gQ2xlYXIgbmVnYXRpdmUgbWFyZ2luIGZyb20gYWJvdmUuXG4gICAgbWFyZ2luOiAwO1xuICAgIC8vIE1vdmUgdGhlIG5lZ2F0aXZlIG1hcmdpbiB1c2VkIHRvIHJlbW92ZSB0aGUgcGFkZGluZyBhZGRlZCBieVxuICAgIC8vIGAuZGl0by1jb250YWluZXJgIGluc2lkZSBgLmRpdG8tcGFuZWAgdG8gdGhlIHBhZGRpbmc6XG4gICAgLS1wYW5lLXBhZGRpbmc6ICN7JHJvb3QtcGFkZGluZ307XG5cbiAgICAmI3skc2VsZn0tLXNpbmdsZSB7XG4gICAgICAtLXBhbmUtcGFkZGluZzogI3skY29udGVudC1wYWRkaW5nfTtcbiAgICAgIC0tY29udGFpbmVyLXBhZGRpbmc6IDBweDtcbiAgICB9XG5cbiAgICAmOmhhcyg+IC5kaXRvLWNvbnRhaW5lci0tbGFiZWwtdmVydGljYWw6Zmlyc3Qtb2YtdHlwZSkge1xuICAgICAgLy8gUmVkdWNlIHRvcCBzcGFjaW5nIHdoZW4gdGhlIGZpcnN0IHJvdyBoYXMgbGFiZWxzLlxuICAgICAgbWFyZ2luLXRvcDogLSRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICB9XG5cbiAgICAvLyBEaXNwbGF5IGEgcnVsZXIgYmV0d2VlbiB0YWJiZWQgY29tcG9uZW50cyBhbmQgdG93YXJkcyB0aGUgLmRpdG8tYnV0dG9uc1xuICAgICZfX3RhYiArICZfX21haW4ge1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgLy8gVXNlIGEgcHNldWRvIGVsZW1lbnQgdG8gZGlzcGxheSBhIHJ1bGVyIHdpdGggcHJvcGVyIG1hcmdpbnNcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZTtcbiAgICAgICAgLy8gU2hpZnQgcnVsZXIgdXAgYnkgJHJvb3QtcGFkZGluZyB0byBleGNsdWRlIHJlbW92ZWQgJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgICAgIG1hcmdpbjogKC0kcm9vdC1wYWRkaW5nKSAkZm9ybS1zcGFjaW5nLWhhbGYgJHJvb3QtcGFkZGluZztcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX21haW4gKyAuZGl0by1idXR0b25zLW1haW4ge1xuICAgICAgLy8gTmVlZGVkIGZvcm1zIHdpdGggc3RpY2t5IG1haW4gYnV0dG9ucy5cbiAgICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuICB9XG5cbiAgJi0tcGFkZGluZy1pbmxpbmVkIHtcbiAgICAtLXBhbmUtcGFkZGluZzogMHB4O1xuICB9XG5cbiAgJi0tcGFkZGluZy1uZXN0ZWQge1xuICAgIC0tcGFuZS1wYWRkaW5nOiAjeyRmb3JtLXNwYWNpbmd9O1xuXG4gICAgJjpoYXMoPiAuZGl0by1jb250YWluZXItLWxhYmVsLXZlcnRpY2FsOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgIC8vIFJlZHVjZSB0b3Agc3BhY2luZyB3aGVuIHRoZSBmaXJzdCByb3cgaGFzIGxhYmVscy5cbiAgICAgIHBhZGRpbmctdG9wOiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnJlYWsge1xuICAgIC8vIGAuZGl0by1icmVha2AgaXMgcmVuZGVyZWQgYXMgPHNwYW4+IHNvIHdlIGNhbiB1c2UgdGhlXG4gICAgLy8gYC5kaXRvLWNvbnRhaW5lcjpmaXJzdC1vZi10eXBlYCBzZWxlY3RvciB0byBtYXRjaCB0aGUgZmlyc3QgY29udGFpbmVyXG4gICAgLy8gZXZlbiBpZiBpdCBoYXMgYSBicmVhayBiZWZvcmUgaXQuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogMTAwJTtcbiAgICBoZWlnaHQ6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyYWN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IG1hdGNoID0gKFxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJlxuICAgIHZhbHVlLm1hdGNoKC9eXFxzKihbKy1dP1xcZCspXFxzKlxcL1xccyooWystXT9cXGQrKVxccyokLylcbiAgKVxuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbLCBkaXZpZGVuZCwgZGl2aXNvcl0gPSBtYXRjaFxuICAgIHJldHVybiBwYXJzZUZsb2F0KGRpdmlkZW5kKSAvIHBhcnNlRmxvYXQoZGl2aXNvcilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSlcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNvbnRhaW5lcihcbiAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzZXNcIlxuICA6c3R5bGU9XCJjb250YWluZXJTdHlsZXNcIlxuKVxuICBUZWxlcG9ydChcbiAgICB2LWlmPVwiaXNNb3VudGVkICYmIHBhbmVsRW50cmllcy5sZW5ndGggPiAwXCJcbiAgICB0bz1cIi5kaXRvLXNpZGViYXJfX3RlbGVwb3J0XCJcbiAgKVxuICAgIERpdG9QYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxFbnRyaWVzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgRGl0b0xhYmVsKFxuICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgOmNsYXNzPVwibGFiZWxDbGFzc2VzXCJcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOmRhdGFQYXRoPVwibGFiZWxEYXRhUGF0aFwiXG4gICAgOmluZm89XCJpbmZvXCJcbiAgKVxuICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgdi1pZj1cIiEoaGFzTGFiZWwgJiYgaXNMYWJlbClcIlxuICAgIDppcz1cInR5cGVDb21wb25lbnRcIlxuICAgIHJlZj1cImNvbXBvbmVudFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3Nlc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOndpZHRoPVwid2lkdGhcIlxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6c2luZ2xlPVwic2luZ2xlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJjb21iaW5lZEJhc2lzXCJcbiAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICApXG4gIERpdG9FcnJvcnMoOmVycm9ycz1cImVycm9yc1wiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBpc051bWJlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFZhbHVlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbHVlTWl4aW4uanMnXG5pbXBvcnQgQ29udGV4dE1peGluIGZyb20gJy4uL21peGlucy9Db250ZXh0TWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0QWxsUGFuZWxFbnRyaWVzLFxuICBnZXRUeXBlQ29tcG9uZW50LFxuICBoYXNMYWJlbCxcbiAgb21pdFNwYWNpbmdcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcGFyc2VGcmFjdGlvbiB9IGZyb20gJy4uL3V0aWxzL21hdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0NvbnRhaW5lcicsIHtcbiAgbWl4aW5zOiBbVmFsdWVNaXhpbiwgQ29udGV4dE1peGluXSxcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdmVydGljYWxMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudHlwZVxuICAgIH0sXG5cbiAgICB0eXBlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIGdldFR5cGVDb21wb25lbnQodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICBpc0xhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2xhYmVsJ1xuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiBoYXNMYWJlbCh0aGlzLnNjaGVtYSwgdGhpcy5nZW5lcmF0ZUxhYmVscylcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNMYWJlbCA/IHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpIDogbnVsbFxuICAgIH0sXG5cbiAgICBsYWJlbERhdGFQYXRoKCkge1xuICAgICAgLy8gVW5uZXN0ZWQgdHlwZXMgZG9uJ3QgaGF2ZSBhIGRhdGFQYXRoIGZvciB0aGVtc2VsdmVzLCBkb24ndCB1c2UgaXQ6XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLmRhdGFQYXRoIDogbnVsbFxuICAgIH0sXG5cbiAgICBpbmZvOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5mbycsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIHdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZUNvbXBvbmVudD8uZGVmYXVsdFdpZHRoXG4gICAgICB9LFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIC8vIFVzZSAxMDAlID09IDEuMCBhcyBkZWZhdWx0IHdpZHRoIHdoZW4gbm90aGluZyBpcyBzZXQ6XG4gICAgICAgIHJldHVybiB3aWR0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAxLjBcbiAgICAgICAgICA6IGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccypbPD5dP1xccyooLiopJC8pWzFdIC8vIFJlbW92ZSB3aWR0aCBvcGVyYXRvclxuICAgICAgICAgICAgOiB3aWR0aFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgd2lkdGhPcGVyYXRvcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKihbPD5dPykvKVsxXSB8fCBudWxsXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRWaXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlQ29tcG9uZW50Py5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50RGlzYWJsZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkaXNhYmxlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkaXNhYmxlZCkge1xuICAgICAgICByZXR1cm4gZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZmxleEdyb3coKSB7XG4gICAgICAvLyBJbnRlcnByZXQgJz41MCUnIGFzICc1MCUsIGZsZXgtZ3JvdzogMWBcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMud2lkdGhPcGVyYXRvciA9PT0gJz4nIHx8XG4gICAgICAgIHRoaXMud2lkdGggPT09ICdmaWxsJ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICBmbGV4U2hyaW5rKCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc8NTAlJyBhcyAnNTAlLCBmbGV4LXNocmluazogMWBcbiAgICAgIHJldHVybiB0aGlzLndpZHRoT3BlcmF0b3IgPT09ICc8J1xuICAgIH0sXG5cbiAgICBmbGV4QmFzaXMoKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IHRoaXMud2lkdGhcbiAgICAgIC8vICdhdXRvJyA9IG5vIGZpdHRpbmc6XG4gICAgICByZXR1cm4gW251bGwsICdhdXRvJywgJ2ZpbGwnXS5pbmNsdWRlcyh3aWR0aClcbiAgICAgICAgPyAnYXV0bydcbiAgICAgICAgOiAvJSQvLnRlc3Qod2lkdGgpXG4gICAgICAgICAgPyBwYXJzZUZsb2F0KHdpZHRoKSAvIDEwMCAvLyBwZXJjZW50YWdlIC0+IGZyYWN0aW9uXG4gICAgICAgICAgOiAvW2Etel0vLnRlc3Qod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoIC8vIG5hdGl2ZSB1bml0c1xuICAgICAgICAgICAgOiBwYXJzZUZyYWN0aW9uKHdpZHRoKSAvLyBmcmFjdGlvblxuICAgIH0sXG5cbiAgICBjb21iaW5lZEJhc2lzKCkge1xuICAgICAgY29uc3QgeyBhY2N1bXVsYXRlZEJhc2lzLCBmbGV4QmFzaXMgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc051bWJlcihhY2N1bXVsYXRlZEJhc2lzKSAmJiBpc051bWJlcihmbGV4QmFzaXMpXG4gICAgICAgID8gYWNjdW11bGF0ZWRCYXNpcyAqIGZsZXhCYXNpc1xuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgY29udGFpbmVyQ2xhc3NlcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IGNsYXNzZXMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1jb250YWluZXInXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYCR7cHJlZml4fS0tc2luZ2xlYF06IHRoaXMuc2luZ2xlLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IHRoaXMuY29tcG9uZW50RGlzYWJsZWQsXG4gICAgICAgICdkaXRvLWhhcy1lcnJvcnMnOiAhIXRoaXMuZXJyb3JzLFxuICAgICAgICBbYCR7cHJlZml4fS0tbGFiZWwtdmVydGljYWxgXTogdGhpcy52ZXJ0aWNhbExhYmVscyxcbiAgICAgICAgW2Ake3ByZWZpeH0tLW9taXQtc3BhY2luZ2BdOiBvbWl0U3BhY2luZyh0aGlzLnNjaGVtYSksXG4gICAgICAgIC4uLihpc1N0cmluZyhjbGFzc2VzKSA/IHsgW2NsYXNzZXNdOiB0cnVlIH0gOiBjbGFzc2VzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb250YWluZXJTdHlsZXMoKSB7XG4gICAgICBjb25zdCB7IGZsZXhCYXNpcywgY29tYmluZWRCYXNpcyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJy0tZ3Jvdyc6IHRoaXMuZmxleEdyb3cgPyAxIDogMCxcbiAgICAgICAgJy0tc2hyaW5rJzogdGhpcy5mbGV4U2hyaW5rID8gMSA6IDAsXG4gICAgICAgICctLWJhc2lzJzogaXNOdW1iZXIoZmxleEJhc2lzKSA/IGAke2ZsZXhCYXNpcyAqIDEwMH0lYCA6IGZsZXhCYXNpcyxcbiAgICAgICAgJy0tYmFzaXMtbW9iaWxlJzpcbiAgICAgICAgICBpc051bWJlcihjb21iaW5lZEJhc2lzKSAmJiBjb21iaW5lZEJhc2lzIDw9IDAuMjVcbiAgICAgICAgICAgID8gYCR7ZmxleEJhc2lzICogMjAwfSVgXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50Q2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXNpbmdsZSc6IHRoaXMuc2luZ2xlLFxuICAgICAgICAuLi50aGlzLmxheW91dENsYXNzZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbGF5b3V0Q2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXdpZHRoLWZpbGwnOiB0aGlzLndpZHRoID09PSAnZmlsbCcgfHwgdGhpcy5mbGV4QmFzaXMgIT09ICdhdXRvJyxcbiAgICAgICAgJ2RpdG8td2lkdGgtZ3Jvdyc6IHRoaXMuZmxleEdyb3csXG4gICAgICAgICdkaXRvLXdpZHRoLXNocmluayc6IHRoaXMuZmxleFNocmlua1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsYWJlbENsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1sYWJlbC0tdmlzaWJsZSc6IHRoaXMuaXNMYWJlbCxcbiAgICAgICAgLi4udGhpcy5sYXlvdXRDbGFzc2VzXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhbmVsRW50cmllcygpIHtcbiAgICAgIHJldHVybiBnZXRBbGxQYW5lbEVudHJpZXMoXG4gICAgICAgIHRoaXMuYXBpLFxuICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgdGhpcy4kcmVmcy5jb21wb25lbnQsXG4gICAgICAgIHRoaXMudGFiQ29tcG9uZW50XG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkVycm9ycyhlcnJvcnMpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY29udGFpbmVyIHtcbiAgLS1ncm93OiAwO1xuICAtLXNocmluazogMTtcbiAgLS1iYXNpczogYXV0bztcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IHZhcigtLWdyb3cpIHZhcigtLXNocmluaykgdmFyKC0tYmFzaXMpO1xuICBmbGV4LWZsb3c6IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC8vIFRvIHByZXZlbnQgbGlzdCB0YWJsZXMgZnJvbSBibG93aW5nIG91dCBvZiB0aGVpciBmbGV4IGJveCBjb250YWluZXJzLlxuICBtYXgtd2lkdGg6IDEwMCU7XG4gIC8vIENhbm5vdCB1c2UgbWFyZ2luIGhlcmUgYXMgaXQgbmVlZHMgdG8gYmUgcGFydCBvZiBib3gtc2l6aW5nIGZvclxuICAvLyBwZXJjZW50YWdlcyBpbiBmbGV4LWJhc2lzIHRvIHdvcmsuXG4gIHBhZGRpbmc6IHZhcigtLWNvbnRhaW5lci1wYWRkaW5nKTtcblxuICA+IC5kaXRvLWxhYmVsOm5vdCguZGl0by1sYWJlbC0tdmlzaWJsZSk6b25seS1jaGlsZCB7XG4gICAgLy8gVXNlZCBlLmcuIHdoZW4gc291cmNlcyBoaWRlIHRoZW1zZWx2ZXMgZHVlIHRvIG1heERlcHRoLCBidXQgdGhlIGxhYmVsXG4gICAgLy8gaXMgcmVuZGVyZWQgYWJvdmUgaXQuXG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gICY6ZW1wdHkge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAuZGl0by1wYW5lID4gJiB7XG4gICAgLmRpdG8tcGFnZS0td2lkdGgtODAgJiB7XG4gICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICBmbGV4LWJhc2lzOiB2YXIoLS1iYXNpcy1tb2JpbGUsIHZhcigtLWJhc2lzKSk7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogeWVsbG93O1xuICAgIH1cblxuICAgIC5kaXRvLXBhZ2UtLXdpZHRoLTYwICYge1xuICAgICAgZmxleC1iYXNpczogY2FsYygyICogdmFyKC0tYmFzaXMpKTtcbiAgICAgIC8vIERFQlVHOiBiYWNrZ3JvdW5kOiBvcmFuZ2U7XG4gICAgfVxuXG4gICAgLmRpdG8tc2lkZWJhci0td2lkdGgtOTkgJiB7XG4gICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogeWVsbG93O1xuICAgIH1cblxuICAgIC5kaXRvLXNpZGViYXItLXdpZHRoLTYwICYge1xuICAgICAgZmxleC1iYXNpczogY2FsYygyICogdmFyKC0tYmFzaXMpKTtcbiAgICAgIC8vIERFQlVHOiBiYWNrZ3JvdW5kOiBvcmFuZ2U7XG4gICAgfVxuICB9XG5cbiAgJi0tc2luZ2xlIHtcbiAgICBoZWlnaHQ6IDEwMCU7IC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgYXQgdGhlIGJvdHRvbTtcbiAgfVxuXG4gICYtLWxhYmVsLXZlcnRpY2FsIHtcbiAgICAvLyBGb3IgcGxhaW4gY29tcG9uZW50cyB3aXRob3V0IGxhYmVscyBpbiByb3dzIHdpdGggb3RoZXIgY29tcG9uZW50cyB0aGF0XG4gICAgLy8gaGF2ZSBsYWJlbHMsIGFkZCBzb21lIHNwYWNpbmcgdG8gdGhlIHRvcCB0byBhbGlnbiB3aXRoIHRoZSBvdGhlclxuICAgIC8vIGNvbXBvbmVudHMgKGUuZy4gIGJ1dHRvbnMpOlxuICAgID4gLmRpdG8tY29tcG9uZW50OmZpcnN0LWNoaWxkOm5vdCguZGl0by1zZWN0aW9uLCAuZGl0by1saXN0LCAuZGl0by1vYmplY3QpIHtcbiAgICAgIG1hcmdpbi10b3A6ICRpbnB1dC1oZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgJi0tb21pdC1zcGFjaW5nIHtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgPiAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46ICRmb3JtLXNwYWNpbmctaGFsZiAkZm9ybS1zcGFjaW5nLWhhbGYgMDtcbiAgICB9XG4gIH1cbn1cblxuLy8gTk9URTogVGhpcyBpcyBub3QgbmVzdGVkIGluc2lkZSBgLmRpdG8tY29udGFpbmVyYCBzbyB0aGF0IG90aGVyXG4vLyB0eXBlIGNvbXBvbmVudHMgY2FuIG92ZXJyaWRlIGAuZGl0by13aWR0aC1maWxsYCBjbGFzcyAoZmlsdGVyIHByZWNlZGVuY2UpLlxuLmRpdG8tY29tcG9uZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgICYuZGl0by1jaGVja2JveCxcbiAgICAmLmRpdG8tcmFkaW8tYnV0dG9uIHtcbiAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGxpa2UgY2hhbmdlZCB3aWR0aCBvbiBjaGVja2JveGVzIGFuZCByYWRpb3MsIG92ZXJyaWRlOlxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRhYnNcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCIodGFiU2NoZW1hLCBrZXkpIGluIHRhYnNcIlxuICApXG4gICAgYS5kaXRvLWxpbmsoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHRhYlNjaGVtYSlcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IG1vZGVsVmFsdWUgPT09IGtleSB9XCJcbiAgICAgIEBjbGljaz1cIiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGtleSlcIlxuICAgICkge3sgZ2V0TGFiZWwodGFiU2NoZW1hLCBrZXkpIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVGFicycsIHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcbiAgcHJvcHM6IHtcbiAgICB0YWJzOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkB1c2UgJ3Nhc3M6Y29sb3InO1xuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGFicyB7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tbGluayB7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgfVxuXG4gICAgLy8gV2hlbiBpbiBtYWluIGhlYWRlcjpcbiAgICAuZGl0by1oZWFkZXIgJiB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHQ7XG4gICAgICBwYWRkaW5nOiAkdGFiLXBhZGRpbmctdmVyICR0YWItcGFkZGluZy1ob3I7XG4gICAgICBtYXJnaW4tbGVmdDogJHRhYi1tYXJnaW47XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1cztcblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3Q7XG4gICAgICB9XG5cbiAgICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2hlbiBpbnNpZGUgYSBpbmxpbmUgc2NoZW1hOlxuICAgIC5kaXRvLXNjaGVtYS1pbmxpbmVkICYsXG4gICAgLmRpdG8tbGFiZWwgJiB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgICAgbWFyZ2luLWxlZnQ6IC0kYm9yZGVyLXdpZHRoO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gICAgICB9XG5cbiAgICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICBib3JkZXItY29sb3I6IGNvbG9yLmFkanVzdCgkY29sb3ItYWN0aXZlLCAkbGlnaHRuZXNzOiAtMTAlKTtcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1zY2hlbWEgJiB7XG4gICAgLy8gUHVzaCBjbGlwYm9hcmQgdG8gdGhlIHJpZ2h0IGluIHRoZSBmbGV4IGxheW91dCwgc2VlOlxuICAgIC8vIGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1yaWdodDogYXV0bztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG5jb21wb25lbnQuZGl0by1wYW5lbChcbiAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShwYW5lbFNjaGVtYSlcIlxuICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICA6aXM9XCJwYW5lbFRhZ1wiXG4gIEBzdWJtaXQucHJldmVudFxuKVxuICBEaXRvU2NoZW1hLmRpdG8tcGFuZWxfX3NjaGVtYShcbiAgICA6c2NoZW1hPVwicGFuZWxTY2hlbWFcIlxuICAgIDpkYXRhU2NoZW1hPVwicGFuZWxEYXRhU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgcGFkZGluZz1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gICAgZ2VuZXJhdGVMYWJlbHNcbiAgKVxuICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICBoMi5kaXRvLXBhbmVsX19oZWFkZXIoOmNsYXNzPVwieyAnZGl0by1wYW5lbF9faGVhZGVyLS1zdGlja3knOiBzdGlja3kgfVwiKVxuICAgICAgICBzcGFuIHt7IGdldExhYmVsKHNjaGVtYSkgfX1cbiAgICAgICAgRGl0b0J1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKFxuICAgICAgICAgIDpidXR0b25zPVwicGFuZWxCdXR0b25TY2hlbWFzXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICApXG4gICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICBEaXRvQnV0dG9ucyhcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IENvbnRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvQ29udGV4dE1peGluLmpzJ1xuaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYW5lbCcsIHtcbiAgbWl4aW5zOiBbQ29udGV4dE1peGluLCBWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhbmVsVGFiQ29tcG9uZW50OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5lc3RlZCgpIHtcbiAgICAgIC8vIEZvciBgQ29udGV4dE1peGluYDpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIHBhbmVsQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIHBhbmVsQnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLnBhbmVsQnV0dG9ucylcbiAgICB9LFxuXG4gICAgaGFzT3duRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMub3duRGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25EYXRhIHx8IHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYSgpIHtcbiAgICAgIGlmICh0aGlzLmhhc093bkRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgYGRhdGFgIGZyb20gdGhlIHNjaGVtYSwgc28gdGhhdCBEaXRvU2NoZW1hIGlzbid0IHVzaW5nIGl0IHRvXG4gICAgICAgIC8vIHByb2R1Y2UgaXRzIG93biBkYXRhLiBTZWUgJGZpbHRlcnMgcGFuZWwgZm9yIG1vcmUgZGV0YWlscyBvbiBkYXRhLlxuICAgICAgICBjb25zdCB7IGRhdGEsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYW5lbFRhZygpIHtcbiAgICAgIC8vIFBhbmVscyB0aGF0IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEgbmVlZCB0aGVpciBvd24gZm9ybS5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyAnZm9ybScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICBwYW5lbERhdGFTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gdGhpcy5zY2hlbWEgOiB0aGlzLnNjaGVtYUNvbXBvbmVudC5zY2hlbWFcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIGRhdGEsIHRoZW4gaXQgbmVlZHMgdG8gcHJlZml4IGFsbFxuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIGl0cyBkYXRhLXBhdGgsIGJ1dCBpZiBpdCBzaGFyZXMgZGF0YSB3aXRoIHRoZSBzY2hlbWFcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhlbiBpdCBzaG91bGQgc2hhcmUgdGhlIGRhdGEtcGF0aCBuYW1lIHNwYWNlIHRvby5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyB0aGlzLmRhdGFQYXRoIDogdGhpcy5zY2hlbWFDb21wb25lbnQuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pLFxuXG4gICAgc3RpY2t5OiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RpY2t5Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgLy8gTk9URTogVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgYHNjaGVtYS5kYXRhYCBoYW5kbGluZyBpbiBEaXRvU2NoZW1hLFxuICAgIC8vIHdoZXJlIHRoZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBhY3R1YWwgY29tcG9uZW50LlxuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5vd25EYXRhID0gaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICA/IGRhdGEodGhpcy5jb250ZXh0KVxuICAgICAgICA6IGRhdGFcbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBSZWdpc3RlciB0aGUgcGFuZWxzIHNvIHRoYXQgb3RoZXIgY29tcG9uZW50cyBjYW4gZmluZCB0aGVtIGJ5IHRoZWlyXG4gICAgICAvLyBkYXRhLXBhdGgsIGUuZy4gaW4gVHlwZUxpc3Qub25GaWx0ZXJFcnJvcnMoKVxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZWwodGhpcywgYWRkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmVsIHtcbiAgJjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkY29udGVudC1wYWRkaW5nO1xuICB9XG5cbiAgJl9faGVhZGVyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWNvbG9yO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG5cbiAgICAmLS1zdGlja3kge1xuICAgICAgJG1hcmdpbjogJGlucHV0LWhlaWdodC1mYWN0b3IgKiAkbGluZS1oZWlnaHQgKiAkZm9udC1zaXplLXNtYWxsICtcbiAgICAgICAgJGZvcm0tc3BhY2luZztcblxuICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgIHRvcDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgIG1hcmdpbi1ib3R0b206ICRtYXJnaW47XG4gICAgICB6LWluZGV4OiAxO1xuXG4gICAgICAmICsgKiB7XG4gICAgICAgIG1hcmdpbi10b3A6IC0kbWFyZ2luO1xuICAgICAgfVxuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGhlaWdodDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgICAgdG9wOiAtJGNvbnRlbnQtcGFkZGluZztcbiAgICAgICAgbWFyZ2luOiAtJGJvcmRlci13aWR0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1idXR0b25zIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAkaW5wdXQtcGFkZGluZy12ZXI7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmX19zY2hlbWEge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcblxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgICAgLmRpdG8tb2JqZWN0IHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgfVxuXG4gICAgICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgICAgICAtLWJ1dHRvbi1tYXJnaW46ICN7JGZvcm0tc3BhY2luZ307XG5cbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZztcblxuICAgICAgICAuZGl0by1jb250YWluZXIge1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1sYWJlbCB7XG4gICAgICBsYWJlbCB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhbmVscyhcbiAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gIClcbiAgICBEaXRvUGFuZWwoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSlcIlxuICAgICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgPz8gZGlzYWJsZWRcIlxuICAgICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBDb250ZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL0NvbnRleHRNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZWxzJywge1xuICBtaXhpbnM6IFtDb250ZXh0TWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgcGFuZWxzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5lc3RlZCgpIHtcbiAgICAgIC8vIEZvciBgQ29udGV4dE1peGluYDpcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudCkge1xuICAgICAgLy8gQWxsb3cgc2VwYXJhdGUgdGFicyB0byB1c2UgcGFuZWxzIG9mIHRoZSBzYW1lIG5hbWUsIGJ5XG4gICAgICAvLyBwcmVmaXhpbmcgdGhlaXIga2V5IHdpdGggdGhlIHRhYiBuYW1lLlxuICAgICAgcmV0dXJuIHRhYkNvbXBvbmVudCA/IGAke3RhYkNvbXBvbmVudC50YWJ9XyR7ZGF0YVBhdGh9YCA6IGRhdGFQYXRoXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFuZWxzIHtcbiAgbWFyZ2luOiAkY29udGVudC1wYWRkaW5nO1xuICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZztcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tYnV0dG9ucyhcbiAgdi1pZj1cImJ1dHRvblNjaGVtYXMgfHwgaGFzU2xvdENvbnRlbnQoJHNsb3RzLmRlZmF1bHQpXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCIoYnV0dG9uU2NoZW1hLCBidXR0b25EYXRhUGF0aCkgaW4gYnV0dG9uU2NoZW1hc1wiXG4gIClcbiAgICBEaXRvQ29udGFpbmVyKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShidXR0b25TY2hlbWEpXCJcbiAgICAgIDprZXk9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6c2NoZW1hPVwiYnV0dG9uU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1cInZub2RlIG9mICRzbG90cy5kZWZhdWx0Py4oKVwiXG4gIClcbiAgICAvLy0gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLFxuICAgIC8vLSBzbyBpdCBjYW4gYmUgd3JhcHBlZCBpbiBhIGAuZGl0by1jb250YWluZXJgIGNsYXNzLlxuICAgIC5kaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJoYXNWTm9kZUNvbnRlbnQodm5vZGUpXCJcbiAgICApXG4gICAgICBEaXRvVm5vZGUoOnZub2RlPVwidm5vZGVcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IENvbnRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvQ29udGV4dE1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaGFzU2xvdENvbnRlbnQsIGhhc1ZOb2RlQ29udGVudCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9CdXR0b25zJywge1xuICBtaXhpbnM6IFtDb250ZXh0TWl4aW5dLFxuXG4gIHByb3ZpZGU6IHtcbiAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGJ1dHRvbnMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXMuXG4gICAgICBjb25zdCB7IGRhdGFQYXRoLCBidXR0b25zIH0gPSB0aGlzXG4gICAgICByZXR1cm4gYnV0dG9uc1xuICAgICAgICA/IE9iamVjdC52YWx1ZXMoYnV0dG9ucykucmVkdWNlKChzY2hlbWFzLCBidXR0b24pID0+IHtcbiAgICAgICAgICAgIHNjaGVtYXNbYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGJ1dHRvbi5uYW1lKV0gPSBidXR0b25cbiAgICAgICAgICAgIHJldHVybiBzY2hlbWFzXG4gICAgICAgICAgfSwge30pXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzU2xvdENvbnRlbnQsXG4gICAgaGFzVk5vZGVDb250ZW50XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1idXR0b25zIHtcbiAgPiAuZGl0by1jb250YWluZXIge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIFNldCBgQGNsaWNrLnN0b3BgIHRvIHByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbC5cbkRpdG9CdXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgOmJ1dHRvbnM9XCJidXR0b25zXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICBAY2xpY2suc3RvcFxuKVxuICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICBhLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZGlzYWJsZWQnOiBpc0RyYWdnYWJsZURpc2FibGVkIH1cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICApXG4gIFJvdXRlckxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWRpc2FibGVkJzogaXNFZGl0YWJsZURpc2FibGVkIH1cIlxuICAgIDp0bz1cImVkaXRQYXRoID8geyBwYXRoOiBlZGl0UGF0aCB9IDoge31cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICApXG4gIERpdG9DcmVhdGVCdXR0b24oXG4gICAgdi1pZj1cImNyZWF0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOnBhdGg9XCJjcmVhdGVQYXRoXCJcbiAgICA6dmVyYj1cInZlcmJzLmNyZWF0ZVwiXG4gICAgOnRleHQ9XCJjcmVhdGVCdXR0b25UZXh0XCJcbiAgICA6ZGlzYWJsZWQ9XCJpc0NyZWF0YWJsZURpc2FibGVkXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgOmRpc2FibGVkPVwiaXNEZWxldGFibGVEaXNhYmxlZFwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBDb250ZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL0NvbnRleHRNaXhpbi5qcydcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9FZGl0QnV0dG9ucycsIHtcbiAgbWl4aW5zOiBbQ29udGV4dE1peGluXSxcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjcmVhdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjcmVhdGVQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYS5mb3JtKVxuICAgIH0sXG5cbiAgICBpc0RyYWdnYWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaGFzU2NoZW1hT3B0aW9uKCdkcmFnZ2FibGUnKVxuICAgIH0sXG5cbiAgICBpc0RlbGV0YWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaGFzU2NoZW1hT3B0aW9uKCdkZWxldGFibGUnKVxuICAgIH0sXG5cbiAgICBpc0VkaXRhYmxlRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmRpc2FibGVkIHx8XG4gICAgICAgICF0aGlzLmVkaXRQYXRoIHx8XG4gICAgICAgICF0aGlzLmhhc1NjaGVtYU9wdGlvbignZWRpdGFibGUnKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0NyZWF0YWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5kaXNhYmxlZCB8fFxuICAgICAgICAhdGhpcy5jcmVhdGVQYXRoIHx8XG4gICAgICAgICF0aGlzLmhhc1NjaGVtYU9wdGlvbignY3JlYXRhYmxlJylcbiAgICAgIClcbiAgICB9LFxuXG4gICAgY3JlYXRlQnV0dG9uVGV4dCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBjcmVhdGUgYnV0dG9uIHRocm91Z2ggY3JlYXRhYmxlIG9iamVjdDpcbiAgICAgICAgdGhpcy5zY2hlbWEuY3JlYXRhYmxlPy5sYWJlbCB8fCAoXG4gICAgICAgICAgLy8gQXV0by1nZW5lcmF0ZSBjcmVhdGUgYnV0dG9uIGxhYmVscyBmcm9tIGZyb20gbGFiZWxzIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcyB3aXRoIG9ubHkgb25lIGZvcm06XG4gICAgICAgICAgdGhpcy5mb3JtTGFiZWwgJiZcbiAgICAgICAgICBgJHtjYXBpdGFsaXplKHRoaXMudmVyYnMuY3JlYXRlKX0gJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICkgfHxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzU2NoZW1hT3B0aW9uKG5hbWUpIHtcbiAgICAgIC8vIEFsbCBvcHRpb25zIGNhbiBiZSBkaXNhYmxlZCBvbiBhIHBlci1mb3JtIGJhc2lzIGJ5IHNldHRpbmdcbiAgICAgIC8vIGBzY2hlbWFbbmFtZV1gIHRvIGBmYWxzZWAgb3IgYSBjYWxsYmFjayByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYVZhbHVlKG5hbWUsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1lZGl0LWJ1dHRvbnMge1xuICAvLyBPdmVycmlkZSBjdXJzb3IgZnJvbSBjb2xsYXBzaWJsZSBkaXRvLWxhYmVsOlxuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIGZsZXg6IG5vbmU7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNyZWF0ZS1idXR0b25cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJjcmVhdGFibGVGb3JtXCJcbiAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpXCJcbiAgICBAY2xpY2s9XCJjcmVhdGVJdGVtKGNyZWF0YWJsZUZvcm0pXCJcbiAgKSB7eyB0ZXh0IH19XG4gIHRlbXBsYXRlKFxuICAgIHYtZWxzZS1pZj1cImNyZWF0YWJsZUZvcm1zXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJiKVwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICkge3sgdGV4dCB9fVxuICAgIHVsLmRpdG8tcHVsbGRvd24oOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCIpXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gY3JlYXRhYmxlRm9ybXNcIlxuICAgICAgKVxuICAgICAgICBhKFxuICAgICAgICAgIHYtc2hvdz1cInNob3VsZFNob3dTY2hlbWEoZm9ybSlcIlxuICAgICAgICAgIDpjbGFzcz1cImdldEZvcm1DbGFzcyhmb3JtLCB0eXBlKVwiXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwoZm9ybSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IENvbnRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvQ29udGV4dE1peGluLmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRGb3JtU2NoZW1hcywgaXNJbmxpbmVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9DcmVhdGVCdXR0b24nLCB7XG4gIG1peGluczogW0NvbnRleHRNaXhpbiwgUHVsbGRvd25NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIFRoZSBuZXh0IGZvdXIgcHJvcHMgYXJlIHRoZXJlIGZvciBgRGl0b0NvbnRleHRgIGFuZCB0aGUgYGNvbnRleHQoKWBcbiAgICAvLyBnZXR0ZXIgaW4gYERpdG9NaXhpbmAuXG4gICAgLy8gVE9ETzogU2hvdWxkIHRoZXkgYmUgbW92ZWQgdG8gc2hhcmVkIG1peGluIHRoYXQgZGVmaW5lcyB0aGVtIGFzIHJlcXVpcmVkXG4gICAgLy8gYW5kIGFsc28gcHJvdmlkZXMgdGhlIGBjb250ZXh0KClgIGdldHRlciwgcGVyaGFwcyBgQ29udGV4dE1peGluYD9cbiAgICAvLyBgc2NoZW1hYCBjb3VsZCBiZSBpbmNsdWRlZCBhcyB3ZWxsLCBhbmQgYENvbnRleHRNaXhpbmAgY291bGQgYmUgdXNlZCBpblxuICAgIC8vIGBEaXRvRm9ybWAsIGBEaXRvVmlld2AsIGBEaXRvUGFuZWxgLCBgRGl0b1NjaGVtYWAsIGBEaXRvRWRpdEJ1dHRvbnNgLFxuICAgIC8vIGV0Yz8gQnV0IHRoZSBwcm9ibGVtIHdpdGggdGhlIHJvb3QgY29tcG9uZW50cyBpcyB0aGF0IHRoZXkgZG9uJ3QgaGF2ZVxuICAgIC8vIHRoZXNlIHByb3BzLiBXZSBjb3VsZCBhZGQgYSBgY29udGV4dEF0dHJpYnV0ZXMoKWAgZ2V0dGVyIGZvciBlYXN5IHBhc3NpbmdcbiAgICAvLyBvbiBhcyBgdi1iaW5kPVwiY29udGV4dEF0dHJpYnV0ZXNcImAuXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHZlcmI6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRleHQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybXMoKSB7XG4gICAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgY3JlYXRhYmxlRm9ybXMoKSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModGhpcy5mb3JtcykuZmlsdGVyKFxuICAgICAgICAoWywgZm9ybV0pID0+IHRoaXMuaXNGb3JtQ3JlYXRhYmxlKGZvcm0pXG4gICAgICApXG4gICAgICByZXR1cm4gZW50cmllcy5sZW5ndGggPiAwXG4gICAgICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBjcmVhdGFibGVGb3JtKCkge1xuICAgICAgY29uc3QgZm9ybXMgPSB0aGlzLmNyZWF0YWJsZUZvcm1zXG4gICAgICByZXR1cm4gZm9ybXMgJiYgT2JqZWN0LmtleXMoZm9ybXMpLmxlbmd0aCA9PT0gMSAmJiBmb3Jtcy5kZWZhdWx0IHx8IG51bGxcbiAgICB9LFxuXG4gICAgaXNJbmxpbmVkKCkge1xuICAgICAgcmV0dXJuIGlzSW5saW5lZCh0aGlzLnNjaGVtYSlcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGlzRm9ybUNyZWF0YWJsZShmb3JtKSB7XG4gICAgICAvLyBGb3JtcyBjYW4gYmUgZXhjbHVkZWQgZnJvbSB0aGUgbGlzdCBieSBwcm92aWRpbmcgYGlmOiBmYWxzZWAgb3JcbiAgICAgIC8vIGBjcmVhdGFibGU6IGZhbHNlYC5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuc2hvdWxkUmVuZGVyU2NoZW1hKGZvcm0pICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2NyZWF0YWJsZScsIHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgICAgc2NoZW1hOiBmb3JtXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSA9IG51bGwpIHtcbiAgICAgIGlmICghdGhpcy5zaG91bGREaXNhYmxlU2NoZW1hKGZvcm0pKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5saW5lZCkge1xuICAgICAgICAgIHRoaXMuc291cmNlQ29tcG9uZW50LmNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgICAgICBwYXRoOiBgJHt0aGlzLnBhdGh9L2NyZWF0ZWAsXG4gICAgICAgICAgICBxdWVyeTogeyB0eXBlIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbGxvd2VkIHRvIGNyZWF0ZSBpdGVtIGZvciBnaXZlbiBmb3JtJylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0Rm9ybUNsYXNzKGZvcm0sIHR5cGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtgZGl0by10eXBlLSR7dHlwZX1gXTogdHJ1ZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLnNob3VsZERpc2FibGVTY2hlbWEoZm9ybSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCh0eXBlKSB7XG4gICAgICB0aGlzLmNyZWF0ZUl0ZW0odGhpcy5mb3Jtc1t0eXBlXSwgdHlwZSlcbiAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWNyZWF0ZS1idXR0b24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmRpdG8tcHVsbGRvd24ge1xuICAgIHJpZ2h0OiAwO1xuXG4gICAgLmRpdG8tYnV0dG9ucy1zdGlja3kgJiB7XG4gICAgICB0b3A6IHVuc2V0O1xuICAgICAgcmlnaHQ6IHVuc2V0O1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY2xpcGJvYXJkLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIHYtaWY9XCJjbGlwYm9hcmRcIlxuKVxuICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tY29weShcbiAgICByZWY9XCJjb3B5RGF0YVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJDb3B5IERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFjb3B5RW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25Db3B5XCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tcGFzdGUoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJQYXN0ZSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhcGFzdGVFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvblBhc3RlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzT2JqZWN0LCBjbG9uZSwgZGVpbmRlbnQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0NsaXBib2FyZCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgY2xpcGJvYXJkOiB7IHR5cGU6IFtCb29sZWFuLCBPYmplY3RdLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb3B5RW5hYmxlZDogZmFsc2UsXG4gICAgICBwYXN0ZUVuYWJsZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xpcGJvYXJkT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBpc09iamVjdCh0aGlzLmNsaXBib2FyZCkgPyB0aGlzLmNsaXBib2FyZCA6IHt9XG4gICAgfSxcblxuICAgIGNvcHlEYXRhKCkge1xuICAgICAgY29uc3QgeyBjb3B5IH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBjb3B5XG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PlxuICAgICAgICAgICAgY29weS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGNsaXBib2FyZERhdGEgfSkpXG4gICAgICAgIDogY2xpcGJvYXJkRGF0YSA9PiBjbG9uZShjbGlwYm9hcmREYXRhKVxuICAgIH0sXG5cbiAgICBwYXN0ZURhdGEoKSB7XG4gICAgICBjb25zdCB7IHBhc3RlIH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBwYXN0ZVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT5cbiAgICAgICAgICAgIHBhc3RlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgY2xpcGJvYXJkRGF0YSB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsaXBib2FyZERhdGFcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAvLyBDaGVjayByaWdodCBhd2F5IGFsc28gaW4gY2FzZSB0aGVyZSdzIGFscmVhZHkgZGF0YSAoZS5nLiBjcmVhdGUgZm9ybSk6XG4gICAgJ3BhcmVudENvbXBvbmVudC5oYXNEYXRhJzoge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcjogJ3VwZGF0ZUNvcHknXG4gICAgfSxcblxuICAgICdhcHBTdGF0ZS5jbGlwYm9hcmREYXRhJzoge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcjogJ3VwZGF0ZVBhc3RlJ1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIC8vIENoZWNrIGNsaXBib2FyZCBjb250ZW50IHdoZW5ldmVyIHNvbWV0aGluZyBnZXRzIGNvcGllZCBvciB0aGUgd2luZG93IGdldHNcbiAgICAvLyAocmUpYWN0aXZhdGVkLCBhcyB0aG9zZSBhcmUgdGhlIG1vbWVudHMgd2hlbiB0aGUgY2xpcGJvYXJkIGNhbiBjaGFuZ2U6XG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwgeyBjb3B5OiB0aGlzLnVwZGF0ZVBhc3RlIH0pXG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHsgZm9jdXM6IHRoaXMudXBkYXRlUGFzdGUgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgY2hlY2tDbGlwYm9hcmREYXRhKGNsaXBib2FyZERhdGEpIHtcbiAgICAgIGNvbnN0IHsgJHNjaGVtYSwgLi4uZGF0YSB9ID0gY2xpcGJvYXJkRGF0YSB8fCB7fVxuICAgICAgcmV0dXJuICRzY2hlbWEgPT09IHRoaXMuc2NoZW1hLm5hbWUgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDbGlwYm9hcmREYXRhKHJlcG9ydCkge1xuICAgICAgLy8gVXNlIHRoZSBpbnRlcm5hbCBjbGlwYm9hcmQgYXMgZmFsbGJhY2suXG4gICAgICBsZXQgeyBjbGlwYm9hcmREYXRhIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ucmVhZFRleHQ/LigpXG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IEpTT04ucGFyc2UoanNvbilcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChyZXBvcnQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICAgIGlmIChlcnIubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgYWxlcnQoZGVpbmRlbnRgXG4gICAgICAgICAgICAgIFRoZSBkYXRhIGluIHRoZSBjbGlwYm9hcmQgYXBwZWFycyB0byBiZSBtYWxmb3JtZWQ6XG4gICAgICAgICAgICAgICR7ZXJyLm1lc3NhZ2V9XG4gICAgICAgICAgICBgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDbGlwYm9hcmREYXRhKGNsaXBib2FyZERhdGEpXG4gICAgfSxcblxuICAgIHVwZGF0ZUNvcHkoKSB7XG4gICAgICB0aGlzLmNvcHlFbmFibGVkID0gdGhpcy5wYXJlbnRDb21wb25lbnQuaGFzRGF0YVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVQYXN0ZSgpIHtcbiAgICAgIHRoaXMucGFzdGVFbmFibGVkID0gISF0aGlzLmNoZWNrQ2xpcGJvYXJkRGF0YSh0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEpXG4gICAgICBpZiAoIXRoaXMucGFzdGVFbmFibGVkICYmIHRoaXMuYXBwU3RhdGUuYWdlbnQuY2hyb21lKSB7XG4gICAgICAgIC8vIFNlZSBpZiB0aGUgY2xpcGJvYXJkIGNvbnRlbnQgaXMgdmFsaWQgSlNPTiBkYXRhIHRoYXQgaXMgY29tcGF0aWJsZVxuICAgICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEoZmFsc2UpIC8vIERvbid0IHJlcG9ydFxuICAgICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhZGF0YVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMucGFyZW50Q29tcG9uZW50LmNsaXBib2FyZERhdGFcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgICRzY2hlbWE6IHRoaXMuc2NoZW1hLm5hbWUsXG4gICAgICAgICAgICAuLi50aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRoaXMucGFzdGVFbmFibGVkID0gdHJ1ZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKVxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uUGFzdGUoKSB7XG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YSh0cnVlKSAvLyBSZXBvcnRcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBkYXRhICYmIHRoaXMucGFzdGVEYXRhKGRhdGEpXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5wYXJlbnRDb21wb25lbnQuY2xpcGJvYXJkRGF0YSA9IGRhdGFcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jbGlwYm9hcmQge1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLXNjaGVtYSAmIHtcbiAgICAvLyBQdXNoIGNsaXBib2FyZCB0byB0aGUgcmlnaHQgaW4gdGhlIGZsZXggbGF5b3V0LCBzZWU6XG4gICAgLy8gaHR0cHM6Ly9jb2RlcGVuLmlvL3Rob2xleC9wZW4vaHZlQngvXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIH1cblxuICAuZGl0by1oZWFkZXIgJiB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG5cbiAgICAuZGl0by1idXR0b24ge1xuICAgICAgbWFyZ2luOiAwIDAgJHRhYi1tYXJnaW4gJHRhYi1tYXJnaW47XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcsIHsgdXBkYXRlUm9vdCA9IGZhbHNlLCB1cGRhdGVWaWV3ID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nIF4gIWlzTG9hZGluZykge1xuICAgICAgICAvLyBCb29sZWFuIHhvclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgICAgIGlmICh1cGRhdGVSb290KSB7XG4gICAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LnJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZVZpZXcpIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0TG9hZGluZyh0aGlzLmlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuL0l0ZW1NaXhpbi5qcydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5pbXBvcnQgeyBzZXREZWZhdWx0VmFsdWVzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgYXNzaWduRGVlcGx5LCBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGwsXG4gICAgICBhYm9ydENvbnRyb2xsZXI6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiYgKFxuICAgICAgICAgICc8Yj5Ob3RlPC9iPjogdGhlIHBhcmVudCBzdGlsbCBuZWVkcyB0byBiZSBzYXZlZCAnICtcbiAgICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSh7IG1ldGhvZCA9ICdnZXQnLCBjaGlsZCB9ID0ge30pIHtcbiAgICAgIC8vIFJldHVybnMgdGhlIHJlc291cmNlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlc291cmNlIGZvciB0aGVcbiAgICAgIC8vIGFzc29jaWF0ZWQgc291cmNlIHNjaGVtYS5cbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5zb3VyY2VTY2hlbWE/LnJlc291cmNlXG4gICAgICByZXR1cm4gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIHtcbiAgICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgICBtZXRob2QsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRSZXNvdXJjZUNvbXBvbmVudD8uZ2V0UmVzb3VyY2Uoe1xuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBjaGlsZDogcmVzb3VyY2VcbiAgICAgICAgfSkgPz8gbnVsbCxcbiAgICAgICAgY2hpbGRcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFZlcmJzKCkge1xuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLiR2ZXJicygpXG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnZlcmJzLFxuICAgICAgICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCB2ZXJicyB3aXRoIHRoZWlyIHRyYW5zaWVudCB2ZXJzaW9uczpcbiAgICAgICAgICAgIGNyZWF0ZTogJ2FkZCcsXG4gICAgICAgICAgICBjcmVhdGVkOiAnYWRkZWQnLFxuICAgICAgICAgICAgc2F2ZTogJ2FwcGx5JyxcbiAgICAgICAgICAgIHNhdmVkOiAnYXBwbGllZCcsXG4gICAgICAgICAgICBkZWxldGU6ICdyZW1vdmUnLFxuICAgICAgICAgICAgZGVsZXRlZDogJ3JlbW92ZWQnXG4gICAgICAgICAgfVxuICAgICAgICA6IHZlcmJzXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIC8vIEFjdHVhbCBjb2RlIGlzIGluIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0J3MgZWFzZXIgdG8gb3ZlcnJpZGVcbiAgICAgIC8vIGBzZXR1cERhdGEoKWAgYW5kIGFuZCBjYWxsIGBlbnN1cmVEYXRhKClgIGZyb20gdGhlIG92ZXJyaWRlcyxcbiAgICAgIC8vIHNlZSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW4uXG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICBlbnN1cmVEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkTG9hZCkge1xuICAgICAgICBpZiAodGhpcy5oYXNEYXRhKSB7XG4gICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVsb2FkRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgfSxcblxuICAgIGxvYWREYXRhKGNsZWFyKSB7XG4gICAgICBpZiAoIXRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckRhdGEoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVxdWVzdERhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHNldERlZmF1bHRWYWx1ZXMoc2NoZW1hLCB0eXBlID8geyB0eXBlIH0gOiB7fSwgdGhpcylcbiAgICB9LFxuXG4gICAgcmVxdWVzdERhdGEoKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMucXVlcnlQYXJhbXNcbiAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2dldCcsIHF1ZXJ5IH0sIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2VcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZGF0YT8udHlwZSA9PT0gJ0ZpbHRlclZhbGlkYXRpb24nICYmXG4gICAgICAgICAgICAgIHRoaXMub25GaWx0ZXJFcnJvcnM/LihkYXRhLmVycm9ycylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IENhbiB3ZSByZWFsbHkgc3dhbGxvdyB0aGVzZSBlcnJvcnM/XG4gICAgICAgICAgICAgIC8vIElzIGNhbGxpbmcgYGVuc3VyZVVzZXIoKWAgaW4gYG9uQmVmb3JlUmVxdWVzdCgpYCBlbm91Z2g/XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0RGF0YShyZXNwb25zZS5kYXRhKVxuICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdsb2FkJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDBcbiAgICB9LFxuXG4gICAgaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMVxuICAgIH0sXG5cbiAgICBhc3luYyBoYW5kbGVSZXF1ZXN0KFxuICAgICAge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHJlc291cmNlID0gdGhpcy5nZXRSZXNvdXJjZSh7IG1ldGhvZCB9KSxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGRhdGFcbiAgICAgIH0sXG4gICAgICBjYWxsYmFja1xuICAgICkge1xuICAgICAgY29uc3QgbG9hZGluZ09wdGlvbnMgPSB7XG4gICAgICAgIHVwZGF0ZVJvb3Q6IHRydWUsIC8vIERpc3BsYXkgc3Bpbm5lciBpbiBoZWFkZXIgd2hlbiBsb2FkaW5nIGluIHJlc291cmNlc1xuICAgICAgICB1cGRhdGVWaWV3OiB0aGlzLmlzSW5WaWV3IC8vIE5vdGlmeSB2aWV3IG9mIGxvYWRpbmcgZm9yIHZpZXcgY29tcG9uZW50c1xuICAgICAgfVxuICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXI/LmFib3J0KClcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gY29udHJvbGxlclxuICAgICAgY29uc3QgeyBzaWduYWwgfSA9IGNvbnRyb2xsZXJcbiAgICAgIG1ldGhvZCA9IHJlc291cmNlLm1ldGhvZCB8fCBtZXRob2RcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIHF1ZXJ5LCBkYXRhLCBzaWduYWwgfVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICAgIC8vIFBhc3MgYm90aCByZXF1ZXN0IGFuZCByZXNwb25zZSB0byB0aGUgY2FsbGJhY2ssIHNvIHRoZXkgY2FuIGJlXG4gICAgICAgIC8vIGV4cG9zZWQgdG8gZnVydGhlciBjYWxsYmFja3MgdGhyb3VnaCBEaXRvQ29udGV4dC5cbiAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IubmFtZSAhPT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgICAgY29uc3QgeyByZXNwb25zZSB9ID0gZXJyb3JcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKGVycm9yLCByZXNwb25zZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBpc1N0cmluZyhkYXRhPy50eXBlKVxuICAgICAgICAgICAgICA/IGxhYmVsaXplKGRhdGEudHlwZSlcbiAgICAgICAgICAgICAgOiAnRXJyb3InXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gZGF0YT8ubWVzc2FnZSA/PyBlcnJvclxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoeyB0eXBlOiAnZXJyb3InLCBlcnJvciwgdGl0bGUsIHRleHQgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmFib3J0Q29udHJvbGxlciA9PT0gY29udHJvbGxlcikge1xuICAgICAgICAvLyBPbmx5IGNsZWFyIHRoZSBsb2FkaW5nIHN0YXRlIGlmIHRoaXMgaXMgc3RpbGwgdGhlIGN1cnJlbnQgcmVxdWVzdC5cbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBudWxsXG4gICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgICAvLyBDb252ZW50aW9uOiBvbmx5IHBvc3QsIHB1dCBhbmQgcGF0Y2ggcmVxdWVzdHMgcGFzcyB0aGUgZGF0YSBhcyBwYXlsb2FkLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKG1ldGhvZCkgJiYgKFxuICAgICAgICAgIC8vIFRPRE86IFVzZSBgaGFuZGxlRGF0YVNjaGVtYSgpYCBhc3luY2hyb25vdXNseSBoZXJlIGluc3RlYWQsIHRvXG4gICAgICAgICAgLy8gb2ZmZXIgdGhlIHNhbWUgYW1vdW50IG9mIHBvc3NpYmlsaXRpZXMgZm9yIGRhdGEgbG9hZGluZy5cbiAgICAgICAgICBidXR0b24uZ2V0U2NoZW1hVmFsdWUoWydyZXNvdXJjZScsICdkYXRhJ10pIHx8XG4gICAgICAgICAgYnV0dG9uLnByb2Nlc3NlZEl0ZW1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uKSB7XG4gICAgICBsZXQgeyByZXNvdXJjZSB9ID0gYnV0dG9uLnNjaGVtYVxuICAgICAgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShyZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMuZ2V0UmVzb3VyY2Uoe1xuICAgICAgICAgIG1ldGhvZDogcmVzb3VyY2U/Lm1ldGhvZCxcbiAgICAgICAgICBjaGlsZDogcmVzb3VyY2VcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgeyBtZXRob2QgfSA9IHJlc291cmNlXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEpXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICBzZXREYXRhID0gZmFsc2UsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyA9ICgpID0+XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IFN1Y2Nlc3NmdWwnLFxuICAgICAgICAgIHRleHQ6ICdSZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgc2VudC4nXG4gICAgICAgIH0pLFxuICAgICAgbm90aWZ5RXJyb3IgPSBlcnJvciA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgIGBVbmFibGUgdG8gc2VuZCByZXF1ZXN0JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KFxuICAgICAgICAgIHsgbWV0aG9kLCByZXNvdXJjZSwgZGF0YSB9LFxuICAgICAgICAgIGFzeW5jIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgLy8gU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIERpdG8gdmFsaWRhdGlvbiBlcnJvcjpcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5pc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkgJiYgZGF0YS5lcnJvcnNcbiAgICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNPYmplY3QoZGF0YSkgPyBkYXRhIDogZXJyXG4gICAgICAgICAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB1bmRlcmx5aW5nIGRhdGEgYmVmb3JlIGNhbGxpbmcgYG5vdGlmeSgpYCBvclxuICAgICAgICAgICAgICAvLyBgdGhpcy5pdGVtTGFiZWxgLCBzbyBpZCBpcyBzZXQgYWZ0ZXIgY3JlYXRpbmcgbmV3IGl0ZW1zLlxuICAgICAgICAgICAgICBpZiAoc2V0RGF0YSAmJiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgdGhlIGZvcmVpZ24gZGF0YSBlbnRyaWVzIHdoZW4gdXBkYXRpbmcgdGhlIGRhdGEuXG4gICAgICAgICAgICAgICAgY29uc3QgeyBmb3JlaWduRGF0YSB9ID0gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmZpbHRlckRhdGEoXG4gICAgICAgICAgICAgICAgICB0aGlzLmRhdGFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLy8gVGVsbCB0aGUgcGFyZW50IHJvdXRlIHRvIHJlbG9hZCBpdHMgZGF0YSwgc28gdGhhdCBpdCBjYW5cbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgaXRzIGZvcmVpZ24gZGF0YSBlbnRyaWVzLlxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE1ldGEgPSB0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50Py5yb3V0ZVJlY29yZD8ubWV0YVxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRNZXRhKSB7XG4gICAgICAgICAgICAgICAgICBwYXJlbnRNZXRhLnJlbG9hZCA9IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhKGFzc2lnbkRlZXBseSh7fSwgZm9yZWlnbkRhdGEsIGRhdGEpKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGF0aChwYXRoKSB7XG4gIC8vIEZvciBwYXRocyBzdGFyaW5nIHdpdGggYC9gLCB3ZSBjYW4gdXNlIHRoZSBuYXRpdmUgYFVSTCgpYCBjbGFzcyB0byByZXNvbHZlXG4gIC8vIHRoZSBwYXRoLCB3aGljaCB3aWxsIGFsc28gaGFuZGxlIGAuLmAgYW5kIGAuYCBzZWdtZW50czpcbiAgcmV0dXJuIG5ldyBVUkwoYGZpbGU6JHtwYXRofWApLnBhdGhuYW1lXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgLy8tIE9ubHkgcmVuZGVyIGEgcm91dGVyLXZpZXcgaGVyZSBpZiB0aGlzIGlzbid0IHRoZSBsYXN0IGRhdGEgcm91dGUgYW5kIG5vdCBhXG4gIC8vLSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgUm91dGVyVmlldyhcbiAgICB2LWlmPVwiIWlzTGFzdFVubmVzdGVkUm91dGUgJiYgIWlzTmVzdGVkUm91dGVcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVJvdXRlXCJcbiAgKVxuICAvLy0gTk9URTogTmVzdGVkIGZvcm0gY29tcG9uZW50cyBhcmUga2VwdCBhbGl2ZSBieSB1c2luZyBgdi1zaG93YCBpbnN0ZWFkIG9mXG4gIC8vLSBgdi1pZmAgaGVyZSwgc28gZXZlbnQgaGFuZGxpbmcgYW5kIG90aGVyIHRoaW5ncyBzdGlsbCB3b3JrIHdpdGggbmVzdGVkXG4gIC8vLSBlZGl0aW5nLlxuICBEaXRvRm9ybUlubmVyKFxuICAgIHYtc2hvdz1cImlzQWN0aXZlUm91dGVcIlxuICAgIDpuZXN0ZWQ9XCJpc05lc3RlZFJvdXRlXCJcbiAgKVxuICAgIC8vLSBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8tIGluIGFuIGlucHV0IGZpZWxkLlxuICAgIC8vLSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTE1MDc4MDZcbiAgICBidXR0b24oXG4gICAgICB2LXNob3c9XCJmYWxzZVwiXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIGRpc2FibGVkXG4gICAgKVxuICAgIERpdG9TY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnBhZGRpbmc9XCJpc05lc3RlZFJvdXRlID8gJ25lc3RlZCcgOiAncm9vdCdcIlxuICAgICAgOmFjdGl2ZT1cImlzQWN0aXZlUm91dGVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDpzY3JvbGxhYmxlPVwiIWlzTmVzdGVkUm91dGVcIlxuICAgICAgZ2VuZXJhdGVMYWJlbHNcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYnV0dG9ucylcbiAgICAgICAgRGl0b0J1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kLmRpdG8tYnV0dG9ucy1sYXJnZS5kaXRvLWJ1dHRvbnMtbWFpbihcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWJ1dHRvbnMtc3RpY2t5JzogIWlzTmVzdGVkUm91dGUgfVwiXG4gICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUsIGNhcGl0YWxpemUsIHBhcnNlRGF0YVBhdGgsIGFzc2lnbkRlZXBseSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcywgaXNPYmplY3RTb3VyY2UgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyByZXNvbHZlUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0Zvcm0nLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW4sIFJlc291cmNlTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZWREYXRhOiBudWxsLFxuICAgICAgY2xvbmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgc291cmNlS2V5OiBudWxsLFxuICAgICAgaXNGb3JtOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBBZGQgc3VibWl0IC8gc3VibWl0dGVkIHRvIHRoZSB2ZXJicyByZXR1cm5lZCBieSBSZXNvdXJjZU1peGluXG4gICAgICAvLyBOT1RFOiBUaGVzZSBnZXQgcGFzc2VkIG9uIHRvIGNoaWxkcmVuIHRocm91Z2g6XG4gICAgICAvLyBgcHJvdmlkZSgpIC4uLiB7ICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyB9YCBpbiBSZXNvdXJjZU1peGluXG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMuZ2V0VmVyYnMoKVxuICAgICAgY29uc3QgeyBpc0NyZWF0aW5nLCBwcm92aWRlc0RhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZlcmJzLFxuICAgICAgICBzdWJtaXQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGUgOiB2ZXJicy5zYXZlLFxuICAgICAgICBzdWJtaXR0ZWQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGVkIDogdmVyYnMuc2F2ZWQsXG4gICAgICAgIGNhbmNlbDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsIDogdmVyYnMuY2xvc2UsXG4gICAgICAgIGNhbmNlbGxlZDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsbGVkIDogdmVyYnMuY2xvc2VkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhIHx8IChcbiAgICAgICAgICB0aGlzLmNyZWF0aW9uVHlwZVxuICAgICAgICAgICAgPyAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIHlldCBidXQgdGhlIHR5cGUgdG8gY3JlYXRlIGEgbmV3IGl0ZW0gaXNcbiAgICAgICAgICAgICAgLy8gaXMgc3BlY2lmaWVkLCBwcm92aWRlIGEgdGVtcG9yYXJ5IGVtcHR5IG9iamVjdCB3aXRoIGp1c3QgdGhlXG4gICAgICAgICAgICAgIC8vIHR5cGUgc2V0LCBzbyBgZ2V0SXRlbUZvcm1TY2hlbWEoKWAgY2FuIGRldGVybWluZSB0aGUgZm9ybS5cbiAgICAgICAgICAgICAgeyB0eXBlOiB0aGlzLmNyZWF0aW9uVHlwZSB9XG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgKSxcbiAgICAgICAgdGhpcy5jb250ZXh0XG4gICAgICApXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgYXNzaWduRGVlcGx5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhbmNlbDoge1xuICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc3VibWl0OiAhdGhpcy5pc011dGF0aW5nICYmIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgIC8vIFN1Ym1pdCBidXR0b25zIGNsb3NlIHRoZSBmb3JtIGJ5IGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNsb3NlRm9ybTogdHJ1ZSxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICh7IGNvbXBvbmVudDogYnV0dG9uIH0pID0+IGJ1dHRvbi5zdWJtaXQoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnNjaGVtYS5idXR0b25zXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNBY3RpdmVSb3V0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNNdXRhdGluZyAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBpc011dGF0aW5nKCkge1xuICAgICAgLy8gV2hlbiBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgdGhlIGZvcm0gZWRpdHMgdGhlIGluaGVyaXRlZCBkYXRhXG4gICAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZm9yIHBlcnNpc3RlbmNlIHVwb24gc3VibWlzc2lvbi5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuICEhdGhpcy5zb3VyY2VTY2hlbWEubXV0YXRlXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uc2VsZWN0ZWRUYWIgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBjcmVhdGlvblR5cGUoKSB7XG4gICAgICAvLyBUaGUgdHlwZSBvZiBmb3JtIHRvIGNyZWF0ZSwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnF1ZXJ5LnR5cGVcbiAgICB9LFxuXG4gICAgaXRlbUlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB0aGlzLnBhcmFtID8/IG51bGxcbiAgICB9LFxuXG4gICAgbWV0aG9kKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZyA/ICdwb3N0JyA6ICdwYXRjaCdcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiBjYXBpdGFsaXplKHRoaXMuaXNDcmVhdGluZyA/IHRoaXMudmVyYnMuY3JlYXRlIDogdGhpcy52ZXJicy5lZGl0KVxuICAgIH0sXG5cbiAgICBkYXRhKCkge1xuICAgICAgLy8gUmV0dXJuIGRpZmZlcmVudCBkYXRhIFwiY29udGFpbmVyc1wiIGJhc2VkIG9uIGRpZmZlcmVudCBzY2VuYXJpb3M6XG4gICAgICAvLyAxLiBjcmVhdGVkRGF0YSwgaWYgd2UncmUgaW4gYSBmb3JtIGZvciBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuICAgICAgLy8gMi4gbG9hZGVkRGF0YSwgaWYgdGhlIGZvcm0gaXRzZWxmIGlzIHRoZSByb290IG9mIHRoZSBkYXRhIChlLmcuIHdoZW5cbiAgICAgIC8vICAgIGRpcmVjdGx5IGxvYWRpbmcgYW4gZWRpdGluZyByb290KS5cbiAgICAgIC8vIDMuIFRoZSBkYXRhIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQsIHdoaWNoIGl0c2VsZiBtYXkgYmUgZWl0aGVyIGFcbiAgICAgIC8vICAgIHZpZXcgdGhhdCBsb2FkZWQgdGhlIGRhdGEsIG9yIGEgZm9ybSB0aGF0IGVpdGhlciBsb2FkZWQgdGhlIGRhdGEsIG9yXG4gICAgICAvLyAgICBhbHNvIGluaGVyaXRlZCBpdCBmcm9tIGl0cyBwYXJlbnQuIE5vdGUgdGhhdCB3ZSB1c2UgYSBjbG9uZSBvZiBpdCxcbiAgICAgIC8vICAgIHNvLCBkYXRhIGNoYW5nZXMgYXJlbid0IGFwcGxpZWQgdW50aWwgc2V0U291cmNlRGF0YSgpIGlzIGNhbGxlZC5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZWREYXRhIHx8IHRoaXMubG9hZGVkRGF0YSB8fCB0aGlzLmluaGVyaXRlZERhdGEgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLmRhdGFDb21wb25lbnQpXG4gICAgfSxcblxuICAgIHNvdXJjZURhdGEoKSB7XG4gICAgICAvLyBQb3NzaWJsZSBwYXJlbnRzIGFyZSBEaXRvRm9ybSBmb3IgZm9ybXMsIG9yIERpdG9WaWV3IGZvciByb290IGxpc3RzLlxuICAgICAgLy8gQm90aCBoYXZlIGEgZGF0YSBwcm9wZXJ0eSB3aGljaCBhYnN0cmFjdHMgYXdheSBsb2FkaW5nIGFuZCBpbmhlcml0aW5nXG4gICAgICAvLyBvZiBkYXRhLlxuICAgICAgLy8gRm9ybXMgdGhhdCBhcmUgYWJvdXQgdG8gYmUgZGVzdHJveWVkIGR1ZSB0byBuYXZpZ2F0aW9uIGxvb3NlIHRoZWlyXG4gICAgICAvLyByb3V0ZS1yZWNvcmQsIGJ1dCBtaWdodCBzdGlsbCB0cmlnZ2VyIHRoaXMgZ2V0dGVyLiBGaWx0ZXIgdGhvc2Ugb3V0LlxuICAgICAgbGV0IGRhdGEgPSB0aGlzLnJvdXRlUmVjb3JkID8gdGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudC5kYXRhIDogbnVsbFxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgLy8gSGFuZGxlIG5lc3RlZCBkYXRhIGJ5IHNwbGl0dGluZyB0aGUgZGF0YVBhdGgsIGl0ZXJhdGUgdGhyb3VnaCB0aGVcbiAgICAgICAgLy8gYWN0dWFsIGRhdGEgYW5kIGxvb2sgbmVzdCBjaGlsZC1kYXRhIHVwLlxuICAgICAgICBjb25zdCBkYXRhUGFydHMgPSBwYXJzZURhdGFQYXRoKFxuICAgICAgICAgIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQpXG4gICAgICAgIClcbiAgICAgICAgLy8gQ29tcGFyZSBkYXRhUGFydHMgYWdhaW5zdCBtYXRjaGVkIHJvdXRlUGF0aCBwYXJ0cywgdG8gaWRlbnRpZnkgdGhvc2VcbiAgICAgICAgLy8gcGFydHMgdGhhdCBuZWVkIHRvIGJlIHRyZWF0ZWQgbGlrZSBpZHMgYW5kIG1hcHBlZCB0byBpbmRpY2VzIGluIGRhdGEuXG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHRoaXMucm91dGVSZWNvcmQucGF0aC5zcGxpdCgnLycpXG4gICAgICAgIGNvbnN0IHJvdXRlUGFydHMgPSBwYXRoUGFydHMuc2xpY2UocGF0aFBhcnRzLmxlbmd0aCAtIGRhdGFQYXJ0cy5sZW5ndGgpXG4gICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICB0aGlzLnNvdXJjZUtleSA9IG51bGxcbiAgICAgICAgY29uc3QgbGFzdERhdGFQYXJ0ID0gZGF0YVBhcnRzW2RhdGFQYXJ0cy5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpICYmIGxhc3REYXRhUGFydCA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIG9iamVjdCBzb3VyY2UgYW5kIGFyZSBjcmVhdGluZywgdGhlIGRhdGFQYXRoIG5lZWRzIHRvXG4gICAgICAgICAgLy8gYmUgc2hvcnRlbmVkIGJ5IHRoZSAnY3JlYXRlJyBlbnRyeS4gVGhpcyBpc24ndCBuZWVkZWQgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzLCBhcyB0aGVyZSB0aGUgcGFyYW1ldGVyIGlzIGFjdHVhbGx5IG1hcHBlZCB0byB0aGUgaXRlbSBpZC5cbiAgICAgICAgICBkYXRhUGFydHMubGVuZ3RoLS1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGRhdGFQYXJ0cy5sZW5ndGg7IGkgPCBsICYmIGRhdGE7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRhdGFQYXJ0ID0gZGF0YVBhcnRzW2ldXG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiA6aWQgcGFydCwgZmluZCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2l0aCBnaXZlbiBpZC5cbiAgICAgICAgICBjb25zdCBrZXkgPSAvXjppZC8udGVzdChyb3V0ZVBhcnRzW2ldKVxuICAgICAgICAgICAgPyBkYXRhUGFydCA9PT0gJ2NyZWF0ZSdcbiAgICAgICAgICAgICAgPyBudWxsIC8vIFRoZXJlJ3Mgbm8gaW5kZXggZm9yIGVudHJpZXMgYWJvdXQgdG8gYmUgY3JlYXRlZFxuICAgICAgICAgICAgICA6IHRoaXMuZmluZEl0ZW1JZEluZGV4KHRoaXMuc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGFydClcbiAgICAgICAgICAgIDogZGF0YVBhcnRcbiAgICAgICAgICAvLyBTa2lwIHRoZSBmaW5hbCBsb29rdXAgYnV0IHJlbWVtYmVyIGBzb3VyY2VLZXlgLCBhcyB3ZSB3YW50IHRoZVxuICAgICAgICAgIC8vIHBhcmVudCBkYXRhIHNvIHdlIGNhbiByZXBsYWNlIHRoZSBlbnRyeSBhdCBgc291cmNlS2V5YCBvbiBpdC5cbiAgICAgICAgICBpZiAoaSA9PT0gbCAtIDEpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUtleSA9IGtleVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gZGF0YVtrZXldXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBpbmhlcml0ZWREYXRhKCkge1xuICAgICAgLy8gRGF0YSBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIGFuZCBjbG9uZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlYWN0aXZlXG4gICAgICAvLyBjaGFuZ2VzIHVudGlsIGNoYW5nZXMgYXJlIGFwcGxpZWQgdGhyb3VnaCBzZXRTb3VyY2VEYXRhKCksIHVubGVzc1xuICAgICAgLy8gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIGluIHdoaWNoIGNhc2UgZGF0YSBpcyBtdXRhdGVkIGRpcmVjdGx5LlxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHRoaXMuc291cmNlRGF0YSAmJlxuICAgICAgICB0aGlzLnNvdXJjZUtleSAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5zb3VyY2VEYXRhW3RoaXMuc291cmNlS2V5XVxuICAgICAgICBpZiAoIXRoaXMuaXNNdXRhdGluZykge1xuICAgICAgICAgIC8vIFVzZSBhIHRyaWNrIHRvIHN0b3JlIGNsb25lZCBpbmhlcml0ZWQgZGF0YSBpbiBjbG9uZWREYXRhLCB0byBtYWtlXG4gICAgICAgICAgLy8gaXQgcmVhY3RpdmUgYW5kIHByZXZlbnQgaXQgZnJvbSBiZWluZyBjbG9uZWQgbXVsdGlwbGUgdGltZXMuXG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLmNsb25lZERhdGEgPSBkYXRhID0gY2xvbmUoZGF0YSlcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZGF0YSA9PT0gbnVsbCAmJlxuICAgICAgICAgICF0aGlzLmlzQ3JlYXRpbmcgJiZcbiAgICAgICAgICBpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBvZiBhbiBvYmplY3Qgc291cmNlIGlzIG51bGwsIHJlZGlyZWN0IHRvIGl0cyBjcmVhdGUgcm91dGUuXG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jbG9uZWREYXRhXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaXRlbUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHsgZXh0ZW5kZWQ6IHRydWUgfSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGU6IHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zMzkzI2lzc3VlY29tbWVudC0xMTU4NDcwMTQ5XG4gICAgICBmbHVzaDogJ3Bvc3QnLFxuICAgICAgaGFuZGxlcih0bywgZnJvbSkge1xuICAgICAgICAvLyBSZWxvYWQgZm9ybSBkYXRhIHdoZW4gbmF2aWdhdGluZyB0byBhIGRpZmZlcmVudCBlbnRpdHkgaW4gc2FtZSBmb3JtLlxuICAgICAgICBjb25zdCBwYXJhbSA9IHRoaXMubWV0YT8ucGFyYW1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhcmFtICYmXG4gICAgICAgICAgdGhpcy5wcm92aWRlc0RhdGEgJiZcbiAgICAgICAgICAvLyBUT0RPOiBTZWUgaWYgd2UgY2FuIHJlbW92ZSB0aGlzIGR1ZSB0byBgZmx1c2g6ICdwb3N0J2AuXG4gICAgICAgICAgZnJvbS5tYXRjaGVkWzBdLnBhdGggPT09IHRvLm1hdGNoZWRbMF0ucGF0aCAmJiAvLyBTdGF5aW5nIG9uIHNhbWUgZm9ybVxuICAgICAgICAgIGZyb20ucGFyYW1zW3BhcmFtXSAhPT0gJ2NyZWF0ZScgJiYgLy8gQnV0IGhhdmVuJ3QgYmVlbiBjcmVhdGluZ1xuICAgICAgICAgIHRvLnBhcmFtc1twYXJhbV0gIT09IGZyb20ucGFyYW1zW3BhcmFtXSAvLyBHb2luZyB0byBhIGRpZmZlcmVudCBlbnRpdHlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNvdXJjZURhdGE6ICdjbGVhckNsb25lZERhdGEnLFxuICAgIC8vIE5lZWRlZCBmb3IgdGhlICdjcmVhdGUnIHJlZGlyZWN0IGluIGBpbmhlcml0ZWREYXRhKClgIHRvIHdvcms6XG4gICAgY3JlYXRlOiAnc2V0dXBEYXRhJ1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBlbWl0U2NoZW1hRXZlbnQoZXZlbnQsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfSxcblxuICAgIGdldERhdGFQYXRoRnJvbShyb3V0ZUNvbXBvbmVudCkge1xuICAgICAgLy8gR2V0IHRoZSBkYXRhIHBhdGggYnkgZGVub3JtYWxpemVQYXRoIHRoZSByZWxhdGl2ZSByb3V0ZSBwYXRoXG4gICAgICByZXR1cm4gdGhpcy5hcGkuZGVub3JtYWxpemVQYXRoKFxuICAgICAgICB0aGlzLnBhdGhcbiAgICAgICAgICAvLyBEaXRvVmlld3MgaGF2ZSBuZXN0ZWQgcm91dGVzLCBzbyBkb24ndCByZW1vdmUgdGhlaXIgcGF0aC5cbiAgICAgICAgICAuc2xpY2UoKHJvdXRlQ29tcG9uZW50LmlzVmlldyA/IDAgOiByb3V0ZUNvbXBvbmVudC5wYXRoLmxlbmd0aCkgKyAxKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5nZXRSZXNvdXJjZSgpXG4gICAgZ2V0UmVzb3VyY2Uob3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSBSZXNvdXJjZU1peGluLm1ldGhvZHMuZ2V0UmVzb3VyY2UuY2FsbCh0aGlzLCBvcHRpb25zKVxuICAgICAgcmV0dXJuIGdldE1lbWJlclJlc291cmNlKHRoaXMuaXRlbUlkLCByZXNvdXJjZSkgfHwgcmVzb3VyY2VcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0dXBEYXRhKClcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgfHw9IHRoaXMuY3JlYXRlRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy5jcmVhdGlvblR5cGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZURhdGEgJiYgdGhpcy5zb3VyY2VLZXkgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBtYWluU2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICAgIHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV0gPVxuICAgICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQuZmlsdGVyRGF0YShkYXRhKS5sb2NhbERhdGFcbiAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5vbkNoYW5nZSgpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYWRkU291cmNlRGF0YShkYXRhKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgID8gdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogISF0aGlzLnNvdXJjZURhdGE/LnB1c2goZGF0YSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnNldERhdGEobnVsbClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBzZXREYXRhKCkgaXMgY2FsbGVkIGFmdGVyIHN1Ym1pdCB3aGVuIGRhdGEgaGFzIGNoYW5nZWQuXG4gICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAvLyBGb3IgY29tcG9uZW50cyB3aXRoIHRyYW5zaWVudCBkYXRhLCBtb2RpZnkgdGhpcy5zb3VyY2VEYXRhLlxuICAgICAgICB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJDbG9uZWREYXRhKHRvLCBmcm9tKSB7XG4gICAgICAvLyBPbmx5IGNsZWFyIGlmIHRoZSB3YXRjaGVkIHNvdXJjZURhdGEgaXRzZWxmIGNoYW5nZXMgaW4gdGhlIGZvcm0uXG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlKClcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LnBhdGgpXG4gICAgfSxcblxuICAgIGdldFN1Ym1pdFZlcmIocHJlc2VudCA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBwcmVzZW50XG4gICAgICAgICAgPyAnY3JlYXRlJ1xuICAgICAgICAgIDogJ2NyZWF0ZWQnXG4gICAgICAgIDogcHJlc2VudFxuICAgICAgICAgID8gJ3N1Ym1pdCdcbiAgICAgICAgICA6ICdzdWJtaXR0ZWQnXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24sIHsgdmFsaWRhdGUgPSB0cnVlLCBjbG9zZUZvcm0gPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICh2YWxpZGF0ZSAmJiAhdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBnZXRWZXJiID0gcHJlc2VudCA9PiB0aGlzLnZlcmJzW3RoaXMuZ2V0U3VibWl0VmVyYihwcmVzZW50KV1cblxuICAgICAgLy8gQWxsb3cgYnV0dG9ucyB0byBvdmVycmlkZSBib3RoIG1ldGhvZCBhbmQgcmVzb3VyY2UgcGF0aCB0byBzdWJtaXQgdG86XG4gICAgICBsZXQgeyBtZXRob2QgfSA9IHRoaXNcbiAgICAgIGxldCByZXNvdXJjZSA9IHRoaXMuZ2V0UmVzb3VyY2UoeyBtZXRob2QgfSlcbiAgICAgIGNvbnN0IGJ1dHRvblJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHJlc291cmNlXG4gICAgICB9KVxuICAgICAgcmVzb3VyY2UgPSBidXR0b25SZXNvdXJjZSB8fCByZXNvdXJjZVxuICAgICAgbWV0aG9kID0gcmVzb3VyY2U/Lm1ldGhvZCB8fCBtZXRob2RcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgbGV0IHN1Y2Nlc3NcbiAgICAgIGlmICghYnV0dG9uUmVzb3VyY2UgJiYgdGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRUcmFuc2llbnQoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT5cbiAgICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgPyBgSXRlbSAke2NhcGl0YWxpemUodmVyYil9YFxuICAgICAgICAgICAgICAgIDogYENoYW5nZSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgICAgPyBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgICAgICAgOiBgQ2hhbmdlcyB0byAke3RoaXMuaXRlbUxhYmVsfSB3ZXJlICR7dmVyYn0uYCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICAgICAgc2V0RGF0YTogdHJ1ZSxcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PlxuICAgICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgIHRpdGxlOiBgU3VjY2Vzc2Z1bGx5ICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfSR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgICBpZiAoY2xvc2VGb3JtIHx8IGJ1dHRvbi5jbG9zZUZvcm0pIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgICAvLyBSZWRpcmVjdCB0byB0aGUgZm9ybSBlZGl0aW5nIHRoZSBuZXdseSBjcmVhdGVkIGl0ZW06XG4gICAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHtcbiAgICAgICAgICAgIHBhdGg6IHJlc29sdmVQYXRoKGAke3RoaXMucGF0aH0vLi4vJHtpZH1gKSxcbiAgICAgICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgICAgICBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgX3Jlc291cmNlLCBfbWV0aG9kLCBkYXRhLCB7XG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyxcbiAgICAgIG5vdGlmeUVycm9yXG4gICAgfSkge1xuICAgICAgLy8gSGFuZGxlIHRoZSBkZWZhdWx0IFwic3VibWl0dGluZ1wiIG9mIHRyYW5zaWVudCwgbmVzdGVkIGRhdGE6XG4gICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gdGhpcy5hZGRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9ICdDb3VsZCBub3Qgc3VibWl0IHRyYW5zaWVudCBpdGVtJ1xuICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIFVzZSBhIDxkaXY+IGZvciBuZXN0ZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbmRpdihcbiAgdi1pZj1cIm5lc3RlZFwiXG4pXG4gIHNsb3RcbmZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICB2LWVsc2VcbiAgQHN1Ym1pdC5wcmV2ZW50XG4pXG4gIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Gb3JtSW5uZXInLCB7XG4gIHByb3BzOiB7XG4gICAgbmVzdGVkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Gb3JtIGZyb20gJy4vRGl0b0Zvcm0udnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Gb3JtTmVzdGVkJywge1xuICBleHRlbmRzOiBEaXRvRm9ybVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWZvcm0tbmVzdGVkIHtcbiAgLy8gTm8gc2Nyb2xsaW5nIGluc2lkZSBuZXN0ZWQgZm9ybXMsIGFuZCBwcmV2ZW50IG9wZW4gLm11bHRpc2VsZWN0IGZyb21cbiAgLy8gYmVpbmcgY3JvcHBlZC5cbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWVycm9ycyhcbiAgdi1pZj1cImVycm9yc1wiXG4pXG4gIHVsXG4gICAgbGkoXG4gICAgICB2LWZvcj1cImVycm9yIG9mIGVycm9yc1wiXG4gICAgKSB7eyBlcnJvciB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB0aXBweSBmcm9tICd0aXBweS5qcydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBtYXJrUmF3IH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9FcnJvcnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZXJyb3JzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0aXA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICB0aGlzLiRuZXh0VGljayh0aGlzLnVwZGF0ZUVycm9ycylcbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMudGlwPy5kZXN0cm95KClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlRXJyb3JzKCkge1xuICAgICAgbGV0IHsgdGlwIH0gPSB0aGlzXG4gICAgICB0aXA/LmhpZGUoKVxuICAgICAgaWYgKHRoaXMuZXJyb3JzKSB7XG4gICAgICAgIHRpcCA9IHRoaXMudGlwID8/PSBtYXJrUmF3KHRpcHB5KHRoaXMuJGVsLmNsb3Nlc3QoJy5kaXRvLWNvbnRhaW5lcicpKSlcbiAgICAgICAgdGlwLnNldFByb3BzKHtcbiAgICAgICAgICBjb250ZW50OiB0aGlzLmVycm9ycy5qb2luKCdcXG4nKSxcbiAgICAgICAgICB0aGVtZTogJ2Vycm9yJyxcbiAgICAgICAgICB0cmlnZ2VyOiAnbWFudWFsJyxcbiAgICAgICAgICBhcHBlbmRUbzogJ3BhcmVudCcsXG4gICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tLXN0YXJ0JyxcbiAgICAgICAgICBhbmltYXRpb246ICdzaGlmdC1hd2F5LXN1YnRsZScsXG4gICAgICAgICAgcG9wcGVyT3B0aW9uczoge1xuICAgICAgICAgICAgbW9kaWZpZXJzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgaGlkZU9uQ2xpY2s6IGZhbHNlLFxuICAgICAgICAgIG9mZnNldDogWzMsIDNdLCAvLyAxLzIgZm9ybS1zcGFjaW5nXG4gICAgICAgICAgekluZGV4OiAxXG4gICAgICAgIH0pXG4gICAgICAgIHRpcC5wb3BwZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKCkgPT4gdGlwLmhpZGUoKSlcbiAgICAgICAgdGlwLnNob3coKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWVycm9ycyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gIHVsIHtcbiAgICBjb2xvcjogJGNvbG9yLWVycm9yO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNjb3Blc1xuICBSb3V0ZXJMaW5rKFxuICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgOmtleT1cImtleVwiXG4gICAgdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b21cbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NvcGVzJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY29wZXM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFNjb3BlTGluayhzY29wZSkge1xuICAgICAgY29uc3QgcXVlcnkgPSB7IC4uLnRoaXMucXVlcnksIHNjb3BlOiBzY29wZS5uYW1lIH1cbiAgICAgIGlmIChxdWVyeS5wYWdlKSB7XG4gICAgICAgIHF1ZXJ5LnBhZ2UgPSAwXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsocXVlcnkpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NvcGVzIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1idXR0b24ge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAvLyBBIGJpdCBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mIGVsbGlwc2lzLCB0byBwcmV2ZW50IHJlcGxhY2luZyBzaG9ydCB3b3Jkc1xuICAgIC8vIHdpdGggZWxsaXBzaXMuXG4gICAgbWluLXdpZHRoOiAzZW07XG4gICAgZmxleDogMCAxIGF1dG87XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFlbTtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmctbGVmdDogMWVtO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMWVtO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTtcbiAgICB9XG5cbiAgICAmICsgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAgIH0gLy8gRG9uJ3QgY292ZXIgdGhlIGZvY3VzZWQgYm9yZGVyIG9mIGJ1dHRvbnM6XG4gICAgJjpmb2N1cyB7XG4gICAgICB6LWluZGV4OiAxO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5QYWdpbmF0aW9uKFxuICB2LW1vZGVsOnBhZ2U9XCJwYWdlXCJcbiAgOnBhZ2VTaXplPVwibGltaXRcIlxuICA6dG90YWw9XCJ0b3RhbFwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgUGFnaW5hdGlvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFnaW5hdGlvbicsIHtcbiAgY29tcG9uZW50czogeyBQYWdpbmF0aW9uIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGltaXQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFnZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKCt0aGlzLnF1ZXJ5LnBhZ2UgfHwgMCkgKyAxXG4gICAgICB9LFxuXG4gICAgICBzZXQocGFnZSkge1xuICAgICAgICBpZiAodGhpcy5wYWdlICE9PSBwYWdlKSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgICB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgICAgIHBhZ2U6IHBhZ2UgLSAxXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNEcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERyYWdnYWJsZU9wdGlvbnMoZm9yY2VGYWxsYmFjayA9IGZhbHNlKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1kcmFnZ2FibGUnXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgICAgaGFuZGxlOiAnLmRpdG8tYnV0dG9uLWRyYWcnLFxuICAgICAgICBkcmFnQ2xhc3M6IGAke3ByZWZpeH1fX2RyYWdgLFxuICAgICAgICBjaG9zZW5DbGFzczogYCR7cHJlZml4fV9fY2hvc2VuYCxcbiAgICAgICAgZ2hvc3RDbGFzczogYCR7cHJlZml4fV9fZ2hvc3RgLFxuICAgICAgICBmYWxsYmFja0NsYXNzOiBgJHtwcmVmaXh9X19mYWxsYmFja2AsXG4gICAgICAgIGZvcmNlRmFsbGJhY2ssXG4gICAgICAgIG9uU3RhcnQ6IHRoaXMub25TdGFydERyYWcsXG4gICAgICAgIG9uRW5kOiB0aGlzLm9uRW5kRHJhZ1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblN0YXJ0RHJhZygpIHtcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWVcbiAgICB9LFxuXG4gICAgb25FbmREcmFnKHsgb2xkSW5kZXgsIG5ld0luZGV4IH0pIHtcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlXG4gICAgICBpZiAob2xkSW5kZXggIT09IG5ld0luZGV4KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3QsIHBhZ2luYXRpb25SYW5nZSkge1xuICAgICAgY29uc3QgeyBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgICAgLy8gUmVvcmRlciB0aGUgY2hhbmdlZCBlbnRyaWVzIGJ5IHRoZWlyIG9yZGVyIGtleSwgdGFraW5nIHBhZ2luYXRpb25cbiAgICAgICAgLy8gb2Zmc2V0cyBpbnRvIGFjY291bnQ6XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhZ2luYXRpb25SYW5nZT8uWzBdIHx8IDBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGlzdFtpXVtvcmRlcktleV0gPSBpICsgb2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJlZS1pdGVtKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLWRyYWdnaW5nJzogaXNEcmFnZ2luZyxcbiAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgfWBcbiAgOnN0eWxlPVwibGV2ZWwgPiAwICYmIHsgJy0tbGV2ZWwnOiBsZXZlbCB9XCJcbiAgOmRhdGEtcGF0aD1cInBhdGhcIlxuKVxuICAuZGl0by10cmVlLWhlYWRlcihcbiAgICB2LWlmPVwibGFiZWxcIlxuICApXG4gICAgLmRpdG8tdHJlZS1icmFuY2goXG4gICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgIClcbiAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogb3BlbmVkIH1cIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbChcbiAgICAgICAgdi1odG1sPVwibGFiZWxcIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1pbmZvKFxuICAgICAgICB2LWlmPVwiZGV0YWlsc1wiXG4gICAgICApIHt7IGRldGFpbHMgfX1cbiAgICAuZGl0by10cmVlLWxlYWYoXG4gICAgICB2LWVsc2VcbiAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKFxuICAgICAgICB2LWh0bWw9XCJsYWJlbFwiXG4gICAgICApXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwoXG4gICAgICB2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgIClcbiAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICAgICAgQGNsaWNrPVwib25FZGl0XCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICApXG4gIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICB2LWlmPVwicHJvcGVydGllc1wiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgKVxuICAgIHRyKFxuICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICApXG4gICAgICB0ZFxuICAgICAgICBEaXRvTGFiZWwoXG4gICAgICAgICAgdi1pZj1cInByb3BlcnR5LmxhYmVsICE9PSBmYWxzZVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgIDpsYWJlbD1cImdldExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgIClcbiAgICAgIERpdG9UYWJsZUNlbGwoXG4gICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICBEaXRvRHJhZ2dhYmxlKFxuICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICA6bW9kZWxWYWx1ZT1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICA6b3B0aW9ucz1cImdldERyYWdnYWJsZU9wdGlvbnModHJ1ZSlcIlxuICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgQHVwZGF0ZTptb2RlbFZhbHVlPVwidmFsdWUgPT4gKGNoaWxkcmVuTGlzdCA9IHZhbHVlKVwiXG4gIClcbiAgICBEaXRvVHJlZUl0ZW0oXG4gICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2hpbGRyZW5JdGVtc1wiXG4gICAgICA6a2V5PVwiZ2V0SXRlbVVpZChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhKVwiXG4gICAgICA6c2NoZW1hPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgOmRhdGE9XCJpdGVtLmRhdGFcIlxuICAgICAgOnBhdGg9XCJpdGVtLnBhdGhcIlxuICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgOmFjdGl2ZT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICA6bGV2ZWw9XCJsZXZlbCArIDFcIlxuICAgIClcbiAgICAvLy0gVE9ETzogQ29udmVydCBkaXRvLXRyZWUtaXRlbSB0byB1c2UgZGl0by1sYWJlbCBpbnRlcm5hbGx5LCBhbmQgdGhlblxuICAgIC8vLSBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluJ1xuaW1wb3J0IFNvcnRhYmxlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UcmVlSXRlbScsIHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBTb3J0YWJsZU1peGluXSxcbiAgaW5qZWN0OiBbJ2NvbnRhaW5lciddLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbQXJyYXksIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBvcGVuOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWN0aXZlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbGV2ZWw6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVuZWQ6IHRoaXMub3BlbiB8fCB0aGlzLnNjaGVtYS5vcGVuXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5tZXRhXG4gICAgfSxcblxuICAgIHN0b3JlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLnN0b3JlXG4gICAgfSxcblxuICAgIGRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLmRpc2FibGVkXG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEucHJvcGVydGllcylcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU2hvdWxkIHRoaXMgYmUgbmFtZWQgYHNvdXJjZVNjaGVtYWAgaW5zdGVhZD8gVXNlIFNvdXJjZU1peGluP1xuICAgIGNoaWxkcmVuU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuTGlzdDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5jaGlsZHJlblNjaGVtYT8ubmFtZVxuICAgICAgICByZXR1cm4gbmFtZSAmJiB0aGlzLmRhdGFbbmFtZV1cbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5jaGlsZHJlblNjaGVtYT8ubmFtZVxuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgICB0aGlzLmRhdGFbbmFtZV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNoaWxkcmVuRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZHJhZ2dhYmxlJywge1xuICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgc2NoZW1hOiB0aGlzLmNoaWxkcmVuU2NoZW1hXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIG51bUNoaWxkcmVuKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1Qcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcz8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtRW50cmllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLm51bVByb3BlcnRpZXMgKyB0aGlzLm51bUNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuSXRlbXMoKSB7XG4gICAgICBjb25zdCB7IGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QgfSA9IHRoaXNcbiAgICAgIGlmIChjaGlsZHJlblNjaGVtYSAmJiBjaGlsZHJlbkxpc3QpIHtcbiAgICAgICAgY29uc3QgeyBlZGl0UGF0aCB9ID0gdGhpcy5jb250YWluZXJcbiAgICAgICAgY29uc3QgY2hpbGRyZW5PcGVuID0gIXRoaXMucGF0aCAmJiBjaGlsZHJlblNjaGVtYS5vcGVuXG4gICAgICAgIC8vIEJ1aWxkIGEgY2hpbGRyZW4gbGlzdCB3aXRoIGNoaWxkIG1ldGEgaW5mb3JtYXRpb24gZm9yIHRoZSB0ZW1wbGF0ZS5cbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT3JkZXIoXG4gICAgICAgICAgY2hpbGRyZW5TY2hlbWEsXG4gICAgICAgICAgY2hpbGRyZW5MaXN0Lm1hcCgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSAoXG4gICAgICAgICAgICAgIGNoaWxkcmVuU2NoZW1hLnBhdGggJiZcbiAgICAgICAgICAgICAgYCR7dGhpcy5wYXRofS8ke2NoaWxkcmVuU2NoZW1hLnBhdGh9LyR7aW5kZXh9YFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3BlbiA9IChcbiAgICAgICAgICAgICAgY2hpbGRyZW5PcGVuIHx8XG4gICAgICAgICAgICAgIC8vIE9ubHkgY291bnQgYXMgXCJpbiBlZGl0IHBhdGhcIiB3aGVuIGl0J3Mgbm90IHRoZSBmdWxsIGVkaXQgcGF0aC5cbiAgICAgICAgICAgICAgZWRpdFBhdGguc3RhcnRzV2l0aChwYXRoKSAmJiBwYXRoLmxlbmd0aCA8IGVkaXRQYXRoLmxlbmd0aFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgYWN0aXZlID0gZWRpdFBhdGggPT09IHBhdGhcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgIG9wZW4sXG4gICAgICAgICAgICAgIGFjdGl2ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXVxuICAgIH0sXG5cbiAgICBkZXRhaWxzKCkge1xuICAgICAgY29uc3QgeyBudW1DaGlsZHJlbiB9ID0gdGhpc1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbnVtQ2hpbGRyZW4gJiZcbiAgICAgICAgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgICAgbnVtQ2hpbGRyZW4gPT09IDEgPyAnaXRlbScgOiAnaXRlbXMnXG4gICAgICAgIH1gXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZHJhZ2dhYmxlIHx8IHRoaXMuZWRpdGFibGUgfHwgdGhpcy5kZWxldGFibGVcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU3VwcG9ydCBjcmVhdGFibGUhXG4gICAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIGNyZWF0YWJsZSwgZWRpdGFibGUgYW5kIGRlbGV0YWJsZSBvdmVycmlkZXMgb24gdGhlXG4gICAgLy8gYXNzb2NpYXRlZCBmb3JtcywganVzdCBsaWtlIGluIGBUeXBlTGlzdGAgYW5kIGBUeXBlT2JqZWN0YCwgdGhyb3VnaFxuICAgIC8vIGBEaXRvRWRpdEJ1dHRvbnNgLiBJdCB3b3VsZCBiZSBiZXN0IHRvIHVzZSBgRGl0b0VkaXRCdXR0b25zYCBoZXJlIHRvby5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgcHJvcGVydHkubmFtZSlcbiAgICB9LFxuXG4gICAgZWRpdFBhdGgocGF0aCkge1xuICAgICAgLy8gQWxsIHdlIGdvdCB0byBkbyBpcyBwdXNoIHRoZSByaWdodCBlZGl0IHBhdGggdG8gdGhlIHJvdXRlciwgdGhlIHJlc3RcbiAgICAgIC8vIGlzIGhhbmRsZWQgYnkgb3VyIHJvdXRlcywgYWxsb3dpbmcgcmVsb2FkcyBhcyB3ZWxsLlxuICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICBwYXRoOiBgJHt0aGlzLmNvbnRhaW5lci5wYXRofSR7cGF0aH1gLFxuICAgICAgICAvLyBQcmVzZXJ2ZSBjdXJyZW50IHF1ZXJ5XG4gICAgICAgIHF1ZXJ5OiB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25FZGl0KCkge1xuICAgICAgdGhpcy5lZGl0UGF0aCh0aGlzLnBhdGgpXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlXG4gICAgb25FbmREcmFnKGV2ZW50KSB7XG4gICAgICBTb3J0YWJsZU1peGluLm1ldGhvZHMub25FbmREcmFnLmNhbGwodGhpcywgZXZlbnQpXG4gICAgICBjb25zdCB7IGl0ZW0gfSA9IGV2ZW50XG4gICAgICAvLyBQcmVzZXJ2ZSBhY3RpdmUgc3RhdGUgb2YgZWRpdGVkIHN1Yi1pdGVtcywgYnkgZWRpdGluZyB0aGVpciBuZXcgcGF0aC5cbiAgICAgIGlmIChpdGVtLmNsYXNzTGlzdC5jb250YWlucygnZGl0by1hY3RpdmUnKSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lZGl0UGF0aChldmVudC5pdGVtLmRhdGFzZXQucGF0aClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmVlLWl0ZW0ge1xuICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH07XG5cbiAgPiAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgPiAuZGl0by10cmVlLWJyYW5jaCxcbiAgICA+IC5kaXRvLXRyZWUtbGVhZiB7XG4gICAgICAvLyBVc2UgYC0tbGV2ZWxgIENTUyB2YXJpYWJsZSB0byBjYWxjdWxhdGVkIHRoZSBhY2N1bXVsYXRlZCBpbmRlbnRcbiAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgLy8gVGhpcyB3YXksIHdlIGNhbiBrZWVwIHRoZSAuZGl0by1hY3RpdmUgYXJlYSBjb3ZlciB0aGUgZnVsbCB3aWR0aDpcbiAgICAgIHBhZGRpbmctbGVmdDogY2FsYyh2YXIoLS1jaGV2cm9uLWluZGVudCkgKiAodmFyKC0tbGV2ZWwsIDEpIC0gMSkpO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXRyZWUtYnJhbmNoIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIH1cblxuICAuZGl0by10cmVlLWJyYW5jaCxcbiAgLmRpdG8tdHJlZS1sZWFmIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXg6IGF1dG87XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogMXB4IDA7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG4gIH1cblxuICAuZGl0by10cmVlLWxhYmVsLFxuICAuZGl0by10cmVlLWluZm8ge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAuZGl0by10cmVlLWluZm8ge1xuICAgIHBhZGRpbmctbGVmdDogMC4zNWVtO1xuICAgIGNvbG9yOiByZ2JhKCRjb2xvci1ibGFjaywgMC4yKTtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXJnaW46IDFweCAwIDFweCAxZW07XG4gIH1cblxuICAuZGl0by10cmVlLWhlYWRlcjpob3ZlciB7XG4gICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgfSAvLyBIaWRlIGJ1dHRvbnMgZHVyaW5nIGRyYWdnaW5nXG4gIH1cblxuICAmLmRpdG8tZHJhZ2dpbmcge1xuICAgIC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLmRpdG8tYWN0aXZlIHtcbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICBwYWRkaW5nOiAwICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcik7XG5cbiAgICAgID4gLmRpdG8tdHJlZS1icmFuY2gge1xuICAgICAgICA+IC5kaXRvLWNoZXZyb246OmJlZm9yZSB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA+ICogPiAuZGl0by10cmVlLWxhYmVsIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1wcm9wZXJ0aWVzIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tbGVmdDogJGNoZXZyb24taW5kZW50O1xuXG4gICAgPiB0ciB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gICAgfVxuXG4gICAgLmRpdG8tbGFiZWwge1xuICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICc6ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICB0clxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgKVxuICAgICAgdGgoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICBSb3V0ZXJMaW5rKFxuICAgICAgICAgIHYtaWY9XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICAgICAgOnRvPVwiZ2V0U29ydExpbmsoY29sdW1uKVwiXG4gICAgICAgICAgY3VzdG9tXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgICBzcGFuKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICApIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICB0aChcbiAgICAgIHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgICAgLy8tIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Nzc1xuICAgICAgc3BhblxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJsZUhlYWQnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbHVtbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGhhc0VkaXRCdXR0b25zOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvcnQoKSB7XG4gICAgICBjb25zdCBvcmRlciA9ICh0aGlzLnF1ZXJ5Lm9yZGVyIHx8ICcnKS5zcGxpdCgvXFxzKy8pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBvcmRlclswXSxcbiAgICAgICAgb3JkZXI6IG9yZGVyWzFdXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb2x1bW5DbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jb2x1bW4tJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0U29ydENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZVxuICAgICAgICA/IGBkaXRvLXNlbGVjdGVkIGRpdG8tb3JkZXItJHt0aGlzLnNvcnQub3JkZXJ9YFxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0U29ydExpbmsoY29sdW1uKSB7XG4gICAgICAvLyBUb2dnbGUgb3JkZXIgaWYgdGhlIHNhbWUgY29sdW1uIGlzIGNsaWNrZWQgYWdhaW4uXG4gICAgICBjb25zdCBvcmRlciA9XG4gICAgICAgIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZSAmJiB0aGlzLnNvcnQub3JkZXIgPT09ICdhc2MnXG4gICAgICAgICAgPyAnZGVzYydcbiAgICAgICAgICA6ICdhc2MnXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICBvcmRlcjogYCR7Y29sdW1uLm5hbWV9ICR7b3JkZXJ9YFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10YWJsZS1oZWFkIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgdHIge1xuICAgIHRoIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZywgc2VlIGJlbG93XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrOyAvLyBPdmVycmlkZSBkZWZhdWx0IGlubGluZS1mbGV4IHBvc2l0aW9uaW5nLlxuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICAgICAgICY6ZW1wdHk6OmFmdGVyIHtcbiAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgY29udGVudDogJ1xcMjAwYic7IC8vIHplcm8td2lkdGggc3BhY2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRkKFxuICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgOnN0eWxlPVwiY2VsbC5zdHlsZVwiXG4pXG4gIC8vLSBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjZWxsLmNvbXBvbmVudFwiXG4gICAgOmlzPVwiY2VsbC5jb21wb25lbnRcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuICBzcGFuKFxuICAgIHYtZWxzZVxuICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBDb250ZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL0NvbnRleHRNaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJsZUNlbGwnLCB7XG4gIG1peGluczogW0NvbnRleHRNaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjZWxsOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckNlbGwoaXRlbSkge1xuICAgICAgY29uc3QgeyBuYW1lLCByZW5kZXIgfSA9IHRoaXMuY2VsbFxuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW25hbWVdXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbCh2YWx1ZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by11cGxvYWQtZmlsZVxuICAuZGl0by10aHVtYm5haWwoXG4gICAgdi1pZj1cInRodW1ibmFpbFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tdGh1bWJuYWlsLS0ke3RodW1ibmFpbH1gXCJcbiAgKVxuICAgIC5kaXRvLXRodW1ibmFpbF9faW5uZXJcbiAgICAgIGltZyhcbiAgICAgICAgdi1pZj1cInNvdXJjZVwiXG4gICAgICAgIDpzcmM9XCJzb3VyY2VcIlxuICAgICAgICBjcm9zc29yaWdpbj1cImFub255bW91c1wiXG4gICAgICApXG4gICAgICAuZGl0by10aHVtYm5haWxfX3R5cGUoXG4gICAgICAgIHYtZWxzZVxuICAgICAgKVxuICAgICAgICBzcGFuIHt7IHR5cGUgfX1cbiAgc3BhbiB7eyBmaWxlLm5hbWUgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9VcGxvYWRGaWxlJywge1xuICBwcm9wczoge1xuICAgIGZpbGU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRodW1ibmFpbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aHVtYm5haWxVcmw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRVcmw6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgVFlQRVNbdGhpcy5maWxlLnR5cGVdIHx8XG4gICAgICAgIHRoaXMuZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCkudG9VcHBlckNhc2UoKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBzb3VyY2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRVcmwgfHwgdGhpcy50aHVtYm5haWxVcmxcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAnZmlsZS51cGxvYWQuZmlsZSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXIoZmlsZSkge1xuICAgICAgICBpZiAodGhpcy50aHVtYm5haWwgJiYgZmlsZT8udHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRVcmwgPSByZWFkZXIucmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGxvYWRVcmwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IFRZUEVTID0ge1xuICAndGV4dC9wbGFpbic6ICdUWFQnLFxuICAndGV4dC9odG1sJzogJ0hUTUwnLFxuICAndGV4dC9jc3MnOiAnQ1NTJyxcbiAgJ3RleHQvamF2YXNjcmlwdCc6ICdKUycsXG4gICdpbWFnZS9qcGVnJzogJ0pQRycsXG4gICdpbWFnZS9wbmcnOiAnUE5HJyxcbiAgJ2ltYWdlL2dpZic6ICdHSUYnLFxuICAnaW1hZ2Uvc3ZnK3htbCc6ICdTVkcnLFxuICAnbW92aWUvbXA0JzogJ01QNCcsXG4gICdhdWRpby9tcGVnJzogJ01QMycsXG4gICdhcHBsaWNhdGlvbi9qc29uJzogJ0pTT04nLFxuICAnYXBwbGljYXRpb24veG1sJzogJ1hNTCcsXG4gICdhcHBsaWNhdGlvbi9wZGYnOiAnUERGJyxcbiAgJ2FwcGxpY2F0aW9uL3ppcCc6ICdaSVAnXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOm1hdGgnO1xuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdXBsb2FkLWZpbGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG59XG5cbi5kaXRvLXRodW1ibmFpbCB7XG4gICRzZWxmOiAmO1xuXG4gIC8vIFNtYWxsIHNpemUgYnkgZGVmYXVsdFxuICAtLW1heC1zaXplOiAjezEgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgLS1jb3JuZXItc2l6ZTogY2FsYyh2YXIoLS1tYXgtc2l6ZSkgLyA1KTtcbiAgLS1zaGFkb3ctc2l6ZTogMXB4O1xuICAtLW1pbi1zaXplOiBjYWxjKDIgKiB2YXIoLS1jb3JuZXItc2l6ZSkpO1xuICAtLW1hcmdpbjogMGVtO1xuICAtLWRyb3Atc2hhZG93OiBkcm9wLXNoYWRvdyhcbiAgICAwIGNhbGModmFyKC0tc2hhZG93LXNpemUpICogMC43NSkgdmFyKC0tc2hhZG93LXNpemUpICN7cmdiYShcbiAgICAgICAgJGNvbG9yLWJsYWNrLFxuICAgICAgICAwLjRcbiAgICAgICl9XG4gICk7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW46IHZhcigtLW1hcmdpbik7XG4gIG1hcmdpbi1yaWdodDogMC41ZW07XG4gIGZpbHRlcjogdmFyKC0tZHJvcC1zaGFkb3cpO1xuXG4gICYtLXNtYWxsIHtcbiAgICAtLW1heC1zaXplOiAjezEgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgICAtLW1hcmdpbjogMGVtO1xuICAgIC0tc2hhZG93LXNpemU6IDFweDtcbiAgfVxuXG4gICYtLW1lZGl1bSB7XG4gICAgLS1tYXgtc2l6ZTogI3syICogJGlucHV0LWhlaWdodH07XG4gICAgLS1tYXJnaW46IDAuMjVlbTtcbiAgICAtLXNoYWRvdy1zaXplOiAxLjVweDtcbiAgfVxuXG4gICYtLWxhcmdlIHtcbiAgICAtLW1heC1zaXplOiAjezQgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgICAtLW1hcmdpbjogMC41ZW07XG4gICAgLS1zaGFkb3ctc2l6ZTogMi41cHg7XG4gIH1cblxuICAmX19pbm5lciB7XG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICBjbGlwLXBhdGg6IHBvbHlnb24oXG4gICAgICAwIDAsXG4gICAgICBjYWxjKDEwMCUgLSB2YXIoLS1jb3JuZXItc2l6ZSkpIDAsXG4gICAgICAxMDAlIHZhcigtLWNvcm5lci1zaXplKSxcbiAgICAgIDEwMCUgMTAwJSxcbiAgICAgIDAgMTAwJVxuICAgICk7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgd2lkdGg6IHZhcigtLWNvcm5lci1zaXplKTtcbiAgICAgIGhlaWdodDogdmFyKC0tY29ybmVyLXNpemUpO1xuICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjZmZmZmZmLCAjZWVlZWVlIDQwJSwgI2RkZGRkZCA1MCUpO1xuICAgICAgZmlsdGVyOiB2YXIoLS1kcm9wLXNoYWRvdyk7XG4gICAgfVxuICB9XG5cbiAgJl9fdHlwZSB7XG4gICAgLS1mb250LXNpemU6IHZhcigtLWNvcm5lci1zaXplKTtcblxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtaW4td2lkdGg6IHZhcigtLW1pbi1zaXplKTtcbiAgICBtaW4taGVpZ2h0OiB2YXIoLS1tYXgtc2l6ZSk7XG4gICAgYXNwZWN0LXJhdGlvOiAzIC8gNDtcblxuICAgIHNwYW4ge1xuICAgICAgLS1jb2xvcjogI3skY29sb3ItZ3JleX07XG5cbiAgICAgIGZvbnQtc2l6ZTogbWluKHZhcigtLWZvbnQtc2l6ZSksICN7MS4yNSAqICRmb250LXNpemV9KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvcik7XG5cbiAgICAgICN7JHNlbGZ9Om5vdCgjeyRzZWxmfS0tc21hbGwpICYge1xuICAgICAgICBwYWRkaW5nOiAwIGNhbGModmFyKC0tZm9udC1zaXplKSAvIDQpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLWZvbnQtc2l6ZSkgLyA0KTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3IpO1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn0tLW1lZGl1bSAmIHtcbiAgICAgICAgLS1jb2xvcjogI3skY29sb3ItbGlnaHR9O1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfS0tbGFyZ2UgJiB7XG4gICAgICAgIC0tY29sb3I6ICN7JGNvbG9yLWxpZ2h0ZXJ9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgLy8gU1ZHIGltYWdlcyBuZWVkIDEwMCUgc2V0dGluZ3MgdG8gc2NhbGUgaW50byB0aGUgY29udGFpbmVyLlxuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtaW4td2lkdGg6IHZhcigtLW1pbi1zaXplKTtcbiAgICBtaW4taGVpZ2h0OiB2YXIoLS1taW4tc2l6ZSk7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS1tYXgtc2l6ZSk7XG4gICAgbWF4LWhlaWdodDogdmFyKC0tbWF4LXNpemUpO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgdHJ5T25Nb3VudGVkLCB0cnlPblNjb3BlRGlzcG9zZSwgdW5yZWZFbGVtZW50LCBkZWZhdWx0RG9jdW1lbnQsIHVzZVZNb2RlbCB9IGZyb20gJ0B2dWV1c2UvY29yZSc7XG5pbXBvcnQgeyBpc1JlZiwgdG9WYWx1ZSwgbmV4dFRpY2ssIGRlZmluZUNvbXBvbmVudCwgcmVmLCByZWFjdGl2ZSwgaCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgU29ydGFibGUgZnJvbSAnc29ydGFibGVqcyc7XG5cbmZ1bmN0aW9uIHVzZVNvcnRhYmxlKGVsLCBsaXN0LCBvcHRpb25zID0ge30pIHtcbiAgbGV0IHNvcnRhYmxlO1xuICBjb25zdCB7IGRvY3VtZW50ID0gZGVmYXVsdERvY3VtZW50LCAuLi5yZXNldE9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIG9uVXBkYXRlOiAoZSkgPT4ge1xuICAgICAgbW92ZUFycmF5RWxlbWVudChsaXN0LCBlLm9sZEluZGV4LCBlLm5ld0luZGV4LCBlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IHR5cGVvZiBlbCA9PT0gXCJzdHJpbmdcIiA/IGRvY3VtZW50Py5xdWVyeVNlbGVjdG9yKGVsKSA6IHVucmVmRWxlbWVudChlbCk7XG4gICAgaWYgKCF0YXJnZXQgfHwgc29ydGFibGUgIT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybjtcbiAgICBzb3J0YWJsZSA9IG5ldyBTb3J0YWJsZSh0YXJnZXQsIHsgLi4uZGVmYXVsdE9wdGlvbnMsIC4uLnJlc2V0T3B0aW9ucyB9KTtcbiAgfTtcbiAgY29uc3Qgc3RvcCA9ICgpID0+IHtcbiAgICBzb3J0YWJsZT8uZGVzdHJveSgpO1xuICAgIHNvcnRhYmxlID0gdW5kZWZpbmVkO1xuICB9O1xuICBjb25zdCBvcHRpb24gPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgIHNvcnRhYmxlPy5vcHRpb24obmFtZSwgdmFsdWUpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBzb3J0YWJsZT8ub3B0aW9uKG5hbWUpO1xuICB9O1xuICB0cnlPbk1vdW50ZWQoc3RhcnQpO1xuICB0cnlPblNjb3BlRGlzcG9zZShzdG9wKTtcbiAgcmV0dXJuIHtcbiAgICBzdG9wLFxuICAgIHN0YXJ0LFxuICAgIG9wdGlvblxuICB9O1xufVxuZnVuY3Rpb24gaW5zZXJ0Tm9kZUF0KHBhcmVudEVsZW1lbnQsIGVsZW1lbnQsIGluZGV4KSB7XG4gIGNvbnN0IHJlZkVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LmNoaWxkcmVuW2luZGV4XTtcbiAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoZWxlbWVudCwgcmVmRWxlbWVudCk7XG59XG5mdW5jdGlvbiByZW1vdmVOb2RlKG5vZGUpIHtcbiAgaWYgKG5vZGUucGFyZW50Tm9kZSlcbiAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG59XG5mdW5jdGlvbiBtb3ZlQXJyYXlFbGVtZW50KGxpc3QsIGZyb20sIHRvLCBlID0gbnVsbCkge1xuICBpZiAoZSAhPSBudWxsKSB7XG4gICAgcmVtb3ZlTm9kZShlLml0ZW0pO1xuICAgIGluc2VydE5vZGVBdChlLmZyb20sIGUuaXRlbSwgZnJvbSk7XG4gIH1cbiAgY29uc3QgX3ZhbHVlSXNSZWYgPSBpc1JlZihsaXN0KTtcbiAgY29uc3QgYXJyYXkgPSBfdmFsdWVJc1JlZiA/IFsuLi50b1ZhbHVlKGxpc3QpXSA6IHRvVmFsdWUobGlzdCk7XG4gIGlmICh0byA+PSAwICYmIHRvIDwgYXJyYXkubGVuZ3RoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5LnNwbGljZShmcm9tLCAxKVswXTtcbiAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICBhcnJheS5zcGxpY2UodG8sIDAsIGVsZW1lbnQpO1xuICAgICAgaWYgKF92YWx1ZUlzUmVmKVxuICAgICAgICBsaXN0LnZhbHVlID0gYXJyYXk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgVXNlU29ydGFibGUgPSAvKiBAX19QVVJFX18gKi8gLyogI19fUFVSRV9fICovIGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6IFwiVXNlU29ydGFibGVcIixcbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IFwiZGl2XCJcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBzbG90cyB9KSB7XG4gICAgY29uc3QgbGlzdCA9IHVzZVZNb2RlbChwcm9wcywgXCJtb2RlbFZhbHVlXCIpO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlZigpO1xuICAgIGNvbnN0IGRhdGEgPSByZWFjdGl2ZSh1c2VTb3J0YWJsZSh0YXJnZXQsIGxpc3QsIHByb3BzLm9wdGlvbnMpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHNsb3RzLmRlZmF1bHQpXG4gICAgICAgIHJldHVybiBoKHByb3BzLnRhZywgeyByZWY6IHRhcmdldCB9LCBzbG90cy5kZWZhdWx0KGRhdGEpKTtcbiAgICB9O1xuICB9XG59KTtcblxuZXhwb3J0IHsgVXNlU29ydGFibGUgfTtcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5Vc2VTb3J0YWJsZS5kaXRvLWRyYWdnYWJsZShcbiAgdi1pZj1cImRyYWdnYWJsZVwiXG4gIDpjbGFzcz1cInsgJ2RpdG8tZHJhZ2dhYmxlLS1kcmFnZ2luZyc6IGlzRHJhZ2dpbmcgfVwiXG4gIDp0YWc9XCJ0YWdcIlxuICA6bW9kZWxWYWx1ZT1cIm1vZGVsVmFsdWVcIlxuICA6b3B0aW9ucz1cInsgLi4ub3B0aW9ucywgb25TdGFydCwgb25FbmQgfVwiXG4gIEB1cGRhdGU6bW9kZWxWYWx1ZT1cIiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsICRldmVudClcIlxuKVxuICBzbG90XG5jb21wb25lbnQoXG4gIHYtZWxzZVxuICA6aXM9XCJ0YWdcIlxuKVxuICBzbG90XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudCdcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBVc2VTb3J0YWJsZSB9IGZyb20gJ0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZVNvcnRhYmxlL2NvbXBvbmVudCdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRHJhZ2dhYmxlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVXNlU29ydGFibGUgfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RpdidcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBkcmFnZ2FibGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vdXNlRXZlbnRzOiBudWxsLFxuICAgICAgaXNEcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uU3RhcnQoZXZlbnQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vblN0YXJ0Py4oZXZlbnQpXG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlXG4gICAgICB0aGlzLm1vdXNlRXZlbnRzPy5yZW1vdmUoKVxuICAgIH0sXG5cbiAgICBvbkVuZChldmVudCkge1xuICAgICAgdGhpcy5vcHRpb25zLm9uRW5kPy4oZXZlbnQpXG4gICAgICAvLyBLZWVwIGBpc0RyYWdnaW5nYCB0cnVlIHVudGlsIHRoZSBuZXh0IG1vdXNlIGludGVyYWN0aW9uIHNvIHRoYXRcbiAgICAgIC8vIGNvbmZ1c2VkIGhvdmVyIHN0YXRlcyBhcmUgY2xlYXJlZCBiZWZvcmUgcmVtb3ZpbmcgdGhlIGhvdmVyIGNhdGNoZXIuXG4gICAgICB0aGlzLm1vdXNlRXZlbnRzID0gdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBtb3VzZWRvd246IHRoaXMub25Nb3VzZSxcbiAgICAgICAgbW91c2Vtb3ZlOiB0aGlzLm9uTW91c2UsXG4gICAgICAgIG1vdXNlbGVhdmU6IHRoaXMub25Nb3VzZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25Nb3VzZSgpIHtcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlXG4gICAgICB0aGlzLm1vdXNlRXZlbnRzPy5yZW1vdmUoKVxuICAgICAgdGhpcy5tb3VzZUV2ZW50cyA9IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kcmFnZ2FibGUge1xuICAvLyBPdmVybGF5IGEgaG92ZXIgY2F0Y2hlciB3aGlsZSB3ZSdyZSBkcmFnZ2luZyB0byBwcmV2ZW50IGhvdmVyIHN0YXRlcyBmcm9tXG4gIC8vIGdldHRpbmcgc3R1Y2sgLyBjb25mdXNlZC4gU2FmYXJpIHN0cnVnZ2xlcyB3aXRoIHRoaXMsIHNvIGRpc2FibGUgaXQgdGhlcmUuXG4gIEBpbmNsdWRlIGJyb3dzZXItcXVlcnkoKCdjaHJvbWUnLCAnZmlyZWZveCcpKSB7XG4gICAgJjpoYXMoJl9fY2hvc2VuKSxcbiAgICAmLS1kcmFnZ2luZyB7XG4gICAgICA+ICoge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICAgPiA6Zmlyc3QtY2hpbGQ6OmFmdGVyIHtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX19mYWxsYmFjayB7XG4gICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDJweCA0cHggJGNvbG9yLXNoYWRvdyk7XG5cbiAgICAvLyBOZXN0ZWQgPHRkPiBuZWVkIHRvIGFsc28gc3dpdGNoIHRvIGBkaXNwbGF5OiBmbGV4YCBzdHlsZSBkdXJpbmcgZHJhZ2dpbmcuXG4gICAgJixcbiAgICB0ZCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgICA+ICoge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zcGlubmVyKFxuICB2LXNob3c9XCJsb2FkaW5nXCJcbiAgOnN0eWxlPVwieyAnLS1jb2xvcic6IGNvbG9yLCAnLS1zaXplJzogc2l6ZSwgJy0tbWFyZ2luJzogbWFyZ2luIH1cIlxuKVxuICAuZGl0by1zcGlubmVyX19wdWxzZS5kaXRvLXNwaW5uZXJfX3B1bHNlMVxuICAuZGl0by1zcGlubmVyX19wdWxzZS5kaXRvLXNwaW5uZXJfX3B1bHNlMlxuICAuZGl0by1zcGlubmVyX19wdWxzZS5kaXRvLXNwaW5uZXJfX3B1bHNlM1xuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NwaW5uZXInLCB7XG4gIHByb3BzOiB7XG4gICAgbG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBzaXplOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBtYXJnaW46IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1zcGlubmVyIHtcbiAgLS1jb2xvcjogIzk5OTk5OTtcbiAgLS1zaXplOiA4cHg7XG4gIC0tbWFyZ2luOiAycHg7XG5cbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAmX19wdWxzZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yKTtcbiAgICB3aWR0aDogdmFyKC0tc2l6ZSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplKTtcbiAgICBtYXJnaW46IHZhcigtLW1hcmdpbik7XG4gICAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgICBhbmltYXRpb246IGRpdG8tc3Bpbm5lci1wdWxzZSAwLjc1cyBjdWJpYy1iZXppZXIoMC4yLCAwLjY4LCAwLjE4LCAxLjA4KSAwc1xuICAgICAgaW5maW5pdGUgYm90aDtcbiAgfVxuXG4gICZfX3B1bHNlMSB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjEycztcbiAgfVxuXG4gICZfX3B1bHNlMiB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjI0cztcbiAgfVxuXG4gICZfX3B1bHNlMyB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjM2cztcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGRpdG8tc3Bpbm5lci1wdWxzZSB7XG4gIDAlLFxuICA4MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDQ1JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGRpdG8tc3Bpbm5lci1wdWxzZSB7XG4gIDAlLFxuICA4MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDQ1JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZnVuY3Rpb24gRGl0b1ZOb2RlKHsgdm5vZGUgfSkge1xuICByZXR1cm4gdm5vZGVcbn1cblxuRGl0b1ZOb2RlLnByb3BzID0ge1xuICB2bm9kZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Wbm9kZScsIERpdG9WTm9kZSlcbjwvc2NyaXB0PlxuIiwiLy8gRGl0b1R5cGVDb21wb25lbnQgaXMgdGhlIGFic3RyYWN0IGJhc2UgY29tcG9uZW50IGZvciBhbGwgb3RoZXIgdHlwZVxuLy8gY29tcG9uZW50cyBpbnNpZGUgdGhlIHR5cGVzLyBmb2xkZXIuIFRoZXJlJ3MgYWxzbyBhIHNlcGFyYXRlIGNvbmNyZXRlXG4vLyBgRGl0b1R5cGVDb21wb25lbnQudnVlYCBjb21wb25lbnQsIHVzZSB0byByZW5kZXIgYHsgdHlwZTogJ2NvbXBvbmVudCcgfWBcbmltcG9ydCB7IGFzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVnaXN0ZXJUeXBlQ29tcG9uZW50LCBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGV4dGVuZHM6IERpdG9Db21wb25lbnQsXG4gIG1peGluczogW1R5cGVNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IGZhbHNlLFxuICB0ZXh0RmllbGQ6IGZhbHNlLFxuICAvLyBTZXQgcmVhc29uYWJsZSBkZWZhdWx0cyBmb3IgYWxsIG9mIHRoZXNlIHRoYXQgYXJlIHVzZWQgYnkgbW9zdCB0eXBlXG4gIC8vIGNvbXBvbmVudHMuIFRoZXNlIG9ubHkgbmVlZCBkZWZpbmluZyBpbiBzdWItY2xhc3NlcyB3aGVuIHRoZXkgZGlmZmVyLlxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRlZmF1bHROZXN0ZWQ6IHRydWUsXG4gIGRlZmF1bHRWaXNpYmxlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiB0cnVlLFxuICBleGNsdWRlVmFsdWU6IGZhbHNlLFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IG51bGwsXG4gIG9taXRTcGFjaW5nOiBmYWxzZSxcblxuICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50LFxuXG4gIGdldDogZ2V0VHlwZUNvbXBvbmVudCxcblxuICByZWdpc3Rlcih0eXBlcywgZGVmaW5pdGlvbiA9IHt9KSB7XG4gICAgdHlwZXMgPSBhc0FycmF5KHR5cGVzKVxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50KFxuICAgICAgYERpdG9UeXBlJHtjYW1lbGl6ZSh0eXBlc1swXSwgdHJ1ZSl9YCxcbiAgICAgIGRlZmluaXRpb25cbiAgICApXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5idXR0b24uZGl0by1idXR0b24oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDp0eXBlPVwidHlwZVwiXG4gIDp0aXRsZT1cInRpdGxlXCJcbiAgOmNsYXNzPVwiYnV0dG9uQ2xhc3NcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbiAgLmRpdG8tYnV0dG9uX190ZXh0KFxuICAgIHYtaWY9XCJ0ZXh0XCJcbiAgKSB7eyB0ZXh0IH19XG4gIC5kaXRvLWluZm8oXG4gICAgdi1pZj1cIiFsYWJlbCAmJiBpbmZvXCJcbiAgICA6ZGF0YS1pbmZvPVwiaW5mb1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnYnV0dG9uJywgJ3N1Ym1pdCddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gICAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICAgIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuICAgIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHZlcmIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcmJzW3RoaXMubmFtZV1cbiAgICAgIH0sXG5cbiAgICAgIGJ1dHRvbkNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJiID8gYGRpdG8tYnV0dG9uLSR7dGhpcy52ZXJifWAgOiBudWxsXG4gICAgICB9LFxuXG4gICAgICB0ZXh0OiBnZXRTY2hlbWFBY2Nlc3NvcigndGV4dCcsIHtcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgICB9KSxcblxuICAgICAgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQgfHwgbGFiZWxpemUodGhpcy52ZXJiKVxuICAgICAgfSxcblxuICAgICAgaW5mbzogZ2V0U2NoZW1hQWNjZXNzb3IoJ2luZm8nLCB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfSksXG5cbiAgICAgIGNsb3NlRm9ybTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Nsb3NlRm9ybScsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIC8vIEBvdmVycmlkZVxuICAgICAgZ2V0RXZlbnRzKCkge1xuICAgICAgICBjb25zdCB7IG9uRm9jdXMsIG9uQmx1ciwgb25DbGljayB9ID0gdGhpc1xuICAgICAgICByZXR1cm4geyBvbkZvY3VzLCBvbkJsdXIsIG9uQ2xpY2sgfVxuICAgICAgfSxcblxuICAgICAgYXN5bmMgc3VibWl0KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VDb21wb25lbnQ/LnN1Ym1pdCh0aGlzLCBvcHRpb25zKVxuICAgICAgfSxcblxuICAgICAgYXN5bmMgb25DbGljaygpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5lbWl0RXZlbnQoJ2NsaWNrJywge1xuICAgICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgICAgfSlcbiAgICAgICAgLy8gSGF2ZSBidXR0b25zIHRoYXQgZGVmaW5lIHJlc291cmNlcyBjYWxsIGB0aGlzLnN1Ym1pdCgpYCBieSBkZWZhdWx0OlxuICAgICAgICBpZiAoXG4gICAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiYgLy8gTWVhbmluZzogZG9uJ3QgcHJldmVudCBkZWZhdWx0LlxuICAgICAgICAgIGhhc1Jlc291cmNlKHRoaXMuc2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnN1Ym1pdCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWJ1dHRvbiB7XG4gICRzZWxmOiAmO1xuXG4gICZfX3RleHQge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNoZWNrYm94XG4gIGlucHV0KFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3gnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2hlY2tib3gge1xuICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0Z1bmN0aW9uLFxuICBpc1Byb21pc2UsXG4gIG5vcm1hbGl6ZURhdGFQYXRoLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IG1hcmtSYXcsIHJlZiB9IGZyb20gJ3Z1ZSdcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0xvYWRpbmdNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGFzeW5jRGF0YUVudHJpZXM6IG1hcmtSYXcoe30pXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgbmFtZSwgbG9hZGluZ09wdGlvbnMpIHtcbiAgICAgIGlmICghaXNPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICBzY2hlbWEgPSB7IGRhdGE6IHNjaGVtYSB9XG4gICAgICB9XG4gICAgICBsZXQgeyBkYXRhID0gdW5kZWZpbmVkLCBkYXRhUGF0aCA9IG51bGwgfSA9IHNjaGVtYVxuICAgICAgLy8gQ3JlYXRlIGEgcmVhY3RpdmUgZW50cnkgZm9yIHRoZSBhc3luYyBkYXRhLCBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldC5cbiAgICAgIC8vIE5PVEU6IGBtYXJrUmF3KClgIGlzIHVzZWQgdG8gYXZvaWQgcmVhY3Rpdml0eSBvbiBgYXN5bmNEYXRhRW50cmllc2BcbiAgICAgIC8vIGl0c2VsZiwgYXMgcmVhY3Rpdml0eSBpcyBvbmx5IGRlc2lyZWQgb24gYHJlYWN0aXZlVmVyc2lvbmAsIHdoaWNoIGlzXG4gICAgICAvLyB1c2VkIHRvIHRyaWdnZXIgY29udHJvbGxlZCByZWV2YWx1YXRpb24gb2YgdGhlIGNvbXB1dGVkIGdldHRlci5cbiAgICAgIGNvbnN0IGFzeW5jRW50cnkgPSAodGhpcy5hc3luY0RhdGFFbnRyaWVzW25hbWVdID8/PSB7XG4gICAgICAgIHJlYWN0aXZlVmVyc2lvbjogcmVmKDEpLFxuICAgICAgICBkZXBlbmRlbmN5RnVuY3Rpb246IG51bGwsXG4gICAgICAgIHJlc29sdmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICByZXNvbHZpbmc6IGZhbHNlLFxuICAgICAgICByZXNvbHZlZDogZmFsc2VcbiAgICAgIH0pXG4gICAgICAvLyBJZiB0aGUgZGF0YSBjYWxsYmFjayBwcm92aWRlZCBhIGRlcGVuZGVuY3kgZnVuY3Rpb24gd2hlbiBpdCB3YXMgY2FsbGVkLFxuICAgICAgLy8gY2FsIGl0IGluIGV2ZXJ5IGNhbGwgb2YgYGhhbmRsZURhdGFTY2hlbWEoKWAgdG8gZm9yY2UgVnVlIHRvIGtlZXAgdHJhY2tcbiAgICAgIC8vIG9mIHRoZSBhc3luYyBkZXBlbmRlbmNpZXMuIEFsc28gYWNjZXNzIGByZWFjdGl2ZVZlcnNpb24udmFsdWVgIHJpZ2h0XG4gICAgICAvLyBhd2F5LCB0byBlbnN1cmUgdGhhdCB0aGUgcmVhY3RpdmUgcHJvcGVydHkgaXMgdHJhY2tlZCBhcyBhIGRlcGVuZGVuY3k6XG4gICAgICBhc3luY0VudHJ5LnJlYWN0aXZlVmVyc2lvbi52YWx1ZSAmJlxuICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24/Lih0aGlzLmNvbnRleHQpXG5cbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmVkKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSByZXNvbHZlZFxuICAgICAgICAvLyB2YWx1ZS4gVGhpcyB3b3JrcyBiZWNhdXNlIFZ1ZSBjYWNoZXMgdGhlIHJlc3VsdCBvZiBjb21wdXRlZCBnZXR0ZXJzXG4gICAgICAgIC8vIGFuZCBvbmx5IHJlZXZhbHVhdGVzIGlmIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZWQuIFRoaXMgaXMgdG9cbiAgICAgICAgLy8gZW5zdXJlIHRoYXQgYSBjYWNoZWQgdmFsdWUgaGVyZSBkb2Vzbid0IGJsb2NrIC8gb3ZlcnJpZGVcbiAgICAgICAgLy8gcmVldmFsdWF0aW9uIHdoZW4gYSBkZXBlbmRlbmN5IGNoYW5nZXM6XG4gICAgICAgIGNvbnN0IHsgcmVzb2x2ZWREYXRhIH0gPSBhc3luY0VudHJ5XG4gICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWQgPSBmYWxzZVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWREYXRhXG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIHRoZSBkYXRhIGZ1bmN0aW9uIHR3aWNlOlxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2aW5nKSB7XG4gICAgICAgIGRhdGEgPSBudWxsXG4gICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgICAvLyBJZiB0aGUgcmVzdWx0IG9mIHRoZSBkYXRhIGZ1bmN0aW9uIGlzIGFub3RoZXIgZnVuY3Rpb24sIHRoZW4gdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZGF0YSBmdW5jdGlvbiBpcyB0aGVyZSB0byB0cmFjayBkZXBlbmRlbmNpZXMgYW5kIHRoZSByZWFsXG4gICAgICAgICAgLy8gZGF0YSBsb2FkaW5nIGhhcHBlbnMgaW4gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQuIEtlZXAgdHJhY2tcbiAgICAgICAgICAvLyBpdCBpbiBgZGVwZW5kZW5jeUZ1bmN0aW9uYCBzbyBpdCBjYW4gYmUgY2FsbGVkIG9uIGVhY2ggY2FsbCBvZlxuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGtlZXAgdGhlIGRlcGVuZGVuY2llcyBpbnRhY3QsIGFuZCBjYWxsXG4gICAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQgb25jZSB0byBnZXQgdGhlIGFjdHVhbCBkYXRhOlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uID0gZGF0YVxuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdCh0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTk9URTogSWYgdGhlIGRhdGEgaXMgbm90IGEgcHJvbWlzZSwgaXQgaXMgcmVzb2x2ZWQgYWxyZWFkeS5cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gZGF0YVxuICAgICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IGZhbHNlXG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWQgPSB0cnVlXG4gICAgICAgICAgICAgIC8vIFRyaWdnZXIgcmVldmFsdWF0aW9uIG9mIHRoZSBjb21wdXRlZCBnZXR0ZXIgYnkgaW5jcmVhc2luZyB0aGVcbiAgICAgICAgICAgICAgLy8gYHJlYWN0aXZlVmVyc2lvbmAgdmFsdWUuXG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVhY3RpdmVWZXJzaW9uLnZhbHVlKytcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IGZhbHNlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIC8vIENsZWFyIGRhdGEgdW50aWwgcHJvbWlzZSBpcyByZXNvbHZlZCBhbmQgYHJlc29sdmVkRGF0YWAgaXMgc2V0XG4gICAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhUGF0aCkge1xuICAgICAgICBkYXRhID0gZ2V0VmFsdWVBdERhdGFQYXRoKFxuICAgICAgICAgIHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoYCR7dGhpcy5kYXRhUGF0aH0vJHtkYXRhUGF0aH1gKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlRGF0YShsb2FkLCBsb2FkaW5nT3B0aW9ucyA9IHt9KSB7XG4gICAgICAvLyBVc2UgYSB0aW1lb3V0IHRvIGFsbG93IGFscmVhZHkgcmVzb2x2ZWQgcHJvbWlzZXMgdG8gcmV0dXJuIGRhdGEgd2l0aG91dFxuICAgICAgLy8gc2hvd2luZyBhIGxvYWRpbmcgaW5kaWNhdG9yLlxuICAgICAgbGV0IGNsZWFyTG9hZGluZyA9IGZhbHNlXG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICAgIGNsZWFyTG9hZGluZyA9IHRydWVcbiAgICAgIH0sIDApXG4gICAgICBsZXQgZGF0YSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCAoaXNGdW5jdGlvbihsb2FkKSA/IGxvYWQoKSA6IGxvYWQpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpXG4gICAgICB9XG4gICAgICBpZiAoY2xlYXJMb2FkaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuL0RhdGFNaXhpbi5qcydcbmltcG9ydCB7IGhhc1ZpZXdTY2hlbWEsIGdldFZpZXdFZGl0UGF0aCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBzZXRUZW1wb3JhcnlJZCwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzU3RyaW5nLFxuICBpc0Z1bmN0aW9uLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemUsXG4gIGRlYm91bmNlQXN5bmNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgY29udmVydFZhbHVlID0gdmFsdWUgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlXG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb25zXG4gICAgICAgICAgICA/IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsKVxuICAgICAgICAgICAgICA/IHZhbFxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXNBcnJheSh0aGlzLnZhbHVlKVxuICAgICAgICAgID8gdGhpcy52YWx1ZS5tYXAoY29udmVydFZhbHVlKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpXG4gICAgICAgICAgOiBjb252ZXJ0VmFsdWUodGhpcy52YWx1ZSlcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gQXMgc29vbiBhcyB0aGUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCBhbmQuLi5cbiAgICAgICAgICB0aGlzLmhhc09wdGlvbnMgJiYgKFxuICAgICAgICAgICAgLy8gLi4uaWYgdGhlIHZhbHVlIGlzIGZvcmNlZCB0byBudWxsIGJlY2F1c2UgYSBkaXNhcHBlYXJlZCBvcHRpb24uLi5cbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsICYmIHRoaXMudmFsdWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIC8vIC4uLm9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlZmVyZW5jZSwgcmVwbGFjZSBpdCB3aXRoIGl0cyBvcHRpb25cbiAgICAgICAgICAgIC8vIHZhbHVlLCBzbyB0aGF0IGl0J2xsIGhvbGQgYWN0dWFsIGRhdGEsIG5vdCBqdXN0IGEgcmVmZXJlbmNlIGlkLlxuICAgICAgICAgICAgaXNSZWZlcmVuY2UodGhpcy52YWx1ZSlcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjb252ZXJ0VmFsdWUgPSB2YWx1ZSA9PlxuICAgICAgICAgIHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlXG5cbiAgICAgICAgdGhpcy52YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS5tYXAoY29udmVydFZhbHVlKVxuICAgICAgICAgIDogY29udmVydFZhbHVlKHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnKSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzT3B0aW9ucyhkYXRhKVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgLy8gVGhpcyBpcyBvdmVycmlkZGVuIGluIGBUeXBlTXVsdGlzZWxlY3RgIHRvIHJldHVybiB0aGUgYHNlYXJjaGVkT3B0aW9uc2BcbiAgICAgIC8vIHdoZW4gYSBzZWFyY2ggZmlsdGVyIHdhcyBhcHBsaWVkLlxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICBoYXNPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlT3B0aW9ucy5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgb3B0aW9ucy5sYWJlbEtleWAgLyBgb3B0aW9uTGFiZWxLZXlgP1xuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBvcHRpb25zLnZhbHVlS2V5YCAvIGBvcHRpb25WYWx1ZUtleWA/XG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZWRpdGFibGUgJiZcbiAgICAgICAgICBoYXNWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWRpdGFibGUgJiYgdGhpcy5zZWxlY3RlZFZhbHVlXG4gICAgICAgID8gZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCB0aGlzLnNlbGVjdGVkVmFsdWUsIHRoaXMuY29udGV4dClcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdyb3VwQnlMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnbGFiZWwnIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnb3B0aW9ucycgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRPcHRpb25LZXkoa2V5KSB7XG4gICAgICBjb25zdCBbb3B0aW9uXSA9IHRoaXMuYWN0aXZlT3B0aW9uc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbikgJiYga2V5IGluIG9wdGlvbiA/IGtleSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbGF0ZSkge1xuICAgICAgICAgIC8vIElmIGlkcyBhcmUgbWlzc2luZyBhbmQgd2Ugd2FudCB0byByZWxhdGUsIHNldCB0ZW1wb3JhcnkgaWRzLlxuICAgICAgICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBhY3R1YWwgZGF0YSwgbWFraW5nIGEgY29weSB3b24ndCB3b3JrXG4gICAgICAgICAgLy8gYXMgaXQgd29uJ3QgcHJvcGFnYXRlLlxuICAgICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgZGF0YSBpcyBmcm9tIHRoZSBncmFwaCB0aGF0XG4gICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IGVkaXRpbmcuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCEoJ2lkJyBpbiBvcHRpb24pKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgICAgICBzZXRUZW1wb3JhcnlJZChvcHRpb24sICdpZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICBjb25zdCBncm91cGVkID0ge31cbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAocmVzdWx0cywgb3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gb3B0aW9uW3RoaXMuZ3JvdXBCeV1cbiAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gZ3JvdXBlZFtncm91cF1cbiAgICAgICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gZ3JvdXBlZFtncm91cF0gPSB7XG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5TGFiZWxdOiBncm91cCxcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlPcHRpb25zXTogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVudHJ5KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVudHJ5W3RoaXMuZ3JvdXBCeU9wdGlvbnNdLnB1c2gob3B0aW9uKVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH0sXG5cbiAgICBnZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgY29uc3QgZmluZE9wdGlvbiA9IChvcHRpb25zLCB2YWx1ZSwgZ3JvdXBCeSkgPT4ge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIHRoZSBvcHRpb24gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHZhbHVlIGFuZCByZXR1cm4gdGhlXG4gICAgICAgIC8vIHdob2xlIG9iamVjdC5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGlmIChncm91cEJ5KSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRPcHRpb24ob3B0aW9uLm9wdGlvbnMsIHZhbHVlLCBudWxsKVxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25WYWx1ZVxuICAgICAgICA/IGZpbmRPcHRpb24odGhpcy5hY3RpdmVPcHRpb25zLCB2YWx1ZSwgdGhpcy5ncm91cEJ5KVxuICAgICAgICA6IHZhbHVlXG4gICAgfSxcblxuICAgIGdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvblZhbHVlKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvblZhbHVlXSA/PyBudWxsXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25WYWx1ZSlcbiAgICAgICAgICA/IG9wdGlvblZhbHVlKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IG9wdGlvblxuICAgIH0sXG5cbiAgICBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25MYWJlbClcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25MYWJlbF1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvbkxhYmVsKVxuICAgICAgICAgID8gb3B0aW9uTGFiZWwobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogbGFiZWxpemUoYCR7b3B0aW9ufWApXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZSh7IHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoIH0sIGdyYXBoKSB7XG4gICAgaWYgKHNjaGVtYS5yZWxhdGUpIHtcbiAgICAgIC8vIEZvciBpbnRlcm5hbGx5IHJlbGF0aW5nIGRhdGEgKGBzY2hlbWEub3B0aW9ucy5kYXRhUGF0aGApLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBwcm9jZXNzIGJvdGggdGhlIG9wdGlvbnMgKGZvciAnI3JlZicpIGFuZCB0aGUgdmFsdWUgKCcjaWQnKS5cbiAgICAgIC8vIFNlZSBgRGF0YU1peGluLmhhbmRsZURhdGFTY2hlbWEoKWA6XG4gICAgICBjb25zdCBwYXRoID0gc2NoZW1hLm9wdGlvbnM/LmRhdGFQYXRoXG4gICAgICBjb25zdCByZWxhdGVkRGF0YVBhdGggPSBwYXRoXG4gICAgICAgID8gbm9ybWFsaXplRGF0YVBhdGgoYCR7ZGF0YVBhdGh9LyR7cGF0aH1gKVxuICAgICAgICA6IG51bGxcbiAgICAgIGdyYXBoLmFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSlcbiAgICAgIGlmIChyZWxhdGVkRGF0YVBhdGgpIHtcbiAgICAgICAgZ3JhcGguc2V0U291cmNlUmVsYXRlZChyZWxhdGVkRGF0YVBhdGgpXG4gICAgICB9XG4gICAgICAvLyBDb252ZXJ0IHJlbGF0aW5nIG9iamVjdHMgdG8gYSBzaGFsbG93IGNvcHkgd2l0aCBvbmx5IHRoZSBpZCBsZWZ0LlxuICAgICAgLy8gVE9ETzogQ29udmVydCB0byB1c2luZyBgcmVsYXRlQnlgOlxuICAgICAgY29uc3QgcHJvY2Vzc1JlbGF0ZSA9IHZhbHVlID0+ICh2YWx1ZSA/IHsgaWQ6IHZhbHVlLmlkIH0gOiB2YWx1ZSlcbiAgICAgIC8vIFNlbGVjdGVkIG9wdGlvbnMgY2FuIGJlIGJvdGggb2JqZWN0cyAmIGFycmF5cywgZS5nLiAnY2hlY2tib3hlcyc6XG4gICAgICB2YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgID8gdmFsdWUubWFwKHByb2Nlc3NSZWxhdGUpXG4gICAgICAgIDogcHJvY2Vzc1JlbGF0ZSh2YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG51bC5kaXRvLWNoZWNrYm94ZXMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaShcbiAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgKVxuICAgIGxhYmVsXG4gICAgICAuZGl0by1jaGVja2JveFxuICAgICAgICBpbnB1dChcbiAgICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICApXG4gICAgICAgIHNwYW4ge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveGVzJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IFtdLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlKVxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBvcHRpb24gfHwgW11cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jaGVja2JveGVzIHtcbiAgbGFiZWwge1xuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3M7XG4gIH1cblxuICBpbnB1dCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNvZGUoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnN0eWxlPVwic3R5bGVcIlxuKVxuICAuZGl0by1jb2RlX19lZGl0b3IocmVmPVwiZWRpdG9yXCIpXG4gIC5kaXRvLXJlc2l6ZShcbiAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCBDb2RlRmxhc2sgZnJvbSAnY29kZWZsYXNrJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvZGUnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBoZWlnaHQ6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2xpbmVzJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogM1xuICAgIH0pLFxuXG4gICAgbGFuZ3VhZ2U6IGdldFNjaGVtYUFjY2Vzc29yKCdsYW5ndWFnZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdqYXZhc2NyaXB0J1xuICAgIH0pLFxuXG4gICAgaW5kZW50U2l6ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2luZGVudFNpemUnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAyXG4gICAgfSksXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHN0eWxlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IGZsYXNrID0gbmV3IENvZGVGbGFzayh0aGlzLiRyZWZzLmVkaXRvciwge1xuICAgICAgbGFuZ3VhZ2U6IHRoaXMubGFuZ3VhZ2UsXG4gICAgICBpbmRlbnRTaXplOiB0aGlzLmluZGVudFNpemUsXG4gICAgICBsaW5lTnVtYmVyczogZmFsc2VcbiAgICB9KVxuXG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb2N1c2VkICYmIGNoYW5nZWQpIHtcbiAgICAgICAgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9uRm9jdXMgPSAoKSA9PiB0aGlzLm9uRm9jdXMoKVxuXG4gICAgY29uc3Qgb25CbHVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH1cblxuICAgIHRoaXMuZG9tT24odGhpcy4kcmVmcy5lZGl0b3IucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKSwge1xuICAgICAgZm9jdXM6IG9uRm9jdXMsXG4gICAgICBibHVyOiBvbkJsdXJcbiAgICB9KVxuXG4gICAgY29uc3Qgc2V0Q29kZSA9IGNvZGUgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IGZsYXNrLmNvZGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gdHJ1ZVxuICAgICAgICBmbGFzay51cGRhdGVDb2RlKGNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgICBvbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmxhc2sub25VcGRhdGUodmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVVwZGF0ZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDb2RlKHZhbHVlIHx8ICcnKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLiR3YXRjaCgnbGFuZ3VhZ2UnLCBsYW5ndWFnZSA9PiB7XG4gICAgICBmbGFzay51cGRhdGVMYW5ndWFnZShsYW5ndWFnZSlcbiAgICB9KVxuXG4gICAgc2V0Q29kZSh0aGlzLnZhbHVlIHx8ICcnKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpPy5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXJFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uYmx1cigpXG4gICAgfSxcblxuICAgIG9uRHJhZ1Jlc2l6ZShldmVudCkge1xuICAgICAgY29uc3QgZ2V0UG9pbnQgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0pID0+ICh7IHgsIHkgfSlcblxuICAgICAgbGV0IHByZXZZID0gZ2V0UG9pbnQoZXZlbnQpLnlcbiAgICAgIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy4kZWwpLmhlaWdodClcblxuICAgICAgY29uc3QgbW91c2Vtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB7IHkgfSA9IGdldFBvaW50KGV2ZW50KVxuICAgICAgICBoZWlnaHQgKz0geSAtIHByZXZZXG4gICAgICAgIHByZXZZID0geVxuICAgICAgICB0aGlzLmhlaWdodCA9IGAke01hdGgubWF4KGhlaWdodCwgMCl9cHhgXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBtb3VzZW1vdmUsXG5cbiAgICAgICAgbW91c2V1cChldmVudCkge1xuICAgICAgICAgIG1vdXNlbW92ZShldmVudClcbiAgICAgICAgICBoYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNvZGUge1xuICBAZXh0ZW5kICVpbnB1dDtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC8vIEZvciBwcm9wZXIgc2l6aW5nIG9mIGNvbnRlbnQgYWxvbmcgd2l0aCA6c3R5bGU9XCJzdHlsZVwiIHNldHRpbmcgYWJvdmUsXG4gIC8vIGZvciBwcm9wZXIgbGluZS1oZWlnaHQgY2FsY3VsYXRpb24uXG4gIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICBtaW4taGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSArIDIgKiAkaW5wdXQtcGFkZGluZy12ZXIpO1xuXG4gIC5jb2RlZmxhc2sge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgLy8gSWdub3JlIHRoZSBwYXJlbnQgcGFkZGluZyBkZWZpbmVkIGFib3ZlIHdoaWNoIGlzIG9ubHkgbmVlZGVkIHRvIHNldFxuICAgIC8vIHRoZSBkZXNpcmVkIGhlaWdodCB3aXRoIDpzdHlsZT1cInN0eWxlXCIuXG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG5cbiAgICAmX190ZXh0YXJlYSxcbiAgICAmX19wcmUge1xuICAgICAgLy8gVXNlIHNhbWUgcGFkZGluZyBhcyAuZGl0by1jb2RlXG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICB9XG5cbiAgICAmX190ZXh0YXJlYSxcbiAgICAmX19jb2RlLFxuICAgICZfX2xpbmVzIHtcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ubztcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplKTtcbiAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XG4gICAgfVxuXG4gICAgJl9fbGluZXMge1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by1jb2xvcihcbiAgdi1tb2RlbDpzaG93PVwic2hvd1BvcHVwXCJcbiAgdHJpZ2dlcj1cImZvY3VzXCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgLmRpdG8taW5wdXQoOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCIpXG4gICAgICBpbnB1dChcbiAgICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgICAgc2l6ZT1cIjhcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLWNvbG9yLXByZXZpZXcuZGl0by1pbmhlcml0LWZvY3VzKFxuICAgICAgICB2LWlmPVwidmFsdWVcIlxuICAgICAgKVxuICAgICAgICBkaXYoOnN0eWxlPVwieyBiYWNrZ3JvdW5kOiBgIyR7aGV4VmFsdWUgfHwgJzAwMDAwMDAwJ31gIH1cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgIClcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIFNrZXRjaFBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICAgIHYtbW9kZWw9XCJjb2xvclZhbHVlXCJcbiAgICAgIDpkaXNhYmxlQWxwaGE9XCIhYWxwaGFcIlxuICAgICAgOmRpc2FibGVGaWVsZHM9XCIhaW5wdXRzXCJcbiAgICAgIDpwcmVzZXRDb2xvcnM9XCJwcmVzZXRzXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHRpbnljb2xvciBmcm9tICd0aW55Y29sb3IyJ1xuaW1wb3J0IHsgU2tldGNoIGFzIFNrZXRjaFBpY2tlciB9IGZyb20gJ0Bsazc3L3Z1ZTMtY29sb3InXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgVHJpZ2dlciB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gTW9ua2V5LXBhdGNoIHRoZSBgU2tldGNoUGlja2VyJ3NgIGBoZXhgIGNvbXB1dGVkIHByb3BlcnR5IHRvIHJldHVybiBsb3dlcmNhc2Vcbi8vIGhleCB2YWx1ZXMgaW5zdGVhZCBvZiB1cHBlcmNhc2Ugb25lcy5cbmNvbnN0IHsgaGV4IH0gPSBTa2V0Y2hQaWNrZXIuY29tcHV0ZWRcblNrZXRjaFBpY2tlci5jb21wdXRlZC5oZXggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBoZXguY2FsbCh0aGlzKS50b0xvd2VyQ2FzZSgpXG59XG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29sb3InLCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgU2tldGNoUGlja2VyIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiBmYWxzZSxcbiAgICAgIGNvbnZlcnRlZFZhbHVlOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2FuVXBkYXRlVmFsdWUoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuZm9jdXNlZCB8fCB0aGlzLnJlYWRvbmx5XG4gICAgfSxcblxuICAgIGNvbG9yVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0aGlzLmNvbnZlcnRlZFZhbHVlIHx8XG4gICAgICAgICAgdGhpcy52YWx1ZSB8fFxuICAgICAgICAgICh0aGlzLmNvbG9yRm9ybWF0ID09PSAnaGV4JyA/ICcnIDoge30pXG4gICAgICAgIClcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gY29udmVydENvbG9yKHZhbHVlLCB0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBoZXhWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcih0aGlzLnZhbHVlKVxuICAgICAgICByZXR1cm4gY29sb3IuaXNWYWxpZCgpXG4gICAgICAgICAgPyBjb2xvclxuICAgICAgICAgICAgICAudG9TdHJpbmcoY29sb3IuZ2V0QWxwaGEoKSA8IDEgPyAnaGV4OCcgOiAnaGV4NicpXG4gICAgICAgICAgICAgIC5zbGljZSgxKVxuICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHZhbHVlKVxuICAgICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgY29uc3QgY29udmVydGVkVmFsdWUgPSBjb252ZXJ0Q29sb3IodmFsdWUsIHRoaXMuY29sb3JGb3JtYXQpXG4gICAgICAgICAgaWYgKHRoaXMuY2FuVXBkYXRlVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb252ZXJ0ZWRWYWx1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTdG9yZSB0byBjaGFuZ2UgbGF0ZXIsIG9uY2UgYGNhblVwZGF0ZVZhbHVlYCBpcyB0cnVlIGFnYWluLlxuICAgICAgICAgICAgLy8gU2VlIGB3YXRjaGAgYmVsb3cuXG4gICAgICAgICAgICB0aGlzLmNvbnZlcnRlZFZhbHVlID0gY29udmVydGVkVmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVE9ETzogYGZvcm1hdGAgY2xhc2hlcyB3aXRoIFR5cGVNaXhpbi5mb3JtYXQoKWAsIHdoaWNoIHNoYWxsIGJlIHJlbmFtZWRcbiAgICAvLyBzb29uIHRvIGBmb3JtYXRWYWx1ZSgpYC4gUmVuYW1lIGBjb2xvckZvcm1hdGAgYmFjayB0byBgZm9ybWF0YCBhZnRlci5cbiAgICBjb2xvckZvcm1hdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Zvcm1hdCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdoZXgnXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dBbHBoYWA/XG4gICAgYWxwaGE6IGdldFNjaGVtYUFjY2Vzc29yKCdhbHBoYScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93SW5wdXRzYD9cbiAgICBpbnB1dHM6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dHMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pLFxuXG4gICAgcHJlc2V0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ3ByZXNldHMnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IFtcbiAgICAgICAgJyNmZmZmZmYnLFxuICAgICAgICAnI2MzYzNjMycsXG4gICAgICAgICcjN2Y3ZjdmJyxcbiAgICAgICAgJyMwMDAwMDAnLFxuICAgICAgICAnIzg4MDAxNScsXG4gICAgICAgICcjZWQxYzI0JyxcbiAgICAgICAgJyNmZjdmMjcnLFxuICAgICAgICAnI2ZmZjIwMCcsXG5cbiAgICAgICAgJyMyMmIxNGMnLFxuICAgICAgICAnIzAwYTJlOCcsXG4gICAgICAgICcjM2Y0OGNjJyxcbiAgICAgICAgJyNhMzQ5YTQnLFxuICAgICAgICAnI2I5N2E1NycsXG4gICAgICAgICcjZmZhZWM5JyxcbiAgICAgICAgJyNmZmM5MGUnLFxuICAgICAgICAnIzAwMDAwMDAwJ1xuICAgICAgXVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZTogJ29uQ2hhbmdlJyxcblxuICAgIGNhblVwZGF0ZVZhbHVlKGNhblVwZGF0ZVZhbHVlKSB7XG4gICAgICBpZiAoY2FuVXBkYXRlVmFsdWUgJiYgdGhpcy5jb252ZXJ0ZWRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5jb252ZXJ0ZWRWYWx1ZVxuICAgICAgICB0aGlzLmNvbnZlcnRlZFZhbHVlID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuZnVuY3Rpb24gY29udmVydENvbG9yKGNvbG9yLCBmb3JtYXQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGNvbG9yKSAvLyBhIHZ1ZTMtY29sb3IgY29sb3Igb2JqZWN0XG4gICAgPyB0b1Z1ZTNDb2xvckZvcm1hdChjb2xvciwgZm9ybWF0KVxuICAgIDogdG9UaW55Q29sb3JGb3JtYXQodGlueWNvbG9yKGNvbG9yKSwgZm9ybWF0KVxufVxuXG5mdW5jdGlvbiB0b1Z1ZTNDb2xvckZvcm1hdChjb2xvciwgZm9ybWF0KSB7XG4gIGNvbnN0IHZhbHVlID1cbiAgICBjb2xvcltcbiAgICAgIHtcbiAgICAgICAgaGV4OiBjb2xvcj8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgcmdiOiAncmdiYSdcbiAgICAgIH1bZm9ybWF0XSB8fFxuICAgICAgZm9ybWF0XG4gICAgXVxuICByZXR1cm4gaXNTdHJpbmcodmFsdWUpICYmIHZhbHVlWzBdID09PSAnIycgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWVcbn1cblxuLy8gVGhpcyBzaG91bGQgcmVhbGx5IGJlIGluIHRpbnljb2xvciwgYnV0IGl0IG9ubHkgaGFzIHRoZSBzdHJpbmcgZXF1aXZhbGVudFxuLy8gb2YgaXQuXG5mdW5jdGlvbiB0b1RpbnlDb2xvckZvcm1hdChjb2xvciwgZm9ybWF0KSB7XG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSAncmdiJzpcbiAgICAgIHJldHVybiBjb2xvci50b1JnYigpXG4gICAgY2FzZSAncHJnYic6XG4gICAgICByZXR1cm4gY29sb3IudG9QZXJjZW50YWdlUmdiKClcbiAgICBjYXNlICduYW1lJzpcbiAgICAgIHJldHVybiBjb2xvci50b05hbWUoKVxuICAgIGNhc2UgJ2hzbCc6XG4gICAgICByZXR1cm4gY29sb3IudG9Ic2woKVxuICAgIGNhc2UgJ2hzdic6XG4gICAgICByZXR1cm4gY29sb3IudG9Ic3YoKVxuICAgIGNhc2UgJ2hleDMnOlxuICAgICAgcmV0dXJuIGAjJHtjb2xvci50b0hleCh0cnVlKX1gXG4gICAgY2FzZSAnaGV4NCc6XG4gICAgICByZXR1cm4gYCMke2NvbG9yLnRvSGV4OCh0cnVlKX1gXG4gICAgY2FzZSAnaGV4OCc6XG4gICAgICByZXR1cm4gYCMke2NvbG9yLnRvSGV4OCgpfWBcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ2hleDYnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gYCMke2NvbG9yLnRvSGV4KCl9YFxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kY29sb3Itc3dhdGNoLXdpZHRoOiAkcGF0dGVybi10cmFuc3BhcmVuY3ktc2l6ZTtcbiRjb2xvci1zd2F0Y2gtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtICRib3JkZXItd2lkdGg7XG5cbi5kaXRvLWNvbG9yIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIGlucHV0IHtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgcGFkZGluZy1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgICB9XG4gIH1cblxuICAuZGl0by1idXR0b24tY2xlYXIge1xuICAgIG1hcmdpbi1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgfVxuXG4gIC5kaXRvLWNvbG9yLXBpY2tlciB7XG4gICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIH1cblxuICAuZGl0by1jb2xvci1wcmV2aWV3IHtcbiAgICBiYWNrZ3JvdW5kOiAkcGF0dGVybi10cmFuc3BhcmVuY3k7XG4gICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGU7XG5cbiAgICAmLFxuICAgIGRpdiB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5jb21wb25lbnQoXG4gIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICB2LWJpbmQ9XCIkcHJvcHNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbi8vIFRoaXMgaXMgdGhlIGdlbmVyYWwgcHVycG9zZSAnY29tcG9uZW50JyB0eXBlLCB3aGljaCBjYW4gcmVzb2x2ZSB0byBhbnkgY3VzdG9tXG4vLyBjb21wb25lbnQgdGhyb3VnaCBgc2NoZW1hLmNvbXBvbmVudGAsIHNlZSBgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCgpYC4gVGhpc1xuLy8gY2FuIGJlIHVzZWQgdG8gbmVzdCBhcmJpdHJhcnkgdnVlIGNvbXBvbmVudHMgaW4gc2NoZW1hOlxuLy8ge1xuLy8gICB0eXBlOiAnY29tcG9uZW50Jyxcbi8vICAgY29tcG9uZW50OiBpbXBvcnQoJy4vY29tcG9uZW50Jylcbi8vIH1cblxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb21wb25lbnQnLCB7XG4gIC8vIE92ZXJyaWRlIHRoZSBzdGFuZGFyZCBgZGVmYXVsdFZhbHVlOiBudWxsYCB0byBub3Qgc2V0IGFueSBkYXRhIGZvciBjdXN0b21cbiAgLy8gY29tcG9uZW50cywgdW5sZXNzIHRoZXkgcHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6ICh7IHNjaGVtYSB9KSA9PiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEpIHtcbiAgICBhd2FpdCByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4vLy0gaW52b2x2ZSBhY3R1YWxseSByZW5kZXJpbmcgaXQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCB2aXNpYmxlLlxuaW5wdXQuZGl0by10ZXh0LmRpdG8taW5wdXQoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDpuYW1lPVwibmFtZVwiXG4gIHR5cGU9XCJ0ZXh0XCJcbiAgOnZhbHVlPVwidmFsdWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpyZWFkb25seT1cInRydWVcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBWYWx1ZU1peGluIGZyb20gJy4uL21peGlucy9WYWx1ZU1peGluLmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuLi9taXhpbnMvRGF0YU1peGluLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydjb21wdXRlZCcsICdkYXRhJywgJ2hpZGRlbiddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICAgIGRlZmF1bHRWaXNpYmxlOiBmYWxzZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgICAgICBpZiAoc2NoZW1hLmRhdGEgfHwgc2NoZW1hLmRhdGFQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsICd2YWx1ZScpXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgICAgdGhpcy5kYXRhW3RoaXMubmFtZV0gPSB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gVmFsdWVNaXhpbi5jb21wdXRlZC52YWx1ZS5nZXQuY2FsbCh0aGlzKVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIFZhbHVlTWl4aW4uY29tcHV0ZWQudmFsdWUuc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRhdGVcbiAgY29tcG9uZW50KFxuICAgIDppcz1cImdldENvbXBvbmVudCh0eXBlKVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJkYXRlVmFsdWVcIlxuICAgIDpsb2NhbGU9XCJsb2NhbGVcIlxuICAgIDpmb3JtYXQ9XCJmb3JtYXRzXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgKVxuICAgIHRlbXBsYXRlKCNhZnRlcilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBpc0RhdGUsIGFzc2lnbkRlZXBseSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ2RhdGUnLCAnZGF0ZXRpbWUnLCAndGltZSddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgY29tcG9uZW50czogeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9LFxuICAgIC8vIFRPRE86IFRoaXMgaXMgb25seSBoZXJlIHNvIHdlIGdldCBwbGFjZWhvbGRlciBhZGRlZC4gQ29tZSB1cCB3aXRoIGFcbiAgICAvLyBiZXR0ZXIgd2F5IHRvIHN1cHBvcnQgYXR0cmlidXRlcyBwZXIgY29tcG9uZW50IChhIGxpc3Qgb2YgYWN0dWFsbHlcbiAgICAvLyBzdXBwb3J0ZWQgYXR0cmlidXRlcylcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgZGF0ZVZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICAgICAgcmV0dXJuIHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogdmFsdWVcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLy8gVE9ETzogUmVuYW1lIHRvIGBmb3JtYXRgLCBvbmNlIGBzY2hlbWEuZm9ybWF0KClgIHdhcyByZW1vdmVkIHRvXG4gICAgICAvLyBgZm9ybWF0VmFsdWUoKWAuXG4gICAgICBmb3JtYXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignZm9ybWF0cycsIHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICBnZXQoZm9ybWF0cykge1xuICAgICAgICAgIGNvbnN0IHsgZGF0ZSwgdGltZSB9ID0gYXNzaWduRGVlcGx5KHt9LCB0aGlzLmFwaS5mb3JtYXRzLCBmb3JtYXRzKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRlOiBbJ2RhdGUnLCAnZGF0ZXRpbWUnXS5pbmNsdWRlcyh0aGlzLnR5cGUpID8gZGF0ZSA6IG51bGwsXG4gICAgICAgICAgICB0aW1lOiBbJ3RpbWUnLCAnZGF0ZXRpbWUnXS5pbmNsdWRlcyh0aGlzLnR5cGUpID8gdGltZSA6IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGdldENvbXBvbmVudCh0eXBlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0ZTogJ2RhdGUtcGlja2VyJyxcbiAgICAgICAgICB0aW1lOiAndGltZS1waWNrZXInLFxuICAgICAgICAgIGRhdGV0aW1lOiAnZGF0ZS10aW1lLXBpY2tlcidcbiAgICAgICAgfVt0eXBlXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzVmFsdWUoeyB2YWx1ZSB9KSB7XG4gICAgICByZXR1cm4gaXNEYXRlKHZhbHVlKSA/IHZhbHVlLnRvSVNPU3RyaW5nKCkgOiB2YWx1ZVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFF1ZXJ5KHF1ZXJ5KSB7XG4gIGNvbnN0IGVudHJpZXMgPSBxdWVyeVxuICAgID8gaXNBcnJheShxdWVyeSlcbiAgICAgID8gcXVlcnlcbiAgICAgIDogT2JqZWN0LmVudHJpZXMocXVlcnkpXG4gICAgOiBbXVxuICByZXR1cm4gKFxuICAgIG5ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgICAvLyBFeHBhbmQgYXJyYXkgdmFsdWVzIGludG8gbXVsdGlwbGUgZW50cmllcyB1bmRlciB0aGUgc2FtZSBrZXksIHNvXG4gICAgICAvLyBgZm9ybWF0UXVlcnkoeyBmb286IFsxLCAyXSwgYmFyOiAzIH0pYCA9PiAnZm9vPTEmZm9vPTImYmFyPTMnLlxuICAgICAgZW50cmllcy5yZWR1Y2UoXG4gICAgICAgIChlbnRyaWVzLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgIC8vIFByZXZlbnQgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzIGZyb20gYmVjb21pbmcgc3RyaW5ncyxcbiAgICAgICAgICAgICAgLy8gYnV0IHNpbmNlIHRoZXkncmUgZW50cmllcyBpbiBhbiBhcnJheSwgd2Ugc3RpbGwgaW5jbHVkZSB0aGVtLlxuICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgdmFsID8/ICcnXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCB2YWx1ZV0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgICAgIH0sXG4gICAgICAgIFtdXG4gICAgICApXG4gICAgKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC8vIGRlY29kZSBhbGwgdGhlc2UgZW5jb2RlZCBjaGFyYWN0ZXJzIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IgYXNcbiAgICAgIC8vIHZ1ZS1yb3V0ZXIncyBvd24gcXVlcnkgZW5jb2RpbmcuXG4gICAgICAucmVwbGFjZUFsbCgvJSg/OjIxfDI0fDI4fDI5fDJDfDJGfDNBfDNCfDNEfDNGfDQwKS9nLCBkZWNvZGVVUklDb21wb25lbnQpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VSb3V0ZSh7IHBhdGgsIHF1ZXJ5LCBoYXNoIH0pIHtcbiAgLy8gUHJlc2VydmUgYGhpc3Rvcnkuc3RhdGVgLCBzZWU6XG4gIC8vIGh0dHBzOi8vcm91dGVyLnZ1ZWpzLm9yZy9ndWlkZS9taWdyYXRpb24vI3VzYWdlLW9mLWhpc3Rvcnktc3RhdGVcbiAgY29uc3QgeyBsb2NhdGlvbiB9ID0gd2luZG93XG4gIGhpc3RvcnkucmVwbGFjZVN0YXRlKFxuICAgIGhpc3Rvcnkuc3RhdGUsXG4gICAgbnVsbCxcbiAgICBgJHtcbiAgICAgIGxvY2F0aW9uLm9yaWdpblxuICAgIH0ke1xuICAgICAgcGF0aCA/PyBsb2NhdGlvbi5wYXRobmFtZVxuICAgIH0/JHtcbiAgICAgIHF1ZXJ5ID8gZm9ybWF0UXVlcnkocXVlcnkpIDogbG9jYXRpb24uc2VhcmNoLnNsaWNlKDEpXG4gICAgfSR7XG4gICAgICBoYXNoID8/IGxvY2F0aW9uLmhhc2hcbiAgICB9YFxuICApXG59XG4iLCJpbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuL0l0ZW1NaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4vUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuLi9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciwgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IHJlcGxhY2VSb3V0ZSB9IGZyb20gJy4uL3V0aWxzL3JvdXRlLmpzJ1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1JvdXRlU2NoZW1hLFxuICBwcm9jZXNzRm9ybXMsXG4gIGdldE5hbWVkU2NoZW1hcyxcbiAgZ2V0QnV0dG9uU2NoZW1hcyxcbiAgaGFzRm9ybVNjaGVtYSxcbiAgZ2V0Rm9ybVNjaGVtYXMsXG4gIGdldFZpZXdTY2hlbWEsXG4gIGlzQ29tcGFjdCxcbiAgaXNJbmxpbmVkLFxuICBpc09iamVjdFNvdXJjZSxcbiAgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNBcnJheSxcbiAgaXNOdW1iZXIsXG4gIGVxdWFscyxcbiAgcGFyc2VEYXRhUGF0aCxcbiAgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IHJhdyB9IGZyb20gJ0BkaXRvanMvdWknXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgUmVzb3VyY2VNaXhpbiwgU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZTogY29udGV4dCA9PiAoaXNMaXN0U291cmNlKGNvbnRleHQuc2NoZW1hKSA/IFtdIDogbnVsbCksXG4gIC8vIEV4Y2x1ZGUgYWxsIHNvdXJjZXMgdGhhdCBoYXZlIHRoZWlyIG93biByZXNvdXJjZSBoYW5kbGluZyB0aGUgZGF0YS5cbiAgZXhjbHVkZVZhbHVlOiBjb250ZXh0ID0+ICEhY29udGV4dC5zY2hlbWEucmVzb3VyY2UsXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cmFwcGVkUHJpbWl0aXZlczogbnVsbCxcbiAgICAgIHVud3JhcHBpbmdQcmltaXRpdmVzOiByYXcoZmFsc2UpXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgaXNPYmplY3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICBpc0xpc3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNMaXN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmFsdWVcbiAgICB9LFxuXG4gICAgc2hvdWxkUmVuZGVyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlRGVwdGggPCB0aGlzLm1heERlcHRoXG4gICAgfSxcblxuICAgIGlzUmVhZHkoKSB7XG4gICAgICAvLyBMaXN0cyB0aGF0IGhhdmUgbm8gZGF0YSBhbmQgbm8gYXNzb2NpYXRlZCByZXNvdXJjZSBzaG91bGQgc3RpbGwgcmVuZGVyLFxuICAgICAgLy8gYXMgdGhleSBtYXkgYmUgZ2V0dGluZyB0aGVpciBkYXRhIGVsc2V3aGVyZSwgZS5nLiBgY29tcHV0ZSgpYC5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuc2hvdWxkUmVuZGVyICYmXG4gICAgICAgICh0aGlzLmhhc0RhdGEgfHwgIXRoaXMucHJvdmlkZXNEYXRhKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0luVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld0NvbXBvbmVudFxuICAgIH0sXG5cbiAgICB3cmFwUHJpbWl0aXZlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS53cmFwUHJpbWl0aXZlc1xuICAgIH0sXG5cbiAgICBsaXN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMudmFsdWVcbiAgICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgICAvLyBDb252ZXJ0IHRvIGxpc3QgYXJyYXkuXG4gICAgICAgICAgZGF0YSA9IGRhdGEgIT0gbnVsbCA/IFtkYXRhXSA6IFtdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBnZXRzIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgdW53cmFwcGluZyBpcyBub3QgaGFwcGVuaW5nXG4gICAgICAgICAgLy8gYXQgdGhlIHJvb3QgaW4gYHNldERhdGEoKWAsIGJ1dCBoZXJlIGluc3RlYWQuXG4gICAgICAgICAgZGF0YSA9IHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkgfHwgZGF0YVxuICAgICAgICB9XG4gICAgICAgIGRhdGEgfHw9IFtdXG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgaWYgKHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMudmFsdWUpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUgdW53cmFwcGluZyBvbmNlIGBsaXN0RGF0YWAgaXMgcmVldmFsdWF0ZWQsIHNvIHNldFxuICAgICAgICAgICAgLy8gdGhpcyB0byBgZmFsc2VgIGFnYWluLiBTZWUgYHdyYXBwZWRQcmltaXRpdmVzYCB3YXRjaGVyIGFib3ZlLlxuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMudmFsdWUgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IGRhdGEgdG8gYSBsaXN0IG9mIHdyYXBwZWQgcHJpbWl0aXZlcywgYW5kIHJldHVybiBpdC5cbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YS5tYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogdmFsdWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkUHJpbWl0aXZlc1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy53cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBkYXRhWzBdXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgOiBkYXRhXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb2JqZWN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBBbHdheXMgZ28gdGhyb3VnaCBgbGlzdERhdGFgIGludGVybmFsbHksIHdoaWNoIGRvZXMgYWxsIHRoZVxuICAgICAgICAvLyBwcm9jZXNzaW5nIG9mIGB3cmFwUHJpbWl0aXZlc2AsIGV0Yy5cbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdERhdGFbMF0gfHwgbnVsbFxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IGRhdGEgPyBbZGF0YV0gOiBbXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICAvLyBUaGUgc291cmNlU2NoZW1hIG9mIGEgbGlzdCBpcyB0aGUgbGlzdCdzIHNjaGVtYSBpdHNlbGYuXG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICB9LFxuXG4gICAgc291cmNlRGVwdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUubWF0Y2hlZC5yZWR1Y2UoXG4gICAgICAgIChkZXB0aCwgcmVjb3JkKSA9PiAoXG4gICAgICAgICAgZGVwdGggKyAocmVjb3JkLm1ldGEuc2NoZW1hID09PSB0aGlzLnNvdXJjZVNjaGVtYSA/IDEgOiAwKVxuICAgICAgICApLFxuICAgICAgICAwXG4gICAgICApXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICAvLyBUaGlzIGlzIHVzZWQgaW4gVHlwZUxpc3QgZm9yIERpdG9Gb3JtQ2hvb3Nlci5cbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aCh0aGlzLnNjaGVtYS5wYXRoKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0UXVlcnkoKSB7XG4gICAgICBjb25zdCB7IGRlZmF1bHRPcmRlcjogb3JkZXIgfSA9IHRoaXNcbiAgICAgIHJldHVybiBvcmRlciA/IHsgb3JkZXIgfSA6IHt9XG4gICAgfSxcblxuICAgIHF1ZXJ5OiBnZXRTdG9yZUFjY2Vzc29yKCdxdWVyeScsIHtcbiAgICAgIGdldChxdWVyeSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdFF1ZXJ5LFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHNldChxdWVyeSkge1xuICAgICAgICAvLyBBbHdheXMga2VlcCB0aGUgZGlzcGxheWVkIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gc3luYyB3aXRoIHRoZSBzdG9yZWRcbiAgICAgICAgLy8gb25lcy4gVXNlIHNjb3BlIGFuZCBwYWdlIGZyb20gdGhlIGxpc3Qgc2NoZW1hIGFzIGRlZmF1bHRzLCBidXQgYWxsb3dcbiAgICAgICAgLy8gdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gb3ZlcnJpZGUgdGhlbS5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNjb3BlID0gdGhpcy5kZWZhdWx0U2NvcGU/Lm5hbWUsXG4gICAgICAgICAgcGFnZSA9IHRoaXMuc2NoZW1hLnBhZ2VcbiAgICAgICAgfSA9IHRoaXMucXVlcnlcbiAgICAgICAgLy8gUHJlc2VydmUgLyBtZXJnZSBjdXJyZW50bHkgc3RvcmVkIHZhbHVlcy5cbiAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAuLi4oc2NvcGUgIT0gbnVsbCAmJiB7IHNjb3BlIH0pLFxuICAgICAgICAgIC4uLihwYWdlICE9IG51bGwgJiYgeyBwYWdlIH0pLFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlcXVhbHMocXVlcnksIHRoaXMuJHJvdXRlLnF1ZXJ5KSkge1xuICAgICAgICAgIC8vIENoYW5nZSB0aGUgcm91dGUgcXVlcnkgcGFyYW1ldGVycywgYnV0IGRvbid0IHRyaWdnZXIgYSByb3V0ZVxuICAgICAgICAgIC8vIGNoYW5nZSwgYXMgdGhhdCB3b3VsZCBjYXVzZSB0aGUgbGlzdCB0byByZWxvYWQuXG4gICAgICAgICAgcmVwbGFjZVJvdXRlKHsgcXVlcnkgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnkgLy8gTGV0IGdldFN0b3JlQWNjZXNzb3IoKSBkbyB0aGUgYWN0dWFsIHNldHRpbmdcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHRvdGFsOiBnZXRTdG9yZUFjY2Vzc29yKCd0b3RhbCcpLFxuXG4gICAgY29sdW1ucygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuY29sdW1ucylcbiAgICB9LFxuXG4gICAgc2NvcGVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5zY29wZXMpXG4gICAgfSxcblxuICAgIGRlZmF1bHRTY29wZSgpIHtcbiAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgIGlmICh0aGlzLnNjb3Blcykge1xuICAgICAgICBmb3IgKGNvbnN0IHNjb3BlIG9mIE9iamVjdC52YWx1ZXModGhpcy5zY29wZXMpKSB7XG4gICAgICAgICAgaWYgKHNjb3BlLmRlZmF1bHRTY29wZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmaXJzdFxuICAgIH0sXG5cbiAgICBkZWZhdWx0T3JkZXIoKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFNvcnQgfSA9IGNvbHVtblxuICAgICAgICAgIGlmIChkZWZhdWx0U29ydCkge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gaXNTdHJpbmcoZGVmYXVsdFNvcnQpID8gZGVmYXVsdFNvcnQgOiAnYXNjJ1xuICAgICAgICAgICAgcmV0dXJuIGAke2NvbHVtbi5uYW1lfSAke2RpcmVjdGlvbn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkpXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGxpbmtlZCB2aWV3IHNjaGVtYSBpZiB0aGlzIHNvdXJjZSBlZGl0cyBpdCBpdHMgaXRlbXMgdGhyb3VnaFxuICAgIC8vIGEgbGlua2VkIHZpZXcuXG4gICAgdmlldygpIHtcbiAgICAgIHJldHVybiBnZXRWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5ldmVyeShpc0NvbXBhY3QpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHBhZ2luYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncGFnaW5hdGUnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHJlbmRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbmRlcicsIHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICAgICAgPyB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/ICF0aGlzLnZhbHVlXG4gICAgICAgICAgICA6IHRydWVcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiAhdGhpcy5pc0lubGluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2UgJiYgdGhpcy5saXN0RGF0YS5sZW5ndGggPiAxICYmIGRyYWdnYWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjb2xsYXBzaWJsZSkge1xuICAgICAgICByZXR1cm4gY29sbGFwc2libGUgJiYgdGhpcy5pc0lubGluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjb2xsYXBzZWQpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxhcHNlZCAmJiB0aGlzLmNvbGxhcHNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhEZXB0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heERlcHRoJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGU6IHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zMzkzI2lzc3VlY29tbWVudC0xMTU4NDcwMTQ5XG4gICAgICBmbHVzaDogJ3Bvc3QnLFxuICAgICAgaGFuZGxlcih0bywgZnJvbSkge1xuICAgICAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmcm9tLnBhdGggPT09IHRvLnBhdGggJiZcbiAgICAgICAgICAgIGZyb20uaGFzaCA9PT0gdG8uaGFzaFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gUGF0aHMgYW5kIGhhc2hlcyByZW1haW4gdGhlIHNhbWUsIHNvIG9ubHkgcXVlcmllcyBoYXZlIGNoYW5nZWQuXG4gICAgICAgICAgICAvLyBVcGRhdGUgZmlsdGVyIGFuZCByZWxvYWQgZGF0YSB3aXRob3V0IGNsZWFyaW5nLlxuICAgICAgICAgICAgdGhpcy5xdWVyeSA9IHRvLnF1ZXJ5XG4gICAgICAgICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0aGlzLm1ldGEucmVsb2FkICYmXG4gICAgICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiZcbiAgICAgICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRvLnBhdGgpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBSZWxvYWQgdGhlIHNvdXJjZSB3aGVuIG5hdmlnYXRpbmcgYmFjayB0byBhIHBhcmVudC1yb3V0ZSBhZnRlclxuICAgICAgICAgICAgLy8gY2hhbmdpbmcgZGF0YSBpbiBhIGNoaWxkLXJvdXRlLlxuICAgICAgICAgICAgdGhpcy5tZXRhLnJlbG9hZCA9IGZhbHNlXG4gICAgICAgICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB3cmFwcGVkUHJpbWl0aXZlczoge1xuICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgIGhhbmRsZXIodG8sIGZyb20pIHtcbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICAvLyBTa2lwIHRoZSBpbml0aWFsIHNldHRpbmcgb2Ygd3JhcHBlZFByaW1pdGl2ZXMgYXJyYXlcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGZyb20gIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciB0aGUgd3JhcHBlZFByaW1pdGl2ZXMgY2hhbmdlLCBtYXAgdGhlaXIgdmFsdWVzIGJhY2sgdG8gdGhlXG4gICAgICAgICAgLy8gYXJyYXkgb2YgcHJpbWl0aXZlcywgaW4gYSBwcmltaXRpdmUgd2F5IDopXG4gICAgICAgICAgLy8gQnV0IHNldCBgdW53cmFwcGluZ1ByaW1pdGl2ZXNgIHRvIHRydWUsIHNvIHRoZSBgbGlzdERhdGFgIGNvbXB1dGVkXG4gICAgICAgICAgLy8gcHJvcGVydHkga25vd3MgYWJvdXQgaXQsIHdoaWNoIHNldHMgaXQgdG8gYGZhbHNlYCBhZ2Fpbi5cbiAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzLnZhbHVlID0gdHJ1ZVxuICAgICAgICAgIHRoaXMudmFsdWUgPSB0by5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnRvdGFsID0gMFxuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBXaGVuIG5ldyBkYXRhIGlzIGxvYWRlZCwgd2UgY2FuIHN0b3JlIGl0IHJpZ2h0IGJhY2sgaW4gdGhlIGRhdGEgb2YgdGhlXG4gICAgICAvLyB2aWV3IG9yIGZvcm0gdGhhdCBjcmVhdGVkIHRoaXMgbGlzdCBjb21wb25lbnQuXG4gICAgICAvLyBTdXBwb3J0IHR3byBmb3JtYXRzIGZvciBsaXN0IGRhdGE6XG4gICAgICAvLyAtIEFycmF5OiBgWy4uLl1gXG4gICAgICAvLyAtIE9iamVjdDogYHsgcmVzdWx0czogWy4uLl0sIHRvdGFsIH1gLCBzZWUgYHVud3JhcExpc3REYXRhKClgXG4gICAgICBpZiAoXG4gICAgICAgICFkYXRhIHx8XG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmIGlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgdGhpcy5pc09iamVjdFNvdXJjZSAmJiBpc09iamVjdChkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkpIHtcbiAgICAgICAgLy8gVGhlIGZvcm1hdCBkaWRuJ3QgbWF0Y2gsIHNlZSBpZiB3ZSByZWNlaXZlZCBhIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBgdGhpcy52YWx1ZWAgd2FzIGFscmVhZHkgc2V0IGJ5XG4gICAgICAgIC8vIGB1bndyYXBMaXN0RGF0YSgpYCBhbmQgd2UncmUgZG9uZSBub3cuXG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRhdGEpICYmIHRoaXMuaXNJblZpZXcpIHtcbiAgICAgICAgLy8gVGhlIGNvbnRyb2xsZXIgaXMgc2VuZGluZyBkYXRhIGZvciBhIGZ1bGwgbXVsdGktY29tcG9uZW50IHZpZXcsXG4gICAgICAgIC8vIGluY2x1ZGluZyB0aGUgbmVzdGVkIGxpc3QgZGF0YS5cbiAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdW53cmFwTGlzdERhdGEoZGF0YSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJlxuICAgICAgICBpc09iamVjdChkYXRhKSAmJlxuICAgICAgICBpc051bWJlcihkYXRhLnRvdGFsKSAmJlxuICAgICAgICBpc0FycmF5KGRhdGEucmVzdWx0cylcbiAgICAgICkge1xuICAgICAgICAvLyBJZiBAZGl0b2pzL3NlcnZlciBzZW5kcyBkYXRhIGluIHRoZSBmb3JtIG9mIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggcmVzdWx0LCBidXQgcmVtZW1iZXIgdGhlIHRvdGFsIGluIHRoZSBzdG9yZS5cbiAgICAgICAgdGhpcy50b3RhbCA9IGRhdGEudG90YWxcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGEucmVzdWx0c1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKHNjaGVtYSwgdHlwZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBpdGVtXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub3BlblNjaGVtYUNvbXBvbmVudCgtMSkpXG4gICAgICB9XG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIHJldHVybiBpdGVtXG4gICAgfSxcblxuICAgIHJlbW92ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGxldCByZW1vdmVkID0gZmFsc2VcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IG51bGxcbiAgICAgICAgcmVtb3ZlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBsaXN0RGF0YS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgcmVtb3ZlZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlbW92ZWQpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVJdGVtU3RvcmUodGhpcy5zY2hlbWEsIGl0ZW0sIGluZGV4KVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZXRlSXRlbShpdGVtLCBpbmRleCkge1xuICAgICAgY29uc3QgbGFiZWwgPSAoXG4gICAgICAgIGl0ZW0gJiZcbiAgICAgICAgdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zY2hlbWEsIGl0ZW0sIHtcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBleHRlbmRlZDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgKVxuXG4gICAgICBjb25zdCBub3RpZnkgPSAoKSA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogdGhpcy5pc1RyYW5zaWVudCA/ICdpbmZvJyA6ICdzdWNjZXNzJyxcbiAgICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICBgJHtsYWJlbH0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gLFxuICAgICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgICAgXVxuICAgICAgICB9KVxuXG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW0gJiZcbiAgICAgICAgd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMuZGVsZXRlfSAke2xhYmVsfT9gXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCBpbmRleClcbiAgICAgICAgICBub3RpZnkoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgICBjb25zdCBtZXRob2QgPSAnZGVsZXRlJ1xuICAgICAgICAgIGNvbnN0IHJlc291cmNlID0gZ2V0TWVtYmVyUmVzb3VyY2UoXG4gICAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgICB0aGlzLmdldFJlc291cmNlKHsgbWV0aG9kIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kLCByZXNvdXJjZSB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCBpbmRleClcbiAgICAgICAgICAgICAgICBub3RpZnkoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHNjaGVtYUNvbXBvbmVudHNcbiAgICAgIHJldHVybiBzY2hlbWFDb21wb25lbnRzWygoaW5kZXggJSBsZW5ndGgpICsgbGVuZ3RoKSAlIGxlbmd0aF1cbiAgICB9LFxuXG4gICAgb3BlblNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpXG4gICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlVG9Db21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVBhdGguc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICAgID8gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICAgID8gcGFyc2VEYXRhUGF0aChkYXRhUGF0aC5zbGljZSh0aGlzLmRhdGFQYXRoLmxlbmd0aCArIDEpKVswXSA/PyBudWxsXG4gICAgICAgICAgICA6IDBcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsICYmIGlzTnVtYmVyKCtpbmRleCkpIHtcbiAgICAgICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudCgraW5kZXgpXG4gICAgICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBvcGVuZWQgfSA9IHNjaGVtYUNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA+IDAgJiYgKG9uQ29tcGxldGU/Lihjb21wb25lbnRzKSA/PyB0cnVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IG9wZW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxPbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICAgIC8vIFJldHJpZXZlIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCwgd2hpY2ggd2lsbCBiZSB0aGUgY29tcG9uZW50IHRoYXRcbiAgICAgICAgICAvLyB3ZSBqdXN0IG5hdmlnYXRlZCB0bywgYW5kIHBhc3MgaXQgb24gdG8gYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICBjb25zdCB7IHJvdXRlQ29tcG9uZW50cyB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgICAgIGNvbnN0IHJvdXRlQ29tcG9uZW50ID0gcm91dGVDb21wb25lbnRzW3JvdXRlQ29tcG9uZW50cy5sZW5ndGggLSAxXVxuICAgICAgICAgIHJlc29sdmUob25Db21wbGV0ZT8uKFtyb3V0ZUNvbXBvbmVudF0pID8/IHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgcm91dGUgdGhhdCBjYW4gc2VydmUgcGFydCBvZiB0aGUgZ2l2ZW4gZGF0YVBhdGgsXG4gICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgoXG4gICAgICAgICAgICB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoUGFydHMpKVxuICAgICAgICAgIClcbiAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgYWN0dWFsbHkgaXMgYSByb3V0ZSBmb3IgdGhpcyBzdWItY29tcG9uZW50OlxuICAgICAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVyLnJlc29sdmUocGF0aClcbiAgICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGggJiYgbWF0Y2hlZFswXS5uYW1lICE9PSAnY2F0Y2gtYWxsJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHJvdXRlLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSB0aGVyZSwgc28ganVzdCBjYWxsIGBvbkNvbXBsZXRlKClgOlxuICAgICAgICAgICAgICBjYWxsT25Db21wbGV0ZSgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgY29tcG9uZW50J3MgcGF0aCwgdGhlbiBjYWxsIGBvbkNvbXBsZXRlKClgXzpcbiAgICAgICAgICAgICAgdGhpcy4kcm91dGVyXG4gICAgICAgICAgICAgICAgLnB1c2goeyBwYXRoIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdClcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBpbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIHRpY2sgYmVmb3JlIGNhbGxpbmcgYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljayhjYWxsT25Db21wbGV0ZSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgLy8gZW5kIG9mIGBtZXRob2RzYFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICAgIGNvbnN0IGlubGluZWQgPSBpc0lubGluZWQoc2NoZW1hKVxuICAgIGlmIChpbmxpbmVkICYmIHNjaGVtYS5yZXNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTmVzdGVkICR7XG4gICAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICAgID8gJ2xpc3RzJ1xuICAgICAgICAgICAgOiB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICAgID8gJ29iamVjdHMnXG4gICAgICAgICAgICAgIDogJ3NjaGVtYSdcbiAgICAgICAgfSBjYW5ub3QgbG9hZCBkYXRhIGZyb20gdGhlaXIgb3duIHJlc291cmNlc2BcbiAgICAgIClcbiAgICB9XG4gICAgLy8gVXNlIGRpZmZlcmVudGx5IG5hbWVkIHVybCBwYXJhbWV0ZXJzIG9uIGVhY2ggbmVzdGVkIGxldmVsIGZvciBpZCBhc1xuICAgIC8vIG90aGVyd2lzZSB0aGV5IHdvdWxkIGNsYXNoIGFuZCBvdmVycmlkZSBlYWNoIG90aGVyIGluc2lkZSAkcm91dGUucGFyYW1zXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgIGNvbnN0IHBhcmFtID0gYGlkJHtsZXZlbCArIDF9YFxuICAgIGNvbnN0IG1ldGEgPSB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gICAgY29uc3QgZm9ybU1ldGEgPSB7XG4gICAgICAuLi5tZXRhLFxuICAgICAgLy8gV2hlbiBjaGlsZHJlbiBhcmUgZmxhdHRlbmVkIChlLmcuIHRyZWUtbGlzdHMpLCBpbmNsdWRlIHRoZSBgZmxhdHRlbmBcbiAgICAgIC8vIHNldHRpbmcgYWxzbywgZm9yIGZsYXR0ZW5pbmcgYmVsb3cuXG4gICAgICBmbGF0dGVuLFxuICAgICAgbmVzdGVkLFxuICAgICAgcGFyYW1cbiAgICB9XG4gICAgY29uc3QgY2hpbGRSb3V0ZXMgPSBhd2FpdCBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKVxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBhd2FpdCBwcm9jZXNzKGNoaWxkUm91dGVzLCBsZXZlbCArIDEpXG4gICAgfVxuICAgIC8vIElubGluZWQgZm9ybXMgZG9uJ3QgbmVlZCB0byBhY3R1YWxseSBhZGQgcm91dGVzLlxuICAgIGlmIChoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgIWlubGluZWQpIHtcbiAgICAgIC8vIExpc3RzIGluIHNpbmdsZS1jb21wb25lbnQtdmlld3MgKGxldmVsID09PSAwKSB1c2UgdGhlaXIgdmlldydzIHBhdGgsXG4gICAgICAvLyB3aGlsZSBhbGwgb3RoZXJzIG5lZWQgdGhlaXIgcGF0aCBwcmVmaXhlZCB3aXRoIHRoZSBwYXJlbnQncyBwYXRoOlxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGxldmVsID09PSAwID8gJycgOiBzY2hlbWEucGF0aFxuICAgICAgY29uc3QgZm9ybVJvdXRlID0ge1xuICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKFxuICAgICAgICAgIHNvdXJjZVBhdGgsXG4gICAgICAgICAgLy8gT2JqZWN0IHNvdXJjZXMgZG9uJ3QgbmVlZCBpZCBwYXJhbXMgaW4gdGhlaXIgZm9ybSBwYXRocywgYXMgdGhleVxuICAgICAgICAgIC8vIGRpcmVjdGx5IGVkaXQgb25lIG9iamVjdC5cbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc2NoZW1hKSA/IHBhcmFtIDogbnVsbFxuICAgICAgICApLFxuICAgICAgICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50KFxuICAgICAgICAgIG5lc3RlZCA/ICdEaXRvRm9ybU5lc3RlZCcgOiAnRGl0b0Zvcm0nXG4gICAgICAgICksXG4gICAgICAgIG1ldGE6IGZvcm1NZXRhXG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3RTb3VyY2Uoc2NoZW1hKSkge1xuICAgICAgICAvLyBBbHNvIGFkZCBhIHBhcmFtIHJvdXRlLCBzaW1wbHkgdG8gaGFuZGxlICcvY3JlYXRlJyBsaW5rcyB0aGUgc2FtZVxuICAgICAgICAvLyB3YXkgdGhhdCBsaXN0cyBkbywgd2hlcmUgaXQgb3ZlcmxhcHMgd2l0aCA6aWQgZm9yIGl0ZW0gaWRzLlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgLi4uZm9ybVJvdXRlLFxuICAgICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgcGFyYW0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aCkge1xuICAgICAgICAvLyBKdXN0IHJlZGlyZWN0IGJhY2sgdG8gdGhlIHBhcmVudCB3aGVuIGEgbmVzdGVkIHNvdXJjZSByb3V0ZSBpcyBoaXQuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgICAgIHJlZGlyZWN0OiAnLicsXG4gICAgICAgICAgbWV0YVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgLy8gUGFydGl0aW9uIGNoaWxkUm91dGVzIGludG8gdGhvc2UgdGhhdCBuZWVkIGZsYXR0ZW5pbmcgKGUuZy4gdHJlZS1saXN0cylcbiAgICAgIC8vIGFuZCB0aG9zZSB0aGF0IGRvbid0LCBhbmQgcHJvY2VzcyBlYWNoIGdyb3VwIHNlcGFyYXRlbHkgYWZ0ZXIuXG4gICAgICBjb25zdCBbZmxhdFJvdXRlcywgc3ViUm91dGVzXSA9IGNoaWxkUm91dGVzLnJlZHVjZShcbiAgICAgICAgKHJlcywgcm91dGUpID0+IHtcbiAgICAgICAgICByZXNbcm91dGUubWV0YS5mbGF0dGVuID8gMCA6IDFdLnB1c2gocm91dGUpXG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9LFxuICAgICAgICBbW10sIFtdXVxuICAgICAgKVxuICAgICAgaWYgKHN1YlJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9ybVJvdXRlLmNoaWxkcmVuID0gc3ViUm91dGVzXG4gICAgICB9XG4gICAgICByb3V0ZXMucHVzaChmb3JtUm91dGUpXG4gICAgICAvLyBBZGQgdGhlIHByZWZpeGVkIGZvcm1Sb3V0ZXMgd2l0aCB0aGVpciBjaGlsZHJlbiBmb3IgbmVzdGVkIGxpc3RzLlxuICAgICAgaWYgKGZsYXRSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRSb3V0ZSBvZiBmbGF0Um91dGVzKSB7XG4gICAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgICAgLi4uKGNoaWxkUm91dGUucmVkaXJlY3QgPyBjaGlsZFJvdXRlIDogZm9ybVJvdXRlKSxcbiAgICAgICAgICAgIHBhdGg6IGAke2Zvcm1Sb3V0ZS5wYXRofS8ke2NoaWxkUm91dGUucGF0aH1gLFxuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICAuLi5jaGlsZFJvdXRlLm1ldGEsXG4gICAgICAgICAgICAgIGZsYXR0ZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZSh7IHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoIH0sIGdyYXBoKSB7XG4gICAgZ3JhcGguYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UGF0aFdpdGhQYXJhbShwYXRoLCBwYXJhbSkge1xuICByZXR1cm4gcGFyYW1cbiAgICA/IHBhdGhcbiAgICAgID8gYCR7cGF0aH0vOiR7cGFyYW19YFxuICAgICAgOiBgOiR7cGFyYW19YFxuICAgIDogcGF0aFxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMgfSBmcm9tICcuL3NjaGVtYSdcblxuZXhwb3J0IGNvbnN0IGZpbHRlckNvbXBvbmVudHMgPSB7XG4gICd0ZXh0JyhmaWx0ZXIpIHtcbiAgICBjb25zdCBvcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ2NvbnRhaW5zJyxcbiAgICAgICAgdmFsdWU6ICdjb250YWlucydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZXF1YWxzJyxcbiAgICAgICAgdmFsdWU6ICdlcXVhbHMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ3N0YXJ0cyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdzdGFydHMtd2l0aCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZW5kcyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdlbmRzLXdpdGgnXG4gICAgICB9XG4gICAgXVxuICAgIHJldHVybiB7XG4gICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yc1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgd2lkdGg6ICcyLzUnLFxuICAgICAgICAgICAgb3B0aW9uczogaXNBcnJheShmaWx0ZXIub3BlcmF0b3JzKVxuICAgICAgICAgICAgICA/IG9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgb3B0aW9uID0+IGZpbHRlci5vcGVyYXRvcnMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBvcHRpb25zLFxuICAgICAgICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICB0ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgd2lkdGg6IGZpbHRlci5vcGVyYXRvcnMgPyAnMy81JyA6ICdmaWxsJyxcbiAgICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gICdkYXRlLXJhbmdlJygpIHtcbiAgICBjb25zdCBkYXRldGltZSA9IHtcbiAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICB3aWR0aDogJzEvMicsXG4gICAgICBmb3JtYXRzOiB7XG4gICAgICAgIC8vIFVzZSBzaG9ydGVyIGRhdGUgZm9ybWF0IGluIGRhdGUtcmFuZ2UgZmlsdGVyczpcbiAgICAgICAgZGF0ZToge1xuICAgICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICAgICAgeWVhcjogJ251bWVyaWMnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjbGVhcmFibGU6IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb206IGRhdGV0aW1lLFxuICAgICAgdG86IGRhdGV0aW1lXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGaWx0ZXJzUGFuZWwoYXBpLCBmaWx0ZXJzLCBkYXRhUGF0aCwgcXVlcnkpIHtcbiAgY29uc3QgeyBzdGlja3ksIC4uLmZpbHRlclNjaGVtYXMgfSA9IGZpbHRlcnNcbiAgY29uc3QgcGFuZWwgPSB7XG4gICAgdHlwZTogJ3BhbmVsJyxcbiAgICBsYWJlbDogJ0ZpbHRlcnMnLFxuICAgIG5hbWU6ICckZmlsdGVycycsXG4gICAgLy8gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgc3RpY2t5LFxuXG4gICAgLy8gTk9URTogT24gcGFuZWxzLCB0aGUgZGF0YSgpIGNhbGxiYWNrIGRvZXMgc29tZXRoaW5nIGVsc2UgdGhhbiBvbiBub3JtYWxcbiAgICAvLyBzY2hlbWE6IEl0IHByb2R1Y2VzIHRoZSBgZGF0YWAgcHJvcGVydHkgdG8gYmUgcGFzc2VkIHRvIHRoZSBwYW5lbCdzXG4gICAgLy8gc2NoZW1hLCBub3QgdGhlIGRhdGEgdG8gYmUgdXNlZCBmb3IgdGhlIHBhbmVsIGNvbXBvbmVudCBkaXJlY3RseS5cbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmlsdGVyc0RhdGEoXG4gICAgICAgIHBhbmVsLFxuICAgICAgICBxdWVyeS52YWx1ZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzOiBjcmVhdGVGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJTY2hlbWFzKSxcbiAgICBidXR0b25zOiBjcmVhdGVGaWx0ZXJzQnV0dG9ucyhmYWxzZSksXG4gICAgcGFuZWxCdXR0b25zOiBjcmVhdGVGaWx0ZXJzQnV0dG9ucyh0cnVlKSxcblxuICAgIGV2ZW50czoge1xuICAgICAgY2hhbmdlKCkge1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBmaWx0ZXJzKCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0RmlsdGVyc0RhdGEodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSlcbiAgICAgIH0sXG5cbiAgICAgIGhhc0ZpbHRlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcnMubGVuZ3RoID4gMFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBhcHBseUZpbHRlcnMoKSB7XG4gICAgICAgIHF1ZXJ5LnZhbHVlID0ge1xuICAgICAgICAgIC4uLnF1ZXJ5LnZhbHVlLFxuICAgICAgICAgIGZpbHRlcjogdGhpcy5maWx0ZXJzLFxuICAgICAgICAgIC8vIENsZWFyIHBhZ2luYXRpb24gd2hlbiBhcHBseWluZyBvciBjbGVhcmluZyBmaWx0ZXJzOlxuICAgICAgICAgIHBhZ2U6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBjbGVhckZpbHRlcnMoKSB7XG4gICAgICAgIHRoaXMucmVzZXREYXRhKClcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBwYW5lbClcbiAgcmV0dXJuIHBhbmVsXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNCdXR0b25zKHNtYWxsKSB7XG4gIHJldHVybiB7XG4gICAgY2xlYXI6IHtcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgdGV4dDogc21hbGwgPyBudWxsIDogJ0NsZWFyJyxcbiAgICAgIGRpc2FibGVkOiAoeyBzY2hlbWFDb21wb25lbnQgfSkgPT4gIXNjaGVtYUNvbXBvbmVudC5oYXNGaWx0ZXJzLFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAvLyBTaW5jZSBwYW5lbCBidXR0b25zIGFyZSBvdXRzaWRlIG9mIHRoZSBzY2hlbWEsIHdlIG5lZWQgdG8gdXNlIHRoZVxuICAgICAgICAgIC8vIHNjaGVtYSBjb21wb25lbnQgcmVjZWl2ZWQgZnJvbSB0aGUgaW5pdGlhbGl6ZSBldmVudCBiZWxvdzpcbiAgICAgICAgICBzY2hlbWFDb21wb25lbnQuY2xlYXJGaWx0ZXJzKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdWJtaXQ6IHtcbiAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgdGV4dDogc21hbGwgPyBudWxsIDogJ0ZpbHRlcicsXG4gICAgICB2aXNpYmxlOiAhc21hbGwsXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldERhdGFOYW1lKGZpbHRlck5hbWUpIHtcbiAgLy8gUHJlZml4IGZpbHRlciBkYXRhIGtleXMgd2l0aCAnJCcgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggb3RoZXIgZGF0YSBrZXlzOlxuICByZXR1cm4gYCQke2ZpbHRlck5hbWV9YFxufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJOYW1lKGRhdGFOYW1lKSB7XG4gIHJldHVybiBkYXRhTmFtZS5zdGFydHNXaXRoKCckJykgPyBkYXRhTmFtZS5zbGljZSgxKSA6IG51bGxcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycykge1xuICBjb25zdCBjb21wcyA9IHt9XG4gIGZvciAoY29uc3QgZmlsdGVyIG9mIE9iamVjdC52YWx1ZXMoZ2V0TmFtZWRTY2hlbWFzKGZpbHRlcnMpIHx8IHt9KSkge1xuICAgIC8vIFN1cHBvcnQgYm90aCBjdXN0b20gZm9ybXMgYW5kIGRlZmF1bHQgZmlsdGVyIGNvbXBvbmVudHMsIHRocm91Z2ggdGhlXG4gICAgLy8gYGZpbHRlckNvbXBvbmVudHNgIHJlZ2lzdHJ5LiBFdmVuIGZvciBkZWZhdWx0IGZpbHRlcnMsIHN0aWxsIHVzZSB0aGVcbiAgICAvLyBwcm9wZXJ0aWVzIGluIGBmaWx0ZXJgIGFzIHRoZSBiYXNlIGZvciBgZm9ybWAsIHNvIHRoaW5ncyBsaWtlIGBsYWJlbGBcbiAgICAvLyBjYW4gYmUgY2hhbmdlZCBvbiB0aGUgcmVzdWx0aW5nIGZvcm0uXG4gICAgY29uc3QgeyBmaWx0ZXI6IHR5cGUsIHdpZHRoLCAuLi5mb3JtIH0gPSBmaWx0ZXJcbiAgICBjb25zdCBjb21wb25lbnRzID0gdHlwZVxuICAgICAgPyBmaWx0ZXJDb21wb25lbnRzW3R5cGVdPy4oZmlsdGVyKVxuICAgICAgOiBmaWx0ZXIuY29tcG9uZW50c1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3JtLnR5cGUgPSAnZm9ybSdcbiAgICAgIGZvcm0uY29tcG9uZW50cyA9IHt9XG4gICAgICAvLyBDb252ZXJ0IGxhYmVscyB0byBwbGFjZWhvbGRlcnM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gY29tcG9uZW50LmxhYmVsIHx8IGxhYmVsaXplKGNvbXBvbmVudC5uYW1lIHx8IGtleSlcbiAgICAgICAgICBmb3JtLmNvbXBvbmVudHNba2V5XSA9IHtcbiAgICAgICAgICAgIC4uLmNvbXBvbmVudCxcbiAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYWJlbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29tcHNbZ2V0RGF0YU5hbWUoZmlsdGVyLm5hbWUpXSA9IHtcbiAgICAgICAgbGFiZWw6IGZvcm0ubGFiZWwgPz8gbGFiZWxpemUoZmlsdGVyLm5hbWUpLFxuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSksXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlubGluZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBmaWx0ZXIgJyR7ZmlsdGVyLm5hbWV9JzogVW5rbm93biBmaWx0ZXIgdHlwZSAnJHt0eXBlfScuYFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gY29tcHNcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIGRhdGFOYW1lKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzW2RhdGFOYW1lXVxuICByZXR1cm4gY29tcG9uZW50Py5mb3JtPy5jb21wb25lbnRzXG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZpbHRlcnNEYXRhKHNjaGVtYSwgZGF0YSkge1xuICBjb25zdCBmaWx0ZXJzID0gW11cbiAgZm9yIChjb25zdCBkYXRhTmFtZSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZW50cnkgPSBkYXRhW2RhdGFOYW1lXVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgLy8gTWFwIGNvbXBvbmVudHMgc2VxdWVuY2UgdG8gYXJndW1lbnRzOlxuICAgICAgY29uc3QgYXJncyA9IE9iamVjdC5rZXlzKFxuICAgICAgICBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgZGF0YU5hbWUpXG4gICAgICApLm1hcChcbiAgICAgICAga2V5ID0+IGVudHJ5W2tleV0gPz8gbnVsbFxuICAgICAgKVxuICAgICAgLy8gT25seSBhcHBseSBmaWx0ZXIgaWYgdGhlcmUgYXJlIHNvbWUgYXJndW1lbnRzIHRoYXQgYXJlbid0IG51bGw6XG4gICAgICBpZiAoYXJncy5zb21lKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKSkge1xuICAgICAgICBmaWx0ZXJzLnB1c2goXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICBnZXRGaWx0ZXJOYW1lKGRhdGFOYW1lKVxuICAgICAgICAgIH06JHtcbiAgICAgICAgICAgIGFyZ3MubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCcsJylcbiAgICAgICAgICB9YFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWx0ZXJzXG59XG5cbmZ1bmN0aW9uIHBhcnNlRmlsdGVyc0RhdGEoc2NoZW1hLCBxdWVyeSkge1xuICBjb25zdCBmaWx0ZXJzID0ge31cbiAgLy8gU2FtZSBhcyBAZGl0b2pzL3NlcnZlcidzIFF1ZXJ5UGFyYW1ldGVycy5maWx0ZXI6IFRyYW5zbGF0ZSB0aGUgc3RyaW5nIGRhdGFcbiAgLy8gZnJvbSAkcm91dGUucXVlcnkgYmFjayB0byBwYXJhbSBsaXN0cyBwZXIgZmlsdGVyOlxuICBpZiAocXVlcnkpIHtcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBhc0FycmF5KHF1ZXJ5LmZpbHRlcikpIHtcbiAgICAgIGNvbnN0IFssIGZpbHRlck5hbWUsIGpzb25dID0gZmlsdGVyLm1hdGNoKC9eKFxcdyspOiguKikkLylcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbHRlcnNbZmlsdGVyTmFtZV0gPSBhc0FycmF5KEpTT04ucGFyc2UoYFske2pzb259XWApKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgfVxuICB9XG4gIGNvbnN0IGZpbHRlcnNEYXRhID0ge31cbiAgZm9yIChjb25zdCBkYXRhTmFtZSBpbiBzY2hlbWEuY29tcG9uZW50cykge1xuICAgIGNvbnN0IGRhdGEgPSB7fVxuICAgIC8vIElmIHdlIGhhdmUgcmV0cmlldmVkIHBhcmFtcyBmcm9tIHRoZSBxdWVyeSwgZmV0Y2ggdGhlIGFzc29jaWF0ZWRcbiAgICAvLyBmb3JtIGNvbXBvbmVudHMgc28gd2UgY2FuIG1hcCB0aGUgdmFsdWVzIGJhY2sgdG8gb2JqZWN0IGtleXM6XG4gICAgY29uc3QgYXJncyA9IGZpbHRlcnNbZ2V0RmlsdGVyTmFtZShkYXRhTmFtZSldXG4gICAgaWYgKGFyZ3MpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgZGF0YU5hbWUpXG4gICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSBhcmdzW2luZGV4KytdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZmlsdGVyc0RhdGFbZGF0YU5hbWVdID0gZGF0YVxuICB9XG4gIHJldHVybiBmaWx0ZXJzRGF0YVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWxpc3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuKVxuICAuZGl0by1saXN0X19oZWFkZXIoXG4gICAgdi1pZj1cInNjb3BlcyB8fCBoYXNQYWdpbmF0aW9uXCJcbiAgKVxuICAgIERpdG9TY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAvLy0gV2hlbiB0aGVyZSdzIG9ubHkgcGFnaW5hdGlvbiB3aXRob3V0IHNjb3Blcywgd2UgbmVlZCBhIGdvb2Qgb2wnIHNwYWNlclxuICAgIC8vLSBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgIC5kaXRvLXNwYWNlcihcbiAgICAgIHYtZWxzZS1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgIClcbiAgICBEaXRvUGFnaW5hdGlvbihcbiAgICAgIHYtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgIClcbiAgdGFibGUuZGl0by10YWJsZShcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLXRhYmxlLXNlcGFyYXRvcnMnOiBpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWV2ZW4tY291bnQnOiBoYXNFdmVuQ291bnRcbiAgICB9YFxuICApXG4gICAgRGl0b1RhYmxlSGVhZChcbiAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgIERpdG9EcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICA6bW9kZWxWYWx1ZT1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgOm9wdGlvbnM9XCJnZXREcmFnZ2FibGVPcHRpb25zKClcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICBAdXBkYXRlOm1vZGVsVmFsdWU9XCJ2YWx1ZSA9PiAobGlzdERhdGEgPSB2YWx1ZSlcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gbGlzdERhdGFcIlxuICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBEaXRvVGFibGVDZWxsKFxuICAgICAgICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6a2V5PVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDpjZWxsPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgIClcbiAgICAgICAgICB0ZFxuICAgICAgICAgICAgRGl0b1NjaGVtYUlubGluZWQoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0SXRlbVN0b3JlKHNjaGVtYSwgaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgICAgICAgICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgRGl0b0VkaXRCdXR0b25zKFxuICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwiZ2V0SXRlbVN0b3JlKHNjaGVtYSwgaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgKVxuICAgIC8vLSBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIHRmb290KFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoOmNvbHNwYW49XCJudW1Db2x1bW5zXCIpXG4gICAgICAgICAgRGl0b0VkaXRCdXR0b25zKFxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgIClcbiAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBvdXRzaWRlIHRhYmxlIHdoZW4gaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gIERpdG9FZGl0QnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLXN0aWNreShcbiAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IFNvcnRhYmxlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMnXG5pbXBvcnQge1xuICBnZXRWaWV3RWRpdFBhdGgsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnQsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGNyZWF0ZUZpbHRlcnNQYW5lbCB9IGZyb20gJy4uL3V0aWxzL2ZpbHRlci5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IHBpY2tCeSwgZXF1YWxzLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGlzdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW4sIFNvcnRhYmxlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShhcGksIHNjaGVtYSwgZGF0YVBhdGgsIGNvbXBvbmVudCkge1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gc2NoZW1hXG4gICAgLy8gU2VlIGlmIHRoaXMgbGlzdCBjb21wb25lbnQgd2FudHMgdG8gZGlzcGxheSBhIGZpbHRlciBwYW5lbCwgYW5kIGlmIHNvLFxuICAgIC8vIGNyZWF0ZSB0aGUgcGFuZWwgc2NoZW1hIGZvciBpdCB0aHJvdWdoIGBnZXRGaWx0ZXJzUGFuZWwoKWAuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVGaWx0ZXJzUGFuZWwoXG4gICAgICAgIGFwaSxcbiAgICAgICAgZmlsdGVycyxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIC8vIFBhc3MgYSBjb21wdXRlZCB2YWx1ZSB0byBnZXQgLyBzZXQgdGhlIHF1ZXJ5LCBzZWUgZ2V0RmlsdGVyc1BhbmVsKClcbiAgICAgICAgY29tcHV0ZWQoe1xuICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnQucXVlcnlcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgc2V0KHF1ZXJ5KSB7XG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHVuZGVmaW5lZCB2YWx1ZXMgZm9yIGNvbXBhcmluZyB3aXRoIGVxdWFscygpXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBvYmogPT4gcGlja0J5KG9iaiwgdmFsdWUgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICBjb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgICAgICAgICAgICBjb21wb25lbnQubG9hZERhdGEoZmFsc2UpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc1BhZ2luYXRpb24oKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnBhZ2luYXRlXG4gICAgfSxcblxuICAgIGhhc0xpc3RCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICEhKHRoaXMuYnV0dG9uU2NoZW1hcyB8fCB0aGlzLmNyZWF0YWJsZSlcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4gKFxuICAgICAgICBsaXN0RGF0YS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICB0aGlzLmVkaXRhYmxlIHx8XG4gICAgICAgICAgdGhpcy5kZWxldGFibGUgfHxcbiAgICAgICAgICB0aGlzLmRyYWdnYWJsZVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0NlbGxFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0lubGluZWQgJiYgdGhpcy5oYXNFZGl0QnV0dG9uc1xuICAgIH0sXG5cbiAgICBoYXNFdmVuQ291bnQoKSB7XG4gICAgICByZXR1cm4gISh0aGlzLmxpc3REYXRhLmxlbmd0aCAlIDIpXG4gICAgfSxcblxuICAgIG51bUNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAodGhpcy5jb2x1bW5zID8gT2JqZWN0LmtleXModGhpcy5jb2x1bW5zKS5sZW5ndGggOiAxKSArXG4gICAgICAgICh0aGlzLmhhc0NlbGxFZGl0QnV0dG9ucyA/IDEgOiAwKVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0RGF0YVBhdGgoaW5kZXgpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICB9LFxuXG4gICAgZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpIHtcbiAgICAgIGlmICh0aGlzLmVkaXRhYmxlKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIGl0ZW0sIGluZGV4KVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGdldFZpZXdFZGl0UGF0aCh0aGlzLnNjaGVtYSwgaWQsIHRoaXMuY29udGV4dCkgfHxcbiAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7aWR9YFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDZWxsQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY2VsbC0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgIGluZGV4LFxuICAgICAgICBkYXRhUGF0aDogdGhpcy5nZXREYXRhUGF0aChpbmRleClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRmlsdGVyRXJyb3JzKGVycm9ycykge1xuICAgICAgY29uc3QgZmlsdGVyc0RhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgJyRmaWx0ZXJzJylcbiAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0UGFuZWxCeURhdGFQYXRoKGZpbHRlcnNEYXRhUGF0aClcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRydWUpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpLFxuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLmNvbHVtbnMpLFxuICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgYXBpLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJvdXRlcyxcbiAgICAgICAgbGV2ZWwsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgZmxhdHRlbixcbiAgICAgICAgcHJvY2Vzc1xuICAgICAgKVxuICAgIF0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1saXN0IHtcbiAgJHNlbGY6ICY7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICZfX2hlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgcGFkZGluZy1ib3R0b206ICRjb250ZW50LXBhZGRpbmctaGFsZjtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICY6ZW1wdHkge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAuZGl0by1zY29wZXMsXG4gICAgLmRpdG8tcGFnaW5hdGlvbiB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMCAxIGF1dG87XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLXNpbmdsZSB7XG4gICAgLy8gU28gdGhhdCBsaXN0IGJ1dHRvbnMgY2FuIGJlIHN0aWNreSB0byB0aGUgYm90dG9tOlxuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudDtcbiAgICBoZWlnaHQ6IDEwMCU7XG5cbiAgICAvLyBNYWtlIHNpbmdsZSBsaXN0IGhlYWRlciwgbmF2aWdhdGlvbiBhbmQgYnV0dG9ucyBzdGlja3kgdG8gdGhlIHRvcCBhbmRcbiAgICAvLyBib3R0b206XG4gICAgI3skc2VsZn1fX2hlYWRlciB7XG4gICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgdG9wOiAwO1xuICAgICAgbWFyZ2luLXRvcDogLSRjb250ZW50LXBhZGRpbmc7XG4gICAgICBwYWRkaW5nLXRvcDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgICB6LWluZGV4OiAxO1xuXG4gICAgICArIC5kaXRvLXRhYmxlIHtcbiAgICAgICAgLmRpdG8tdGFibGUtaGVhZCB7XG4gICAgICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgICAgICB0b3A6IGNhbGMoJGlucHV0LWhlaWdodCArICRjb250ZW50LXBhZGRpbmcgKyAkY29udGVudC1wYWRkaW5nLWhhbGYpO1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5EaXRvTGFiZWwuZGl0by1sYWJlbC1jb21wb25lbnQoXG4gIDpsYWJlbD1cInZhbHVlXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsYWJlbCcsIHtcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWxhYmVsLWNvbXBvbmVudCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGhlaWdodDogMmVtO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1tYXJrdXAoOmlkPVwiZGF0YVBhdGhcIilcbiAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICB2LWlmPVwiZ3JvdXBlZEJ1dHRvbnMubGVuZ3RoID4gMFwiXG4gIClcbiAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICB2LWZvcj1cImJ1dHRvbnMgaW4gZ3JvdXBlZEJ1dHRvbnNcIlxuICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1mb3I9XCJ7IG5hbWUsIGljb24sIGlzQWN0aXZlLCBvbkNsaWNrIH0gaW4gYnV0dG9uc1wiXG4gICAgICAgIDprZXk9XCJuYW1lXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbiAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICApXG4gICAgICAgIEljb24oOm5hbWU9XCJpY29uXCIpXG4gIEVkaXRvckNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgIHJlZj1cImVkaXRvclwiXG4gICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKVxuICAuZGl0by1yZXNpemUoXG4gICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBFZGl0b3IsIEVkaXRvckNvbnRlbnQsIE1hcmssIGdldE1hcmtBdHRyaWJ1dGVzIH0gZnJvbSAnQHRpcHRhcC92dWUtMydcbi8vIGltcG9ydCB7IHRvZ2dsZU1hcmsgfSBmcm9tICd0aXB0YXAtY29tbWFuZHMnXG4vLyBFc3NlbnRpYWxzOlxuaW1wb3J0IHsgRG9jdW1lbnQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1kb2N1bWVudCdcbmltcG9ydCB7IFRleHQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10ZXh0J1xuLy8gTWFya3M6XG5pbXBvcnQgeyBCb2xkIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYm9sZCdcbmltcG9ydCB7IENvZGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2RlJ1xuaW1wb3J0IHsgSXRhbGljIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taXRhbGljJ1xuaW1wb3J0IHsgTGluayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWxpbmsnXG5pbXBvcnQgeyBTdHJpa2UgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1zdHJpa2UnXG5pbXBvcnQgeyBTdWJzY3JpcHQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1zdWJzY3JpcHQnXG5pbXBvcnQgeyBTdXBlcnNjcmlwdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXN1cGVyc2NyaXB0J1xuaW1wb3J0IHsgVW5kZXJsaW5lIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdW5kZXJsaW5lJ1xuLy8gTm9kZXM6XG5pbXBvcnQgeyBCbG9ja3F1b3RlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYmxvY2txdW90ZSdcbmltcG9ydCB7IENvZGVCbG9jayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUtYmxvY2snXG5pbXBvcnQgeyBIYXJkQnJlYWsgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oYXJkLWJyZWFrJ1xuaW1wb3J0IHsgSGVhZGluZyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhlYWRpbmcnXG5pbXBvcnQgeyBQYXJhZ3JhcGggfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1wYXJhZ3JhcGgnXG5pbXBvcnQgeyBIb3Jpem9udGFsUnVsZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhvcml6b250YWwtcnVsZSdcbmltcG9ydCB7IE9yZGVyZWRMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tb3JkZXJlZC1saXN0J1xuaW1wb3J0IHsgQnVsbGV0TGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJ1bGxldC1saXN0J1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1saXN0LWl0ZW0nXG4vLyBGb290bm90ZXM6XG5pbXBvcnQgeyBGb290bm90ZXMsIEZvb3Rub3RlUmVmZXJlbmNlLCBGb290bm90ZSB9IGZyb20gJ3RpcHRhcC1mb290bm90ZXMnXG4vLyBUT0RPOlxuLy8gaW1wb3J0IHsgSW1hZ2UgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pbWFnZSdcbi8vIGltcG9ydCB7IE1lbnRpb24gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1tZW50aW9uJ1xuLy8gaW1wb3J0IHsgQ29kZUJsb2NrSGlnaGxpZ2h0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZS1ibG9jay1oaWdobGlnaHQnXG4vLyBpbXBvcnQgeyBUYWJsZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlJ1xuLy8gaW1wb3J0IHsgVGFibGVDZWxsIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtY2VsbCdcbi8vIGltcG9ydCB7IFRhYmxlSGVhZGVyIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtaGVhZGVyJ1xuLy8gaW1wb3J0IHsgVGFibGVOb2RlcyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLW5vZGVzJ1xuLy8gaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1yb3cnXG4vLyBpbXBvcnQgeyBUYXNrTGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhc2stbGlzdCdcbi8vIGltcG9ydCB7IFRhc2tJdGVtIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFzay1pdGVtJ1xuLy8gVG9vbHM6XG5pbXBvcnQgeyBIaXN0b3J5IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGlzdG9yeSdcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QsIGh5cGhlbmF0ZSwgZGVib3VuY2UsIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtYXJrdXAnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgY29tcG9uZW50czoge1xuICAgIEVkaXRvckNvbnRlbnQsXG4gICAgSWNvblxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVkaXRvcjogbnVsbCxcbiAgICAgIGhlaWdodDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDEwXG4gICAgfSxcblxuICAgIGhhcmRCcmVhaygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuc2NoZW1hLmhhcmRCcmVha1xuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0IHx8IGBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1hcmtCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbWFya3MnLCB7XG4gICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgIGl0YWxpYzogdHJ1ZSxcbiAgICAgICAgdW5kZXJsaW5lOiB0cnVlLFxuICAgICAgICBzdHJpa2U6IHRydWUsXG4gICAgICAgIHNtYWxsOiB0cnVlLFxuICAgICAgICBjb2RlOiB0cnVlLFxuICAgICAgICBzdWJzY3JpcHQ6IHRydWUsXG4gICAgICAgIHN1cGVyc2NyaXB0OiB0cnVlLFxuICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgb25DbGljazogZWRpdG9yID0+IHRoaXMub25DbGlja0xpbmsoZWRpdG9yKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBiYXNpY05vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIHBhcmFncmFwaDoge1xuICAgICAgICAgIGNvbW1hbmQ6ICdzZXRQYXJhZ3JhcGgnXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRpbmc6IHtcbiAgICAgICAgICBhdHRyaWJ1dGU6ICdsZXZlbCcsXG4gICAgICAgICAgdmFsdWVzOiBbMSwgMiwgMywgNCwgNSwgNl1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYWR2YW5jZWROb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBidWxsZXRMaXN0OiB0cnVlLFxuICAgICAgICBvcmRlcmVkTGlzdDogdHJ1ZSxcbiAgICAgICAgYmxvY2txdW90ZTogdHJ1ZSxcbiAgICAgICAgY29kZUJsb2NrOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB0b29sQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ3Rvb2xzJywge1xuICAgICAgICB1bmRvOiB0cnVlLFxuICAgICAgICByZWRvOiB0cnVlLFxuICAgICAgICBmb290bm90ZXM6IHtcbiAgICAgICAgICBjb21tYW5kOiAnYWRkRm9vdG5vdGUnXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdyb3VwZWRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5tYXJrQnV0dG9ucyxcbiAgICAgICAgdGhpcy5iYXNpY05vZGVCdXR0b25zLFxuICAgICAgICB0aGlzLmFkdmFuY2VkTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRoaXMudG9vbEJ1dHRvbnNcbiAgICAgIF0uZmlsdGVyKGJ1dHRvbnMgPT4gYnV0dG9ucy5sZW5ndGggPiAwKVxuICAgIH0sXG5cbiAgICBwYXJzZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6IHtcbiAgICAgICAgICAnY29sbGFwc2UnOiBmYWxzZSxcbiAgICAgICAgICAncHJlc2VydmUnOiB0cnVlLFxuICAgICAgICAgICdwcmVzZXJ2ZS1hbGwnOiAnZnVsbCdcbiAgICAgICAgfVt0aGlzLndoaXRlc3BhY2VdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVkaXRvck9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlZGl0YWJsZTogIXRoaXMucmVhZHlvbmx5LFxuICAgICAgICBhdXRvRm9jdXM6IHRoaXMuYXV0b2ZvY3VzLFxuICAgICAgICBkaXNhYmxlSW5wdXRSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMuaW5wdXQsXG4gICAgICAgIGRpc2FibGVQYXN0ZVJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5wYXN0ZSxcbiAgICAgICAgcGFyc2VPcHRpb25zOiB0aGlzLnBhcnNlT3B0aW9uc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHdoaXRlc3BhY2U6IGdldFNjaGVtYUFjY2Vzc29yKCd3aGl0ZXNwYWNlJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2NvbGxhcHNlJ1xuICAgICAgLy8gUG9zc2libGUgdmFsdWVzIGFyZTogJ2NvbGxhcHNlJywgJ3ByZXNlcnZlJywgJ3ByZXNlcnZlLWFsbCdcbiAgICB9KSxcblxuICAgIGVuYWJsZVJ1bGVzOiBnZXRTY2hlbWFBY2Nlc3NvcignZW5hYmxlUnVsZXMnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVuYWJsZVJ1bGVzKSB7XG4gICAgICAgIHJldHVybiBpc09iamVjdChlbmFibGVSdWxlcylcbiAgICAgICAgICA/IGVuYWJsZVJ1bGVzXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGlucHV0OiAhIWVuYWJsZVJ1bGVzLFxuICAgICAgICAgICAgICBwYXN0ZTogISFlbmFibGVSdWxlc1xuICAgICAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICByZWFkeW9ubHk6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBhdXRvZm9jdXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBlbmFibGVSdWxlczogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICB1cGRhdGVWYWx1ZSgpXG4gICAgfVxuXG4gICAgY29uc3Qgb25VcGRhdGUgPSAoKSA9PiB7XG4gICAgICBzZXRWYWx1ZURlYm91bmNlZCgpXG4gICAgICB0aGlzLm9uSW5wdXQoKVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlRGVib3VuY2VkID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICB1cGRhdGVWYWx1ZSgpXG4gICAgfSwgMTAwKVxuXG4gICAgY29uc3QgdXBkYXRlVmFsdWUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5lZGl0b3IuZ2V0SFRNTCgpXG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaGFyZEJyZWFrXG4gICAgICAgID8gY29udGVudC5yZXBsYWNlKC9ePHA+KC4qPyk8XFwvcD4kL3MsICckMScpXG4gICAgICAgIDogY29udGVudFxuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmhhcmRCcmVha1xuICAgICAgICAgID8gYDxwPiR7dmFsdWV9PC9wPmBcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLnNldENvbnRlbnQoY29udGVudCwgZmFsc2UsIHRoaXMucGFyc2VPcHRpb25zKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmVkaXRvciA9IG5ldyBFZGl0b3Ioe1xuICAgICAgLi4udGhpcy5lZGl0b3JPcHRpb25zLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgZXh0ZW5zaW9uczogdGhpcy5nZXRFeHRlbnNpb25zKCksXG4gICAgICBjb250ZW50OiB0aGlzLnZhbHVlIHx8ICcnXG4gICAgfSlcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRHJhZ1Jlc2l6ZShldmVudCkge1xuICAgICAgY29uc3QgZ2V0UG9pbnQgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0pID0+ICh7IHgsIHkgfSlcblxuICAgICAgbGV0IHByZXZZID0gZ2V0UG9pbnQoZXZlbnQpLnlcbiAgICAgIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy4kcmVmcy5lZGl0b3IuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlRWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldE9wdGlvbnModGhpcy5lZGl0b3JPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrTGluayhlZGl0b3IpIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICBocmVmOiB7XG4gICAgICAgICAgICB0eXBlOiAndXJsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTGluaycsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBsYWJlbDogJ1RpdGxlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgYXBwbHk6IHsgdHlwZTogJ3N1Ym1pdCcgfSxcbiAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBjbGljayh7IGRpYWxvZ0NvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50LnJlc29sdmUobnVsbClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogZ2V0TWFya0F0dHJpYnV0ZXModGhpcy5lZGl0b3Iuc3RhdGUsICdsaW5rJylcbiAgICAgIH0pXG4gICAgICBpZiAoYXR0cmlidXRlcykge1xuICAgICAgICBsZXQgeyBocmVmLCB0aXRsZSB9ID0gYXR0cmlidXRlc1xuICAgICAgICBpZiAoaHJlZikge1xuICAgICAgICAgIC8vIFNlZSBpZiBgaHJlZmAgY2FuIGJlIHBhcnNlZCBhcyBhIFVSTCwgYW5kIGlmIG5vdCxcbiAgICAgICAgICAvLyBwcmVmaXggaXQgd2l0aCBhIGRlZmF1bHQgcHJvdG9jb2wuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXdcbiAgICAgICAgICAgIG5ldyBVUkwoaHJlZilcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGhyZWYgPSBgaHR0cHM6Ly8ke2hyZWZ9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlZGl0b3IuY29tbWFuZHMuc2V0TGluayh7IGhyZWYsIHRpdGxlIH0pXG4gICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMgPT09IG51bGwpIHtcbiAgICAgICAgZWRpdG9yLmNvbW1hbmRzLnVuc2V0TGluaygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEV4dGVuc2lvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtzID0ge30sXG4gICAgICAgIG5vZGVzID0ge30sXG4gICAgICAgIHRvb2xzID0ge31cbiAgICAgIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLy8gRXNzZW50aWFsczpcbiAgICAgICAgdG9vbHMuZm9vdG5vdGVzXG4gICAgICAgICAgPyBEb2N1bWVudC5leHRlbmQoeyBjb250ZW50OiAnYmxvY2srIGZvb3Rub3Rlcz8nIH0pXG4gICAgICAgICAgOiBEb2N1bWVudCxcblxuICAgICAgICBUZXh0LFxuICAgICAgICBQYXJhZ3JhcGgsIC8vIGJ1dHRvbiBjYW4gYmUgY29udHJvbGxlZCwgYnV0IG5vZGUgbmVlZHMgdG8gYmUgb24uXG5cbiAgICAgICAgLy8gTWFya3M6IGBzY2hlbWEubWFya3NgXG4gICAgICAgIG1hcmtzLmJvbGQgJiYgQm9sZCxcbiAgICAgICAgbWFya3MuaXRhbGljICYmIEl0YWxpYyxcbiAgICAgICAgbWFya3MudW5kZXJsaW5lICYmIFVuZGVybGluZSxcbiAgICAgICAgbWFya3Muc3RyaWtlICYmIFN0cmlrZSxcbiAgICAgICAgbWFya3Muc21hbGwgJiYgU21hbGwsXG4gICAgICAgIG1hcmtzLmNvZGUgJiYgQ29kZSxcbiAgICAgICAgbWFya3Muc3Vic2NyaXB0ICYmIFN1cGVyc2NyaXB0LFxuICAgICAgICBtYXJrcy5zdXBlcnNjcmlwdCAmJiBTdWJzY3JpcHQsXG4gICAgICAgIG1hcmtzLmxpbmsgJiYgTGlua1dpdGhUaXRsZSxcblxuICAgICAgICAvLyBOb2RlczogYHNjaGVtYS5ub2Rlc2BcbiAgICAgICAgbm9kZXMuYmxvY2txdW90ZSAmJiBCbG9ja3F1b3RlLFxuICAgICAgICBub2Rlcy5jb2RlQmxvY2sgJiYgQ29kZUJsb2NrLFxuICAgICAgICBub2Rlcy5oZWFkaW5nICYmIEhlYWRpbmcuY29uZmlndXJlKHsgbGV2ZWxzOiBub2Rlcy5oZWFkaW5nIH0pLFxuICAgICAgICBub2Rlcy5ob3Jpem9udGFsUnVsZSAmJiBIb3Jpem9udGFsUnVsZSxcbiAgICAgICAgKG5vZGVzLm9yZGVyZWRMaXN0IHx8IG5vZGVzLmJ1bGxldExpc3QpICYmIExpc3RJdGVtLFxuICAgICAgICBub2Rlcy5idWxsZXRMaXN0ICYmIEJ1bGxldExpc3QsXG4gICAgICAgIG5vZGVzLm9yZGVyZWRMaXN0ICYmIE9yZGVyZWRMaXN0LFxuXG4gICAgICAgIC8vIEZvb3Rub3RlczpcbiAgICAgICAgLi4uKHRvb2xzLmZvb3Rub3RlcyA/IFtGb290bm90ZXMsIEZvb3Rub3RlLCBGb290bm90ZVJlZmVyZW5jZV0gOiBbXSksXG5cbiAgICAgICAgLy8gVE9ETzpcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgVG9kb0l0ZW0sXG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIFRvZG9MaXN0LFxuXG4gICAgICAgIC8vIFRvb2xzOiBgc2NoZW1hLnRvb2xzYFxuICAgICAgICB0b29scy5oaXN0b3J5ICYmIEhpc3RvcnksXG5cbiAgICAgICAgSGFyZEJyZWFrLmV4dGVuZCh7XG4gICAgICAgICAgYWRkS2V5Ym9hcmRTaG9ydGN1dHM6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNldEhhcmRCcmVhayA9ICgpID0+IHRoaXMuZWRpdG9yLmNvbW1hbmRzLnNldEhhcmRCcmVhaygpXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAnTW9kLUVudGVyJzogc2V0SGFyZEJyZWFrLFxuICAgICAgICAgICAgICAnU2hpZnQtRW50ZXInOiBzZXRIYXJkQnJlYWssXG4gICAgICAgICAgICAgIC4uLih0aGlzLmhhcmRCcmVhayA/IHsgRW50ZXI6IHNldEhhcmRCcmVhayB9IDogbnVsbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICBdLmZpbHRlcihleHRlbnNpb24gPT4gISFleHRlbnNpb24pXG4gICAgfSxcblxuICAgIGdldEJ1dHRvbnMoc2V0dGluZ3NOYW1lLCBkZXNjcmlwdGlvbnMpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSBbXVxuICAgICAgY29uc3QgeyBjb21tYW5kcyB9ID0gdGhpcy5lZGl0b3JcblxuICAgICAgY29uc3QgYWRkQnV0dG9uID0gKHsgbmFtZSwgaWNvbiwgY29tbWFuZCwgYXR0cmlidXRlcywgb25DbGljayB9KSA9PiB7XG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiB0aGlzLmVkaXRvci5pc0FjdGl2ZShuYW1lLCBhdHRyaWJ1dGVzKSxcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICBjb21tYW5kID8/PVxuICAgICAgICAgICAgICBuYW1lIGluIGNvbW1hbmRzXG4gICAgICAgICAgICAgICAgPyBuYW1lXG4gICAgICAgICAgICAgICAgOiBgdG9nZ2xlJHtjYW1lbGl6ZShuYW1lLCB0cnVlKX1gXG4gICAgICAgICAgICBpZiAoY29tbWFuZCBpbiBjb21tYW5kcykge1xuICAgICAgICAgICAgICBjb25zdCBhcHBseSA9IGF0dHJpYnV0ZXMgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5jaGFpbigpW2NvbW1hbmRdKGF0dHJpYnV0ZXMpLmZvY3VzKCkucnVuKClcbiAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgID8gb25DbGljayh0aGlzLmVkaXRvciwgYXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICA6IGFwcGx5KGF0dHJpYnV0ZXMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2NoZW1hW3NldHRpbmdzTmFtZV1cbiAgICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSkge1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdOYW1lID0gWyd1bmRvJywgJ3JlZG8nXS5pbmNsdWRlcyhuYW1lKSA/ICdoaXN0b3J5JyA6IG5hbWVcbiAgICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3Nbc2V0dGluZ05hbWVdXG4gICAgICAgICAgY29uc3QgaWNvbiA9IGh5cGhlbmF0ZShuYW1lKVxuICAgICAgICAgIGlmIChzZXR0aW5nKSB7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkZXNjcmlwdGlvbikpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBjb21tYW5kLCBhdHRyaWJ1dGUsIHZhbHVlcywgb25DbGljayB9ID0gZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlcykgJiYgaXNBcnJheShzZXR0aW5nKSkge1xuICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBoZWFkaW5nIGxldmVsIGF0dHJzOlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYWRkQnV0dG9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgJHtpY29ufS0ke3ZhbHVlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogeyBbYXR0cmlidXRlXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24sIGNvbW1hbmQsIG9uQ2xpY2sgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RcbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy5lZGl0b3IuY29tbWFuZHMuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLmJsdXIoKVxuICAgIH1cbiAgfVxufSlcblxuY29uc3QgU21hbGwgPSBNYXJrLmNyZWF0ZSh7XG4gIG5hbWU6ICdzbWFsbCcsXG5cbiAgcGFyc2VIVE1MKCkge1xuICAgIHJldHVybiBbeyB0YWc6ICdzbWFsbCcgfV1cbiAgfSxcblxuICByZW5kZXJIVE1MKCkge1xuICAgIHJldHVybiBbJ3NtYWxsJywgMF1cbiAgfSxcblxuICBhZGRDb21tYW5kcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2V0U21hbGw6XG4gICAgICAgIGF0dHJpYnV0ZXMgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy5zZXRNYXJrKHRoaXMubmFtZSwgYXR0cmlidXRlcylcbiAgICAgICAgfSxcbiAgICAgIHRvZ2dsZVNtYWxsOlxuICAgICAgICBhdHRyaWJ1dGVzID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMudG9nZ2xlTWFyayh0aGlzLm5hbWUsIGF0dHJpYnV0ZXMpXG4gICAgICAgIH0sXG4gICAgICB1bnNldFNtYWxsOlxuICAgICAgICAoKSA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnVuc2V0TWFyayh0aGlzLm5hbWUpXG4gICAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IExpbmtXaXRoVGl0bGUgPSBMaW5rLmV4dGVuZCh7XG4gIGluY2x1c2l2ZTogZmFsc2UsXG4gIHNjaGVtYToge1xuICAgIGF0dHJzOiB7XG4gICAgICBocmVmOiB7XG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH0sXG4gICAgICB0aXRsZToge1xuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhcnNlSFRNTCgpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0YWc6ICdhJyxcbiAgICAgICAgICBnZXRBdHRyczogZWxlbWVudCA9PiAoe1xuICAgICAgICAgICAgaHJlZjogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSxcbiAgICAgICAgICAgIHRpdGxlOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgndGl0bGUnKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgcmVuZGVySFRNTChub2RlKSB7XG4gICAgICByZXR1cm4gWydhJywgbm9kZS5hdHRycywgMF1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1tYXJrdXAge1xuICBAZXh0ZW5kICVpbnB1dDtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLlByb3NlTWlycm9yIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgfVxuXG4gIC5kaXRvLW1hcmt1cC1lZGl0b3Ige1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICBtYXJnaW4tdG9wOiAkaW5wdXQtcGFkZGluZy12ZXI7XG4gICAgLy8gTW92ZSBwYWRkaW5nIFwiaW5zaWRlXCIgZWRpdG9yIHRvIGNvcnJlY3RseSBwb3NpdGlvbiBzY3JvbGxiYXJcbiAgICBtYXJnaW4tcmlnaHQ6IC0kaW5wdXQtcGFkZGluZy1ob3I7XG4gICAgcGFkZGluZy1yaWdodDogJGlucHV0LXBhZGRpbmctaG9yO1xuICB9XG5cbiAgLmRpdG8tYnV0dG9ucy10b29sYmFyIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICBoMSxcbiAgaDIsXG4gIGgzLFxuICBwLFxuICB1bCxcbiAgb2wsXG4gIHByZSxcbiAgYmxvY2txdW90ZSB7XG4gICAgbWFyZ2luOiAxcmVtIDA7XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuICB9XG5cbiAgaDEsXG4gIGgyLFxuICBoMyB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICBoMSB7XG4gICAgZm9udC1zaXplOiAxLjRyZW07XG4gIH1cblxuICBoMiB7XG4gICAgZm9udC1zaXplOiAxLjJyZW07XG4gIH1cblxuICB1bCB7XG4gICAgbGlzdC1zdHlsZTogZGlzYztcbiAgfVxuXG4gIGNvZGUge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ubztcbiAgfVxuXG4gIHByZSB7XG4gICAgcGFkZGluZzogMC43cmVtIDFyZW07XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlcjtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG5cbiAgICBjb2RlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxuXG4gIHAgY29kZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6IDAgMC4zcmVtO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuICB9XG5cbiAgYSB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGNvbG9yOiBibHVlO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG5cbiAgdWwsXG4gIG9sIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDJyZW07XG4gIH1cblxuICBsaSB7XG4gICAgJiA+IHAsXG4gICAgJiA+IG9sLFxuICAgICYgPiB1bCB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICB9XG5cbiAgYmxvY2txdW90ZSB7XG4gICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCAkY29sb3ItbGlnaHRlcjtcbiAgICBwYWRkaW5nLWxlZnQ6IDFlbTtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG5cbiAgICBwIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gIH1cblxuICBvbC5mb290bm90ZXMge1xuICAgIG1hcmdpbi10b3A6IDFlbTtcbiAgICBwYWRkaW5nOiAxZW0gMDtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IGRlY2ltYWw7XG4gICAgcGFkZGluZy1sZWZ0OiAyZW07XG5cbiAgICAmOmhhcyhsaSkge1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRjb2xvci1saWdodDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbXVsdGlzZWxlY3RcbiAgLmRpdG8tbXVsdGlzZWxlY3RfX2lubmVyXG4gICAgVnVlTXVsdGlzZWxlY3QoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgOmNsYXNzPWB7XG4gICAgICAgICdtdWx0aXNlbGVjdC0tbXVsdGlwbGUnOiBtdWx0aXBsZSxcbiAgICAgICAgJ211bHRpc2VsZWN0LS1sb2FkaW5nJzogaXNMb2FkaW5nLFxuICAgICAgICAnbXVsdGlzZWxlY3QtLWhpZ2hsaWdodCc6IHNob3dIaWdobGlnaHRcbiAgICAgIH1gXG4gICAgICA6c2hvd0xhYmVscz1cImZhbHNlXCJcbiAgICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICAgIHRhZ1BsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIlxuICAgICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICAgIDpjdXN0b21MYWJlbD1cImdldExhYmVsRm9yT3B0aW9uXCJcbiAgICAgIDp0cmFja0J5PVwib3B0aW9uVmFsdWVcIlxuICAgICAgOmdyb3VwTGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgICAgOmdyb3VwVmFsdWVzPVwiZ3JvdXBCeU9wdGlvbnNcIlxuICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgICAgOnNlYXJjaGFibGU9XCJzZWFyY2hhYmxlXCJcbiAgICAgIDppbnRlcm5hbFNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOnByZXNlcnZlU2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsZWFyT25TZWxlY3Q9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpjbG9zZU9uU2VsZWN0PVwiIXN0YXlPcGVuXCJcbiAgICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgQG9wZW49XCJvbk9wZW5cIlxuICAgICAgQGNsb3NlPVwib25DbG9zZVwiXG4gICAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICApXG4gIC8vLSBFZGl0IGJ1dHRvbiBpcyBuZXZlciBkaXNhYmxlZCwgZXZlbiBpZiB0aGUgZmllbGQgaXMgZGlzYWJsZWQuXG4gIERpdG9FZGl0QnV0dG9ucyhcbiAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImZhbHNlXCJcbiAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuaW1wb3J0IFZ1ZU11bHRpc2VsZWN0IGZyb20gJ3Z1ZS1tdWx0aXNlbGVjdCdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0Jvb2xlYW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ211bHRpc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFZ1ZU11bHRpc2VsZWN0IH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoZWRPcHRpb25zOiBudWxsLFxuICAgICAgcG9wdWxhdGU6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKVxuICAgICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgIC8vIElmIGFuIG9wdGlvbiBjYW5ub3QgYmUgZm91bmQsIHdlIG1heSBiZSBpbiB0YWdnYWJsZSBtb2RlIGFuZFxuICAgICAgICAgICAgICAgIC8vIGNhbiBhZGQgaXQuXG4gICAgICAgICAgICAgICAgdmFsdWUgPT4gKFxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkgfHwgdGhpcy5hZGRUYWdPcHRpb24odmFsdWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgb3B0aW9ucyB0aGF0IHdlIGNvdWxkbid0IG1hdGNoLlxuICAgICAgICAgICAgICAvLyBUT0RPOiBTaG91bGQgd2UgZGlzcGxheSBhbiBlcnJvciBpbnN0ZWFkP1xuICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgOiB0aGlzLnNlbGVjdGVkT3B0aW9uXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIC8vIENvbnZlcnQgdmFsdWUgdG8gb3B0aW9ucyBvYmplY3QsIHNpbmNlIHZ1ZS1tdWx0aXNlbGVjdCBjYW4ndCBtYXAgdGhhdFxuICAgICAgICAvLyBpdHNlbGYgdW5mb3J0dW5hdGVseS4gYHRyYWNrLWJ5YCBpcyB1c2VkIGZvciA6a2V5IG1hcHBpbmcgaXQgc2VlbXMuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/IChvcHRpb24gfHwgW10pLm1hcCh2YWx1ZSA9PiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKSlcbiAgICAgICAgICA6IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaGVkT3B0aW9ucyB8fCB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc2VhcmNoYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHRhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndGFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHN0YXlPcGVuOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RheU9wZW4nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyKCkge1xuICAgICAgbGV0IHsgcGxhY2Vob2xkZXIsIHNlYXJjaGFibGUsIHRhZ2dhYmxlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKGlzQm9vbGVhbihwbGFjZWhvbGRlcikpIHtcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlciA/IHVuZGVmaW5lZCA6IG51bGxcbiAgICAgIH1cbiAgICAgIHJldHVybiBwbGFjZWhvbGRlciA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gc2VhcmNoYWJsZSAmJiB0YWdnYWJsZVxuICAgICAgICAgID8gYFNlYXJjaCBvciBhZGQgYSAke3RoaXMubGFiZWx9YFxuICAgICAgICAgIDogc2VhcmNoYWJsZVxuICAgICAgICAgICAgPyBgU2VsZWN0IG9yIHNlYXJjaCAke3RoaXMubGFiZWx9YFxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgOiBwbGFjZWhvbGRlclxuICAgIH0sXG5cbiAgICBzaG93SGlnaGxpZ2h0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNNb3VudGVkICYmIHRoaXMuJHJlZnMuZWxlbWVudC5wb2ludGVyRGlydHlcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5hdXRvZm9jdXMpIHtcbiAgICAgIC8vIHZ1ZS1tdWx0aXNlbGVjdCBkb2Vzbid0IHN1cHBvcnQgdGhlIGF1dG9mb2N1cyBhdHRyaWJ1dGUuIFdlIG5lZWQgdG9cbiAgICAgIC8vIGhhbmRsZSBpdCBoZXJlLlxuICAgICAgdGhpcy5mb2N1cygpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBhZGRUYWdPcHRpb24odGFnKSB7XG4gICAgICBpZiAodGhpcy50YWdnYWJsZSkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbkxhYmVsLCBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBvcHRpb24gPVxuICAgICAgICAgIG9wdGlvbkxhYmVsICYmIG9wdGlvblZhbHVlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdOiB0YWcsXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogRGVmaW5lIGEgc2ltcGxlIHNjaGVtYSBvcHRpb24gdG8gY29udmVydCB0aGUgdGFnIHZhbHVlXG4gICAgICAgICAgICAgICAgLy8gdG8gc29tZXRoaW5nIGVsc2UsIGUuZy4gYHRvVGFnOiB0YWcgPT4gdW5kZXJzY29yZSh0YWcpYFxuICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV06IHRhZ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHRhZ1xuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kcmVmcy5lbGVtZW50LmFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgYmx1ckVsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuZGVhY3RpdmF0ZSgpXG4gICAgfSxcblxuICAgIG9uT3BlbigpIHtcbiAgICAgIHRoaXMucG9wdWxhdGUgPSB0cnVlXG4gICAgfSxcblxuICAgIG9uQ2xvc2UoKSB7XG4gICAgICAvLyBTaW5jZSB3ZSBkb24ndCBmaXJlIGJsdXIgZXZlbnRzIHdoaWxlIHRoZSBtdWx0aXNlbGVjdCBpcyBvcGVuIChzZWVcbiAgICAgIC8vIGJlbG93KSwgd2UgbmVlZCB0byBkbyBpdCBoZXJlLCB3aGVuIGl0J3MgYWN0dWFsbHkgY2xvc2VkLlxuICAgICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgICB0aGlzLm9uQmx1cigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIGlmICghdGhpcy4kcmVmcy5lbGVtZW50LmlzT3Blbikge1xuICAgICAgICBUeXBlTWl4aW4ubWV0aG9kcy5vbkJsdXIuY2FsbCh0aGlzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkFkZFRhZyh0YWcpIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuYWRkVGFnT3B0aW9uKHRhZylcbiAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25TZWFyY2hDaGFuZ2UocXVlcnkpIHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZpbHRlcikge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAvLyBTZXQgYHNlYXJjaGVkT3B0aW9uc2AgdG8gYW4gZW1wdHkgYXJyYXksIGJlZm9yZSBpdCB3aWxsIGJlXG4gICAgICAgICAgLy8gcG9wdWxhdGVkIGFzeW5jaHJvbm91c2x5IHdpdGggdGhlIGFjdHVhbCByZXN1bHRzLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gW11cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IGF3YWl0IHRoaXMucmVzb2x2ZURhdGEoXG4gICAgICAgICAgICAoKSA9PiB0aGlzLnNlYXJjaEZpbHRlcihuZXcgRGl0b0NvbnRleHQodGhpcywgeyBxdWVyeSB9KSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ2xlYXIgYHNlYXJjaGVkT3B0aW9uc2Agd2hlbiB0aGUgcXVlcnkgaXMgY2xlYXJlZC5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5AaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QuY3NzJztcblxuJHNwaW5uZXItd2lkdGg6ICRzZWxlY3QtYXJyb3ctd2lkdGg7XG4kdGFnLWljb24td2lkdGg6IDEuOGVtO1xuJHRhZy1tYXJnaW46IDJweDtcbiR0YWctcGFkZGluZzogM3B4O1xuJHRhZy1saW5lLWhlaWdodDogMWVtO1xuXG4uZGl0by1tdWx0aXNlbGVjdCB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJl9faW5uZXIge1xuICAgIGZsZXg6IDE7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICB9XG5cbiAgLm11bHRpc2VsZWN0IHtcbiAgICAkc2VsZjogbGFzdC1zZWxlY3RvcigmKTtcblxuICAgIC0taW5wdXQtd2lkdGg6IDEwMCU7XG5cbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgbWluLWhlaWdodDogaW5oZXJpdDtcbiAgICBjb2xvcjogJGNvbG9yLWJsYWNrO1xuXG4gICAgJi0tbXVsdGlwbGUge1xuICAgICAgLS1pbnB1dC13aWR0aDogYXV0bztcbiAgICB9XG5cbiAgICAmX190YWdzIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgICBtaW4taGVpZ2h0OiBpbmhlcml0O1xuICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICBwYWRkaW5nOiAwICRzcGlubmVyLXdpZHRoIDAgMDtcbiAgICAgIC8vIFNvIHRhZ3MgY2FuIGZsb2F0IG9uIG11bHRpcGxlIGxpbmVzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zOlxuICAgICAgcGFkZGluZy1ib3R0b206ICR0YWctbWFyZ2luO1xuXG4gICAgICAuZGl0by1oYXMtZXJyb3JzICYge1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1lcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX190YWcge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBtYXJnaW46ICR0YWctbWFyZ2luIDAgMCAkdGFnLW1hcmdpbjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmc6ICR0YWctcGFkZGluZyAkdGFnLWljb24td2lkdGggJHRhZy1wYWRkaW5nIDAuOGVtO1xuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHQ7XG4gICAgICBoZWlnaHQ6IGNhbGMoJGlucHV0LWhlaWdodCAtIDIgKiAkdGFnLXBhZGRpbmcpO1xuICAgIH1cblxuICAgICZfX3RhZ3Mtd3JhcCB7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgIH1cblxuICAgICZfX3NpbmdsZSxcbiAgICAmX19wbGFjZWhvbGRlcixcbiAgICAmX19pbnB1dCB7XG4gICAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgICAgZmxleDogMSAwIDAlO1xuICAgICAgd2lkdGg6IDA7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgbWFyZ2luOiAwIDAgMXB4IDA7XG4gICAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgc3R5bGU9XCJwYWRkaW5nOiAuLi47XCIgaW4gYWRkaXRpb24gdG8gdXNpbmdcbiAgICAgIC8vIGNsYXNzZXMsIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZyAhaW1wb3J0YW50O1xuICAgICAgLy8gU28gaW5wdXQgY2FuIGZsb2F0IG5leHQgdG8gdGFncyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2lucyB3aXRoXG4gICAgICAvLyAmX190YWdzOlxuICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgfVxuXG4gICAgJl9fcGxhY2Vob2xkZXIsXG4gICAgJl9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItcGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgJl9fcGxhY2Vob2xkZXIge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAvLyBFbmZvcmNlIGFjdHVhbCBsaW5lLWhlaWdodCBmb3IgcG9zaXRpb25pbmcuXG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3NlbGVjdCxcbiAgICAmX19zcGlubmVyIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAvLyAkYm9yZGVyLXdpZHRoIHRvIHByZXZlbnQgbWFza2luZyBib3JkZXIgd2l0aCAmX19zcGlubmVyXG4gICAgICB0b3A6ICRib3JkZXItd2lkdGg7XG4gICAgICByaWdodDogJGJvcmRlci13aWR0aDtcbiAgICAgIGJvdHRvbTogJGJvcmRlci13aWR0aDtcbiAgICAgIGhlaWdodDogaW5oZXJpdDtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIH1cblxuICAgICZfX3NlbGVjdCB7XG4gICAgICB3aWR0aDogJHNlbGVjdC1hcnJvdy13aWR0aDtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgQGluY2x1ZGUgYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKTtcblxuICAgICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tO1xuICAgICAgICByaWdodDogJHNlbGVjdC1hcnJvdy1yaWdodDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19zcGlubmVyIHtcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aDtcblxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAvLyBDaGFuZ2UgdGhlIHdpZHRoIG9mIHRoZSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAzcHg7XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBtYXJnaW46IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fb3B0aW9uIHtcbiAgICAgICRvcHRpb246IGxhc3Qtc2VsZWN0b3IoJik7XG5cbiAgICAgIG1pbi1oZWlnaHQ6IHVuc2V0O1xuICAgICAgaGVpZ2h0OiB1bnNldDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAvLyBJbnN0cnVjdGlvbiB0ZXh0IGZvciBvcHRpb25zXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBzaG93IHRoZSBoaWdobGlnaHQgb25jZSB0aGUgcHVsbGRvd24gaGFzIHJlY2VpdmVkIG1vdXNlIG9yXG4gICAgICAvLyBrZXlib2FyZCBpbnRlcmFjdGlvbiwgaW4gd2hpY2ggY2FzZSBgJi0taGlnaGxpZ2h0YCB3aWxsIGJlIHNldCxcbiAgICAgIC8vIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgYHBvaW50ZXJEaXJ0eWAgaW4gdnVlLW11bHRpc2VsZWN0LlxuICAgICAgLy8gVW50aWwgdGhlbiwgY2xlYXIgdGhlIGhpZ2hsaWdodCBzdHlsZSwgYnV0IG9ubHkgaWYgaXQgaXNuJ3QgYWxzb1xuICAgICAgLy8gZGlzYWJsZWQgb3Igc2VsZWN0ZWQsIGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byBrZWVwIHRoZSBzdHlsZS5cbiAgICAgIEBhdC1yb290ICN7JHNlbGZ9Om5vdCgjeyRzZWxmfS0taGlnaGxpZ2h0KVxuICAgICAgICAgICN7JG9wdGlvbn06bm90KCN7JG9wdGlvbn0tLWRpc2FibGVkKTpub3QoI3skb3B0aW9ufS0tc2VsZWN0ZWQpIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cblxuICAgICAgJi0taGlnaGxpZ2h0IHtcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgQGF0LXJvb3QgI3skc2VsZn0jeyRzZWxmfS0taGlnaGxpZ2h0ICN7bGFzdC1zZWxlY3RvcigmKX0ge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYtLXNlbGVjdGVkIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xuXG4gICAgICAgIEBhdC1yb290ICN7JHNlbGZ9I3skc2VsZn0tLWhpZ2hsaWdodCAmI3skb3B0aW9ufS0taGlnaGxpZ2h0IHtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi0tZGlzYWJsZWQge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3RhZyB7XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgICZfX3RhZy1pY29uIHtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgICB3aWR0aDogJHRhZy1pY29uLXdpZHRoO1xuICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIEBleHRlbmQgJWljb24tY2xlYXI7XG5cbiAgICAgICAgZm9udC1zaXplOiAwLjllbTtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyOjphZnRlciB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX190YWdzLFxuICAgICZfX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICB9XG5cbiAgICAmX19jb250ZW50LXdyYXBwZXIge1xuICAgICAgei1pbmRleDogJHotaW5kZXgtcG9wdXA7XG4gICAgICBib3JkZXItY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgJjpub3QoJi0tYWJvdmUpICN7JHNlbGZ9X19jb250ZW50LXdyYXBwZXIge1xuICAgICAgbWFyZ2luOiAoLSRib3JkZXItd2lkdGgpIDAgMDtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgfVxuXG4gICAgJi0tYWJvdmUgI3skc2VsZn1fX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICBtYXJnaW46IDAgMCAoLSRib3JkZXItd2lkdGgpO1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICB9XG5cbiAgICAmLS1hY3RpdmUge1xuICAgICAgI3skc2VsZn1fX3BsYWNlaG9sZGVyIHtcbiAgICAgICAgLy8gRG9uJ3QgdXNlIGBkaXNwbGF5OiBub25lYCB0byBoaWRlIHBsYWNlLWhvbGRlciwgYXMgdGhlIGxheW91dCB3b3VsZFxuICAgICAgICAvLyBjb2xsYXBzZS5cbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9X19zaW5nbGUsXG4gICAgICAjeyRzZWxmfV9faW5wdXQge1xuICAgICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIGBzdHlsZT1cIndpZHRoXCJgIGluIGFkZGl0aW9uIHRvIHVzaW5nIGNsYXNzZXNcbiAgICAgICAgLy8gc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgICAgd2lkdGg6IHZhcigtLWlucHV0LXdpZHRoKSAhaW1wb3J0YW50O1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfV9fdGFncyB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgICB9XG5cbiAgICAgICYjeyRzZWxmfS0tYWJvdmUge1xuICAgICAgICAjeyRzZWxmfV9fdGFncyB7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYtLWxvYWRpbmcge1xuICAgICAgI3skc2VsZn1fX3RhZ3Mge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn1fX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgIT09IG51bGwgPyB0aGlzLnZhbHVlIDogJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID1cbiAgICAgICAgICB2YWx1ZSAhPT0gJydcbiAgICAgICAgICAgID8gdGhpcy5pc0ludGVnZXJcbiAgICAgICAgICAgICAgPyBwYXJzZUludCh2YWx1ZSwgMTApXG4gICAgICAgICAgICAgIDogcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc3RlcFZhbHVlKCkge1xuICAgICAgLy8gRG9uJ3Qgc2hvdyBzdGVwcyBpZiB0aGUgaW5wdXQgaXMgYWxzbyBjbGVhcmFibGUsIHNpbmNlIHRoZSBzdGVwIGJ1dHRvbnNcbiAgICAgIC8vIHdvdWxkIGNvbGxpZGUgd2l0aCB0aGUgY2xlYXIgYnV0dG9uLlxuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHRoaXMuc3RlcCA9PSBudWxsICYmICF0aGlzLmlzSW50ZWdlclxuICAgICAgICAgID8gJ2FueSdcbiAgICAgICAgICA6IHRoaXMuc3RlcFxuICAgIH0sXG5cbiAgICBkZWNpbWFsczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlY2ltYWxzJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICBzdGVwOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RlcCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChzdGVwKSB7XG4gICAgICAgIC8vIEZvciBpbnRlZ2Vycywgcm91bmQgdGhlIHN0ZXBzIHRvIHRoZSBuZXh0IGJpZ2dlciBpbnRlZ2VyIHZhbHVlOlxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgc3RlcCAhPSBudWxsID8gTWF0aC5jZWlsKHN0ZXApIDogc3RlcFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWluOiBnZXRTY2hlbWFBY2Nlc3NvcignbWluJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1pbikge1xuICAgICAgICBtaW4gPVxuICAgICAgICAgIG1pbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzBdXG4gICAgICAgICAgICA6IG1pblxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWluICE9IG51bGwgPyBNYXRoLmZsb29yKG1pbikgOiBtaW5cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heDogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtYXgpIHtcbiAgICAgICAgbWF4ID1cbiAgICAgICAgICBtYXggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlsxXVxuICAgICAgICAgICAgOiBtYXhcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1heCAhPSBudWxsID8gTWF0aC5jZWlsKG1heCkgOiBtYXhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHJhbmdlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmFuZ2UnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gYHRoaXMubWluYCwgYHRoaXMubWF4YCBhbHJlYWR5IHN1cHBvcnQgYHNjaGVtYS5yYW5nZWAsXG4gICAgICAgIC8vIHNvIHJlZGlyZWN0IHRoZXJlLlxuICAgICAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzXG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCAmJiBtYXggIT0gbnVsbCA/IFttaW4sIG1heF0gOiB1bmRlZmluZWRcbiAgICAgIH0sXG5cbiAgICAgIHNldChyYW5nZSkge1xuICAgICAgICAvLyBQcm92aWRlIGEgc2V0dGVyIHRoYXQgZGVsZWdhdGVzIHRvIGBbdGhpcy5taW4sIHRoaXMubWF4XWAsXG4gICAgICAgIC8vIHNpbmNlIHRob3NlIGFscmVhZHkgaGFuZGxlIGBzY2hlbWEucmFuZ2VgLlxuICAgICAgICBpZiAoaXNBcnJheShyYW5nZSkpIHtcbiAgICAgICAgICA7W3RoaXMubWluLCB0aGlzLm1heF0gPSByYW5nZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHt9XG4gICAgICBjb25zdCB7IHJhbmdlLCBtaW4sIG1heCwgZGVjaW1hbHMsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yYW5nZSA9IHJhbmdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWluICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5taW4gPSBtaW5cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4ICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5tYXggPSBtYXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlY2ltYWxzICE9IG51bGwpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgfSBlbHNlIGlmIChzdGVwKSB7XG4gICAgICAgIGNvbnN0IGRlY2ltYWxzID0gKGAke3N0ZXB9YC5zcGxpdCgnLicpWzFdIHx8ICcnKS5sZW5ndGhcbiAgICAgICAgaWYgKGRlY2ltYWxzID4gMCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0ludGVnZXIpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbklucHV0RmllbGQuZGl0by1udW1iZXIoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdHlwZT1cIm51bWJlclwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6bWluPVwibWluXCJcbiAgOm1heD1cIm1heFwiXG4gIDpzdGVwPVwic3RlcFZhbHVlXCJcbilcbiAgdGVtcGxhdGUoI2FmdGVyKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnbnVtYmVyJywgJ2ludGVnZXInXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW051bWJlck1peGluXSxcbiAgICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgaXNJbnRlZ2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnaW50ZWdlcidcbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi8vIE9ubHkgc2hvdyBzcGluIGJ1dHRvbnMgaWYgdGhlIG51bWJlciBjb21wb25lbnQgZGVmaW5lcyBhIHN0ZXAgc2l6ZS5cbmlucHV0W3R5cGU9J251bWJlciddOm5vdChbc3RlcF0pIHtcbiAgJjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgJjo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1vYmplY3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuKVxuICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gIClcbiAgICAvLy0gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICBEaXRvU2NoZW1hSW5saW5lZChcbiAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgOmxhYmVsPVwib2JqZWN0TGFiZWxcIlxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwib2JqZWN0RGF0YSAmJiBkZWxldGFibGVcIlxuICAgICAgOmVkaXRhYmxlPVwib2JqZWN0RGF0YSAmJiBlZGl0YWJsZVwiXG4gICAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4gICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gICAgKVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtZWxzZS1pZj1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgOmlzPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dCgpKVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICApXG4gIC8vLSBOT1RFOiBgRGl0b0VkaXRCdXR0b25zYCBoZXJlIG9ubHkgaGFuZGxlIHRoZSBjcmVhdGUgYnV0dG9uIG91dHNpZGUgb2YgdGhlXG4gIC8vLSBzY2hlbWEsIHRoZSBlZGl0IGJ1dHRvbnMgaW5zaWRlIGFyZSBoYW5kbGVkIGJ5IGBEaXRvU2NoZW1hSW5saW5lZGAuXG4gIERpdG9FZGl0QnV0dG9ucyhcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgIDpwYXRoPVwicGF0aFwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IHJlc29sdmVTY2hlbWFDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignb2JqZWN0Jywge1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgLy8gTm8gbmVlZCBmb3IgdHJhbnNmb3JtYXRpb24gaGVyZS4gU2VlIFR5cGVUcmVlTGlzdCBmb3IgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb2JqZWN0TGFiZWwoKSB7XG4gICAgICAvLyBPbmx5IHNob3cgYSBsYWJlbCBpZiB0aGUgb2JqZWN0IGlzIGNvbGxhcHNpYmxlLlxuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGVcbiAgICAgICAgPyB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgdGhpcy5vYmplY3REYXRhLCB7IGFzT2JqZWN0OiB0cnVlIH0pXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBkYXRhOiB0aGlzLm9iamVjdERhdGEgfSlcbiAgICB9XG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksXG4gICAgc2NoZW1hLFxuICAgIG5hbWUsXG4gICAgcm91dGVzLFxuICAgIGxldmVsLFxuICAgIG5lc3RlZCA9IGZhbHNlLFxuICAgIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSksXG4gICAgICBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgICBhcGksXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBmbGF0dGVuLFxuICAgICAgICBwcm9jZXNzXG4gICAgICApXG4gICAgXSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW9iamVjdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogJGZvcm0tc3BhY2luZztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWluLXdpZHRoOiBtaW4tY29udGVudDtcblxuICAuZGl0by1vYmplY3QtY29udGVudCB7XG4gICAgZmxleDogMCAxIDEwMCU7XG4gIH1cblxuICA+IC5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gICAgZmxleDogMSAwIDAlO1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwYW5lbCcsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRTcGFjaW5nOiB0cnVlLFxuXG4gIGdldFBhbmVsU2NoZW1hKGFwaSwgc2NoZW1hKSB7XG4gICAgLy8gRm9yIGEgVHlwZVBhbmVsLCB0aGUgY29tcG9uZW50IHNjaGVtYSBpcyBhbHNvIHRoZSBwYW5lbCBzY2hlbWEsIGJ1dFxuICAgIC8vIHJlbW92ZSB0aGUgYWRkZWQgbmFtZSwgc28gaXQgZG9lc24ndCBnZXQgYXBwZW5kZWQgdHdpY2UgdG8gZGF0YS1wYXRoLlxuICAgIGNvbnN0IHsgbmFtZSwgLi4ucGFuZWwgfSA9IHNjaGVtYVxuICAgIHJldHVybiBwYW5lbFxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxucHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gIDptYXg9XCJwcm9ncmVzc01heFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncHJvZ3Jlc3MnLCB7XG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm9ncmVzc1ZhbHVlKCkge1xuICAgICAgbGV0IHsgdmFsdWUsIHJhbmdlLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgdmFsdWUgLT0gcmFuZ2VbMF1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcCkge1xuICAgICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHN0ZXApICogc3RlcFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICcnXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgcHJvZ3Jlc3NNYXgoKSB7XG4gICAgICBjb25zdCB7IHJhbmdlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gcmFuZ2UgPyByYW5nZVsxXSAtIHJhbmdlWzBdIDogbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKFxuICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICApXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tcmFkaW8tYnV0dG9uKFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncmFkaW8nLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcmFkaW8tYnV0dG9ucyB7XG4gIGxhYmVsIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xuICB9XG5cbiAgLmRpdG8tcmFkaW8tYnV0dG9uIHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2VjdGlvbig6Y2xhc3M9XCJ7ICdkaXRvLXNlY3Rpb24tLWxhYmVsbGVkJzogaGFzTGFiZWwgfVwiKVxuICBEaXRvU2NoZW1hSW5saW5lZC5kaXRvLXNlY3Rpb25fX3NjaGVtYShcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIml0ZW1cIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpwYWRkaW5nPVwiaGFzTGFiZWwgPyAnbmVzdGVkJyA6ICdpbmxpbmVkJ1wiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICA6bGFiZWxOb2RlPVwibGFiZWxOb2RlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRJdGVtRm9ybVNjaGVtYSwgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VjdGlvbicsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogKHsgc2NoZW1hIH0pID0+ICFzY2hlbWEubmVzdGVkICYmICEoJ2RlZmF1bHQnIGluIHNjaGVtYSksXG4gIGRlZmF1bHROZXN0ZWQ6IGZhbHNlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcblxuICBjb21wdXRlZDoge1xuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLnZhbHVlIDogdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5zY2hlbWEubGFiZWxcbiAgICB9LFxuXG4gICAgY29sbGFwc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2VkOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2VkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNvbGxhcHNlZCkge1xuICAgICAgICByZXR1cm4gY29sbGFwc2VkICYmIHRoaXMuY29sbGFwc2libGVcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgICAvLyBQcm9jZXNzIHNlY3Rpb24gY29tcG9uZW50cyBzbyB0aGVpciBmb3JtcyBnZXQgcmVzb2x2ZWQgdG9vLlxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2VjdGlvbiB7XG4gICYtLWxhYmVsbGVkIHtcbiAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMgJGVhc2Utb3V0LXF1YXJ0O1xuICAgIG1hcmdpbi10b3A6ICRmb3JtLXNwYWNpbmctaGFsZjtcblxuICAgICY6aGFzKC5kaXRvLXNjaGVtYS0tb3Blbikge1xuICAgICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gTmVzdGluZyBpcyBuZWVkZWQgdG8gbWFrZSBhbiBhcnJvdyBhcHBlYXIgb3ZlciB0aGUgc2VsZWN0IGl0ZW06XG4uZGl0by1zZWxlY3RcbiAgLmRpdG8tc2VsZWN0X19pbm5lclxuICAgIHNlbGVjdChcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICAgIClcbiAgICAgICAgb3B0aW9uKDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIikge3sgZ2V0TGFiZWxGb3JPcHRpb24oc2VsZWN0ZWRPcHRpb24pIH19XG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICApXG4gIC8vLSBFZGl0IGJ1dHRvbiBpcyBuZXZlciBkaXNhYmxlZCwgZXZlbiBpZiB0aGUgZmllbGQgaXMgZGlzYWJsZWQuXG4gIERpdG9FZGl0QnV0dG9ucyhcbiAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImZhbHNlXCJcbiAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlbGVjdCcsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBEaXNhYmxlIGxhenktcG9wdWxhdGlvbiBmb3Igbm93LlxuICAgICAgLy8gVE9ETzogU2V0IHRvIGBmYWxzZWAgT25jZSBsaW5ldG8gZTJlIHRlc3RzIGFkZHJlc3MgdGhlaXIgaXNzdWVzLlxuICAgICAgcG9wdWxhdGU6IHRydWVcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zZWxlY3Qge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIHNlbGVjdCB7XG4gICAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgICBwYWRkaW5nLXJpZ2h0OiAkc2VsZWN0LWFycm93LXdpZHRoO1xuICB9XG5cbiAgLy8gYCZfX19pbm5lcmAgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIGVkaXQgYnV0dG9ucyBhcHBlYXIgdG8gdGhlIHJpZ2h0IG9mIHRoZVxuICAvLyBzZWxlY3Q6XG4gICZfX2lubmVyIHtcbiAgICBmbGV4OiAxO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBAaW5jbHVkZSBhcnJvdygkc2VsZWN0LWFycm93LXNpemUpO1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tO1xuICAgICAgcmlnaHQ6ICRzZWxlY3QtYXJyb3ctcmlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICB9XG5cbiAgLy8gSGFuZGxlIC5kaXRvLXdpZHRoLWZpbGwgc2VwYXJhdGVseSBkdWUgdG8gcmVxdWlyZWQgbmVzdGluZyBvZiBzZWxlY3Q6XG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICBzZWxlY3Qge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWRpc2FibGVkOjphZnRlciB7XG4gICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNsaWRlclxuICBpbnB1dC5kaXRvLXJhbmdlKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdHlwZT1cInJhbmdlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbiAgSW5wdXRGaWVsZC5kaXRvLW51bWJlcihcbiAgICB2LWlmPVwiaW5wdXRcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzbGlkZXInLCB7XG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93SW5wdXRgP1xuICAgIGlucHV0OiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zbGlkZXIge1xuICBAZXh0ZW5kICVpbnB1dDtcblxuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLXJhbmdlIHtcbiAgICBmbGV4OiBhdXRvO1xuICAgIGhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpO1xuICB9XG5cbiAgLmRpdG8tbnVtYmVyIHtcbiAgICBib3JkZXI6IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSBlc2xpbnQtZGlzYWJsZSB2dWUvdmFsaWQtdGVtcGxhdGUtcm9vdCAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+PC90ZW1wbGF0ZT5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NwYWNlcicsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2Vcbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5Td2l0Y2hCdXR0b24uZGl0by1zd2l0Y2goXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIDpsYWJlbHM9XCJsYWJlbHNcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBTd2l0Y2hCdXR0b24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zd2l0Y2gge1xuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldERlZmF1bHRWYWx1ZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgdHJpbTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RyaW0nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShjb250ZXh0KSB7XG4gICAgbGV0IHsgc2NoZW1hLCB2YWx1ZSB9ID0gY29udGV4dFxuICAgIGlmIChzY2hlbWEudHJpbSAmJiB2YWx1ZSAhPSBudWxsICYmIGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgLy8gVGV4dCBmaWVsZHMgZG9uJ3QgbmVjZXNzYXJpbHkgaGF2ZSBhIGBTdHJpbmdgIHZhbHVlIHdoZW4gYGZvcm1hdCgpYFxuICAgICAgLy8gd2l0aG91dCBgcGFyc2UoKWAgaXMgdXNlZC5cbiAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpXG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSwgY29udGV4dClcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5JbnB1dEZpZWxkLmRpdG8tdGV4dChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICA6dHlwZT1cImlucHV0VHlwZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVGV4dE1peGluIGZyb20gJy4uL21peGlucy9UZXh0TWl4aW4nXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmNvbnN0IG1hc2tlZFBhc3N3b3JkID0gJyoqKioqKioqKioqKioqKionXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbXG4gICAgJ3RleHQnLFxuICAgICdlbWFpbCcsXG4gICAgJ3VybCcsXG4gICAgJ2hvc3RuYW1lJyxcbiAgICAnZG9tYWluJyxcbiAgICAndGVsJyxcbiAgICAncGFzc3dvcmQnLFxuICAgICdjcmVkaXRjYXJkJ1xuICBdLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbVGV4dE1peGluXSxcbiAgICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG4gICAgaWdub3JlTWlzc2luZ1ZhbHVlOiAoeyBzY2hlbWEgfSkgPT4gc2NoZW1hLnR5cGUgPT09ICdwYXNzd29yZCcsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgaW5wdXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNyZWRpdGNhcmQ6ICd0ZXh0JyxcbiAgICAgICAgICAgIGhvc3RuYW1lOiAndGV4dCcsXG4gICAgICAgICAgICBkb21haW46ICd0ZXh0J1xuICAgICAgICAgIH1bdGhpcy50eXBlXSB8fFxuICAgICAgICAgIHRoaXMudHlwZVxuICAgICAgICApXG4gICAgICB9LFxuXG4gICAgICBpbnB1dFZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy50eXBlID09PSAncGFzc3dvcmQnICYmXG4gICAgICAgICAgICB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICF0aGlzLmZvY3VzZWRcbiAgICAgICAgICApXG4gICAgICAgICAgICA/IG1hc2tlZFBhc3N3b3JkXG4gICAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgY29uc3QgcnVsZSA9IHtcbiAgICAgICAgICBlbWFpbDogJ2VtYWlsJyxcbiAgICAgICAgICB1cmw6ICd1cmwnLFxuICAgICAgICAgIGhvc3RuYW1lOiAnaG9zdG5hbWUnLFxuICAgICAgICAgIGRvbWFpbjogJ2RvbWFpbicsXG4gICAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZCcsXG4gICAgICAgICAgY3JlZGl0Y2FyZDogJ2NyZWRpdGNhcmQnXG4gICAgICAgIH1bdGhpcy50eXBlXVxuICAgICAgICByZXR1cm4gcnVsZSA/IHsgW3J1bGVdOiB0cnVlIH0gOiB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgOnJvd3M9XCJsaW5lc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tcmVzaXphYmxlJzogcmVzaXphYmxlIH1cIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1RleHRNaXhpbidcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndGV4dGFyZWEnLCB7XG4gIG1peGluczogW1RleHRNaXhpbl0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCA0XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10ZXh0YXJlYSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICByZXNpemU6IG5vbmU7XG4gIG1pbi1oZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpICsgI3syICogJGlucHV0LXBhZGRpbmctdmVyfSk7XG5cbiAgJi5kaXRvLXJlc2l6YWJsZSB7XG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmVlLWxpc3RcbiAgRGl0b1Njb3BlcyhcbiAgICB2LWlmPVwic2NvcGVzXCJcbiAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gIClcbiAgLmRpdG8tdHJlZS1wYW5lbFxuICAgIERpdG9UcmVlSXRlbShcbiAgICAgIDpzY2hlbWE9XCJ0cmVlU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInRyZWVEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOm9wZW49XCJ0cnVlXCJcbiAgICApXG4gICAgLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJoYXNFZGl0YWJsZUZvcm1zXCJcbiAgICApXG4gICAgICAvLy0gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICBSb3V0ZXJWaWV3XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7XG4gIGhhc0Zvcm1TY2hlbWEsXG4gIGdldEZvcm1TY2hlbWFzLFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ3RyZWUtbGlzdCcsICd0cmVlLW9iamVjdCddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gICAgcHJvdmlkZSgpIHtcbiAgICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gICAgfSxcblxuICAgIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgcGF0aCgpIHtcbiAgICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLnBhdGhgOlxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXRoXG4gICAgICB9LFxuXG4gICAgICBlZGl0UGF0aCgpIHtcbiAgICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLmVkaXRQYXRoYDpcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgICB9LFxuXG4gICAgICB0cmVlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB7IFt0aGlzLm5hbWVdOiB0aGlzLnZhbHVlIH1cbiAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVEYXRhUGF0aCgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBuYW1lYCBmcm9tIGBkYXRhUGF0aGAsIGFzIGl0IGlzIGFkZGVkXG4gICAgICAgIC8vIHRvIGB0cmVlRGF0YWAgYW5kIGB0cmVlU2NoZW1hYFxuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHRoaXMuZGF0YVBhdGguc2xpY2UoMCwgdGhpcy5kYXRhUGF0aC5sZW5ndGggLSB0aGlzLm5hbWUubGVuZ3RoKVxuICAgICAgICAgIDogdGhpcy5kYXRhUGF0aFxuICAgICAgfSxcblxuICAgICAgdHJlZVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuc2NoZW1hXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHRoaXMuc2NoZW1hXG4gICAgICB9LFxuXG4gICAgICBoYXNFZGl0YWJsZUZvcm1zKCkge1xuICAgICAgICBjb25zdCBoYXNFZGl0YWJsZUZvcm1zID0gc2NoZW1hID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmIChcbiAgICAgICAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZWRpdGFibGUnLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzY2hlbWFcbiAgICAgICAgICAgICAgfSkgfHxcbiAgICAgICAgICAgICAgc2NoZW1hLmNoaWxkcmVuICYmXG4gICAgICAgICAgICAgIGhhc0VkaXRhYmxlRm9ybXMoc2NoZW1hLmNoaWxkcmVuKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzRWRpdGFibGVGb3Jtcyh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG5hbWUsXG4gICAgICByb3V0ZXMsXG4gICAgICBsZXZlbCxcbiAgICAgIG5lc3RlZCA9IHRydWUsXG4gICAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgICBwcm9jZXNzID0gbnVsbFxuICAgICkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEucHJvcGVydGllcyksXG4gICAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgYXBpLFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgZmxhdHRlbixcbiAgICAgICAgICAvLyBQYXNzIHByb2Nlc3MoKSB0byBhZGQgbW9yZSByb3V0ZXMgdG8gY2hpbGRSb3V0ZXM6XG4gICAgICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgLy8gQWRkIGB0eXBlYCB0byB0aGUgbmVzdGVkIHRyZWUgbGlzdC5cbiAgICAgICAgICAgICAgY2hpbGRyZW4udHlwZSA9ICd0cmVlLWxpc3QnXG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNhbGwgYHByb2Nlc3NTY2hlbWEoKWAgZm9yIHRoZSBuZXN0ZWQgdHJlZSBsaXN0OlxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgICAgICAgIGFwaSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5uYW1lLFxuICAgICAgICAgICAgICAgIGNoaWxkUm91dGVzLFxuICAgICAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICAgICAgICB0cnVlLCAvLyBQYXNzIGB0cnVlYCBmb3IgYGZsYXR0ZW5gIGluIHRyZWUgbGlzdHMuXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdKVxuICAgIH0sXG5cbiAgICBnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3Npbmcoc2NoZW1hLCBjb250ZXh0KSB7XG4gICAgICAvLyBDb252ZXJ0IG5lc3RlZCBjaGlsZHJlbiBzY2hlbWEgdG8gc3RhbmQtYWxvbmUgc2NoZW1hIGNvbXBvbmVudCxcbiAgICAgIC8vIHByZXNlbnQgaW4gZWFjaCBvZiB0aGUgZm9ybXMsIGFzIHJlcXVpcmVkIGJ5IGBwcm9jZXNzU2NoZW1hRGF0YSgpYFxuICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXMoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgICA/IGZvcm0gPT4gKHtcbiAgICAgICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgICAgIC4uLmZvcm0uY29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICBbY2hpbGRyZW4ubmFtZV06IGNoaWxkcmVuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsXG4gICAgICApXG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmVlLWxpc3Qge1xuICBAZXh0ZW5kICVmaWVsZDtcblxuICAuZGl0by10cmVlLXBhbmVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgID4gLmRpdG8tdHJlZS1pdGVtIHtcbiAgICAgIGZsZXg6IDEgMSAyNSU7XG4gICAgfVxuXG4gICAgPiAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyIHtcbiAgICAgIGZsZXg6IDAgMSA3NSU7XG4gICAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDE7XG4gICAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmctdmVyKSAoLSRpbnB1dC1wYWRkaW5nLWhvcik7XG4gICAgICBtYXJnaW4tbGVmdDogJGlucHV0LXBhZGRpbmctaG9yO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGZpbGVzaXplIH0gZnJvbSAnZmlsZXNpemUnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGaWxlU2l6ZShzaXplKSB7XG4gIHJldHVybiBmaWxlc2l6ZShzaXplLCB7IGJhc2U6IDEwIH0pXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdXBsb2FkXG4gIC8vLSBJbiBvcmRlciB0byBoYW5kbGUgdXBsb2FkIGJ1dHRvbnMgaW4gbXVsdGlwbGUgcG9zc2libGUgcGxhY2VzLCBkZXBlbmRpbmdcbiAgLy8tIG9uIHdoZXRoZXIgdGhleSBoYW5kbGUgc2luZ2xlIG9yIG11bHRpcGxlIHVwbG9hZHMsIHJlbmRlciB0aGUgdXBsb2FkXG4gIC8vLSBjb21wb25lbnQgaW52aXNpYmx5IGF0IHRoZSByb290LCBhbmQgZGVsZWdhdGUgdGhlIGNsaWNrIGV2ZW50cyB0byBpdCBmcm9tXG4gIC8vLSB0aGUgYnV0dG9ucyByZW5kZXJlZCBmdXJ0aGVyIGJlbG93LiBMdWNraWx5IHRoaXMgd29ya3Mgc3VycHJpc2luZ2x5IHdlbGwuXG4gIFZ1ZVVwbG9hZC5kaXRvLXVwbG9hZF9faW5wdXQoXG4gICAgcmVmPVwidXBsb2FkXCJcbiAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgOmlucHV0SWQ9XCJkYXRhUGF0aFwiXG4gICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpwb3N0QWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICA6ZHJvcD1cIiRlbD8uY2xvc2VzdCgnLmRpdG8tY29udGFpbmVyJylcIlxuICAgIDpkcm9wRGlyZWN0b3J5PVwidHJ1ZVwiXG4gICAgQGlucHV0LWZpbHRlcj1cIm9uSW5wdXRGaWx0ZXJcIlxuICAgIEBpbnB1dC1maWxlPVwib25JbnB1dEZpbGVcIlxuICApXG4gIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gYERpdG9UYWJsZUhlYWRgXG4gICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICB0clxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gRmlsZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhblxuICAgIERpdG9EcmFnZ2FibGUoXG4gICAgICB2LW1vZGVsPVwiZmlsZXNcIlxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgOm9wdGlvbnM9XCJnZXREcmFnZ2FibGVPcHRpb25zKClcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJtdWx0aXBsZSB8fCAhaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICAgIDprZXk9XCJmaWxlLm5hbWVcIlxuICAgICAgICApXG4gICAgICAgICAgdGQoXG4gICAgICAgICAgICB2LWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlckZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgdGQoXG4gICAgICAgICAgICB2LWVsc2UtaWY9XCJkb3dubG9hZFVybHNbaW5kZXhdXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBhKFxuICAgICAgICAgICAgICA6ZG93bmxvYWQ9XCJmaWxlLm5hbWVcIlxuICAgICAgICAgICAgICA6aHJlZj1cImRvd25sb2FkVXJsc1tpbmRleF1cIlxuICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cIm9uQ2xpY2tEb3dubG9hZChmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBEaXRvVXBsb2FkRmlsZShcbiAgICAgICAgICAgICAgICA6ZmlsZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgIDp0aHVtYm5haWw9XCJ0aHVtYm5haWxzXCJcbiAgICAgICAgICAgICAgICA6dGh1bWJuYWlsVXJsPVwidGh1bWJuYWlsVXJsc1tpbmRleF1cIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgdGQoXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICApXG4gICAgICAgICAgICBEaXRvVXBsb2FkRmlsZShcbiAgICAgICAgICAgICAgOmZpbGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgOnRodW1ibmFpbD1cInRodW1ibmFpbHNcIlxuICAgICAgICAgICAgICA6dGh1bWJuYWlsVXJsPVwidGh1bWJuYWlsVXJsc1tpbmRleF1cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIHRkLmRpdG8tdXBsb2FkX19zaXplIHt7IGZvcm1hdEZpbGVTaXplKGZpbGUuc2l6ZSkgfX1cbiAgICAgICAgICB0ZC5kaXRvLXVwbG9hZF9fc3RhdHVzXG4gICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgdi1pZj1cImZpbGUudXBsb2FkXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgdi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHwgRXJyb3I6IHt7IGZpbGUudXBsb2FkLmVycm9yIH19XG4gICAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLmFjdGl2ZVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tdXBsb2FkKFxuICAgICAgICAgICAgICAgIHYtaWY9XCIhbXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIDp0aXRsZT1cInVwbG9hZFRpdGxlXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrVXBsb2FkXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgKVxuICAgIHRmb290KFxuICAgICAgdi1pZj1cIm11bHRpcGxlIHx8IGlzVXBsb2FkQWN0aXZlIHx8ICFoYXNGaWxlc1wiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICApIENhbmNlbFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tdXBsb2FkKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJtdWx0aXBsZSB8fCAhaGFzRmlsZXNcIlxuICAgICAgICAgICAgICAgIDp0aXRsZT1cInVwbG9hZFRpdGxlXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrVXBsb2FkXCJcbiAgICAgICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHBhcnNlRmlsZVNpemUgZnJvbSAnZmlsZXNpemUtcGFyc2VyJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vdXRpbHMvdW5pdHMuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBWdWVVcGxvYWQgZnJvbSAndnVlLXVwbG9hZC1jb21wb25lbnQnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndXBsb2FkJywge1xuICBtaXhpbnM6IFtTb3J0YWJsZU1peGluXSxcbiAgY29tcG9uZW50czogeyBWdWVVcGxvYWQgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHVwbG9hZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLnVwbG9hZFxuICAgIH0sXG5cbiAgICB1cGxvYWRUaXRsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlID8gJ1VwbG9hZCBGaWxlcycgOiAnVXBsb2FkIEZpbGUnXG4gICAgfSxcblxuICAgIGZpbGVzKCkge1xuICAgICAgcmV0dXJuIGFzRmlsZXModGhpcy52YWx1ZSlcbiAgICB9LFxuXG4gICAgZG93bmxvYWRVcmxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubWFwKChmaWxlLCBpbmRleCkgPT4gdGhpcy5nZXREb3dubG9hZFVybChmaWxlLCBpbmRleCkpXG4gICAgfSxcblxuICAgIHRodW1ibmFpbFVybHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWxlcy5tYXAoKGZpbGUsIGluZGV4KSA9PiB0aGlzLmdldFRodW1ibmFpbFVybChmaWxlLCBpbmRleCkpXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBObyBjYWxsYmFjayBhcyBpdCdzIHVzZWQgaW4gYHByb2Nlc3NWYWx1ZSgpYFxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBleHRlbnNpb25zOiBnZXRTY2hlbWFBY2Nlc3NvcignZXh0ZW5zaW9ucycsIHtcbiAgICAgIHR5cGU6IFtBcnJheSwgU3RyaW5nLCBSZWdFeHBdXG4gICAgfSksXG5cbiAgICBhY2NlcHQ6IGdldFNjaGVtYUFjY2Vzc29yKCdhY2NlcHQnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldChhY2NlcHQpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkoYWNjZXB0KSA/IGFjY2VwdC5qb2luKCcsJykgOiBhY2NlcHRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heFNpemU6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhTaXplJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGdldChtYXhTaXplKSB7XG4gICAgICAgIHJldHVybiBtYXhTaXplID8gcGFyc2VGaWxlU2l6ZShtYXhTaXplKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gZHJhZ2dhYmxlICYmIHRoaXMuZmlsZXMubGVuZ3RoID4gMVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIHRodW1ibmFpbHM6IGdldFNjaGVtYUFjY2Vzc29yKCd0aHVtYm5haWxzJywge1xuICAgICAgdHlwZTogW0Jvb2xlYW4sIFN0cmluZ10sXG4gICAgICBkZWZhdWx0KHRodW1ibmFpbHMpIHtcbiAgICAgICAgcmV0dXJuIHRodW1ibmFpbHMgPz8gISF0aGlzLnNjaGVtYS50aHVtYm5haWxVcmxcbiAgICAgIH0sXG4gICAgICBnZXQodGh1bWJuYWlscykge1xuICAgICAgICByZXR1cm4gdGh1bWJuYWlscyA9PT0gdHJ1ZSA/ICdtZWRpdW0nIDogdGh1bWJuYWlscyB8fCBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBoYXNGaWxlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVzLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgaGFzVXBsb2FkcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBpc1VwbG9hZFJlYWR5KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5oYXNVcGxvYWRzICYmXG4gICAgICAgICEodGhpcy51cGxvYWQuYWN0aXZlIHx8IHRoaXMudXBsb2FkLnVwbG9hZGVkKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1VwbG9hZEFjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc1VwbG9hZHMgJiYgdGhpcy51cGxvYWQuYWN0aXZlXG4gICAgfSxcblxuICAgIHVwbG9hZFByb2dyZXNzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51cGxvYWRzLnJlZHVjZSgodG90YWwsIGZpbGUpID0+IHRvdGFsICsgK2ZpbGUucHJvZ3Jlc3MsIDApIC9cbiAgICAgICAgdGhpcy51cGxvYWRzLmxlbmd0aFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB1cGxvYWRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VVcmwoe1xuICAgICAgICB0eXBlOiAndXBsb2FkJyxcbiAgICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICAgIHBhdGg6IHRoaXMuYXBpLm5vcm1hbGl6ZVBhdGgodGhpcy5kYXRhUGF0aClcbiAgICAgIH0pXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgaXNVcGxvYWRSZWFkeShyZWFkeSkge1xuICAgICAgaWYgKHJlYWR5KSB7XG4gICAgICAgIC8vIEF1dG8tdXBsb2FkLlxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGxvYWQuYWN0aXZlID0gdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9ybWF0RmlsZVNpemUsXG5cbiAgICBnZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGVcbiAgICAgICAgPyBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgdmFsdWU6IGZpbGUsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmZpbGVzLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB0aGlzLmNvbnRleHRcbiAgICB9LFxuXG4gICAgcmVuZGVyRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKHRoaXMuZ2V0RmlsZUNvbnRleHQoZmlsZSwgaW5kZXgpKVxuICAgIH0sXG5cbiAgICBnZXREb3dubG9hZFVybChmaWxlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIGZpbGUudXJsXG4gICAgICAgID8gZmlsZS51cmxcbiAgICAgICAgOiAhZmlsZS51cGxvYWQgfHwgZmlsZS51cGxvYWQuc3VjY2Vzc1xuICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZG93bmxvYWRVcmwnLCB7XG4gICAgICAgICAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgICAgICBjb250ZXh0OiB0aGlzLmdldEZpbGVDb250ZXh0KGZpbGUsIGluZGV4KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0VGh1bWJuYWlsVXJsKGZpbGUsIGluZGV4KSB7XG4gICAgICByZXR1cm4gIWZpbGUudXBsb2FkIHx8IGZpbGUudXBsb2FkLnN1Y2Nlc3NcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCd0aHVtYm5haWxVcmwnLCB7XG4gICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgICBjb250ZXh0OiB0aGlzLmdldEZpbGVDb250ZXh0KGZpbGUsIGluZGV4KVxuICAgICAgICAgIH0pIHx8IChcbiAgICAgICAgICAgIGZpbGUudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKVxuICAgICAgICAgICAgICA/IGZpbGUudXJsXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIClcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSB9ID0gZmlsZVxuXG4gICAgICBpZiAoXG4gICAgICAgIGZpbGUgJiZcbiAgICAgICAgd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMucmVtb3ZlfSAke25hbWV9P2BcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZS51cGxvYWQpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZC5yZW1vdmUoZmlsZS51cGxvYWQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogYCR7bmFtZX0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZpbGVJbmRleChmaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlXG4gICAgICAgID8gdGhpcy52YWx1ZS5maW5kSW5kZXgoaXQgPT4gaXQuaWQgPT09IGZpbGUuaWQpXG4gICAgICAgIDogLTFcbiAgICB9LFxuXG4gICAgYWRkRmlsZShmaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUucHVzaChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBbZmlsZV1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwbGFjZUZpbGUoZmlsZSwgbmV3RmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEZpbGVJbmRleChmaWxlKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGlmIChuZXdGaWxlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlW2luZGV4XSA9IG5ld0ZpbGVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3RmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZW1vdmVGaWxlKGZpbGUpIHtcbiAgICAgIHRoaXMucmVwbGFjZUZpbGUoZmlsZSwgbnVsbClcbiAgICB9LFxuXG4gICAgb25JbnB1dEZpbGUobmV3RmlsZSwgb2xkRmlsZSkge1xuICAgICAgaWYgKG5ld0ZpbGUgJiYgIW9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBpZCwgbmFtZSwgc2l6ZSB9ID0gbmV3RmlsZVxuICAgICAgICB0aGlzLmFkZEZpbGUoeyBpZCwgbmFtZSwgc2l6ZSwgdXBsb2FkOiBuZXdGaWxlIH0pXG4gICAgICB9XG4gICAgICBpZiAobmV3RmlsZSAmJiBvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgc3VjY2VzcywgZXJyb3IgfSA9IG5ld0ZpbGVcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgICBjb25zdCBmaWxlID0gbmV3RmlsZS5yZXNwb25zZVswXVxuICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnVwbG9hZCA9IG5ld0ZpbGVcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIHVwbG9hZCBmaWxlIG9iamVjdCB3aXRoIHRoZSBmaWxlIG9iamVjdCByZWNlaXZlZFxuICAgICAgICAgICAgLy8gZnJvbSB0aGUgdXBsb2FkIHJlc3BvbnNlLlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlRmlsZShuZXdGaWxlLCBmaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhYm9ydDogJ1VwbG9hZCBhYm9ydGVkJyxcbiAgICAgICAgICAgICAgZGVuaWVkOiAnVXBsb2FkIGRlbmllZCcsXG4gICAgICAgICAgICAgIGV4dGVuc2lvbjogYFVuc3VwcG9ydGVkIGZpbGUtdHlwZTogJHtuZXdGaWxlLm5hbWV9YCxcbiAgICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmsgZXJyb3IgZW5jb3VudGVyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICAgIHNlcnZlcjogJ1NlcnZlciBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgICAgc2l6ZTogYEZpbGUgaXMgdG9vIGxhcmdlOiAke2Zvcm1hdEZpbGVTaXplKG5ld0ZpbGUuc2l6ZSl9YCxcbiAgICAgICAgICAgICAgdGltZW91dDogJ1RpbWVvdXQgb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCdcbiAgICAgICAgICAgIH1bZXJyb3JdIHx8XG4gICAgICAgICAgICBgVW5rbm93biBGaWxlIFVwbG9hZCBFcnJvcjogJyR7ZXJyb3J9J2BcbiAgICAgICAgICApXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgdGl0bGU6ICdGaWxlIFVwbG9hZCBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbklucHV0RmlsdGVyKG5ld0ZpbGUgLyosIG9sZEZpbGUsIHByZXZlbnQgKi8pIHtcbiAgICAgIGNvbnN0IHhociA9IG5ld0ZpbGU/LnhoclxuICAgICAgaWYgKHRoaXMuYXBpLmNvcnM/LmNyZWRlbnRpYWxzICYmIHhociAmJiAheGhyLndpdGhDcmVkZW50aWFscykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrRG93bmxvYWQoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy5kb3dubG9hZFVybHNbaW5kZXhdKVxuICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgcmVzcG9uc2UuYmxvYigpXG4gICAgICAgIHRoaXMuZG93bmxvYWQoe1xuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgdXJsOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNsaWNrVXBsb2FkKGV2ZW50KSB7XG4gICAgICAvLyBEZWxlZ2F0ZSB0aGUgY2xpY2sgZXZlbnQgdG8gdGhlIGhpZGRlbiBmaWxlIGlucHV0LlxuICAgICAgdGhpcy51cGxvYWQuJGVsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IGV2ZW50LmNvbnN0cnVjdG9yKGV2ZW50LnR5cGUsIGV2ZW50KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoeyBzY2hlbWEsIHZhbHVlIH0pIHtcbiAgICAvLyBGaWx0ZXIgb3V0IGFsbCBuZXdseSBhZGRlZCBmaWxlcyB0aGF0IHdlcmVuJ3QgYWN0dWFsbHkgdXBsb2FkZWQuXG4gICAgY29uc3QgZmlsZXMgPSBhc0ZpbGVzKHZhbHVlKVxuICAgICAgLm1hcCgoeyB1cGxvYWQsIC4uLmZpbGUgfSkgPT4gKCF1cGxvYWQgfHwgdXBsb2FkLnN1Y2Nlc3MgPyBmaWxlIDogbnVsbCkpXG4gICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZSlcbiAgICByZXR1cm4gc2NoZW1hLm11bHRpcGxlID8gZmlsZXMgOiBmaWxlc1swXSB8fCBudWxsXG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzRmlsZXModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID8gYXNBcnJheSh2YWx1ZSkgOiBbXVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdXBsb2FkIHtcbiAgLmRpdG8tdGFibGUge1xuICAgIHRyLFxuICAgIC5kaXRvLWNlbGwtZWRpdC1idXR0b25zIHtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuICB9XG5cbiAgJl9fc2l6ZSxcbiAgJl9fc3RhdHVzIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgJiAmX19pbnB1dCB7XG4gICAgLy8gU2VlIGBvbkNsaWNrVXBsb2FkKClgIG1ldGhvZCBmb3IgZGV0YWlscy5cbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gICZfX2Zvb3RlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICAuZGl0by1wcm9ncmVzcyB7XG4gICAgICBmbGV4OiBhdXRvO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG1vdW50ZWQobm9kZSwgYmluZGluZykge1xuICAgIG9ic2VydmVSZXNpemUobm9kZSwgYmluZGluZy52YWx1ZSwgYmluZGluZy5hcmcpXG4gIH0sXG5cbiAgdW5tb3VudGVkKG5vZGUsIGJpbmRpbmcpIHtcbiAgICB1bm9ic2VydmVSZXNpemUobm9kZSwgYmluZGluZy52YWx1ZSwgYmluZGluZy5hcmcpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmVSZXNpemUobm9kZSwgaGFuZGxlciwgb3B0aW9ucykge1xuICBPYnNlcnZlci5nZXRPYnNlcnZlcihvcHRpb25zKS5vYnNlcnZlKG5vZGUsIGhhbmRsZXIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bm9ic2VydmVSZXNpemUobm9kZSwgaGFuZGxlciwgb3B0aW9ucykge1xuICBPYnNlcnZlci5nZXRPYnNlcnZlcihvcHRpb25zKS51bm9ic2VydmUobm9kZSwgaGFuZGxlcilcbn1cblxuZXhwb3J0IGNvbnN0IGlzUmVzaXplU3VwcG9ydGVkID0gdHlwZW9mIFJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJ1xuXG5jb25zdCBvYnNlcnZlcnMgPSB7fVxuXG5jbGFzcyBPYnNlcnZlciB7XG4gIGNvbnN0cnVjdG9yKGtleSwgb3B0aW9ucykge1xuICAgIHRoaXMua2V5ID0ga2V5XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMub2JzZXJ2ZXIgPSBpc1Jlc2l6ZVN1cHBvcnRlZFxuICAgICAgPyBuZXcgUmVzaXplT2JzZXJ2ZXIoZW50cmllcyA9PiB0aGlzLmhhbmRsZShlbnRyaWVzKSlcbiAgICAgIDogbnVsbFxuICAgIHRoaXMuaGFuZGxlcnNCeU5vZGUgPSBuZXcgV2Vha01hcCgpXG4gICAgdGhpcy5ub2RlQ291bnQgPSAwXG4gIH1cblxuICBvYnNlcnZlKG5vZGUsIGhhbmRsZXIpIHtcbiAgICBsZXQgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzQnlOb2RlLmdldChub2RlKVxuICAgIGlmICghaGFuZGxlcnMpIHtcbiAgICAgIGhhbmRsZXJzID0gbmV3IFNldCgpXG4gICAgICB0aGlzLmhhbmRsZXJzQnlOb2RlLnNldChub2RlLCBoYW5kbGVycylcbiAgICAgIHRoaXMub2JzZXJ2ZXI/Lm9ic2VydmUobm9kZSwgdGhpcy5vcHRpb25zKVxuICAgICAgdGhpcy5ub2RlQ291bnQrK1xuICAgIH1cbiAgICBoYW5kbGVycy5hZGQoaGFuZGxlcilcbiAgfVxuXG4gIHVub2JzZXJ2ZShub2RlLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzQnlOb2RlLmdldChub2RlKVxuICAgIGlmIChoYW5kbGVycz8uZGVsZXRlKGhhbmRsZXIpICYmIGhhbmRsZXJzLnNpemUgPT09IDApIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNCeU5vZGUuZGVsZXRlKG5vZGUpXG4gICAgICB0aGlzLm9ic2VydmVyPy51bm9ic2VydmUobm9kZSlcbiAgICAgIGlmICgtLXRoaXMubm9kZUNvdW50ID09PSAwKSB7XG4gICAgICAgIGRlbGV0ZSBvYnNlcnZlcnNbdGhpcy5rZXldXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlKGVudHJpZXMpIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc0J5Tm9kZS5nZXQoZW50cnkudGFyZ2V0KVxuICAgICAgaWYgKGhhbmRsZXJzKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICAgIHRhcmdldDogZW50cnkudGFyZ2V0LFxuICAgICAgICAgIGNvbnRlbnRSZWN0OiBlbnRyeS5jb250ZW50UmVjdCxcbiAgICAgICAgICAvLyBVc2UgYGFzQXJyYXlgIHNpbmNlIEZpcmVmb3ggYmVmb3JlIHY5MiByZXR1cm5zIHRoZXNlIGFzIG9iamVjdHM6XG4gICAgICAgICAgYm9yZGVyQm94U2l6ZTogYXNBcnJheShlbnRyeS5ib3JkZXJCb3hTaXplKSxcbiAgICAgICAgICBjb250ZW50Qm94U2l6ZTogYXNBcnJheShlbnRyeS5jb250ZW50Qm94U2l6ZSksXG4gICAgICAgICAgZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZTogYXNBcnJheShlbnRyeS5kZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplKVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykge1xuICAgICAgICAgIGhhbmRsZXIoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0T2JzZXJ2ZXIoeyBib3ggPSAnY29udGVudC1ib3gnIH0gPSB7fSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7IGJveCB9XG4gICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucylcbiAgICBvYnNlcnZlcnNba2V5XSB8fD0gbmV3IE9ic2VydmVyKGtleSwgb3B0aW9ucylcbiAgICByZXR1cm4gb2JzZXJ2ZXJzW2tleV1cbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgW1xuICAnY3JlYXRlJywgJ2NyZWF0ZWQnLFxuICAnc2F2ZScsICdzYXZlZCcsXG4gICdhcHBseScsICdhcHBsaWVkJyxcbiAgJ3N1Ym1pdCcsICdzdWJtaXR0ZWQnLFxuICAnZGVsZXRlJywgJ2RlbGV0ZWQnLFxuICAncmVtb3ZlJywgJ3JlbW92ZWQnLFxuICAnY2xlYXInLCAnY2xlYXJlZCcsXG4gICdlZGl0JywgJ2VkaXRlZCcsXG4gICdjbG9zZScsICdjbG9zZWQnLFxuICAnY2FuY2VsJywgJ2NhbmNlbGxlZCcsXG4gICdkcmFnJywgJ2RyYWdnZWQnLFxuICAnbG9naW4nLCAnbG9nZ2VkIGluJ1xuXS5yZWR1Y2UoKHZlcmJzLCB2ZXJiKSA9PiB7XG4gIHZlcmJzW3ZlcmJdID0gdmVyYlxuICByZXR1cm4gdmVyYnNcbn0sIHt9KVxuIiwiaW1wb3J0IHsgY3JlYXRlQXBwLCBoIGFzIGNyZWF0ZUVsZW1lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXIsIGNyZWF0ZVdlYkhpc3RvcnkgfSBmcm9tICd2dWUtcm91dGVyJ1xuaW1wb3J0IFZ1ZU5vdGlmaWNhdGlvbnMgZnJvbSAnQGt5dmcvdnVlMy1ub3RpZmljYXRpb24nXG5pbXBvcnQge1xuICBpc1N0cmluZyxcbiAgaXNBYnNvbHV0ZVVybCxcbiAgYXNzaWduRGVlcGx5LFxuICBoeXBoZW5hdGUsXG4gIGNhbWVsaXplLFxuICBkZWZhdWx0Rm9ybWF0cyxcbiAgZGVwcmVjYXRlXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyBjb21wb25lbnRzIGZyb20gJy4vY29tcG9uZW50cy9pbmRleC5qcydcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJy4vdHlwZXMvaW5kZXguanMnXG5pbXBvcnQgRGl0b1Jvb3QgZnJvbSAnLi9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSdcbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJlc2l6ZURpcmVjdGl2ZSBmcm9tICcuL2RpcmVjdGl2ZXMvcmVzaXplLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZm9ybWF0UXVlcnkgfSBmcm9tICcuL3V0aWxzL3JvdXRlLmpzJ1xuaW1wb3J0IHZlcmJzIGZyb20gJy4vdmVyYnMuanMnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9BZG1pbiB7XG4gIGNvbnN0cnVjdG9yKGVsLCB7XG4gICAgLy8gYGRpdG9gIGNvbnRhaW5zIHRoZSBiYXNlIGFuZCBhcGkgc2V0dGluZ3MgcGFzc2VkIGZyb20gYEFkbWluQ29udHJvbGxlcmBcbiAgICBkaXRvID0ge30sXG4gICAgYXBpLFxuICAgIHZpZXdzID0ge30sXG4gICAgLi4ub3B0aW9uc1xuICB9ID0ge30pIHtcbiAgICB0aGlzLmVsID0gZWxcbiAgICAvLyBNZXJnZSBpbiBgYXBpYCBzZXR0aW5ncyBhcyBwYXNzZWQgZnJvbSBgY29uZmlnLmFkbWluYCBhbmQgdGhyb3VnaCB0aGVcbiAgICAvLyBgQWRtaW5Db250cm9sbGVyYCB3aXRoIGBhcGlgIHZhbHVlcyBmcm9tIGZyb20gJ2FkbWluL2luZGV4LmpzJ1xuICAgIC8vIE5PVEU6IGBBZG1pbkNvbnRyb2xsZXJgIHByb3ZpZGVzIGBkaXRvLmFwaS5iYXNlYFxuICAgIHRoaXMuYXBpID0gYXBpID0gYXNzaWduRGVlcGx5KHsgYmFzZTogJy8nIH0sIGRpdG8uYXBpLCBhcGkpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuXG4gICAgLy8gU2V0dXAgZGVmYXVsdCBhcGkgc2V0dGluZ3M6XG4gICAgYXBpLmxvY2FsZSB8fD0gJ2VuLVVTJ1xuICAgIGFwaS5mb3JtYXRzID0gYXNzaWduRGVlcGx5KHt9LCBkZWZhdWx0Rm9ybWF0cywgYXBpLmZvcm1hdHMpXG4gICAgYXBpLnJlcXVlc3QgfHw9IG9wdGlvbnMgPT4gcmVxdWVzdChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmdldEFwaVVybCB8fD0gb3B0aW9ucyA9PiBnZXRBcGlVcmwoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5pc0FwaVVybCB8fD0gdXJsID0+IGlzQXBpVXJsKGFwaSwgdXJsKVxuICAgIC8vIFNldHRpbmcgYGFwaS5ub3JtYWxpemVQYXRocyA9IHRydWUgKHBsdXJhbCkgc2V0cyBib3RoOlxuICAgIC8vIGBhcGkubm9ybWFsaXplUGF0aCA9IGh5cGhlbmF0ZWAgYW5kIGBhcGkuZGVub3JtYWxpemVQYXRoID0gY2FtZWxpemVgXG4gICAgYXBpLm5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGh5cGhlbmF0ZSA6IHZhbCA9PiB2YWxcbiAgICBhcGkuZGVub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBjYW1lbGl6ZSA6IHZhbCA9PiB2YWxcblxuICAgIC8vIEFsbG93IGRlZmluaXRpb24gb2YgZGVmYXVsdHMgZm9yIGFkbWluIGNvbXBvbmVudCB0eXBlcywgbmVzdGVkIHBlciB0eXBlOlxuICAgIC8vIGFwaS5kZWZhdWx0cyA9IHtcbiAgICAvLyAgICdtdWx0aXNlbGVjdCc6IHtcbiAgICAvLyAgICAgc2VsZWN0YWJsZTogdHJ1ZVxuICAgIC8vICAgfSxcbiAgICAvLyAgICdmYWtlLXR5cGUnOiBzY2hlbWEgPT4ge1xuICAgIC8vICAgICAvLyBSZXR1cm4gZGVmYXVsdHMsIG9yIGRpcmVjdGx5IG1vZGlmeSB0aGUgc2NoZW1hOlxuICAgIC8vICAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwge1xuICAgIC8vICAgICAgIHR5cGU6ICdyZWFsLXR5cGUnLFxuICAgIC8vICAgICAgIGZvcm1hdDogKHsgdmFsdWUgfSkgPT4gYEZvcm1hdHRlZCAke3ZhbHVlfWAsXG4gICAgLy8gICAgICAgcHJvY2VzczogKHsgdmFsdWUgfSkgPT4gYFByb2Nlc3NlZCAke3ZhbHVlfWBcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkuZGVmYXVsdHMgfHw9IHt9XG5cbiAgICAvLyBBbGxvdyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbGwgYXV0aCByZXNvdXJjZXMsIGxpa2Ugc286XG4gICAgLy8gYXBpLnVzZXJzID0ge1xuICAgIC8vICAgcGF0aDogJy9hZG1pbnMnLFxuICAgIC8vICAgLy8gVGhlc2UgYXJlIHRoZSBkZWZhdWx0czpcbiAgICAvLyAgIGxvZ2luOiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dpbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgbG9nb3V0OiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dvdXQnLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIHNlc3Npb246IHtcbiAgICAvLyAgICAgcGF0aDogJ3Nlc3Npb24nLFxuICAgIC8vICAgICBtZXRob2Q6ICdnZXQnXG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIGNvbnN0IHVzZXJzID0gZ2V0UmVzb3VyY2UoYXBpLnVzZXJzLCB7XG4gICAgICB0eXBlOiAnY29sbGVjdGlvbidcbiAgICB9KSB8fCB7fVxuICAgIHVzZXJzLmxvZ2luID0gZ2V0UmVzb3VyY2UodXNlcnMubG9naW4gfHwgJ2xvZ2luJywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5sb2dvdXQgPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dvdXQgfHwgJ2xvZ291dCcsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMuc2Vzc2lvbiA9IGdldFJlc291cmNlKHVzZXJzLnNlc3Npb24gfHwgJ3Nlc3Npb24nLCB7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgYXBpLnVzZXJzID0gdXNlcnNcblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgb2YgcmVzb3VyY2UgcGF0aCBoYW5kbGVyczpcbiAgICAvLyBhcGkucmVzb3VyY2VzID0ge1xuICAgIC8vICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgIC8vICAgICByZXR1cm4gcmVzb3VyY2UucGFyZW50XG4gICAgLy8gICAgICAgPyBgJHtyZXNvdXJjZS5wYXRofT8ke3Jlc291cmNlLnBhcmVudC5wYXRofV9pZD0ke1xuICAgIC8vICAgICAgICAgIHJlc291cmNlLnBhcmVudC5pZH1gXG4gICAgLy8gICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgYXBpLnJlc291cmNlcyA9IHtcbiAgICAgIGFueShyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpc1tyZXNvdXJjZT8udHlwZV0gfHwgdGhpcy5kZWZhdWx0XG4gICAgICAgIHJldHVybiByZXNvdXJjZSAmJiBoYW5kbGVyLmNhbGwodGhpcywgcmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBkZWZhdWx0KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0aGlzLmFueShyZXNvdXJjZS5wYXJlbnQpXG4gICAgICAgIHJldHVybiBwYXJlbnRQYXRoXG4gICAgICAgICAgPyBgJHtwYXJlbnRQYXRofS8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgICAgfSxcblxuICAgICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0KHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgbWVtYmVyKHJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmRlZmF1bHQocmVzb3VyY2UpfS8ke3Jlc291cmNlLmlkfWBcbiAgICAgIH0sXG5cbiAgICAgIHVwbG9hZChyZXNvdXJjZSkge1xuICAgICAgICAvLyBEaXRvIFNlcnZlciBoYW5kbGVzIHVwbG9hZCByb3V0ZXMgb24gdGhlIGNvbGxlY3Rpb24gcmVzb3VyY2U6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbGxlY3Rpb24ocmVzb3VyY2UucGFyZW50KX0vdXBsb2FkLyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICB9LFxuXG4gICAgICAuLi5hcGkucmVzb3VyY2VzXG4gICAgfVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyAvIGV4dGVuZGluZyBvZiBoZWFkZXJzOlxuICAgIC8vIGFwaS5oZWFkZXJzID0ge1xuICAgIC8vICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIC8vIH1cbiAgICBhcGkuaGVhZGVycyA9IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAuLi5hcGkuaGVhZGVyc1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhlbCkpIHtcbiAgICAgIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbClcbiAgICB9XG5cbiAgICBjb25zdCBhcHAgPSAodGhpcy5hcHAgPSBjcmVhdGVBcHAoe1xuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBEaXRvUm9vdCxcbiAgICAgICAgVnVlTm90aWZpY2F0aW9ucyxcbiAgICAgICAgLy8gVGhpcyBtYXkgb25seSBiZSBuZWVkZWQgdG8gYXZvaWQgdHJlZS1zaGFja2luZyBvZiB0aGVzZSBjb21wb25lbnRzLFxuICAgICAgICAvLyBzaW5jZSB0aGV5IGFjdHVhbGx5IGhhbmRsZSByZWdpc3RyeSBpbnRlcm5hbGx5IGFscmVhZHkuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIG9uY2Ugd2UgaGF2ZSBhIGJldHRlciBzb2x1dGlvbi5cbiAgICAgICAgLi4uY29tcG9uZW50cyxcbiAgICAgICAgLi4udHlwZXNcbiAgICAgIH0sXG5cbiAgICAgIC8vIE1vc3QgaW5qZWN0cyBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlIHJlYWN0aXZlbmVzcyBhY3Jvc3NcbiAgICAgIC8vIHByb3ZpZGUvaW5qZWN0LCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICAgIHByb3ZpZGU6IHtcbiAgICAgICAgYXBpLFxuICAgICAgICAvLyBBIGRlZmF1bHQgbGlzdCBvZiB2ZXJicyBhcmUgcHJvdmlkZWQgYnkgJHZlcmJzKCkgYW5kIGNhbiBiZVxuICAgICAgICAvLyBvdmVycmlkZGVuIGF0IGFueSBwb2ludCBpbiB0aGUgY29tcG9uZW50IGhpZXJhcmNoeS5cbiAgICAgICAgJHZlcmJzOiAoKSA9PiB2ZXJicyxcbiAgICAgICAgLy8gUHJvdmlkZSBkZWZhdWx0cyBzbyBEaXRvTWl4aW4gY2FuIGluamVjdCB0aGVtIGZvciBhbGwgY29tcG9uZW50czpcbiAgICAgICAgLy8gICBpbmplY3Q6IFsgICckaXNQb3B1bGF0ZWQnLCAnJHNjaGVtYUNvbXBvbmVudCcsICckcm91dGVDb21wb25lbnQnIF1cbiAgICAgICAgJHZpZXdzOiAoKSA9PiB7fSxcbiAgICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0cnVlLFxuICAgICAgICAkcGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkYXRhQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICAgICAgfSxcblxuICAgICAgcmVuZGVyOiAoKSA9PlxuICAgICAgICBjcmVhdGVFbGVtZW50KERpdG9Sb290LCB7XG4gICAgICAgICAgcmVmOiAncm9vdCcsXG4gICAgICAgICAgY2xhc3M6IGRpdG8uc2V0dGluZ3Mucm9vdENsYXNzLFxuICAgICAgICAgIHVucmVzb2x2ZWRWaWV3czogdmlld3MsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICB9KVxuICAgIH0pKVxuXG4gICAgLy8gUHJldmVudCBlbmRsZXNzIGxvb3BzIG9mIGVycm9yIG1lc3NhZ2VzIGR1cmluZyByZW5kZXIgZnVuY3Rpb25zIGJ5XG4gICAgLy8gc2V0dGluZyBhIGN1c3RvbSBlcnJvciBoYW5kbGVyLlxuICAgIGFwcC5jb25maWcuZXJyb3JIYW5kbGVyID0gY29uc29sZS5lcnJvclxuXG4gICAgYXBwLnVzZShWdWVOb3RpZmljYXRpb25zLCB7XG4gICAgICBjb21wb25lbnROYW1lOiAnVnVlTm90aWZpY2F0aW9ucycsXG4gICAgICBuYW1lOiAnbm90aWZ5J1xuICAgIH0pXG5cbiAgICBhcHAuZGlyZWN0aXZlKCdyZXNpemUnLCBSZXNpemVEaXJlY3RpdmUpXG5cbiAgICBhcHAudXNlKFxuICAgICAgY3JlYXRlUm91dGVyKHtcbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIGNhdGNoLWFsbCByb3V0ZSwgdG8gYmUgcmVwbGFjZWQgYnkgdGhlIGFjdHVhbCByb3V0ZXNcbiAgICAgICAgLy8gb25jZSB0aGUgc2NoZW1hcyBhcmUgbG9hZGVkLCB0byBwcmV2ZW50IHZ1ZS1yb3V0ZXIgZnJvbSBjb21wbGFpbmluZyxcbiAgICAgICAgLy8gc2VlOiBgcmVzb2x2ZVZpZXdzKClgIGluIGBEaXRvUm9vdGAgZm9yIHRoZSBhY3R1YWwgcm91dGUgc2V0dXAuXG4gICAgICAgIHJvdXRlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdjYXRjaC1hbGwnLFxuICAgICAgICAgICAgcGF0aDogJy86XyguKiknLFxuICAgICAgICAgICAgY29tcG9uZW50czoge31cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGhpc3Rvcnk6IGNyZWF0ZVdlYkhpc3RvcnkoZGl0by5iYXNlKSxcbiAgICAgICAgbGlua0FjdGl2ZUNsYXNzOiAnJyxcbiAgICAgICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICcnXG4gICAgICB9KVxuICAgIClcblxuICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2RpdG8tYXBwJylcbiAgICBhcHAubW91bnQoZWwpXG4gIH1cblxuICByZWdpc3Rlcih0eXBlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgIHN1cGVyKFxuICAgICAgYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfSAoJHtcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzVGV4dFxuICAgICAgfSlgXG4gICAgKVxuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QoYXBpLCB7XG4gIHVybCxcbiAgbWV0aG9kID0gJ2dldCcsXG4gIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGBxdWVyeWAgb24gMjAyMi0xMS0wMSxcbiAgLy8gcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnkgbW9yZS5cbiAgcGFyYW1zID0gbnVsbCxcbiAgcXVlcnkgPSBwYXJhbXMgfHwgbnVsbCxcbiAgaGVhZGVycyA9IG51bGwsXG4gIGRhdGEgPSBudWxsLFxuICBzaWduYWwgPSBudWxsXG59KSB7XG4gIGlmIChwYXJhbXMpIHtcbiAgICBkZXByZWNhdGUoXG4gICAgICBgcmVxdWVzdC5wYXJhbXMgaXMgZGVwcmVjYXRlZC4gVXNlIGFjdGlvbi5tZXRob2QgYW5kIGFjdGlvbi5wYXRoIGluc3RlYWQuYFxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGlzQXBpVXJsID0gYXBpLmlzQXBpVXJsKHVybClcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5IH0pLCB7XG4gICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAuLi4oZGF0YSAmJiB7IGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpIH0pLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLihpc0FwaVVybCAmJiBhcGkuaGVhZGVycyksXG4gICAgICAuLi5oZWFkZXJzXG4gICAgfSxcbiAgICBjcmVkZW50aWFsczpcbiAgICAgIGlzQXBpVXJsICYmIGFwaS5jb3JzPy5jcmVkZW50aWFsc1xuICAgICAgICA/ICdpbmNsdWRlJ1xuICAgICAgICA6ICdzYW1lLW9yaWdpbicsXG4gICAgc2lnbmFsXG4gIH0pXG5cbiAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKT8uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgIHJlc3BvbnNlLmRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKHJlc3BvbnNlKVxuICB9XG4gIHJldHVybiByZXNwb25zZVxufVxuXG5mdW5jdGlvbiBpc0FwaVVybChhcGksIHVybCkge1xuICByZXR1cm4gIWlzQWJzb2x1dGVVcmwodXJsKSB8fCB1cmwuc3RhcnRzV2l0aChhcGkudXJsKVxufVxuXG5mdW5jdGlvbiBnZXRBcGlVcmwoYXBpLCB7IHVybCwgcXVlcnkgfSkge1xuICBpZiAoIXVybC5zdGFydHNXaXRoKGFwaS51cmwpICYmICFpc0Fic29sdXRlVXJsKHVybCkpIHtcbiAgICB1cmwgPSBjb21iaW5lVXJscyhhcGkudXJsLCB1cmwpXG4gIH1cbiAgLy8gU3VwcG9ydCBvcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzLCB0byBiZSBhcmUgYWRkZWQgdG8gdGhlIFVSTC5cbiAgY29uc3Qgc2VhcmNoID0gZm9ybWF0UXVlcnkocXVlcnkpXG4gIHJldHVybiBzZWFyY2ggPyBgJHt1cmx9JHt1cmwuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/J30ke3NlYXJjaH1gIDogdXJsXG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVVcmxzKGJhc2VVcmwsIHJlbGF0aXZlVXJsKSB7XG4gIC8vIFVzZSBzYW1lIGFwcHJvYWNoIGFzIGF4aW9zIGBjb21iaW5lVVJMcygpYCB0byBqb2luIGJhc2VVcmwgJiByZWxhdGl2ZVVybDpcbiAgcmV0dXJuIGAke2Jhc2VVcmwucmVwbGFjZSgvXFwvKyQvLCAnJyl9LyR7cmVsYXRpdmVVcmwucmVwbGFjZSgvXlxcLysvLCAnJyl9YFxufVxuIl0sIm5hbWVzIjpbInBhcnNlVXNlckFnZW50IiwidXNlckFnZW50IiwiYWdlbnQiLCJ1YSIsIm9zIiwicGxhdGZvcm0iLCJtYXRjaCIsImJyb3dzZXIiLCJ2MSIsInYyIiwicnYiLCJ2ZXJzaW9uIiwiYXBwU3RhdGUiLCJyZWFjdGl2ZSIsImFwcGVuZERhdGFQYXRoIiwiZGF0YVBhdGgiLCJ0b2tlbiIsInBhcnNlUGFyZW50RGF0YVBhdGgiLCJwYXRoIiwicGFyc2VEYXRhUGF0aCIsInBhcnNlSXRlbURhdGFQYXRoIiwibmVzdGVkIiwiZ2V0SXRlbURhdGFQYXRoIiwibm9ybWFsaXplRGF0YVBhdGgiLCJwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aCIsImlzSW50ZWdlciIsImdldFBhcmVudEl0ZW1EYXRhUGF0aCIsImdldEl0ZW0iLCJyb290SXRlbSIsImdldFZhbHVlQXREYXRhUGF0aCIsImdldFBhcmVudEl0ZW0iLCJnZXRMYXN0RGF0YVBhdGhUb2tlbiIsImdldExhc3REYXRhUGF0aE5hbWUiLCJnZXRMYXN0RGF0YVBhdGhJbmRleCIsImluZGV4IiwidGVtcG9yYXJ5SWQiLCJzZXRUZW1wb3JhcnlJZCIsImRhdGEiLCJpZEtleSIsImlzVGVtcG9yYXJ5SWQiLCJpZCIsImlzUmVmZXJlbmNlIiwiaGFzT3duUHJvcGVydHkiLCJjb250ZXh0cyIsInRvT2JqZWN0IiwiY29udGV4dCIsInJhd1N0YXJ0IiwidG9SYXciLCJyYXciLCJvYmplY3QiLCJnZXQiLCJrZXkiLCJkZWZhdWx0VmFsdWUiLCJ2YWx1ZSIsImlzRnVuY3Rpb24iLCJzZXQiLCJEaXRvQ29udGV4dCIsImNvbXBvbmVudCIsIml0ZW0iLCJvcHRpb25zIiwibG9jYXRpb24iLCJyZXNvdXJjZSIsIkVtaXR0ZXJNaXhpbiIsImV2ZW50IiwiY2FsbGJhY2siLCJpc0FycmF5IiwiZXYiLCJpc1BsYWluT2JqZWN0IiwibGlzdGVuZXJzIiwiY2FsbGJhY2tzIiwib24iLCJhcmdzIiwiZW50cnkiLCJfYSIsImNiIiwicXVldWUiLCJyZXNvbHZlIiwibmV4dCIsInJlc3VsdCIsInJlcyIsImVycm9yIiwidGFyZ2V0IiwiVmFsdWVNaXhpbiIsImNvbXB1dGVWYWx1ZSIsImZvcm1hdCIsInBhcnNlIiwiQ29udGV4dE1peGluIiwiZ2V0UHJvY2Vzc2VkUGFyZW50RGF0YSIsInNjaGVtYUNvbXBvbmVudCIsImNyZWRpdGNhcmQiLCJpc0NyZWRpdENhcmQiLCJkZWNpbWFscyIsImVtYWlsIiwiaXNFbWFpbCIsImhvc3RuYW1lIiwiaXNIb3N0bmFtZSIsImRvbWFpbiIsImlzRG9tYWluIiwiaW50ZWdlciIsIm1heCIsIm1pbiIsInBhc3N3b3JkIiwicmFuZ2UiLCJyZXF1aXJlZCIsInNldHRpbmdzIiwidXJsIiwiaXNVcmwiLCJWYWxpZGF0aW9uTWl4aW4iLCJub3RpZnkiLCJpc1ZhbGlkIiwicnVsZSIsInNldHRpbmciLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0b3JzIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiYWRkTGFiZWwiLCJlcnJvcnMiLCJmb2N1cyIsImdldFNjaGVtYUFjY2Vzc29yIiwia2V5T3JEYXRhUGF0aCIsInR5cGUiLCJkZWYiLCJpc1N0cmluZyIsIm5hbWUiLCJnZXRTdG9yZUFjY2Vzc29yIiwiVHlwZU1peGluIiwibm9kZSIsImNsZWFyYWJsZSIsImV2ZW50cyIsImNhbWVsaXplIiwibmF0aXZlRmllbGQiLCJ0ZXh0RmllbGQiLCJhdHRyaWJ1dGVzIiwidmFsaWRhdGlvbnMiLCJhZGQiLCJvbkZvY3VzIiwib25CbHVyIiwib25JbnB1dCIsIm9uQ2hhbmdlIiwiX2IiLCJlbGVtZW50IiwiYXNBcnJheSIsInVpZE1hcCIsInVpZCIsImdldFVpZCIsImdldEl0ZW1JZCIsIlNjaGVtYUdyYXBoIiwiX19wdWJsaWNGaWVsZCIsImRlZmF1bHRzIiwic3ViR3JhcGgiLCJwYXJ0Iiwic2NoZW1hIiwicmVsYXRlZERhdGFQYXRoIiwibmFub2lkIiwiZmxhdHRlbiIsImdyYXBoIiwiZW50cmllcyIsIiRzZXR0aW5ncyIsInN1YktleSIsInNvdXJjZVNjaGVtYSIsImNsaXBib2FyZCIsImludGVybmFsIiwicmVsYXRlZCIsInJlZmVyZW5jZSIsInNvdXJjZSIsInJlbGF0aW9uIiwidmFsdWVzIiwicmVtb3ZlSWQiLCJyZWZlcmVuY2VJZCIsInJlZktleSIsInJldlZhbHVlIiwidHlwZUNoZWNrZXJzIiwiaXNCb29sZWFuIiwiaXNOdW1iZXIiLCJpc0RhdGUiLCJpc09iamVjdCIsImlzUmVnRXhwIiwidG9Cb29sZWFuIiwidG9OdW1iZXIiLCJ0b1N0cmluZyIsInRvRGF0ZSIsInRvQXJyYXkiLCJ0b1JlZ0V4cCIsInR5cGVDb252ZXJ0ZXJzIiwiaXNNYXRjaGluZ1R5cGUiLCJ0eXBlcyIsImNvbnZlcnRUeXBlIiwiY29udmVydGVyIiwidHlwZUNvbXBvbmVudHMiLCJ1bmtub3duVHlwZVJlcG9ydGVkIiwiZW1wdHlTY2hlbWEiLCJyZWdpc3RlclR5cGVDb21wb25lbnQiLCJnZXRUeXBlQ29tcG9uZW50IiwiYWxsb3dOdWxsIiwiaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMiLCJzY2hlbWFzIiwiaXNTaW5nbGVDb21wb25lbnRWaWV3IiwiaXNTY2hlbWEiLCJpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyIsImdldFRhYlNjaGVtYXMiLCJmaW5kTmVzdGVkU2NoZW1hQ29tcG9uZW50Iiwic29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudCIsImhhc05lc3RlZFNjaGVtYUNvbXBvbmVudHMiLCJpc0Zvcm0iLCJpc1ZpZXciLCJpc1RhYiIsImlzUGFuZWwiLCJpc01lbnUiLCJnZXRTY2hlbWFJZGVudGlmaWVyIiwicmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZVNjaGVtYSIsInVud3JhcE1vZHVsZSIsImlzUHJvbWlzZSIsImlzTW9kdWxlIiwia2V5cyIsInJlc29sdmVTY2hlbWFzIiwidW5yZXNvbHZlZFNjaGVtYXMiLCJyZXNvbHZlSXRlbSIsIm1hcENvbmN1cnJlbnRseSIsInJlc29sdmVWaWV3cyIsInVucmVzb2x2ZWRWaWV3cyIsImZsYXR0ZW5WaWV3cyIsInZpZXdzIiwicmVzb2x2ZVNjaGVtYUNvbXBvbmVudCIsIm1hcmtSYXciLCJEaXRvTWl4aW4iLCJyZXNvbHZlU2NoZW1hQ29tcG9uZW50cyIsInByb2Nlc3NlZFNjaGVtYURlcHRocyIsInByb2Nlc3NTY2hlbWFDb21wb25lbnRzIiwiYXBpIiwicm91dGVzIiwibGV2ZWwiLCJtYXhEZXB0aCIsImRlcHRoIiwicHJvbWlzZXMiLCJwcm9jZXNzIiwicmVsYXRpdmVMZXZlbCIsInByb2Nlc3NTY2hlbWFDb21wb25lbnQiLCJnZXRQYW5lbFNjaGVtYXMiLCJwcm9jZXNzU2NoZW1hRGVmYXVsdHMiLCJwYW5lbCIsImdldFR5cGVPcHRpb25zIiwicHJvY2Vzc1ZpZXciLCJmdWxsUGF0aCIsInByb2Nlc3NSb3V0ZVNjaGVtYSIsImNoaWxkcmVuIiwicHJvY2Vzc05lc3RlZFNjaGVtYXMiLCJhc3NpZ25EZWVwbHkiLCJwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMiLCJmb3JtcyIsImdldEZvcm1TY2hlbWFzIiwiZm9ybSIsInByb2Nlc3NGb3JtcyIsImNvbXBvbmVudHMiLCJwcm9jZXNzRm9ybSIsInByb2Nlc3NUYWIiLCJwcm9jZXNzUGFuZWwiLCJ0YWJzIiwicGFuZWxzIiwidGFiIiwiaGFzRm9ybVNjaGVtYSIsImhhc011bHRpcGxlRm9ybVNjaGVtYXMiLCJnZXRWaWV3Rm9ybVNjaGVtYSIsInZpZXciLCJ2aWV3U2NoZW1hIiwiZ2V0Vmlld1NjaGVtYSIsImhhc1ZpZXdTY2hlbWEiLCJnZXRWaWV3RWRpdFBhdGgiLCJtb2RpZnlGb3JtIiwiY29tcGFjdCIsImdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zIiwiZ2V0SXRlbUZvcm1TY2hlbWEiLCJpc0VtcHR5U2NoZW1hIiwiaXNDb21wYWN0IiwiaXNJbmxpbmVkIiwiaXNOZXN0ZWQiLCJoYXNMYWJlbCIsImdlbmVyYXRlTGFiZWxzIiwibGFiZWwiLCJvbWl0U3BhY2luZyIsImdldFNjaGVtYVZhbHVlIiwiY29udmVydGVkIiwic2hvdWxkUmVuZGVyU2NoZW1hIiwiZ2V0Q29udGV4dCIsImdldERlZmF1bHRWYWx1ZSIsImNsb25lIiwic2hvdWxkRXhjbHVkZVZhbHVlIiwiZXhjbHVkZVZhbHVlIiwic2hvdWxkSWdub3JlTWlzc2luZ1ZhbHVlIiwic2V0RGVmYXVsdFZhbHVlcyIsInByb2Nlc3NTY2hlbWFEYXRhIiwicm9vdERhdGEiLCJjb21wdXRlIiwiY2xvbmVJdGVtIiwiY29weSIsIm9yZGVyS2V5IiwicHJvY2Vzc0RhdGEiLCJzY2hlbWFPbmx5IiwicHJvY2Vzc2VkRGF0YSIsIndyYXBQcmltaXRpdmVzIiwiYSIsImIiLCJpZDEiLCJpZDIiLCJwcm9jZXNzVmFsdWUiLCJwcm9jZXNzQmVmb3JlIiwicHJvY2Vzc0FmdGVyIiwicHJvY2Vzc0NvbXBvbmVudHMiLCJnZXREYXRhUGF0aCIsImNvbXBvbmVudFNjaGVtYSIsImNvbXBvbmVudERhdGFQYXRoIiwicHJvY2Vzc0l0ZW0iLCJpdGVtRGF0YVBhdGgiLCJwcm9jZXNzZWRJdGVtIiwiZ2V0TmFtZWRTY2hlbWFzIiwiYXJyYXkiLCJ0b1NjaGVtYSIsImdldEJ1dHRvblNjaGVtYXMiLCJidXR0b25zIiwiZ2V0VHlwZSIsInNjaGVtYU9yVHlwZSIsImdldFNvdXJjZVR5cGUiLCJnZXRQYW5lbEVudHJ5IiwidGFiQ29tcG9uZW50IiwiZ2V0UGFuZWxFbnRyaWVzIiwicGFuZWxTY2hlbWFzIiwicGFuZWxFbnRyaWVzIiwiZ2V0QWxsUGFuZWxFbnRyaWVzIiwicGFuZWxTY2hlbWEiLCJpc09iamVjdFNvdXJjZSIsImlzTGlzdFNvdXJjZSIsImdldEl0ZW1VaWQiLCJoYXNSZXNvdXJjZSIsImdldFJlc291cmNlIiwicGFyZW50IiwiZGVmcyIsImdldE1lbWJlclJlc291cmNlIiwicGlja0J5Iiwic2VsZiIsImdldFBhcmVudENvbXBvbmVudCIsIm5leHRVaWQiLCJsYWJlbGl6ZSIsInN0b3JlIiwib2xkS2V5IiwidmVyYiIsInF1ZXJ5IiwibWV0aG9kIiwic2lnbmFsIiwiY2hlY2tVc2VyIiwicmVzcG9uc2UiLCJlcXVhbHMiLCJjYWNoZSIsImNhY2hlUGFyZW50IiwibG9hZENhY2hlIiwiY2FjaGVLZXkiLCJsb2NhbGUiLCJib2R5IiwiZ2V0Q29tcHV0ZWRBY2Nlc3NvciIsImdldHRlciIsImNvbXB1dGVkIiwiYWNjZXNzb3IiLCJ3YXRjaCIsImhhbmRsZXJzIiwiZXhwciIsImFkZEV2ZW50IiwiaHlwaGVuYXRlIiwiaGFzTGlzdGVuZXJzIiwicGFyZW50SGFzTGlzdGVuZXJzIiwiZW1pdEV2ZW50IiwiaGFuZGxlUGFyZW50TGlzdGVuZXJzIiwiaGFuZGxlTGlzdGVuZXJzIiwicGFyYW1zIiwiY3VycmVudCIsInJlc29sdmVNZXJnZWRPcHRpb25zIiwibWl4aW5zIiwibWVyZ2VPcHRpb25zIiwidG8iLCJmcm9tIiwibWl4aW4iLCJkaXRvT3B0aW9uS2V5cyIsIkRpdG9Db21wb25lbnQiLCJkZWZpbml0aW9uIiwiZGVzY3JpYmVEYXRlIiwiZGF0ZSIsImFsdGVyRGF0ZSIsIm92ZXJyaWRlcyIsInBhcnNlRGF0ZSIsInN0cmluZyIsInRpbWUiLCJ0aW1lRGVmYXVsdCIsImRheSIsInNlcDEiLCJtb250aCIsInNlcDIiLCJ5ZWFyIiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwiZ2V0RGF0ZVBhcnRzIiwiZ2V0TW9udGhJbmRleCIsImlzVmFsaWRUaW1lUGFydCIsImdldERhdGVQYXJ0QXRQb3NpdGlvbiIsInBvc2l0aW9uIiwicGFydHMiLCJnZXRQb3NpdGlvbiIsImxlbmd0aCIsInBvcyIsIm9mZnNldCIsImlzVVMiLCJzdGFydCIsImVuZCIsInNob3J0Rm9ybWF0IiwibG9uZ0Zvcm1hdCIsImkiLCJfc2ZjX21haW4iLCJ3ZWVrZGF5TmFtZXMiLCJtb250aE5hbWVzIiwiZ2V0TG9jYWxlTmFtZXMiLCJtb2RlIiwidXBkYXRlIiwic3RlcCIsImN1cnJlbnRWYWx1ZSIsImVudGVyIiwic3RhcnRZZWFyIiwiZmlyc3REYXlXZWVrIiwibnVtRGF5cyIsInByZXZNb250aCIsInByZXZNb250aE51bURheXMiLCJub3ciLCJpc0RheSIsInN0YXRlIiwibmV4dE1vbnRoTmVlZCIsIm5leHRNb250aCIsImxvY2FsZU5hbWVzIiwibmFtZXMiLCJhZGRFdmVudHMiLCJ0YXJnZXRzIiwiaGFuZGxlciIsImNvbWJpbmVFdmVudHMiLCJnZXRLZXkiLCJnZXRLZXlOYXZpZ2F0aW9uIiwiZ2V0VGFyZ2V0IiwiY2xhc3NlcyIsInNob3ciLCJ0cmlnZ2VyIiwicG9wdXAiLCJfYyIsImVsIiwiYm91bmRzIiwidHJpZ2dlckxlZnQiLCJ0cmlnZ2VyVG9wIiwidHJpZ2dlcldpZHRoIiwidHJpZ2dlckhlaWdodCIsInBvcHVwV2lkdGgiLCJwb3B1cEhlaWdodCIsInBhcnQxIiwicGFydDIiLCJ3aW5XaWR0aCIsIndpbkhlaWdodCIsImxlZnQiLCJ0b3AiLCJ0cmlnZ2VyQm91bmRzIiwiaW5wdXQiLCJfIiwic2l6ZSIsImdldExlbmd0aCIsIl9vcGVuQmxvY2siLCJfY3JlYXRlRWxlbWVudEJsb2NrIiwic2V0U2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwiVHJpZ2dlciIsIkNhbGVuZGFyIiwiSW5wdXRGaWVsZCIsIkljb24iLCJkZWZhdWx0Rm9ybWF0cyIsImdldERhdGVQYXJ0IiwiY2FsZW5kYXIiLCJ0b2dnbGUiLCJzZWxlY3Rpb24iLCJzbW9vdGgiLCJzY3JvbGwiLCJyZWYiLCJsaW5lSGVpZ2h0IiwiZGlzdGFuY2UiLCJjb3VudCIsImlzRGlnaXQiLCJjaGFyIiwiRGF0ZVBpY2tlciIsIlRpbWVQaWNrZXIiLCJ0cmFuc2l0aW9uIiwiZGlzYWJsZWQiLCJ0ZXh0Iiwic2hvd1ByZXYiLCJzaG93TmV4dCIsImN1cnJlbnRQYWdlIiwibnVtUGFnZXMiLCJzaG93TGVuZ3RoIiwicGFnZSIsImJ1dHRvbiIsImNoZWNrZWQiLCJ1bmNoZWNrZWQiLCJtb2RlbFZhbHVlIiwiVHJhbnNpdGlvbkhlaWdodCIsImVuYWJsZWQiLCJzbG90cyIsImNyZWF0ZUVsZW1lbnQiLCJUcmFuc2l0aW9uIiwicHJvcHMiLCJzZXRTdHlsZSIsInN0eWxlIiwibmV4dFRpbWVvdXQiLCJmb3JjZVJlcGFpbnQiLCJ3aWR0aCIsImhlaWdodCIsImhhc1ZOb2RlQ29udGVudCIsInZub2RlIiwiQ29tbWVudCIsImhhc1Nsb3RDb250ZW50Iiwic2xvdCIsInVzZVNsb3RzIiwiRG9tTWl4aW4iLCJyZW1vdmUiLCJEaXRvVXNlciIsInJvbGVzIiwicm9sZSIsIlNjaGVtYVBhcmVudE1peGluIiwic2NoZW1hQ29tcG9uZW50cyIsIlZhbGlkYXRvck1peGluIiwiaXQiLCJmaXJzdCIsIlJvdXRlTWl4aW4iLCJyb3V0ZUNvbXBvbmVudCIsIm1hdGNoZWQiLCJyZWNvcmQiLCJicmVhZGNydW1iIiwicm91dGVDb21wb25lbnRzIiwib2siLCJyZWNvcmRQYXRoIiwicm9vdFBhdGgiLCJnZXRDb21tb25QcmVmaXgiLCJpc0xvYWRpbmciLCJVc2VGb2N1c1RyYXAiLCJkZWZpbmVDb21wb25lbnQiLCJ0cmFwIiwiYWN0aXZhdGUiLCJkZWFjdGl2YXRlIiwidW5yZWZFbGVtZW50IiwiY3JlYXRlRm9jdXNUcmFwIiwib25TY29wZURpc3Bvc2UiLCJoIiwiZGlhbG9nRGF0YSIsIkRpdG9EaWFsb2ciLCJwcmVmaXgiLCJ0aXBweURlbGVnYXRlIiwiaW5zdGFuY2UiLCJlcnIiLCJkcmFnQ291bnQiLCJ1cGxvYWRzIiwidG9nZ2xlRHJvcFRhcmdldENsYXNzIiwidXBsb2FkIiwic2V0RHJhZ2dpbmdGaWxlcyIsImhhc1VwbG9hZHMiLCJjYW5Ecm9wIiwidGl0bGUiLCJyZWplY3QiLCJkaWFsb2dJZCIsImFkZGl0aW9uYWxDb21wb25lbnRzIiwicmVkaXJlY3RBZnRlckxvZ2luIiwibG9naW5EYXRhIiwidXNlciIsIkRpdG9WaWV3IiwiYWRkUm91dGVzIiwicm91dGVyIiwicmVtb3ZlcnMiLCJyb3V0ZSIsInN1Yk1lbnVDbGFzcyIsImZpcnN0Q2hpbGQiLCJsb2ciLCJzdHJpcFRhZ3MiLCJub3RpZmljYXRpb25zIiwiZHVyYXRpb25GYWN0b3IiLCJkdXJhdGlvbiIsIlB1bGxkb3duTWl4aW4iLCJzdGFydFRpbWUiLCJvcGVuIiwiY29udGVudCIsImFzT2JqZWN0IiwiSXRlbU1peGluIiwiaXRlbUlkIiwiZXh0ZW5kZWQiLCJpdGVtTGFiZWwiLCJmb3JtTGFiZWwiLCJnZXRGb3JtTGFiZWwiLCJzdWZmaXgiLCJjb2x1bW5zIiwiaGFkTGFiZWwiLCJkZWZhdWx0VGFiIiwicm91dGVUYWIiLCJuZXdUYWIiLCJvbGRUYWIiLCJkYXRhUGF0aE9yTmFtZSIsInNjcm9sbENvbnRhaW5lciIsImRpc3BhdGNoIiwiY29tcG9uZW50c0J5RGF0YVBhdGgiLCJkYXRhUGF0aHMiLCJjaGVjayIsImZpZWxkIiwidW5tYXRjaGVkIiwid2FzRmlyc3QiLCJlcnJzIiwiZnVsbERhdGFQYXRoIiwiZGF0YVBhdGhQYXJ0cyIsImZvdW5kIiwicHJvcGVydHkiLCJzdWJDb21wb25lbnRzIiwibG9jYWxEYXRhIiwiZm9yZWlnbkRhdGEiLCJwYW5lIiwicmVnaXN0cnkiLCJlbnRyaWVzQnlEYXRhUGF0aCIsIl93aXRoRGlyZWN0aXZlcyIsIl9GcmFnbWVudCIsIl9yZW5kZXJMaXN0IiwiX2N0eCIsIl9ob2lzdGVkXzEiLCJfY3JlYXRlQmxvY2siLCJfY29tcG9uZW50X0RpdG9Db250YWluZXIiLCJuZXN0ZWREYXRhUGF0aCIsIl9ob2lzdGVkXzIiLCJwb3NpdGlvbnMiLCJpc0xhc3RJblJvdyIsImZpbmROZXh0UG9zaXRpb24iLCJyb3dzIiwicm93IiwidmVydGljYWxMYWJlbHNCeUluZGljZXMiLCJoYXNMYWJlbHNJblJvdyIsImNvbnRhaW5lciIsInBhZGRpbmciLCJmb250U2l6ZSIsInBhcnNlRnJhY3Rpb24iLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJhY2N1bXVsYXRlZEJhc2lzIiwiZmxleEJhc2lzIiwiY29tYmluZWRCYXNpcyIsImNhcGl0YWxpemUiLCJjbGlwYm9hcmREYXRhIiwicGFzdGUiLCIkc2NoZW1hIiwicmVwb3J0IiwianNvbiIsImRlaW5kZW50IiwiTG9hZGluZ01peGluIiwidXBkYXRlUm9vdCIsInVwZGF0ZVZpZXciLCJSZXNvdXJjZU1peGluIiwiYW1vdW50IiwiY2hpbGQiLCJ2ZXJicyIsImNsZWFyIiwibG9hZGluZ09wdGlvbnMiLCJjb250cm9sbGVyIiwicmVxdWVzdCIsInNldERhdGEiLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwibm90aWZ5U3VjY2VzcyIsIm5vdGlmeUVycm9yIiwicGFyZW50TWV0YSIsInJlc29sdmVQYXRoIiwiaXNDcmVhdGluZyIsInByb3ZpZGVzRGF0YSIsImRhdGFQYXJ0cyIsInBhdGhQYXJ0cyIsInJvdXRlUGFydHMiLCJsYXN0RGF0YVBhcnQiLCJsIiwiZGF0YVBhcnQiLCJwYXJhbSIsIm1haW5TY2hlbWFDb21wb25lbnQiLCJwcmVzZW50IiwiY2xvc2VGb3JtIiwiZ2V0VmVyYiIsImJ1dHRvblJlc291cmNlIiwic3VjY2VzcyIsIl9yZXNvdXJjZSIsIl9tZXRob2QiLCJEaXRvRm9ybSIsInRpcCIsInRpcHB5Iiwic2NvcGUiLCJQYWdpbmF0aW9uIiwiU29ydGFibGVNaXhpbiIsImZvcmNlRmFsbGJhY2siLCJvbGRJbmRleCIsIm5ld0luZGV4IiwibGlzdCIsInBhZ2luYXRpb25SYW5nZSIsIl9ub3JtYWxpemVTdHlsZSIsIl9jYWNoZSIsIl93aXRoTW9kaWZpZXJzIiwiJGV2ZW50IiwiX25vcm1hbGl6ZUNsYXNzIiwiX2NyZWF0ZUVsZW1lbnRWTm9kZSIsIl9ob2lzdGVkXzQiLCJfdG9EaXNwbGF5U3RyaW5nIiwiX2hvaXN0ZWRfNSIsIl9ob2lzdGVkXzciLCJfbWVyZ2VQcm9wcyIsIl9ob2lzdGVkXzgiLCJfY29tcG9uZW50X0RpdG9MYWJlbCIsIl9jcmVhdGVWTm9kZSIsIl9jb21wb25lbnRfRGl0b1RhYmxlQ2VsbCIsIl9jb21wb25lbnRfRGl0b0RyYWdnYWJsZSIsIl9jb21wb25lbnRfRGl0b1RyZWVJdGVtIiwiY2hpbGRyZW5TY2hlbWEiLCJjaGlsZHJlbkxpc3QiLCJlZGl0UGF0aCIsImNoaWxkcmVuT3BlbiIsIm51bUNoaWxkcmVuIiwiY3JlYXRhYmxlIiwiZWRpdGFibGUiLCJvcmRlciIsImNvbHVtbiIsInJlbmRlciIsImVzY2FwZUh0bWwiLCJUWVBFUyIsImZpbGUiLCJyZWFkZXIiLCJ1c2VTb3J0YWJsZSIsInNvcnRhYmxlIiwiZG9jdW1lbnQiLCJkZWZhdWx0RG9jdW1lbnQiLCJyZXNldE9wdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsImUiLCJtb3ZlQXJyYXlFbGVtZW50IiwiU29ydGFibGUiLCJzdG9wIiwib3B0aW9uIiwidHJ5T25Nb3VudGVkIiwidHJ5T25TY29wZURpc3Bvc2UiLCJpbnNlcnROb2RlQXQiLCJwYXJlbnRFbGVtZW50IiwicmVmRWxlbWVudCIsInJlbW92ZU5vZGUiLCJfdmFsdWVJc1JlZiIsImlzUmVmIiwidG9WYWx1ZSIsIm5leHRUaWNrIiwiVXNlU29ydGFibGUiLCJ1c2VWTW9kZWwiLCJEaXRvVk5vZGUiLCJEaXRvVHlwZUNvbXBvbmVudCQxIiwiRGl0b1R5cGVDb21wb25lbnQiLCJvbkNsaWNrIiwiRGF0YU1peGluIiwiYXN5bmNFbnRyeSIsInJlc29sdmVkRGF0YSIsImxvYWQiLCJjbGVhckxvYWRpbmciLCJ0aW1lciIsIk9wdGlvbnNNaXhpbiIsImNvbnZlcnRWYWx1ZSIsInZhbCIsInNlYXJjaCIsImZpbHRlciIsImRlYm91bmNlIiwiZGVib3VuY2VBc3luYyIsImdyb3VwZWQiLCJyZXN1bHRzIiwiZ3JvdXAiLCJmaW5kT3B0aW9uIiwiZ3JvdXBCeSIsIm9wdGlvblZhbHVlIiwib3B0aW9uTGFiZWwiLCJwcm9jZXNzUmVsYXRlIiwiZmxhc2siLCJDb2RlRmxhc2siLCJjaGFuZ2VkIiwiaWdub3JlV2F0Y2giLCJpZ25vcmVVcGRhdGUiLCJzZXRDb2RlIiwiY29kZSIsInNldFZhbHVlIiwibGFuZ3VhZ2UiLCJnZXRQb2ludCIsIngiLCJ5IiwicHJldlkiLCJtb3VzZW1vdmUiLCJoZXgiLCJTa2V0Y2hQaWNrZXIiLCJjb252ZXJ0Q29sb3IiLCJjb2xvciIsInRpbnljb2xvciIsImNvbnZlcnRlZFZhbHVlIiwiY2FuVXBkYXRlVmFsdWUiLCJ0b1Z1ZTNDb2xvckZvcm1hdCIsInRvVGlueUNvbG9yRm9ybWF0IiwiRGF0ZVRpbWVQaWNrZXIiLCJmb3JtYXRzIiwiZm9ybWF0UXVlcnkiLCJyZXBsYWNlUm91dGUiLCJoYXNoIiwiU291cmNlTWl4aW4iLCJkZWZhdWx0U29ydCIsImRpcmVjdGlvbiIsImRyYWdnYWJsZSIsImNvbGxhcHNpYmxlIiwiY29sbGFwc2VkIiwicmVtb3ZlZCIsImxpc3REYXRhIiwib25Db21wbGV0ZSIsIm9wZW5lZCIsImNhbGxPbkNvbXBsZXRlIiwiaW5saW5lZCIsIm1ldGEiLCJmb3JtTWV0YSIsImNoaWxkUm91dGVzIiwic291cmNlUGF0aCIsImZvcm1Sb3V0ZSIsImdldFBhdGhXaXRoUGFyYW0iLCJmbGF0Um91dGVzIiwic3ViUm91dGVzIiwiY2hpbGRSb3V0ZSIsImZpbHRlckNvbXBvbmVudHMiLCJkYXRldGltZSIsImNyZWF0ZUZpbHRlcnNQYW5lbCIsImZpbHRlcnMiLCJzdGlja3kiLCJmaWx0ZXJTY2hlbWFzIiwicGFyc2VGaWx0ZXJzRGF0YSIsImNyZWF0ZUZpbHRlcnNDb21wb25lbnRzIiwiY3JlYXRlRmlsdGVyc0J1dHRvbnMiLCJmb3JtYXRGaWx0ZXJzRGF0YSIsInNtYWxsIiwiZ2V0RGF0YU5hbWUiLCJmaWx0ZXJOYW1lIiwiZ2V0RmlsdGVyTmFtZSIsImRhdGFOYW1lIiwiY29tcHMiLCJnZXRDb21wb25lbnRzRm9yRmlsdGVyIiwiZmlsdGVyc0RhdGEiLCJfY29tcG9uZW50X0RpdG9UYWJsZUhlYWQiLCJfY29tcG9uZW50X0RpdG9TY2hlbWFJbmxpbmVkIiwiX3Jlc29sdmVEeW5hbWljQ29tcG9uZW50IiwiX2NvbXBvbmVudF9EaXRvRWRpdEJ1dHRvbnMiLCJfaG9pc3RlZF85Iiwib2JqIiwiZmlsdGVyc0RhdGFQYXRoIiwiRWRpdG9yQ29udGVudCIsImVkaXRvciIsImVuYWJsZVJ1bGVzIiwidXBkYXRlVmFsdWUiLCJvblVwZGF0ZSIsInNldFZhbHVlRGVib3VuY2VkIiwiRWRpdG9yIiwiZGlhbG9nQ29tcG9uZW50IiwiZ2V0TWFya0F0dHJpYnV0ZXMiLCJocmVmIiwibWFya3MiLCJub2RlcyIsInRvb2xzIiwiRG9jdW1lbnQiLCJUZXh0IiwiUGFyYWdyYXBoIiwiQm9sZCIsIkl0YWxpYyIsIlVuZGVybGluZSIsIlN0cmlrZSIsIlNtYWxsIiwiQ29kZSIsIlN1cGVyc2NyaXB0IiwiU3Vic2NyaXB0IiwiTGlua1dpdGhUaXRsZSIsIkJsb2NrcXVvdGUiLCJDb2RlQmxvY2siLCJIZWFkaW5nIiwiSG9yaXpvbnRhbFJ1bGUiLCJMaXN0SXRlbSIsIkJ1bGxldExpc3QiLCJPcmRlcmVkTGlzdCIsIkZvb3Rub3RlcyIsIkZvb3Rub3RlIiwiRm9vdG5vdGVSZWZlcmVuY2UiLCJIaXN0b3J5IiwiSGFyZEJyZWFrIiwic2V0SGFyZEJyZWFrIiwiZXh0ZW5zaW9uIiwic2V0dGluZ3NOYW1lIiwiZGVzY3JpcHRpb25zIiwiY29tbWFuZHMiLCJhZGRCdXR0b24iLCJpY29uIiwiY29tbWFuZCIsImRlc2NyaXB0aW9uIiwic2V0dGluZ05hbWUiLCJhdHRyaWJ1dGUiLCJNYXJrIiwiTGluayIsIl9jb21wb25lbnRfVnVlTXVsdGlzZWxlY3QiLCJWdWVNdWx0aXNlbGVjdCIsInBsYWNlaG9sZGVyIiwic2VhcmNoYWJsZSIsInRhZ2dhYmxlIiwidGFnIiwiTnVtYmVyTWl4aW4iLCJTd2l0Y2hCdXR0b24iLCJUZXh0TWl4aW4iLCJtYXNrZWRQYXNzd29yZCIsImhhc0VkaXRhYmxlRm9ybXMiLCJmb3JtYXRGaWxlU2l6ZSIsImZpbGVzaXplIiwiVnVlVXBsb2FkIiwiYXNGaWxlcyIsImFjY2VwdCIsIm1heFNpemUiLCJwYXJzZUZpbGVTaXplIiwidGh1bWJuYWlscyIsInRvdGFsIiwicmVhZHkiLCJuZXdGaWxlIiwib2xkRmlsZSIsInhociIsImJsb2IiLCJmaWxlcyIsIlJlc2l6ZURpcmVjdGl2ZSIsImJpbmRpbmciLCJvYnNlcnZlUmVzaXplIiwidW5vYnNlcnZlUmVzaXplIiwiT2JzZXJ2ZXIiLCJpc1Jlc2l6ZVN1cHBvcnRlZCIsIm9ic2VydmVycyIsImJveCIsIkRpdG9BZG1pbiIsImRpdG8iLCJnZXRBcGlVcmwiLCJpc0FwaVVybCIsInVzZXJzIiwicGFyZW50UGF0aCIsImFwcCIsImNyZWF0ZUFwcCIsIkRpdG9Sb290IiwiVnVlTm90aWZpY2F0aW9ucyIsImNyZWF0ZVJvdXRlciIsImNyZWF0ZVdlYkhpc3RvcnkiLCJSZXF1ZXN0RXJyb3IiLCJoZWFkZXJzIiwiZGVwcmVjYXRlIiwiaXNBYnNv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
|
|
11382
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzL2FnZW50LmpzIiwiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvVmFsdWVNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvQ29udGV4dE1peGluLmpzIiwiLi4vc3JjL3ZhbGlkYXRvcnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9fZGVjaW1hbHMuanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9fZW1haWwuanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9faG9zdG5hbWUuanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9fZG9tYWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRvcnMvX2ludGVnZXIuanMiLCIuLi9zcmMvdmFsaWRhdG9ycy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRvcnMvX21pbi5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL19wYXNzd29yZC5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL19yZXF1aXJlZC5qcyIsIi4uL3NyYy92YWxpZGF0b3JzL191cmwuanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRpb25NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9hY2Nlc3Nvci5qcyIsIi4uL3NyYy9taXhpbnMvVHlwZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL3VpZC5qcyIsIi4uL3NyYy91dGlscy9TY2hlbWFHcmFwaC5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3NjaGVtYS5qcyIsIi4uL3NyYy91dGlscy9yZXNvdXJjZS5qcyIsIi4uL3NyYy9taXhpbnMvRGl0b01peGluLmpzIiwiLi4vc3JjL3V0aWxzL29wdGlvbnMuanMiLCIuLi9zcmMvRGl0b0NvbXBvbmVudC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy9kYXRlLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvQ2FsZW5kYXIudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL2V2ZW50LmpzIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3RyaWdnZXIuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UcmlnZ2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0lucHV0RmllbGQudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvSWNvbi52dWUiLCIuLi8uLi91aS9zcmMvdXRpbHMvc2VsZWN0aW9uLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvRGF0ZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24udnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvU3dpdGNoQnV0dG9uLnZ1ZSIsIi4uLy4uL3VpL3NyYy90cmFuc2l0aW9ucy9UcmFuc2l0aW9uSGVpZ2h0LnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy92dWUuanMiLCIuLi9zcmMvbWl4aW5zL0RvbU1peGluLmpzIiwiLi4vc3JjL0RpdG9Vc2VyLmpzIiwiLi4vc3JjL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1JvdXRlTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWUiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlRm9jdXNUcmFwL2NvbXBvbmVudC5tanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRGlhbG9nLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmFpbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvSGVhZGVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9OYXZpZ2F0aW9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Ob3RpZmljYXRpb25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TaWRlYmFyLnZ1ZSIsIi4uL3NyYy9taXhpbnMvUHVsbGRvd25NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9BY2NvdW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FbGVtZW50LnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9MYWJlbC52dWUiLCIuLi9zcmMvbWl4aW5zL0l0ZW1NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWEudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYUlubGluZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlIiwiLi4vc3JjL3V0aWxzL21hdGguanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DbGlwYm9hcmQudnVlIiwiLi4vc3JjL21peGlucy9Mb2FkaW5nTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1Jlc291cmNlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvcGF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtSW5uZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU29ydGFibGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1VwbG9hZEZpbGUudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZVNvcnRhYmxlL2NvbXBvbmVudC5tanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRHJhZ2dhYmxlLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TcGlubmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvRGl0b1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29kZS52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb2xvci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlRGF0ZS52dWUiLCIuLi9zcmMvdXRpbHMvcm91dGUuanMiLCIuLi9zcmMvbWl4aW5zL1NvdXJjZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2ZpbHRlci5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTWFya3VwLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU11bHRpc2VsZWN0LnZ1ZSIsIi4uL3NyYy9taXhpbnMvTnVtYmVyTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNlY3Rpb24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTcGFjZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU3dpdGNoLnZ1ZSIsIi4uL3NyYy9taXhpbnMvVGV4dE1peGluLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVGV4dC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUZXh0YXJlYS52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUcmVlTGlzdC52dWUiLCIuLi9zcmMvdXRpbHMvdW5pdHMuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVVcGxvYWQudnVlIiwiLi4vc3JjL2RpcmVjdGl2ZXMvcmVzaXplLmpzIiwiLi4vc3JjL3ZlcmJzLmpzIiwiLi4vc3JjL0RpdG9BZG1pbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIHVzZXItYWdlbnQgcGFyc2VyIHdhcyBsaWZ0ZWQgZnJvbSBQYXBlci5qczpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXBlcmpzL3BhcGVyLmpzL2Jsb2IvY2MxNTY5Njc1MDAzNWFiMDBlMDBjNjRjN2M5NWRhYTJjODVlZmUwMS9zcmMvY29yZS9QYXBlclNjb3BlLmpzI0w3NS1MMTA3XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVVzZXJBZ2VudCh1c2VyQWdlbnQgPSAnJykge1xuICBjb25zdCBhZ2VudCA9IHt9XG4gIC8vIFVzZSByZXBsYWNlKCkgdG8gZ2V0IGFsbCBtYXRjaGVzLCBhbmQgZGVhbCB3aXRoIENocm9tZS9XZWJraXQgb3ZlcmxhcDpcbiAgY29uc3QgdWEgPSB1c2VyQWdlbnQudG9Mb3dlckNhc2UoKVxuICBjb25zdCBbb3NdID1cbiAgICAvKGlwaG9uZXxpcGFkfGxpbnV4OyBhbmRyb2lkfGRhcndpbnx3aW58bWFjfGxpbnV4fGZyZWVic2R8c3Vub3MpLy5leGVjKFxuICAgICAgdWFcbiAgICApIHx8IFtdXG4gIGNvbnN0IHBsYXRmb3JtID0gKFxuICAgIHtcbiAgICAgICdkYXJ3aW4nOiAnbWFjJyxcbiAgICAgICdpcGhvbmUnOiAnaW9zJyxcbiAgICAgICdpcGFkJzogJ2lvcycsXG4gICAgICAnbGludXg7IGFuZHJvaWQnOiAnYW5kcm9pZCdcbiAgICB9W29zXSB8fFxuICAgIG9zXG4gIClcbiAgaWYgKHBsYXRmb3JtKSB7XG4gICAgYWdlbnQucGxhdGZvcm0gPSBwbGF0Zm9ybVxuICAgIGFnZW50W3BsYXRmb3JtXSA9IHRydWVcbiAgfVxuICB1YS5yZXBsYWNlKFxuICAgIC8ob3BlcmF8Y2hyb21lfHNhZmFyaXx3ZWJraXR8ZmlyZWZveHxtc2llfHRyaWRlbnQpXFwvP1xccyooWy5cXGRdKykoPzouKnZlcnNpb25cXC8oWy5cXGRdKykpPyg/Oi4qcnY6dj8oWy5cXGRdKykpPy9nLFxuICAgIChtYXRjaCwgYnJvd3NlciwgdjEsIHYyLCBydikgPT4ge1xuICAgICAgLy8gRG8gbm90IHNldCBhZGRpdGlvbmFsIGJyb3dzZXJzIG9uY2UgY2hyb21lIGlzIGRldGVjdGVkLlxuICAgICAgaWYgKCFhZ2VudC5jaHJvbWUpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IHJ2IHx8IHYyIHx8IHYxXG4gICAgICAgIGlmICghYWdlbnQudmVyc2lvbiB8fCBicm93c2VyICE9PSAnc2FmYXJpJykge1xuICAgICAgICAgIC8vIFVzZSB0aGUgdmVyc2lvbiB3ZSBnZXQgZm9yIHdlYmtpdCBmb3IgU2FmYXJpLCB3aGljaCBpcyBhY3R1YWxseVxuICAgICAgICAgIC8vIFRoZSBTYWZhcmkgdmVyc2lvbiwgZS5nLiAxNi4wXG4gICAgICAgICAgYWdlbnQudmVyc2lvbiA9IHZlcnNpb25cbiAgICAgICAgICBhZ2VudC52ZXJzaW9uTnVtYmVyID0gcGFyc2VGbG9hdCh2ZXJzaW9uKVxuICAgICAgICB9XG4gICAgICAgIGFnZW50LmJyb3dzZXIgPSBicm93c2VyXG4gICAgICAgIGFnZW50W2Jyb3dzZXJdID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgKVxuICBpZiAoYWdlbnQuY2hyb21lKSB7XG4gICAgLy8gQ2FuJ3QgaGF2ZSBpdCBib3RoIHdheXMsIENocm9tZS5cbiAgICBkZWxldGUgYWdlbnQud2Via2l0XG4gIH1cbiAgcmV0dXJuIGFnZW50XG59XG4iLCJpbXBvcnQgeyByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IHBhcnNlVXNlckFnZW50IH0gZnJvbSAnLi91dGlscy9hZ2VudCdcblxuZXhwb3J0IGRlZmF1bHQgcmVhY3RpdmUoe1xuICB0aXRsZTogJycsXG4gIHJvdXRlQ29tcG9uZW50czogW10sXG4gIHVzZXI6IG51bGwsXG4gIGFnZW50OiBwYXJzZVVzZXJBZ2VudChuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnKSxcbiAgbG9hZENhY2hlOiB7fSwgLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgYWN0aXZlTGFiZWw6IG51bGwsXG4gIGNsaXBib2FyZERhdGE6IG51bGxcbn0pXG4iLCJpbXBvcnQge1xuICBpc0ludGVnZXIsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aCxcbiAgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbikge1xuICByZXR1cm4gZGF0YVBhdGhcbiAgICA/IGAke2RhdGFQYXRofS8ke3Rva2VufWBcbiAgICA6IHRva2VuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICBwYXRoPy5wb3AoKVxuICByZXR1cm4gcGF0aFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBuZXN0ZWQgPyBwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSA6IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgaWYgKHBhdGgpIHtcbiAgICAvLyBSZW1vdmUgdGhlIHBhcmVudCB0b2tlbi4gSWYgaXQncyBhIG51bWJlciwgdGhlbiB3ZSdyZSBkZWFsaW5nIHdpdGggYW5cbiAgICAvLyBhcnJheSBhbmQgbmVlZCB0byByZW1vdmUgbW9yZSB0b2tlbnMgdW50aWwgd2UgbWVldCB0aGUgYWN0dWFsIHBhcmVudDpcbiAgICBsZXQgdG9rZW5cbiAgICBkbyB7XG4gICAgICB0b2tlbiA9IHBhdGgucG9wKClcbiAgICB9IHdoaWxlICh0b2tlbiAhPSBudWxsICYmIGlzSW50ZWdlcigrdG9rZW4pKVxuICAgIC8vIElmIHRoZSByZW1vdmVkIHRva2VuIGlzIHZhbGlkLCB3ZSBjYW4gZ2V0IHRoZSBwYXJlbnQgZGF0YTpcbiAgICBpZiAodG9rZW4gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHBhdGhcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlUGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICByZXR1cm4gcGF0aFtwYXRoLmxlbmd0aCAtIDFdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhOYW1lKGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIHJldHVybiB0b2tlbiA9PSBudWxsIHx8IGlzSW50ZWdlcigrdG9rZW4pID8gbnVsbCA6IHRva2VuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhJbmRleChkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICBjb25zdCBpbmRleCA9IHRva2VuID09IG51bGwgPyBudWxsIDogK3Rva2VuXG4gIHJldHVybiBpc0ludGVnZXIoaW5kZXgpID8gaW5kZXggOiBudWxsXG59XG5cbmxldCB0ZW1wb3JhcnlJZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBzZXRUZW1wb3JhcnlJZChkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gVGVtcG9yYXJ5IGlkcyBhcmUgbWFya2VkIHdpdGggYSAnQCcgYXQgdGhlIGJlZ2lubmluZy5cbiAgZGF0YVtpZEtleV0gPSBgQCR7Kyt0ZW1wb3JhcnlJZH1gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RlbXBvcmFyeUlkKGlkKSB7XG4gIHJldHVybiAvXkAvLnRlc3QoaWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgdG9SYXcgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBnZXRWYWx1ZUF0RGF0YVBhdGgsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbURhdGFQYXRoLFxuICBnZXRQYXJlbnRJdGVtRGF0YVBhdGgsXG4gIGdldFBhcmVudEl0ZW0sXG4gIGdldEl0ZW0sXG4gIGdldExhc3REYXRhUGF0aE5hbWUsXG4gIGdldExhc3REYXRhUGF0aEluZGV4XG59IGZyb20gJy4vdXRpbHMvZGF0YS5qcydcblxuY29uc3QgeyBoYXNPd25Qcm9wZXJ0eSB9ID0gT2JqZWN0LnByb3RvdHlwZVxuXG4vLyBTZWUgYWxzbyBgQ29udGV4dE1peGluYDogYERpdG9Db250ZXh0YCBpbnN0YW5jZXMgYXJlIGEgdGhpbiB3cmFwcGVyIGFyb3VuZFxuLy8gcmF3IGBjb250ZXh0YCBvYmplY3RzLCB3aGljaCB0aGVtc2VsdmVzIGFjdHVhbGx5IGluaGVyaXQgZnJvbSB0aGUgbGlua2VkXG4vLyBgY29tcG9uZW50YCBpbnN0YW5jZSwgc28gdGhhdCB0aGV5IG9ubHkgbmVlZCB0byBwcm92aWRlIHRoZSB2YWx1ZXMgdGhhdFxuLy8gc2hvdWxkIGJlIGRpZmZlcmVudCB0aGFuIGluIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudC4gSW4gb3JkZXIgdG8gbm90IGV4cG9zZVxuLy8gYWxsIGZpZWxkcyBmcm9tIHRoZSBjb21wb25lbnQsIHRoZSB3cmFwcGVyIGlzIGludHJvZHVjZWQuXG5cbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIHRvT2JqZWN0KGNvbnRleHQpIHtcbiAgY29uc3QgcmF3U3RhcnQgPSB0b1Jhdyhjb250ZXh0KVxuICBsZXQgcmF3ID0gcmF3U3RhcnRcbiAgbGV0IG9iamVjdCA9IG51bGxcbiAgLy8gSW4gY2FzZSBgRGl0b0NvbnRleHQuZXh0ZW5kKClgIHdhcyB1c2VkLCB3ZSBuZWVkIHRvIGZpbmQgdGhlIGFjdHVhbCBjb250ZXh0XG4gIC8vIG9iamVjdCBmcm9tIHRoZSBvYmplY3QncyB0aGUgaW5oZXJpdGFuY2UgY2hhaW46XG4gIGRvIHtcbiAgICBvYmplY3QgPSBjb250ZXh0cy5nZXQocmF3KVxuICAgIGlmIChvYmplY3QpIGJyZWFrXG4gICAgcmF3ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHJhdylcbiAgfSB3aGlsZSAocmF3KVxuICBpZiAob2JqZWN0ICYmIHJhdyAhPT0gcmF3U3RhcnQpIHtcbiAgICAvLyBBc3NpZ24gdGhlIHBhc3NlZCBjb250ZXh0IHdpdGggdGhlIG9yaWdpbmFsIG9iamVjdCBhcyB3ZWxsLCBzbyB3ZSBkb24ndFxuICAgIC8vIGhhdmUgdG8gc2VhcmNoIGZvciBpdCBhZ2FpbjpcbiAgICBjb250ZXh0cy5zZXQocmF3LCBvYmplY3QpXG4gIH1cbiAgcmV0dXJuIG9iamVjdFxufVxuXG5mdW5jdGlvbiBnZXQoY29udGV4dCwga2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgY29uc3Qgb2JqZWN0ID0gdG9PYmplY3QoY29udGV4dClcbiAgY29uc3QgdmFsdWUgPSBrZXkgaW4gb2JqZWN0ID8gb2JqZWN0W2tleV0gOiB1bmRlZmluZWRcbiAgLy8gSWYgYG9iamVjdGAgZXhwbGljaXRseSBzZXRzIHRoZSBrZXkgdG8gYHVuZGVmaW5lZGAsIHJldHVybiBpdC5cbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSlcbiAgICAgID8gZGVmYXVsdFZhbHVlKClcbiAgICAgIDogZGVmYXVsdFZhbHVlXG59XG5cbmZ1bmN0aW9uIHNldChjb250ZXh0LCBrZXksIHZhbHVlKSB7XG4gIHRvT2JqZWN0KGNvbnRleHQpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IGlzRnVuY3Rpb24oY29udGV4dClcbiAgICAgICAgPyBjb250ZXh0KClcbiAgICAgICAgOiB7IC4uLmNvbnRleHQgfVxuICAgICAgOiB7fVxuICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNldCAodG8gZmFsc2UpLCBkZWZhdWx0IHRvIHRydWUgc28gd2UgZG9uJ3QgZmFsbCBiYWNrXG4gICAgLy8gdG8gYGNvbXBvbmVudGAgZm9yIGl0cyB2YWx1ZS5cbiAgICBjb250ZXh0Lm5lc3RlZCA/Pz0gdHJ1ZVxuICAgIGNvbnRleHQuY29tcG9uZW50ID0gY29tcG9uZW50XG4gICAgLy8gSGF2ZSBgb2JqZWN0YCBpbmhlcml0IGZyb20gdGhlIGBjb21wb25lbnRgIGluc3RhbmNlLCBzbyBpdCBjYW4gb3ZlcnJpZGVcbiAgICAvLyBpdHMgdmFsdWVzIGFuZCBzdGlsbCByZXRyaWV2ZSBmcm9tIGl0LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYHRoaXNgXG4gICAgLy8gdGhyb3VnaCBgY29udGV4dHNgIG1hcDpcbiAgICBjb25zdCBvYmplY3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29udGV4dCwgY29tcG9uZW50KVxuICAgIC8vIE5vIG5lZWQgZm9yIGB0b1Jhdyh0aGlzKWAgaGVyZSBhcyBpdCdzIGFsd2F5cyByYXcgaW5zaWRlIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb250ZXh0cy5zZXQodGhpcywgb2JqZWN0KVxuICB9XG5cbiAgc3RhdGljIGdldChjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dCBpbnN0YW5jZW9mIERpdG9Db250ZXh0XG4gICAgICA/IGNvbnRleHRcbiAgICAgIDogbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwgY29udGV4dClcbiAgfVxuXG4gIGV4dGVuZChvYmplY3QpIHtcbiAgICAvLyBDcmVhdGUgYSBjb3B5IG9mIHRoaXMgY29udGV4dCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIHJlYWwgb25lLCBidXRcbiAgICAvLyBvdmVycmlkZXMgc29tZSBwcm9wZXJ0aWVzIHdpdGggdGhlIG9uZXMgZnJvbSB0aGUgcGFzc2VkIGBvYmplY3RgLlxuICAgIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Yob2JqZWN0LCB0aGlzKVxuICB9XG5cbiAgLy8gYG5lc3RlZGAgaXMgYHRydWVgIHdoZW4gdGhlIGRhdGEtcGF0aCBwb2ludHMgYSB2YWx1ZSBpbnNpZGUgYW4gaXRlbSwgYW5kXG4gIC8vIGBmYWxzZWAgd2hlbiBpdCBwb2ludHMgdG8gdGhlIGl0ZW0gaXRzZWxmLlxuICBnZXQgbmVzdGVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25lc3RlZCcsIHRydWUpXG4gIH1cblxuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NjaGVtYScsIG51bGwpXG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldChcbiAgICAgIHRoaXMsXG4gICAgICAndmFsdWUnLFxuICAgICAgKCkgPT5cbiAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBkZWZpbmVkIG9uIHRoZSB1bmRlcmx5aW5nIG9iamVjdCwgaXQncyBub3QgYSB0eXBlXG4gICAgICAgIC8vIGNvbXBvbmVudC4gSWYgaXQgaXMgbmVzdGVkLCB3ZSBjYW4gc3RpbGwgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSByb290LlxuICAgICAgICB0aGlzLm5lc3RlZFxuICAgICAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICApXG4gIH1cblxuICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YVBhdGgnLCAnJylcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25hbWUnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhOYW1lKHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGluZGV4KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2luZGV4JywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgaXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLml0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMucGFyZW50SXRlbURhdGFQYXRoKVxuICB9XG5cbiAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHM6XG4gIGdldCBpdGVtKCkge1xuICAgIHJldHVybiBnZXQoXG4gICAgICB0aGlzLFxuICAgICAgJ2RhdGEnLFxuICAgICAgLy8gSWYgYGRhdGFgIGlzbid0IHByb3ZpZGVkLCB3ZSBjYW4gZGV0ZXJtaW5lIGl0IGZyb20gcm9vdERhdGEgJiBkYXRhUGF0aDpcbiAgICAgICgpID0+IGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpIHx8IG51bGxcbiAgICApXG4gIH1cblxuICAvLyBOT1RFOiBgcGFyZW50SXRlbWAgaXNuJ3QgdGhlIGNsb3Nlc3QgZGF0YSBwYXJlbnQgdG8gYGl0ZW1gLCBpdCdzIHRoZVxuICAvLyBjbG9zZXN0IHBhcmVudCB0aGF0IGlzbid0IGFuIGFycmF5LCBlLmcuIGZvciByZWxhdGlvbnMgb3IgbmVzdGVkIEpTT04gZGF0YS5cbiAgLy8gVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlIHVzZSBvZlxuICAvLyBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0IHBhcmVudC4gSWZcbiAgLy8gbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsIHNvcnRzIG9mIGRhdGFcbiAgLy8gcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IGl0ZW0gPSAoXG4gICAgICBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKSB8fCBudWxsXG4gICAgKVxuICAgIHJldHVybiBpdGVtICE9PSB0aGlzLml0ZW0gPyBpdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHByb2Nlc3NlZFJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZFJvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBjbGlwYm9hcmRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NsaXBib2FyZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHVzZXIoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndXNlcicsIG51bGwpXG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2FwaScsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld3MoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld3MnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZsYXR0ZW5lZFZpZXdzKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2ZsYXR0ZW5lZFZpZXdzJywgbnVsbClcbiAgfVxuXG4gIGdldCBpdGVtTGFiZWwoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaXRlbUxhYmVsJywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZm9ybUxhYmVsJywgbnVsbClcbiAgfVxuXG4gIC8vIE5PVEU6IExpa2UgJ29wdGlvbnMnLCB0aGUgYXNzb2NpYXRlZCBjb21wb25lbnQgZG9lc24ndCBhbHdheXMgZXhpc3QsIGUuZy5cbiAgLy8gaW4gbmVzdGVkIGZvcm1zIGR1cmluZyBgcHJvY2Vzc0RhdGEoKWAuIEJ1dCBgc2NoZW1hYCBpcyBndWFyYW50ZWVkIHRvXG4gIC8vIGFsd2F5cyBiZSBhdmFpbGFibGUuXG4gIGdldCBjb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFRPRE86IEFkZCBgY29tcG9uZW50U2NoZW1hYCBnZXR0ZXIgZm9yIHRoZSBzY2hlbWEgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50LFxuICAvLyBldmVuIHdoZW4gdGhlIGNvbXBvbmVudCBpc24ndCBhY3R1YWxseSBpbnN0YW50aWF0ZWQuIENvbnNpZGVyIGFkZGluZ1xuICAvLyBgc291cmNlU2NoZW1hYCBhcyB3ZWxsP1xuXG4gIC8vIFRPRE86IEZpeCB1bmNsZWFyIG5hbWluZzogV2hpY2ggc2NoZW1hIGlzIHRoaXMsIHRoYXQgb2YgdGhlIGNvbXBvbmVudCBvciBvZlxuICAvLyBpdHMgcGFyZW50PyBJc24ndCBleHBvc2luZyBgZm9ybUNvbXBvbmVudGAgYW5kIGB2aWV3Q29tcG9uZW50YCBlbm91Z2gsIG9uY2VcbiAgLy8gd2Ugb2ZmZXIgYWNjZXNzIHRvIHRoZWlyIGNvbXBvbmVudHMgdGhlcmUgdGhyb3VnaCBgZ2V0Q29tcG9uZW50KClgICYgY28uIG9uXG4gIC8vIGBEaXRvTWl4aW5gIHBlcmhhcHM/ICBBbHNvLCB0aGVyZSBjb3VsZCBiZSBhIGB0YWJDb21wb25lbnRgIGdldHRlciBmb3JcbiAgLy8gc2NoZW1hcyBpbiB0YWJzP1xuICBnZXQgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NjaGVtYUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3Q29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkaWFsb2dDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHBhbmVsQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3BhbmVsQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyZXNvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBXaGVuIHVzZWQgaW4gT3B0aW9uc01peGluIGZvciBgc2NoZW1hLm9wdGlvbnMudmFsdWUoKWAsXG4gIC8vIGBzY2hlbWEub3B0aW9ucy5sYWJlbCgpYCBhbmQgIGBzY2hlbWEuc2VhcmNoLmZpbHRlcigpYCBjYWxsYmFja3M6XG4gIGdldCBvcHRpb24oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9uJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9ucycsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBvcGVuKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wZW4nLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUT0RPOiBSZW5hbWUgdGhpcyB0byBgc2VhcmNoVGVybWAgb3IgYHNlYXJjaFF1ZXJ5YCwgdG8gcGVyaGFwcyBmcmVlIGBxdWVyeWBcbiAgLy8gZm9yIHRoZSBhY3R1YWwgYHJlc291cmNlQ29tcG9uZW50LnF1ZXJ5YCBvYmplY3Q/XG4gIGdldCBxdWVyeSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdxdWVyeScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIC8vIFRoZSBlcnJvciBmaWVsZCBpcyBvbmx5IHBvcHVsYXRlZCBpbiB0aGUgY29udGV4dCBvZiBidXR0b25zIHRoYXQgc2VuZFxuICAvLyByZXF1ZXN0cywgc2VlIGBSZXNvdXJjZU1peGluLmVtaXRCdXR0b25FdmVudCgpYDpcbiAgZ2V0IGVycm9yKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Vycm9yJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IHdhc05vdGlmaWVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3dhc05vdGlmaWVkJywgZmFsc2UpXG4gIH1cblxuICAvLyBIZWxwZXIgTWV0aG9kc1xuXG4gIGdldCByZXF1ZXN0KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHRoaXMuY29tcG9uZW50LnJlcXVlc3Qob3B0aW9ucylcbiAgfVxuXG4gIGdldCBmb3JtYXQoKSB7XG4gICAgcmV0dXJuICh2YWx1ZSwgb3B0aW9ucykgPT4gdGhpcy5jb21wb25lbnQuZm9ybWF0KHZhbHVlLCBvcHRpb25zKVxuICB9XG5cbiAgZ2V0IG5hdmlnYXRlKCkge1xuICAgIHJldHVybiBsb2NhdGlvbiA9PiB0aGlzLmNvbXBvbmVudC5uYXZpZ2F0ZShsb2NhdGlvbilcbiAgfVxuXG4gIGdldCBkb3dubG9hZCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5kb3dubG9hZChvcHRpb25zKVxuICB9XG5cbiAgZ2V0IGdldFJlc291cmNlVXJsKCkge1xuICAgIHJldHVybiByZXNvdXJjZSA9PiB0aGlzLmNvbXBvbmVudC5nZXRSZXNvdXJjZVVybChyZXNvdXJjZSlcbiAgfVxuXG4gIGdldCBub3RpZnkoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4ge1xuICAgICAgdGhpcy5jb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgICBzZXQodGhpcywgJ3dhc05vdGlmaWVkJywgdHJ1ZSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQXJyYXksIGlzUGxhaW5PYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaXN0ZW5lcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEFzeW5jIG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGUgZXZlbnRzIGFkZGVkIC9cbiAgICAvLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrcyBpZiB0aGUgY29tcG9uZW50XG4gICAgLy8gaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSAodGhpcy5saXN0ZW5lcnMgfHw9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSAobGlzdGVuZXJzW2V2ZW50XSB8fD0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy5saXN0ZW5lcnNcbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgIHRoaXMub2ZmKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub2ZmKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIHNwZWNpZmljIGV2ZW50XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5saXN0ZW5lcnM/LltldmVudF1cbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCBoYW5kbGVycyBmb3IgdGhpcyBldmVudFxuICAgICAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgY29uc3QgeyBxdWV1ZSwgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIEVtaXQgdGhlIG5leHQgZXZlbnQgaW4gdGhlIHF1ZXVlIHdpdGggaXRzIHBhcmFtcy5cbiAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBpdCBvbmx5IGdldHMgcmVtb3ZlZCBvbmNlIGBuZXh0KClgIGlzIGNhbGxlZC5cbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gcXVldWUuc2hpZnQoKVxuICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgIGxldCByZXN1bHRcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBjYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY2FsbGJhY2suYXBwbHkodGhpcywgZW50cnkuYXJncylcbiAgICAgICAgICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYEVycm9yIGR1cmluZyBldmVudCBoYW5kbGVyIGZvciAnJHtldmVudH0nOmAsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIFJlc29sdmUgdGhlIHByb21pc2UgdGhhdCB3YXMgYWRkZWQgdG8gdGhlIHF1ZXVlIGZvciB0aGUgZXZlbnRcbiAgICAgICAgICAgICAgLy8gdGhhdCB3YXMganVzdCBjb21wbGV0ZWQgYnkgdGhlIHdyYXBwZXIgdGhhdCBjYWxsZWQgYG5leHQoKWBcbiAgICAgICAgICAgICAgZW50cnkucmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBxdWV1ZS5wdXNoKHsgYXJncywgcmVzb2x2ZSB9KVxuICAgICAgICAgIC8vIEZvciBuZXcgcXVldWVzICg9IG9ubHkgb25lIGVudHJ5KSBlbWl0IHRoZSBmaXJzdCBldmVudCBpbW1lZGlhdGVseSxcbiAgICAgICAgICAvLyB0byBnZXQgdGhlIHF1ZXVlIHJ1bm5pbmcuXG4gICAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgLy8gTWFrZSBzdXJlIGl0J3MgdGhlbmFibGUgZXZlbiBpZiB0aGVyZSBhcmUgbm8gbGlzdGVuZXJzLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfSxcblxuICAgIC8vIENoZWNrcyBpZiB0aGUgY29tcG9uZW50IGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQgdHlwZTpcbiAgICBoYXNMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycyhldikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnQubGVuZ3RoID4gMFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5saXN0ZW5lcnM/LltldmVudF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZWdhdGUoZXZlbnQsIHRhcmdldCkge1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlKGV2LCB0YXJnZXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub24oZXZlbnQsICguLi5hcmdzKSA9PiB0YXJnZXQuZW1pdChldmVudCwgLi4uYXJncykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShcbiAgICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgeyBjb21wb25lbnQ6IHRoaXMgfVxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHsgZm9ybWF0IH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICByZXR1cm4gZm9ybWF0XG4gICAgICAgICAgPyBmb3JtYXQobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgdmFsdWUgfSkpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgcGFyc2UgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIGlmIChwYXJzZSkge1xuICAgICAgICAgIHZhbHVlID0gcGFyc2UobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgdmFsdWUgfSkpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSA9IHZhbHVlXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgdGhpcy5kYXRhW3RoaXMubmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbSwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAgIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHMuXG4gICAgLy8gTk9URTogVGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBhczpcbiAgICAvLyByZXR1cm4gZ2V0SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICBwYXJlbnREYXRhKCkge1xuICAgICAgY29uc3QgZGF0YSA9IGdldFBhcmVudEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgICByZXR1cm4gZGF0YSAhPT0gdGhpcy5kYXRhID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgcHJvY2Vzc2VkRGF0YSgpIHtcbiAgICAgIHJldHVybiBnZXRQcm9jZXNzZWRQYXJlbnREYXRhKHRoaXMsIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRSb290RGF0YSgpIHtcbiAgICAgIHJldHVybiBnZXRQcm9jZXNzZWRQYXJlbnREYXRhKHRoaXMsICcnLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudERhdGFcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkRGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRSb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZFJvb3REYXRhXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFByb2Nlc3NlZFBhcmVudERhdGEoY29tcG9uZW50LCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgZGF0YSB0aHJvdWdoIHRoZSBzY2hlbWFDb21wb25lbnQsIGJ1dFxuICAvLyB0aGF0J3Mgbm90IG5lY2Vzc2FyaWx5IHRoZSBpdGVtIHJlcHJlc2VudGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuICAvLyBTb2x1dGlvbjogRmluZCB0aGUgcmVsYXRpdmUgcGF0aCBhbmQgdGhlIHByb2Nlc3NlZCBzdWItaXRlbSBmcm9tIHRoZXJlOlxuICBsZXQgeyBzY2hlbWFDb21wb25lbnQgfSA9IGNvbXBvbmVudFxuICAvLyBGaW5kIHRoZSBzY2hlbWEgY29tcG9uZW50IHRoYXQgY29udGFpbnMgdGhlIGRlc2lyZWQgZGF0YS1wYXRoOlxuICB3aGlsZSAoc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoLmxlbmd0aCA+IGRhdGFQYXRoLmxlbmd0aCkge1xuICAgIHNjaGVtYUNvbXBvbmVudCA9IHNjaGVtYUNvbXBvbmVudC5wYXJlbnRTY2hlbWFDb21wb25lbnRcbiAgfVxuICByZXR1cm4gZ2V0SXRlbShcbiAgICBzY2hlbWFDb21wb25lbnQucHJvY2Vzc2VkRGF0YSxcbiAgICAvLyBHZXQgdGhlIGRhdGFQYXRoIHJlbGF0aXZlIHRvIHRoZSBzY2hlbWFDb21wb25lbnQncyBkYXRhOlxuICAgIGRhdGFQYXRoLnNsaWNlKHNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aC5sZW5ndGgpLFxuICAgIG5lc3RlZFxuICApXG59XG4iLCJpbXBvcnQgeyBpc0NyZWRpdENhcmQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgY3JlZGl0Y2FyZCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzQ3JlZGl0Q2FyZCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBpbnZhbGlkJ1xufVxuIiwiZXhwb3J0IGNvbnN0IGRlY2ltYWxzID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBkZWNpbWFscykgPT4ge1xuICAgIGNvbnN0IG1hdGNoID0gZGVjaW1hbHMgPT09ICcqJyA/ICcrJyA6IGB7MSwke2RlY2ltYWxzfX1gXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5bLStdP1xcXFxkKihcXFxcLlxcXFxkJHttYXRjaH0pPyRgKS50ZXN0KHZhbHVlKVxuICB9LFxuXG4gIG1lc3NhZ2U6ICh2YWx1ZSwgZGVjaW1hbHMpID0+XG4gICAgYG11c3QgYmUgbnVtZXJpYyBhbmQgbWF5IGNvbnRhaW4gJHtcbiAgICAgICFkZWNpbWFscyB8fCBkZWNpbWFscyA9PT0gJyonID8gJycgOiBkZWNpbWFsc1xuICAgIH0gZGVjaW1hbCBwb2ludHNgXG59XG4iLCJpbXBvcnQgeyBpc0VtYWlsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGVtYWlsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNFbWFpbCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIGEgdmFsaWQgZW1haWwnXG59XG4iLCJpbXBvcnQgeyBpc0hvc3RuYW1lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGhvc3RuYW1lID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNIb3N0bmFtZSh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBob3N0IG5hbWUnXG59XG4iLCJpbXBvcnQgeyBpc0RvbWFpbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBkb21haW4gPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0RvbWFpbih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBkb21haW4nXG59XG4iLCJpbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaW50ZWdlciA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSW50ZWdlcih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIHdob2xlIG51bWJlcidcbn1cbiIsImV4cG9ydCBjb25zdCBtYXggPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1heCkgPT4gdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBtYXgpIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttYXh9IG9yIGxlc3NgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBtaW4gPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1pbikgPT4gdmFsdWUgPj0gbWluLFxuICBtZXNzYWdlKHZhbHVlLCBtaW4pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttaW59IG9yIG1vcmVgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBwYXNzd29yZCA9IHtcbiAgLy8gQWxsb3cgYW55IHZhbHVlLiBGb3Igbm93IHRoaXMgaXMgb25seSB1c2VkIGFzIGEgbWFya2VyLCB0byBhbGxvdyB0aGVcbiAgLy8gcmVxdWlyZWQgdmFsaWRhdGlvbiB0byBoYW5kbGUgdW5jaGFuZ2VkIHBhc3N3b3JkcyBzZXBhcmF0ZWx5LlxuICB2YWxpZGF0ZTogKCkgPT4gdHJ1ZVxufVxuIiwiZXhwb3J0IGNvbnN0IHJhbmdlID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBbbWluLCBtYXhdKSA9PiB2YWx1ZSA+PSBtaW4gJiYgdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBbbWluLCBtYXhdKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlIGJldHdlZW4gJHttaW59IGFuZCAke21heH1gXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCByZXF1aXJlZCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgc2V0dGluZ3MsIHsgcGFzc3dvcmQgfSkgPT4gKFxuICAgICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSAnJykgfHxcbiAgICAvLyBQYXNzd29yZCBmaWVsZHMgdXNlIGB1bmRlZmluZWRgIGFzIG9wcG9zZWQgdG8gYG51bGxgIHdoZW4gdGhleSdyZSBzZXRcbiAgICAvLyBidXQgdW5jaGFuZ2VkLCBhbGxvdyB0aGlzIHRvIHBhc3MgdGhyb3VnaDpcbiAgICAocGFzc3dvcmQgJiYgdmFsdWUgPT09IHVuZGVmaW5lZClcbiAgKSxcbiAgbWVzc2FnZTogJ2lzIHJlcXVpcmVkJ1xufVxuIiwiaW1wb3J0IHsgaXNVcmwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgdXJsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNVcmwodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgdmFsaWQgVVJMJ1xufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyB2YWxpZGF0b3JzIGZyb20gJy4uL3ZhbGlkYXRvcnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ2Vycm9ycyddLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzRXJyb3JzKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5lcnJvcnNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuaXNUb3VjaGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgdmFsaWRhdGUobm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uYW1lc3BhY2VcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdG9yc1tydWxlXVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdmFsaWRhdG9yICYmXG4gICAgICAgICAgLy8gT25seSBhcHBseSAncmVxdWlyZWQnIHZhbGlkYXRvciB0byBlbXB0eSB2YWx1ZXMuXG4gICAgICAgICAgLy8gQXBwbHkgYWxsIG90aGVyIHZhbGlkYXRvcnMgb25seSB0byBub24tZW1wdHkgdmFsdWVzLlxuICAgICAgICAgIChydWxlID09PSAncmVxdWlyZWQnIHx8IHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtUb3VjaGVkKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlXG4gICAgICAvLyBDbGVhciBjdXJyZW50bHkgZGlzcGxheWVkIGVycm9ycyB3aGVuIGZvY3VzaW5nIGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCB7IG1lc3NhZ2UgfSBvZiBlcnJvcnMpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihtZXNzYWdlLCB0cnVlKVxuICAgICAgfVxuICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuXG4gICAgZ2V0RXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzID8gWy4uLnRoaXMuZXJyb3JzXSA6IG51bGxcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IG51bGxcbiAgICAgIHRoaXMuJGVtaXQoJ2Vycm9ycycsIHRoaXMuZXJyb3JzKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJpbmcsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFBY2Nlc3NvcihcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIGdldCwgc2V0LCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4pIHtcbiAgLy8gYGtleU9yRGF0YVBhdGhgIGNhbiBiZSBhIHNpbXBsZSBwcm9wZXJ0eSBrZXksXG4gIC8vIG9yIGEgZGF0YS1wYXRoIGludG8gc3ViLXByb3BlcnRpZXMsIGJvdGggaW4gYXJyYXkgb3Igc3RyaW5nIGZvcm1hdC5cbiAgaWYgKGlzU3RyaW5nKGtleU9yRGF0YVBhdGgpICYmIGtleU9yRGF0YVBhdGguaW5jbHVkZXMoJy4nKSkge1xuICAgIGtleU9yRGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIH1cbiAgLy8gVXNlIHRoZSBub3JtYWxpemVkIGRhdGEgcGF0aCBmb3IgdGhlIGhhbmRsaW5nIG92ZXJyaWRlc1xuICBjb25zdCBuYW1lID0gbm9ybWFsaXplRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgcmV0dXJuIHtcbiAgICBnZXQoKSB7XG4gICAgICAvLyBPbmx5IGRldGVybWluZSBzY2hlbWEgdmFsdWUgaWYgd2UgaGF2ZSBubyBnZXR0ZXIsIG9yIHRoZSBnZXR0ZXJcbiAgICAgIC8vIHdhbnRzIHRvIHJlY2VpdmUgdGhlIHZhbHVlIGFuZCBwcm9jZXNzIGl0IGZ1cnRoZXI6XG4gICAgICBjb25zdCB2YWx1ZSA9XG4gICAgICAgICFnZXQgfHwgZ2V0Lmxlbmd0aCA+IDBcbiAgICAgICAgICA/IC8vIE5PVEU6IEJlY2F1c2UgYHNjaGVtYWAgb2JqZWN0cyBhcmUgcmV0cmlldmVkIGZyb20gYG1ldGFgLCB0aGV5XG4gICAgICAgICAgICAvLyBkb24ndCBzZWVtIHRvIGJlIHJlYWN0aXZlLiBUbyBhbGxvdyBjaGFuZ2VkIGluIGBzY2hlbWFgIHZhbHVlcyxcbiAgICAgICAgICAgIC8vIGBzZXQoKWAgc3RvcmVzIGNoYW5nZWQgdmFsdWVzIGluIHRoZSBzZXBhcmF0ZSBgb3ZlcnJpZGVzYCBvYmplY3QuXG4gICAgICAgICAgICB0aGlzLm92ZXJyaWRlcyAmJiBuYW1lIGluIHRoaXMub3ZlcnJpZGVzXG4gICAgICAgICAgICA/IHRoaXMub3ZlcnJpZGVzW25hbWVdXG4gICAgICAgICAgICA6IHRoaXMuZ2V0U2NoZW1hVmFsdWUoa2V5T3JEYXRhUGF0aCwge1xuICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogZGVmLFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJyaWRlcyB8fD0ge31cbiAgICAgICAgdGhpcy5vdmVycmlkZXNbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmVBY2Nlc3NvcihuYW1lLCB7IGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQgfSA9IHt9KSB7XG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgZGVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnM6XG4gICAgICAgIHZhbHVlID0gaXNGdW5jdGlvbihkZWYpID8gZGVmLmNhbGwodGhpcykgOiBkZWZcbiAgICAgICAgLy8gVHJpZ2dlciBzZXR0ZXIgYnkgc2V0dGluZyB2YWx1ZSBhbmQgYWNjZXNzb3IgdG8gZGVmYXVsdDpcbiAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlXG4gICAgICAgIC8vIE5vdyBhY2Nlc3Mgc3RvcmUgYWdhaW4sIGZvciByZWFjdGl2aXR5IHRyYWNraW5nXG4gICAgICAgIHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBnZXR0ZXIgdG8gZnVydGhlciBjaGFuZ2Ugb3IgcHJvY2VzcyB0aGUgdmFsdWVcbiAgICAgIC8vIHJldHJpZXZlZCBmcm9tIHRoZSBzdG9yZTpcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBzZXR0ZXIgdG8gcmV0dXJuIGEgbmV3IHZhbHVlIHRvIHNldCwgb3IgZG8gdGhlXG4gICAgICAvLyBzZXR0aW5nIGl0c2VsZiwgYW5kIHRoZW4gcmV0dXJuIGB1bmRlZmluZWRgOlxuICAgICAgaWYgKCFzZXQgfHwgKHZhbHVlID0gc2V0LmNhbGwodGhpcywgdmFsdWUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmUobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgVmFsdWVNaXhpbiBmcm9tICcuL1ZhbHVlTWl4aW4uanMnXG5pbXBvcnQgQ29udGV4dE1peGluIGZyb20gJy4vQ29udGV4dE1peGluLmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBhc0FycmF5LCBjYW1lbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbHVlTWl4aW4sIENvbnRleHRNaXhpbiwgVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHdpZHRoOiB7IHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGVcbiAgICB9LFxuXG4gICAgbGFiZWxOb2RlKCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuaXNNb3VudGVkID8gdGhpcy4kZWwucHJldmlvdXNFbGVtZW50U2libGluZyA6IG51bGxcbiAgICAgIHJldHVybiBub2RlPy5tYXRjaGVzKCcuZGl0by1sYWJlbCcpID8gbm9kZSA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZXhjbHVkZWRgIGZvciBjb25zaXN0ZW50IG5hbWluZz9cbiAgICBleGNsdWRlOiBnZXRTY2hlbWFBY2Nlc3NvcignZXhjbHVkZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcmVxdWlyZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXF1aXJlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byBhIHN1Yi1jbGFzcyBjb21wb25lbnQgdXNlZCBmb3IgYWxsIGlucHV0IGNvbXBvbmVudHM/XG4gICAgcmVhZG9ubHk6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWFkb25seScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgYXV0b2ZvY3VzOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2ZvY3VzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUbyBiZSB1c2VkIGZvciBzZWxlY3RzIGFuZCBpbnB1dHMgb25seT9cbiAgICBjbGVhcmFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjbGVhcmFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG5cbiAgICAgIGdldChjbGVhcmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNsZWFyYWJsZSAmJiAhdGhpcy5yZWFkb25seVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4TGVuZ3RoOiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4TGVuZ3RoJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BsYWNlaG9sZGVyJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdXRvY29tcGxldGU6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvY29tcGxldGUnLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGV2ZW50cygpIHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuZ2V0RXZlbnRzKClcbiAgICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgYWxsIHByb3ZpZGVzIG5vbi1yZWNvZ25pemVkIGV2ZW50cyxcbiAgICAgIC8vIGFzc3VtaW5nIHRoZXkgYXJlIG5hdGl2ZSBldmVudHMuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHRvIHZ1ZTMtc3R5bGUgYG9uW0EtWl1gIGV2ZW50IGhhbmRsZXJzIG5hbWluZyB0aGF0IGFyZW4ndFxuICAgICAgLy8gbmFtZXNwYWNlZCBpbiBgc2NoZW1hLmV2ZW50c2Agb25jZSB0aGUgdHJhbnNpdGlvbiBpcyBjb21wbGV0ZS5cbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgT2JqZWN0LmtleXModGhpcy5zY2hlbWEuZXZlbnRzIHx8IHt9KSkge1xuICAgICAgICBldmVudHNbYG9uJHtjYW1lbGl6ZShldmVudCwgdHJ1ZSl9YF0gPz89ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmVtaXRFdmVudChldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGV2ZW50c1xuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBuYXRpdmVGaWVsZCwgdGV4dEZpZWxkIH0gPSB0aGlzLiRvcHRpb25zXG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXZlbnRzLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuXG4gICAgICBpZiAobmF0aXZlRmllbGQpIHtcbiAgICAgICAgYXR0cmlidXRlcy5uYW1lID0gdGhpcy5kYXRhUGF0aFxuICAgICAgICBpZiAodGhpcy5sYWJlbCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMudGl0bGUgPSB0aGlzLmxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHlcbiAgICAgICAgYXR0cmlidXRlcy5hdXRvZm9jdXMgPSB0aGlzLmF1dG9mb2N1c1xuICAgICAgICBpZiAodGV4dEZpZWxkKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5tYXhsZW5ndGggPSB0aGlzLm1heExlbmd0aFxuICAgICAgICAgIGF0dHJpYnV0ZXMucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyXG4gICAgICAgICAgYXR0cmlidXRlcy5hdXRvY29tcGxldGUgPSB0aGlzLmF1dG9jb21wbGV0ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIHZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7IC4uLnRoaXMuZ2V0VmFsaWRhdGlvbnMoKSB9XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yZXF1aXJlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBkZWZhdWx0IHJ1bGVzIGFuZCBhZGQgYW55IG5ldyBvbmVzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEucnVsZXMgfHwge30pKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHZhbGlkYXRpb25zW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uc1trZXldID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfSxcblxuICAgIHNob3dDbGVhckJ1dHRvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZSAmJiB0aGlzLnZhbHVlICE9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0RXZlbnRzKCkge1xuICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH0gPSB0aGlzXG4gICAgICByZXR1cm4geyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBhc3luYyBzY3JvbGxJbnRvVmlldygpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9jdXNTY2hlbWEoKVxuICAgICAgdGhpcy5nZXRGb2N1c0VsZW1lbnQoKT8uc2Nyb2xsSW50b1ZpZXc/Lih7XG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgYmxvY2s6ICdjZW50ZXInXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLmdldEZvY3VzRWxlbWVudCgpPy5mb2N1cz8uKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgYmx1ckVsZW1lbnQoKSB7XG4gICAgICB0aGlzLmdldEZvY3VzRWxlbWVudCgpPy5ibHVyPy4oKVxuICAgIH0sXG5cbiAgICBnZXRGb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gYXNBcnJheSh0aGlzLiRyZWZzLmVsZW1lbnQpWzBdID8/IHRoaXNcbiAgICAgIHJldHVybiBlbGVtZW50LiRlbCA/PyBlbGVtZW50XG4gICAgfSxcblxuICAgIGFzeW5jIGZvY3VzU2NoZW1hKCkge1xuICAgICAgLy8gQWxzbyBmb2N1cyB0aGlzIGNvbXBvbmVudCdzIHNjaGVtYSBhbmQgcGFuZWwgaW4gY2FzZSBpdCdzIGEgdGFiLlxuICAgICAgYXdhaXQgdGhpcy5zY2hlbWFDb21wb25lbnQuZm9jdXMoKVxuICAgICAgYXdhaXQgdGhpcy50YWJDb21wb25lbnQ/LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9jdXMoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZvY3VzU2NoZW1hKClcbiAgICAgIHRoaXMuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5ibHVyRWxlbWVudCgpXG4gICAgfSxcblxuICAgIGNsZWFyKCkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgIHRoaXMuYmx1cigpXG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgb25Gb2N1cygpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWVcbiAgICAgIHRoaXMubWFya1RvdWNoZWQoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2ZvY3VzJylcbiAgICB9LFxuXG4gICAgb25CbHVyKCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2VcbiAgICAgIHRoaXMudmFsaWRhdGUoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2JsdXInKVxuICAgIH0sXG5cbiAgICBvbklucHV0KCkge1xuICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJywge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLy8gUHJldmVudCBlbmRsZXNzIHBhcnNlIHJlY3Vyc2lvbjpcbiAgICAgICAgICB2YWx1ZTogdGhpcy5wYXJzZWRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5wYXJzZWRWYWx1ZSA6IHRoaXMudmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUGFzcyBgc2NoZW1hQ29tcG9uZW50YCBhcyBwYXJlbnQsIHNvIGNoYW5nZSBldmVudHMgY2FuIHByb3BhZ2F0ZSB1cC5cbiAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IHRvUmF3IH0gZnJvbSAndnVlJ1xuXG5jb25zdCB1aWRNYXAgPSBuZXcgV2Vha01hcCgpXG5cbi8vIEdlbmVyYXRlZCBhbmQgcmVtZW1iZXJzIHVuaXF1ZSBpZHMgcGVyIHBhc3NlZCBvYmplY3QgdXNpbmcgYSB3ZWFrIG1hcC5cbmxldCB1aWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlkKGl0ZW0sIGdldEl0ZW1JZCA9IG51bGwpIHtcbiAgY29uc3QgcmF3ID0gdG9SYXcoaXRlbSlcbiAgbGV0IGlkID0gdWlkTWFwLmdldChyYXcpXG4gIGlmICghaWQpIHtcbiAgICBpZCA9IGdldEl0ZW1JZD8uKGl0ZW0pIHx8IGBAJHsrK3VpZH1gXG4gICAgdWlkTWFwLnNldChyYXcsIGlkKVxuICB9XG4gIHJldHVybiBpZFxufVxuIiwiaW1wb3J0IHsgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzSW50ZWdlcixcbiAgYXNBcnJheSxcbiAgcGFyc2VEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnXG5cbi8vIFNjaGVtYUdyYXBoIGlzIGEgY2xhc3MgdG8gY29sbGVjdCBzY2hlbWEgZ3JhcGggbWV0YSBpbmZvcm1hdGlvbiBpbiBvcmRlciB0b1xuLy8gcHJvY2VzcyBzb3VyY2VzIGFuZCByZWxhdGlvbnMgZm9yIHRoZSBnaXZlbiB0YXJnZXRzICdzZXJ2ZXInIGFuZCAnY2xpcGJvYXJkJyxcbi8vIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOlxuLy9cbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXJ2ZXIgICAgfCBjbGlwYm9hcmQgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IGZhbHNlICAgICAgICAgICB8IGtlZXAgaWQgICB8IGtlZXAgaWQgICB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSwgdGVtcG9yYXJ5IHwgcmVmLCAjcmVmIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSwgdGVtcG9yYXJ5ICAgfCByZWYsICNpZCAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSAgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjaWQgIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUsIHRlbXBvcmFyeSAgICB8IHJlZiwgI2lkICB8IHJlZiwgI2lkICB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuXG5leHBvcnQgY2xhc3MgU2NoZW1hR3JhcGgge1xuICBncmFwaCA9IHt9XG4gIHJlZmVyZW5jZXMgPSB7fVxuXG4gIHNldChkYXRhUGF0aCwgc2V0dGluZ3MsIGRlZmF1bHRzKSB7XG4gICAgZGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgIGxldCBzdWJHcmFwaCA9IHRoaXMuZ3JhcGhcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGF0YVBhdGgpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlzSW50ZWdlcigrcGFydCkgPyAnKicgOiBwYXJ0XG4gICAgICBzdWJHcmFwaCA9IHN1YkdyYXBoW2tleV0gPz89IHt9XG4gICAgfVxuICAgIHN1YkdyYXBoLiRzZXR0aW5ncyA9IHtcbiAgICAgIC4uLmRlZmF1bHRzLCAvLyBTZWUgYGFkZFNvdXJjZShkYXRhUGF0aClgXG4gICAgICAuLi5zdWJHcmFwaC4kc2V0dGluZ3MsXG4gICAgICAuLi5zZXR0aW5nc1xuICAgIH1cbiAgfVxuXG4gIGFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgLy8gT25seSBzZXQgYHJlbGF0ZWQ6IGZhbHNlYCB0aHJvdWdoIHRoZSBkZWZhdWx0cywgYXMgYHNldFNvdXJjZVJlbGF0ZWQoKWBcbiAgICAvLyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBgYWRkU291cmNlKClgLCBkZXBlbmRpbmcgb24gdGhlIGdyYXBoIHN0cnVjdHVyZS5cbiAgICB0aGlzLnNldChkYXRhUGF0aCwgeyB0eXBlOiAnc291cmNlJywgc2NoZW1hIH0sIHsgcmVsYXRlZDogZmFsc2UgfSlcbiAgfVxuXG4gIHNldFNvdXJjZVJlbGF0ZWQoZGF0YVBhdGgpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgcmVsYXRlZDogdHJ1ZSxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICB0eXBlOiAncmVsYXRpb24nLFxuICAgICAgc2NoZW1hLFxuICAgICAgaW50ZXJuYWw6ICEhcmVsYXRlZERhdGFQYXRoLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChyZWxhdGVkRGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aCkge1xuICAgIHJldHVybiBkYXRhUGF0aFxuICAgICAgPyAodGhpcy5yZWZlcmVuY2VzW2RhdGFQYXRoXSA/Pz0gbmFub2lkKDYpKVxuICAgICAgOiBudWxsXG4gIH1cblxuICBmbGF0dGVuKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSBncmFwaCA9PiB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gW11cbiAgICAgIGZvciAoY29uc3QgW2tleSwgeyAkc2V0dGluZ3MsIC4uLnN1YkdyYXBoIH1dIG9mIE9iamVjdC5lbnRyaWVzKGdyYXBoKSkge1xuICAgICAgICBpZiAoJHNldHRpbmdzKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksICRzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbc3ViS2V5LCBzZXR0aW5nc10gb2YgZmxhdHRlbihzdWJHcmFwaCkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2Ake2tleX0vJHtzdWJLZXl9YCwgc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllc1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuKHRoaXMuZ3JhcGgpXG4gIH1cblxuICBwcm9jZXNzKHNvdXJjZVNjaGVtYSwgZGF0YSwgeyB0YXJnZXQgfSkge1xuICAgIGNvbnN0IGNsaXBib2FyZCA9IHRhcmdldCA9PT0gJ2NsaXBib2FyZCdcbiAgICBpZiAoY2xpcGJvYXJkKSB7XG4gICAgICBkZWxldGUgZGF0YVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIHNldHRpbmdzXSBvZiB0aGlzLmZsYXR0ZW4oKSkge1xuICAgICAgY29uc3QgeyB0eXBlLCBzY2hlbWEsIGludGVybmFsLCByZWxhdGVkLCByZWZlcmVuY2UgfSA9IHNldHRpbmdzXG4gICAgICBjb25zdCBzb3VyY2UgPSB0eXBlID09PSAnc291cmNlJ1xuICAgICAgY29uc3QgcmVsYXRpb24gPSB0eXBlID09PSAncmVsYXRpb24nXG4gICAgICBpZiAoc291cmNlIHx8IHJlbGF0aW9uICYmIGludGVybmFsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGdldFZhbHVlQXREYXRhUGF0aChkYXRhLCBkYXRhUGF0aCwgKCkgPT4gbnVsbClcbiAgICAgICAgY29uc3QgcmVtb3ZlSWQgPSBjbGlwYm9hcmQgJiYgc291cmNlICYmICFyZWxhdGVkXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gKFxuICAgICAgICAgIGNsaXBib2FyZCAmJiAoXG4gICAgICAgICAgICByZWxhdGlvbiAmJiBpbnRlcm5hbCB8fFxuICAgICAgICAgICAgc291cmNlICYmIHJlbGF0ZWRcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhc0FycmF5KHZhbHVlcykuZmxhdCgpKSB7XG4gICAgICAgICAgY29uc3QgaWRLZXkgPSAoXG4gICAgICAgICAgICBzb3VyY2UgJiYgc2NoZW1hLmlkS2V5IHx8XG4gICAgICAgICAgICByZWxhdGlvbiAmJiBzY2hlbWEucmVsYXRlQnkgfHxcbiAgICAgICAgICAgICdpZCdcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWU/LltpZEtleV1cbiAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZUlkKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VJZCB8fCBpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICBpZiAoaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgICBpZCA9IGlkLnNsaWNlKDEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmVmS2V5ID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyAvLyBDbGlwYm9hcmQganVzdCBuZWVkcyB0ZW1wb3JhcnkgaWRzIHVuZGVyIHRoZSBhY3R1YWwgYGlkS2V5YFxuICAgICAgICAgICAgICAgICAgaWRLZXlcbiAgICAgICAgICAgICAgICA6IC8vIFNlcnZlciB3YW50cyBPYmplY3Rpb24tc3R5bGUgJyNpZCcgLyAnI3JlZicgcGFpcnMuXG4gICAgICAgICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgICAgID8gJyNpZCdcbiAgICAgICAgICAgICAgICAgIDogJyNyZWYnXG4gICAgICAgICAgICAgIGNvbnN0IHJldlZhbHVlID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyBgQCR7aWR9YFxuICAgICAgICAgICAgICAgIDogLy8gS2VlcCB0aGUgaWRzIHVuaXF1ZSBpbiByZWZlcmVuY2UgZ3JvdXBzLCBzaW5jZSB0aGV5XG4gICAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2UgYWNyb3NzIHRoZSBmdWxsIGdyYXBoLlxuICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICA/IGAke3JlZmVyZW5jZX0tJHtpZH1gXG4gICAgICAgICAgICAgICAgICA6IGlkIC8vIEEgdGVtcG9yYXJ5IGlkIHdpdGhvdXQgYSByZWxhdGVkLCBqdXN0IHByZXNlcnZlIGl0LlxuICAgICAgICAgICAgICB2YWx1ZVtyZWZLZXldID0gcmV2VmFsdWVcbiAgICAgICAgICAgICAgaWYgKHJlZktleSAhPT0gaWRLZXkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNBcnJheSxcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0Jvb2xlYW4sXG4gIGlzTnVtYmVyLFxuICBpc0Z1bmN0aW9uLFxuICBpc0RhdGUsXG4gIGlzUmVnRXhwLFxuICBhc0FycmF5XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHR5cGVDaGVja2VycyA9IHtcbiAgQm9vbGVhbjogaXNCb29sZWFuLFxuICBOdW1iZXI6IGlzTnVtYmVyLFxuICBTdHJpbmc6IGlzU3RyaW5nLFxuICBEYXRlOiBpc0RhdGUsXG4gIEFycmF5OiBpc0FycmF5LFxuICBPYmplY3Q6IGlzT2JqZWN0LFxuICBSZWdFeHA6IGlzUmVnRXhwLFxuICBGdW5jdGlvbjogaXNGdW5jdGlvblxufVxuXG4vLyBEZWNsYXJlIHRoZXNlIHNlcGFyYXRlbHkgZnJvbSB0aGUgYHR5cGVDb252ZXJ0ZXJzYCBvYmplY3QsIHRvIHByZXZlbnRcbi8vIEJhYmVsIGlzc3VlcyB3aXRoIGBPYmplY3RgIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBgT2JqZWN0YDpcbmNvbnN0IHRvQm9vbGVhbiA9IHZhbHVlID0+ICEhdmFsdWVcbmNvbnN0IHRvTnVtYmVyID0gdmFsdWUgPT4gK3ZhbHVlXG5jb25zdCB0b1N0cmluZyA9IHZhbHVlID0+IFN0cmluZyh2YWx1ZSlcblxuY29uc3QgdG9EYXRlID0gdmFsdWUgPT5cbiAgaXNEYXRlKHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IG5ldyBEYXRlKHZhbHVlKVxuXG5jb25zdCB0b0FycmF5ID0gdmFsdWUgPT5cbiAgaXNBcnJheSh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc1N0cmluZyh2YWx1ZSlcbiAgICAgID8gdmFsdWUuc3BsaXQoJywnKVxuICAgICAgOiBhc0FycmF5KHZhbHVlKVxuXG5jb25zdCB0b09iamVjdCA9IHZhbHVlID0+XG4gIGlzT2JqZWN0KHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IC8vIElmIGEgT2JqZWN0IGlzIGV4cGVjdGVkIGJ1dCBhIEJvb2xlYW4gcHJvdmlkZSwgY29udmVydCB0byBhbiBlbXB0eVxuICAgICAgLy8gb2JqZWN0LiBVc2VkIGJ5IGBjcmVhdGFibGVgICYgY28sIHRoYXQgY2FuIGJlIGJvdGguXG4gICAgICB2YWx1ZSA9PT0gdHJ1ZVxuICAgICAgPyB7fVxuICAgICAgOiBudWxsXG5cbmNvbnN0IHRvUmVnRXhwID0gdmFsdWUgPT5cbiAgaXNSZWdFeHAodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogbmV3IFJlZ0V4cCh2YWx1ZSlcblxuY29uc3QgdHlwZUNvbnZlcnRlcnMgPSB7XG4gIEJvb2xlYW46IHRvQm9vbGVhbixcbiAgTnVtYmVyOiB0b051bWJlcixcbiAgU3RyaW5nOiB0b1N0cmluZyxcbiAgRGF0ZTogdG9EYXRlLFxuICBBcnJheTogdG9BcnJheSxcbiAgT2JqZWN0OiB0b09iamVjdCxcbiAgUmVnRXhwOiB0b1JlZ0V4cFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSB7XG4gIC8vIFNlZSBpZiBhbnkgb2YgdGhlIGV4cGVjdCB0eXBlcyBtYXRjaCwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZXkgZG86XG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAodHlwZUNoZWNrZXJzW3R5cGUubmFtZV0/Lih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSkge1xuICBjb25zdCBjb252ZXJ0ZXIgPSB0eXBlICYmIHR5cGVDb252ZXJ0ZXJzW3R5cGUubmFtZSB8fCB0eXBlXVxuICByZXR1cm4gY29udmVydGVyID8gY29udmVydGVyKHZhbHVlKSA6IHZhbHVlXG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRGl0b01peGluIGZyb20gJy4uL21peGlucy9EaXRvTWl4aW4uanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRVaWQgfSBmcm9tICcuL3VpZC5qcydcbmltcG9ydCB7IFNjaGVtYUdyYXBoIH0gZnJvbSAnLi9TY2hlbWFHcmFwaC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi90eXBlLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0FycmF5LFxuICBpc0Z1bmN0aW9uLFxuICBpc1Byb21pc2UsXG4gIGlzTW9kdWxlLFxuICBhc0FycmF5LFxuICBjbG9uZSxcbiAgY2FtZWxpemUsXG4gIGFzc2lnbkRlZXBseSxcbiAgbWFwQ29uY3VycmVudGx5LFxuICBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IG1hcmtSYXcsIHJlYWN0aXZlIH0gZnJvbSAndnVlJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cbmNvbnN0IGVtcHR5U2NoZW1hID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWFzLCBjYWxsYmFjaykge1xuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEuY29tcG9uZW50LCBzY2hlbWEubmFtZSwgMClcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1NjaGVtYShzY2hlbWEpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5jb21wb25lbnRzIHx8IHt9KSkge1xuICAgICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUsIDEpXG4gICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhbc2NoZW1hLCAuLi5nZXRUYWJTY2hlbWFzKHNjaGVtYSldLCBjYWxsYmFjaylcbiAgICA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICBjb21wb25lbnQgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCkgPyBjb21wb25lbnQgOiB1bmRlZmluZWQpXG4gICAgKSA/PyBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgY29tcG9uZW50ID0+IChjYWxsYmFjayhjb21wb25lbnQpID8gdHJ1ZSA6IHVuZGVmaW5lZClcbiAgICApID8/IGZhbHNlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5TmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIChcbiAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbXBvbmVudCA9PiAoY2FsbGJhY2soY29tcG9uZW50KSA/IHVuZGVmaW5lZCA6IGZhbHNlKVxuICAgICkgPz8gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSkge1xuICByZXR1cm4gc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsICgpID0+IHRydWUpID8/IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NjaGVtYShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYSkgJiYgaXNTdHJpbmcoc2NoZW1hLnR5cGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm0oc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAnZm9ybSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICd2aWV3J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUYWIoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAndGFiJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYW5lbChzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdwYW5lbCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWVudShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdtZW51J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNjaGVtYSlcbn1cblxuY29uc3QgcmVzb2x2ZWRTY2hlbWFzID0gbmV3IFdlYWtNYXAoKVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWEodmFsdWUsIHVud3JhcE1vZHVsZSA9IGZhbHNlKSB7XG4gIGlmIChyZXNvbHZlZFNjaGVtYXMuaGFzKHZhbHVlKSkge1xuICAgIHJldHVybiByZXNvbHZlZFNjaGVtYXMuZ2V0KHZhbHVlKVxuICB9XG4gIGxldCBzY2hlbWEgPSB2YWx1ZVxuICBpZiAoaXNGdW5jdGlvbihzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gc2NoZW1hKClcbiAgfVxuICBpZiAoaXNQcm9taXNlKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBhd2FpdCBzY2hlbWFcbiAgfVxuICBpZiAoaXNNb2R1bGUoc2NoZW1hKSkge1xuICAgIC8vIENvcHkgdG8gY29udmVydCBmcm9tIG1vZHVsZSB0byBvYmplY3Q6XG4gICAgc2NoZW1hID0geyAuLi5zY2hlbWEgfVxuICAgIC8vIFVud3JhcCBkZWZhdWx0IG9yIG5hbWVkIHNjaGVtYVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgKHVud3JhcE1vZHVsZSB8fCBzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICAgIC8vIEZpbHRlciBvdXQgaW50ZXJuYWwga2V5IGFkZGVkIGJ5IHZpdGUgLyB2dWUgMyBwbHVnaW4gd2hlbiBjaGFuZ2luZ1xuICAgICAgLy8gY29kZSBpbiBhIGR5bmFtaWNhbGx5IGltcG9ydGVkIHZ1ZSBjb21wb25lbnQsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRlanMvdml0ZS1wbHVnaW4tdnVlL2Jsb2IvYWJkZjVmNGYzMmQwMmFmNjQxZTVmNjA4NzFiZGUxNDUzNTU2OWIxZS9wYWNrYWdlcy9wbHVnaW4tdnVlL3NyYy9tYWluLnRzI0wxMzNcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpLmZpbHRlcihrZXkgPT4ga2V5ICE9PSAnX3JlcmVuZGVyX29ubHknKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmVzb2x2ZWRTY2hlbWFzLnNldCh2YWx1ZSwgc2NoZW1hKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hcyhcbiAgdW5yZXNvbHZlZFNjaGVtYXMsXG4gIHJlc29sdmVJdGVtID0gcmVzb2x2ZVNjaGVtYVxuKSB7XG4gIGxldCBzY2hlbWFzID0gaXNGdW5jdGlvbih1bnJlc29sdmVkU2NoZW1hcylcbiAgICA/IHVucmVzb2x2ZWRTY2hlbWFzKClcbiAgICA6IHVucmVzb2x2ZWRTY2hlbWFzXG4gIHNjaGVtYXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYXMsIGZhbHNlKVxuICBpZiAoaXNBcnJheShzY2hlbWFzKSkge1xuICAgIC8vIFRyYW5zbGF0ZSBhbiBhcnJheSBvZiBkeW5hbWljIGltcG9ydCwgZWFjaCBpbXBvcnRpbmcgb25lIG5hbWVkIHNjaGVtYVxuICAgIC8vIG1vZHVsZSB0byBhbiBvYmplY3Qgd2l0aCBuYW1lZCBlbnRyaWVzLlxuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIHNjaGVtYXMsXG4gICAgICAgIGFzeW5jIGl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgICAgcmV0dXJuIFtzY2hlbWEubmFtZSwgc2NoZW1hXVxuICAgICAgICB9XG4gICAgICApXG4gICAgKVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNjaGVtYXMpKSB7XG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIGF3YWl0IG1hcENvbmN1cnJlbnRseShcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hcyksXG4gICAgICAgIGFzeW5jIChba2V5LCBpdGVtXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfVxuICByZXR1cm4gc2NoZW1hc1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVZpZXdzKHVucmVzb2x2ZWRWaWV3cykge1xuICByZXR1cm4gcmVzb2x2ZVNjaGVtYXModW5yZXNvbHZlZFZpZXdzLCBhc3luYyAoc2NoZW1hLCB1bndyYXBNb2R1bGUpID0+IHtcbiAgICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlKVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgaXNNZW51KHNjaGVtYSkpIHtcbiAgICAgIC8vIEdlbmVyYXRlIGEgbmFtZSBmb3Igc3ViLW1lbnVzIGZyb20gdGhlaXIgbGFiZWwgaWYgaXQncyBtaXNzaW5nLlxuICAgICAgLy8gTk9URTogVGhpcyBpcyBuZXZlciBhY3R1YWxseSByZWZlcmVuY2VkIGZyb20gYW55d2hlcmUsIGJ1dCB0aGV5IG5lZWRcbiAgICAgIC8vIGEgbmFtZSBieSB3aGljaCB0aGV5J3JlIHN0b3JlZCBpbiB0aGUgcGFyZW50IG9iamVjdC5cbiAgICAgIHNjaGVtYS5uYW1lID0gY2FtZWxpemUoc2NoZW1hLmxhYmVsKVxuICAgICAgc2NoZW1hLml0ZW1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoc2NoZW1hLml0ZW1zKVxuICAgIH1cbiAgICByZXR1cm4gc2NoZW1hXG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuVmlld3Modmlld3MpIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyh2aWV3cykucmVkdWNlKFxuICAgICAgKGVudHJpZXMsIFtrZXksIHNjaGVtYV0pID0+IHtcbiAgICAgICAgaWYgKGlzTWVudShzY2hlbWEpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKC4uLk9iamVjdC5lbnRyaWVzKHNjaGVtYS5pdGVtcykpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksIHNjaGVtYV0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICAgIH0sXG4gICAgICBbXVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpIHtcbiAgLy8gUmVzb2x2ZXMgYXN5bmMgc2NoZW1hIGNvbXBvbmVudHMgYW5kIGFkZHMgRGl0b01peGluIGFuZCBUeXBlTWl4aW4gdG8gdGhlbS5cbiAgbGV0IHsgY29tcG9uZW50IH0gPSBzY2hlbWFcbiAgaWYgKGNvbXBvbmVudCkge1xuICAgIGNvbXBvbmVudCA9IGF3YWl0IHJlc29sdmVTY2hlbWEoY29tcG9uZW50LCB0cnVlKVxuICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgIC8vIFByZXZlbnQgd2FybmluZzogXCJWdWUgcmVjZWl2ZWQgYSBDb21wb25lbnQgd2hpY2ggd2FzIG1hZGUgYSByZWFjdGl2ZVxuICAgICAgLy8gb2JqZWN0LiBUaGlzIGNhbiBsZWFkIHRvIHVubmVjZXNzYXJ5IHBlcmZvcm1hbmNlIG92ZXJoZWFkLCBhbmQgc2hvdWxkXG4gICAgICAvLyBiZSBhdm9pZGVkIGJ5IG1hcmtpbmcgdGhlIGNvbXBvbmVudCB3aXRoIGBtYXJrUmF3YFwiOlxuICAgICAgc2NoZW1hLmNvbXBvbmVudCA9IG1hcmtSYXcoe1xuICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgIG1peGluczogW0RpdG9NaXhpbiwgVHlwZU1peGluLCAuLi4oY29tcG9uZW50Lm1peGlucyB8fCBbXSldXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hcykge1xuICAvLyBgc2NoZW1hc2AgYXJlIG9mIHRoZSBzYW1lIHBvc3NpYmxlIGZvcm1zIGFzIHBhc3NlZCB0byBgZ2V0TmFtZWRTY2hlbWFzKClgXG4gIGF3YWl0IG1hcENvbmN1cnJlbnRseShPYmplY3QudmFsdWVzKHNjaGVtYXMgfHwge30pLCByZXNvbHZlU2NoZW1hQ29tcG9uZW50KVxufVxuXG5jb25zdCBwcm9jZXNzZWRTY2hlbWFEZXB0aHMgPSBuZXcgV2Vha01hcCgpXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoXG4gIGFwaSxcbiAgc2NoZW1hLFxuICByb3V0ZXMgPSBudWxsLFxuICBsZXZlbCA9IDAsXG4gIG1heERlcHRoID0gMVxuKSB7XG4gIGlmIChzY2hlbWEpIHtcbiAgICBjb25zdCBkZXB0aCA9IHByb2Nlc3NlZFNjaGVtYURlcHRocy5nZXQoc2NoZW1hKSA/PyAwXG4gICAgaWYgKGRlcHRoIDwgbWF4RGVwdGgpIHtcbiAgICAgIHByb2Nlc3NlZFNjaGVtYURlcHRocy5zZXQoc2NoZW1hLCBkZXB0aCArIDEpXG4gICAgICBjb25zdCBwcm9taXNlcyA9IFtdXG4gICAgICBjb25zdCBwcm9jZXNzID0gKGNvbXBvbmVudCwgbmFtZSwgcmVsYXRpdmVMZXZlbCkgPT4ge1xuICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgIHByb2Nlc3NTY2hlbWFDb21wb25lbnQoXG4gICAgICAgICAgICBhcGksXG4gICAgICAgICAgICBjb21wb25lbnQsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgcm91dGVzLFxuICAgICAgICAgICAgbGV2ZWwgKyByZWxhdGl2ZUxldmVsXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSwgcHJvY2VzcylcbiAgICAgIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLCBwcm9jZXNzKVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50KFxuICBhcGksXG4gIHNjaGVtYSxcbiAgbmFtZSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwXG4pIHtcbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuXG4gIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgLy8gQWxzbyBwcm9jZXNzIG5lc3RlZCBwYW5lbCBzY2hlbWFzLlxuICAgIG1hcENvbmN1cnJlbnRseShcbiAgICAgIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBwYW5lbCwgcm91dGVzLCBsZXZlbClcbiAgICApLFxuICAgIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICAgIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NTY2hlbWE/LihcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG5hbWUsXG4gICAgICByb3V0ZXMsXG4gICAgICBsZXZlbFxuICAgIClcbiAgXSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUsIGZ1bGxQYXRoID0gJycpIHtcbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIGZ1bGxQYXRoKVxuICBsZXQgY2hpbGRyZW4gPSBbXVxuICBpZiAoaXNWaWV3KHNjaGVtYSkpIHtcbiAgICBhd2FpdCBwcm9jZXNzTmVzdGVkU2NoZW1hcyhhcGksIHNjaGVtYSlcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4pXG4gIH0gZWxzZSBpZiAoaXNNZW51KHNjaGVtYSkpIHtcbiAgICBjaGlsZHJlbiA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hLml0ZW1zKS5tYXAoYXN5bmMgKFtuYW1lLCBpdGVtXSkgPT5cbiAgICAgICAgcHJvY2Vzc1ZpZXcoY29tcG9uZW50LCBhcGksIGl0ZW0sIG5hbWUsIHNjaGVtYS5mdWxsUGF0aClcbiAgICAgIClcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZpZXcgc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBzY2hlbWEuZnVsbFBhdGgsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKSB7XG4gIGxldCBkZWZhdWx0cyA9IGFwaS5kZWZhdWx0c1tzY2hlbWEudHlwZV1cbiAgaWYgKGRlZmF1bHRzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdHMpKSB7XG4gICAgICBkZWZhdWx0cyA9IGRlZmF1bHRzKHNjaGVtYSlcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KGRlZmF1bHRzKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdHMpKSB7XG4gICAgICAgIGlmIChzY2hlbWFba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NoZW1hW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjaGVtYVtrZXldID0gYXNzaWduRGVlcGx5KHNjaGVtYVtrZXldLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKSB7XG4gIC8vIFByb2Nlc3MgZGVmYXVsdHMgZm9yIG5lc3RlZCBzY2hlbWFzLiBOb3RlIHRoYXQgdGhpcyBpcyBhbHNvIGRvbmUgd2hlblxuICAvLyBjYWxsaW5nIGBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cygpYCwgYnV0IHRoYXQgZnVuY3Rpb24gaXMgYXN5bmMsIGFuZCB3ZVxuICAvLyBuZWVkIGEgc3luYyB2ZXJzaW9uIHRoYXQgb25seSBoYW5kbGVzIHRoZSBkZWZhdWx0cyBmb3IgZmlsdGVycywgc2VlXG4gIC8vIGBnZXRGaWx0ZXJzUGFuZWwoKWAuXG4gIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSwgY29tcG9uZW50ID0+IHtcbiAgICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBjb21wb25lbnQpXG4gICAgY29uc3QgZm9ybXMgPSBnZXRGb3JtU2NoZW1hcyhjb21wb25lbnQpXG4gICAgZm9yIChjb25zdCBmb3JtIG9mIE9iamVjdC52YWx1ZXMoZm9ybXMpKSB7XG4gICAgICBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBmb3JtKVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgZnVsbFBhdGggPSBudWxsKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW4uXG4gIHNjaGVtYS5uYW1lID8/PSBuYW1lXG4gIHNjaGVtYS5wYXRoID8/PSBhcGkubm9ybWFsaXplUGF0aChuYW1lKVxuICBpZiAoZnVsbFBhdGggIT09IG51bGwpIHtcbiAgICBzY2hlbWEuZnVsbFBhdGggPSBgJHtmdWxsUGF0aH0vJHtzY2hlbWEucGF0aH1gXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpIHtcbiAgY29uc3Qgcm91dGVzID0gW11cbiAgLy8gRmlyc3QgcmVzb2x2ZSB0aGUgZm9ybXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGJhY2sgb24gdGhlIHNjaGVtYS5cbiAgY29uc3QgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cywgbWF4RGVwdGggPSAxIH0gPSBzY2hlbWFcbiAgaWYgKGZvcm1zKSB7XG4gICAgc2NoZW1hLmZvcm1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoZm9ybXMsIGZvcm0gPT5cbiAgICAgIHByb2Nlc3NGb3JtKGFwaSwgZm9ybSwgcm91dGVzLCBsZXZlbCwgbWF4RGVwdGgpXG4gICAgKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBzY2hlbWEuZm9ybSA9IGF3YWl0IHByb2Nlc3NGb3JtKGFwaSwgZm9ybSwgcm91dGVzLCBsZXZlbCwgbWF4RGVwdGgpXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoY29tcG9uZW50cykpIHtcbiAgICAvLyBOT1RFOiBQcm9jZXNzaW5nIGZvcm1zIGluIGNvbXB1dGVkIGNvbXBvbmVudHMgaXMgbm90IHN1cHBvcnRlZCwgc2luY2UgaXRcbiAgICAvLyBvbmx5IGNhbiBiZSBjb21wdXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFjdHVhbCBkYXRhLlxuICAgIGNvbnN0IGZvcm0gPSB7XG4gICAgICB0eXBlOiAnZm9ybScsXG4gICAgICBjb21wb25lbnRzXG4gICAgfVxuICAgIGF3YWl0IHByb2Nlc3NGb3JtKGFwaSwgZm9ybSwgcm91dGVzLCBsZXZlbCwgbWF4RGVwdGgpXG4gIH1cbiAgcmV0dXJuIHJvdXRlc1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oXG4gIGFwaSxcbiAgc2NoZW1hLFxuICByb3V0ZXMgPSBudWxsLFxuICBsZXZlbCA9IDAsXG4gIG1heERlcHRoID0gMVxuKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzRm9ybShzY2hlbWEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZvcm0gc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICBhd2FpdCBwcm9jZXNzTmVzdGVkU2NoZW1hcyhhcGksIHNjaGVtYSlcbiAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwsIG1heERlcHRoKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVGFiKGFwaSwgc2NoZW1hKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzVGFiKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGFiIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1BhbmVsKGFwaSwgc2NoZW1hKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzUGFuZWwoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYW5lbCBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKSB7XG4gIGNvbnN0IHsgdGFicywgcGFuZWxzIH0gPSBzY2hlbWFcbiAgaWYgKHRhYnMpIHtcbiAgICBzY2hlbWEudGFicyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKFxuICAgICAgdGFicyxcbiAgICAgIHRhYiA9PiBwcm9jZXNzVGFiKGFwaSwgdGFiKVxuICAgIClcbiAgfVxuICBpZiAocGFuZWxzKSB7XG4gICAgc2NoZW1hLnBhbmVscyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKFxuICAgICAgcGFuZWxzLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1BhbmVsKGFwaSwgcGFuZWwpXG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNGb3JtU2NoZW1hKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGJvdGggc2luZ2xlIGZvcm0gYW5kIG11bHRpcGxlIGZvcm1zIG5vdGF0aW9uLCBhcyB3ZWxsIGFzIGlubGluZWRcbiAgLy8gY29tcG9uZW50cy5cbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmZvcm0gfHwgc2NoZW1hLmZvcm1zIHx8IHNjaGVtYS5jb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBPYmplY3Qua2V5cyhzY2hlbWE/LmZvcm1zIHx8IHt9KS5sZW5ndGggPiAxXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1ZpZXcoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5jb21wb25lbnQpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB7IHZpZXcgfSA9IHNjaGVtYVxuICBjb25zdCB2aWV3U2NoZW1hID0gdmlldyAmJiBjb250ZXh0LmZsYXR0ZW5lZFZpZXdzW3ZpZXddXG4gIHJldHVybiB2aWV3U2NoZW1hXG4gICAgPyAvLyBOT1RFOiBWaWV3cyBjYW4gaGF2ZSB0YWJzLCBpbiB3aGljaCBjYXNlIHRoZSB2aWV3IGNvbXBvbmVudCBpcyBuZXN0ZWRcbiAgICAgIC8vIGluIG9uZSBvZiB0aGUgdGFicywgZ28gZmluZCBpdC5cbiAgICAgIGZpbmROZXN0ZWRTY2hlbWFDb21wb25lbnQodmlld1NjaGVtYSwgaGFzRm9ybVNjaGVtYSkgfHwgbnVsbFxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgICA/IGNvbnRleHQuZmxhdHRlbmVkVmlld3Nbc2NoZW1hLnZpZXddXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICByZXR1cm4gISFnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdFZGl0UGF0aChzY2hlbWEsIGlkLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXcpIHtcbiAgICBjb25zdCBwYXRoID0gaXNTaW5nbGVDb21wb25lbnRWaWV3KHZpZXcpXG4gICAgICA/IHZpZXcuZnVsbFBhdGhcbiAgICAgIDogYCR7dmlldy5mdWxsUGF0aH0vJHt2aWV3LnBhdGh9YFxuICAgIHJldHVybiBgJHtwYXRofS8ke2lkfWBcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBtb2RpZnlGb3JtKSB7XG4gIGNvbnN0IHZpZXdTY2hlbWEgPSBjb250ZXh0ICYmIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXdTY2hlbWEpIHtcbiAgICBzY2hlbWEgPSB2aWV3U2NoZW1hXG4gIH0gZWxzZSBpZiAoc2NoZW1hLnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmlldzogJyR7c2NoZW1hLnZpZXd9J2ApXG4gIH1cblxuICBsZXQgeyBmb3JtLCBmb3JtcyB9ID0gc2NoZW1hXG4gIGlmICghZm9ybSAmJiAhZm9ybXMpIHtcbiAgICBjb25zdCB7IG5hbWUsIGNvbXBhY3QsIGNsaXBib2FyZCwgdGFicywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gICAgaWYgKGNvbXBvbmVudHMgfHwgdGFicykge1xuICAgICAgLy8gQ29udmVydCBpbmxpbmVkIGZvcm1zIHRvIHN0YW5kLWFsb25lIGZvcm1zLCBzdXBwb3J0aW5nIGBuYW1lYCxcbiAgICAgIC8vIGBjb21wYWN0YCwgYGNsaXBib2FyZGAsIGB0YWJzYCBhbmQgYGNvbXBvbmVudHNgIHNldHRpbmdzLlxuICAgICAgZm9ybSA9IHsgdHlwZTogJ2Zvcm0nLCBuYW1lLCBjb21wYWN0LCBjbGlwYm9hcmQsIHRhYnMsIGNvbXBvbmVudHMgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBgZm9ybXNgLCBgZm9ybWAgb3IgYGNvbXBvbmVudHNgLCByZXR1cm4gYW5kIGVtcHR5IGBmb3Jtc2Agb2JqZWN0LlxuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGZvcm1zKS5tYXAoKFt0eXBlLCBmb3JtXSkgPT4ge1xuICAgICAgLy8gU3VwcG9ydCBgc2NoZW1hLmNvbXBvbmVudHNgIGNhbGxiYWNrcyB0byBjcmVhdGUgY29tcG9uZW50cyBvbiB0aGUgZmx5LlxuICAgICAgaWYgKGNvbnRleHQgJiYgaXNGdW5jdGlvbihmb3JtLmNvbXBvbmVudHMpKSB7XG4gICAgICAgIC8vIE1ha2UgdGhlIGZvcm0gc2NoZW1hIHJlYWN0aXZlIHNpbmNlIGBwcm9jZXNzRm9ybSgpYCBpcyBhc3luYywgc28gdGhhdFxuICAgICAgICAvLyB0aGUgc2V0dGluZyBvZiBkZWZhdWx0cyB3aWxsIGJlIHBpY2tlZCB1cCBieSBkb3duc3RyZWFtIGNvZGUuXG4gICAgICAgIGZvcm0gPSByZWFjdGl2ZSh7XG4gICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmb3JtLmNvbXBvbmVudHMoY29udGV4dClcbiAgICAgICAgfSlcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgZm9ybSBhZ2Fpbiwgbm93IHRoYXQgd2UgaGF2ZSB0aGUgY29tcG9uZW50cy5cbiAgICAgICAgcHJvY2Vzc0Zvcm0oY29udGV4dC5hcGksIGZvcm0pLmNhdGNoKGNvbnNvbGUuZXJyb3IpXG4gICAgICB9XG4gICAgICByZXR1cm4gW3R5cGUsIG1vZGlmeUZvcm0/Lihmb3JtKSA/PyBmb3JtXVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKSB7XG4gIHJldHVybiBmb3Jtc1tpdGVtPy50eXBlXSB8fCBmb3Jtcy5kZWZhdWx0IHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dCkge1xuICByZXR1cm4gKFxuICAgIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCksIGl0ZW0pIHx8XG4gICAgLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgZW1wdHlTY2hlbWFcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eVNjaGVtYShzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYSA9PT0gZW1wdHlTY2hlbWFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGFjdChzY2hlbWEpIHtcbiAgcmV0dXJuICEhc2NoZW1hLmNvbXBhY3Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5saW5lZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5pbmxpbmVkIHx8IHNjaGVtYS5jb21wb25lbnRzKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEubmVzdGVkIHx8IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHROZXN0ZWQgPT09IHRydWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbChzY2hlbWEsIGdlbmVyYXRlTGFiZWxzKSB7XG4gIGNvbnN0IHsgbGFiZWwgfSA9IHNjaGVtYVxuICByZXR1cm4gKFxuICAgIGxhYmVsICE9PSBmYWxzZSAmJiAoXG4gICAgICAhIWxhYmVsIHx8XG4gICAgICBnZW5lcmF0ZUxhYmVscyAmJiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZW5lcmF0ZUxhYmVsXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbWl0U3BhY2luZyhzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ub21pdFNwYWNpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYVZhbHVlKFxuICBrZXlPckRhdGFQYXRoLFxuICB7IHR5cGUsIHNjaGVtYSwgY2FsbGJhY2sgPSB0cnVlLCBkZWZhdWx0OiBkZWYsIGNvbnRleHQgfSA9IHt9XG4pIHtcbiAgY29uc3QgdHlwZXMgPSB0eXBlICYmIGFzQXJyYXkodHlwZSlcbiAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGRhdGEtcGF0aHMgaW4gYGtleU9yRGF0YVBhdGhgIGNhbiBvbmx5IGJlXG4gIC8vIHByb3ZpZGVkIGluIGluIGFycmF5IGZvcm1hdCBoZXJlOlxuICBsZXQgdmFsdWUgPSBzY2hlbWFcbiAgICA/IGlzQXJyYXkoa2V5T3JEYXRhUGF0aClcbiAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHNjaGVtYSwga2V5T3JEYXRhUGF0aCwgKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgOiBzY2hlbWFba2V5T3JEYXRhUGF0aF1cbiAgICA6IHVuZGVmaW5lZFxuXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oZGVmKSAmJiAhaXNNYXRjaGluZ1R5cGUodHlwZXMsIGRlZikpIHtcbiAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zIGZvciBhbnkgdHlwZSBleGNlcHQgYEZ1bmN0aW9uYDpcbiAgICAgIGRlZiA9IGRlZihjb250ZXh0KVxuICAgIH1cbiAgICByZXR1cm4gZGVmXG4gIH1cblxuICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG4gIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAvLyBhIGZ1bmN0aW9uIHRoYXQncyByZXNvbHZlZCB3aGVuIHRoZSB2YWx1ZSBpcyBldmFsdWF0ZWQ6XG4gIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhbHVlID0gdmFsdWUoY29udGV4dClcbiAgfVxuICAvLyBOb3cgZmluYWxseSBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgdG8gdGhlIGV4cGVjdCB0eXBlcy5cbiAgaWYgKHR5cGVzICYmIHZhbHVlICE9IG51bGwgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKVxuICAgICAgaWYgKGNvbnZlcnRlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuIChcbiAgICBnZXRTY2hlbWFWYWx1ZSgnaWYnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgc2NoZW1hLFxuICAgICAgY29udGV4dCxcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSAmJiAoXG4gICAgICAhaGFzTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEpIHx8XG4gICAgICBzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY29tcG9uZW50ID0+XG4gICAgICAgIHNob3VsZFJlbmRlclNjaGVtYShjb21wb25lbnQsIGNvbnRleHQpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHQoY29udGV4dCkge1xuICByZXR1cm4gaXNGdW5jdGlvbihjb250ZXh0KSA/IGNvbnRleHQoKSA6IGNvbnRleHRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZShzY2hlbWEsIGNvbnRleHQpIHtcbiAgLy8gU3VwcG9ydCBkZWZhdWx0IHZhbHVlcyBib3RoIG9uIHNjaGVtYSBhbmQgb24gY29tcG9uZW50IGxldmVsLlxuICAvLyBOT1RFOiBBdCB0aGUgdGltZSBvZiBjcmVhdGlvbiwgY29tcG9uZW50cyBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCwgKGUuZy4gaWZcbiAgLy8gZW50cmllcyBhcmUgY3JlYXRlZCB0aHJvdWdoIG5lc3RlZCBmb3JtcywgdGhlIHBhcmVudCBmb3JtIGlzbid0IG1vdW50ZWQpIHNvXG4gIC8vIHdlIGNhbid0IHVzZSBgZGF0YVBhdGhgIHRvIGdldCB0byBjb21wb25lbnRzLCBhbmQgdGhlIGBkZWZhdWx0VmFsdWVgIGZyb21cbiAgLy8gdGhlcmUuIFRoYXQncyB3aHkgYGRlZmF1bHRWYWx1ZWAgaXMgZGVmaW5lZCBzdGF0aWNhbGx5IGluIHRoZSBjb21wb25lbnRzOlxuICBjb25zdCBkZWZhdWx0VmFsdWUgPVxuICAgIHNjaGVtYS5kZWZhdWx0ICE9PSB1bmRlZmluZWRcbiAgICAgID8gc2NoZW1hLmRlZmF1bHRcbiAgICAgIDogZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdFZhbHVlXG4gIHJldHVybiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSlcbiAgICA/IGRlZmF1bHRWYWx1ZShnZXRDb250ZXh0KGNvbnRleHQpKVxuICAgIDogY2xvbmUoZGVmYXVsdFZhbHVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkRXhjbHVkZVZhbHVlKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCBleGNsdWRlVmFsdWUgPVxuICAgIHNjaGVtYS5leGNsdWRlICE9PSB1bmRlZmluZWRcbiAgICAgID8gc2NoZW1hLmV4Y2x1ZGVcbiAgICAgIDogZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZXhjbHVkZVZhbHVlXG4gIHJldHVybiBpc0Z1bmN0aW9uKGV4Y2x1ZGVWYWx1ZSlcbiAgICA/IGV4Y2x1ZGVWYWx1ZShnZXRDb250ZXh0KGNvbnRleHQpKVxuICAgIDogISFleGNsdWRlVmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZElnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oZ2V0Q29udGV4dChjb250ZXh0KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZXMoc2NoZW1hLCBkYXRhID0ge30sIGNvbXBvbmVudCkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHJvb3REYXRhOiBkYXRhIH1cblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gKCkgPT5cbiAgICAgIG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBuYW1lLFxuICAgICAgICBkYXRhLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGFcbiAgICAgIH0pXG4gICAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhc2hvdWxkSWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSwgY29udGV4dCkpIHtcbiAgICAgIGRhdGFbbmFtZV0gPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hLCBjb250ZXh0KVxuICAgIH1cbiAgfVxuXG4gIC8vIFNldHMgdXAgYSBkYXRhIG9iamVjdCB0aGF0IGhhcyBrZXlzIHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbFxuICAvLyBmb3JtIGZpZWxkcywgc28gdGhleSBjYW4gYmUgY29ycmVjdGx5IHdhdGNoZWQgZm9yIGNoYW5nZXMuXG4gIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsXG4gICAgZGF0YSxcbiAgICBudWxsLFxuICAgIG51bGwsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBudWxsLFxuICAgIG9wdGlvbnNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50ID0gbnVsbCxcbiAgcm9vdERhdGEgPSBjb21wb25lbnQ/LnJvb3REYXRhXG59ID0ge30pIHtcbiAgY29uc3QgY29udGV4dCA9ICgpID0+XG4gICAgbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwge1xuICAgICAgc2NoZW1hLFxuICAgICAgLy8gT3ZlcnJpZGUgdmFsdWUgdG8gcHJldmVudCBlbmRsZXNzIHJlY3Vyc2lvbiB0aHJvdWdoIGNhbGxpbmcgdGhlXG4gICAgICAvLyBnZXR0ZXIgZm9yIGB0aGlzLnZhbHVlYCBpbiBgRGl0b0NvbnRleHRgOlxuICAgICAgdmFsdWU6IGRhdGFbbmFtZV0sXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGFcbiAgICB9KVxuICBjb25zdCB7IGNvbXB1dGUgfSA9IHNjaGVtYVxuICBpZiAoY29tcHV0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZShnZXRDb250ZXh0KGNvbnRleHQpKVxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBY2Nlc3MgYGRhdGFbbmFtZV1gIGRpcmVjdGx5IHRvIHVwZGF0ZSB0aGUgdmFsdWUgd2l0aG91dCBjYWxsaW5nXG4gICAgICAvLyBwYXJzZSgpOlxuICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgZGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgfVxuICB9XG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBzdGlsbCBtaXNzaW5nIGFmdGVyIGNvbXB1dGUsIHNldCB0aGUgZGVmYXVsdCBmb3IgaXQ6XG4gIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIXNob3VsZElnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEsIGNvbnRleHQpKSB7XG4gICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSwgY29udGV4dClcbiAgfVxuICAvLyBOb3cgYWNjZXNzIHRoZSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHJlYWN0aXZpdHkgYW5kIG5lZWRzIHRvXG4gIC8vIGhhcHBlbiBhZnRlciBhbGwgcHJpb3IgbWFuaXB1bGF0aW9uIG9mIGBkYXRhW25hbWVdYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHJvb3REYXRhLFxuICBzY2hlbWFPbmx5LCAvLyB3aGV0aGVyIHRvIG9ubHkgaW5jbHVkZSBkYXRhIGNvdmVyZWQgYnkgdGhlIHNjaGVtYSwgb3IgYWxsIGRhdGFcbiAgdGFyZ2V0XG59ID0ge30pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YSwgc2NoZW1hT25seSwgdGFyZ2V0IH1cbiAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGRhdGEsIG9wdGlvbnMpXG4gIGNvbnN0IGdyYXBoID0gbmV3IFNjaGVtYUdyYXBoKClcblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgb3B0aW9ucylcbiAgICAvLyBUaGUgc2NoZW1hIGV4cGVjdHMgdGhlIGB3cmFwUHJpbWl0aXZlc2AgdHJhbnNmb3JtYXRpb25zIHRvIGJlIHByZXNlbnQgb25cbiAgICAvLyB0aGUgZGF0YSB0aGF0IGl0IGlzIGFwcGxpZWQgb24sIHNvIHdhcnAgYmVmb3JlIGFuZCB1bndyYXAgYWZ0ZXIuXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBvcmRlcktleSwgaWRLZXkgPSAnaWQnIH0gPSBzY2hlbWFcbiAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChlbnRyeSA9PiAoe1xuICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IGVudHJ5XG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWx3YXlzIHNoYWxsb3ctY2xvbmUgYXJyYXkgdmFsdWVzOlxuICAgICAgICB2YWx1ZSA9IFsuLi52YWx1ZV1cbiAgICAgIH1cbiAgICAgIGlmIChvcmRlcktleSAmJiB0YXJnZXQgPT09ICdjbGlwYm9hcmQnKSB7XG4gICAgICAgIC8vIFNvcnQgdGhlIGRhdGEgYmFjayBpbnRvIHRoZSBuYXR1cmFsIHNlcXVlbmNlIGFzIGRlZmluZWQgYnkgdGhlaXIgaWRzLFxuICAgICAgICAvLyBzbyBjb3B5LXBhc3RpbmcgYmV0d2VlbiBzZXJ2ZXJzIChlLmcuIG5lc3RlZCBmb250LWN1dHMgb24gTGluZXRvKVxuICAgICAgICAvLyBuYXR1cmFsbHkgZ2V0cyBtYXBwZWQgdG8gdGhlIHNhbWUgZW50cmllcyBpbiB0aGUgZ3JhcGguXG4gICAgICAgIHZhbHVlLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCBpZDEgPSBhPy5baWRLZXldXG4gICAgICAgICAgY29uc3QgaWQyID0gYj8uW2lkS2V5XVxuICAgICAgICAgIHJldHVybiBpZDEgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMSlcbiAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMilcbiAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICA6IGlkMSAtIGlkMlxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IHByb2Nlc3NBZnRlciA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgcHJvY2VzcyB9ID0gc2NoZW1hXG4gICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YVtuYW1lXVxuXG4gICAgLy8gTk9URTogV2UgZG9uJ3QgY2FjaGUgdGhpcyBjb250ZXh0LCBzaW5jZSBgdmFsdWVgIGlzIGNoYW5naW5nLlxuICAgIGNvbnN0IGNvbnRleHQgPSAoKSA9PlxuICAgICAgbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBuYW1lLFxuICAgICAgICBkYXRhLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGEsXG4gICAgICAgIC8vIFBhc3MgdGhlIGFscmVhZHkgcHJvY2Vzc2VkIGRhdGEgdG8gYHByb2Nlc3MoKWAsIHNvIGl0IGNhbiBiZSBtb2RpZmllZFxuICAgICAgICAvLyB0aHJvdWdoIGBwcm9jZXNzZWRJdGVtYCBmcm9tIHRoZXJlLlxuICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICB9KVxuXG4gICAgLy8gRmlyc3QgdW53cmFwIHRoZSB3cmFwcGVkIHByaW1pdGl2ZXMgYWdhaW4sIHRvIGJyaW5nIHRoZSBkYXRhIGJhY2sgaW50b1xuICAgIC8vIGl0cyBuYXRpdmUgZm9ybS4gU2UgYHByb2Nlc3NCZWZvcmUoKWAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgIH1cblxuICAgIC8vIEVhY2ggY29tcG9uZW50IHR5cGUgY2FuIHByb3ZpZGUgaXRzIG93biBzdGF0aWMgYHByb2Nlc3NWYWx1ZSgpYCBtZXRob2RcbiAgICAvLyB0byBjb252ZXJ0IHRoZSBkYXRhIGZvciBzdG9yYWdlLlxuICAgIGNvbnN0IHByb2Nlc3NWYWx1ZSA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NWYWx1ZVxuICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKGdldENvbnRleHQoY29udGV4dCksIGdyYXBoKVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgdXNlcidzIGBwcm9jZXNzKClgIGNhbGxiYWNrIG5leHQsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoY29udGV4dCkpXG4gICAgfVxuXG4gICAgaWYgKHNob3VsZEV4Y2x1ZGVWYWx1ZShzY2hlbWEsIGNvbnRleHQpKSB7XG4gICAgICBkZWxldGUgcHJvY2Vzc2VkRGF0YVtuYW1lXVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsXG4gICAgZGF0YSxcbiAgICBkYXRhUGF0aCxcbiAgICBwcm9jZXNzZWREYXRhLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgcHJvY2Vzc0FmdGVyLFxuICAgIG9wdGlvbnNcbiAgKVxuXG4gIHJldHVybiBncmFwaC5wcm9jZXNzKHNvdXJjZVNjaGVtYSwgcHJvY2Vzc2VkRGF0YSwgb3B0aW9ucylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFEYXRhKFxuICBzY2hlbWEsXG4gIGRhdGEsXG4gIGRhdGFQYXRoLFxuICBwcm9jZXNzZWREYXRhLFxuICBwcm9jZXNzQmVmb3JlLFxuICBwcm9jZXNzQWZ0ZXIsXG4gIG9wdGlvbnNcbikge1xuICBjb25zdCBwcm9jZXNzQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT4ge1xuICAgIGNvbnN0IGdldERhdGFQYXRoID0gKGRhdGFQYXRoLCB0b2tlbikgPT5cbiAgICAgIGRhdGFQYXRoICE9IG51bGxcbiAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pXG4gICAgICAgIDogbnVsbFxuXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKCFpc05lc3RlZChjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIHVubmVzdGVkIGNvbXBvbmVudHMuXG4gICAgICAgICAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhLFxuICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RGF0YVBhdGggPSBnZXREYXRhUGF0aChkYXRhUGF0aCwgbmFtZSlcblxuICAgICAgICAgIGNvbnN0IHByb2Nlc3NJdGVtID0gKGl0ZW0sIGluZGV4ID0gbnVsbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbURhdGFQYXRoID1cbiAgICAgICAgICAgICAgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgICAgICA/IGdldERhdGFQYXRoKGNvbXBvbmVudERhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBkYXRhUGF0aDogY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICBnZXRGb3JtU2NoZW1hc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgZm9ybXMgPSBnZXRGb3Jtcyhjb21wb25lbnRTY2hlbWEsIGNvbnRleHQpXG4gICAgICAgICAgICBjb25zdCBmb3JtID0gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pXG4gICAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRJdGVtID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gY2xvbmVJdGVtKGNvbXBvbmVudFNjaGVtYSwgaXRlbSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgICAgICAgICAgICAgIGZvcm0sXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBpdGVtRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc0FmdGVyPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGNvbXBvbmVudERhdGFQYXRoLFxuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBmb3IgKGNvbnN0IHRhYiBvZiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyh0YWIuY29tcG9uZW50cylcbiAgfVxuICBmb3IgKGNvbnN0IHBhbmVsIG9mIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuY29tcG9uZW50cylcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWREYXRhIHx8IGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkU2NoZW1hcyhzY2hlbWFzLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0b1NjaGVtYSh2YWx1ZSlcbiAgICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID1cbiAgICAgICAgICAgICAgc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgICAgIDogc2NoZW1hXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgICAgfSwge30pXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBpc0FycmF5KHNjaGVtYXMpXG4gICAgPyB0b09iamVjdChzY2hlbWFzLCB2YWx1ZSA9PlxuICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG5hbWU6IGNhbWVsaXplKHZhbHVlLCBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgIClcbiAgICA6IGlzT2JqZWN0KHNjaGVtYXMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiAoXG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKT8uZ2V0U291cmNlVHlwZT8uKGdldFR5cGUoc2NoZW1hT3JUeXBlKSkgPz9cbiAgICBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsRW50cnkoc2NoZW1hLCBkYXRhUGF0aCA9IG51bGwsIHRhYkNvbXBvbmVudCA9IG51bGwpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIG5hbWUsIGFwcGVuZCBpdCB0byB0aGUgZGF0YVBhdGguXG4gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgIGRhdGFQYXRoICE9IG51bGwgJiYgc2NoZW1hLm5hbWVcbiAgICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNjaGVtYS5uYW1lKVxuICAgICAgICAgICAgOiBkYXRhUGF0aCxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbEVudHJpZXMoXG4gIHBhbmVsU2NoZW1hcyxcbiAgZGF0YVBhdGgsXG4gIHRhYkNvbXBvbmVudCA9IG51bGwsXG4gIHBhbmVsRW50cmllcyA9IFtdXG4pIHtcbiAgaWYgKHBhbmVsU2NoZW1hcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhwYW5lbFNjaGVtYXMpKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGdldFBhbmVsRW50cnkoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGtleSksXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHBhbmVsRW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxFbnRyaWVzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy50YWJzID8gT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicykgOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy5wYW5lbHMgPyBPYmplY3QudmFsdWVzKHNjaGVtYS5wYW5lbHMpIDogW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFBhbmVsRW50cmllcyhcbiAgYXBpLFxuICBzY2hlbWEsXG4gIGRhdGFQYXRoLFxuICBjb21wb25lbnQgPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsXG4pIHtcbiAgY29uc3QgcGFuZWxTY2hlbWEgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZXRQYW5lbFNjaGVtYT8uKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgZGF0YVBhdGgsXG4gICAgY29tcG9uZW50XG4gIClcbiAgY29uc3QgcGFuZWxFbnRyaWVzID0gcGFuZWxTY2hlbWFcbiAgICA/IFtnZXRQYW5lbEVudHJ5KHBhbmVsU2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV1cbiAgICA6IFtdXG4gIC8vIEFsbG93IGVhY2ggY29tcG9uZW50IHRvIHByb3ZpZGUgaXRzIG93biBzZXQgb2YgcGFuZWxzLCBpblxuICAvLyBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBvbmUgKGUuZy4gZ2V0RmlsdGVyc1BhbmVsKCksICRmaWx0ZXJzKTpcbiAgZ2V0UGFuZWxFbnRyaWVzKHNjaGVtYT8ucGFuZWxzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbEVudHJpZXMpXG4gIHJldHVybiBwYW5lbEVudHJpZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnb2JqZWN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaXN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnbGlzdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgY29uc3QgaWQgPSBpdGVtW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICByZXR1cm4gaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIC8vIFRyeSB0byB1c2UgdGhlIGl0ZW0gaWQgYXMgdGhlIHVpZCwgZmFsbGluZyBiYWNrIG9uIGF1dG8tZ2VuZXJhdGVkIGlkcywgYnV0XG4gIC8vIGVpdGhlciB3YXksIHBhc3MgdGhyb3VnaCBgZ2V0VWlkKClgIHNvIHRoYXQgdGhlIGlkcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBpdGVtIHRocm91Z2ggYSB3ZWFrIG1hcCwgYXMgdGhlIGlkcyBjYW4gYmUgZmlsdGVyZWQgb3V0IGluIGBwcm9jZXNzRGF0YSgpYFxuICAvLyB3aGlsZSB0aGUgY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgdWlkcyBhcyBrZXkgYXJlIHN0aWxsIHZpc2libGUuXG4gIHJldHVybiBnZXRVaWQoaXRlbSwgaXRlbSA9PiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSlcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzT2JqZWN0LCBpc1N0cmluZywgcGlja0J5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Jlc291cmNlKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRSZXNvdXJjZShzY2hlbWEucmVzb3VyY2UpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNvdXJjZShyZXNvdXJjZSwgZGVmYXVsdHMgPSB7fSkge1xuICBjb25zdCB7IHBhcmVudCwgLi4uZGVmcyB9ID0gZGVmYXVsdHNcbiAgaWYgKGlzRnVuY3Rpb24ocmVzb3VyY2UpKSB7XG4gICAgcmVzb3VyY2UgPSByZXNvdXJjZShkZWZhdWx0cylcbiAgfVxuICByZXNvdXJjZSA9IGlzT2JqZWN0KHJlc291cmNlKVxuICAgID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSlcbiAgICAgID8geyAuLi5kZWZzLCBwYXRoOiByZXNvdXJjZSB9XG4gICAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICAgIHR5cGU6ICdtZW1iZXInLFxuICAgICAgICAuLi5waWNrQnkoXG4gICAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICAgKHZhbHVlLCBrZXkpID0+IFsnbWV0aG9kJywgJ3BhdGgnLCAncGFyZW50J10uaW5jbHVkZXMoa2V5KVxuICAgICAgICApLFxuICAgICAgICBpZDogYCR7aWR9YFxuICAgICAgfVxuICAgIDogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0Z1bmN0aW9uLFxuICBlcXVhbHMsXG4gIGxhYmVsaXplLFxuICBoeXBoZW5hdGUsXG4gIGZvcm1hdFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IGFwcFN0YXRlIGZyb20gJy4uL2FwcFN0YXRlLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IEVtaXR0ZXJNaXhpbiBmcm9tICcuL0VtaXR0ZXJNaXhpbi5qcydcbmltcG9ydCB7XG4gIGZsYXR0ZW5WaWV3cyxcbiAgZ2V0U2NoZW1hVmFsdWUsXG4gIHNob3VsZFJlbmRlclNjaGVtYVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGNvbXB1dGVkLCByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRW1pdHRlck1peGluXSxcblxuICBpbmplY3Q6IFtcbiAgICAnYXBpJyxcbiAgICAnJHZlcmJzJyxcbiAgICAnJHZpZXdzJyxcbiAgICAnJGlzUG9wdWxhdGVkJyxcbiAgICAnJHBhcmVudENvbXBvbmVudCcsXG4gICAgJyRzY2hlbWFDb21wb25lbnQnLFxuICAgICckcm91dGVDb21wb25lbnQnLFxuICAgICckZGF0YUNvbXBvbmVudCcsXG4gICAgJyRzb3VyY2VDb21wb25lbnQnLFxuICAgICckcmVzb3VyY2VDb21wb25lbnQnLFxuICAgICckZGlhbG9nQ29tcG9uZW50JyxcbiAgICAnJHBhbmVsQ29tcG9uZW50JyxcbiAgICAnJHRhYkNvbXBvbmVudCdcbiAgXSxcblxuICBwcm92aWRlKCkge1xuICAgIGNvbnN0IHNlbGYgPSAoKSA9PiB0aGlzXG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhXG4gICAgICA/IHtcbiAgICAgICAgICAkcGFyZW50Q29tcG9uZW50OiBzZWxmLFxuICAgICAgICAgICRkYXRhQ29tcG9uZW50OiBzZWxmXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgICRwYXJlbnRDb21wb25lbnQ6IHNlbGZcbiAgICAgICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcFN0YXRlLFxuICAgICAgaXNNb3VudGVkOiBmYWxzZSxcbiAgICAgIG92ZXJyaWRlczogbnVsbCAvLyBTZWUgYWNjZXNzb3IuanNcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBOT1RFOiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gUmVzb3VyY2VNaXhpbiwgdXNlZCBieSBsaXN0cy5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhPy5zY2hlbWFcbiAgICB9LFxuXG4gICAgdXNlcigpIHtcbiAgICAgIHJldHVybiBhcHBTdGF0ZS51c2VyXG4gICAgfSxcblxuICAgIC8vICR2ZXJicywgJHZlcmJzIGFuZCAkaXNQb3B1bGF0ZWQgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZVxuICAgIC8vIHJlYWN0aXZlbmVzcyBhY3Jvc3MgcHJvdmlkZS9pbmplY3QuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICB2ZXJicygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2ZXJicygpXG4gICAgfSxcblxuICAgIHZpZXdzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZpZXdzKClcbiAgICB9LFxuXG4gICAgZmxhdHRlbmVkVmlld3MoKSB7XG4gICAgICByZXR1cm4gZmxhdHRlblZpZXdzKHRoaXMudmlld3MpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRyZWZzLnJvb3RcbiAgICB9LFxuXG4gICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gRGl0b1NjaGVtYSBjYW5cbiAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgIHBhcmVudENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnRDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2NoZW1hQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50Q29tcG9uZW50KHRoaXMsICdzY2hlbWFDb21wb25lbnQnKVxuICAgIH0sXG5cbiAgICBwYXJlbnRSb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRDb21wb25lbnQodGhpcywgJ3JvdXRlQ29tcG9uZW50JylcbiAgICB9LFxuXG4gICAgcGFyZW50Rm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRDb21wb25lbnQodGhpcywgJ2Zvcm1Db21wb25lbnQnKVxuICAgIH0sXG5cbiAgICBwYXJlbnRSZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRDb21wb25lbnQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JylcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmlzTW91bnRlZCA9IHRydWVcbiAgfSxcblxuICBiZWZvcmVDcmVhdGUoKSB7XG4gICAgY29uc3QgdWlkID0gbmV4dFVpZCsrXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICckdWlkJywgeyBnZXQ6ICgpID0+IHVpZCB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBsYWJlbGl6ZSxcblxuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICB0aGlzLnN0b3JlW2tleV0gPSB2YWx1ZVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHJlbW92ZVN0b3JlKGtleSkge1xuICAgICAgZGVsZXRlIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBnZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleD8uW2luZGV4XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgsIGtleSkge1xuICAgICAgdGhpcy5zdG9yZS4ka2V5c0J5SW5kZXggPz89IHt9XG4gICAgICB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleFtpbmRleF0gPSBrZXlcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXksIGluZGV4KSB7XG4gICAgICBsZXQgc3RvcmUgPSB0aGlzLmdldFN0b3JlKGtleSlcbiAgICAgIGlmICghc3RvcmUgJiYgaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAvLyBXaGVuIHN0b3JpbmcsIHRlbXBvcmFyeSBpZHMgY2hhbmdlIHRvIHBlcm1hbmVudCBvbmVzIGFuZCB0aHVzIHRoZSBrZXlcbiAgICAgICAgLy8gY2FuIGNoYW5nZS4gVG8gc3RpbGwgZmluZCB0aGUgc3RvcmUsIHdlIHJlZmVyZW5jZSBieSBpbmRleCBhcyB3ZWxsLFxuICAgICAgICAvLyB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIHN0b3JlIGFnYWluIGFmdGVyIHRoZSBpdGVtIHdhcyBzYXZlZC5cbiAgICAgICAgY29uc3Qgb2xkS2V5ID0gdGhpcy5nZXRTdG9yZUtleUJ5SW5kZXgoaW5kZXgpXG4gICAgICAgIHN0b3JlID0gdGhpcy5nZXRTdG9yZShvbGRLZXkpXG4gICAgICAgIGlmIChzdG9yZSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RvcmUoa2V5LCBzdG9yZSlcbiAgICAgICAgICB0aGlzLnJlbW92ZVN0b3JlKG9sZEtleSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFzdG9yZSkge1xuICAgICAgICBzdG9yZSA9IHRoaXMuc2V0U3RvcmUoa2V5LCByZWFjdGl2ZSh7fSkpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAvLyB0ZW1wb3JhcnkgdWlkIGtleXMgd2lsbCBjaGFuZ2UgYmV0d2VlbiBwZXJzaXN0ZW5jZSwgc28gd2UgbmVlZCB0b1xuICAgICAgICAvLyBhc3NpZ24gdGhlIGtleSB0byB0aGUgaW5kZXggZXZlbiB3aGVuIHRoZSBzdG9yZSBhbHJlYWR5IGV4aXN0ZWQuXG4gICAgICAgIHRoaXMuc2V0U3RvcmVLZXlCeUluZGV4KGluZGV4LCBrZXkpXG4gICAgICB9XG4gICAgICByZXR1cm4gc3RvcmVcbiAgICB9LFxuXG4gICAgcmVtb3ZlQ2hpbGRTdG9yZShrZXksIGluZGV4KSB7XG4gICAgICAvLyBHRXQgdGhlIGNoaWxkLXN0b3JlIGZpcnN0LCBzbyB0aGF0IGluZGljZXMgY2FuIGJlIHRyYW5zZmVycmVkIG92ZXJcbiAgICAgIC8vIHRlbXBvcmFyeSBpZCBjaGFuZ2VzIGR1cmluZyBwZXJzaXN0ZW5jZS5cbiAgICAgIHRoaXMuZ2V0Q2hpbGRTdG9yZShrZXksIGluZGV4KVxuICAgICAgdGhpcy5yZW1vdmVTdG9yZShrZXkpXG4gICAgfSxcblxuICAgIGdldFNjaGVtYVZhbHVlKFxuICAgICAga2V5T3JEYXRhUGF0aCxcbiAgICAgIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgZGVmYXVsdDogZGVmLFxuICAgICAgICBzY2hlbWEgPSB0aGlzLnNjaGVtYSxcbiAgICAgICAgY29udGV4dCA9IHRoaXMuY29udGV4dCxcbiAgICAgICAgY2FsbGJhY2sgPSB0cnVlXG4gICAgICB9ID0ge31cbiAgICApIHtcbiAgICAgIHJldHVybiBnZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgIGRlZmF1bHQ6IGlzRnVuY3Rpb24oZGVmKSA/ICgpID0+IGRlZi5jYWxsKHRoaXMpIDogZGVmXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRMYWJlbChzY2hlbWEsIG5hbWUpIHtcbiAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdsYWJlbCcsIHsgc2NoZW1hLCB0eXBlOiBbU3RyaW5nLCBPYmplY3RdIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNsYXNzOiBgZGl0by1idXR0b24tJHt2ZXJifWAsXG4gICAgICAgIHRpdGxlOiBsYWJlbGl6ZSh2ZXJiKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgKkxpbmsoKSB0byAqUm91dGUoKS5cbiAgICBnZXRRdWVyeUxpbmsocXVlcnkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICAvLyBQcmVzZXJ2ZSBoYXNoIGZvciB0YWJzOlxuICAgICAgICBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gc2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBzaG91bGRTaG93U2NoZW1hKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYVZhbHVlKCd2aXNpYmxlJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3VsZERpc2FibGVTY2hlbWEoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2Rpc2FibGVkJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpIHtcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIHtcbiAgICAgICAgLy8gUmVzb3VyY2VzIHdpdGhvdXQgYSBwYXJlbnQgaW5oZXJpdCB0aGUgb25lIGZyb20gYGRhdGFDb21wb25lbnRgXG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkuXG4gICAgICAgIHBhcmVudDogdGhpcy5kYXRhQ29tcG9uZW50Py5nZXRSZXNvdXJjZSh7XG4gICAgICAgICAgbWV0aG9kOiByZXNvdXJjZT8ubWV0aG9kLFxuICAgICAgICAgIGNoaWxkOiByZXNvdXJjZVxuICAgICAgICB9KSA/PyBudWxsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc291cmNlcy5hbnkocmVzb3VyY2UpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIHJldHVybiB1cmwgPyB0aGlzLmFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5OiByZXNvdXJjZS5xdWVyeSB9KSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qoe1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBxdWVyeSxcbiAgICAgIGRhdGEsXG4gICAgICBzaWduYWwsXG4gICAgICBpbnRlcm5hbFxuICAgIH0pIHtcbiAgICAgIHVybCB8fD0gdGhpcy5nZXRSZXNvdXJjZVVybChyZXNvdXJjZSlcbiAgICAgIG1ldGhvZCB8fD0gcmVzb3VyY2U/Lm1ldGhvZFxuICAgICAgY29uc3QgY2hlY2tVc2VyID0gIWludGVybmFsICYmIHRoaXMuYXBpLmlzQXBpVXJsKHVybClcbiAgICAgIGlmIChjaGVja1VzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmVuc3VyZVVzZXIoKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5yZXF1ZXN0KHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmwsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhLFxuICAgICAgICBzaWduYWxcbiAgICAgIH0pXG4gICAgICAvLyBEZXRlY3QgY2hhbmdlIG9mIHRoZSBvd24gdXNlciwgYW5kIGZldGNoIGl0IGFnYWluIGlmIGl0IHdhcyBjaGFuZ2VkLlxuICAgICAgaWYgKFxuICAgICAgICBjaGVja1VzZXIgJiZcbiAgICAgICAgbWV0aG9kID09PSAncGF0Y2gnICYmXG4gICAgICAgIGVxdWFscyhyZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy51c2VyLmlkLCB0aGlzLmFwaS51c2VycykpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmZldGNoVXNlcigpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7IGNvbXBvbmVudHMsIGJ1dHRvbnMsIGRhdGEsIHNldHRpbmdzIH0pIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RDb21wb25lbnQuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGJ1dHRvbnMsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNldHRpbmdzXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IChcbiAgICAgICAgY2FjaGUgJiZcbiAgICAgICAge1xuICAgICAgICAgIGdsb2JhbDogdGhpcy5hcHBTdGF0ZSxcbiAgICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICAgIH1bY2FjaGVdXG4gICAgICApXG4gICAgICBjb25zdCBsb2FkQ2FjaGUgPSBjYWNoZVBhcmVudD8ubG9hZENhY2hlXG4gICAgICAvLyBCdWlsZCBhIGNhY2hlIGtleSBmcm9tIHRoZSBjb25maWc6XG4gICAgICBjb25zdCBjYWNoZUtleSA9IChcbiAgICAgICAgbG9hZENhY2hlICYmXG4gICAgICAgIGAke1xuICAgICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnXG4gICAgICAgIH0gJHtcbiAgICAgICAgICBvcHRpb25zLnVybFxuICAgICAgICB9ICR7XG4gICAgICAgICAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgYHF1ZXJ5YCBvblxuICAgICAgICAgIC8vIDIwMjItMTEtMDEsIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55IG1vcmUuXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCBvcHRpb25zLnBhcmFtcyB8fCAnJylcbiAgICAgICAgfSAke1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgICAgfWBcbiAgICAgIClcbiAgICAgIGlmIChsb2FkQ2FjaGUgJiYgKGNhY2hlS2V5IGluIGxvYWRDYWNoZSkpIHtcbiAgICAgICAgcmV0dXJuIGxvYWRDYWNoZVtjYWNoZUtleV1cbiAgICAgIH1cbiAgICAgIC8vIE5PVEU6IE5vIGF3YWl0IGhlcmUsIHJlcyBpcyBhIHByb21pc2UgdGhhdCB3ZSBjYW4gZWFzaWx5IGNhY2hlLlxuICAgICAgLy8gVGhhdCdzIGZpbmUgYmVjYXVzZSBwcm9taXNlcyBjYW4gYmUgcmVzb2x2ZWQgb3ZlciBhbmQgb3ZlciBhZ2Fpbi5cbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2VuZFJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAvLyBDb252ZXJ0IGF4aW9zIGVycm9ycyB0byBub3JtYWwgZXJyb3JzXG4gICAgICAgICAgY29uc3QgZGF0YSA9IGVycm9yLnJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgdGhyb3cgZGF0YVxuICAgICAgICAgICAgPyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihkYXRhLm1lc3NhZ2UpLCBkYXRhKVxuICAgICAgICAgICAgOiBlcnJvclxuICAgICAgICB9KVxuICAgICAgaWYgKGxvYWRDYWNoZSkge1xuICAgICAgICBsb2FkQ2FjaGVbY2FjaGVLZXldID0gcmVzXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfSxcblxuICAgIGZvcm1hdCh2YWx1ZSwge1xuICAgICAgbG9jYWxlID0gdGhpcy5hcGkubG9jYWxlLFxuICAgICAgZGVmYXVsdHMgPSB0aGlzLmFwaS5mb3JtYXRzLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIGZvcm1hdCh2YWx1ZSwge1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIGRlZmF1bHRzLFxuICAgICAgICAuLi5vcHRpb25zXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZShsb2NhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlci5wdXNoKGxvY2F0aW9uKVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gb3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2Jsb2I6JylcbiAgICAgICAgPyBvcHRpb25zLnVybFxuICAgICAgICA6IHRoaXMuYXBpLmdldEFwaVVybChvcHRpb25zKVxuICAgICAgYS5kb3dubG9hZCA9IG9wdGlvbnMuZmlsZW5hbWUgPz8gbnVsbFxuICAgICAgY29uc3QgeyBib2R5IH0gPSBkb2N1bWVudFxuICAgICAgYm9keS5hcHBlbmRDaGlsZChhKVxuICAgICAgYS5jbGljaygpXG4gICAgICBib2R5LnJlbW92ZUNoaWxkKGEpXG4gICAgfSxcblxuICAgIG5vdGlmeShvcHRpb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5jbG9zZU5vdGlmaWNhdGlvbnMoKVxuICAgIH0sXG5cbiAgICBzZXR1cFNjaGVtYUZpZWxkcygpIHtcbiAgICAgIHRoaXMuc2V0dXBNZXRob2RzKClcbiAgICAgIHRoaXMuc2V0dXBDb21wdXRlZCgpXG4gICAgICB0aGlzLnNldHVwRXZlbnRzKClcbiAgICB9LFxuXG4gICAgc2V0dXBNZXRob2RzKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEubWV0aG9kcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdGhpc1trZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIG1ldGhvZCBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cENvbXB1dGVkKCkge1xuICAgICAgY29uc3QgZ2V0Q29tcHV0ZWRBY2Nlc3NvciA9ICh7IGdldCwgc2V0IH0pID0+IHtcbiAgICAgICAgY29uc3QgZ2V0dGVyID0gY29tcHV0ZWQoKCkgPT4gZ2V0LmNhbGwodGhpcykpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZ2V0OiAoKSA9PiBnZXR0ZXIudmFsdWUsXG4gICAgICAgICAgc2V0OiBzZXQgPyB2YWx1ZSA9PiBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGl0ZW1dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLmNvbXB1dGVkIHx8IHt9KSkge1xuICAgICAgICBjb25zdCBhY2Nlc3NvciA9IGlzRnVuY3Rpb24oaXRlbSlcbiAgICAgICAgICA/IGdldENvbXB1dGVkQWNjZXNzb3IoeyBnZXQ6IGl0ZW0gfSlcbiAgICAgICAgICA6IGlzT2JqZWN0KGl0ZW0pICYmIGlzRnVuY3Rpb24oaXRlbS5nZXQpXG4gICAgICAgICAgICA/IGdldENvbXB1dGVkQWNjZXNzb3IoaXRlbSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke2l0ZW19YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgd2F0Y2gsIGV2ZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmICh3YXRjaCkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IGlzRnVuY3Rpb24od2F0Y2gpID8gd2F0Y2guY2FsbCh0aGlzKSA6IHdhdGNoXG4gICAgICAgIGlmIChpc09iamVjdChoYW5kbGVycykpIHtcbiAgICAgICAgICAvLyBJbnN0YWxsIHRoZSB3YXRjaCBoYW5kbGVycyBpbiB0aGUgbmV4dCB0aWNrLCBzbyBhbGwgY29tcG9uZW50cyBhcmVcbiAgICAgICAgICAvLyBpbml0aWFsaXplZCBhbmQgd2UgY2FuIGNoZWNrIGFnYWluc3QgdGhlaXIgbmFtZXMuXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgICAgIC8vIEV4cGFuZCBwcm9wZXJ0eSBuYW1lcyB0byAnZGF0YS5wcm9wZXJ0eSc6XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeU5hbWUoa2V5KVxuICAgICAgICAgICAgICAgID8gYGRhdGEuJHtrZXl9YFxuICAgICAgICAgICAgICAgIDoga2V5XG4gICAgICAgICAgICAgIHRoaXMuJHdhdGNoKGV4cHIsIGNhbGxiYWNrKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkRXZlbnQgPSAoa2V5LCBldmVudCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgdGhpcy5vbihoeXBoZW5hdGUoZXZlbnQpLCBjYWxsYmFjaylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGV2ZW50IGRlZmluaXRpb246ICR7a2V5fTogJHtjYWxsYmFja31gKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBzY2FuIHNjaGVtYSBmb3IgYG9uW0EtWl1gLXN0eWxlIGNhbGxiYWNrcyBhbmQgYWRkIHRoZW1cbiAgICAgIC8vIFRPRE86IERlcHJlY2F0ZSBvbmUgZm9ybWF0IG9yIHRoZSBvdGhlciwgaW4gZmF2b3VyIG9mIG9ubHkgb25lIHdheSBvZlxuICAgICAgLy8gZG9pbmcgdGhpbmdzLiBEZWNpZGUgd2hpY2ggb25lIHRvIHJlbW92ZS5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hKSkge1xuICAgICAgICBpZiAoL15vbltBLVpdLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleS5zbGljZSgyKSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW1pdEV2ZW50KGV2ZW50LCB7XG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIHBhcmVudCA9IG51bGxcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IGhhc0xpc3RlbmVycyA9IHRoaXMuaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgY29uc3QgcGFyZW50SGFzTGlzdGVuZXJzID0gcGFyZW50Py5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBpZiAoaGFzTGlzdGVuZXJzIHx8IHBhcmVudEhhc0xpc3RlbmVycykge1xuICAgICAgICBjb25zdCBlbWl0RXZlbnQgPSB0YXJnZXQgPT5cbiAgICAgICAgICB0YXJnZXQuZW1pdChldmVudCwgKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpKVxuXG4gICAgICAgIGNvbnN0IGhhbmRsZVBhcmVudExpc3RlbmVycyA9IHJlc3VsdCA9PlxuICAgICAgICAgIC8vIERvbid0IGJ1YmJsZSB0byBwYXJlbnQgaWYgaGFuZGxlZCBldmVudCByZXR1cm5lZCBgZmFsc2VgXG4gICAgICAgICAgcGFyZW50SGFzTGlzdGVuZXJzICYmIHJlc3VsdCAhPT0gZmFsc2VcbiAgICAgICAgICAgID8gZW1pdEV2ZW50KHBhcmVudCkudGhlbigoKSA9PiByZXN1bHQpXG4gICAgICAgICAgICA6IHJlc3VsdFxuXG4gICAgICAgIGNvbnN0IGhhbmRsZUxpc3RlbmVycyA9ICgpID0+XG4gICAgICAgICAgaGFzTGlzdGVuZXJzXG4gICAgICAgICAgICA/IGVtaXRFdmVudCh0aGlzKS50aGVuKGhhbmRsZVBhcmVudExpc3RlbmVycylcbiAgICAgICAgICAgIDogaGFuZGxlUGFyZW50TGlzdGVuZXJzKHVuZGVmaW5lZClcblxuICAgICAgICByZXR1cm4gWydsb2FkJywgJ2NoYW5nZSddLmluY2x1ZGVzKGV2ZW50KVxuICAgICAgICAgID8gLy8gVGhlIGVmZmVjdHMgb2Ygc29tZSBldmVudHMgbmVlZCB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgICAgIC8vIFVzZSAkbmV4dFRpY2soKSB0byBtYWtlIHN1cmUgb3VyIGhhbmRsZXJzIHNlZSB0aGVzZSBjaGFuZ2VzLlxuICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGBwcm9jZXNzZWRJdGVtYCBpcyBvbmx5IGNvcnJlY3QgYWZ0ZXIgY29tcG9uZW50c1xuICAgICAgICAgICAgLy8gdGhhdCBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQuXG4gICAgICAgICAgICAvLyBOT1RFOiBUaGUgcmVzdWx0IG9mIGBoYW5kbGVMaXN0ZW5lcnMoKWAgbWFrZXMgaXQgdGhyb3VnaCB0aGVcbiAgICAgICAgICAgIC8vIGAkbmV4dFRpY2soKWAgY2FsbCBhbmQgd2lsbCBiZSByZXR1cm5lZCBhcyBleHBlY3RlZC5cbiAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKGhhbmRsZUxpc3RlbmVycylcbiAgICAgICAgICA6IGhhbmRsZUxpc3RlbmVycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCBuZXh0VWlkID0gMFxuXG5mdW5jdGlvbiBnZXRQYXJlbnRDb21wb25lbnQoY29tcG9uZW50LCBrZXkpIHtcbiAgY29uc3QgY3VycmVudCA9IGNvbXBvbmVudFtrZXldXG4gIGxldCBwYXJlbnQgPSBjb21wb25lbnQucGFyZW50Q29tcG9uZW50XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50W2tleV0gPT09IGN1cnJlbnQpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Q29tcG9uZW50XG4gIH1cbiAgcmV0dXJuIHBhcmVudD8uW2tleV0gPz8gbnVsbFxufVxuIiwiLy8gQSBtaW5pLXJlcGxpY2F0aW9uIG9mIHZ1ZSdzIGludGVybmFsIGByZXNvbHZlTWVyZ2VkT3B0aW9ucygpYCBidXQgb25seVxuLy8gaGFuZGxpbmcgb3VyIG93biBhZGRlZCBvcHRpb25zIHByb3BlcnRpZXMgYW5kIG1lcmdpbmcgdGhlbSBlYXJseSBpbnN0ZWFkXG4vLyBvZiBsYXppbHkuXG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTWVyZ2VkT3B0aW9ucyhvcHRpb25zKSB7XG4gIGNvbnN0IHsgbWl4aW5zIH0gPSBvcHRpb25zXG4gIHJldHVybiBtaXhpbnMgfHwgb3B0aW9ucy5leHRlbmRzXG4gICAgPyBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHsgLi4ub3B0aW9ucyB9LFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgOiBvcHRpb25zXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU9wdGlvbnModG8sIGZyb20pIHtcbiAgaWYgKGZyb20uZXh0ZW5kcykge1xuICAgIG1lcmdlT3B0aW9ucyh0bywgZnJvbS5leHRlbmRzKVxuICB9XG4gIGlmIChmcm9tLm1peGlucykge1xuICAgIGZvciAoY29uc3QgbWl4aW4gb2YgZnJvbS5taXhpbnMpIHtcbiAgICAgIG1lcmdlT3B0aW9ucyh0bywgbWl4aW4pXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIGRpdG9PcHRpb25LZXlzKSB7XG4gICAgaWYgKGtleSBpbiBmcm9tKSB7XG4gICAgICB0b1trZXldID0gZnJvbVtrZXldXG4gICAgfVxuICB9XG4gIHJldHVybiB0b1xufVxuXG5jb25zdCBkaXRvT3B0aW9uS2V5cyA9IFtcbiAgJ2RlZmF1bHRWYWx1ZScsXG4gICdkZWZhdWx0TmVzdGVkJyxcbiAgJ2RlZmF1bHRWaXNpYmxlJyxcbiAgJ2dlbmVyYXRlTGFiZWwnLFxuICAnZXhjbHVkZVZhbHVlJyxcbiAgJ2lnbm9yZU1pc3NpbmdWYWx1ZScsXG4gICdvbWl0U3BhY2luZycsXG4gICdwcm9jZXNzVmFsdWUnLFxuICAncHJvY2Vzc1NjaGVtYScsXG4gICdnZXRQYW5lbFNjaGVtYScsXG4gICdnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcnLFxuICAvLyBWdWUgMyAvIFZ1ZS1yb3V0ZXIgNCBmb3JnZXRzIHRoZXNlLlxuICAvLyBUT0RPOiBDcmVhdGUgYnVnLXJlcG9ydD9cbiAgJ2JlZm9yZVJvdXRlVXBkYXRlJyxcbiAgJ2JlZm9yZVJvdXRlTGVhdmUnXG5dXG4iLCJpbXBvcnQgRGl0b01peGluIGZyb20gJy4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVNZXJnZWRPcHRpb25zIH0gZnJvbSAnLi91dGlscy9vcHRpb25zLmpzJ1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuICAvLyBNYWtlIHN1cmUgdGhhdCByZWdpc3RlcmVkIGNvbXBvbmVudHMgYXJlIHByZXNlbnQgaW4gYWxsIERpdG9Db21wb25lbnQuXG4gIGNvbXBvbmVudHMsXG5cbiAgY29tcG9uZW50KG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgZGVmaW5pdGlvbiA9IHJlc29sdmVNZXJnZWRPcHRpb25zKHtcbiAgICAgICAgICBleHRlbmRzOiB0aGlzLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgLi4uZGVmaW5pdGlvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29tcG9uZW50c1tuYW1lXSA9IGRlZmluaXRpb25cbiAgICB9XG4gICAgaWYgKCEobmFtZSBpbiBjb21wb25lbnRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgXCIke25hbWV9XCIgbm90IHJlZ2lzdGVyZWRgKVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBkZXNjcmliZURhdGUoZGF0ZSkge1xuICByZXR1cm4ge1xuICAgIHllYXI6IGRhdGU/LmdldEZ1bGxZZWFyKCkgPz8gMCxcbiAgICBtb250aDogZGF0ZT8uZ2V0TW9udGgoKSA/PyAwLFxuICAgIGRheTogZGF0ZT8uZ2V0RGF0ZSgpID8/IDAsXG4gICAgaG91cjogZGF0ZT8uZ2V0SG91cnMoKSA/PyAwLFxuICAgIG1pbnV0ZTogZGF0ZT8uZ2V0TWludXRlcygpID8/IDAsXG4gICAgc2Vjb25kOiBkYXRlPy5nZXRTZWNvbmRzKCkgPz8gMCxcbiAgICBtaWxsaXNlY29uZDogZGF0ZT8uZ2V0TWlsbGlzZWNvbmRzKCkgPz8gMFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbHRlckRhdGUoZGF0ZSwgb3ZlcnJpZGVzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBEYXRlKC4uLk9iamVjdC52YWx1ZXMoeyAuLi5kZXNjcmliZURhdGUoZGF0ZSksIC4uLm92ZXJyaWRlcyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZShzdHJpbmcsIHtcbiAgbG9jYWxlID0gJ2VuLVVTJyxcbiAgZGF0ZSA9IHRydWUsXG4gIHRpbWUgPSB0cnVlXG59ID0ge30pIHtcbiAgY29uc3QgdGltZURlZmF1bHQgPSB0aW1lID8gbnVsbCA6IDBcbiAgbGV0IFtcbiAgICBkYXksXG4gICAgc2VwMSxcbiAgICBtb250aCxcbiAgICBzZXAyLFxuICAgIHllYXIsXG4gICAgLFxuICAgIGhvdXIgPSB0aW1lRGVmYXVsdCxcbiAgICAsXG4gICAgbWludXRlID0gdGltZURlZmF1bHQsXG4gICAgLFxuICAgIHNlY29uZCA9IHRpbWVEZWZhdWx0LFxuICAgICxcbiAgICBtaWxsaXNlY29uZCA9IHRpbWVEZWZhdWx0XG4gIF0gPSBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUsIHRpbWUgfSlcbiAgaWYgKHllYXIgJiYgeWVhci5sZW5ndGggPj0gNCkge1xuICAgIGlmIChsb2NhbGUgPT09ICdlbi1VUycgJiYgc2VwMSA9PT0gJy8nICYmIHNlcDIgPT09ICcvJykge1xuICAgICAgLy8gQW1lcmljYW4gZm9ybWF0OiBNTS9ERC9ZWVlZXG4gICAgICA7W2RheSwgbW9udGhdID0gW21vbnRoLCBkYXldXG4gICAgfVxuICAgIG1vbnRoID0gZ2V0TW9udGhJbmRleChtb250aCwgeyBsb2NhbGUgfSlcbiAgICBjb25zdCBpc1ZhbGlkVGltZVBhcnQgPSBwYXJ0ID0+IHBhcnQgPT09IG51bGwgfHwgcGFydC5sZW5ndGggPT09IDJcbiAgICBpZiAoXG4gICAgICBtb250aCAhPT0gbnVsbCAmJiAoXG4gICAgICAgICF0aW1lIHx8IChcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQoaG91cikgJiZcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQobWludXRlKSAmJlxuICAgICAgICAgIGlzVmFsaWRUaW1lUGFydChzZWNvbmQpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgICAgK3llYXIsXG4gICAgICAgICttb250aCxcbiAgICAgICAgK2RheSxcbiAgICAgICAgK2hvdXIsXG4gICAgICAgICttaW51dGUsXG4gICAgICAgICtzZWNvbmQsXG4gICAgICAgICttaWxsaXNlY29uZFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHN0cmluZywgcG9zaXRpb24sIHtcbiAgbG9jYWxlID0gJ2VuLVVTJyxcbiAgZGF0ZSA9IHRydWUsXG4gIHRpbWUgPSB0cnVlXG59ID0ge30pIHtcbiAgY29uc3QgcGFydHMgPSBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUsIHRpbWUgfSlcblxuICBjb25zdCBnZXRQb3NpdGlvbiA9IChwb3NpdGlvbiwgbGVuZ3RoID0gcGFydHMubGVuZ3RoKSA9PiB7XG4gICAgbGV0IHBvcyA9IDBcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICB3aGlsZSAoKHBvc2l0aW9uID09PSBudWxsIHx8IHBvcyA8PSBwb3NpdGlvbikgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHBvcyArPSBwYXJ0c1tpbmRleCsrXT8ubGVuZ3RoID8/IDBcbiAgICB9XG4gICAgcmV0dXJuIHsgcG9zaXRpb246IHBvcywgaW5kZXggfVxuICB9XG5cbiAgLy8gVGltZSBzdGFydHMgYXQgaW5kZXggNiwgZHVlIHRvIHRoZSBzZXBhcmF0b3IgYWZ0ZXIgdGhlIGRhdGUuXG4gIGNvbnN0IG9mZnNldCA9ICFkYXRlID8gZ2V0UG9zaXRpb24obnVsbCwgNikucG9zaXRpb24gOiAwXG4gIHBvc2l0aW9uICs9IG9mZnNldFxuXG4gIGxldCB7IGluZGV4IH0gPSBnZXRQb3NpdGlvbihwb3NpdGlvbilcblxuICBjb25zdCBpc1VTID0gbG9jYWxlID09PSAnZW4tVVMnXG4gIGNvbnN0IHZhbHVlcyA9IFtcbiAgICBpc1VTID8gJ21vbnRoJyA6ICdkYXknLFxuICAgIG51bGwsXG4gICAgaXNVUyA/ICdkYXknIDogJ21vbnRoJyxcbiAgICBudWxsLFxuICAgICd5ZWFyJyxcbiAgICBudWxsLFxuICAgICdob3VyJyxcbiAgICBudWxsLFxuICAgICdtaW51dGUnLFxuICAgIG51bGwsXG4gICAgJ3NlY29uZCcsXG4gICAgbnVsbCxcbiAgICAnbWlsbGlzZWNvbmQnXG4gIF1cbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICBpZiAodmFsdWVzW2luZGV4XSkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBnZXRQb3NpdGlvbihudWxsLCBpbmRleCkucG9zaXRpb24gLSBvZmZzZXRcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgcGFydHNbaW5kZXhdLmxlbmd0aFxuICAgICAgcmV0dXJuIHsgbmFtZTogdmFsdWVzW2luZGV4XSwgc3RhcnQsIGVuZCB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGdldERhdGVQYXJ0cyhzdHJpbmcsIHsgZGF0ZSA9IHRydWUsIHRpbWUgPSB0cnVlIH0gPSB7fSkge1xuICBjb25zdCBwYXJ0cyA9IHN0cmluZz8uc3BsaXQoLyhbXFxzLiw6L10rKS8pIHx8IFtdXG4gIGlmICghZGF0ZSkge1xuICAgIC8vIEFkZCBkdW1teSBkYXRlIHBhcnRzIHRvIG1ha2Ugc3VyZSB3ZSBnZXQgYSB0aW1lLW9ubHkgZGF0ZS5cbiAgICBwYXJ0cy51bnNoaWZ0KCcxJywgJy4nLCAnMScsICcuJywgJzIwMDAnLCAnICcpXG4gIH1cbiAgaWYgKCF0aW1lICYmIHBhcnRzLmxlbmd0aCA+IDUpIHtcbiAgICBwYXJ0cy5sZW5ndGggPSA1XG4gIH1cbiAgcmV0dXJuIHBhcnRzXG59XG5cbmZ1bmN0aW9uIGdldE1vbnRoSW5kZXgobW9udGgsIHsgbG9jYWxlID0gJ2VuLVVTJyB9ID0ge30pIHtcbiAgY29uc3QgdmFsdWUgPSArbW9udGhcbiAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUgLSAxXG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtb250aC50cmltKCkudG9Mb3dlckNhc2UoKVxuICBpZiAobWF0Y2gubGVuZ3RoIDwgMykgcmV0dXJuIG51bGxcbiAgY29uc3Qgc2hvcnRGb3JtYXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgY29uc3QgbG9uZ0Zvcm1hdCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgyMDAwLCBpLCAxKVxuICAgIGlmIChcbiAgICAgIHNob3J0Rm9ybWF0LmZvcm1hdChkYXRlKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobWF0Y2gpIHx8XG4gICAgICBsb25nRm9ybWF0LmZvcm1hdChkYXRlKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobWF0Y2gpXG4gICAgKSB7XG4gICAgICByZXR1cm4gaVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jYWxlbmRhclxuICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgIC5kaXRvLWNhbGVuZGFyLWlubmVyXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cImN1cnJlbnRNb2RlID09PSAnZGF5J1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogdHJ1ZSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC1tb250aChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgbW9udGg6IHRydWUgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwid2Vla2RheSBpbiB3ZWVrZGF5TmFtZXNcIlxuICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItZGF0ZXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJkYXRlLnN0YXRlICYmIGBkaXRvLWNhbGVuZGFyLWl0ZW0tJHtkYXRlLnN0YXRlfWBcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJkYXRlLnN0YXRlICE9PSAnZGlzYWJsZWQnICYmIHNlbGVjdERhdGUoZGF0ZS5kYXRlKVwiXG4gICAgICAgICAgICApIHt7IGRhdGUudGV4dCB9fVxuICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW5vdyhcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOnRpdGxlPVwiZGF0ZVRvU3RyaW5nKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUobmV3IERhdGUoKSlcIlxuICAgICAgICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogdHJ1ZSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIihtb250aCwgaW5kZXgpIGluIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICApIHt7IG1vbnRoLnNob3J0IH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ5ZWFyIGluIHllYXJSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgKSB7eyB5ZWFyIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZGVzY3JpYmVEYXRlLCBhbHRlckRhdGUgfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3NlbGVjdCddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBtb2RlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2RheScgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyB3ZWVrZGF5TmFtZXMsIG1vbnRoTmFtZXMgfSA9IGdldExvY2FsZU5hbWVzKHRoaXMubG9jYWxlKVxuICAgIHJldHVybiB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzLFxuICAgICAgZGF0ZVJhbmdlOiBbXSxcbiAgICAgIHllYXJSYW5nZTogW10sXG4gICAgICBjdXJyZW50VmFsdWU6IChcbiAgICAgICAgdGhpcy5tb2RlbFZhbHVlIHx8XG4gICAgICAgIC8vIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCB1c2UgY3VycmVudCBkYXRlIGJ1dCBjbGVhciB0aW1lIGZpZWxkczpcbiAgICAgICAgYWx0ZXJEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pXG4gICAgICApLFxuICAgICAgY3VycmVudE1vZGU6IHRoaXMubW9kZVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG8gfHwgbmV3IERhdGUoKVxuICAgICAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZERhdGU6ICd1cGRhdGVEYXRlUmFuZ2UnLFxuXG4gICAgbW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TW9udGhDbGFzcyhtb250aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOiAoXG4gICAgICAgICAgdGhpcy5tb2RlbFZhbHVlICYmXG4gICAgICAgICAgbW9udGggPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRNb250aCgpICYmXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzogbW9udGggPT09IHRoaXMuY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0WWVhckNsYXNzKHllYXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzogKFxuICAgICAgICAgIHRoaXMubW9kZWxWYWx1ZSAmJiB5ZWFyID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgICApLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOiB5ZWFyID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldERhdGUob3ZlcnJpZGVzLCB1cGRhdGUgPSBmYWxzZSkge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBhbHRlckRhdGUodGhpcy5jdXJyZW50VmFsdWUsIG92ZXJyaWRlcylcbiAgICAgIGlmICh1cGRhdGUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RlcERlY2FkZShzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIDEwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZXRNb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfSxcblxuICAgIHN0ZXBNb250aChzdGVwKSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyB5ZWFyLCBtb250aCB9ID0gdGhpcy5nZXRZZWFyTW9udGgoXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIHN0ZXBcbiAgICAgIClcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIG1vbnRoLFxuICAgICAgICBkYXk6IE1hdGgubWluKFxuICAgICAgICAgIHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpLFxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldERhdGUoKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzdGVwWWVhcihzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0RGF0ZShkYXRlKSB7XG4gICAgICB0aGlzLnNldERhdGUoZGVzY3JpYmVEYXRlKGRhdGUpLCB0cnVlKVxuICAgICAgdGhpcy4kZW1pdCgnc2VsZWN0JylcbiAgICB9LFxuXG4gICAgc2VsZWN0TW9udGgobW9udGgpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgIC8vIFNldCBkYXkgdG8gMSB0byBhdm9pZCBzZWxlY3RpbmcgYSBkYXRlIHRoYXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGVcbiAgICAgIC8vIG5ldyBtb250aCwgZS5nLiBGZWIgMzEgLT4gTWFyIDMuXG4gICAgICB0aGlzLnNldERhdGUoeyBtb250aCwgZGF5OiAxIH0sIHRydWUpXG4gICAgfSxcblxuICAgIHNlbGVjdFllYXIoeWVhcikge1xuICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICB0aGlzLnNldERhdGUoeyB5ZWFyIH0sIHRydWUpXG4gICAgfSxcblxuICAgIGdldFllYXJNb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgaWYgKG1vbnRoID4gMTEpIHtcbiAgICAgICAgeWVhcisrXG4gICAgICAgIG1vbnRoID0gMFxuICAgICAgfSBlbHNlIGlmIChtb250aCA8IDApIHtcbiAgICAgICAgeWVhci0tXG4gICAgICAgIG1vbnRoID0gMTFcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHllYXIsIG1vbnRoIH1cbiAgICB9LFxuXG4gICAgZGF0ZVRvU3RyaW5nKFxuICAgICAgZGF0ZSxcbiAgICAgIHsgeWVhciwgbW9udGgsIGRheSB9ID0geyB5ZWFyOiB0cnVlLCBtb250aDogdHJ1ZSwgZGF5OiB0cnVlIH1cbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMubG9jYWxlLCB7XG4gICAgICAgIHllYXI6IHllYXIgJiYgJ251bWVyaWMnLFxuICAgICAgICBtb250aDogbW9udGggJiYgJ2xvbmcnLFxuICAgICAgICBkYXk6IGRheSAmJiAnbnVtZXJpYydcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGRlY2FkZVRvU3RyaW5nKGRhdGUpIHtcbiAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKGRhdGUuZ2V0RnVsbFllYXIoKSlcbiAgICAgIHJldHVybiBgJHt5ZWFyfSDigJMgJHt5ZWFyICsgOX1gXG4gICAgfSxcblxuICAgIGdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKS5nZXREYXRlKClcbiAgICB9LFxuXG4gICAgZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcikge1xuICAgICAgY29uc3QgeWVhclN0ciA9IHllYXIudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuICtgJHt5ZWFyU3RyLnNsaWNlKDAsIC0xKX0wYFxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZSh7IHN0ZXAsIGVudGVyLCBtb2RlID0gdGhpcy5jdXJyZW50TW9kZSwgdXBkYXRlID0gZmFsc2UgfSkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoeyBkYXk6IGN1cnJlbnRWYWx1ZS5nZXREYXRlKCkgKyBzdGVwIH0sIHVwZGF0ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHsgbW9udGg6IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgc3RlcCB9LCB1cGRhdGUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHsgeWVhcjogY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwIH0sIHVwZGF0ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gZWxzZSBpZiAoZW50ZXIpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlRGF0ZVJhbmdlKCkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSBbXVxuICAgICAgdGhpcy55ZWFyUmFuZ2UgPSBbXVxuXG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeWVhciA9IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICBjb25zdCBtb250aCA9IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICBjb25zdCBzdGFydFllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgdGhpcy55ZWFyUmFuZ2UucHVzaChzdGFydFllYXIgKyBpKVxuICAgICAgfVxuICAgICAgY29uc3QgY3Vyck1vbnRoRmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSlcbiAgICAgIGxldCBmaXJzdERheVdlZWsgPSBjdXJyTW9udGhGaXJzdERheS5nZXREYXkoKSArIDFcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPT09IDApIHtcbiAgICAgICAgZmlyc3REYXlXZWVrID0gN1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID4gMSkge1xuICAgICAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCAtIDEpXG4gICAgICAgIGNvbnN0IHByZXZNb250aE51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKFxuICAgICAgICAgIHByZXZNb250aC55ZWFyLFxuICAgICAgICAgIHByZXZNb250aC5tb250aFxuICAgICAgICApXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZmlyc3REYXlXZWVrOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXkgPSBwcmV2TW9udGhOdW1EYXlzIC0gZmlyc3REYXlXZWVrICsgaSArIDFcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUocHJldk1vbnRoLnllYXIsIHByZXZNb250aC5tb250aCwgZGF5KVxuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogZGF5LFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG51bURheXM7IGkrKykge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGkpXG4gICAgICAgIGNvbnN0IGlzRGF5ID0gZGF0ZSA9PiAoXG4gICAgICAgICAgZGF0ZSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpID09PSBpICYmXG4gICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXG4gICAgICAgICAgZGF0ZS5nZXRNb250aCgpID09PSBtb250aFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHN0YXRlID0gaXNEYXkodGhpcy5tb2RlbFZhbHVlKVxuICAgICAgICAgID8gJ2FjdGl2ZSdcbiAgICAgICAgICA6IGlzRGF5KG5vdylcbiAgICAgICAgICAgID8gJ3RvZGF5J1xuICAgICAgICAgICAgOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKVxuICAgICAgICAgICAgICA/ICdkaXNhYmxlZCdcbiAgICAgICAgICAgICAgOiBpc0RheShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgICAgICAgPyAnY3VycmVudCdcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBkYXRlLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRNb250aE5lZWQgPSA0MiAtIHRoaXMuZGF0ZVJhbmdlLmxlbmd0aFxuICAgICAgaWYgKG5leHRNb250aE5lZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoICsgMSlcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbmV4dE1vbnRoTmVlZDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG5leHRNb250aC55ZWFyLCBuZXh0TW9udGgubW9udGgsIGkpXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGxvY2FsZU5hbWVzID0ge31cblxuLy8gQ2FsbGluZyBgdG9Mb2NhbGVTdHJpbmcoKWAgdGhpcyBtdWNoIGFwcGVhcnMgdG8gYmUgZXhwZW5zaXZlLCBzbyBjYWNoZSBpdDpcbmZ1bmN0aW9uIGdldExvY2FsZU5hbWVzKGxvY2FsZSkge1xuICBsZXQgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdXG4gIGlmICghbmFtZXMpIHtcbiAgICBjb25zdCB3ZWVrZGF5TmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgMCwgaSlcbiAgICAgIHdlZWtkYXlOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIGksIDApXG4gICAgICBtb250aE5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXSA9IHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jYWxlbmRhciB7XG4gIG1pbi13aWR0aDogMjQwcHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5kaXRvLWNhbGVuZGFyLXBvcHVwIHtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgei1pbmRleDogJHotaW5kZXgtcG9wdXA7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWJvZHkge1xuICBwYWRkaW5nOiAwIDAuNWVtO1xuXG4gIHNwYW4ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNyk7XG4gICAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICAgIGxpbmUtaGVpZ2h0OiBjYWxjKCN7JGlucHV0LWhlaWdodH0gLSAycHgpO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tdG9kYXkge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlO1xuICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUge1xuICAgICYsXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQsXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZ3JheSB7XG4gICAgY29sb3I6ICM5OTk5OTk7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItbW9udGhzLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMge1xuICBzcGFuIHtcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNCk7XG4gICAgbWFyZ2luOiAwLjVlbSAwO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW4ge1xuICB3aWR0aDogY2FsYygxMDAlIC8gNSk7XG59XG5cbi5kaXRvLWNhbGVuZGFyIGEsXG4uZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuLFxuLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW4sXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIgc3BhbiB7XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICBhIHtcbiAgICBwYWRkaW5nOiAwIDAuMmVtO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLWRhdGVzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhcjpub3QoOmhvdmVyKSAuZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQge1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xufVxuXG4uZGl0by1jYWxlbmRhci13ZWVrZGF5cyBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIsXG4uZGl0by1jYWxlbmRhci1mb290ZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbn1cblxuLmRpdG8tY2FsZW5kYXItZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogJGJvcmRlci1zdHlsZTtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGU7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgPiBzcGFuIHtcbiAgICBtYXJnaW46IGF1dG87XG4gICAgcGFkZGluZzogMCAwLjVlbTtcbiAgfVxuXG4gIGEge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LFxuLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNSU7XG4gIG1pbi13aWR0aDogMmVtO1xuICBtYXgtd2lkdGg6IDNlbTtcblxuICAmOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgZm9udC1zaXplOiAxLjI1ZW07XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfigLknO1xuICB9XG5cbiAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfCqyc7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfigLonO1xuICB9XG5cbiAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfCuyc7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc2VsZWN0LW5vdyB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnTm93JztcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkRXZlbnRzKHRhcmdldHMsIGV2ZW50cykge1xuICB0YXJnZXRzID1cbiAgICB0YXJnZXRzIGluc3RhbmNlb2YgTm9kZUxpc3RcbiAgICAgID8gQXJyYXkuZnJvbSh0YXJnZXRzKVxuICAgICAgOiBhc0FycmF5KHRhcmdldHMpXG5cbiAgZm9yIChjb25zdCBbdHlwZSwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgZm9yIChjb25zdCBbdHlwZSwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVFdmVudHMoLi4uZXZlbnRzKSB7XG4gIHJldHVybiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgZXZlbnQucmVtb3ZlKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleShldmVudCkge1xuICByZXR1cm4ge1xuICAgIDM3OiAnbGVmdCcsXG4gICAgMzg6ICd1cCcsXG4gICAgMzk6ICdyaWdodCcsXG4gICAgNDA6ICdkb3duJyxcbiAgICAxMzogJ2VudGVyJ1xuICB9W2V2ZW50Py5rZXlDb2RlXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5TmF2aWdhdGlvbihldmVudCkge1xuICBjb25zdCBrZXkgPSBnZXRLZXkoZXZlbnQpXG4gIHJldHVybiB7XG4gICAgaG9yOiB7IGxlZnQ6IC0xLCByaWdodDogMSB9W2tleV0gfHwgMCxcbiAgICB2ZXI6IHsgdXA6IC0xLCBkb3duOiAxIH1ba2V5XSB8fCAwLFxuICAgIGVudGVyOiBrZXkgPT09ICdlbnRlcidcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0KGNvbXBvbmVudCkge1xuICBjb25zdCB0YXJnZXQgPSBpc1N0cmluZyhjb21wb25lbnQudGFyZ2V0KVxuICAgID8gY29tcG9uZW50LiRyZWZzW2NvbXBvbmVudC50YXJnZXRdXG4gICAgOiBjb21wb25lbnQudGFyZ2V0XG4gIHJldHVybiB0YXJnZXQ/LiRlbCA/PyB0YXJnZXRcbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWlmPVwiYWx3YXlzU2hvd1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnY2xpY2snXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnZm9jdXMnIHx8IHRyaWdnZXIgPT09ICdhbHdheXMnXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICBUcmFuc2l0aW9uKDpuYW1lPVwiYGRpdG8tJHt0cmFuc2l0aW9ufWBcIilcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1lbHNlXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzLCBjb21iaW5lRXZlbnRzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5pbXBvcnQgeyBnZXRUYXJnZXQgfSBmcm9tICcuLi91dGlscy90cmlnZ2VyJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpzaG93J10sXG5cbiAgcHJvcHM6IHtcbiAgICB0cmlnZ2VyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2NsaWNrJyB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbScgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3VzdG9tQ2xhc3M6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgekluZGV4OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIGtlZXBJblZpZXc6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhpZGVXaGVuQ2xpY2tPdXRzaWRlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBhbHdheXNTaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY292ZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoaWRlRGVsYXk6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIHBvcHVwUGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudCxcbiAgICAgIGZvY3VzRXZlbnRzOiBudWxsLFxuICAgICAgY2xvc2VFdmVudHM6IG51bGwsXG4gICAgICBwb3B1cEV2ZW50czogbnVsbCxcbiAgICAgIGJsdXJUaW1lcjogbnVsbCxcbiAgICAgIG1vdXNlTGVhdmVUaW1lcjogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyaWdnZXJDbGFzcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXRyaWdnZXItZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBvcHVwQ2xhc3MoKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICBbYGRpdG8tcG9wdXAtJHtoeXBoZW5hdGUodGhpcy5wbGFjZW1lbnQpfWBdOiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXN0b21DbGFzcykge1xuICAgICAgICBjbGFzc2VzW3RoaXMuY3VzdG9tQ2xhc3NdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgcG9wdXBTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnpJbmRleCA/IGB6LWluZGV4OiAke3RoaXMuekluZGV4fWAgOiAnJ1xuICAgIH0sXG5cbiAgICB0cmlnZ2VyVGFyZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFRhcmdldCh0aGlzKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93IHx8IHRoaXMuYWx3YXlzU2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy5vblNob3dQb3B1cCh0bykpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgIHRoaXMuZm9jdXNFdmVudHMgPSB0aGlzLmFkZEZvY3VzRXZlbnRzKHRoaXMudHJpZ2dlclRhcmdldCA/PyB0cmlnZ2VyKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVXaGVuQ2xpY2tPdXRzaWRlICYmICF0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIC8vIFVzZSAnbW91c2V1cCcgaW5zdGVhZCBvZiAnY2xpY2snLCBzaW5jZSBjbGljayBhcHBlYXJzIHRvIGhhcHBlbiBhZnRlclxuICAgICAgLy8gdGhlIERPTSBpbnNpZGUgb2YgcG9wdXBzIGNvdWxkIGNoYW5nZSBpbiBhIHdheSBzbyB0aGF0IHRoZSBjaGVja1xuICAgICAgLy8gYHBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldClgIHdvdWxkIGZhaWw6XG4gICAgICB0aGlzLmNsb3NlRXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgJiZcbiAgICAgICAgICAgICFwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdHJpZ2dlci5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdGhpcy50cmlnZ2VyVGFyZ2V0Py5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5zaG93UG9wdXAgPSB0aGlzLnNob3dcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5mb2N1c0V2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLmNsb3NlRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMucG9wdXBFdmVudHM/LnJlbW92ZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZVBvc2l0aW9uKCkge1xuICAgICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgICAgaWYgKHRoaXMuc2hvdyAmJiBwb3B1cC5vZmZzZXRXaWR0aCA9PT0gMCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSwgMClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudHJpZ2dlclRhcmdldCA/PyB0cmlnZ2VyXG4gICAgICAvLyBBY3R1YWxseSByZXNpemUgdGhlIHBvcHVwJ3MgZmlyc3QgY2hpbGQsIHNvIHRoZXkgY2FuIHNldCBzaXplIGxpbWl0cy5cbiAgICAgIGNvbnN0IGVsID0gdGhpcy50YXJnZXQgPT09ICdwb3B1cCcgPyB0cmlnZ2VyIDogcG9wdXAuZmlyc3RFbGVtZW50Q2hpbGRcbiAgICAgIGlmIChlbCkge1xuICAgICAgICBlbC5zdHlsZS53aWR0aCA9IGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS53aWR0aFxuICAgICAgfVxuXG4gICAgICBjb25zdCBib3VuZHMgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IHRyaWdnZXJMZWZ0ID0gYm91bmRzLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICAgY29uc3QgdHJpZ2dlclRvcCA9IGJvdW5kcy50b3AgKyB3aW5kb3cuc2Nyb2xsWVxuICAgICAgY29uc3QgdHJpZ2dlcldpZHRoID0gYm91bmRzLndpZHRoXG4gICAgICBjb25zdCB0cmlnZ2VySGVpZ2h0ID0gYm91bmRzLmhlaWdodFxuICAgICAgY29uc3QgcG9wdXBXaWR0aCA9IHBvcHVwLm9mZnNldFdpZHRoXG4gICAgICBjb25zdCBwb3B1cEhlaWdodCA9IHBvcHVwLm9mZnNldEhlaWdodFxuXG4gICAgICBsZXQgW3BhcnQxLCBwYXJ0Ml0gPSB0aGlzLnBvcHVwUGxhY2VtZW50LnNwbGl0KCctJykgfHwgW11cbiAgICAgIGlmICh0aGlzLmtlZXBJblZpZXcpIHtcbiAgICAgICAgY29uc3Qgd2luV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgICBjb25zdCB3aW5IZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgLSB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IC0gdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydDIgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCArIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgKyB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgbGVmdCA9IDBcbiAgICAgIGxldCB0b3AgPSAwXG4gICAgICBzd2l0Y2ggKHBhcnQxKSB7XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgdG9wIC09IHBvcHVwSGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIGxlZnQgKz0gdHJpZ2dlcldpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICB0b3AgKz0gdHJpZ2dlckhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHBhcnQyKSB7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBsZWZ0IC09IHBvcHVwV2lkdGggLSB0cmlnZ2VyV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodCAtIHRyaWdnZXJIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY292ZXIpIHtcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgdG9wIC09IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRhcmdldCAhPT0gdHJpZ2dlcikge1xuICAgICAgICBjb25zdCB0cmlnZ2VyQm91bmRzID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJMZWZ0IC0gdHJpZ2dlckJvdW5kcy5sZWZ0XG4gICAgICAgIHRvcCArPSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckJvdW5kcy50b3BcbiAgICAgIH1cbiAgICAgIHBvcHVwLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YFxuICAgICAgcG9wdXAuc3R5bGUudG9wID0gYCR7dG9wfXB4YFxuICAgIH0sXG5cbiAgICBhZGRGb2N1c0V2ZW50cyhwYXJlbnQpIHtcbiAgICAgIGNvbnN0IHRhcmdldHMgPSBwYXJlbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsIHRleHRhcmVhJylcbiAgICAgIGxldCBpbnB1dFxuXG4gICAgICByZXR1cm4gY29tYmluZUV2ZW50cyhcbiAgICAgICAgYWRkRXZlbnRzKHRhcmdldHMsIHtcbiAgICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZXIpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSB0aW1lb3V0IHRvIGFsbG93IGNsaWNrZWQgaW5wdXRzIHRvIGdyYWIgZm9jdXNcbiAgICAgICAgICAgIHRoaXMuYmx1clRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy4kcmVmcy5wb3B1cC5tYXRjaGVzKCc6Zm9jdXMtd2l0aGluJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcblxuICAgICAgICBhZGRFdmVudHMocGFyZW50LCB7XG4gICAgICAgICAgbW91c2Vkb3duOiBldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKCdpbnB1dCwgdGV4dGFyZWEsIGJ1dHRvbicpKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJy5kaXRvLWJ1dHRvbi1jbGVhcicpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLnRyaWdnZXJUYXJnZXQgPz8gdGhpcy4kcmVmcy50cmlnZ2VyXG4gICAgICAgICAgICAgIC8vIE1hcmsgdHJpZ2dlciBpbnB1dCBhcyByZWFkb25seSBzbyBpdCBjYW4ndCBsb29zZSBmb2N1cyB3aGlsZVxuICAgICAgICAgICAgICAvLyB1c2VyIGRvZXMgb3RoZXIgbW91c2UtYWN0aXZpdGllcyBpbiBwb3B1cC5cbiAgICAgICAgICAgICAgaW5wdXQgPSB0cmlnZ2VyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCB0ZXh0YXJlYScpXG4gICAgICAgICAgICAgIGlmIChpbnB1dCAmJiAhaW5wdXQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdyZWFkb25seScsICd0cnVlJylcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgICAgLy8gR2l2ZSBzb21lIHRpbWUgZm9yIG90aGVyIGV2ZW50cyB0byB1cGRhdGUgaW5wdXQgYmVmb3JlIGl0XG4gICAgICAgICAgICAgIC8vIGJlY29tZXMgZWRpdGFibGUgYW5kIHN0aWxsIGZvY3VzZWQgYWdhaW4uXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlucHV0LnJlbW92ZUF0dHJpYnV0ZSgncmVhZG9ubHknKVxuICAgICAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJ2lucHV0LCB0ZXh0YXJlYSwgYnV0dG9uJykpIHtcbiAgICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBudWxsXG4gICAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBvblNob3dQb3B1cChzaG93KSB7XG4gICAgICBpZiAoc2hvdykge1xuICAgICAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG4gICAgICAgICAgdGhpcy5wb3B1cEV2ZW50cyA9IHRoaXMuYWRkRm9jdXNFdmVudHModGhpcy4kcmVmcy5wb3B1cClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucG9wdXBFdmVudHM/LnJlbW92ZSgpXG4gICAgICAgIHRoaXMucG9wdXBFdmVudHMgPSBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uSG92ZXIoZW50ZXIpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZUxlYXZlVGltZXIpXG4gICAgICAgIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmhpZGVEZWxheSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUxlYXZlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgICAgfSwgdGhpcy5oaWRlRGVsYXkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5AaW1wb3J0ICcuLi9zdHlsZXMvdHJhbnNpdGlvbnMnO1xuXG4uZGl0by10cmlnZ2VyLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmRpdG8tdHJpZ2dlci1kaXNhYmxlZCB7XG4gIGNvbG9yOiAkY29sb3ItZGlzYWJsZWQ7XG4gIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuXG4gICoge1xuICAgIGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50O1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgJjpmb2N1cyB7XG4gICAgICBib3gtc2hhZG93OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1wb3B1cCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAkei1pbmRleC1wb3B1cDtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8taW5wdXQoOmNsYXNzPVwiY2xhc3Nlc1wiKVxuICBzbG90KG5hbWU9XCJiZWZvcmVcIilcbiAgaW5wdXQoXG4gICAgOmlkPVwiaWRcIlxuICAgIHJlZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICA6dHlwZT1cInR5cGVcIlxuICAgIDpuYW1lPVwibmFtZVwiXG4gICAgOnRpdGxlPVwidGl0bGVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6cmVhZG9ubHk9XCJyZWFkb25seVwiXG4gICAgOmF1dG9mb2N1cz1cImF1dG9mb2N1c1wiXG4gICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgIDphdXRvY29tcGxldGU9XCJhdXRvY29tcGxldGVcIlxuICAgIDphcmlhLWxhYmVsPVwidGl0bGVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICApXG4gIHNsb3QobmFtZT1cImFmdGVyXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHlwZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICd0ZXh0JyB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdGl0bGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICByZWFkb25seTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGF1dG9mb2N1czogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGF1dG9jb21wbGV0ZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdvZmYnIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIGhvdmVyaW5nOiBmYWxzZSxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRhdHRycy5jbGFzc1xuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBjbGFzczogXywgLi4uYXR0cmlidXRlcyB9ID0gdGhpcy4kYXR0cnNcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMuaW5wdXRcbiAgICB9LFxuXG4gICAgc2l6ZSgpIHtcbiAgICAgIC8vIERldGVybWluZSBzaXplIGJhc2VkIG9uIG1pbiAmIG1heCBzZXR0aW5ncywgaWYgdGhleSdyZSBwcm92aWRlZC5cbiAgICAgIGNvbnN0IHsgc2l6ZSwgbWluLCBtYXggfSA9IHRoaXMuJGF0dHJzXG4gICAgICBjb25zdCBnZXRMZW5ndGggPSB2YWx1ZSA9PiAodmFsdWUgIT0gbnVsbCA/IGAke3ZhbHVlfWAubGVuZ3RoIDogMClcbiAgICAgIHJldHVybiBzaXplIHx8IGdldExlbmd0aChtaW4pIHx8IGdldExlbmd0aChtYXgpIHx8IHVuZGVmaW5lZFxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShjdXJyZW50VmFsdWUpIHtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IHRoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8taW5wdXQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgaW5wdXQge1xuICAgIC8vIEluaGVyaXQgYWxsIHN0eWxpbmcgZnJvbSAuZGl0by1pbnB1dFxuICAgIGFsbDogaW5oZXJpdDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyOiAwO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmkuZGl0by1pY29uKFxuICA6Y2xhc3M9YHtcbiAgICBbJ2RpdG8taWNvbi0tJyArIG5hbWVdOiB0cnVlLFxuICAgICdkaXRvLWljb24tLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgfWBcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgbmFtZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGRpc2FibGVkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi8vIGB5YXJuIGJ1aWxkOmljb25zYCBjb252ZXJ0cyB0aGUgaWNvbiBTVkcgZmlsZXMgdG8gc2lsZW50IGNsYXNzZXMgaW5zaWRlXG4vLyBgc3JjL3N0eWxlcy9taXhpbnMvX2ljb25zLnNjc3NgLCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgdG8gYWxsIG90aGVyIHNhc3Ncbi8vIGNvZGUgdGhyb3VnaCBgX2ltcG9ydHNgLlxuLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1c2UgdGhlbSBhcyBub3JtYWwgQ1NTIGNsYXNzZXMsIGNvbnZlcnQgdGhlbSBoZXJlOlxuQGVhY2ggJG5hbWUgaW4gJGljb25zIHtcbiAgLmRpdG8taWNvbi0tI3skbmFtZX0ge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIEBleHRlbmQgJWljb24tI3skbmFtZX07XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8taWNvbiB7XG4gIEBhdC1yb290IC5kaXRvLWlucHV0ICYge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogJGJvcmRlci13aWR0aDtcbiAgICBsZWZ0OiB1bnNldDtcbiAgICB3aWR0aDogMmVtO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBjb2xvcjogJGNvbG9yLWdyZXk7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuXG4gICAgJi0tZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICRjb2xvci1saWdodDtcbiAgICB9XG4gIH1cblxuICBAYXQtcm9vdCAuZGl0by1pbnB1dDpmb2N1cy13aXRoaW4gJiB7XG4gICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJleHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0LCBlbmQgfSkge1xuICBpZiAoaW5wdXQ/LnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgaW5wdXQuZm9jdXMoKVxuICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbihpbnB1dCkge1xuICByZXR1cm4gaW5wdXQgJiYgJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dFxuICAgID8geyBzdGFydDogaW5wdXQuc2VsZWN0aW9uU3RhcnQsIGVuZDogaW5wdXQuc2VsZWN0aW9uRW5kIH1cbiAgICA6IG51bGxcbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVHJpZ2dlci5kaXRvLWRhdGUtcGlja2VyKFxuICByZWY9XCJ0cmlnZ2VyXCJcbiAgdi1tb2RlbDpzaG93PVwic2hvd1BvcHVwXCJcbiAgdHJpZ2dlcj1cImZvY3VzXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiJHNsb3RzLnRyaWdnZXJcIlxuICAgICAgbmFtZT1cInRyaWdnZXJcIlxuICAgIClcbiAgICBJbnB1dEZpZWxkLmRpdG8tZGF0ZS1waWNrZXItaW5wdXQoXG4gICAgICB2LWVsc2VcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCAuLi4kYXR0cnMgfVwiXG4gICAgICBAZm9jdXM9XCJvbkZvY3VzKHRydWUpXCJcbiAgICAgIEBibHVyPVwib25Gb2N1cyhmYWxzZSlcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25Nb3VzZURvd24oZmFsc2UpXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgICBzbG90KG5hbWU9XCJiZWZvcmVcIilcbiAgICAgIHRlbXBsYXRlKCNhZnRlcilcbiAgICAgICAgSWNvbihcbiAgICAgICAgICBuYW1lPVwiY2FsZW5kYXJcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCJvbk1vdXNlRG93bih0cnVlKVwiXG4gICAgICAgIClcbiAgICAgICAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIENhbGVuZGFyLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAoXG4gICAgICByZWY9XCJjYWxlbmRhclwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtYmluZD1cInsgbG9jYWxlLCBkaXNhYmxlZERhdGUgfVwiXG4gICAgICBAc2VsZWN0PVwic2hvd1BvcHVwID0gZmFsc2VcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgQ2FsZW5kYXIgZnJvbSAnLi9DYWxlbmRhci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uLnZ1ZSdcbmltcG9ydCB7IHBhcnNlRGF0ZSwgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IGdldFNlbGVjdGlvbiwgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuaW1wb3J0IHsgZ2V0VGFyZ2V0IH0gZnJvbSAnLi4vdXRpbHMvdHJpZ2dlci5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIENhbGVuZGFyLCBJbnB1dEZpZWxkLCBJY29uIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3VwZGF0ZTpzaG93JywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICBkYXRlOiBkZWZhdWx0Rm9ybWF0cy5kYXRlLFxuICAgICAgICB0aW1lOiBmYWxzZVxuICAgICAgfSlcbiAgICB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiBnZXRUYXJnZXQodGhpcyk/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgZm9ybWF0T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgIC4uLnRoaXMuZm9ybWF0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykgfHwgJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBkYXRlID0gcGFyc2VEYXRlKHZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh2YWx1ZSkge1xuICAgICAgaWYgKCt2YWx1ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkZvY3VzKGZvY3VzKSB7XG4gICAgICB0aGlzLmlucHV0Rm9jdXNlZCA9IGZvY3VzXG4gICAgICB0aGlzLnNob3dQb3B1cCA9IGZvY3VzXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3QgeyB2ZXI6IHN0ZXAsIGVudGVyIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgaWYgKHN0ZXAgfHwgZW50ZXIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQpPy5zdGFydFxuICAgICAgICBjb25zdCBnZXREYXRlUGFydCA9IHBvc2l0aW9uID0+XG4gICAgICAgICAgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHRoaXMuY3VycmVudFRleHQsIHBvc2l0aW9uLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHN0ZXAgJiYgIXRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgeyBjYWxlbmRhciB9ID0gdGhpcy4kcmVmc1xuICAgICAgICAgIGlmIChjYWxlbmRhcikge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lOiBtb2RlLCBzdGFydCB9ID0gZ2V0RGF0ZVBhcnQocG9zaXRpb24pIHx8IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG1vZGUgJiZcbiAgICAgICAgICAgICAgY2FsZW5kYXIubmF2aWdhdGUoeyBzdGVwLCBlbnRlciwgbW9kZSwgdXBkYXRlOiB0cnVlIH0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQsIGdldERhdGVQYXJ0KHN0YXJ0KSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKHRvZ2dsZSkge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5kaXNhYmxlZCAmJiAoIXRvZ2dsZSB8fCAhdGhpcy5zaG93UG9wdXApXG4gICAgICBpZiAodGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGF0ZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4td2lkdGg6IDhlbTtcbiAgfVxufVxuXG4uZGl0by1kYXRlLXBpY2tlci1wb3B1cCB7XG4gIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbn1cbjwvc3R5bGU+XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by10aW1lLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJmb2N1c1wiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiRzbG90cy50cmlnZ2VyXCJcbiAgICAgIG5hbWU9XCJ0cmlnZ2VyXCJcbiAgICApXG4gICAgSW5wdXRGaWVsZC5kaXRvLXRpbWUtcGlja2VyLWlucHV0KFxuICAgICAgdi1lbHNlXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cIlxuICAgICAgQGZvY3VzPVwib25Gb2N1cyh0cnVlKVwiXG4gICAgICBAYmx1cj1cIm9uRm9jdXMoZmFsc2UpXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uTW91c2VEb3duKGZhbHNlKVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2JlZm9yZSlcbiAgICAgICAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gICAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICAgIEljb24oXG4gICAgICAgICAgbmFtZT1cImNsb2NrXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5wcmV2ZW50PVwib25Nb3VzZURvd24odHJ1ZSlcIlxuICAgICAgICApXG4gICAgICAgIHNsb3QobmFtZT1cImFmdGVyXCIpXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICAuZGl0by10aW1lLXBpY2tlci1wb3B1cFxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1ob3VyKHJlZj1cImhvdXJcIilcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gMjRcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkSG91cihpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogaG91ciA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJob3VyID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLW1pbnV0ZShyZWY9XCJtaW51dGVcIilcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkTWludXRlKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwibWludXRlID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLXNlY29uZChyZWY9XCJzZWNvbmRcIilcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkU2Vjb25kKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBzZWNvbmQgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2Vjb25kID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCBJY29uIGZyb20gJy4vSWNvbi52dWUnXG5pbXBvcnQgeyBhbHRlckRhdGUsIHBhcnNlRGF0ZSwgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IGdldFNlbGVjdGlvbiwgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuaW1wb3J0IHsgZ2V0VGFyZ2V0IH0gZnJvbSAnLi4vdXRpbHMvdHJpZ2dlci5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIElucHV0RmllbGQsIEljb24gfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAndXBkYXRlOnNob3cnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6ICgpID0+ICh7XG4gICAgICAgIHRpbWU6IGRlZmF1bHRGb3JtYXRzLnRpbWUsXG4gICAgICAgIGRhdGU6IGZhbHNlXG4gICAgICB9KVxuICAgIH0sXG4gICAgZGlzYWJsZWRIb3VyOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkTWludXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkU2Vjb25kOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBpZ25vcmVOZXh0Q2hhbmdlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gZ2V0VGFyZ2V0KHRoaXMpPy5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpXG4gICAgfSxcblxuICAgIGZvcm1hdE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAuLi50aGlzLmZvcm1hdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpIHx8ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHBhcnNlRGF0ZSh2YWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKVxuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnREYXRlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgfHxcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IERhdGUoKSBvYmplY3Qgd2l0aCB0aGUgdGltZSBzZXQgdG8gMCwgdG8gYmUgdXNlZCB3aGVuXG4gICAgICAgIC8vIGZpcnN0IHNldHRpbmcgYW55IG9mIHRoZSB0aW1lcywgZm9yIG1lYW5pbmdmdWwgZGF0ZXMgaW4gY2FzZSB0aGVcbiAgICAgICAgLy8gb2JqZWN0IGlzIHNoYXJlZCB3aXRoIGEgRGF0ZVBpY2tlciwgZS5nLiB0aHJvdWdoIERhdGVUaW1lUGlja2VyLlxuICAgICAgICBhbHRlckRhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaG91cjoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRIb3VycygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoaG91cikge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBob3VyIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1pbnV0ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRNaW51dGVzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChtaW51dGUpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgbWludXRlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlY29uZDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRTZWNvbmRzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChzZWNvbmQpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgc2Vjb25kIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgICB0aGlzLnNjcm9sbEFsbCh0cnVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodmFsdWUpIHtcbiAgICAgIGlmICgrdmFsdWUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB2YWx1ZSlcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKHRydWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0KCkge1xuICAgICAgY29uc3QgeyBpbnB1dCB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKGlucHV0KVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmZvY3VzZWQgJiZcbiAgICAgICAgIXRoaXMuaWdub3JlTmV4dENoYW5nZSAmJlxuICAgICAgICBzZWxlY3Rpb24uc3RhcnQgPT09IHNlbGVjdGlvbi5lbmRcbiAgICAgICkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24oaW5wdXQsIHNlbGVjdGlvbikpXG4gICAgICB9XG4gICAgICB0aGlzLmlnbm9yZU5leHRDaGFuZ2UgPSBmYWxzZVxuICAgIH0sXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0bykge1xuICAgICAgICB0aGlzLnNjcm9sbEFsbChmYWxzZSlcbiAgICAgIH1cbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGxlZnRQYWQodmFsdWUpIHtcbiAgICAgIHJldHVybiAoJzAnICsgdmFsdWUpLnNsaWNlKC0yKVxuICAgIH0sXG5cbiAgICBzZXRUaW1lKG92ZXJyaWRlcykge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBhbHRlckRhdGUodGhpcy5jdXJyZW50RGF0ZSwge1xuICAgICAgICAuLi5vdmVycmlkZXMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzY3JvbGxBbGwoc21vb3RoKSB7XG4gICAgICBjb25zdCBzY3JvbGwgPSAocmVmLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRyZWZzW3JlZl1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSAoXG4gICAgICAgICAgICB0YXJnZXQuc2Nyb2xsSGVpZ2h0IC9cbiAgICAgICAgICAgIC8vIEZpcnN0IGFuZCBsYXN0IG9uZSBhZGQgMyB0aW1lcyB0aGUgbWFyZ2luLlxuICAgICAgICAgICAgKHRhcmdldC5jaGlsZEVsZW1lbnRDb3VudCArIDYpXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IHRvcCA9IE1hdGgucm91bmQodmFsdWUgKiBsaW5lSGVpZ2h0KVxuICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnModGFyZ2V0LnNjcm9sbFRvcCAtIHRvcClcbiAgICAgICAgICB0YXJnZXQuc2Nyb2xsVG8oe1xuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgYmVoYXZpb3I6IHNtb290aCAmJiBkaXN0YW5jZSA8IDEwMCA/ICdzbW9vdGgnIDogJ2F1dG8nXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBzY3JvbGwoJ2hvdXInLCB0aGlzLmhvdXIpXG4gICAgICAgIHNjcm9sbCgnbWludXRlJywgdGhpcy5taW51dGUpXG4gICAgICAgIHNjcm9sbCgnc2Vjb25kJywgdGhpcy5zZWNvbmQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZvY3VzKGZvY3VzKSB7XG4gICAgICB0aGlzLmlucHV0Rm9jdXNlZCA9IGZvY3VzXG4gICAgICB0aGlzLnNob3dQb3B1cCA9IGZvY3VzXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3QgeyBpbnB1dCB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKGlucHV0KVxuICAgICAgY29uc3QgeyB2ZXI6IHN0ZXAsIGVudGVyIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgaWYgKHN0ZXAgfHwgZW50ZXIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgICAgIGNvbnN0IGdldERhdGVQYXJ0ID0gcG9zaXRpb24gPT5cbiAgICAgICAgICBnZXREYXRlUGFydEF0UG9zaXRpb24odGhpcy5jdXJyZW50VGV4dCwgcG9zaXRpb24sIHRoaXMuZm9ybWF0T3B0aW9ucylcblxuICAgICAgICBpZiAoc3RlcCkge1xuICAgICAgICAgIGlmICghdGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWUsIHN0YXJ0IH0gPSBnZXREYXRlUGFydChzZWxlY3Rpb24uc3RhcnQpIHx8IHt9XG4gICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbbmFtZV0gKyBzdGVwXG4gICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy4kcmVmc1tuYW1lXS5jaGlsZEVsZW1lbnRDb3VudFxuICAgICAgICAgICAgICB0aGlzW25hbWVdID1cbiAgICAgICAgICAgICAgICB2YWx1ZSA8IDBcbiAgICAgICAgICAgICAgICAgID8gdmFsdWUgKyBjb3VudFxuICAgICAgICAgICAgICAgICAgOiB2YWx1ZSA+PSBjb3VudFxuICAgICAgICAgICAgICAgICAgICA/IHZhbHVlIC0gY291bnRcbiAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICAgICAgICB0aGlzLmlnbm9yZU5leHRDaGFuZ2UgPSB0cnVlXG4gICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbihpbnB1dCwgZ2V0RGF0ZVBhcnQoc3RhcnQpKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLnN0YXJ0ID09PSBzZWxlY3Rpb24uZW5kKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IGlucHV0XG4gICAgICAgIGxldCBwb3MgPSBzZWxlY3Rpb24uc3RhcnRcblxuICAgICAgICBjb25zdCBpc0RpZ2l0ID0gY2hhciA9PiAhaXNOYU4ocGFyc2VJbnQoY2hhciwgMTApKVxuXG4gICAgICAgIGlmIChldmVudC5rZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgaWYgKGlzRGlnaXQoZXZlbnQua2V5KSAmJiBwb3MgPCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdmFsdWVbcG9zXSA9PT0gJzonICYmXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zIC0gMV0pICYmXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zIC0gMl0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcG9zKytcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW92ZSBuZXh0IGRpZ2l0IHNvIHRoZSBldmVudCBvdmVycmlkZXMgaXQgaW5zdGVhZCBvZiBpbnNlcnRpbmdcbiAgICAgICAgICAgIC8vIG5ldyBjaGFycy5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3NdKSAmJiAoXG4gICAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgKyAxXSkgfHxcbiAgICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyAtIDFdKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSAoXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgcG9zKSArXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UocG9zICsgMSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQ6IHBvcywgZW5kOiBwb3MgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpLmxlbmd0aFxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgbGVuZ3RoKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHNlbGVjdGlvbilcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcG9zID09PSAxIHx8XG4gICAgICAgICAgICBbJyAnLCAnOiddLmluY2x1ZGVzKHZhbHVlW3BvcyAtIDJdKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwb3MgPT09IHZhbHVlLmxlbmd0aCB8fFxuICAgICAgICAgICAgICB2YWx1ZVtwb3NdID09PSAnOidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBwb3MtLVxuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IChcbiAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCBwb3MpICtcbiAgICAgICAgICAgICAgICAoKHZhbHVlW3BvcyAtIDFdID8/ICcnKSArICcwMCcpICtcbiAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZShwb3MgKyAxKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNldFNlbGVjdGlvbihpbnB1dCwgeyBzdGFydDogcG9zLCBlbmQ6IHBvcyB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3NdKSAmJlxuICAgICAgICAgICAgICAhaXNEaWdpdCgrdmFsdWVbcG9zICsgMV0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gV2hlbiByZW1vdmluZyB0aGUgZmlyc3Qgb2YgdHdvIGRpZ2l0cywgcmVwbGFjZSB3aXRoIDBcbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBwb3MpICsgJzAnICsgdmFsdWUuc2xpY2UocG9zKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQ6IHBvcywgZW5kOiBwb3MgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Nb3VzZURvd24odG9nZ2xlKSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9ICF0aGlzLmRpc2FibGVkICYmICghdG9nZ2xlIHx8ICF0aGlzLnNob3dQb3B1cClcbiAgICAgIGlmICh0aGlzLnNob3dQb3B1cCkge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10aW1lLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4td2lkdGg6IDZlbTtcbiAgfVxufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCB7XG4gIG1heC13aWR0aDogMTYwcHg7XG4gIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbn1cblxuJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0OiAyNHB4O1xuXG4uZGl0by10aW1lLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAgLmRpdG8tdGltZS1waWNrZXItcGFuZWwge1xuICBmbG9hdDogbGVmdDtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItd2lkdGg6IDAgMXB4IDA7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB3aWR0aDogY2FsYygxMDAlIC8gMyArIDFweCk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgJjpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gIH1cblxuICB1bCB7XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW46IDA7XG4gICAgLy8gSGlkZSBzY3JvbGxiYXI6XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgcGFkZGluZzogMCAxN3B4IDAgMDtcbiAgICBoZWlnaHQ6IDcgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG5cbiAgICAmID4gbGkge1xuICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgbGluZS1oZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG4gICAgICB9XG5cbiAgICAgICYuc2VsZWN0ZWQsXG4gICAgICAmLnNlbGVjdGVkOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRhdGUtdGltZS1waWNrZXIocmVmPVwicGlja2VyXCIpXG4gIC5kaXRvLWRhdGUtdGltZS1waWNrZXJfX2lubmVyKDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIilcbiAgICBJbnB1dEZpZWxkLmRpdG8tZGF0ZS10aW1lLXBpY2tlcl9faW5wdXQoXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cIlxuICAgICAgQGZvY3VzPVwib25Gb2N1cyh0cnVlKVwiXG4gICAgICBAYmx1cj1cIm9uRm9jdXMoZmFsc2UpXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uTW91c2VEb3duKGZhbHNlKVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2JlZm9yZSlcbiAgICAgICAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gICAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICAgIEljb24oXG4gICAgICAgICAgbmFtZT1cImNhbGVuZGFyXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5wcmV2ZW50PVwib25Nb3VzZURvd24odHJ1ZSlcIlxuICAgICAgICApXG4gICAgICAgIHNsb3QobmFtZT1cImFmdGVyXCIpXG4gICAgRGF0ZVBpY2tlcihcbiAgICAgIHJlZj1cImRhdGVcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LW1vZGVsOnNob3c9XCJzaG93RGF0ZVwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgICAgICAvLy0gSW50ZW50aW9uYWxseSBlbXB0eVxuICAgIFRpbWVQaWNrZXIoXG4gICAgICByZWY9XCJ0aW1lXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd1RpbWVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgICAgIC8vLSBJbnRlbnRpb25hbGx5IGVtcHR5XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cywgYXNzaWduRGVlcGx5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tICcuL0RhdGVQaWNrZXIudnVlJ1xuaW1wb3J0IFRpbWVQaWNrZXIgZnJvbSAnLi9UaW1lUGlja2VyLnZ1ZSdcbmltcG9ydCBJY29uIGZyb20gJy4vSWNvbi52dWUnXG5pbXBvcnQgeyBwYXJzZURhdGUgfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uLCBzZXRTZWxlY3Rpb24gfSBmcm9tICcuLi91dGlscy9zZWxlY3Rpb24uanMnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkLCBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBJY29uIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd0RhdGU6IGZhbHNlLFxuICAgICAgc2hvd1RpbWU6IGZhbHNlLFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGRhdGVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHRpbWVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNsb3NlZE1vZGU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyB0cmFuc2l0aW9uLCBkaXNhYmxlZCwgbG9jYWxlLCBmb3JtYXRPcHRpb25zOiBmb3JtYXQgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7IHRyYW5zaXRpb24sIGRpc2FibGVkLCBsb2NhbGUsIGZvcm1hdCB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93RGF0ZSB8fCB0aGlzLnNob3dUaW1lXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMuaW5wdXQuaW5wdXRcbiAgICB9LFxuXG4gICAgZm9ybWF0T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBhc3NpZ25EZWVwbHkoXG4gICAgICAgIHtcbiAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAgIHRpbWU6IGRlZmF1bHRGb3JtYXRzLnRpbWUsXG4gICAgICAgICAgZGF0ZTogZGVmYXVsdEZvcm1hdHMuZGF0ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgICAgICBmb3JtYXQ6ICh2YWx1ZSwgdHlwZSwgb3B0aW9ucykgPT5cbiAgICAgICAgICAgICAgdHlwZSA9PT0gJ2xpdGVyYWwnICYmIC9cXGJhdFxcYi8udGVzdCh2YWx1ZSlcbiAgICAgICAgICAgICAgICA/ICcsICdcbiAgICAgICAgICAgICAgICA6IHRoaXMuZm9ybWF0Py5kYXRlPy5mb3JtYXQ/Lih2YWx1ZSwgdHlwZSwgb3B0aW9ucykgPz8gdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuZm9ybWF0XG4gICAgICApXG4gICAgfSxcblxuICAgIHRpbWVJbmRleCgpIHtcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmN1cnJlbnRUZXh0XG4gICAgICBpZiAodGV4dCkge1xuICAgICAgICBjb25zdCB0aW1lID0gdGV4dC5tYXRjaCgvKFtcXFNdK1xccyopJC8pPy5bMV1cbiAgICAgICAgaWYgKHRpbWUpIHtcbiAgICAgICAgICByZXR1cm4gdGV4dC5sZW5ndGggLSB0aW1lLmxlbmd0aFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpIHx8ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHBhcnNlRGF0ZSh2YWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKVxuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbih0aGlzLmlucHV0KVxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbih0aGlzLmlucHV0LCBzZWxlY3Rpb24pKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodmFsdWUpIHtcbiAgICAgIGlmICgrdmFsdWUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB2YWx1ZSlcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkZvY3VzKGZvY3VzKSB7XG4gICAgICB0aGlzLmlucHV0Rm9jdXNlZCA9IGZvY3VzXG4gICAgICBpZiAoZm9jdXMpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3B1cHMoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93RGF0ZSA9IGZhbHNlXG4gICAgICAgIHRoaXMuc2hvd1RpbWUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbk1vdXNlRG93bih0b2dnbGUpIHtcbiAgICAgIGlmICh0b2dnbGUgJiYgKHRoaXMuc2hvd0RhdGUgfHwgdGhpcy5zaG93VGltZSkpIHtcbiAgICAgICAgdGhpcy5zaG93RGF0ZSA9IGZhbHNlXG4gICAgICAgIHRoaXMuc2hvd1RpbWUgPSBmYWxzZVxuICAgICAgfSBlbHNlIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMudXBkYXRlUG9wdXBzKCkpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3QgbW9kZSA9IHRoaXMuZ2V0TW9kZShldmVudClcbiAgICAgIHRoaXMuJHJlZnNbbW9kZV0ub25LZXlEb3duKGV2ZW50KVxuICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgdGhpcy5jbG9zZWRNb2RlID0gbW9kZVxuICAgICAgfSBlbHNlIGlmIChtb2RlICE9PSB0aGlzLmNsb3NlZE1vZGUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3B1cHMobW9kZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0TW9kZShldmVudCA9IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnQgfSA9IGdldFNlbGVjdGlvbih0aGlzLmlucHV0KVxuICAgICAgY29uc3QgeyBob3I6IHN0ZXAgfSA9IGdldEtleU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICByZXR1cm4gdGhpcy50aW1lSW5kZXggPT09IG51bGwgfHwgc3RhcnQgKyBzdGVwIDwgdGhpcy50aW1lSW5kZXhcbiAgICAgICAgPyAnZGF0ZSdcbiAgICAgICAgOiAndGltZSdcbiAgICB9LFxuXG4gICAgdXBkYXRlUG9wdXBzKG1vZGUgPSB0aGlzLmdldE1vZGUoKSkge1xuICAgICAgaWYgKG1vZGUpIHtcbiAgICAgICAgdGhpcy5jbG9zZWRNb2RlID0gbnVsbFxuICAgICAgfVxuICAgICAgdGhpcy5zaG93RGF0ZSA9IG1vZGUgPT09ICdkYXRlJ1xuICAgICAgdGhpcy5zaG93VGltZSA9IG1vZGUgPT09ICd0aW1lJ1xuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWRhdGUtdGltZS1waWNrZXIge1xuICAmX19pbm5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgfVxuXG4gICZfX2lucHV0IHtcbiAgICBmbGV4OiAxO1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgbWluLXdpZHRoOiAxMmVtO1xuICB9XG5cbiAgLmRpdG8tZGF0ZS1waWNrZXIsXG4gIC5kaXRvLXRpbWUtcGlja2VyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tIGVzbGludC1kaXNhYmxlIHZ1ZS9uby10ZW1wbGF0ZS1zaGFkb3cgLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcGFnaW5hdGlvblxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsKFxuICAgIHYtaWY9XCJzaG93VG90YWxcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWlmPVwidG90YWwgPiAwXCJcbiAgICApIHt7IGZpcnN0IH19IOKAkyB7eyBsYXN0IH19IC8ge3sgdG90YWwgfX1cbiAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gICAgdi1pZj1cIm51bVBhZ2VzID4gMVwiXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWZvcj1cImJ1dHRvbiBpbiBidXR0b25zXCJcbiAgICAgIDpjbGFzcz1cImdldEJ1dHRvbkNsYXNzZXMoYnV0dG9uKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJidXR0b24uZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25DbGlja0J1dHRvbihidXR0b24pXCJcbiAgICApXG4gICAgICBzcGFuKFxuICAgICAgICB2LWlmPVwiYnV0dG9uLnRleHRcIlxuICAgICAgKSB7eyBidXR0b24udGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOnBhZ2UnXSxcblxuICBwcm9wczoge1xuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIHBhZ2U6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH0sXG4gICAgcGFnZVNpemU6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxMCB9LFxuICAgIHNob3dUb3RhbDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UHJldjogdHJ1ZSxcbiAgICAgIHNob3dOZXh0OiB0cnVlLFxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZpcnN0KCkge1xuICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplICsgMVxuICAgIH0sXG5cbiAgICBsYXN0KCkge1xuICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuZmlyc3QgKyB0aGlzLnBhZ2VTaXplIC0gMSwgdGhpcy50b3RhbClcbiAgICB9LFxuXG4gICAgbnVtUGFnZXMoKSB7XG4gICAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMudG90YWwgLyB0aGlzLnBhZ2VTaXplKVxuICAgIH0sXG5cbiAgICBidXR0b25zKCkge1xuICAgICAgY29uc3QgeyBzaG93UHJldiwgc2hvd05leHQsIGN1cnJlbnRQYWdlLCBudW1QYWdlcyB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2hvd0xlbmd0aCA9IHNob3dQcmV2ICsgc2hvd05leHQgKyAxXG5cbiAgICAgIGxldCBzdGFydCA9IDFcbiAgICAgIGxldCBlbmQgPSAxXG4gICAgICBpZiAobnVtUGFnZXMgPD0gc2hvd0xlbmd0aCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UGFnZSA8PSBzaG93UHJldiArIDEpIHtcbiAgICAgICAgZW5kID0gc2hvd0xlbmd0aFxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UGFnZSA+PSBudW1QYWdlcyAtIHNob3dOZXh0KSB7XG4gICAgICAgIGVuZCA9IG51bVBhZ2VzXG4gICAgICAgIHN0YXJ0ID0gbnVtUGFnZXMgLSBzaG93TGVuZ3RoICsgMVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnQgPSBjdXJyZW50UGFnZSAtIHNob3dQcmV2XG4gICAgICAgIGVuZCA9IGN1cnJlbnRQYWdlICsgc2hvd05leHRcbiAgICAgIH1cblxuICAgICAgY29uc3QgYnV0dG9ucyA9IFtdXG4gICAgICBidXR0b25zLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgLSAxLFxuICAgICAgICB0eXBlOiAncHJldicsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA8PSAxXG4gICAgICB9KVxuICAgICAgaWYgKHN0YXJ0ID49IDIpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHsgaW5kZXg6IDEsIHRleHQ6IDEgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCA+IDIpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5tYXgoMSwgY3VycmVudFBhZ2UgLSAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLXByZXYnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGFjdGl2ZTogaSA9PT0gY3VycmVudFBhZ2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5taW4obnVtUGFnZXMsIGN1cnJlbnRQYWdlICsgMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1uZXh0J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8PSBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHsgaW5kZXg6IG51bVBhZ2VzLCB0ZXh0OiBudW1QYWdlcyB9KVxuICAgICAgfVxuICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlICsgMSxcbiAgICAgICAgdHlwZTogJ25leHQnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPj0gbnVtUGFnZXNcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBidXR0b25zXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgcGFnZShwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZVxuICAgIH0sXG5cbiAgICBwYWdlU2l6ZSgpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID4gdGhpcy5udW1QYWdlcykge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5udW1QYWdlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpwYWdlJywgdG8pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRCdXR0b25DbGFzc2VzKGJ1dHRvbikge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgJ2RpdG8tc2VsZWN0ZWQnOiBidXR0b24uYWN0aXZlXG4gICAgICB9XG4gICAgICBpZiAoYnV0dG9uLnR5cGUpIHtcbiAgICAgICAgY2xhc3Nlc1tgZGl0by1idXR0b24tJHtidXR0b24udHlwZX1gXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIG9uQ2xpY2tCdXR0b24oYnV0dG9uKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGJ1dHRvbi5pbmRleCAmJlxuICAgICAgICAhYnV0dG9uLmRpc2FibGVkICYmXG4gICAgICAgIGJ1dHRvbi5pbmRleCAhPT0gdGhpcy5jdXJyZW50UGFnZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBidXR0b24uaW5kZXhcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhZ2luYXRpb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgbWFyZ2luOiAwIDAuNWVtO1xuICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICB9XG5cbiAgLmRpdG8tYnV0dG9uIHtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgYWxsIDAuM3MgZWFzZSxcbiAgICAgIGNvbG9yIDBzLFxuICAgICAgYmFja2dyb3VuZCAwcyxcbiAgICAgIGJvcmRlciAwcztcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIHBhZGRpbmc6IDAgMC41ZW07XG5cbiAgICAmLXByZXYsXG4gICAgJi1uZXh0IHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tYXJyb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi1wcmV2OjpiZWZvcmUge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgIH1cblxuICAgICYtZWxsaXBzaXMtcHJldixcbiAgICAmLWVsbGlwc2lzLW5leHQge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tZWxsaXBzaXM7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXI6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tY2hldnJvbnM7XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgICYtZWxsaXBzaXMtcHJldjo6YmVmb3JlIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc3dpdGNoKFxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbilcbiAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICBpbnB1dChcbiAgICAgIDppZD1cImlkXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1tb2RlbD1cImNoZWNrZWRcIlxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgIDpuYW1lPVwibmFtZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICBzcGFuLmRpdG8tc3dpdGNoLWxhYmVsKFxuICAgICAgdi1pZj1cImxhYmVsc1wiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cImNoZWNrZWRcIlxuICAgICAgICBuYW1lPVwiY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy5jaGVja2VkIHx8ICdvbicgfX1cbiAgICAgIHNsb3QoXG4gICAgICAgIHYtZWxzZVxuICAgICAgICBuYW1lPVwidW5jaGVja2VkXCJcbiAgICAgICkge3sgbGFiZWxzLnVuY2hlY2tlZCB8fCAnb2ZmJyB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsczogeyB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrZWQ6IHRoaXMubW9kZWxWYWx1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLiRhdHRycy5jbGFzcyxcbiAgICAgICAge1xuICAgICAgICAgICdkaXRvLWNoZWNrZWQnOiB0aGlzLmNoZWNrZWQsXG4gICAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBsYWJlbHM6IHsgY2hlY2tlZCwgdW5jaGVja2VkIH0gPSB7fSB9ID0gdGhpc1xuICAgICAgLy8gQ2FsY3VsYXRlIGAtLXN3aXRjaC13aWR0aGAgaW4gYHJlbWAsIGJhc2VkIG9uIGxhYmVsIGxlbmd0aC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIGNoZWNrZWQ/Lmxlbmd0aCwgdW5jaGVja2VkPy5sZW5ndGgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zd2l0Y2gtd2lkdGgnOiBsZW5ndGggPyBgJHtsZW5ndGggKiAxLjV9cmVtYCA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IF8sIC4uLmF0dHJpYnV0ZXMgfSA9IHRoaXMuJGF0dHJzXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUobW9kZWxWYWx1ZSkge1xuICAgICAgdGhpcy5jaGVja2VkID0gbW9kZWxWYWx1ZVxuICAgIH0sXG5cbiAgICBjaGVja2VkKGNoZWNrZWQpIHtcbiAgICAgIGlmIChjaGVja2VkICE9PSB0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBjaGVja2VkKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBjaGVja2VkKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXN3aXRjaCB7XG4gIC8vIFVzZSB3aG9sZSBtdWx0aXBsZXMgb2YgYHJlbWAgZm9yIHNpemVzIGFuZCBgcHhgIG1hcmdpbnMvcGFkZGluZyBhbG9uZ1xuICAvLyB3aXRoIGBjYWxjKClgIHRvIGVuZCB1cCB3aXRoIGV2ZW4gcGl4ZWwgc2l6ZXMuXG4gIC0tc3dpdGNoLXdpZHRoOiA0ZW07XG4gIC0tc3dpdGNoLWhlaWdodDogMmVtO1xuICAtLXN3aXRjaC1tYXJnaW46IDJweDtcbiAgLS1zd2l0Y2gtcGFkZGluZzogM3B4O1xuICAtLXN3aXRjaC1zcGVlZDogMzAwbXM7XG4gIC0tbGFiZWwtbWFyZ2luOiAwLjVlbTtcbiAgLS13aWR0aDogY2FsYyh2YXIoLS1zd2l0Y2gtd2lkdGgpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKTtcbiAgLS1oZWlnaHQ6IGNhbGModmFyKC0tc3dpdGNoLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpO1xuICAtLW9mZnNldDogY2FsYyh2YXIoLS13aWR0aCkgLSB2YXIoLS1oZWlnaHQpKTtcblxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KTtcbiAgLy8gVG8gbWFrZSBpbmxpbmUgbGFiZWxzIGFwcGVhciBvbiBjb25zaXN0ZW50IGJhc2VsaW5lOlxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAuZGl0by1zd2l0Y2gtcGFuZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiB2YXIoLS13aWR0aCk7XG4gICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLXBhbmUsXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgdG9wOiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0O1xuICAgIHRyYW5zaXRpb246XG4gICAgICBib3JkZXItY29sb3IgMC4zcyxcbiAgICAgIGJhY2tncm91bmQtY29sb3IgMC4zcztcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgIC0tc2l6ZTogY2FsYyh2YXIoLS1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1wYWRkaW5nKSk7XG5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiB2YXIoLS1zd2l0Y2gtcGFkZGluZyk7XG4gICAgbGVmdDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpO1xuICAgIHdpZHRoOiB2YXIoLS1zaXplKTtcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUpO1xuICAgIGJvcmRlci1yYWRpdXM6IGNhbGModmFyKC0tc2l6ZSkgLyAyKTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tc3dpdGNoLXNwZWVkKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uLFxuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICB9XG5cbiAgJi5kaXRvLWNoZWNrZWQge1xuICAgIGlucHV0IHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgodmFyKC0tb2Zmc2V0KSk7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICAgIGxlZnQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgICByaWdodDogdW5zZXQ7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWRpc2FibGVkIHtcbiAgICBAZXh0ZW5kICVidXR0b24tZGlzYWJsZWQ7XG4gIH1cblxuICAmOmZvY3VzLXdpdGhpbjpub3QoOmhvdmVyKSB7XG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgeyBoIGFzIGNyZWF0ZUVsZW1lbnQsIFRyYW5zaXRpb24gfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5mdW5jdGlvbiBUcmFuc2l0aW9uSGVpZ2h0KHsgZW5hYmxlZCB9LCB7IHNsb3RzIH0pIHtcbiAgcmV0dXJuIGVuYWJsZWRcbiAgICA/IGNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgcHJvcHMsIHNsb3RzKVxuICAgIDogc2xvdHMuZGVmYXVsdCgpXG59XG5cblRyYW5zaXRpb25IZWlnaHQucHJvcHMgPSB7XG4gIGVuYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25IZWlnaHRcblxuY29uc3Qgc2V0U3R5bGUgPSAoZWxlbWVudCwgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpXG5cbmNvbnN0IG5leHRUaW1lb3V0ID0gY2FsbGJhY2sgPT4gc2V0VGltZW91dChjYWxsYmFjaywgMClcblxuLy8gRm9yY2UgcmVwYWludCB0byBtYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyB0cmlnZ2VyZWQgY29ycmVjdGx5LlxuY29uc3QgZm9yY2VSZXBhaW50ID0gZWxlbWVudCA9PiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmhlaWdodFxuXG5jb25zdCBwcm9wcyA9IHtcbiAgbmFtZTogJ2RpdG8taGVpZ2h0JyxcblxuICBvbkFmdGVyRW50ZXIoZWxlbWVudCkge1xuICAgIC8vIEEgdGltZW91dCBiZWZvcmUgc2V0dGluZyBzdHlsZSBpcyBvbmx5IHJlYWxseSBuZWVkZWQgYWZ0ZXIgY2FsbHMgdG9cbiAgICAvLyBgZm9yY2VSZXBhaW50KClgLCBidXQgdXNpbmcgb25lIGhlcmUgdG9vIHByZXNlcnZlcyBleGVjdXRpb24gc2VxdWVuY2Ugc29cbiAgICAvLyB0aGF0IHRoZSBjYWxsIGZyb20gYGVudGVyKClgIGNhbiBuZXZlciBvdXRydW4gdGhlIG9uZSBmcm9tIGBhZnRlckVudGVyKClgXG4gICAgbmV4dFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQ6IG51bGwgfSkpXG4gIH0sXG5cbiAgb25FbnRlcihlbGVtZW50KSB7XG4gICAgLy8gRm9yIHNvbWUgcmVhc29uIHdlJ3JlIGdldHRpbmcgdHdvIGBvbkVudGVyKClgIGNhbGxzIHBlciB0cmFuc2l0aW9uLFxuICAgIC8vIHNvIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBzZWNvbmQgb25lLiBUaGlzIG1pZ2h0IGJlIGxpbmtlZCB0byB0aGUgdXNlXG4gICAgLy8gb2YgYG5leHRUaW1lb3V0KClgLCB3aGljaCBpcyByZXF1aXJlZCB0byBnZXQgdGhlIGNvcnJlY3QgdmFsdWUgZm9yXG4gICAgLy8gYGhlaWdodGAsIGJhc2VkIG9uIGAmLS1sYWJlbC12ZXJ0aWNhbGAgY2FsY3VsYXRpb25zLlxuICAgIGNvbnN0IHsgd2lkdGggfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICBzZXRTdHlsZShlbGVtZW50LCB7XG4gICAgICB3aWR0aCxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgICBoZWlnaHQ6ICdhdXRvJ1xuICAgIH0pXG4gICAgbmV4dFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgeyBoZWlnaHQgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgIHBvc2l0aW9uOiBudWxsLFxuICAgICAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgICAgICBoZWlnaHQ6IDBcbiAgICAgIH0pXG4gICAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pKVxuICAgIH0pXG4gIH0sXG5cbiAgb25MZWF2ZShlbGVtZW50KSB7XG4gICAgY29uc3QgeyBoZWlnaHQgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodCB9KVxuICAgIGZvcmNlUmVwYWludChlbGVtZW50KVxuICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAwIH0pKVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kZHVyYXRpb246IDAuMTVzO1xuXG4uZGl0by1oZWlnaHQtZW50ZXItYWN0aXZlLFxuLmRpdG8taGVpZ2h0LWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IGhlaWdodCAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uZGl0by1oZWlnaHQtZW50ZXItYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBkaXRvLXNsaWRlLWVudGVyICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG59XG5cbi5kaXRvLWhlaWdodC1sZWF2ZS1hY3RpdmUge1xuICBhbmltYXRpb246IGRpdG8tc2xpZGUtbGVhdmUgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbn1cblxuLmRpdG8taGVpZ2h0LWVudGVyLWZyb20sXG4uZGl0by1oZWlnaHQtbGVhdmUtdG8ge1xuICBoZWlnaHQ6IDA7XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgbWFya1JhdywgdXNlU2xvdHMsIENvbW1lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNWTm9kZUNvbnRlbnQodm5vZGUpIHtcbiAgcmV0dXJuIHZub2RlICYmIGFzQXJyYXkodm5vZGUpLnNvbWUodm5vZGUgPT4gdm5vZGUudHlwZSAhPT0gQ29tbWVudClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Nsb3RDb250ZW50KHNsb3QsIHByb3BzID0ge30pIHtcbiAgc2xvdCA9IGlzU3RyaW5nKHNsb3QpID8gdXNlU2xvdHMoKVtzbG90XSA6IHNsb3RcbiAgcmV0dXJuIGhhc1ZOb2RlQ29udGVudChzbG90Py4ocHJvcHMpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmF3KHZhbHVlKSB7XG4gIHJldHVybiBtYXJrUmF3KHsgdmFsdWUgfSlcbn1cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21IYW5kbGVyczogW11cbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIGZvciAoY29uc3QgeyByZW1vdmUgfSBvZiB0aGlzLmRvbUhhbmRsZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgICB0aGlzLmRvbUhhbmRsZXJzID0gW11cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZG9tT24oZWxlbWVudCwgdHlwZSwgaGFuZGxlcikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkRXZlbnRzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBpc09iamVjdCh0eXBlKSA/IHR5cGUgOiB7IFt0eXBlXTogaGFuZGxlciB9XG4gICAgICApXG4gICAgICB0aGlzLmRvbUhhbmRsZXJzLnB1c2gocmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS91bm1vdW50ZWQoKWAgb24gaXRzXG4gICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnRgLCBpZiB0aGUgcGFyZW50IHVzZXMgdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHNjaGVtYUNvbXBvbmVudCwgYWRkKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5wdXNoKHNjaGVtYUNvbXBvbmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMuc3BsaWNlKHNjaGVtYUNvbXBvbmVudHMuaW5kZXhPZihzY2hlbWFDb21wb25lbnQpLCAxKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4vU2NoZW1hUGFyZW50TWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1NjaGVtYVBhcmVudE1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZmxhdE1hcCgoeyBlcnJvcnMgfSkgPT4gZXJyb3JzIHx8IFtdKVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSkpXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52ZXJpZnlBbGwobWF0Y2gpKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5yZXNldFZhbGlkYXRpb24oKSlcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5jbGVhckVycm9ycygpKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzLCBmaXJzdCA9IHRydWUpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBzY2hlbWFDb21wb25lbnQgPT4ge1xuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cywgZmlyc3QpKSB7XG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgICByZXR1cm4gIWZpcnN0XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgVmFsaWRhdG9yTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Q29tbW9uUHJlZml4IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZWxvYWQ6IGZhbHNlLFxuICAgICAgLy8gRWFjaCByb3V0ZS1jb21wb25lbnQgZGVmaW5lcyBhIHN0b3JlIHRoYXQgZ2V0cyBwYXNzZWQgb24gdG8gaXRzXG4gICAgICAvLyBjaGlsZCBjb21wb25lbnRzLCBzbyB0aGV5IGNhbiBzdG9yZSB2YWx1ZXMgaW4gdGhlbSB0aGF0IGxpdmUgYmV5b25kXG4gICAgICAvLyB0aGVpciBsaWZlLWN5Y2xlLiBTZWU6IERpdG9QYW5lLCBTb3VyY2VNaXhpblxuICAgICAgc3RvcmU6IHt9LFxuICAgICAgbG9hZENhY2hlOiB7fSAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgcm91dGVDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJvdXRlTGV2ZWwoKSB7XG4gICAgICBsZXQgbGV2ZWwgPSAwXG4gICAgICBsZXQgcm91dGVDb21wb25lbnQgPSB0aGlzXG4gICAgICB3aGlsZSAoKHJvdXRlQ29tcG9uZW50ID0gcm91dGVDb21wb25lbnQucGFyZW50Um91dGVDb21wb25lbnQpKSB7XG4gICAgICAgIGxldmVsKytcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZXZlbFxuICAgIH0sXG5cbiAgICByb3V0ZVJlY29yZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5tYXRjaGVkW3RoaXMucm91dGVMZXZlbF1cbiAgICB9LFxuXG4gICAgaXNMYXN0Um91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGlzIHJvdXRlciBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSBtYXRjaGVkW21hdGNoZWQubGVuZ3RoIC0gMV1cbiAgICB9LFxuXG4gICAgaXNMYXN0VW5uZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJvdXRlIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlIHRoYXRcbiAgICAgIC8vIG5lZWRzIGl0cyBvd24gcm91dGVyLXZpZXcgKD0gaXMgbm90IG5lc3RlZCkuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICBmb3IgKGxldCBpID0gbWF0Y2hlZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBtYXRjaGVkW2ldXG4gICAgICAgIGlmICghcmVjb3JkLm1ldGEubmVzdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IHJlY29yZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNOZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEubmVzdGVkXG4gICAgfSxcblxuICAgIGlzVmlldygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQ/Lm1ldGFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJvdXRlUGF0aCh0aGlzLnJvdXRlUmVjb3JkPy5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgaXNNdXRhdGluZygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVSb3V0ZVVwZGF0ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXM/LmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzPy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdXRhdGluZykge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgocmVjb3JkUGF0aCkge1xuICAgICAgLy8gTWFwcyB0aGUgcm91dGUncyBhY3R1YWwgcGF0aCB0byB0aGUgbWF0Y2hlZCByb3V0ZXMgYnkgY291bnRpbmcgaXRzXG4gICAgICAvLyBwYXJ0cyBzZXBhcmF0ZWQgYnkgJy8nLCBzcGxpdHRpbmcgdGhlIHBhdGggaW50byB0aGUgbWFwcGVkIHBhcnRzXG4gICAgICAvLyBjb250YWluaW5nIGFjdHVhbCBwYXJhbWV0ZXJzLlxuICAgICAgY29uc3QgeyBwYXRoIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHJlY29yZFBhdGhcbiAgICAgICAgPyBwYXRoXG4gICAgICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAgICAgLnNsaWNlKDAsIHJlY29yZFBhdGguc3BsaXQoJy8nKS5sZW5ndGgpXG4gICAgICAgICAgICAuam9pbignLycpXG4gICAgICAgIDogcGF0aFxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHtcbiAgICAgIC8vIFRoZSByb3V0ZSBwYXRoIGlzIHRoZSBwYXRoIHVwIHRvIHRoZSBmaXJzdCAvIChleGNsdWRpbmcgdGhlIGluaXRpYWwgLyk6XG4gICAgICBjb25zdCByb290UGF0aCA9IHRoaXMucGF0aC5tYXRjaCgvXihcXC9bXi9dKikvKVsxXVxuICAgICAgcmV0dXJuICFnZXRDb21tb25QcmVmaXgodG8ucGF0aCwgZnJvbS5wYXRoKS5zdGFydHNXaXRoKHJvb3RQYXRoKVxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRlbXBsYXRlKFxuICB2LWlmPVwidXNlclwiXG4pXG4gIC8vLSBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4gIC8vLSBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbiAgLy8tIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuICAvLy0gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG4gIFJvdXRlclZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gICAgOmtleT1cIm5hbWVcIlxuICApXG4gIC5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlclNjaGVtYSh2aWV3U2NoZW1hKVwiXG4gICAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4gIClcbiAgICBEaXRvU2NoZW1hKFxuICAgICAgOmtleT1cIm5hbWVcIlxuICAgICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICAgIHBhZGRpbmc9XCJyb290XCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICBzY3JvbGxhYmxlXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCB7XG4gIGlzU2luZ2xlQ29tcG9uZW50VmlldyxcbiAgc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudFxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9WaWV3Jywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIC8vIFJlZGlyZWN0ICRzb3VyY2VDb21wb25lbnQgYW5kICRyZXNvdXJjZUNvbXBvbmVudCB0byB0aGUgbWFpbiBjb21wb25lbnQ6XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8uc291cmNlQ29tcG9uZW50IHx8IG51bGwsXG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8ucmVzb3VyY2VDb21wb25lbnQgfHwgbnVsbFxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBVcGRhdGVkIGZyb20gTG9hZGluZ01peGluIHRocm91Z2ggYHNldExvYWRpbmcoaXNMb2FkaW5nKWA6XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgLy8gTk9URTogRGF0YSBpcyBzaGFyZWQgYWNyb3NzIGFsbCB2aWV3cyBiZWNhdXNlIHRoZSByb3V0ZXIgcmVjeWNsZXMgdGhlXG4gICAgICAvLyBEaXRvVmlldyBjb21wb25lbnQuXG4gICAgICBkYXRhOiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEuc2NoZW1hXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICBpc1ZpZXcoKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudFZpZXcoKSB7XG4gICAgICByZXR1cm4gaXNTaW5nbGVDb21wb25lbnRWaWV3KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBtYWluQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uZ2V0Q29tcG9uZW50QnlEYXRhUGF0aCh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHZpZXdTY2hlbWEoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudCwgLi4uc2NoZW1hIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgLy8gVHJhbnNsYXRlIHNpbmdsZS1jb21wb25lbnQgc2NoZW1hcyBpbnRvIG11bHRpLWNvbXBvbmVudCBzY2hlbWFzLFxuICAgICAgLy8gc28gdGhleSBjYW4gYmUgcmVuZGVyZWQgZGlyZWN0bHkgdGhyb3VnaCBEaXRvU2NoZW1hIGFsc286XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICAgIFtzY2hlbWEubmFtZV06IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBzY2hlbWEubmFtZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgLi4uY29tcG9uZW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc2NoZW1hXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIHJldHVybiBzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50KHRoaXMudmlld1NjaGVtYSwgaGFzUmVzb3VyY2UpXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlOiB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMzM5MyNpc3N1ZWNvbW1lbnQtMTE1ODQ3MDE0OVxuICAgICAgZmx1c2g6ICdwb3N0JyxcbiAgICAgIGhhbmRsZXIodG8sIGZyb20pIHtcbiAgICAgICAgLy8gU2VlIGlmIHRoZSByb3V0ZSBjaGFuZ2VzIGNvbXBsZXRlbHksIGFuZCBjbGVhciB0aGUgZGF0YSBpZiBpdCBkb2VzLlxuICAgICAgICBpZiAodGhpcy5pc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkpIHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5kYXRhID0ge31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICAvLyBMaXN0cyBpbnNpZGUgc2luZ2xlLWNvbXBvbmVudCB2aWV3cyB1c2UgdGhlIHZpZXcncyBwYXRoIGZvciBzdWItcGF0aHM6XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB0aGlzLnBhdGhcbiAgICAgICAgOiBgJHt0aGlzLnBhdGh9LyR7cGF0aH1gXG4gICAgfSxcblxuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyB1bnJlZkVsZW1lbnQgfSBmcm9tICdAdnVldXNlL2NvcmUnO1xuaW1wb3J0IHsgY3JlYXRlRm9jdXNUcmFwIH0gZnJvbSAnZm9jdXMtdHJhcCc7XG5pbXBvcnQgeyBkZWZpbmVDb21wb25lbnQsIHJlZiwgd2F0Y2gsIG9uU2NvcGVEaXNwb3NlLCBoIH0gZnJvbSAndnVlJztcblxuY29uc3QgVXNlRm9jdXNUcmFwID0gLyogQF9fUFVSRV9fICovIC8qQF9fUFVSRV9fKi8gZGVmaW5lQ29tcG9uZW50KHtcbiAgbmFtZTogXCJVc2VGb2N1c1RyYXBcIixcbiAgcHJvcHM6IFtcImFzXCIsIFwib3B0aW9uc1wiXSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xuICAgIGxldCB0cmFwO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlZigpO1xuICAgIGNvbnN0IGFjdGl2YXRlID0gKCkgPT4gdHJhcCAmJiB0cmFwLmFjdGl2YXRlKCk7XG4gICAgY29uc3QgZGVhY3RpdmF0ZSA9ICgpID0+IHRyYXAgJiYgdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgd2F0Y2goXG4gICAgICAoKSA9PiB1bnJlZkVsZW1lbnQodGFyZ2V0KSxcbiAgICAgIChlbCkgPT4ge1xuICAgICAgICBpZiAoIWVsKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdHJhcCA9IGNyZWF0ZUZvY3VzVHJhcChlbCwgcHJvcHMub3B0aW9ucyB8fCB7fSk7XG4gICAgICAgIGFjdGl2YXRlKCk7XG4gICAgICB9LFxuICAgICAgeyBmbHVzaDogXCJwb3N0XCIgfVxuICAgICk7XG4gICAgb25TY29wZURpc3Bvc2UoKCkgPT4gZGVhY3RpdmF0ZSgpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHNsb3RzLmRlZmF1bHQpXG4gICAgICAgIHJldHVybiBoKHByb3BzLmFzIHx8IFwiZGl2XCIsIHsgcmVmOiB0YXJnZXQgfSwgc2xvdHMuZGVmYXVsdCgpKTtcbiAgICB9O1xuICB9XG59KTtcblxuZXhwb3J0IHsgVXNlRm9jdXNUcmFwIH07XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZGlhbG9nKFxuICByZWY9XCJkaWFsb2dcIlxuICByb2xlPVwiZGlhbG9nXCJcbiAgYXJpYS1leHBhbmRlZD1cInRydWVcIlxuICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gIDpzdHlsZT1cInsgJy0td2lkdGgnOiBzZXR0aW5ncy53aWR0aCA/IGAke3NldHRpbmdzLndpZHRofXB4YCA6IG51bGwgfVwiXG4gIEBtb3VzZXVwPVwib25Nb3VzZVVwXCJcbilcbiAgVXNlRm9jdXNUcmFwLmRpdG8tZGlhbG9nX19mb2N1cy10cmFwKDpvcHRpb25zPVwiZm9jdXNUcmFwT3B0aW9uc1wiKVxuICAgIGZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICAgICAgQHN1Ym1pdC5wcmV2ZW50PVwic3VibWl0XCJcbiAgICApXG4gICAgICAvLyBBZGQgYW4gaW52aXNpYmxlIGJ1dHRvbiB0aGF0IHByZXZlbnRzIHRoZSBjbGVhcmFibGUgYnV0dG9ucyBmcm9tIGJlaW5nXG4gICAgICAvLyBwcmVzc2VkIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgRW50ZXIga2V5OlxuICAgICAgYnV0dG9uKFxuICAgICAgICB2LXNob3c9XCJmYWxzZVwiXG4gICAgICApXG4gICAgICBEaXRvU2NoZW1hKFxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgICAgcGFkZGluZz1cInJvb3RcIlxuICAgICAgICBzY3JvbGxhYmxlXG4gICAgICAgIGdlbmVyYXRlTGFiZWxzXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBVc2VGb2N1c1RyYXAgfSBmcm9tICdAdnVldXNlL2ludGVncmF0aW9ucy91c2VGb2N1c1RyYXAvY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9EaWFsb2cnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgY29tcG9uZW50czogeyBVc2VGb2N1c1RyYXAgfSxcbiAgZW1pdHM6IFsncmVtb3ZlJ10sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIGNvbXBvbmVudHM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHByb21pc2U6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc2V0dGluZ3M6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6ICgpID0+ICh7XG4gICAgICAgIHdpZHRoOiA0ODAsXG4gICAgICAgIGNsaWNrVG9DbG9zZTogZmFsc2VcbiAgICAgIH0pXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gTWFrZSBzdXJlIGRpYWxvZyBkYXRhIGNvbnRhaW5zIGFsbCB0aGUgZXhwZWN0ZWQga2V5c1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSBjbG9uZSh0aGlzLmRhdGEpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGlhbG9nRGF0YSkpIHtcbiAgICAgICAgZGlhbG9nRGF0YVtrZXldID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZGlhbG9nRGF0YVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdkaWFsb2cnLFxuICAgICAgICBjb21wb25lbnRzOiB0aGlzLmNvbXBvbmVudHNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGdldEJ1dHRvblNjaGVtYXModGhpcy5idXR0b25zKSkubWFwKFxuICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIGJ1dHRvbiBzY2hlbWFzIHRvIGFkZCBkZWZhdWx0IGNsaWNrIGV2ZW50c1xuICAgICAgICAgIC8vIGZvciBib3RoICdzdWJtaXQnIGFuZCAnY2FuY2VsJyBidXR0b25zOlxuICAgICAgICAgIChba2V5LCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnY2FuY2VsJyAmJiAhc2NoZW1hLmV2ZW50cykge1xuICAgICAgICAgICAgICBzY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGZvY3VzVHJhcE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICAgIGZhbGxiYWNrRm9jdXM6ICgpID0+IHRoaXMuJHJlZnMuZGlhbG9nLFxuICAgICAgICBvbkRlYWN0aXZhdGU6IHRoaXMuY2FuY2VsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGhhc0J1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5idXR0b25TY2hlbWFzKS5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIGhhc0NhbmNlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuYnV0dG9uU2NoZW1hcy5jYW5jZWxcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmRvbU9uKHdpbmRvdywge1xuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCh0aGlzLmhhc0NhbmNlbCB8fCAhdGhpcy5oYXNCdXR0b25zKSAmJiBldmVudC5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgIHRoaXMuY2FuY2VsKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ3JlbW92ZScpXG4gICAgfSxcblxuICAgIHJlc29sdmUodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZXNvbHZlKHZhbHVlKVxuICAgICAgdGhpcy5yZW1vdmUoKVxuICAgIH0sXG5cbiAgICByZWplY3QodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZWplY3QodmFsdWUpXG4gICAgICB0aGlzLnJlbW92ZSgpXG4gICAgfSxcblxuICAgIHN1Ym1pdCgpIHtcbiAgICAgIHRoaXMucmVzb2x2ZSh0aGlzLmRpYWxvZ0RhdGEpXG4gICAgfSxcblxuICAgIGNhbmNlbCgpIHtcbiAgICAgIC8vIFdoZW4gY2FuY2VsbGluZywgcmVzb2x2ZSBhcyBgdW5kZWZpbmVkYCBzbyB3ZSBjYW4gaGF2ZSBkaWFsb2dzXG4gICAgICAvLyByZXR1cm5pbmcgbnVsbCBhcyBhIGRlZmluZWQgdmFsdWUgYXMgd2VsbC5cbiAgICAgIHRoaXMucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgdGhpcy5jYW5jZWwoKVxuICAgIH0sXG5cbiAgICBvbk1vdXNlVXAoKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5jbGlja1RvQ2xvc2UpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGlhbG9nIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBpbnNldDogMDtcbiAgei1pbmRleDogJHotaW5kZXgtZGlhbG9nO1xuICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgLy8gUHJldmVudCBzY3JvbGxpbmcgb2YgdGhlIHBhZ2UgYmVoaW5kIHRoZSBkaWFsb2c6XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcblxuICAmX19mb2N1cy10cmFwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cblxuICAvLyBUT0RPOiBgJl9faW5uZXJgXG4gIGZvcm0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS13aWR0aCwgNDgwcHgpO1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgYm94LXNoYWRvdzogMCAyMHB4IDYwcHggLTJweCByZ2JhKDI3LCAzMywgNTgsIDAuNCk7XG4gIH1cbn1cblxuLmRpdG8tZGlhbG9nLWVudGVyLWFjdGl2ZSxcbi5kaXRvLWRpYWxvZy1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzO1xuXG4gIGZvcm0ge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1cztcbiAgfVxufVxuXG4uZGl0by1kaWFsb2ctZW50ZXItZnJvbSxcbi5kaXRvLWRpYWxvZy1sZWF2ZS10byB7XG4gIG9wYWNpdHk6IDA7XG5cbiAgZm9ybSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMHB4KTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1yb290KFxuICA6ZGF0YS1hZ2VudC1icm93c2VyPVwiYXBwU3RhdGUuYWdlbnQuYnJvd3NlclwiXG4gIDpkYXRhLWFnZW50LXBsYXRmb3JtPVwiYXBwU3RhdGUuYWdlbnQucGxhdGZvcm1cIlxuICA6ZGF0YS1hZ2VudC12ZXJzaW9uPVwiYXBwU3RhdGUuYWdlbnQudmVyc2lvbk51bWJlclwiXG4pXG4gIFRyYW5zaXRpb24obmFtZT1cImRpdG8tZHJhZ1wiKVxuICAgIC5kaXRvLWRyYWctb3ZlcmxheShcbiAgICAgIHYtaWY9XCJpc0RyYWdnaW5nRmlsZXNcIlxuICAgIClcbiAgVHJhbnNpdGlvbkdyb3VwKG5hbWU9XCJkaXRvLWRpYWxvZ1wiKVxuICAgIERpdG9EaWFsb2coXG4gICAgICB2LWZvcj1cIihkaWFsb2csIGtleSkgaW4gZGlhbG9nc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDpjb21wb25lbnRzPVwiZGlhbG9nLmNvbXBvbmVudHNcIlxuICAgICAgOmJ1dHRvbnM9XCJkaWFsb2cuYnV0dG9uc1wiXG4gICAgICA6cHJvbWlzZT1cImRpYWxvZy5wcm9taXNlXCJcbiAgICAgIDpkYXRhPVwiZGlhbG9nLmRhdGFcIlxuICAgICAgOnNldHRpbmdzPVwiZGlhbG9nLnNldHRpbmdzXCJcbiAgICAgIEByZW1vdmU9XCJyZW1vdmVEaWFsb2coa2V5KVwiXG4gICAgKVxuICBEaXRvTmF2aWdhdGlvblxuICBtYWluLmRpdG8tcGFnZS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1yZXNpemU9XCJvblJlc2l6ZVBhZ2VcIlxuICAgIDpjbGFzcz1cInBhZ2VDbGFzc2VzXCJcbiAgKVxuICAgIERpdG9IZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgUm91dGVyVmlld1xuICBEaXRvU2lkZWJhclxuICAgIERpdG9BY2NvdW50KFxuICAgICAgdi1pZj1cInVzZXJcIlxuICAgIClcbiAgICBhLmRpdG8tbG9naW4oXG4gICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgKVxuICAgICAgc3BhbiBMb2dpblxuICBEaXRvTm90aWZpY2F0aW9ucyhyZWY9XCJub3RpZmljYXRpb25zXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZGVsZWdhdGUgYXMgdGlwcHlEZWxlZ2F0ZSB9IGZyb20gJ3RpcHB5LmpzJ1xuaW1wb3J0IHsgbWFwQ29uY3VycmVudGx5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERpdG9EaWFsb2cgZnJvbSAnLi9EaXRvRGlhbG9nLnZ1ZSdcbmltcG9ydCB7XG4gIHByb2Nlc3NWaWV3LFxuICByZXNvbHZlVmlld3MsXG4gIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUm9vdCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IERpdG9EaWFsb2cgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgcmVtb3ZlUm91dGVzOiBudWxsLFxuICAgICAgZGlhbG9nczoge30sXG4gICAgICBwYWdlV2lkdGg6IDAsXG4gICAgICBsb2FkaW5nQ291bnQ6IDAsXG4gICAgICBhbGxvd0xvZ2luOiBmYWxzZSxcbiAgICAgIGlzRHJhZ2dpbmdGaWxlczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNNb3VudGVkICYmIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfSxcblxuICAgIHBhZ2VDbGFzc2VzKCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tcGFnZSdcbiAgICAgIC8vIE5PVEU6IEtlZXAgc3luY2VkIHdpdGggJGNvbnRlbnQtd2lkdGggaW4gU0NTUzpcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IDkwMFxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5wYWdlQ2xhc3MsXG4gICAgICAgIHtcbiAgICAgICAgICBbYCR7cHJlZml4fS0td2lkdGgtODBgXTogdGhpcy5wYWdlV2lkdGggPD0gY29udGVudFdpZHRoICogMC44LFxuICAgICAgICAgIFtgJHtwcmVmaXh9LS13aWR0aC02MGBdOiB0aGlzLnBhZ2VXaWR0aCA8PSBjb250ZW50V2lkdGggKiAwLjZcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuYXBwU3RhdGUudGl0bGUgPSBkb2N1bWVudC50aXRsZSB8fCAnRGl0by5qcyBBZG1pbidcbiAgICAvLyBXaXRoIGhvdC1yZWxvYWRpbmcsIGl0IGxvb2tzIGxpa2UgZGVzdHJveWVkIGhvb2tzIGFyZW4ndCBhbHdheXMgY2FsbGVkXG4gICAgLy8gZm9yIHJvdXRlIGNvbXBvbmVudHMgc28gcmVzZXQgdGhlIGFycmF5IG9mIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBpbnN0ZWFkLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzID0gW11cbiAgfSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIHRoaXMuc2V0dXBEcmFnQW5kRHJvcCgpXG5cbiAgICB0aXBweURlbGVnYXRlKHRoaXMuJGVsLCB7XG4gICAgICB0YXJnZXQ6ICcuZGl0by1pbmZvJyxcbiAgICAgIHRoZW1lOiAnaW5mbycsXG4gICAgICBhbmltYXRpb246ICdzaGlmdC1hd2F5LXN1YnRsZScsXG4gICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgIGRlbGF5OiAyNTAsXG4gICAgICB6SW5kZXg6IDEsXG4gICAgICBhcHBlbmRUbzogbm9kZSA9PiBub2RlLmNsb3Nlc3QoJy5kaXRvLXBhbmUnKSxcbiAgICAgIG9uU2hvdzogaW5zdGFuY2UgPT4gaW5zdGFuY2Uuc2V0Q29udGVudChpbnN0YW5jZS5yZWZlcmVuY2UuZGF0YXNldC5pbmZvKVxuICAgIH0pXG5cbiAgICAvLyBDbGVhciB0aGUgbGFiZWwgbWFya2VkIGFzIGFjdGl2ZSBvbiBhbGwgbW91c2UgYW5kIGtleWJvYXJkIGV2ZW50cywgZXhjZXB0XG4gICAgLy8gdGhlIG9uZXMgdGhhdCBEaXRvTGFiZWwgaXRzZWxmIGludGVyY2VwdHMuXG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY2xpY2s6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCFldmVudC50YXJnZXQuY2xvc2VzdCgnLmRpdG8tbGFiZWwnKSkge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGtleXVwOiBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5jb2RlID09PSAnVGFiJykge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IGZhbHNlXG4gICAgICBpZiAoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIH1cbiAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRHJhZ0FuZERyb3AoKSB7XG4gICAgICAvLyBUaGlzIGNvZGUgb25seSBoYXBwZW5zIHRoZSB2aXN1YWwgZWZmZWN0cyBhcm91bmQgZHJhZ2dpbmcgYW5kIGRyb3BwaW5nXG4gICAgICAvLyBmaWxlcyBpbnRvIGEgYERpdG9UeXBlVXBsb2FkYCBjb21wb25lbnQuIFRoZSBhY3R1YWwgdXBsb2FkaW5nIGlzXG4gICAgICAvLyBoYW5kbGVkIGJ5IHRoZSBgRGl0b1R5cGVVcGxvYWRgIGNvbXBvbmVudCBpdHNlbGYuXG5cbiAgICAgIGxldCBkcmFnQ291bnQgPSAwXG4gICAgICBsZXQgdXBsb2FkcyA9IFtdXG5cbiAgICAgIGNvbnN0IHRvZ2dsZURyb3BUYXJnZXRDbGFzcyA9IGVuYWJsZWQgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHVwbG9hZCBvZiB1cGxvYWRzKSB7XG4gICAgICAgICAgdXBsb2FkXG4gICAgICAgICAgICAuY2xvc2VzdCgnLmRpdG8tY29udGFpbmVyJylcbiAgICAgICAgICAgIC5jbGFzc0xpc3QudG9nZ2xlKCdkaXRvLWRyb3AtdGFyZ2V0JywgZW5hYmxlZClcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgICAgICB1cGxvYWRzID0gW11cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXREcmFnZ2luZ0ZpbGVzID0gZW5hYmxlZCA9PiB7XG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZ0ZpbGVzID0gZW5hYmxlZFxuICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgIHRvZ2dsZURyb3BUYXJnZXRDbGFzcyh0cnVlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdG9nZ2xlRHJvcFRhcmdldENsYXNzKGZhbHNlKSwgMTUwKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgZHJhZ2VudGVyOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKCFkcmFnQ291bnQgJiYgZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICB1cGxvYWRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRpdG8tdXBsb2FkJylcbiAgICAgICAgICAgIGNvbnN0IGhhc1VwbG9hZHMgPSB1cGxvYWRzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gaGFzVXBsb2FkcyA/ICdjb3B5JyA6ICdub25lJ1xuICAgICAgICAgICAgaWYgKGhhc1VwbG9hZHMpIHtcbiAgICAgICAgICAgICAgc2V0RHJhZ2dpbmdGaWxlcyh0cnVlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZHJhZ0NvdW50KytcbiAgICAgICAgfSxcblxuICAgICAgICBkcmFnbGVhdmU6IGV2ZW50ID0+IHtcbiAgICAgICAgICBkcmFnQ291bnQtLVxuICAgICAgICAgIGlmICghZHJhZ0NvdW50ICYmIGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICAgICAgc2V0RHJhZ2dpbmdGaWxlcyhmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZHJhZ292ZXI6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5Ecm9wID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoXG4gICAgICAgICAgICAgICcuZGl0by1jb250YWluZXI6aGFzKC5kaXRvLXVwbG9hZCknXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9IGNhbkRyb3AgPyAnY29weScgOiAnbm9uZSdcbiAgICAgICAgICAgIGlmICghY2FuRHJvcCkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGRyb3A6IGV2ZW50ID0+IHtcbiAgICAgICAgICBkcmFnQ291bnQgPSAwXG4gICAgICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICAgICAgc2V0RHJhZ2dpbmdGaWxlcyhmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG5vdGlmeSh7IHR5cGUgPSAnaW5mbycsIHRpdGxlLCB0ZXh0LCBlcnJvciB9ID0ge30pIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5ub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZXJyb3IgfSlcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH0sXG5cbiAgICByZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSBpc0xvYWRpbmcgPyAxIDogLTFcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7IGNvbXBvbmVudHMsIGJ1dHRvbnMsIGRhdGEsIHNldHRpbmdzIH0pIHtcbiAgICAgIC8vIFNob3dzIGEgZGl0by1kaWFsb2cgY29tcG9uZW50IGFuZCB3cmFwcyBpdCBpbiBhIHByb21pc2Ugc28gdGhhdCB0aGVcbiAgICAgIC8vIGJ1dHRvbnMgaW4gdGhlIGRpYWxvZyBjYW4gdXNlIGBkaWFsb2cucmVzb2x2ZSgpYCBhbmQgYGRpYWxvZy5yZWplY3QoKWBcbiAgICAgIC8vIHRvIGNsb3NlIHRoZSBtb2RhbCBkaWFsb2cgYW5kIHJlc29sdmUgLyByZWplY3QgdGhlIHByb21pc2UgYXQgb25jZS5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFzeW5jLXByb21pc2UtZXhlY3V0b3JcbiAgICAgICAgYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIC8vIFByb2Nlc3MgY29tcG9uZW50cyB0byByZXNvbHZlIGFzeW5jIHNjaGVtYXMuXG4gICAgICAgICAgY29uc3Qgcm91dGVzID0gW11cbiAgICAgICAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgICAgICAgIHRoaXMuYXBpLFxuICAgICAgICAgICAgeyB0eXBlOiAnZGlhbG9nJywgY29tcG9uZW50cyB9LFxuICAgICAgICAgICAgcm91dGVzLFxuICAgICAgICAgICAgMFxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAocm91dGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0RpYWxvZ3MgZG8gbm90IHN1cHBvcnQgY29tcG9uZW50cyB0aGF0IHByb2R1Y2Ugcm91dGVzJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBrZXkgPSBgZGlhbG9nLSR7KytkaWFsb2dJZH1gXG4gICAgICAgICAgdGhpcy5kaWFsb2dzW2tleV0gPSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAgICAgIHByb21pc2U6IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcmVtb3ZlRGlhbG9nKGtleSkge1xuICAgICAgZGVsZXRlIHRoaXMuZGlhbG9nc1trZXldXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ2luKCkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICAgICAgY29uc3Qge1xuICAgICAgICBhZGRpdGlvbmFsQ29tcG9uZW50cyxcbiAgICAgICAgcmVkaXJlY3RBZnRlckxvZ2luXG4gICAgICB9ID0gdGhpcy5vcHRpb25zLmxvZ2luIHx8IHt9XG4gICAgICBjb25zdCBsb2dpbkRhdGEgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFzc3dvcmQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmFkZGl0aW9uYWxDb21wb25lbnRzXG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgdGV4dDogJ0NhbmNlbCdcbiAgICAgICAgICAgIC8vIE5PVEU6IFRoZSBjbGljayBldmVudCBpcyBhZGRlZCBpbiBEaXRvRGlhbG9nLmJ1dHRvblNjaGVtYXMoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBsb2dpbjoge1xuICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICB0ZXh0OiAnTG9naW4nXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGxvZ2luRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9naW4sXG4gICAgICAgICAgICBkYXRhOiBsb2dpbkRhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJMb2dpbikge1xuICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShyZWRpcmVjdEFmdGVyTG9naW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlcihyZXNwb25zZS5kYXRhLnVzZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3IgfHwgZXJyXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvclxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy5sb2dpbigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbmF2aWdhdGVIb21lKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUoJy8nKVxuICAgIH0sXG5cbiAgICBhc3luYyBsb2dvdXQoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5sb2dvdXQsXG4gICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuc2V0VXNlcihudWxsKVxuICAgICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBmZXRjaFVzZXIoKSB7XG4gICAgICBsZXQgdXNlciA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLnNlc3Npb24sXG4gICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgdXNlciA9IHJlc3BvbnNlLmRhdGEudXNlciB8fCBudWxsXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2U/LmRhdGE/LmVycm9yIHx8IGVyclxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpXG4gICAgICByZXR1cm4gdXNlclxuICAgIH0sXG5cbiAgICBzZXRVc2VyKHVzZXIpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUudXNlciA9IChcbiAgICAgICAgdXNlciAmJlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodXNlciwgRGl0b1VzZXIucHJvdG90eXBlKVxuICAgICAgKVxuICAgICAgLy8gQ2xlYXIgcmVzb2x2ZWQgdmlld3Mgd2hlbiB1c2VyIGlzIGxvZ2dlZCBvdXQuXG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0ge31cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVVc2VyKCkge1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVWaWV3cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IGF3YWl0IHJlc29sdmVWaWV3cyh0aGlzLnVucmVzb2x2ZWRWaWV3cylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVxdWVzdCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgICAgLy8gQ29sbGVjdCBhbGwgcm91dGVzIGZyb20gdGhlIHJvb3Qgc2NoZW1hIGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IHJvdXRlcyA9IGF3YWl0IG1hcENvbmN1cnJlbnRseShcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSxcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiBwcm9jZXNzVmlldyhEaXRvVmlldywgdGhpcy5hcGksIHNjaGVtYSwgbmFtZSlcbiAgICAgIClcbiAgICAgIC8vIE5vdyB0aGF0IHRoZSByb3V0ZXMgYXJlIGxvYWRlZCwgcmVwbGFjZSBhbGwgZXhpc3Rpbmcgcm91dGVzIHdpdGggdGhlXG4gICAgICAvLyBuZXcgcm91dGVzLCBhbmQgcmVzdG9yZSB0aGUgY3VycmVudCBwYXRoLlxuICAgICAgY29uc3QgeyBmdWxsUGF0aCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHRoaXMucmVtb3ZlUm91dGVzPy4oKVxuICAgICAgdGhpcy5yZW1vdmVSb3V0ZXMgPSBhZGRSb3V0ZXModGhpcy4kcm91dGVyLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncm9vdCcsXG4gICAgICAgICAgcGF0aDogJy8nLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLnJvdXRlcy5mbGF0KClcbiAgICAgIF0pXG4gICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZShmdWxsUGF0aClcbiAgICB9LFxuXG4gICAgb25SZXNpemVQYWdlKHsgY29udGVudFJlY3Q6IHsgd2lkdGggfSB9KSB7XG4gICAgICB0aGlzLnBhZ2VXaWR0aCA9IHdpZHRoXG4gICAgfVxuICB9XG59KVxuXG5sZXQgZGlhbG9nSWQgPSAwXG5cbmZ1bmN0aW9uIGFkZFJvdXRlcyhyb3V0ZXIsIHJvdXRlcykge1xuICBjb25zdCByZW1vdmVycyA9IFtdXG4gIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgY29uc3QgcmVtb3ZlID0gcm91dGVyLmFkZFJvdXRlKHJvdXRlKVxuICAgIHJlbW92ZXJzLnB1c2gocmVtb3ZlKVxuICB9XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IHJlbW92ZSBvZiByZW1vdmVycykge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9zdHlsZSc7XG5cbi5kaXRvLWFwcCxcbi5kaXRvLXJvb3Qge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuXG4uZGl0by1wYWdlIHtcbiAgLS1tYXgtY29udGVudC13aWR0aDogI3skY29udGVudC13aWR0aH07XG4gIC0tbWF4LXBhZ2Utd2lkdGg6IGNhbGModmFyKC0tbWF4LWNvbnRlbnQtd2lkdGgpICsgMiAqICN7JGNvbnRlbnQtcGFkZGluZ30pO1xuXG4gIGZsZXg6IDAgMSB2YXIoLS1tYXgtcGFnZS13aWR0aCk7XG4gIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gIG1pbi13aWR0aDogMCU7XG4gIG1heC13aWR0aDogdmFyKC0tbWF4LXBhZ2Utd2lkdGgpO1xuICBvdmVyZmxvdzogdmlzaWJsZTsgLy8gRm9yIC5kaXRvLWhlYWRlciBmdWxsLXdpZHRoIGJhY2tncm91bmQuXG5cbiAgJi0td2lkZSB7XG4gICAgLS1tYXgtY29udGVudC13aWR0aDogI3skY29udGVudC13aWR0aC13aWRlfTtcbiAgfVxufVxuXG4uZGl0by1hY2NvdW50LFxuLmRpdG8tbG9naW4ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5kaXRvLWRyYWctb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAkei1pbmRleC1kcmFnLW92ZXJsYXk7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoOHB4KTtcbn1cblxuLmRpdG8tZHJvcC10YXJnZXQge1xuICAtLXNoYWRvdy1hbHBoYTogMC4yNTtcblxuICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgei1pbmRleDogJHotaW5kZXgtZHJhZy1vdmVybGF5ICsgMTtcbiAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDRweCA4cHggcmdiYSgwLCAwLCAwLCB2YXIoLS1zaGFkb3ctYWxwaGEpKSk7XG59XG5cbi5kaXRvLWRyYWctZW50ZXItYWN0aXZlLFxuLmRpdG8tZHJhZy1sZWF2ZS1hY3RpdmUge1xuICAkZHVyYXRpb246IDAuMTVzO1xuXG4gIHRyYW5zaXRpb246XG4gICAgb3BhY2l0eSAkZHVyYXRpb24sXG4gICAgYmFja2Ryb3AtZmlsdGVyICRkdXJhdGlvbjtcblxuICB+ICogLmRpdG8tZHJvcC10YXJnZXQge1xuICAgIHRyYW5zaXRpb246IGZpbHRlciAkZHVyYXRpb247XG4gIH1cbn1cblxuLmRpdG8tZHJhZy1lbnRlci1mcm9tLFxuLmRpdG8tZHJhZy1sZWF2ZS10byB7XG4gIG9wYWNpdHk6IDA7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cigwKTtcblxuICB+ICogLmRpdG8tZHJvcC10YXJnZXQge1xuICAgIC0tc2hhZG93LWFscGhhOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tbWVudShcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVwiXG4gIDpzdHlsZT1cInsgJy0td2lkdGgnOiB3aWR0aCA/IGAke3dpZHRofXB4YCA6IG51bGwgfVwiXG4pXG4gIGxpKFxuICAgIHYtZm9yPVwiaXRlbSBpbiBpdGVtc1wiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoaXRlbSlcIlxuICAgIClcbiAgICAgIGEuZGl0by1saW5rKFxuICAgICAgICA6aHJlZj1cImdldEl0ZW1IcmVmKGl0ZW0pXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0SXRlbUNsYXNzKGl0ZW0sICdkaXRvLXN1Yi1tZW51LWxpbmsnKVwiXG4gICAgICAgIEBjbGljay5wcmV2ZW50LnN0b3A9XCJvbkNsaWNrSXRlbShpdGVtKVwiXG4gICAgICApIHt7IGdldExhYmVsKGl0ZW0pIH19XG4gICAgICBEaXRvTWVudShcbiAgICAgICAgdi1pZj1cIml0ZW0uaXRlbXNcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRJdGVtQ2xhc3MoaXRlbSwgJ2RpdG8tc3ViLW1lbnUnKVwiXG4gICAgICAgIDppdGVtcz1cIml0ZW0uaXRlbXNcIlxuICAgICAgICA6cGF0aD1cImdldEl0ZW1QYXRoKGl0ZW0sIGZhbHNlKVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTWVudScsIHtcbiAgcHJvcHM6IHtcbiAgICBpdGVtczoge1xuICAgICAgdHlwZTogW09iamVjdCwgQXJyYXldLFxuICAgICAgZGVmYXVsdDogKCkgPT4gW11cbiAgICB9LFxuICAgIHBhdGg6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiAwXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblJlc2l6ZSh7IGNvbnRlbnRSZWN0OiB7IHdpZHRoIH0gfSkge1xuICAgICAgaWYgKHdpZHRoKSB7XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRJdGVtQ2xhc3MoaXRlbSwgc3ViTWVudUNsYXNzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbc3ViTWVudUNsYXNzXTogISFpdGVtLml0ZW1zLFxuICAgICAgICAnZGl0by1hY3RpdmUnOiB0aGlzLmlzQWN0aXZlSXRlbShpdGVtKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRJdGVtUGF0aChpdGVtLCBmaXJzdENoaWxkKSB7XG4gICAgICBjb25zdCBwYXRoID0gaXRlbS5wYXRoID8gYCR7dGhpcy5wYXRofS8ke2l0ZW0ucGF0aH1gIDogbnVsbFxuICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQgJiYgcGF0aCAmJiBpdGVtLml0ZW1zXG4gICAgICAgID8gYCR7cGF0aH0ke3RoaXMuZ2V0SXRlbVBhdGgoT2JqZWN0LnZhbHVlcyhpdGVtLml0ZW1zKVswXSwgZmFsc2UpfWBcbiAgICAgICAgOiBwYXRoXG4gICAgfSxcblxuICAgIGdldEl0ZW1IcmVmKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldEl0ZW1QYXRoKGl0ZW0sIHRydWUpXG4gICAgICByZXR1cm4gcGF0aCA/IHRoaXMuJHJvdXRlci5yZXNvbHZlKHBhdGgpLmhyZWYgOiBudWxsXG4gICAgfSxcblxuICAgIGlzQWN0aXZlSXRlbShpdGVtKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLiRyb3V0ZS5wYXRoLnN0YXJ0c1dpdGgodGhpcy5nZXRJdGVtUGF0aChpdGVtLCBmYWxzZSkpIHx8XG4gICAgICAgIGl0ZW0uaXRlbXMgJiYgT2JqZWN0LnZhbHVlcyhpdGVtLml0ZW1zKS5zb21lKHRoaXMuaXNBY3RpdmVJdGVtKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBvbkNsaWNrSXRlbShpdGVtKSB7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRJdGVtUGF0aChpdGVtLCB0cnVlKVxuICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoLCBmb3JjZTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkB1c2UgJ3Nhc3M6Y29sb3InO1xuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbWVudSB7XG4gICRpdGVtLWhlaWdodDogJG1lbnUtZm9udC1zaXplICsgMiAqICRtZW51LXBhZGRpbmctdmVyO1xuXG4gIGJvcmRlci1yaWdodDogJGJvcmRlci1zdHlsZTtcbiAgcGFkZGluZzogMCAkbWVudS1zcGFjaW5nO1xuXG4gIGxpIHtcbiAgICAmOmhhcyguZGl0by1zdWItbWVudTpub3QoLmRpdG8tYWN0aXZlKSkge1xuICAgICAgLy8gUG9wLW91dCBzdWItbWVudXMgb24gaG92ZXI6XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgLmRpdG8tc3ViLW1lbnUtbGluayB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgLmRpdG8tc3ViLW1lbnUge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB3aWR0aDogdmFyKC0td2lkdGgpO1xuICAgICAgICAgIHotaW5kZXg6ICR6LWluZGV4LWhlYWRlcjtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS13aWR0aCkgKyAyICogJG1lbnUtc3BhY2luZykpXG4gICAgICAgICAgICB0cmFuc2xhdGVZKC0kaXRlbS1oZWlnaHQpO1xuXG4gICAgICAgICAgbGk6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgLmRpdG8tbGluayB7XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIC8vIEZpbGwgdGhlIGdhcCB0byBub3QgbG9vc2UgdGhlIGhvdmVyIHdoZW4gbW92aW5nIG92ZXIgaXQuXG4gICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgIGxlZnQ6IC0yICogJG1lbnUtc3BhY2luZztcbiAgICAgICAgICAgIHdpZHRoOiAyICogJG1lbnUtc3BhY2luZztcbiAgICAgICAgICAgIGhlaWdodDogJGl0ZW0taGVpZ2h0O1xuICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAuZGl0by1zdWItbWVudS1saW5rLFxuICAgICAgICAuZGl0by1zdWItbWVudSB7XG4gICAgICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1saW5rIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nO1xuICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBtYXJnaW4tdG9wOiAkbWVudS1zcGFjaW5nO1xuXG4gICAgJjpmb2N1czpub3QoOmFjdGl2ZSwgLmRpdG8tYWN0aXZlKSB7XG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAgIH1cblxuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tc3ViLW1lbnUtbGluayB7XG4gICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiBjb2xvci5hZGp1c3QoJGNvbG9yLWFjdGl2ZSwgJGFscGhhOiAtMC4zKTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1zdWItbWVudSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3Q7XG5cbiAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmFpbFxuICB1bFxuICAgIGxpKFxuICAgICAgdi1mb3I9XCJjb21wb25lbnQgaW4gdHJhaWxcIlxuICAgIClcbiAgICAgIGEuZGl0by1saW5rKFxuICAgICAgICA6Y2xhc3M9XCJnZXRMaW5rQ2xhc3MoY29tcG9uZW50KVwiXG4gICAgICAgIDpocmVmPVwiZ2V0Q29tcG9uZW50SHJlZihjb21wb25lbnQpXCJcbiAgICAgICAgQGNsaWNrLnByZXZlbnQuc3RvcD1cIm9uQ2xpY2tDb21wb25lbnQoY29tcG9uZW50KVwiXG4gICAgICApXG4gICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0U3BhbkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UcmFpbCcsIHtcbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmFpbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5maWx0ZXIoXG4gICAgICAgIGNvbXBvbmVudCA9PiAhIWNvbXBvbmVudC5yb3V0ZVJlY29yZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50UGF0aChjb21wb25lbnQpIHtcbiAgICAgIC8vIERvIHRoZSBzYW1lIGFzIGluIGBEaXRvTWVudWA6IExpbmsgbWVudSBpdGVtcyB0byB0aGUgZmlyc3QgY2hpbGRyZW4uXG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gY29tcG9uZW50XG4gICAgICByZXR1cm4gc2NoZW1hLnR5cGUgPT09ICdtZW51J1xuICAgICAgICA/IE9iamVjdC52YWx1ZXMoc2NoZW1hLml0ZW1zKVswXS5mdWxsUGF0aFxuICAgICAgICA6IGNvbXBvbmVudC5wYXRoXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEhyZWYoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVyLnJlc29sdmUodGhpcy5nZXRDb21wb25lbnRQYXRoKGNvbXBvbmVudCkpLmhyZWZcbiAgICB9LFxuXG4gICAgb25DbGlja0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgcGF0aDogdGhpcy5nZXRDb21wb25lbnRQYXRoKGNvbXBvbmVudCksXG4gICAgICAgIGZvcmNlOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRMaW5rQ2xhc3MoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1hY3RpdmUnOiBjb21wb25lbnQucGF0aCA9PT0gdGhpcy4kcm91dGUucGF0aFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTcGFuQ2xhc3MoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1kaXJ0eSc6IGNvbXBvbmVudC5pc0RpcnR5XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdHJhaWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBoZWlnaHQ6IDNlbTtcblxuICB1bCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgfVxuXG4gIGxpIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgYSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBzcGFuIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci1saWdodDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsaTpub3QoOmxhc3QtY2hpbGQpIGEge1xuICAgICRhbmdsZTogMzNkZWc7XG5cbiAgICAmOjpiZWZvcmUsXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICB3aWR0aDogMXB4O1xuICAgICAgaGVpZ2h0OiAwLjc1ZW07XG4gICAgICByaWdodDogLTAuMjVlbTtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgkYW5nbGUpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wO1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGJvdHRvbTogNTAlO1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLSRhbmdsZSk7XG4gICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b207XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbm5hdi5kaXRvLWhlYWRlclxuICBEaXRvVHJhaWxcbiAgICBEaXRvU3Bpbm5lcihcbiAgICAgIHYtaWY9XCJpc0xvYWRpbmdcIlxuICAgICAgOnNpemU9XCJzcGlubmVyPy5zaXplXCJcbiAgICAgIDpjb2xvcj1cInNwaW5uZXI/LmNvbG9yXCJcbiAgICApXG4gIC8vLSBUZWxlcG9ydCB0YXJnZXQgZm9yIGAuZGl0by1zY2hlbWEtaGVhZGVyYDpcbiAgLmRpdG8taGVhZGVyX190ZWxlcG9ydFxuICBzbG90XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvSGVhZGVyJywge1xuICBwcm9wczoge1xuICAgIHNwaW5uZXI6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIGlzTG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8taGVhZGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItYmxhY2s7XG4gIGZvbnQtc2l6ZTogJGhlYWRlci1mb250LXNpemU7XG4gIGxpbmUtaGVpZ2h0OiAkaGVhZGVyLWxpbmUtaGVpZ2h0O1xuICB6LWluZGV4OiAkei1pbmRleC1oZWFkZXI7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICY6OmFmdGVyIHtcbiAgICAvLyBTZXQgdGhlIGZ1bGwtd2lkdGggaGVhZGVyIGJhY2tncm91bmQgdG8gdGhlIGhlYWRlciBjb2xvci5cbiAgICBjb250ZW50OiAnJztcbiAgICBpbnNldDogMDtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgei1pbmRleDogLTE7XG4gIH1cblxuICBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZzogJGhlYWRlci1wYWRkaW5nO1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG5cbiAgICAmOmVtcHR5IHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJ1xcMjAwYic7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tZGlydHkge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgd2lkdGg6IDhweDtcbiAgICAgIGhlaWdodDogOHB4O1xuICAgICAgbWFyZ2luOiAycHg7XG4gICAgICBtYXJnaW4tbGVmdDogMC41ZW07XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gICZfX3RlbGVwb3J0IHtcbiAgICAvLyBBbGlnbiB0aGUgdGVsZXBvcnRlZCBzY2hlbWEgaGVhZGVycyBvbiB0b3Agb2YgdG8gdGhlIGhlYWRlciBtZW51LlxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgcGFkZGluZzogMCAkaGVhZGVyLXBhZGRpbmctaG9yO1xuICAgIC8vIFR1cm4gb2ZmIHBvaW50ZXIgZXZlbnRzIHNvIHRoYXQgRGl0b1RyYWlsIGtlZXBzIHJlY2VpdmluZyBldmVudHMuLi5cbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAvLyAuLi5idXQgbW92ZSB0aGVtIHRvIHRoZSBjaGlsZHJlbi5cbiAgICA+ICoge1xuICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgfVxuXG4gICAgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbjogMCAwICR0YWItbWFyZ2luICR0YWItbWFyZ2luO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5uYXYuZGl0by1uYXZpZ2F0aW9uLmRpdG8tc2Nyb2xsLXBhcmVudFxuICBoMVxuICAgIFJvdXRlckxpbmsuZGl0by1saW5rKHRvPVwiL1wiKSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICBEaXRvTWVudS5kaXRvLXNjcm9sbCg6aXRlbXM9XCJ2aWV3c1wiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b05hdmlnYXRpb24nLCB7fSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW5hdmlnYXRpb24ge1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICBmbGV4OiAwIDAgbWluLWNvbnRlbnQ7XG4gIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcblxuICBoMSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbGluZS1oZWlnaHQ6ICRoZWFkZXItbGluZS1oZWlnaHQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlcjtcbiAgICBib3JkZXItcmlnaHQ6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWRhcmtlc3Q7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcblxuICAgIC5kaXRvLWxpbmsge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwYWRkaW5nOiAkaGVhZGVyLXBhZGRpbmc7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW5vdGlmaWNhdGlvbnNcbiAgLmRpdG8taGVhZGVyXG4gICAgc3BhblxuICAuZGl0by1ub3RpZmljYXRpb25zX19pbm5lclxuICAgIFZ1ZU5vdGlmaWNhdGlvbnMoXG4gICAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gICAgICA6ZGFuZ2Vyb3VzbHlTZXRJbm5lckh0bWw9XCJ0cnVlXCJcbiAgICAgIHBvc2l0aW9uPVwiXCJcbiAgICAgIHdpZHRoPVwiXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFzQXJyYXksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b05vdGlmaWNhdGlvbnMnLCB7XG4gIG5vdGlmaWNhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNNb3VudGVkICYmIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBub3RpZnkoeyB0eXBlID0gJ2luZm8nLCB0aXRsZSwgdGV4dCwgZXJyb3IgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnLFxuICAgICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICAgIGluZm86ICdJbmZvcm1hdGlvbicsXG4gICAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ05vdGlmaWNhdGlvbidcbiAgICAgIClcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ3dhcm4nLFxuICAgICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICAgIGluZm86ICdsb2cnLFxuICAgICAgICAgIHN1Y2Nlc3M6ICdsb2cnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ2Vycm9yJ1xuICAgICAgKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShcbiAgICAgICAgLi4uW1xuICAgICAgICAgIHN0cmlwVGFncyh0ZXh0KSxcbiAgICAgICAgICAuLi4odHlwZSA9PT0gJ2Vycm9yJyAmJiBlcnJvciA/IFtlcnJvcl0gOiBbXSlcbiAgICAgICAgXVxuICAgICAgKVxuICAgICAgY29uc3QgeyBub3RpZmljYXRpb25zID0gdHJ1ZSB9ID0gdGhpcy5hcGlcbiAgICAgIGlmIChub3RpZmljYXRpb25zKSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBkaXNwbGF5LWR1cmF0aW9uIGZvciB0aGUgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGl0cyBjb250ZW50XG4gICAgICAgIC8vIGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgYGR1cmF0aW9uRmFjdG9yYCBjb25maWd1cmF0aW9uLiBJdCBkZWZpbmVzIHRoZVxuICAgICAgICAvLyBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIG11bHRpcGxpZWQgd2l0aCB0aGUgYW1vdW50IG9mIGNoYXJhY3RlcnNcbiAgICAgICAgLy8gZGlzcGxheWVkIGluIHRoZSBub3RpZmljYXRpb24sIHBsdXMgNDAgKDQwICsgdGl0bGUgKyBtZXNzYWdlKTpcbiAgICAgICAgY29uc3QgeyBkdXJhdGlvbkZhY3RvciA9IDIwIH0gPSBub3RpZmljYXRpb25zXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKDQwICsgdGV4dC5sZW5ndGggKyB0aXRsZS5sZW5ndGgpICogZHVyYXRpb25GYWN0b3JcbiAgICAgICAgdGhpcy4kbm90aWZ5KHsgdHlwZSwgdGl0bGUsIHRleHQsIGR1cmF0aW9uIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlc3Ryb3lBbGwoKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuZGVzdHJveUFsbCgpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQHVzZSAnc2Fzczpjb2xvcic7XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG5AbWl4aW4gdHlwZSgkYmFja2dyb3VuZCkge1xuICBiYWNrZ3JvdW5kOiBjb2xvci5hZGp1c3QoJGJhY2tncm91bmQsICRsaWdodG5lc3M6IDUlKTtcbiAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgYm9yZGVyLWxlZnQ6IDEycHggc29saWQgY29sb3IuYWRqdXN0KCRiYWNrZ3JvdW5kLCAkbGlnaHRuZXNzOiAtMTAlKTtcbn1cblxuLmRpdG8tbm90aWZpY2F0aW9ucyB7XG4gICRub3RpZmljYXRpb24td2lkdGg6IDMwMHB4O1xuXG4gIGZsZXg6IDE7XG4gIHotaW5kZXg6ICR6LWluZGV4LW5vdGlmaWNhdGlvbnM7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICAvLyBGb3IgdGhlIGBAY29udGFpbmVyYCBydWxlIHRvIHdvcms6XG4gIGNvbnRhaW5lci10eXBlOiBpbmxpbmUtc2l6ZTtcblxuICAuZGl0by1oZWFkZXIge1xuICAgIHNwYW4ge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICB9XG4gIH1cblxuICAmX19pbm5lciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLnZ1ZS1ub3RpZmljYXRpb24tZ3JvdXAge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogJG5vdGlmaWNhdGlvbi13aWR0aDtcblxuICAgIEBjb250YWluZXIgKHdpZHRoIDwgI3skbm90aWZpY2F0aW9uLXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZ30pIHtcbiAgICAgIGxlZnQ6IHVuc2V0O1xuICAgICAgcmlnaHQ6ICRjb250ZW50LXBhZGRpbmc7XG4gICAgfVxuICB9XG5cbiAgLnZ1ZS1ub3RpZmljYXRpb24td3JhcHBlciB7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIH1cblxuICAuZGl0by1ub3RpZmljYXRpb24ge1xuICAgIHBhZGRpbmc6IDhweDtcbiAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmcgMDtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcblxuICAgIC5ub3RpZmljYXRpb24tdGl0bGUge1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogOHB4O1xuICAgIH1cblxuICAgIC5ub3RpZmljYXRpb24tY29udGVudCB7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuXG4gICAgICBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAgICYgKyBwIHtcbiAgICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLFxuICAgICYuaW5mbyB7XG4gICAgICBAaW5jbHVkZSB0eXBlKCRjb2xvci1hY3RpdmUpO1xuICAgIH1cblxuICAgICYuc3VjY2VzcyB7XG4gICAgICBAaW5jbHVkZSB0eXBlKCRjb2xvci1zdWNjZXNzKTtcbiAgICB9XG5cbiAgICAmLndhcm5pbmcge1xuICAgICAgQGluY2x1ZGUgdHlwZSgkY29sb3Itd2FybmluZyk7XG4gICAgfVxuXG4gICAgJi5lcnJvciB7XG4gICAgICBAaW5jbHVkZSB0eXBlKCRjb2xvci1lcnJvcik7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmFzaWRlLmRpdG8tc2lkZWJhci5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIHYtcmVzaXplPVwib25SZXNpemVTaWRlYmFyXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4pXG4gIG5hdi5kaXRvLWhlYWRlclxuICAgIHNsb3RcbiAgLmRpdG8tc2lkZWJhcl9fdGVsZXBvcnQuZGl0by1zY3JvbGxcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TaWRlYmFyJywge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaWRlYmFyV2lkdGg6IDBcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tc2lkZWJhcidcbiAgICAgIC8vIE5PVEU6IEtlZXAgc3luY2VkIHdpdGggJHNpZGViYXItbWF4LXdpZHRoIGluIFNDU1M6XG4gICAgICBjb25zdCBzaWRlYmFyV2lkdGggPSAzNjBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtgJHtwcmVmaXh9LS13aWR0aC05OWBdOiB0aGlzLnNpZGViYXJXaWR0aCA8IHNpZGViYXJXaWR0aCxcbiAgICAgICAgW2Ake3ByZWZpeH0tLXdpZHRoLTYwYF06IHRoaXMuc2lkZWJhcldpZHRoIDw9IHNpZGViYXJXaWR0aCAqIDAuNlxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25SZXNpemVTaWRlYmFyKHsgY29udGVudFJlY3Q6IHsgd2lkdGggfSB9KSB7XG4gICAgICB0aGlzLnNpZGViYXJXaWR0aCA9IHdpZHRoXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2lkZWJhciB7XG4gIGZsZXg6IDAgMSAkc2lkZWJhci1tYXgtd2lkdGg7XG4gIG1heC13aWR0aDogJHNpZGViYXItbWF4LXdpZHRoO1xuICBtaW4td2lkdGg6ICRzaWRlYmFyLW1pbi13aWR0aDtcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1bGxkb3duOiB7XG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBzdGFydFRpbWU6IDAsXG4gICAgICAgIGNoZWNrVGltZTogdHJ1ZSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgbW91c2Vkb3duOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbW91c2V1cDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub25QdWxsZG93bk1vdXNlVXAoKSkge1xuICAgICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVyczogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSA9IG51bGwpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3Blbih0cnVlKVxuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93bk1vdXNlVXAodmFsdWUgPSBudWxsKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0VGltZSB9ID0gdGhpcy5wdWxsZG93blxuICAgICAgaWYgKCF0aGlzLmNoZWNrVGltZSB8fCBzdGFydFRpbWUgJiYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPiAyNTApKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLm9uUHVsbGRvd25TZWxlY3QodmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCgvKiB2YWx1ZSAqLykge1xuICAgICAgLy8gTk9URTogVG8gYmUgb3ZlcnJpZGRlbi5cbiAgICB9LFxuXG4gICAgc2V0UHVsbGRvd25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMucHVsbGRvd24ub3BlbiA9IG9wZW5cbiAgICAgIHRoaXMucHVsbGRvd24uc3RhcnRUaW1lID0gb3BlbiA/IERhdGUubm93KCkgOiAwXG4gICAgICBpZiAob3Blbikge1xuICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwgdGhpcy5wdWxsZG93bi5ldmVudHMpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tYWNjb3VudFxuICBhKFxuICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gIClcbiAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgdWwuZGl0by1wdWxsZG93big6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIilcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgIClcbiAgICAgIGEoXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgKSB7eyBsYWJlbCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsbGRvd25NaXhpbiBmcm9tICcuLi9taXhpbnMvUHVsbGRvd25NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQWNjb3VudCcsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHtcbiAgICAgICAgc2V0dGluZ3M6ICdTZXR0aW5ncycsXG4gICAgICAgIGxvZ291dDogJ0xvZ291dCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25TZWxlY3QodmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQubG9nb3V0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgICAgY29uc29sZS5pbmZvKCdUT0RPOiBJbXBsZW1lbnQgU2V0dGluZ3MnKVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tYWNjb3VudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG4gIC5kaXRvLXB1bGxkb3duIHtcbiAgICB0b3A6ICRwdWxsZG93bi1wYWRkaW5nLXZlcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5jb21wb25lbnQoXG4gIHYtaWY9XCJvcHRpb25zPy50ZXh0ICE9IG51bGxcIlxuICA6aXM9XCJ0YWdOYW1lXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pIHt7IG9wdGlvbnMudGV4dCB9fVxuY29tcG9uZW50KFxuICB2LWVsc2UtaWY9XCJvcHRpb25zPy5odG1sICE9IG51bGxcIlxuICA6aXM9XCJ0YWdOYW1lXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4gIHYtaHRtbD1cIm9wdGlvbnMuaHRtbFwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0VsZW1lbnQnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFnOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NwYW4nIH0sXG4gICAgY29udGVudDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBjb250ZW50ICE9IG51bGxcbiAgICAgICAgPyBpc09iamVjdChjb250ZW50KVxuICAgICAgICAgID8gY29udGVudFxuICAgICAgICAgIDogeyB0ZXh0OiBjb250ZW50IH1cbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIHRhZ05hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRhZyB8fCB0aGlzLnRhZ1xuICAgIH0sXG5cbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy4kYXR0cnMuY2xhc3MpLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuY2xhc3MpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMuJGF0dHJzLnN0eWxlKSxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLnN0eWxlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuZnVuY3Rpb24gYXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLnJlZHVjZSgob2JqZWN0LCBlbnRyeSkgPT4ge1xuICAgIGlmIChpc1N0cmluZyhlbnRyeSkpIHtcbiAgICAgIG9iamVjdFtlbnRyeV0gPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChlbnRyeSkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqZWN0LCBlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFxuICB9LCB7fSlcbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gIDppcz1cInRhZ1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuKVxuICAuZGl0by1jaGV2cm9uKFxuICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogIWNvbGxhcHNlZCB9XCJcbiAgKVxuICAuZGl0by1sYWJlbF9faW5uZXIoXG4gICAgdi1pZj1cInRleHQgfHwgcHJlZml4ZXMubGVuZ3RoID4gMCB8fCBzdWZmaXhlcy5sZW5ndGggPiAwXCJcbiAgKVxuICAgIC5kaXRvLWxhYmVsX19wcmVmaXgoXG4gICAgICB2LWlmPVwicHJlZml4ZXMubGVuZ3RoID4gMFwiXG4gICAgKVxuICAgICAgRGl0b0VsZW1lbnQoXG4gICAgICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICAgICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICAgICAgdGFnPVwic3BhblwiXG4gICAgICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgICAgIClcbiAgICBsYWJlbChcbiAgICAgIHYtaWY9XCJ0ZXh0XCJcbiAgICAgIDpmb3I9XCJkYXRhUGF0aFwiXG4gICAgICB2LWh0bWw9XCJ0ZXh0XCJcbiAgICApXG4gICAgLmRpdG8tbGFiZWxfX3N1ZmZpeChcbiAgICAgIHYtaWY9XCJzdWZmaXhlcy5sZW5ndGggPiAwXCJcbiAgICApXG4gICAgICBEaXRvRWxlbWVudChcbiAgICAgICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgICAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgICAgICB0YWc9XCJzcGFuXCJcbiAgICAgICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICAgICAgKVxuICAgIC5kaXRvLWluZm8oXG4gICAgICB2LWlmPVwiaW5mb1wiXG4gICAgICA6ZGF0YS1pbmZvPVwiaW5mb1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0xhYmVsJywge1xuICBlbWl0czogWydvcGVuJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBpbmZvOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/ICdhJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHRleHQoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QobGFiZWwpID8gbGFiZWw/LnRleHQgOiBsYWJlbFxuICAgIH0sXG5cbiAgICBwcmVmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnByZWZpeClcbiAgICB9LFxuXG4gICAgc3VmZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5zdWZmaXgpXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/IHsgb25DbGljazogdGhpcy5vbkNsaWNrIH0gOiB7fVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID09PSB0aGlzXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrKCkge1xuICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IHRoaXNcbiAgICAgIHRoaXMuJGVtaXQoJ29wZW4nLCB0aGlzLmNvbGxhcHNlZClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1sYWJlbCB7XG4gICRzZWxmOiAmO1xuXG4gIC8vIEZvciBidXR0b25zIGFuZCBjaGV2cm9uIHRvIGFsaWduIHJpZ2h0OlxuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC8vIFZlcnRpY2FsbHkgY2VudGVyIGFsbCBpdGVtcyBpbiB0aGUgbGFiZWwsIGUuZy4gY2hldnJvbiwgZWRpdC1idXR0b25zLlxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtaW4taGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmctaGFsZjsgLy8gV2hlbiBpbmxpbmVkLlxuXG4gICY6aGFzKC5kaXRvLXNjaGVtYS1oZWFkZXIpIHtcbiAgICAvLyBUaGUgY29udGFpbmVyJ3MgbGFiZWwgaXMgdXNlZCBhcyB0ZWxlcG9ydCBmb3IgYSBuZXN0ZWQgc2VjdGlvbiBvciBvYmplY3RcbiAgICAvLyBsYWJlbC4gSGlkZSBgJl9faW5uZXJgLCBhcyBpdCBpcyBiZSBkdXBsaWNhdGVkIGluc2lkZSB0aGUgbmVzdGVkIGxhYmVsLlxuICAgID4gI3skc2VsZn1fX2lubmVyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgJjpub3QoOmhhcygrIC5kaXRvLXRhYnMpKSB7XG4gICAgLy8gVGFrZSBmdWxsIHdpZHRoIGJ1dCBvbmx5IGlmIHRoZXJlIGFyZW4ndCBhbHNvIHRhYnMgdG8gYmUgY2VudGVyZWQuXG4gICAgZmxleDogMTtcbiAgfVxuXG4gICZfX2lubmVyIHtcbiAgICBmbGV4OiAxIDAgMCU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICBsYWJlbCB7XG4gICAgY3Vyc29yOiBpbmhlcml0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICB9XG5cbiAgLy8gRml4IGFsaWdubWVudCBvZiBzdWIgYW5kIHN1cCBlbGVtZW50cyBpbiBsYWJlbCBjb250ZW50LlxuICBzdWIsXG4gIHN1cCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgfVxuXG4gIHN1YiB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCk7XG4gIH1cblxuICBzdXAge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KTtcbiAgfVxuXG4gICZfX3ByZWZpeCxcbiAgJl9fc3VmZml4IHtcbiAgICBmbGV4OiAxO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcblxuICAgIC8vIEZvciBlbGxpcHNpcyB0byB3b3JrIG9uIHByZWZpeCBhbmQgc3VmZml4IHdpdGggZmxleCBsYXlvdXQsIHdlIG5lZWQgdG9cbiAgICAvLyB1c2UgYSBuZXN0ZWQgYWJzb2x1dGVseSBwb3NpdGlvbmVkIHNwYW4uXG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1xcMjAwYic7IC8vIHplcm8td2lkdGggc3BhY2UgdG8ga2VlcCBjb250YWluZXIgZnJvbSBjb2xsYXBzaW5nLlxuICAgIH1cblxuICAgIHNwYW4ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgaW5zZXQ6IDA7XG4gICAgfVxuICB9XG5cbiAgbGFiZWwsXG4gICZfX3ByZWZpeCBzcGFuLFxuICAmX19zdWZmaXggc3BhbiB7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG4gICAgQGluY2x1ZGUgZWxsaXBzaXM7XG5cbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgJl9fcHJlZml4ICsgbGFiZWwsXG4gIGxhYmVsICsgJl9fc3VmZml4IHtcbiAgICAmLFxuICAgIHNwYW4ge1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogJ1xcYTAnOyAvLyAmbmJzcDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1idXR0b25zIHtcbiAgICAvLyBNb3ZlIHRoZSBsYWJlbCBwYWRkaW5nIGluc2lkZSAuZGl0by1idXR0b25zLCBzbyB0aGF0IGl0IGNhcHR1cmVzIGFsbFxuICAgIC8vIG5lYXIgbW91c2UgZXZlbnRzOlxuICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLWxhYmVsLXBhZGRpbmcpKTtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKTtcbiAgfVxuXG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC8vIEluIG9yZGVyIGZvciBlbGxpcHNpcyB0byB3b3JrIG9uIGxhYmVscyB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBsYXlvdXQsXG4gICAgLy8gd2UgbmVlZCB0byBwb3NpdGlvbiBpdCBhYnNvbHV0ZWx5IGluc2lkZSBpdHMgY29udGFpbmVyLiBCdXQgd2UgY2FuIG9ubHlcbiAgICAvLyBkbyBzbyBpZiB0aGVyZSBpcyd0IGFsc28gYSBjaGV2cm9uIG9yIG90aGVyIFVYIGVsZW1lbnRzIGJlc2lkZXMgaXQuXG4gICAgJjpoYXMoPiAjeyRzZWxmfV9faW5uZXI6b25seS1jaGlsZCkge1xuICAgICAgZmxleDogMTsgLy8gV2hlbiBpbiBgLmRpdG8tc2NoZW1hLWhlYWRlcmAuXG5cbiAgICAgID4gI3skc2VsZn1fX2lubmVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgLy8gc3BhY2Ugb24gaXRzIHBhcmVudCB0byBlbmZvcmNlIHRoZSByaWdodCB0ZXh0IGhlaWdodCBpbiB0aGUgY29udGFpbmVyXG4gICAgICBjb250ZW50OiAnXFwyMDBiJzsgLy8gemVyby13aWR0aCBzcGFjZTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1pbmZvIHtcbiAgICBtYXJnaW4tbGVmdDogMC4zNWVtO1xuICB9XG59XG5cbmEuZGl0by1sYWJlbCB7XG4gICY6aG92ZXIge1xuICAgIC5kaXRvLWNoZXZyb24ge1xuICAgICAgY29sb3I6ICRjb2xvci1kYXJrZXI7XG4gICAgfVxuICB9XG5cbiAgJjpmb2N1czpub3QoOmFjdGl2ZSwgLmRpdG8tYWN0aXZlKSB7XG4gICAgLmRpdG8tY2hldnJvbiB7XG4gICAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiAkYm9yZGVyLXdpZHRoICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICAgIC8vIERpc3BsYXkgbGFiZWxzIGluIGNvbXBhY3Qgc2NoZW1hIGFzIGlubGluZS1ibG9ja3MsIHRvIGFsbG93IGNvbXBhY3RcbiAgICAvLyBsYXlvdXRzIHdpdGggYHdpZHRoOiAnYXV0bydgIGVsZW1lbnRzOlxuICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvci5cbiAgfVxufVxuXG4uZGl0by1zY2hlbWEtY29tcGFjdCB7XG4gID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgID4gLmRpdG8tcGFuZSB7XG4gICAgICA+IC5kaXRvLWNvbnRhaW5lcjpub3QoLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbCkge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLFxuICBnZXRJdGVtSWQsXG4gIGdldEl0ZW1VaWQsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZ2V0SXRlbVN0b3JlKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENoaWxkU3RvcmUodGhpcy5nZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSksIGluZGV4KVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtU3RvcmUoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkge1xuICAgICAgdGhpcy5yZW1vdmVDaGlsZFN0b3JlKHRoaXMuZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pLCBpbmRleClcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICAgIGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAgIChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgcmV0dXJuIGluZGV4ICE9PSAtMSA/IGluZGV4IDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRJdGVtTGFiZWwoc291cmNlU2NoZW1hLCBpdGVtLCB7XG4gICAgICBpbmRleCA9IG51bGwsXG4gICAgICBleHRlbmRlZCA9IGZhbHNlLFxuICAgICAgYXNPYmplY3QgPSBmYWxzZVxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgeyBpdGVtTGFiZWwgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKCFpdGVtIHx8ICFleHRlbmRlZCAmJiBpdGVtTGFiZWwgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhUGF0aFxuICAgICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoKSA9PlxuICAgICAgICAoZGF0YVBhdGggPz89IHRoaXMuZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpKVxuXG4gICAgICBsZXQgZm9ybUxhYmVsXG4gICAgICBjb25zdCBnZXRGb3JtTGFiZWwgPSAoKSA9PlxuICAgICAgICAoZm9ybUxhYmVsID8/PSB0aGlzLmdldExhYmVsKFxuICAgICAgICAgIGdldEl0ZW1Gb3JtU2NoZW1hKHNvdXJjZVNjaGVtYSwgaXRlbSwgdGhpcy5jb250ZXh0KVxuICAgICAgICApKVxuXG4gICAgICBsZXQgdGV4dFxuICAgICAgbGV0IHByZWZpeFxuICAgICAgbGV0IHN1ZmZpeFxuICAgICAgaWYgKGlzRnVuY3Rpb24oaXRlbUxhYmVsKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1MYWJlbC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICBpbmRleCxcblxuICAgICAgICAgICAgZ2V0IGRhdGFQYXRoKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0RGF0YVBhdGgoKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEZvcm1MYWJlbCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBpZiAoaXNPYmplY3QobGFiZWwpKSB7XG4gICAgICAgICAgOyh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiAhKGl0ZW1MYWJlbCBpbiBpdGVtKSkge1xuICAgICAgICAvLyBgaXRlbUxhYmVsYCBjYW4gYmUgYm90aCBhIGtleSwgb3Igc2ltcGx5IGEgbGFiZWwuXG4gICAgICAgIHRleHQgPSBpdGVtTGFiZWxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgLy8gSWYgbm8gbGFiZWwgd2FzIGZvdW5kIHNvIGZhciwgdHJ5IHRvIHByb2R1Y2Ugb25lIGZyb20gdGhlIGluZGV4LlxuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgdGV4dCA9XG4gICAgICAgICAgaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgID8gKHRleHQgPSBgJHtpbmRleCArIDF9YClcbiAgICAgICAgICAgIDogJydcbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0XG4gICAgICAgID8gdGV4dCB8fCBwcmVmaXggfHwgc3VmZml4XG4gICAgICAgICAgPyB7IHRleHQsIHByZWZpeCwgc3VmZml4IH1cbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgOiB0ZXh0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4uZGl0by1zY2hlbWEoXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2Nyb2xsLXBhcmVudCc6IHNjcm9sbGFibGUsICdkaXRvLXNjaGVtYS0tb3Blbic6IG9wZW5lZCB9XCJcbiAgdi1iaW5kPVwiJGF0dHJzXCJcbilcbiAgVGVsZXBvcnQoXG4gICAgdi1pZj1cImlzUG9wdWxhdGVkICYmIHBhbmVsRW50cmllcy5sZW5ndGggPiAwXCJcbiAgICB0bz1cIi5kaXRvLXNpZGViYXJfX3RlbGVwb3J0XCJcbiAgKVxuICAgIERpdG9QYW5lbHMoXG4gICAgICB2LWlmPVwiYWN0aXZlXCJcbiAgICAgIDpwYW5lbHM9XCJwYW5lbEVudHJpZXNcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICBUZWxlcG9ydChcbiAgICB2LWlmPVwiaGFzSGVhZGVyXCJcbiAgICA6dG89XCJoZWFkZXJUZWxlcG9ydFwiXG4gICAgOmRpc2FibGVkPVwiIWhlYWRlclRlbGVwb3J0XCJcbiAgKVxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICB2LWlmPVwiYWN0aXZlXCJcbiAgICApXG4gICAgICBEaXRvTGFiZWwoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgQG9wZW49XCJvbk9wZW5cIlxuICAgICAgKVxuICAgICAgVHJhbnNpdGlvbihcbiAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICBuYW1lPVwiZGl0by1mYWRlXCJcbiAgICAgIClcbiAgICAgICAgRGl0b1RhYnMoXG4gICAgICAgICAgdi1pZj1cIm9wZW5lZFwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVGFiXCJcbiAgICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICApXG4gICAgICBEaXRvQ2xpcGJvYXJkKFxuICAgICAgICB2LWlmPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOmNsaXBib2FyZD1cImNsaXBib2FyZFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgKVxuICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gIFRyYW5zaXRpb25IZWlnaHQoOmVuYWJsZWQ9XCJpbmxpbmVkXCIpXG4gICAgLmRpdG8tc2NoZW1hLWNvbnRlbnQoXG4gICAgICB2LWlmPVwib3BlbmVkXCJcbiAgICAgIHJlZj1cImNvbnRlbnRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zY3JvbGwnOiBzY3JvbGxhYmxlIH1cIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwgdGFiKSBpbiB0YWJzXCJcbiAgICAgICAgICA6a2V5PVwidGFiXCJcbiAgICAgICAgKVxuICAgICAgICAgIC8vLSBUT0RPOiBTd2l0Y2ggdG8gdi1pZiBpbnN0ZWFkIG9mIHYtc2hvdywgb25jZSB2YWxpZGF0aW9uIGlzXG4gICAgICAgICAgLy8tIGRlY291cGxlZCBmcm9tIGNvbXBvbmVudHMuXG4gICAgICAgICAgRGl0b1BhbmUuZGl0by1wYW5lX190YWIoXG4gICAgICAgICAgICB2LXNob3c9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgICAgICAgIHJlZj1cInRhYnNcIlxuICAgICAgICAgICAgOnRhYj1cInRhYlwiXG4gICAgICAgICAgICA6c2NoZW1hPVwidGFiU2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgOnBhZGRpbmc9XCJwYWRkaW5nXCJcbiAgICAgICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICAgICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbiAgICAgICAgICApXG4gICAgICBEaXRvUGFuZS5kaXRvLXBhbmVfX21haW4oXG4gICAgICAgIHYtaWY9XCJoYXNNYWluUGFuZVwiXG4gICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpwYWRkaW5nPVwicGFkZGluZ1wiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICAgICAgbmFtZT1cImJ1dHRvbnNcIlxuICAgICAgKVxuICBzbG90KFxuICAgIHYtaWY9XCJpbmxpbmVkICYmICFoYXNIZWFkZXJcIlxuICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICApXG5zbG90KG5hbWU9XCJhZnRlclwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0FycmF5LFxuICBpc0Z1bmN0aW9uLFxuICBpc1JlZ0V4cCxcbiAgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyYW5zaXRpb25IZWlnaHQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgQ29udGV4dE1peGluIGZyb20gJy4uL21peGlucy9Db250ZXh0TWl4aW4uanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldFBhbmVsRW50cmllcyxcbiAgc2V0RGVmYXVsdFZhbHVlcyxcbiAgcHJvY2Vzc0RhdGEsXG4gIGlzRW1wdHlTY2hlbWEsXG4gIGlzTmVzdGVkXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yLCBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NjaGVtYScsIHtcbiAgbWl4aW5zOiBbQ29udGV4dE1peGluLCBJdGVtTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFRyYW5zaXRpb25IZWlnaHQgfSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGluamVjdDogW1xuICAgICckc2NoZW1hUGFyZW50Q29tcG9uZW50J1xuICBdLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBgZGF0YVNjaGVtYWAgaXMgb25seSBwcm92aWRlZCBmb3IgcGFuZWxzLCB3aGVyZSB0aGUgcGFuZWwgc2NoZW1hXG4gICAgLy8gaXMgZGlmZmVyZW50IGZyb20gdGhlIGRhdGEgc2NoZW1hIGZvciBwYW5lbHMgd2l0aG91dCBvd24gZGF0YS5cbiAgICBkYXRhU2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogcHJvcHMgPT4gcHJvcHMuc2NoZW1hIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGFkZGluZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGlubGluZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgc2Nyb2xsYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGhhc093bkRhdGE6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsTm9kZTogeyB0eXBlOiBIVE1MRWxlbWVudCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGFjY3VtdWxhdGVkQmFzaXM6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICByZXR1cm4ge1xuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIHByb3ZpZGUgbW9yZSBkYXRhIHRocm91Z2ggYHNjaGVtYS5kYXRhYCwgdnVlLXN0eWxlOlxuICAgICAgLi4uKFxuICAgICAgICBkYXRhICYmIGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgICA/IGRhdGEodGhpcy5jb250ZXh0KVxuICAgICAgICAgIDogZGF0YVxuICAgICAgKSxcbiAgICAgIHNlbGVjdGVkVGFiOiBudWxsLFxuICAgICAgY29tcG9uZW50c1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZWxzUmVnaXN0cnk6IHt9LFxuICAgICAgc2Nyb2xsUG9zaXRpb25zOiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5lc3RlZCgpIHtcbiAgICAgIC8vIEZvciBgQ29udGV4dE1peGluYDpcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyBzY2hlbWFDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHBhcmVudFNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIERvbid0IHJldHVybiB0aGUgYWN0dWFsIHBhcmVudCBzY2hlbWEgaXMgdGhpcyBzY2hlbWEgaGFuZGxlcyBpdHMgb3duXG4gICAgICAvLyBkYXRhLiBUaGlzIHByZXZlbnRzIGRlbGVnYXRpbmcgZXZlbnRzIHRvIHRoZSBwYXJlbnQsIGFuZCByZWdpc3RlcmluZ1xuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIHRoZSBwYXJlbnQgdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBzZXQgaXNEaXJ0eSBmbGFncy5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyBudWxsIDogdGhpcy5wYXJlbnRDb21wb25lbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhbmVsRW50cmllcygpIHtcbiAgICAgIHJldHVybiBnZXRQYW5lbEVudHJpZXModGhpcy5zY2hlbWEucGFuZWxzLCB0aGlzLmRhdGFQYXRoKVxuICAgIH0sXG5cbiAgICB0YWJzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS50YWJzKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0VGFiKCkge1xuICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgaWYgKHRoaXMudGFicykge1xuICAgICAgICBjb25zdCB0YWJzID0gT2JqZWN0LnZhbHVlcyh0aGlzLnRhYnMpLmZpbHRlcih0aGlzLnNob3VsZFJlbmRlclNjaGVtYSlcbiAgICAgICAgZm9yIChjb25zdCB7IG5hbWUsIGRlZmF1bHRUYWIgfSBvZiB0YWJzKSB7XG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdFRhYikgPyBkZWZhdWx0VGFiKHRoaXMuY29udGV4dCkgOiBkZWZhdWx0VGFiKSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgICBmaXJzdCA/Pz0gbmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlyc3RcbiAgICB9LFxuXG4gICAgcm91dGVUYWIoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUuaGFzaD8uc2xpY2UoMSkgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWE/LmNsaXBib2FyZCA/PyBudWxsXG4gICAgfSxcblxuICAgIGhhc0hlYWRlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsIHx8IHRoaXMuaGFzVGFicyB8fCAhIXRoaXMuY2xpcGJvYXJkXG4gICAgfSxcblxuICAgIGhlYWRlclRlbGVwb3J0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNUb3BMZXZlbFNjaGVtYVxuICAgICAgICA/ICcuZGl0by1oZWFkZXJfX3RlbGVwb3J0J1xuICAgICAgICA6IHRoaXMubGFiZWxOb2RlXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZVxuICAgIHByb2Nlc3NlZERhdGEoKSB7XG4gICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ3NlcnZlcicsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkRGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsaXBib2FyZERhdGFcbiAgICB9LFxuXG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgdGhpcy5jb250ZXh0KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc05lc3RlZCgpIHtcbiAgICAgIHJldHVybiBpc05lc3RlZCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWRhdGVkKVxuICAgIH0sXG5cbiAgICBoYXNFcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0Lmhhc0Vycm9ycylcbiAgICB9LFxuXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMubGFiZWwgfHwgdGhpcy5jb2xsYXBzaWJsZVxuICAgIH0sXG5cbiAgICBoYXNUYWJzKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy50YWJzXG4gICAgfSxcblxuICAgIGlzVG9wTGV2ZWxTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNOZXN0ZWQgJiYgIXRoaXMuaW5saW5lZFxuICAgIH0sXG5cbiAgICBoYXNUb3BMZXZlbFRhYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNUYWJzICYmIHRoaXMuaXNUb3BMZXZlbFNjaGVtYVxuICAgIH0sXG5cbiAgICBoYXNNYWluUGFuZSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiAhIWNvbXBvbmVudHMgJiYgT2JqZWN0LmtleXMoY29tcG9uZW50cykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBvcGVuZWQ6IGdldFN0b3JlQWNjZXNzb3IoJ29wZW5lZCcsIHtcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb2xsYXBzZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVscygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVsc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHdpZGU6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWRlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNjaGVtYToge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcihzY2hlbWEpIHtcbiAgICAgICAgLy8gRm9yIGZvcm1zIHdpdGggdHlwZSBkZXBlbmRpbmcgb24gbG9hZGVkIGRhdGEsIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlXG4gICAgICAgIC8vIGFjdHVhbCBzY2hlbWEgdG8gYmVjb21lIHJlYWR5IGJlZm9yZSBzZXR0aW5nIHVwIHNjaGVtYSByZWxhdGVkIHRoaW5nc1xuICAgICAgICBpZiAoIWlzRW1wdHlTY2hlbWEoc2NoZW1hKSkge1xuICAgICAgICAgIHRoaXMuc2V0dXBTY2hlbWEoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJvdXRlVGFiOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMzM5MyNpc3N1ZWNvbW1lbnQtMTE1ODQ3MDE0OVxuICAgICAgZmx1c2g6ICdwb3N0JyxcbiAgICAgIGhhbmRsZXIocm91dGVUYWIpIHtcbiAgICAgICAgLy8gUmVtZW1iZXIgdGhlIGN1cnJlbnQgcGF0aCB0byBrbm93IGlmIHRhYiBjaGFuZ2VzIHNob3VsZCBzdGlsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkLCBidXQgcmVtb3ZlIHRoZSB0cmFpbGluZyBgL2NyZWF0ZWAgb3IgYC86aWRgIGZyb20gaXQgc28gdGhhdFxuICAgICAgICAvLyB0YWJzIGluZm9ybXMgdGhhdCBzdGF5IG9wZW4gYWZ0ZXIgY3JlYXRpb24gc3RpbGwgd29yay5cbiAgICAgICAgaWYgKHRoaXMuaGFzVG9wTGV2ZWxUYWJzKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHJvdXRlVGFiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIobmV3VGFiLCBvbGRUYWIpIHtcbiAgICAgIGlmICh0aGlzLnNjcm9sbGFibGUpIHtcbiAgICAgICAgY29uc3QgeyBjb250ZW50IH0gPSB0aGlzLiRyZWZzXG4gICAgICAgIHRoaXMuc2Nyb2xsUG9zaXRpb25zW29sZFRhYl0gPSBjb250ZW50LnNjcm9sbFRvcFxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgY29udGVudC5zY3JvbGxUb3AgPSB0aGlzLnNjcm9sbFBvc2l0aW9uc1tuZXdUYWJdID8/IDBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmhhc1RvcExldmVsVGFicykge1xuICAgICAgICBjb25zdCB0YWIgPSB0aGlzLnNob3VsZFJlbmRlclNjaGVtYSh0aGlzLnRhYnNbbmV3VGFiXSlcbiAgICAgICAgICA/IG5ld1RhYlxuICAgICAgICAgIDogdGhpcy5kZWZhdWx0VGFiXG4gICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgaGFzaDogdGFiID8gYCMke3RhYn1gIDogbnVsbCB9KVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaGFzRXJyb3JzKSB7XG4gICAgICAgIHRoaXMucmVwb3NpdGlvbkVycm9ycygpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICBpZiAodGhpcy5zY3JvbGxhYmxlICYmIHRoaXMud2lkZSkge1xuICAgICAgdGhpcy5hcHBTdGF0ZS5wYWdlQ2xhc3MgPSAnZGl0by1wYWdlLS13aWRlJ1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSB0aGlzLnJvdXRlVGFiIHx8IHRoaXMuZGVmYXVsdFRhYlxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLmVtaXRFdmVudCgnZGVzdHJveScpXG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSAmJiB0aGlzLndpZGUpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUucGFnZUNsYXNzID0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0dXBTY2hlbWEoKSB7XG4gICAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgICAgIC8vIERlbGVnYXRlIGNoYW5nZSBldmVudHMgdGhyb3VnaCB0byBwYXJlbnQgc2NoZW1hOlxuICAgICAgdGhpcy5kZWxlZ2F0ZSgnY2hhbmdlJywgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnaW5pdGlhbGl6ZScpIC8vIE5vdCBgJ2NyZWF0ZSdgLCBzaW5jZSB0aGF0J3MgZm9yIGRhdGEuXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHNCeU5hbWUoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeU5hbWUobmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnQoZGF0YVBhdGhPck5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgfSxcblxuICAgIGdldFBhbmVsQnlEYXRhUGF0aChkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUpXG4gICAgfSxcblxuICAgIGdldFBhbmVsKGRhdGFQYXRoT3JOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgc29tZUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLnNvbWUoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIGV2ZXJ5Q29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuZXZlcnkoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIG9uT3BlbihvcGVuKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnb3BlbicsIHsgY29udGV4dDogeyBvcGVuIH0gfSlcbiAgICAgIC8vIFByZXZlbnQgY2xvc2luZyB0aGUgc2NoZW1hIHdpdGggaW52YWxpZCBkYXRhLCBzaW5jZSB0aGUgaW4tY29tcG9uZW50XG4gICAgICAvLyB2YWxpZGF0aW9uIHdpbGwgbm90IGJlIGV4ZWN1dGVkIG9uY2UgaXQncyBjbG9zZWQuXG5cbiAgICAgIC8vIFRPRE86IE1vdmUgdmFsaWRhdGlvbiBvdXQgb2YgY29tcG9uZW50cywgdG8gc2NoZW1hLCBqdXN0IGxpa2VcbiAgICAgIC8vIHByb2Nlc3NpbmcsIGFuZCB1c2UgYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIGZvciB0aGUgcmVzdWx0aW5nIGVycm9ycyxcbiAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoaXMgcmVxdWlyZW1lbnQsIHNpbmNlIHdlIGNhbiB2YWxpZGF0ZSBjbG9zZWQgZm9ybXMgYW5kXG4gICAgICAvLyBzY2hlbWFzIHRoZW4uXG4gICAgICBpZiAoIXRoaXMub3BlbmVkIHx8IG9wZW4gfHwgdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHRoaXMub3BlbmVkID0gb3BlblxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcG9zaXRpb25FcnJvcnMoKSB7XG4gICAgICAvLyBGaXJlIGEgZmFrZSBzY3JvbGwgZXZlbnQgdG8gZm9yY2UgdGhlIHJlcG9zaXRpb25pbmcgb2YgZXJyb3IgdG9vbHRpcHMsXG4gICAgICAvLyBhcyBvdGhlcndpc2UgdGhleSBzb21ldGltZXMgZG9uJ3Qgc2hvdyB1cCBpbiB0aGUgcmlnaHQgcGxhY2UgaW5pdGlhbGx5XG4gICAgICAvLyB3aGVuIGNoYW5naW5nIHRhYnMuXG4gICAgICBjb25zdCBzY3JvbGxDb250YWluZXIgPSB0aGlzLiRyZWZzLmNvbnRlbnQuY2xvc2VzdCgnLmRpdG8tc2Nyb2xsJylcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gKCkgPT4gc2Nyb2xsQ29udGFpbmVyLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdzY3JvbGwnKSlcbiAgICAgIGRpc3BhdGNoKClcbiAgICAgIC8vIFRoaXMgaXMgcmVxdWlyZWQgdG8gaGFuZGxlIGAmLS1sYWJlbC12ZXJ0aWNhbGAgYmFzZWQgbGF5b3V0IGNoYW5nZXMuXG4gICAgICBzZXRUaW1lb3V0KGRpc3BhdGNoLCAwKVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMub3BlbmVkID0gdHJ1ZVxuICAgICAgcmV0dXJuIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5mb2N1cygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHNCeURhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBsZXQgZGF0YVBhdGhzXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY2hlY2sgPSBpc0Z1bmN0aW9uKG1hdGNoKVxuICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICA6IGlzUmVnRXhwKG1hdGNoKVxuICAgICAgICAgICAgPyBmaWVsZCA9PiBtYXRjaC50ZXN0KGZpZWxkKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGRhdGFQYXRocyA9IGNoZWNrXG4gICAgICAgICAgPyBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aCkuZmlsdGVyKGNoZWNrKVxuICAgICAgICAgIDogaXNBcnJheShtYXRjaClcbiAgICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICAgIDogW21hdGNoXVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgZGF0YVBhdGhzIHx8PSBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aClcbiAgICAgIGZvciAoY29uc3QgZGF0YVBhdGggb2YgZGF0YVBhdGhzKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKCFjb21wb25lbnQudmFsaWRhdGUobm90aWZ5KSkge1xuICAgICAgICAgICAgLy8gRm9jdXMgZmlyc3QgZXJyb3IgZmllbGRcbiAgICAgICAgICAgIGlmIChub3RpZnkgJiYgZmlyc3QpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LnNjcm9sbEludG9WaWV3KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSAmJiAhaXNWYWxpZCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycygpXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWxsKG1hdGNoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cywgZmlyc3QgPSB0cnVlKSB7XG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIGNvbnN0IHVubWF0Y2hlZCA9IFtdXG4gICAgICBjb25zdCB3YXNGaXJzdCA9IGZpcnN0XG4gICAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgZXJyc10gb2YgT2JqZWN0LmVudHJpZXMoZXJyb3JzKSkge1xuICAgICAgICAvLyBJZiB0aGUgc2NoZW1hIGlzIGEgZGF0YS1yb290LCBwcmVmaXggaXRzIG93biBkYXRhUGF0aCB0byBhbGwgZXJyb3JzLFxuICAgICAgICAvLyBzaW5jZSB0aGUgZGF0YSB0aGF0IGl0IHNlbmRzIGFuZCB2YWxpZGF0ZXMgd2lsbCBiZSB1bnByZWZpeGVkLlxuICAgICAgICBjb25zdCBmdWxsRGF0YVBhdGggPSB0aGlzLmhhc093bkRhdGFcbiAgICAgICAgICA/IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICAgIDogZGF0YVBhdGhcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcywgdGhpcy5kYXRhUGF0aCwgdGhpcy5oYXNPd25EYXRhLCBmdWxsRGF0YVBhdGgpXG4gICAgICAgIC8vIENvbnZlcnQgZnJvbSBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyBub3RhdGlvbiwgdG8gb3VyIG93biBmb3JtXG4gICAgICAgIC8vIG9mIHJlbGF0aXZlIEpTT04gcG9pbnRlcnMgYXMgZGF0YS1wYXRoczpcbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZnVsbERhdGFQYXRoKVxuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIC8vIENvdWxkbid0IGZpbmQgYSBjb21wb25lbnQgaW4gYW4gYWN0aXZlIGZvcm0gZm9yIHRoZSBnaXZlbiBkYXRhUGF0aC5cbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSBjb21wb25lbnQgc2VydmluZyBhIHBhcnQgb2YgdGhlIGRhdGFQYXRoLFxuICAgICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgY29uc3QgbmF2aWdhdGVkID0gYXdhaXQgY29tcG9uZW50Lm5hdmlnYXRlVG9Db21wb25lbnQ/LihcbiAgICAgICAgICAgICAgICBmdWxsRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgc3ViQ29tcG9uZW50cyA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2Ygc3ViQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGVycm9ycykuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKFtkYXRhUGF0aF0pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKS5zdGFydHNXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5kYXRhUGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhtYXRjaGVkKS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKG1hdGNoZWQsIGZpcnN0ICYmIGZvY3VzKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChuYXZpZ2F0ZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3VuZCBhIG5lc3RlZCBmb3JtIHRvIGRpc3BsYXkgYXQgbGVhc3QgcGFydHMgZm8gdGhlIGVycm9ycy5cbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzaG93IGFsbCBlcnJvcnMgYXQgb25jZSwgc28gd2UncmUgZG9uZS4gRG9uJ3QgY2FsbFxuICAgICAgICAgICAgICAgIC8vIGBub3RpZnlFcnJvcnMoKWAgeWV0LCBhcyB3ZSBjYW4gb25seSBkaXNwbGF5IGl0IG9uY2VcbiAgICAgICAgICAgICAgICAvLyBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgd2FzIGNhbGxlZCBmcm9tIGBEaXRvRm9ybS5tb3VudGVkKClgXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0aWxsIGhlcmUsIHNvIGtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgICBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFdoZW4gdGhlIGVycm9yIGNhbid0IGJlIG1hdGNoZWQsIGFkZCBpdCB0byBhIGxpc3Qgb2YgdW5tYXRjaGVkXG4gICAgICAgICAgLy8gZXJyb3JzIHdpdGggZGVjZW50IG1lc3NhZ2UsIHRvIHJlcG9ydCBhdCB0aGUgZW5kLlxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gbGFiZWxpemUocHJvcGVydHkpXG4gICAgICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJycykge1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gZmllbGRcbiAgICAgICAgICAgICAgPyBgVGhlIGZpZWxkICR7ZmllbGR9YFxuICAgICAgICAgICAgICA6IGBUaGUgJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICAgICB1bm1hdGNoZWQucHVzaChgJHtwcmVmaXh9ICR7ZXJyLm1lc3NhZ2V9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKHdhc0ZpcnN0ICYmICFmaXJzdCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycyh1bm1hdGNoZWQuam9pbignXFxuJykpXG4gICAgICB9XG4gICAgICByZXR1cm4gIWZpcnN0XG4gICAgfSxcblxuICAgIG5vdGlmeUVycm9ycyhtZXNzYWdlKSB7XG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnVmFsaWRhdGlvbiBFcnJvcnMnLFxuICAgICAgICB0ZXh0OiBtZXNzYWdlIHx8ICdQbGVhc2UgY29ycmVjdCB0aGUgaGlnaGxpZ2h0ZWQgZXJyb3JzLidcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlc2V0RGF0YSgpIHtcbiAgICAgIC8vIFdlIGNhbid0IHNldCBgdGhpcy5kYXRhID0gLi4uYCBiZWNhdXNlIGl0J3MgYSBwcm9wZXJ0eSwgYnV0IHdlIGNhbiBzZXRcbiAgICAgIC8vIGFsbCBrbm93biBwcm9wZXJ0aWVzIG9uIGl0IHRvIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnlcbiAgICAgIC8vIGBzZXREZWZhdWx0VmFsdWVzKClgLCBhcyB0aGV5IGFyZSBhbGwgcmVhY3RpdmUgYWxyZWFkeSBmcm9tIHRoZSBzdGFydHM6XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZGF0YSwgc2V0RGVmYXVsdFZhbHVlcyh0aGlzLmRhdGFTY2hlbWEsIHt9LCB0aGlzKSlcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChuYW1lIGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgICBpZiAoIWVxdWFscyh0aGlzLmRhdGFbbmFtZV0sIGRhdGFbbmFtZV0pKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLW11dGF0aW5nLXByb3BzXG4gICAgICAgICAgICB0aGlzLmRhdGFbbmFtZV0gPSBkYXRhW25hbWVdXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSkpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50Lm1hcmtEaXJ0eSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbHRlckRhdGEoZGF0YSkge1xuICAgICAgLy8gRmlsdGVycyBvdXQgYXJyYXlzIGFuZCBvYmplY3RzIHRoYXQgYXJlIGJhY2tlZCBieSBkYXRhIHJlc291cmNlc1xuICAgICAgLy8gdGhlbXNlbHZlcywgYXMgdGhvc2UgYXJlIGFscmVhZHkgdGFrZW4gY2FyZSBvZiB0aHJvdWdoIHRoZWlyIG93biBBUElcbiAgICAgIC8vIHJlc291cmNlIGVuZC1wb2ludHMgYW5kIHNob3VsZG4ndCBiZSBzZXQuXG4gICAgICBjb25zdCBsb2NhbERhdGEgPSB7fVxuICAgICAgY29uc3QgZm9yZWlnbkRhdGEgPSB7fVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpXG4gICAgICAgICAgaWYgKGNvbXBvbmVudHMuc29tZShjb21wb25lbnQgPT4gY29tcG9uZW50LnByb3ZpZGVzRGF0YSkpIHtcbiAgICAgICAgICAgIGZvcmVpZ25EYXRhW25hbWVdID0gdmFsdWVcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvY2FsRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4geyBsb2NhbERhdGEsIGZvcmVpZ25EYXRhIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc0RhdGEoeyB0YXJnZXQgPSAnY2xpcGJvYXJkJywgc2NoZW1hT25seSA9IHRydWUgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0RhdGEoXG4gICAgICAgIHRoaXMuZGF0YVNjaGVtYSxcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAge1xuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgRGl0b0NvbnRleHQgaGFuZGxpbmcgaW5zaWRlIGBwcm9jZXNzRGF0YWAgYW5kXG4gICAgICAgICAgLy8gYHByb2Nlc3NTY2hlbWFEYXRhKClgOlxuICAgICAgICAgIHJvb3REYXRhOiB0aGlzLnJvb3REYXRhLFxuICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICBzY2hlbWFPbmx5LFxuICAgICAgICAgIHRhcmdldFxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50KClgIGlzIG9ubHkgc2V0IGlmIG9uZSBvZiB0aGUgYW5jZXN0b3JzIHVzZXNcbiAgICAgIC8vIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgICAgdGhpcy4kc2NoZW1hUGFyZW50Q29tcG9uZW50KCk/Ll9yZWdpc3RlclNjaGVtYUNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSwgY29tcG9uZW50LCBhZGQpXG4gICAgICAvLyBPbmx5IHJlZ2lzdGVyIHdpdGggdGhlIHBhcmVudCBpZiBzY2hlbWEgc2hhcmVzIGRhdGEgd2l0aCBpdC5cbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5fcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmUocGFuZSwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZXNSZWdpc3RyeSwgcGFuZSwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lbChwYW5lbCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZWxzUmVnaXN0cnksIHBhbmVsLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckVudHJ5KHJlZ2lzdHJ5LCBlbnRyeSwgYWRkKSB7XG4gICAgICBjb25zdCB1aWQgPSBlbnRyeS4kdWlkXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHJlZ2lzdHJ5W3VpZF0gPSBlbnRyeVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHJlZ2lzdHJ5W3VpZF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2xpc3RFbnRyaWVzQnlEYXRhUGF0aChyZWdpc3RyeSkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVnaXN0cnkpLnJlZHVjZSgoZW50cmllc0J5RGF0YVBhdGgsIGVudHJ5KSA9PiB7XG4gICAgICAgIC8vIE11bHRpcGxlIGVudHJpZXMgY2FuIGJlIGxpbmtlZCB0byB0aGUgc2FtZSBkYXRhLXBhdGgsIGUuZy4gd2hlblxuICAgICAgICAvLyB0aGVyZSBhcmUgdGFicy4gTGluayBlYWNoIGRhdGEtcGF0aCB0byBhbiBhcnJheSBvZiBlbnRyaWVzLlxuICAgICAgICBjb25zdCB7IGRhdGFQYXRoIH0gPSBlbnRyeVxuICAgICAgICBjb25zdCBlbnRyaWVzID0gKGVudHJpZXNCeURhdGFQYXRoW2RhdGFQYXRoXSB8fD0gW10pXG4gICAgICAgIGVudHJpZXMucHVzaChlbnRyeSlcbiAgICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoXG4gICAgICB9LCB7fSlcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXMoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgPyB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgICAgIDogdGhpcy5fZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFtub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCldIHx8IFtdXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBuYW1lKSB7XG4gICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhbYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSldIHx8IFtdXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NoZW1hIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcblxuICA+IC5kaXRvLXNjaGVtYS1oZWFkZXIgKyAuZGl0by1zY2hlbWEtY29udGVudCA+IC5kaXRvLXBhbmUge1xuICAgIG1hcmdpbi10b3A6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgfVxuXG4gICY6aGFzKD4gLmRpdG8tc2NoZW1hLWNvbnRlbnQgKyAuZGl0by1lZGl0LWJ1dHRvbnMpIHtcbiAgICAvLyBEaXNwbGF5IHRoZSBpbmxpbmVkIGVkaXQgYnV0dG9ucyB0byB0aGUgcmlnaHQgb2YgdGhlIHNjaGVtYTpcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG5cbiAgICA+IC5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gICAgICBmbGV4OiAxIDAgMCU7XG4gICAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZztcbiAgICB9XG4gIH1cblxuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICBmbGV4OiAwIDEgMTAwJTtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgLy8gU28gdGhhdCBzY2hlbWEgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b20uXG4gICAgLy8gTk9URTogV2UgYWxzbyBuZWVkIGdyaWQgZm9yIGBUcmFuc2l0aW9uSGVpZ2h0YCB0byB3b3JrIHdlbGwuIFN3aXRjaGluZ1xuICAgIC8vIHRvIGZsZXggYm94IGhlcmUgY2F1c2VzIGp1bXB5IGNvbGxhcHNpbmcgdHJhbnNpdGlvbnMuXG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMTAwJTtcblxuICAgID4gOm9ubHktY2hpbGQge1xuICAgICAgZ3JpZC1yb3ctZW5kOiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1zY2hlbWEtaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gIC5kaXRvLWhlYWRlciAmIHtcbiAgICAvLyBXaGVuIHRlbGVwb3J0ZWQgaW50byBtYWluIGhlYWRlci5cbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gIH1cblxuICAuZGl0by1sYWJlbCAmIHtcbiAgICAvLyBXaGVuIHRlbGVwb3J0ZWQgaW50byBjb250YWluZXIgbGFiZWwuXG4gICAgZmxleDogMTtcbiAgfVxuXG4gID4gLmRpdG8tbGFiZWwge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cblxuICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgIG1hcmdpbi1sZWZ0OiB2YXIoLS1idXR0b24tbWFyZ2luLCAwKTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5EaXRvU2NoZW1hLmRpdG8tc2NoZW1hLWlubGluZWQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4gIDpzY2hlbWE9XCJzY2hlbWFcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgOmxhYmVsPVwiaXNDb21wYWN0ID8gbnVsbCA6IGxhYmVsXCJcbiAgOnBhZGRpbmc9XCJwYWRkaW5nID8/ICdpbmxpbmVkJ1wiXG4gIDppbmxpbmVkPVwidHJ1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgOmdlbmVyYXRlTGFiZWxzPVwiIWlzQ29tcGFjdFwiXG4gIDpsYWJlbE5vZGU9XCJsYWJlbE5vZGVcIlxuICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuKVxuICAvLy0gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNjaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAvLy0gb3RoZXJzIGluIGBUeXBlTGlzdGAgYXMgYSBzY29wZSwgZm9yIGJldHRlciBoYW5kbGluZyBvZiBsYXlvdXQuXG4gIHRlbXBsYXRlKCNlZGl0LWJ1dHRvbnMpXG4gICAgRGl0b0VkaXRCdXR0b25zKFxuICAgICAgdi1pZj1cImRlbGV0YWJsZSB8fCBkcmFnZ2FibGUgfHwgZWRpdGFibGVcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICBAZGVsZXRlPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzQ29tcGFjdCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NjaGVtYUlubGluZWQnLCB7XG4gIGVtaXRzOiBbJ2RlbGV0ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYWRkaW5nOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxhYmVsTm9kZTogeyB0eXBlOiBIVE1MRWxlbWVudCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGFjY3VtdWxhdGVkQmFzaXM6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzQ29tcGFjdCgpIHtcbiAgICAgIHJldHVybiBpc0NvbXBhY3QodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzQ29tcGFjdCAmJiAhIXRoaXMubGFiZWxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zY2hlbWEtaW5saW5lZCB7XG4gIC8vIFVzZSBncmlkIGxheW91dCBmb3IgdHdvIHJlYXNvbnM6IEZvciBgVHJhbnNpdGlvbkhlaWdodGAgdG8gd29yayBzbW9vdGhseSxcbiAgLy8gYW5kIHRvIGFsaWduIHRoZSBoZWFkZXIgYWJvdmUgdGhlIGNvbnRlbnQgd2hlbiB0aGUgaGVhZGVyIGlzIG5vdCB0ZWxlcG9ydGVkXG4gIC8vIG91dHNpZGUgb2YgdGhlIHNjaGVtYS5cbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxMDAlO1xuXG4gICY6bm90KDpob3ZlciwgLmRpdG8tc2NoZW1hLS1vcGVuKSB7XG4gICAgPiAuZGl0by1zY2hlbWEtaGVhZGVyIHtcbiAgICAgID4gLmRpdG8tY2xpcGJvYXJkIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tIGVzbGludC1kaXNhYmxlIHZ1ZS9uby10ZW1wbGF0ZS1zaGFkb3cgLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcGFuZShcbiAgdi1pZj1cImlzUG9wdWxhdGVkICYmIGNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID4gMFwiXG4gIHYtcmVzaXplPVwib25SZXNpemVQYW5lXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPWB7XG4gICAgICBzY2hlbWEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgbmVzdGVkLFxuICAgICAgc3RvcmVcbiAgICB9LCBpbmRleCBpbiBjb21wb25lbnRTY2hlbWFzYFxuICApXG4gICAgLy8tIFVzZSA8c3Bhbj4gZm9yIC5kaXRvLWJyZWFrIHNvIHdlIGNhbiB1c2UgYC5kaXRvLWNvbnRhaW5lcjpmaXJzdC1vZi10eXBlYFxuICAgIC8vLSBzZWxlY3Rvci5cbiAgICBzcGFuLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwiWydiZWZvcmUnLCAnYm90aCddLmluY2x1ZGVzKHNjaGVtYS5icmVhaylcIlxuICAgIClcbiAgICBEaXRvQ29udGFpbmVyKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEpXCJcbiAgICAgIHJlZj1cImNvbnRhaW5lcnNcIlxuICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgIDpkYXRhLWluZGV4PVwiaW5kZXhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIDp2ZXJ0aWNhbExhYmVscz1cImlzSW5MYWJlbGVkUm93KGluZGV4KVwiXG4gICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgIClcbiAgICBzcGFuLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwiWydhZnRlcicsICdib3RoJ10uaW5jbHVkZXMoc2NoZW1hLmJyZWFrKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgQ29udGV4dE1peGluIGZyb20gJy4uL21peGlucy9Db250ZXh0TWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc05lc3RlZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZScsIHtcbiAgbWl4aW5zOiBbQ29udGV4dE1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYWRkaW5nOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb25zOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5lc3RlZCgpIHtcbiAgICAgIC8vIEZvciBgQ29udGV4dE1peGluYDpcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tcGFuZS0tc2luZ2xlJzogdGhpcy5pc1NpbmdsZUNvbXBvbmVudCxcbiAgICAgICAgW2BkaXRvLXBhbmUtLXBhZGRpbmctJHt0aGlzLnBhZGRpbmd9YF06ICEhdGhpcy5wYWRkaW5nXG4gICAgICB9XG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYiA/IHRoaXMgOiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRTY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGNvbXBvbmVudHMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXNcbiAgICAgIC8vIGFuZCBhZGRzIHRoZSBrZXkgYXMgdGhlIG5hbWUgdG8gZWFjaCBjb21wb25lbnQsIHVzZWQgZm9yIGxhYmVscywgZXRjLlxuICAgICAgLy8gTk9URTogc2NoZW1hIGNhbiBiZSBudWxsIHdoaWxlIG11bHRpLWZvcm0gbGlzdHMgbG9hZCB0aGVpciBkYXRhLFxuICAgICAgLy8gYmVjYXVzZSBvbmx5IHRoZSBhdmFpbGFibGUgZGF0YSB3aWxsIGRldGVybWluZSB0aGUgdHlwZSBvZiBmb3JtLlxuICAgICAgLy8gV2hlbiBlZGl0aW5nIHByaW1pdGl2ZSB2YWx1ZXMgdGhyb3VnaCBhIGZvcm0sIGRvIG5vdCBhcHBlbmQgJ25hbWUnIHRvXG4gICAgICAvLyB0aGUgY29tcG9uZW50J3MgZGF0YVBhdGggc28gaXQgY2FuIGJlIG1hcHBlZCB0byBmcm9tIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgLy8gTk9URTogTm90IGFsbCBzY2hlbWFzIC8gY29tcG9uZW50cyBoYXZlIGEgc291cmNlU2NoZW1hLCBlLmcuIGRpYWxvZ3MuXG4gICAgICBjb25zdCB3cmFwUHJpbWl0aXZlcyA9IHRoaXMuc291cmNlU2NoZW1hPy53cmFwUHJpbWl0aXZlc1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hPy5jb21wb25lbnRzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBhZGQgbmFtZSB0byBjb21wb25lbnQgc2NoZW1hLlxuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICAgIC8vIFNoYXJlIGRhdGFQYXRoIGFuZCBzdG9yZSB3aXRoIHBhcmVudCBpZiBub3QgbmVzdGVkOlxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGlzTmVzdGVkKHNjaGVtYSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgICAgICBuZXN0ZWQgJiYgIXdyYXBQcmltaXRpdmVzXG4gICAgICAgICAgICAgICAgPyBuZXN0ZWREYXRhUGF0aFxuICAgICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpbmdsZSAmJiB0aGlzLmNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID09PSAxXG4gICAgfSxcblxuICAgIHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzKCkge1xuICAgICAgY29uc3QgeyBwb3NpdGlvbnMgfSA9IHRoaXNcblxuICAgICAgY29uc3QgaXNMYXN0SW5Sb3cgPSBpbmRleCA9PiAoXG4gICAgICAgIHBvc2l0aW9uc1tpbmRleF0gJiYgKFxuICAgICAgICAgIGluZGV4ID09PSBwb3NpdGlvbnMubGVuZ3RoIC0gMSB8fFxuICAgICAgICAgIGZpbmROZXh0UG9zaXRpb24oaW5kZXgpLnRvcCA+IHBvc2l0aW9uc1tpbmRleF0udG9wXG4gICAgICAgIClcbiAgICAgIClcblxuICAgICAgY29uc3QgZmluZE5leHRQb3NpdGlvbiA9IGluZGV4ID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChwb3NpdGlvbnNbaV0pIHJldHVybiBwb3NpdGlvbnNbaV1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMFxuICAgICAgfVxuXG4gICAgICBjb25zdCByb3dzID0gW11cbiAgICAgIGxldCByb3cgPSBbXVxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBvc2l0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgcm93LnB1c2goaW5kZXgpXG4gICAgICAgIGlmIChpc0xhc3RJblJvdyhpbmRleCkpIHtcbiAgICAgICAgICByb3dzLnB1c2gocm93KVxuICAgICAgICAgIHJvdyA9IFtdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyb3cubGVuZ3RoID4gMCkge1xuICAgICAgICByb3dzLnB1c2gocm93KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlcyA9IFtdXG5cbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgICAgbGV0IGhhc0xhYmVsc0luUm93ID0gZmFsc2VcbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiByb3cpIHtcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb25zW2luZGV4XVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBvc2l0aW9uPy5oZWlnaHQgPiAyICYmIChcbiAgICAgICAgICAgICAgcG9zaXRpb24ubm9kZS5tYXRjaGVzKCc6aGFzKD4gLmRpdG8tbGFiZWwpJykgfHxcbiAgICAgICAgICAgICAgcG9zaXRpb24ubm9kZVxuICAgICAgICAgICAgICAgIC5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKVxuICAgICAgICAgICAgICAgIC5tYXRjaGVzKCcuZGl0by1jb250YWluZXItLWxhYmVsLXZlcnRpY2FsJylcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBuZXN0ZWQgc2NoZW1hcywgZS5nLiAnc2VjdGlvbicgb3IgJ29iamVjdCcgYW5kXG4gICAgICAgICAgICAvLyBkZXRlY3QgbGFiZWxzIHRoZXJlIHRvby5cbiAgICAgICAgICAgIGhhc0xhYmVsc0luUm93ID0gdHJ1ZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiByb3cpIHtcbiAgICAgICAgICB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlc1tpbmRleF0gPSBoYXNMYWJlbHNJblJvd1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2ZXJ0aWNhbExhYmVsc0J5SW5kaWNlc1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICdjb21wb25lbnRTY2hlbWFzLmxlbmd0aCcobGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvc2l0aW9ucy5sZW5ndGggPSBsZW5ndGhcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZSh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgaWYgKHRoaXMudGFiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyb3V0ZXIucHVzaCh7IGhhc2g6IGAjJHt0aGlzLnRhYn1gIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUmVzaXplUGFuZSgpIHtcbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgdGhpcy4kcmVmcy5jb250YWluZXJzKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IGNvbnRhaW5lci4kZWxcbiAgICAgICAgICBjb25zdCBpbmRleCA9ICtub2RlLmRhdGFzZXQuaW5kZXhcbiAgICAgICAgICBjb25zdCBib3VuZHMgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKG5vZGUpXG4gICAgICAgICAgY29uc3QgcGFkZGluZyA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZylcbiAgICAgICAgICBjb25zdCBmb250U2l6ZSA9IHBhcnNlRmxvYXQoc3R5bGUuZm9udFNpemUpXG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm91bmRzLmhlaWdodCAtIDIgKiBwYWRkaW5nXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnNbaW5kZXhdID1cbiAgICAgICAgICAgIGhlaWdodCA8PSAwXG4gICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIHRvcDogYm91bmRzLnksXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCAvIGZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgbm9kZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNJbkxhYmVsZWRSb3coaW5kZXgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmVydGljYWxMYWJlbHNCeUluZGljZXNbaW5kZXhdXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFuZSB7XG4gICRzZWxmOiAmO1xuICAkcm9vdC1wYWRkaW5nOiAkY29udGVudC1wYWRkaW5nIC0gJGZvcm0tc3BhY2luZy1oYWxmO1xuXG4gIC0tcGFuZS1wYWRkaW5nOiAwcHg7XG4gIC0tY29udGFpbmVyLXBhZGRpbmc6ICN7JGZvcm0tc3BhY2luZy1oYWxmfTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnkgYC5kaXRvLWNvbnRhaW5lcmAgaW5zaWRlIGAuZGl0by1wYW5lYDpcbiAgbWFyZ2luOiAtJGZvcm0tc3BhY2luZy1oYWxmO1xuICBwYWRkaW5nOiB2YXIoLS1wYW5lLXBhZGRpbmcpO1xuICAvLyBVc2UgYGZsZXg6IDAlYCBmb3IgYWxsIGAuZGl0by1wYW5lYCBleGNlcHQgYC5kaXRvLXBhbmVfX21haW5gLFxuICAvLyBzbyB0aGF0IHRoZSBgLmRpdG8tYnV0dG9ucy1tYWluYCBjYW4gYmUgbW92ZWQgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbS5cbiAgZmxleDogMCU7XG5cbiAgJl9fbWFpbiB7XG4gICAgZmxleDogMTAwJTtcbiAgfVxuXG4gICYtLXBhZGRpbmctcm9vdCB7XG4gICAgLy8gQSByb290LWxldmVsIHBhbmUgaW5zaWRlIGEgc2Nyb2xsIHZpZXcuIENsZWFyIG5lZ2F0aXZlIG1hcmdpbiBmcm9tIGFib3ZlLlxuICAgIG1hcmdpbjogMDtcbiAgICAvLyBNb3ZlIHRoZSBuZWdhdGl2ZSBtYXJnaW4gdXNlZCB0byByZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnlcbiAgICAvLyBgLmRpdG8tY29udGFpbmVyYCBpbnNpZGUgYC5kaXRvLXBhbmVgIHRvIHRoZSBwYWRkaW5nOlxuICAgIC0tcGFuZS1wYWRkaW5nOiAjeyRyb290LXBhZGRpbmd9O1xuXG4gICAgJiN7JHNlbGZ9LS1zaW5nbGUge1xuICAgICAgLS1wYW5lLXBhZGRpbmc6ICN7JGNvbnRlbnQtcGFkZGluZ307XG4gICAgICAtLWNvbnRhaW5lci1wYWRkaW5nOiAwcHg7XG4gICAgfVxuXG4gICAgJjpoYXMoPiAuZGl0by1jb250YWluZXItLWxhYmVsLXZlcnRpY2FsOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgIC8vIFJlZHVjZSB0b3Agc3BhY2luZyB3aGVuIHRoZSBmaXJzdCByb3cgaGFzIGxhYmVscy5cbiAgICAgIG1hcmdpbi10b3A6IC0kZm9ybS1zcGFjaW5nLWhhbGY7XG4gICAgfVxuXG4gICAgLy8gRGlzcGxheSBhIHJ1bGVyIGJldHdlZW4gdGFiYmVkIGNvbXBvbmVudHMgYW5kIHRvd2FyZHMgdGhlIC5kaXRvLWJ1dHRvbnNcbiAgICAmX190YWIgKyAmX19tYWluIHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIC8vIFVzZSBhIHBzZXVkbyBlbGVtZW50IHRvIGRpc3BsYXkgYSBydWxlciB3aXRoIHByb3BlciBtYXJnaW5zXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGU7XG4gICAgICAgIC8vIFNoaWZ0IHJ1bGVyIHVwIGJ5ICRyb290LXBhZGRpbmcgdG8gZXhjbHVkZSByZW1vdmVkICRmb3JtLXNwYWNpbmctaGFsZlxuICAgICAgICBtYXJnaW46ICgtJHJvb3QtcGFkZGluZykgJGZvcm0tc3BhY2luZy1oYWxmICRyb290LXBhZGRpbmc7XG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19tYWluICsgLmRpdG8tYnV0dG9ucy1tYWluIHtcbiAgICAgIC8vIE5lZWRlZCBmb3JtcyB3aXRoIHN0aWNreSBtYWluIGJ1dHRvbnMuXG4gICAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gICYtLXBhZGRpbmctaW5saW5lZCB7XG4gICAgLS1wYW5lLXBhZGRpbmc6IDBweDtcbiAgfVxuXG4gICYtLXBhZGRpbmctbmVzdGVkIHtcbiAgICAtLXBhbmUtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfTtcblxuICAgICY6aGFzKD4gLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbDpmaXJzdC1vZi10eXBlKSB7XG4gICAgICAvLyBSZWR1Y2UgdG9wIHNwYWNpbmcgd2hlbiB0aGUgZmlyc3Qgcm93IGhhcyBsYWJlbHMuXG4gICAgICBwYWRkaW5nLXRvcDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWJyZWFrIHtcbiAgICAvLyBgLmRpdG8tYnJlYWtgIGlzIHJlbmRlcmVkIGFzIDxzcGFuPiBzbyB3ZSBjYW4gdXNlIHRoZVxuICAgIC8vIGAuZGl0by1jb250YWluZXI6Zmlyc3Qtb2YtdHlwZWAgc2VsZWN0b3IgdG8gbWF0Y2ggdGhlIGZpcnN0IGNvbnRhaW5lclxuICAgIC8vIGV2ZW4gaWYgaXQgaGFzIGEgYnJlYWsgYmVmb3JlIGl0LlxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZsZXg6IDEwMCU7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcmFjdGlvbih2YWx1ZSkge1xuICBjb25zdCBtYXRjaCA9IChcbiAgICBpc1N0cmluZyh2YWx1ZSkgJiZcbiAgICB2YWx1ZS5tYXRjaCgvXlxccyooWystXT9cXGQrKVxccypcXC9cXHMqKFsrLV0/XFxkKylcXHMqJC8pXG4gIClcbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgWywgZGl2aWRlbmQsIGRpdmlzb3JdID0gbWF0Y2hcbiAgICByZXR1cm4gcGFyc2VGbG9hdChkaXZpZGVuZCkgLyBwYXJzZUZsb2F0KGRpdmlzb3IpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jb250YWluZXIoXG4gIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc2VzXCJcbiAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVzXCJcbilcbiAgVGVsZXBvcnQoXG4gICAgdi1pZj1cImlzTW91bnRlZCAmJiBwYW5lbEVudHJpZXMubGVuZ3RoID4gMFwiXG4gICAgdG89XCIuZGl0by1zaWRlYmFyX190ZWxlcG9ydFwiXG4gIClcbiAgICBEaXRvUGFuZWxzKFxuICAgICAgOnBhbmVscz1cInBhbmVsRW50cmllc1wiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIERpdG9MYWJlbChcbiAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgIDpjbGFzcz1cImxhYmVsQ2xhc3Nlc1wiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgIDppbmZvPVwiaW5mb1wiXG4gIClcbiAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgIHYtaWY9XCIhKGhhc0xhYmVsICYmIGlzTGFiZWwpXCJcbiAgICA6aXM9XCJ0eXBlQ29tcG9uZW50XCJcbiAgICByZWY9XCJjb21wb25lbnRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzZXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDp3aWR0aD1cIndpZHRoXCJcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiY29tYmluZWRCYXNpc1wiXG4gICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgKVxuICBEaXRvRXJyb3JzKDplcnJvcnM9XCJlcnJvcnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaXNOdW1iZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBWYWx1ZU1peGluIGZyb20gJy4uL21peGlucy9WYWx1ZU1peGluLmpzJ1xuaW1wb3J0IENvbnRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvQ29udGV4dE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7XG4gIGdldEFsbFBhbmVsRW50cmllcyxcbiAgZ2V0VHlwZUNvbXBvbmVudCxcbiAgaGFzTGFiZWwsXG4gIG9taXRTcGFjaW5nXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHBhcnNlRnJhY3Rpb24gfSBmcm9tICcuLi91dGlscy9tYXRoLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Db250YWluZXInLCB7XG4gIG1peGluczogW1ZhbHVlTWl4aW4sIENvbnRleHRNaXhpbl0sXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHZlcnRpY2FsTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGVcbiAgICB9LFxuXG4gICAgdHlwZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdsYWJlbCdcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gaGFzTGFiZWwodGhpcy5zY2hlbWEsIHRoaXMuZ2VuZXJhdGVMYWJlbHMpXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKSA6IG51bGxcbiAgICB9LFxuXG4gICAgbGFiZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFVubmVzdGVkIHR5cGVzIGRvbid0IGhhdmUgYSBkYXRhUGF0aCBmb3IgdGhlbXNlbHZlcywgZG9uJ3QgdXNlIGl0OlxuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy5kYXRhUGF0aCA6IG51bGxcbiAgICB9LFxuXG4gICAgaW5mbzogZ2V0U2NoZW1hQWNjZXNzb3IoJ2luZm8nLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICB3aWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVDb21wb25lbnQ/LmRlZmF1bHRXaWR0aFxuICAgICAgfSxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICAvLyBVc2UgMTAwJSA9PSAxLjAgYXMgZGVmYXVsdCB3aWR0aCB3aGVuIG5vdGhpbmcgaXMgc2V0OlxuICAgICAgICByZXR1cm4gd2lkdGggPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gMS4wXG4gICAgICAgICAgOiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqWzw+XT9cXHMqKC4qKSQvKVsxXSAvLyBSZW1vdmUgd2lkdGggb3BlcmF0b3JcbiAgICAgICAgICAgIDogd2lkdGhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHdpZHRoT3BlcmF0b3I6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccyooWzw+XT8pLylbMV0gfHwgbnVsbFxuICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50VmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZUNvbXBvbmVudD8uZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudERpc2FibGVkOiBnZXRTY2hlbWFBY2Nlc3NvcignZGlzYWJsZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIGRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGZsZXhHcm93KCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc+NTAlJyBhcyAnNTAlLCBmbGV4LWdyb3c6IDFgXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLndpZHRoT3BlcmF0b3IgPT09ICc+JyB8fFxuICAgICAgICB0aGlzLndpZHRoID09PSAnZmlsbCdcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZmxleFNocmluaygpIHtcbiAgICAgIC8vIEludGVycHJldCAnPDUwJScgYXMgJzUwJSwgZmxleC1zaHJpbms6IDFgXG4gICAgICByZXR1cm4gdGhpcy53aWR0aE9wZXJhdG9yID09PSAnPCdcbiAgICB9LFxuXG4gICAgZmxleEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLndpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgcmV0dXJuIFtudWxsLCAnYXV0bycsICdmaWxsJ10uaW5jbHVkZXMod2lkdGgpXG4gICAgICAgID8gJ2F1dG8nXG4gICAgICAgIDogLyUkLy50ZXN0KHdpZHRoKVxuICAgICAgICAgID8gcGFyc2VGbG9hdCh3aWR0aCkgLyAxMDAgLy8gcGVyY2VudGFnZSAtPiBmcmFjdGlvblxuICAgICAgICAgIDogL1thLXpdLy50ZXN0KHdpZHRoKVxuICAgICAgICAgICAgPyB3aWR0aCAvLyBuYXRpdmUgdW5pdHNcbiAgICAgICAgICAgIDogcGFyc2VGcmFjdGlvbih3aWR0aCkgLy8gZnJhY3Rpb25cbiAgICB9LFxuXG4gICAgY29tYmluZWRCYXNpcygpIHtcbiAgICAgIGNvbnN0IHsgYWNjdW11bGF0ZWRCYXNpcywgZmxleEJhc2lzIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNOdW1iZXIoYWNjdW11bGF0ZWRCYXNpcykgJiYgaXNOdW1iZXIoZmxleEJhc2lzKVxuICAgICAgICA/IGFjY3VtdWxhdGVkQmFzaXMgKiBmbGV4QmFzaXNcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGNvbnRhaW5lckNsYXNzZXMoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBjbGFzc2VzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tY29udGFpbmVyJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Ake3ByZWZpeH0tLXNpbmdsZWBdOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmNvbXBvbmVudERpc2FibGVkLFxuICAgICAgICAnZGl0by1oYXMtZXJyb3JzJzogISF0aGlzLmVycm9ycyxcbiAgICAgICAgW2Ake3ByZWZpeH0tLWxhYmVsLXZlcnRpY2FsYF06IHRoaXMudmVydGljYWxMYWJlbHMsXG4gICAgICAgIFtgJHtwcmVmaXh9LS1vbWl0LXNwYWNpbmdgXTogb21pdFNwYWNpbmcodGhpcy5zY2hlbWEpLFxuICAgICAgICAuLi4oaXNTdHJpbmcoY2xhc3NlcykgPyB7IFtjbGFzc2VzXTogdHJ1ZSB9IDogY2xhc3NlcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29udGFpbmVyU3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBmbGV4QmFzaXMsIGNvbWJpbmVkQmFzaXMgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgICctLWdyb3cnOiB0aGlzLmZsZXhHcm93ID8gMSA6IDAsXG4gICAgICAgICctLXNocmluayc6IHRoaXMuZmxleFNocmluayA/IDEgOiAwLFxuICAgICAgICAnLS1iYXNpcyc6IGlzTnVtYmVyKGZsZXhCYXNpcykgPyBgJHtmbGV4QmFzaXMgKiAxMDB9JWAgOiBmbGV4QmFzaXMsXG4gICAgICAgICctLWJhc2lzLW1vYmlsZSc6XG4gICAgICAgICAgaXNOdW1iZXIoY29tYmluZWRCYXNpcykgJiYgY29tYmluZWRCYXNpcyA8PSAwLjI1XG4gICAgICAgICAgICA/IGAke2ZsZXhCYXNpcyAqIDIwMH0lYFxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudENsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgLi4udGhpcy5sYXlvdXRDbGFzc2VzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGxheW91dENsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by13aWR0aC1maWxsJzogdGhpcy53aWR0aCA9PT0gJ2ZpbGwnIHx8IHRoaXMuZmxleEJhc2lzICE9PSAnYXV0bycsXG4gICAgICAgICdkaXRvLXdpZHRoLWdyb3cnOiB0aGlzLmZsZXhHcm93LFxuICAgICAgICAnZGl0by13aWR0aC1zaHJpbmsnOiB0aGlzLmZsZXhTaHJpbmtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbGFiZWxDbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tbGFiZWwtLXZpc2libGUnOiB0aGlzLmlzTGFiZWwsXG4gICAgICAgIC4uLnRoaXMubGF5b3V0Q2xhc3Nlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYW5lbEVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QWxsUGFuZWxFbnRyaWVzKFxuICAgICAgICB0aGlzLmFwaSxcbiAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgIHRoaXMuJHJlZnMuY29tcG9uZW50LFxuICAgICAgICB0aGlzLnRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25FcnJvcnMoZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9yc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNvbnRhaW5lciB7XG4gIC0tZ3JvdzogMDtcbiAgLS1zaHJpbms6IDE7XG4gIC0tYmFzaXM6IGF1dG87XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4OiB2YXIoLS1ncm93KSB2YXIoLS1zaHJpbmspIHZhcigtLWJhc2lzKTtcbiAgZmxleC1mbG93OiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAvLyBUbyBwcmV2ZW50IGxpc3QgdGFibGVzIGZyb20gYmxvd2luZyBvdXQgb2YgdGhlaXIgZmxleCBib3ggY29udGFpbmVycy5cbiAgbWF4LXdpZHRoOiAxMDAlO1xuICAvLyBDYW5ub3QgdXNlIG1hcmdpbiBoZXJlIGFzIGl0IG5lZWRzIHRvIGJlIHBhcnQgb2YgYm94LXNpemluZyBmb3JcbiAgLy8gcGVyY2VudGFnZXMgaW4gZmxleC1iYXNpcyB0byB3b3JrLlxuICBwYWRkaW5nOiB2YXIoLS1jb250YWluZXItcGFkZGluZyk7XG5cbiAgPiAuZGl0by1sYWJlbDpub3QoLmRpdG8tbGFiZWwtLXZpc2libGUpOm9ubHktY2hpbGQge1xuICAgIC8vIFVzZWQgZS5nLiB3aGVuIHNvdXJjZXMgaGlkZSB0aGVtc2VsdmVzIGR1ZSB0byBtYXhEZXB0aCwgYnV0IHRoZSBsYWJlbFxuICAgIC8vIGlzIHJlbmRlcmVkIGFib3ZlIGl0LlxuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAmOmVtcHR5IHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLmRpdG8tcGFuZSA+ICYge1xuICAgIC5kaXRvLXBhZ2UtLXdpZHRoLTgwICYge1xuICAgICAgZmxleC1ncm93OiAxO1xuICAgICAgZmxleC1iYXNpczogdmFyKC0tYmFzaXMtbW9iaWxlLCB2YXIoLS1iYXNpcykpO1xuICAgICAgLy8gREVCVUc6IGJhY2tncm91bmQ6IHllbGxvdztcbiAgICB9XG5cbiAgICAuZGl0by1wYWdlLS13aWR0aC02MCAmIHtcbiAgICAgIGZsZXgtYmFzaXM6IGNhbGMoMiAqIHZhcigtLWJhc2lzKSk7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogb3JhbmdlO1xuICAgIH1cblxuICAgIC5kaXRvLXNpZGViYXItLXdpZHRoLTk5ICYge1xuICAgICAgZmxleC1ncm93OiAxO1xuICAgICAgLy8gREVCVUc6IGJhY2tncm91bmQ6IHllbGxvdztcbiAgICB9XG5cbiAgICAuZGl0by1zaWRlYmFyLS13aWR0aC02MCAmIHtcbiAgICAgIGZsZXgtYmFzaXM6IGNhbGMoMiAqIHZhcigtLWJhc2lzKSk7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogb3JhbmdlO1xuICAgIH1cbiAgfVxuXG4gICYtLXNpbmdsZSB7XG4gICAgaGVpZ2h0OiAxMDAlOyAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b207XG4gIH1cblxuICAmLS1sYWJlbC12ZXJ0aWNhbCB7XG4gICAgLy8gRm9yIHBsYWluIGNvbXBvbmVudHMgd2l0aG91dCBsYWJlbHMgaW4gcm93cyB3aXRoIG90aGVyIGNvbXBvbmVudHMgdGhhdFxuICAgIC8vIGhhdmUgbGFiZWxzLCBhZGQgc29tZSBzcGFjaW5nIHRvIHRoZSB0b3AgdG8gYWxpZ24gd2l0aCB0aGUgb3RoZXJcbiAgICAvLyBjb21wb25lbnRzIChlLmcuICBidXR0b25zKTpcbiAgICA+IC5kaXRvLWNvbXBvbmVudDpmaXJzdC1jaGlsZDpub3QoLmRpdG8tc2VjdGlvbiwgLmRpdG8tbGlzdCwgLmRpdG8tb2JqZWN0KSB7XG4gICAgICBtYXJnaW4tdG9wOiAkaW5wdXQtaGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gICYtLW9taXQtc3BhY2luZyB7XG4gICAgcGFkZGluZzogMDtcblxuICAgID4gLmRpdG8tbGFiZWwge1xuICAgICAgbWFyZ2luOiAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZy1oYWxmIDA7XG4gICAgfVxuICB9XG59XG5cbi8vIE5PVEU6IFRoaXMgaXMgbm90IG5lc3RlZCBpbnNpZGUgYC5kaXRvLWNvbnRhaW5lcmAgc28gdGhhdCBvdGhlclxuLy8gdHlwZSBjb21wb25lbnRzIGNhbiBvdmVycmlkZSBgLmRpdG8td2lkdGgtZmlsbGAgY2xhc3MgKGZpbHRlciBwcmVjZWRlbmNlKS5cbi5kaXRvLWNvbXBvbmVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgJi5kaXRvLXJhZGlvLWJ1dHRvbiB7XG4gICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10YWJzXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgKVxuICAgIGEuZGl0by1saW5rKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYSh0YWJTY2hlbWEpXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBtb2RlbFZhbHVlID09PSBrZXkgfVwiXG4gICAgICBAY2xpY2s9XCIkZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBrZXkpXCJcbiAgICApIHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYnMnLCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOmNvbG9yJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRhYnMge1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLWxpbmsge1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgIH1cblxuICAgIC8vIFdoZW4gaW4gbWFpbiBoZWFkZXI6XG4gICAgLmRpdG8taGVhZGVyICYge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0O1xuICAgICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yO1xuICAgICAgbWFyZ2luLWxlZnQ6ICR0YWItbWFyZ2luO1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXM7XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuICAgICAgfVxuXG4gICAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdoZW4gaW5zaWRlIGEgaW5saW5lIHNjaGVtYTpcbiAgICAuZGl0by1zY2hlbWEtaW5saW5lZCAmLFxuICAgIC5kaXRvLWxhYmVsICYge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICAgIG1hcmdpbi1sZWZ0OiAtJGJvcmRlci13aWR0aDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuICAgICAgfVxuXG4gICAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBjb2xvci5hZGp1c3QoJGNvbG9yLWFjdGl2ZSwgJGxpZ2h0bmVzczogLTEwJSk7XG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tc2NoZW1hICYge1xuICAgIC8vIFB1c2ggY2xpcGJvYXJkIHRvIHRoZSByaWdodCBpbiB0aGUgZmxleCBsYXlvdXQsIHNlZTpcbiAgICAvLyBodHRwczovL2NvZGVwZW4uaW8vdGhvbGV4L3Blbi9odmVCeC9cbiAgICBtYXJnaW4tbGVmdDogYXV0bztcblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuY29tcG9uZW50LmRpdG8tcGFuZWwoXG4gIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEocGFuZWxTY2hlbWEpXCJcbiAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgOmlzPVwicGFuZWxUYWdcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgRGl0b1NjaGVtYS5kaXRvLXBhbmVsX19zY2hlbWEoXG4gICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICA6ZGF0YVNjaGVtYT1cInBhbmVsRGF0YVNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIHBhZGRpbmc9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICAgIGdlbmVyYXRlTGFiZWxzXG4gIClcbiAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgaDIuZGl0by1wYW5lbF9faGVhZGVyKDpjbGFzcz1cInsgJ2RpdG8tcGFuZWxfX2hlYWRlci0tc3RpY2t5Jzogc3RpY2t5IH1cIilcbiAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbChcbiAgICAgICAgICA6YnV0dG9ucz1cInBhbmVsQnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgKVxuICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgRGl0b0J1dHRvbnMoXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBDb250ZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL0NvbnRleHRNaXhpbi5qcydcbmltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZWwnLCB7XG4gIG1peGluczogW0NvbnRleHRNaXhpbiwgVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYW5lbFRhYkNvbXBvbmVudDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bkRhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuZXN0ZWQoKSB7XG4gICAgICAvLyBGb3IgYENvbnRleHRNaXhpbmA6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBwYW5lbEJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5wYW5lbEJ1dHRvbnMpXG4gICAgfSxcblxuICAgIGhhc093bkRhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLm93bkRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3duRGF0YSB8fCB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWEoKSB7XG4gICAgICBpZiAodGhpcy5oYXNPd25EYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBkYXRhYCBmcm9tIHRoZSBzY2hlbWEsIHNvIHRoYXQgRGl0b1NjaGVtYSBpc24ndCB1c2luZyBpdCB0b1xuICAgICAgICAvLyBwcm9kdWNlIGl0cyBvd24gZGF0YS4gU2VlICRmaWx0ZXJzIHBhbmVsIGZvciBtb3JlIGRldGFpbHMgb24gZGF0YS5cbiAgICAgICAgY29uc3QgeyBkYXRhLCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxUYWcoKSB7XG4gICAgICAvLyBQYW5lbHMgdGhhdCBwcm92aWRlIHRoZWlyIG93biBkYXRhIG5lZWQgdGhlaXIgb3duIGZvcm0uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gJ2Zvcm0nIDogJ2RpdidcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IHRoaXMuc2NoZW1hIDogdGhpcy5zY2hlbWFDb21wb25lbnQuc2NoZW1hXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBJZiB0aGUgcGFuZWwgcHJvdmlkZXMgaXRzIG93biBkYXRhLCB0aGVuIGl0IG5lZWRzIHRvIHByZWZpeCBhbGxcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCBpdHMgZGF0YS1wYXRoLCBidXQgaWYgaXQgc2hhcmVzIGRhdGEgd2l0aCB0aGUgc2NoZW1hXG4gICAgICAvLyBjb21wb25lbnQsIHRoZW4gaXQgc2hvdWxkIHNoYXJlIHRoZSBkYXRhLXBhdGggbmFtZSBzcGFjZSB0b28uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gdGhpcy5kYXRhUGF0aCA6IHRoaXMuc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoXG4gICAgfSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHN0aWNreTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0aWNreScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIC8vIE5PVEU6IFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIGBzY2hlbWEuZGF0YWAgaGFuZGxpbmcgaW4gRGl0b1NjaGVtYSxcbiAgICAvLyB3aGVyZSB0aGUgZGF0YSBpcyBhZGRlZCB0byB0aGUgYWN0dWFsIGNvbXBvbmVudC5cbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMub3duRGF0YSA9IGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgPyBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgOiBkYXRhXG4gICAgfVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUmVnaXN0ZXIgdGhlIHBhbmVscyBzbyB0aGF0IG90aGVyIGNvbXBvbmVudHMgY2FuIGZpbmQgdGhlbSBieSB0aGVpclxuICAgICAgLy8gZGF0YS1wYXRoLCBlLmcuIGluIFR5cGVMaXN0Lm9uRmlsdGVyRXJyb3JzKClcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmVsKHRoaXMsIGFkZClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lbCB7XG4gICY6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZztcbiAgfVxuXG4gICZfX2hlYWRlciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgYmFja2dyb3VuZDogJGJ1dHRvbi1jb2xvcjtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuXG4gICAgJi0tc3RpY2t5IHtcbiAgICAgICRtYXJnaW46ICRpbnB1dC1oZWlnaHQtZmFjdG9yICogJGxpbmUtaGVpZ2h0ICogJGZvbnQtc2l6ZS1zbWFsbCArXG4gICAgICAgICRmb3JtLXNwYWNpbmc7XG5cbiAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICB0b3A6ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICBtYXJnaW4tYm90dG9tOiAkbWFyZ2luO1xuICAgICAgei1pbmRleDogMTtcblxuICAgICAgJiArICoge1xuICAgICAgICBtYXJnaW4tdG9wOiAtJG1hcmdpbjtcbiAgICAgIH1cblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBoZWlnaHQ6ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICAgIHRvcDogLSRjb250ZW50LXBhZGRpbmc7XG4gICAgICAgIG1hcmdpbjogLSRib3JkZXItd2lkdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmRpdG8tYnV0dG9ucyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogJGlucHV0LXBhZGRpbmctdmVyO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgfVxuICB9XG5cbiAgJl9fc2NoZW1hIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG5cbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICAgIC5kaXRvLW9iamVjdCB7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgIH1cblxuICAgICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgICAgLS1idXR0b24tbWFyZ2luOiAjeyRmb3JtLXNwYWNpbmd9O1xuXG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmc7XG5cbiAgICAgICAgLmRpdG8tY29udGFpbmVyIHtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmRpdG8tbGFiZWwge1xuICAgICAgbGFiZWwge1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYW5lbHMoXG4gIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICApXG4gICAgRGl0b1BhbmVsKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEpXCJcbiAgICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkID8/IGRpc2FibGVkXCJcbiAgICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgQ29udGV4dE1peGluIGZyb20gJy4uL21peGlucy9Db250ZXh0TWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhbmVscycsIHtcbiAgbWl4aW5zOiBbQ29udGV4dE1peGluXSxcblxuICBwcm9wczoge1xuICAgIHBhbmVsczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuZXN0ZWQoKSB7XG4gICAgICAvLyBGb3IgYENvbnRleHRNaXhpbmA6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgICAgIC8vIEFsbG93IHNlcGFyYXRlIHRhYnMgdG8gdXNlIHBhbmVscyBvZiB0aGUgc2FtZSBuYW1lLCBieVxuICAgICAgLy8gcHJlZml4aW5nIHRoZWlyIGtleSB3aXRoIHRoZSB0YWIgbmFtZS5cbiAgICAgIHJldHVybiB0YWJDb21wb25lbnQgPyBgJHt0YWJDb21wb25lbnQudGFifV8ke2RhdGFQYXRofWAgOiBkYXRhUGF0aFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmVscyB7XG4gIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZztcbiAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8IGhhc1Nsb3RDb250ZW50KCRzbG90cy5kZWZhdWx0KVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICApXG4gICAgRGl0b0NvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShidXR0b25TY2hlbWEubmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCJ2bm9kZSBvZiAkc2xvdHMuZGVmYXVsdD8uKClcIlxuICApXG4gICAgLy8tIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCxcbiAgICAvLy0gc28gaXQgY2FuIGJlIHdyYXBwZWQgaW4gYSBgLmRpdG8tY29udGFpbmVyYCBjbGFzcy5cbiAgICAuZGl0by1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzVk5vZGVDb250ZW50KHZub2RlKVwiXG4gICAgKVxuICAgICAgRGl0b1Zub2RlKDp2bm9kZT1cInZub2RlXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBDb250ZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL0NvbnRleHRNaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGhhc1Nsb3RDb250ZW50LCBoYXNWTm9kZUNvbnRlbnQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQnV0dG9ucycsIHtcbiAgbWl4aW5zOiBbQ29udGV4dE1peGluXSxcblxuICBwcm92aWRlOiB7XG4gICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBidXR0b25zIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzLlxuICAgICAgY29uc3QgeyBkYXRhUGF0aCwgYnV0dG9ucyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGJ1dHRvbnNcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKGJ1dHRvbnMpLnJlZHVjZSgoc2NoZW1hcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICBzY2hlbWFzW2FwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBidXR0b24ubmFtZSldID0gYnV0dG9uXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hc1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc1Nsb3RDb250ZW50LFxuICAgIGhhc1ZOb2RlQ29udGVudFxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tYnV0dG9ucyB7XG4gID4gLmRpdG8tY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBTZXQgYEBjbGljay5zdG9wYCB0byBwcmV2ZW50IGNsaWNrIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIGRpdG8tbGFiZWwuXG5EaXRvQnV0dG9ucy5kaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWRpc2FibGVkJzogaXNEcmFnZ2FibGVEaXNhYmxlZCB9XCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgKVxuICBSb3V0ZXJMaW5rLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1kaXNhYmxlZCc6IGlzRWRpdGFibGVEaXNhYmxlZCB9XCJcbiAgICA6dG89XCJlZGl0UGF0aCA/IHsgcGF0aDogZWRpdFBhdGggfSA6IHt9XCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgKVxuICBEaXRvQ3JlYXRlQnV0dG9uKFxuICAgIHYtaWY9XCJjcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gICAgOmRpc2FibGVkPVwiaXNDcmVhdGFibGVEaXNhYmxlZFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIDpkaXNhYmxlZD1cImlzRGVsZXRhYmxlRGlzYWJsZWRcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgQ29udGV4dE1peGluIGZyb20gJy4uL21peGlucy9Db250ZXh0TWl4aW4uanMnXG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRWRpdEJ1dHRvbnMnLCB7XG4gIG1peGluczogW0NvbnRleHRNaXhpbl0sXG4gIGVtaXRzOiBbJ2RlbGV0ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY3JlYXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3JlYXRlUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEuZm9ybSlcbiAgICB9LFxuXG4gICAgaXNEcmFnZ2FibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmhhc1NjaGVtYU9wdGlvbignZHJhZ2dhYmxlJylcbiAgICB9LFxuXG4gICAgaXNEZWxldGFibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmhhc1NjaGVtYU9wdGlvbignZGVsZXRhYmxlJylcbiAgICB9LFxuXG4gICAgaXNFZGl0YWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5kaXNhYmxlZCB8fFxuICAgICAgICAhdGhpcy5lZGl0UGF0aCB8fFxuICAgICAgICAhdGhpcy5oYXNTY2hlbWFPcHRpb24oJ2VkaXRhYmxlJylcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNDcmVhdGFibGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgfHxcbiAgICAgICAgIXRoaXMuY3JlYXRlUGF0aCB8fFxuICAgICAgICAhdGhpcy5oYXNTY2hlbWFPcHRpb24oJ2NyZWF0YWJsZScpXG4gICAgICApXG4gICAgfSxcblxuICAgIGNyZWF0ZUJ1dHRvblRleHQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgY3JlYXRlIGJ1dHRvbiB0aHJvdWdoIGNyZWF0YWJsZSBvYmplY3Q6XG4gICAgICAgIHRoaXMuc2NoZW1hLmNyZWF0YWJsZT8ubGFiZWwgfHwgKFxuICAgICAgICAgIC8vIEF1dG8tZ2VuZXJhdGUgY3JlYXRlIGJ1dHRvbiBsYWJlbHMgZnJvbSBmcm9tIGxhYmVscyBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMgd2l0aCBvbmx5IG9uZSBmb3JtOlxuICAgICAgICAgIHRoaXMuZm9ybUxhYmVsICYmXG4gICAgICAgICAgYCR7Y2FwaXRhbGl6ZSh0aGlzLnZlcmJzLmNyZWF0ZSl9ICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICApIHx8XG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc1NjaGVtYU9wdGlvbihuYW1lKSB7XG4gICAgICAvLyBBbGwgb3B0aW9ucyBjYW4gYmUgZGlzYWJsZWQgb24gYSBwZXItZm9ybSBiYXNpcyBieSBzZXR0aW5nXG4gICAgICAvLyBgc2NoZW1hW25hbWVdYCB0byBgZmFsc2VgIG9yIGEgY2FsbGJhY2sgcmV0dXJuaW5nIGBmYWxzZWAuXG4gICAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWFWYWx1ZShuYW1lLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgLy8gT3ZlcnJpZGUgY3Vyc29yIGZyb20gY29sbGFwc2libGUgZGl0by1sYWJlbDpcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBmbGV4OiBub25lO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jcmVhdGUtYnV0dG9uXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiY3JlYXRhYmxlRm9ybVwiXG4gICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJiKVwiXG4gICAgQGNsaWNrPVwiY3JlYXRlSXRlbShjcmVhdGFibGVGb3JtKVwiXG4gICkge3sgdGV4dCB9fVxuICB0ZW1wbGF0ZShcbiAgICB2LWVsc2UtaWY9XCJjcmVhdGFibGVGb3Jtc1wiXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYilcIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICApIHt7IHRleHQgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiKVxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGZvcm0sIHR5cGUpIGluIGNyZWF0YWJsZUZvcm1zXCJcbiAgICAgIClcbiAgICAgICAgYShcbiAgICAgICAgICB2LXNob3c9XCJzaG91bGRTaG93U2NoZW1hKGZvcm0pXCJcbiAgICAgICAgICA6Y2xhc3M9XCJnZXRGb3JtQ2xhc3MoZm9ybSwgdHlwZSlcIlxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodHlwZSlcIlxuICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBDb250ZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL0NvbnRleHRNaXhpbi5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ3JlYXRlQnV0dG9uJywge1xuICBtaXhpbnM6IFtDb250ZXh0TWl4aW4sIFB1bGxkb3duTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBUaGUgbmV4dCBmb3VyIHByb3BzIGFyZSB0aGVyZSBmb3IgYERpdG9Db250ZXh0YCBhbmQgdGhlIGBjb250ZXh0KClgXG4gICAgLy8gZ2V0dGVyIGluIGBEaXRvTWl4aW5gLlxuICAgIC8vIFRPRE86IFNob3VsZCB0aGV5IGJlIG1vdmVkIHRvIHNoYXJlZCBtaXhpbiB0aGF0IGRlZmluZXMgdGhlbSBhcyByZXF1aXJlZFxuICAgIC8vIGFuZCBhbHNvIHByb3ZpZGVzIHRoZSBgY29udGV4dCgpYCBnZXR0ZXIsIHBlcmhhcHMgYENvbnRleHRNaXhpbmA/XG4gICAgLy8gYHNjaGVtYWAgY291bGQgYmUgaW5jbHVkZWQgYXMgd2VsbCwgYW5kIGBDb250ZXh0TWl4aW5gIGNvdWxkIGJlIHVzZWQgaW5cbiAgICAvLyBgRGl0b0Zvcm1gLCBgRGl0b1ZpZXdgLCBgRGl0b1BhbmVsYCwgYERpdG9TY2hlbWFgLCBgRGl0b0VkaXRCdXR0b25zYCxcbiAgICAvLyBldGM/IEJ1dCB0aGUgcHJvYmxlbSB3aXRoIHRoZSByb290IGNvbXBvbmVudHMgaXMgdGhhdCB0aGV5IGRvbid0IGhhdmVcbiAgICAvLyB0aGVzZSBwcm9wcy4gV2UgY291bGQgYWRkIGEgYGNvbnRleHRBdHRyaWJ1dGVzKClgIGdldHRlciBmb3IgZWFzeSBwYXNzaW5nXG4gICAgLy8gb24gYXMgYHYtYmluZD1cImNvbnRleHRBdHRyaWJ1dGVzXCJgLlxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB2ZXJiOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0ZXh0OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGNyZWF0YWJsZUZvcm1zKCkge1xuICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuZm9ybXMpLmZpbHRlcihcbiAgICAgICAgKFssIGZvcm1dKSA9PiB0aGlzLmlzRm9ybUNyZWF0YWJsZShmb3JtKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGVudHJpZXMubGVuZ3RoID4gMFxuICAgICAgICA/IE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKVxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgY3JlYXRhYmxlRm9ybSgpIHtcbiAgICAgIGNvbnN0IGZvcm1zID0gdGhpcy5jcmVhdGFibGVGb3Jtc1xuICAgICAgcmV0dXJuIGZvcm1zICYmIE9iamVjdC5rZXlzKGZvcm1zKS5sZW5ndGggPT09IDEgJiYgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0Zvcm1DcmVhdGFibGUoZm9ybSkge1xuICAgICAgLy8gRm9ybXMgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGxpc3QgYnkgcHJvdmlkaW5nIGBpZjogZmFsc2VgIG9yXG4gICAgICAvLyBgY3JlYXRhYmxlOiBmYWxzZWAuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnNob3VsZFJlbmRlclNjaGVtYShmb3JtKSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdjcmVhdGFibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgIHNjaGVtYTogZm9ybVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKGZvcm0sIHR5cGUgPSBudWxsKSB7XG4gICAgICBpZiAoIXRoaXMuc2hvdWxkRGlzYWJsZVNjaGVtYShmb3JtKSkge1xuICAgICAgICBpZiAodGhpcy5pc0lubGluZWQpIHtcbiAgICAgICAgICB0aGlzLnNvdXJjZUNvbXBvbmVudC5jcmVhdGVJdGVtKGZvcm0sIHR5cGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICAgICAgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgLFxuICAgICAgICAgICAgcXVlcnk6IHsgdHlwZSB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYWxsb3dlZCB0byBjcmVhdGUgaXRlbSBmb3IgZ2l2ZW4gZm9ybScpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZvcm1DbGFzcyhmb3JtLCB0eXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYGRpdG8tdHlwZS0ke3R5cGV9YF06IHRydWUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5zaG91bGREaXNhYmxlU2NoZW1hKGZvcm0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QodHlwZSkge1xuICAgICAgdGhpcy5jcmVhdGVJdGVtKHRoaXMuZm9ybXNbdHlwZV0sIHR5cGUpXG4gICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1jcmVhdGUtYnV0dG9uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLXB1bGxkb3duIHtcbiAgICByaWdodDogMDtcblxuICAgIC5kaXRvLWJ1dHRvbnMtc3RpY2t5ICYge1xuICAgICAgdG9wOiB1bnNldDtcbiAgICAgIHJpZ2h0OiB1bnNldDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICB2LWlmPVwiY2xpcGJvYXJkXCJcbilcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgcmVmPVwiY29weURhdGFcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uQ29weVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc09iamVjdCwgY2xvbmUsIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9DbGlwYm9hcmQnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm9wczoge1xuICAgIGNsaXBib2FyZDogeyB0eXBlOiBbQm9vbGVhbiwgT2JqZWN0XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT5cbiAgICAgICAgICAgIGNvcHkuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBjbGlwYm9hcmREYXRhIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xvbmUoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgcGFzdGVEYXRhKCkge1xuICAgICAgY29uc3QgeyBwYXN0ZSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gcGFzdGVcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+XG4gICAgICAgICAgICBwYXN0ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGNsaXBib2FyZERhdGEgfSkpXG4gICAgICAgIDogY2xpcGJvYXJkRGF0YSA9PiBjbGlwYm9hcmREYXRhXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgLy8gQ2hlY2sgcmlnaHQgYXdheSBhbHNvIGluIGNhc2UgdGhlcmUncyBhbHJlYWR5IGRhdGEgKGUuZy4gY3JlYXRlIGZvcm0pOlxuICAgICdwYXJlbnRDb21wb25lbnQuaGFzRGF0YSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICd1cGRhdGVDb3B5J1xuICAgIH0sXG5cbiAgICAnYXBwU3RhdGUuY2xpcGJvYXJkRGF0YSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICd1cGRhdGVQYXN0ZSdcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBjbGlwYm9hcmQgY29udGVudCB3aGVuZXZlciBzb21ldGhpbmcgZ2V0cyBjb3BpZWQgb3IgdGhlIHdpbmRvdyBnZXRzXG4gICAgLy8gKHJlKWFjdGl2YXRlZCwgYXMgdGhvc2UgYXJlIHRoZSBtb21lbnRzIHdoZW4gdGhlIGNsaXBib2FyZCBjYW4gY2hhbmdlOlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHsgY29weTogdGhpcy51cGRhdGVQYXN0ZSB9KVxuICAgIHRoaXMuZG9tT24od2luZG93LCB7IGZvY3VzOiB0aGlzLnVwZGF0ZVBhc3RlIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGNoZWNrQ2xpcGJvYXJkRGF0YShjbGlwYm9hcmREYXRhKSB7XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYS5uYW1lID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2xpcGJvYXJkRGF0YShyZXBvcnQpIHtcbiAgICAgIC8vIFVzZSB0aGUgaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgbGV0IHsgY2xpcGJvYXJkRGF0YSB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LnJlYWRUZXh0Py4oKVxuICAgICAgICBpZiAoanNvbikge1xuICAgICAgICAgIGNsaXBib2FyZERhdGEgPSBKU09OLnBhcnNlKGpzb24pXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAocmVwb3J0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgICBpZiAoZXJyLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIGFsZXJ0KGRlaW5kZW50YFxuICAgICAgICAgICAgICBUaGUgZGF0YSBpbiB0aGUgY2xpcGJvYXJkIGFwcGVhcnMgdG8gYmUgbWFsZm9ybWVkOlxuICAgICAgICAgICAgICAke2Vyci5tZXNzYWdlfVxuICAgICAgICAgICAgYClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNoZWNrQ2xpcGJvYXJkRGF0YShjbGlwYm9hcmREYXRhKVxuICAgIH0sXG5cbiAgICB1cGRhdGVDb3B5KCkge1xuICAgICAgdGhpcy5jb3B5RW5hYmxlZCA9IHRoaXMucGFyZW50Q29tcG9uZW50Lmhhc0RhdGFcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlUGFzdGUoKSB7XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhdGhpcy5jaGVja0NsaXBib2FyZERhdGEodGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhKVxuICAgICAgaWYgKCF0aGlzLnBhc3RlRW5hYmxlZCAmJiB0aGlzLmFwcFN0YXRlLmFnZW50LmNocm9tZSkge1xuICAgICAgICAvLyBTZWUgaWYgdGhlIGNsaXBib2FyZCBjb250ZW50IGlzIHZhbGlkIEpTT04gZGF0YSB0aGF0IGlzIGNvbXBhdGlibGVcbiAgICAgICAgLy8gd2l0aCB0aGUgY3VycmVudCB0YXJnZXQgc2NoZW1hLCBhbmQgb25seSB0aGVuIGFjdGl2YXRlIHRoZSBwYXN0aW5nOlxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKGZhbHNlKSAvLyBEb24ndCByZXBvcnRcbiAgICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIWRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25Db3B5KCkge1xuICAgICAgbGV0IGRhdGEgPSB0aGlzLnBhcmVudENvbXBvbmVudC5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgLi4udGhpcy5jb3B5RGF0YShkYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBLZWVwIGFuIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9IHRydWVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMilcbiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy53cml0ZVRleHQ/Lihqc29uKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblBhc3RlKCkge1xuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEodHJ1ZSkgLy8gUmVwb3J0XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLnBhc3RlRGF0YShkYXRhKVxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMucGFyZW50Q29tcG9uZW50LmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2xpcGJvYXJkIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1zY2hlbWEgJiB7XG4gICAgLy8gUHVzaCBjbGlwYm9hcmQgdG8gdGhlIHJpZ2h0IGluIHRoZSBmbGV4IGxheW91dCwgc2VlOlxuICAgIC8vIGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICB9XG5cbiAgLmRpdG8taGVhZGVyICYge1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuXG4gICAgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbjogMCAwICR0YWItbWFyZ2luICR0YWItbWFyZ2luO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nLCB7IHVwZGF0ZVJvb3QgPSBmYWxzZSwgdXBkYXRlVmlldyA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZyBeICFpc0xvYWRpbmcpIHtcbiAgICAgICAgLy8gQm9vbGVhbiB4b3JcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgICAgICBpZiAodXBkYXRlUm9vdCkge1xuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5yZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVWaWV3KSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldExvYWRpbmcodGhpcy5pc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuaW1wb3J0IHsgc2V0RGVmYXVsdFZhbHVlcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGFzc2lnbkRlZXBseSwgaXNPYmplY3QsIGlzU3RyaW5nLCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW4sIExvYWRpbmdNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgLy8gUGFzcyBsb2NhbCB2ZXJicyBvdmVycmlkZXMgb24gdG8gY2hpbGRyZW4sIHNlZSB2ZXJicygpIGNvbXB1dGVkIHByb3AuXG4gICAgICAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMsXG4gICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRoaXMuaGFzRGF0YVxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsb2FkZWREYXRhOiBudWxsLFxuICAgICAgYWJvcnRDb250cm9sbGVyOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByZXNvdXJjZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlKClcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gVGhpcyBjb21wb25lbnQgaXMgYSBkYXRhLXNvdXJjZSBpZiBpdCBoYXMgYW4gYXNzb2NpYXRlZCBBUEkgcmVzb3VyY2U6XG4gICAgICByZXR1cm4gISF0aGlzLnJlc291cmNlXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgLy8gUmV0dXJucyBgZmFsc2VgaGVyZSwgYnV0IGlzIG92ZXJyaWRkZW4gdG8gcmV0dXJuIGB0cnVlYCBpblxuICAgICAgLy8gYFNvdXJjZU1peGluYCBmb3IgY29tcG9uZW50IHRoYXQgZG8gbm90IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEsIGJ1dFxuICAgICAgLy8gZWRpdCB0aGVpciBpdGVtcyB0aHJvdWdoIGEgbGlua2VkIHZpZXcuICBJbiB0aGlzIGNhc2UsIHJlYWwgaWRzIG5lZWQgdG9cbiAgICAgIC8vIGJlIHVzZWQuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNUcmFuc2llbnQoKSB7XG4gICAgICAvLyBDaGVjayB0aGUgZm9ybSB0aGF0IHRoaXMgY29tcG9uZW50IGJlbG9uZ3MgdG8gYXMgd2VsbCwgc2luY2UgaXQgbWF5IGJlXG4gICAgICAvLyBpbiBjcmVhdGlvbiBtb2RlLCB3aGljaCBtYWtlcyBpdCB0cmFuc2llbnQuXG4gICAgICAvLyBOT1RFOiBUaGlzIGRvZXMgbm90IGxvb3AgZW5kbGVzc2x5IGJlY2F1c2UgRGl0b0Zvcm0gcmVkZWZpbmVzXG4gICAgICAvLyBgaXNUcmFuc2llbnQoKWAgdG8gb25seSByZXR1cm4gYCF0aGlzLnByb3ZpZGVzRGF0YWAuXG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQ29tcG9uZW50XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhdGhpcy5wcm92aWRlc0RhdGEgJiZcbiAgICAgICAgIXRoaXMubGlua3NUb1ZpZXcgfHxcbiAgICAgICAgZm9ybSAmJiAoXG4gICAgICAgICAgZm9ybS5pc1RyYW5zaWVudCB8fFxuICAgICAgICAgIGZvcm0uaXNDcmVhdGluZ1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIHRyYW5zaWVudE5vdGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmlzVHJhbnNpZW50ICYmIChcbiAgICAgICAgICAnPGI+Tm90ZTwvYj46IHRoZSBwYXJlbnQgc3RpbGwgbmVlZHMgdG8gYmUgc2F2ZWQgJyArXG4gICAgICAgICAgJ2luIG9yZGVyIHRvIHBlcnNpc3QgdGhpcyBjaGFuZ2UuJ1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIHNob3VsZExvYWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAhdGhpcy5pc0xvYWRpbmdcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIC8vIEJhc2UgZGVmaW5pdGlvbiwgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IERpdG9Gb3JtIGFuZCBTb3VyY2VNaXhpblxuICAgICAgcmV0dXJuICEhdGhpcy5sb2FkZWREYXRhXG4gICAgfSxcblxuICAgIHZlcmJzKCkge1xuICAgICAgLy8gVGhlIGFjdHVhbCBjb2RlIGlzIHRoZSBgZ2V0VmVyYnMoKWAgbWV0aG9kLCBmb3IgZWFzaWVyIG92ZXJyaWRpbmcgb2ZcbiAgICAgIC8vIHRoaXMgY29tcHV0ZWQgcHJvcGVydHkgaW4gY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgUmVzb3VyY2VNaXhpbi5cbiAgICAgIHJldHVybiB0aGlzLmdldFZlcmJzKClcbiAgICB9LFxuXG4gICAgcGFnaW5hdGlvblJhbmdlKCkge1xuICAgICAgLy8gT25seSBhcHBseSBwYWdpbmF0aW9uIHRvIGxpc3RzLlxuICAgICAgY29uc3QgeyBwYWdpbmF0ZTogYW1vdW50IH0gPSB0aGlzLnNvdXJjZVNjaGVtYVxuICAgICAgaWYgKHRoaXMuaXNMaXN0U291cmNlICYmIGFtb3VudCkge1xuICAgICAgICBjb25zdCB7IHBhZ2UgPSAwIH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFnZSAqIGFtb3VudFxuICAgICAgICByZXR1cm4gW3N0YXJ0LCBzdGFydCArIGFtb3VudCAtIDFdXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBxdWVyeVBhcmFtcygpIHtcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5wYWdpbmF0aW9uUmFuZ2VcbiAgICAgIGNvbnN0IHsgcGFnZSwgLi4ucXVlcnkgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnF1ZXJ5LCAvLyBRdWVyeSBtYXkgb3ZlcnJpZGUgc2NvcGUuXG4gICAgICAgIC4uLihyYW5nZSAmJiB7XG4gICAgICAgICAgLy8gUGFzcyBwYWdpbmF0aW9uIGFzIHJhbmdlLCBzbyB0aGF0IHdlIGF1dG9tYXRpY2FsbHkgZ2V0IE9iamVjdGlvbidzXG4gICAgICAgICAgLy8gcmVzdWx0cyBjb3VudGluZzpcbiAgICAgICAgICByYW5nZTogcmFuZ2Uuam9pbignLCcpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgLy8gV2hlbiBjcmVhdGluZyBuZXN0ZWQgZGF0YSwgd2Ugc3RpbGwgbmVlZCB0byBjYWxsIHNldHVwRGF0YSgpXG4gICAgaWYgKHRoaXMucHJvdmlkZXNEYXRhIHx8IHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgdGhpcy5zZXR1cERhdGEoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UmVzb3VyY2UoeyBtZXRob2QgPSAnZ2V0JywgY2hpbGQgfSA9IHt9KSB7XG4gICAgICAvLyBSZXR1cm5zIHRoZSByZXNvdXJjZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZSBmb3IgdGhlXG4gICAgICAvLyBhc3NvY2lhdGVkIHNvdXJjZSBzY2hlbWEuXG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZVxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHJlc291cmNlLCB7XG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBwYXJlbnQ6IHRoaXMucGFyZW50UmVzb3VyY2VDb21wb25lbnQ/LmdldFJlc291cmNlKHtcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgY2hpbGQ6IHJlc291cmNlXG4gICAgICAgIH0pID8/IG51bGwsXG4gICAgICAgIGNoaWxkXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHQgdmVyYnMgd2l0aCB0aGVpciB0cmFuc2llbnQgdmVyc2lvbnM6XG4gICAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICAgIHNhdmU6ICdhcHBseScsXG4gICAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICAgIGRlbGV0ZWQ6ICdyZW1vdmVkJ1xuICAgICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBxdWVyeSB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UgcmVhbGx5IHN3YWxsb3cgdGhlc2UgZXJyb3JzP1xuICAgICAgICAgICAgICAvLyBJcyBjYWxsaW5nIGBlbnN1cmVVc2VyKClgIGluIGBvbkJlZm9yZVJlcXVlc3QoKWAgZW5vdWdoP1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnbG9hZCcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwXG4gICAgfSxcblxuICAgIGlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDFcbiAgICB9LFxuXG4gICAgYXN5bmMgaGFuZGxlUmVxdWVzdChcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICByZXNvdXJjZSA9IHRoaXMuZ2V0UmVzb3VyY2UoeyBtZXRob2QgfSksXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhXG4gICAgICB9LFxuICAgICAgY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyPy5hYm9ydCgpXG4gICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IGNvbnRyb2xsZXJcbiAgICAgIGNvbnN0IHsgc2lnbmFsIH0gPSBjb250cm9sbGVyXG4gICAgICBtZXRob2QgPSByZXNvdXJjZS5tZXRob2QgfHwgbWV0aG9kXG4gICAgICBjb25zdCByZXF1ZXN0ID0geyBtZXRob2QsIHJlc291cmNlLCBxdWVyeSwgZGF0YSwgc2lnbmFsIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLm5hbWUgIT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICAgIC8vIElmIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgZXJyb3JzIHdlcmUgYWxyZWFkeSBoYW5kbGVkLlxuICAgICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgICAgaWYgKCFjYWxsYmFjayhlcnJvciwgcmVzcG9uc2UpKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gaXNTdHJpbmcoZGF0YT8udHlwZSlcbiAgICAgICAgICAgICAgPyBsYWJlbGl6ZShkYXRhLnR5cGUpXG4gICAgICAgICAgICAgIDogJ0Vycm9yJ1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGRhdGE/Lm1lc3NhZ2UgPz8gZXJyb3JcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHsgdHlwZTogJ2Vycm9yJywgZXJyb3IsIHRpdGxlLCB0ZXh0IH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5hYm9ydENvbnRyb2xsZXIgPT09IGNvbnRyb2xsZXIpIHtcbiAgICAgICAgLy8gT25seSBjbGVhciB0aGUgbG9hZGluZyBzdGF0ZSBpZiB0aGlzIGlzIHN0aWxsIHRoZSBjdXJyZW50IHJlcXVlc3QuXG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbnVsbFxuICAgICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZCkge1xuICAgICAgLy8gQ29udmVudGlvbjogb25seSBwb3N0LCBwdXQgYW5kIHBhdGNoIHJlcXVlc3RzIHBhc3MgdGhlIGRhdGEgYXMgcGF5bG9hZC5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmNsdWRlcyhtZXRob2QpICYmIChcbiAgICAgICAgICAvLyBUT0RPOiBVc2UgYGhhbmRsZURhdGFTY2hlbWEoKWAgYXN5bmNocm9ub3VzbHkgaGVyZSBpbnN0ZWFkLCB0b1xuICAgICAgICAgIC8vIG9mZmVyIHRoZSBzYW1lIGFtb3VudCBvZiBwb3NzaWJpbGl0aWVzIGZvciBkYXRhIGxvYWRpbmcuXG4gICAgICAgICAgYnV0dG9uLmdldFNjaGVtYVZhbHVlKFsncmVzb3VyY2UnLCAnZGF0YSddKSB8fFxuICAgICAgICAgIGJ1dHRvbi5wcm9jZXNzZWRJdGVtXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbikge1xuICAgICAgbGV0IHsgcmVzb3VyY2UgfSA9IGJ1dHRvbi5zY2hlbWFcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLmdldFJlc291cmNlKHtcbiAgICAgICAgICBtZXRob2Q6IHJlc291cmNlPy5tZXRob2QsXG4gICAgICAgICAgY2hpbGQ6IHJlc291cmNlXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgICB9KSxcbiAgICAgIG5vdGlmeUVycm9yID0gZXJyb3IgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBmb3JlaWduIGRhdGEgZW50cmllcyB3aGVuIHVwZGF0aW5nIHRoZSBkYXRhLlxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZm9yZWlnbkRhdGEgfSA9IHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5maWx0ZXJEYXRhKFxuICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC8vIFRlbGwgdGhlIHBhcmVudCByb3V0ZSB0byByZWxvYWQgaXRzIGRhdGEsIHNvIHRoYXQgaXQgY2FuXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIGl0cyBmb3JlaWduIGRhdGEgZW50cmllcy5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRNZXRhID0gdGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudD8ucm91dGVSZWNvcmQ/Lm1ldGFcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50TWV0YSkge1xuICAgICAgICAgICAgICAgICAgcGFyZW50TWV0YS5yZWxvYWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShhc3NpZ25EZWVwbHkoe30sIGZvcmVpZ25EYXRhLCBkYXRhKSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRCdXR0b25FdmVudChidXR0b24sIGV2ZW50LCB7IG5vdGlmeSwgZXJyb3IgfSkge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBjb250ZXh0IG91dHNpZGUgb2YgYGVtaXRFdmVudCgpYCwgc28gdGhhdFxuICAgICAgLy8gYGNvbnRleHQud2FzTm90aWZpZWRgIGNhbiBiZSBjaGVja2VkIGFmdGVyLlxuICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBEaXRvQ29udGV4dChidXR0b24sIHtcbiAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgICBpdGVtTGFiZWw6IHRoaXMuaXRlbUxhYmVsLFxuICAgICAgICBlcnJvclxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJ1dHRvbi5lbWl0RXZlbnQoZXZlbnQsIHsgY29udGV4dCB9KVxuICAgICAgaWYgKFxuICAgICAgICBub3RpZnkgJiZcbiAgICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGlmIGFueXRoaW5nIHdhcyByZXR1cm5lZCBmcm9tIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAvLyBEbyBub3QgZGlzcGxheSBkZWZhdWx0IG5vdGlmaWNhdGlvbiBpZiB0aGUgZXZlbnQgaGFuZGxlciBhbHJlYWR5XG4gICAgICAgIC8vIGRpc3BsYXllZCBhIG5vdGlmaWNhdGlvbi5cbiAgICAgICAgIWNvbnRleHQud2FzTm90aWZpZWRcbiAgICAgICkge1xuICAgICAgICBub3RpZnkoZXJyb3IpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBhdGgocGF0aCkge1xuICAvLyBGb3IgcGF0aHMgc3RhcmluZyB3aXRoIGAvYCwgd2UgY2FuIHVzZSB0aGUgbmF0aXZlIGBVUkwoKWAgY2xhc3MgdG8gcmVzb2x2ZVxuICAvLyB0aGUgcGF0aCwgd2hpY2ggd2lsbCBhbHNvIGhhbmRsZSBgLi5gIGFuZCBgLmAgc2VnbWVudHM6XG4gIHJldHVybiBuZXcgVVJMKGBmaWxlOiR7cGF0aH1gKS5wYXRobmFtZVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICA6Y2xhc3M9XCJ7ICdkaXRvLWZvcm0tbmVzdGVkJzogaXNOZXN0ZWRSb3V0ZSB9XCJcbiAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4pXG4gIC8vLSBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlIGFuZCBub3QgYVxuICAvLy0gbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIFJvdXRlclZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RVbm5lc3RlZFJvdXRlICYmICFpc05lc3RlZFJvdXRlXCJcbiAgICB2LXNob3c9XCIhaXNBY3RpdmVSb3V0ZVwiXG4gIClcbiAgLy8tIE5PVEU6IE5lc3RlZCBmb3JtIGNvbXBvbmVudHMgYXJlIGtlcHQgYWxpdmUgYnkgdXNpbmcgYHYtc2hvd2AgaW5zdGVhZCBvZlxuICAvLy0gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLy0gZWRpdGluZy5cbiAgRGl0b0Zvcm1Jbm5lcihcbiAgICB2LXNob3c9XCJpc0FjdGl2ZVJvdXRlXCJcbiAgICA6bmVzdGVkPVwiaXNOZXN0ZWRSb3V0ZVwiXG4gIClcbiAgICAvLy0gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vLSBpbiBhbiBpbnB1dCBmaWVsZC5cbiAgICAvLy0gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZFxuICAgIClcbiAgICBEaXRvU2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpwYWRkaW5nPVwiaXNOZXN0ZWRSb3V0ZSA/ICduZXN0ZWQnIDogJ3Jvb3QnXCJcbiAgICAgIDphY3RpdmU9XCJpc0FjdGl2ZVJvdXRlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6c2Nyb2xsYWJsZT1cIiFpc05lc3RlZFJvdXRlXCJcbiAgICAgIGdlbmVyYXRlTGFiZWxzXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbGFyZ2UuZGl0by1idXR0b25zLW1haW4oXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1idXR0b25zLXN0aWNreSc6ICFpc05lc3RlZFJvdXRlIH1cIlxuICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lLCBjYXBpdGFsaXplLCBwYXJzZURhdGFQYXRoLCBhc3NpZ25EZWVwbHkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IFJlc291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMsIGlzT2JqZWN0U291cmNlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZVBhdGggfSBmcm9tICcuLi91dGlscy9wYXRoLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Gb3JtJywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluLCBSZXNvdXJjZU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVkRGF0YTogbnVsbCxcbiAgICAgIGNsb25lZERhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHNvdXJjZUtleTogbnVsbCxcbiAgICAgIGlzRm9ybTogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmJzKCkge1xuICAgICAgLy8gQWRkIHN1Ym1pdCAvIHN1Ym1pdHRlZCB0byB0aGUgdmVyYnMgcmV0dXJuZWQgYnkgUmVzb3VyY2VNaXhpblxuICAgICAgLy8gTk9URTogVGhlc2UgZ2V0IHBhc3NlZCBvbiB0byBjaGlsZHJlbiB0aHJvdWdoOlxuICAgICAgLy8gYHByb3ZpZGUoKSAuLi4geyAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMgfWAgaW4gUmVzb3VyY2VNaXhpblxuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLmdldFZlcmJzKClcbiAgICAgIGNvbnN0IHsgaXNDcmVhdGluZywgcHJvdmlkZXNEYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgc3VibWl0OiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlIDogdmVyYnMuc2F2ZSxcbiAgICAgICAgc3VibWl0dGVkOiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlZCA6IHZlcmJzLnNhdmVkLFxuICAgICAgICBjYW5jZWw6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbCA6IHZlcmJzLmNsb3NlLFxuICAgICAgICBjYW5jZWxsZWQ6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbGxlZCA6IHZlcmJzLmNsb3NlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIHRoaXMuZGF0YSB8fCAoXG4gICAgICAgICAgdGhpcy5jcmVhdGlvblR5cGVcbiAgICAgICAgICAgID8gLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSB5ZXQgYnV0IHRoZSB0eXBlIHRvIGNyZWF0ZSBhIG5ldyBpdGVtIGlzXG4gICAgICAgICAgICAgIC8vIGlzIHNwZWNpZmllZCwgcHJvdmlkZSBhIHRlbXBvcmFyeSBlbXB0eSBvYmplY3Qgd2l0aCBqdXN0IHRoZVxuICAgICAgICAgICAgICAvLyB0eXBlIHNldCwgc28gYGdldEl0ZW1Gb3JtU2NoZW1hKClgIGNhbiBkZXRlcm1pbmUgdGhlIGZvcm0uXG4gICAgICAgICAgICAgIHsgdHlwZTogdGhpcy5jcmVhdGlvblR5cGUgfVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuY29udGV4dFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXMoXG4gICAgICAgIGFzc2lnbkRlZXBseShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHN1Ym1pdDogIXRoaXMuaXNNdXRhdGluZyAmJiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgICAvLyBTdWJtaXQgYnV0dG9ucyBjbG9zZSB0aGUgZm9ybSBieSBkZWZhdWx0OlxuICAgICAgICAgICAgICBjbG9zZUZvcm06IHRydWUsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoeyBjb21wb25lbnQ6IGJ1dHRvbiB9KSA9PiBidXR0b24uc3VibWl0KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5zY2hlbWEuYnV0dG9uc1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzQWN0aXZlUm91dGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0xhc3RSb3V0ZSB8fCB0aGlzLmlzTGFzdFVubmVzdGVkUm91dGVcbiAgICB9LFxuXG4gICAgaXNUcmFuc2llbnQoKSB7XG4gICAgICByZXR1cm4gIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzQ3JlYXRpbmcoKSB7XG4gICAgICAvLyB0aGlzLnBhcmFtIGlzIGluaGVyaXRlZCBmcm9tIFJvdXRlTWl4aW5cbiAgICAgIHJldHVybiB0aGlzLnBhcmFtID09PSAnY3JlYXRlJ1xuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzTXV0YXRpbmcgJiYgISF0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LmlzRGlydHlcbiAgICB9LFxuXG4gICAgaXNNdXRhdGluZygpIHtcbiAgICAgIC8vIFdoZW4gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIHRoZSBmb3JtIGVkaXRzIHRoZSBpbmhlcml0ZWQgZGF0YVxuICAgICAgLy8gZGlyZWN0bHkgaW5zdGVhZCBvZiBtYWtpbmcgYSBjb3B5IGZvciBwZXJzaXN0ZW5jZSB1cG9uIHN1Ym1pc3Npb24uXG4gICAgICAvLyBTZWUgYGluaGVyaXRlZERhdGEoKWAgY29tcHV0ZWQgcHJvcGVydHkgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiAhIXRoaXMuc291cmNlU2NoZW1hLm11dGF0ZVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LnNlbGVjdGVkVGFiIHx8IG51bGxcbiAgICB9LFxuXG4gICAgY3JlYXRpb25UeXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5wYXJhbSA/PyBudWxsXG4gICAgfSxcblxuICAgIG1ldGhvZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmcgPyAncG9zdCcgOiAncGF0Y2gnXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZSh0aGlzLmlzQ3JlYXRpbmcgPyB0aGlzLnZlcmJzLmNyZWF0ZSA6IHRoaXMudmVyYnMuZWRpdClcbiAgICB9LFxuXG4gICAgZGF0YSgpIHtcbiAgICAgIC8vIFJldHVybiBkaWZmZXJlbnQgZGF0YSBcImNvbnRhaW5lcnNcIiBiYXNlZCBvbiBkaWZmZXJlbnQgc2NlbmFyaW9zOlxuICAgICAgLy8gMS4gY3JlYXRlZERhdGEsIGlmIHdlJ3JlIGluIGEgZm9ybSBmb3IgYSBuZXdseSBjcmVhdGVkIG9iamVjdC5cbiAgICAgIC8vIDIuIGxvYWRlZERhdGEsIGlmIHRoZSBmb3JtIGl0c2VsZiBpcyB0aGUgcm9vdCBvZiB0aGUgZGF0YSAoZS5nLiB3aGVuXG4gICAgICAvLyAgICBkaXJlY3RseSBsb2FkaW5nIGFuIGVkaXRpbmcgcm9vdCkuXG4gICAgICAvLyAzLiBUaGUgZGF0YSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50LCB3aGljaCBpdHNlbGYgbWF5IGJlIGVpdGhlciBhXG4gICAgICAvLyAgICB2aWV3IHRoYXQgbG9hZGVkIHRoZSBkYXRhLCBvciBhIGZvcm0gdGhhdCBlaXRoZXIgbG9hZGVkIHRoZSBkYXRhLCBvclxuICAgICAgLy8gICAgYWxzbyBpbmhlcml0ZWQgaXQgZnJvbSBpdHMgcGFyZW50LiBOb3RlIHRoYXQgd2UgdXNlIGEgY2xvbmUgb2YgaXQsXG4gICAgICAvLyAgICBzbywgZGF0YSBjaGFuZ2VzIGFyZW4ndCBhcHBsaWVkIHVudGlsIHNldFNvdXJjZURhdGEoKSBpcyBjYWxsZWQuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVkRGF0YSB8fCB0aGlzLmxvYWRlZERhdGEgfHwgdGhpcy5pbmhlcml0ZWREYXRhIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5kYXRhQ29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhKCkge1xuICAgICAgLy8gUG9zc2libGUgcGFyZW50cyBhcmUgRGl0b0Zvcm0gZm9yIGZvcm1zLCBvciBEaXRvVmlldyBmb3Igcm9vdCBsaXN0cy5cbiAgICAgIC8vIEJvdGggaGF2ZSBhIGRhdGEgcHJvcGVydHkgd2hpY2ggYWJzdHJhY3RzIGF3YXkgbG9hZGluZyBhbmQgaW5oZXJpdGluZ1xuICAgICAgLy8gb2YgZGF0YS5cbiAgICAgIC8vIEZvcm1zIHRoYXQgYXJlIGFib3V0IHRvIGJlIGRlc3Ryb3llZCBkdWUgdG8gbmF2aWdhdGlvbiBsb29zZSB0aGVpclxuICAgICAgLy8gcm91dGUtcmVjb3JkLCBidXQgbWlnaHQgc3RpbGwgdHJpZ2dlciB0aGlzIGdldHRlci4gRmlsdGVyIHRob3NlIG91dC5cbiAgICAgIGxldCBkYXRhID0gdGhpcy5yb3V0ZVJlY29yZCA/IHRoaXMucGFyZW50Um91dGVDb21wb25lbnQuZGF0YSA6IG51bGxcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgZGF0YSBieSBzcGxpdHRpbmcgdGhlIGRhdGFQYXRoLCBpdGVyYXRlIHRocm91Z2ggdGhlXG4gICAgICAgIC8vIGFjdHVhbCBkYXRhIGFuZCBsb29rIG5lc3QgY2hpbGQtZGF0YSB1cC5cbiAgICAgICAgY29uc3QgZGF0YVBhcnRzID0gcGFyc2VEYXRhUGF0aChcbiAgICAgICAgICB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50KVxuICAgICAgICApXG4gICAgICAgIC8vIENvbXBhcmUgZGF0YVBhcnRzIGFnYWluc3QgbWF0Y2hlZCByb3V0ZVBhdGggcGFydHMsIHRvIGlkZW50aWZ5IHRob3NlXG4gICAgICAgIC8vIHBhcnRzIHRoYXQgbmVlZCB0byBiZSB0cmVhdGVkIGxpa2UgaWRzIGFuZCBtYXBwZWQgdG8gaW5kaWNlcyBpbiBkYXRhLlxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnJvdXRlUmVjb3JkLnBhdGguc3BsaXQoJy8nKVxuICAgICAgICBjb25zdCByb3V0ZVBhcnRzID0gcGF0aFBhcnRzLnNsaWNlKHBhdGhQYXJ0cy5sZW5ndGggLSBkYXRhUGFydHMubGVuZ3RoKVxuICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBudWxsXG4gICAgICAgIGNvbnN0IGxhc3REYXRhUGFydCA9IGRhdGFQYXJ0c1tkYXRhUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKSAmJiBsYXN0RGF0YVBhcnQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvYmplY3Qgc291cmNlIGFuZCBhcmUgY3JlYXRpbmcsIHRoZSBkYXRhUGF0aCBuZWVkcyB0b1xuICAgICAgICAgIC8vIGJlIHNob3J0ZW5lZCBieSB0aGUgJ2NyZWF0ZScgZW50cnkuIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcywgYXMgdGhlcmUgdGhlIHBhcmFtZXRlciBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGl0ZW0gaWQuXG4gICAgICAgICAgZGF0YVBhcnRzLmxlbmd0aC0tXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkYXRhUGFydHMubGVuZ3RoOyBpIDwgbCAmJiBkYXRhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRhUGFydCA9IGRhdGFQYXJ0c1tpXVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gOmlkIHBhcnQsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdpdGggZ2l2ZW4gaWQuXG4gICAgICAgICAgY29uc3Qga2V5ID0gL146aWQvLnRlc3Qocm91dGVQYXJ0c1tpXSlcbiAgICAgICAgICAgID8gZGF0YVBhcnQgPT09ICdjcmVhdGUnXG4gICAgICAgICAgICAgID8gbnVsbCAvLyBUaGVyZSdzIG5vIGluZGV4IGZvciBlbnRyaWVzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRJdGVtSWRJbmRleCh0aGlzLnNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhcnQpXG4gICAgICAgICAgICA6IGRhdGFQYXJ0XG4gICAgICAgICAgLy8gU2tpcCB0aGUgZmluYWwgbG9va3VwIGJ1dCByZW1lbWJlciBgc291cmNlS2V5YCwgYXMgd2Ugd2FudCB0aGVcbiAgICAgICAgICAvLyBwYXJlbnQgZGF0YSBzbyB3ZSBjYW4gcmVwbGFjZSB0aGUgZW50cnkgYXQgYHNvdXJjZUtleWAgb24gaXQuXG4gICAgICAgICAgaWYgKGkgPT09IGwgLSAxKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBrZXlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGFba2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgaW5oZXJpdGVkRGF0YSgpIHtcbiAgICAgIC8vIERhdGEgaW5oZXJpdGVkIGZyb20gcGFyZW50LCBhbmQgY2xvbmVkIHRvIHByb3RlY3QgYWdhaW5zdCByZWFjdGl2ZVxuICAgICAgLy8gY2hhbmdlcyB1bnRpbCBjaGFuZ2VzIGFyZSBhcHBsaWVkIHRocm91Z2ggc2V0U291cmNlRGF0YSgpLCB1bmxlc3NcbiAgICAgIC8vIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCBpbiB3aGljaCBjYXNlIGRhdGEgaXMgbXV0YXRlZCBkaXJlY3RseS5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICB0aGlzLmNsb25lZERhdGEgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLnNvdXJjZURhdGEgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV1cbiAgICAgICAgaWYgKCF0aGlzLmlzTXV0YXRpbmcpIHtcbiAgICAgICAgICAvLyBVc2UgYSB0cmljayB0byBzdG9yZSBjbG9uZWQgaW5oZXJpdGVkIGRhdGEgaW4gY2xvbmVkRGF0YSwgdG8gbWFrZVxuICAgICAgICAgIC8vIGl0IHJlYWN0aXZlIGFuZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY2xvbmVkIG11bHRpcGxlIHRpbWVzLlxuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gZGF0YSA9IGNsb25lKGRhdGEpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRhdGEgPT09IG51bGwgJiZcbiAgICAgICAgICAhdGhpcy5pc0NyZWF0aW5nICYmXG4gICAgICAgICAgaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIElmIGRhdGEgb2YgYW4gb2JqZWN0IHNvdXJjZSBpcyBudWxsLCByZWRpcmVjdCB0byBpdHMgY3JlYXRlIHJvdXRlLlxuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoOiBgJHt0aGlzLnBhdGh9L2NyZWF0ZWAgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2xvbmVkRGF0YVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGl0ZW1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB7IGV4dGVuZGVkOiB0cnVlIH0pXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlOiB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMzM5MyNpc3N1ZWNvbW1lbnQtMTE1ODQ3MDE0OVxuICAgICAgZmx1c2g6ICdwb3N0JyxcbiAgICAgIGhhbmRsZXIodG8sIGZyb20pIHtcbiAgICAgICAgLy8gUmVsb2FkIGZvcm0gZGF0YSB3aGVuIG5hdmlnYXRpbmcgdG8gYSBkaWZmZXJlbnQgZW50aXR5IGluIHNhbWUgZm9ybS5cbiAgICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLm1ldGE/LnBhcmFtXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJhbSAmJlxuICAgICAgICAgIHRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICAgLy8gVE9ETzogU2VlIGlmIHdlIGNhbiByZW1vdmUgdGhpcyBkdWUgdG8gYGZsdXNoOiAncG9zdCdgLlxuICAgICAgICAgIGZyb20ubWF0Y2hlZFswXS5wYXRoID09PSB0by5tYXRjaGVkWzBdLnBhdGggJiYgLy8gU3RheWluZyBvbiBzYW1lIGZvcm1cbiAgICAgICAgICBmcm9tLnBhcmFtc1twYXJhbV0gIT09ICdjcmVhdGUnICYmIC8vIEJ1dCBoYXZlbid0IGJlZW4gY3JlYXRpbmdcbiAgICAgICAgICB0by5wYXJhbXNbcGFyYW1dICE9PSBmcm9tLnBhcmFtc1twYXJhbV0gLy8gR29pbmcgdG8gYSBkaWZmZXJlbnQgZW50aXR5XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubG9hZERhdGEodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhOiAnY2xlYXJDbG9uZWREYXRhJyxcbiAgICAvLyBOZWVkZWQgZm9yIHRoZSAnY3JlYXRlJyByZWRpcmVjdCBpbiBgaW5oZXJpdGVkRGF0YSgpYCB0byB3b3JrOlxuICAgIGNyZWF0ZTogJ3NldHVwRGF0YSdcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH0sXG5cbiAgICBnZXREYXRhUGF0aEZyb20ocm91dGVDb21wb25lbnQpIHtcbiAgICAgIC8vIEdldCB0aGUgZGF0YSBwYXRoIGJ5IGRlbm9ybWFsaXplUGF0aCB0aGUgcmVsYXRpdmUgcm91dGUgcGF0aFxuICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbm9ybWFsaXplUGF0aChcbiAgICAgICAgdGhpcy5wYXRoXG4gICAgICAgICAgLy8gRGl0b1ZpZXdzIGhhdmUgbmVzdGVkIHJvdXRlcywgc28gZG9uJ3QgcmVtb3ZlIHRoZWlyIHBhdGguXG4gICAgICAgICAgLnNsaWNlKChyb3V0ZUNvbXBvbmVudC5pc1ZpZXcgPyAwIDogcm91dGVDb21wb25lbnQucGF0aC5sZW5ndGgpICsgMSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uZ2V0UmVzb3VyY2UoKVxuICAgIGdldFJlc291cmNlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gUmVzb3VyY2VNaXhpbi5tZXRob2RzLmdldFJlc291cmNlLmNhbGwodGhpcywgb3B0aW9ucylcbiAgICAgIHJldHVybiBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLml0ZW1JZCwgcmVzb3VyY2UpIHx8IHJlc291cmNlXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldHVwRGF0YSgpXG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhIHx8PSB0aGlzLmNyZWF0ZURhdGEodGhpcy5zY2hlbWEsIHRoaXMuY3JlYXRpb25UeXBlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0U291cmNlRGF0YShkYXRhKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2VEYXRhICYmIHRoaXMuc291cmNlS2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgbWFpblNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgICB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldID1cbiAgICAgICAgICBtYWluU2NoZW1hQ29tcG9uZW50LmZpbHRlckRhdGEoZGF0YSkubG9jYWxEYXRhXG4gICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQub25DaGFuZ2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFkZFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICA/IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgICA6ICEhdGhpcy5zb3VyY2VEYXRhPy5wdXNoKGRhdGEpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5zZXREYXRhKG51bGwpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gc2V0RGF0YSgpIGlzIGNhbGxlZCBhZnRlciBzdWJtaXQgd2hlbiBkYXRhIGhhcyBjaGFuZ2VkLlxuICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgLy8gRm9yIGNvbXBvbmVudHMgd2l0aCB0cmFuc2llbnQgZGF0YSwgbW9kaWZ5IHRoaXMuc291cmNlRGF0YS5cbiAgICAgICAgdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gbnVsbFxuICAgICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyQ2xvbmVkRGF0YSh0bywgZnJvbSkge1xuICAgICAgLy8gT25seSBjbGVhciBpZiB0aGUgd2F0Y2hlZCBzb3VyY2VEYXRhIGl0c2VsZiBjaGFuZ2VzIGluIHRoZSBmb3JtLlxuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbG9zZSgpXG4gICAgfSxcblxuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUodGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudC5wYXRoKVxuICAgIH0sXG5cbiAgICBnZXRTdWJtaXRWZXJiKHByZXNlbnQgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gcHJlc2VudFxuICAgICAgICAgID8gJ2NyZWF0ZSdcbiAgICAgICAgICA6ICdjcmVhdGVkJ1xuICAgICAgICA6IHByZXNlbnRcbiAgICAgICAgICA/ICdzdWJtaXQnXG4gICAgICAgICAgOiAnc3VibWl0dGVkJ1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uLCB7IHZhbGlkYXRlID0gdHJ1ZSwgY2xvc2VGb3JtID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmVyYiA9IHByZXNlbnQgPT4gdGhpcy52ZXJic1t0aGlzLmdldFN1Ym1pdFZlcmIocHJlc2VudCldXG5cbiAgICAgIC8vIEFsbG93IGJ1dHRvbnMgdG8gb3ZlcnJpZGUgYm90aCBtZXRob2QgYW5kIHJlc291cmNlIHBhdGggdG8gc3VibWl0IHRvOlxuICAgICAgbGV0IHsgbWV0aG9kIH0gPSB0aGlzXG4gICAgICBsZXQgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKHsgbWV0aG9kIH0pXG4gICAgICBjb25zdCBidXR0b25SZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiByZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIHJlc291cmNlID0gYnV0dG9uUmVzb3VyY2UgfHwgcmVzb3VyY2VcbiAgICAgIG1ldGhvZCA9IHJlc291cmNlPy5tZXRob2QgfHwgbWV0aG9kXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgIGxldCBzdWNjZXNzXG4gICAgICBpZiAoIWJ1dHRvblJlc291cmNlICYmIHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+XG4gICAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgID8gYEl0ZW0gJHtjYXBpdGFsaXplKHZlcmIpfWBcbiAgICAgICAgICAgICAgICA6IGBDaGFuZ2UgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICAgID8gYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgICAgICAgIDogYENoYW5nZXMgdG8gJHt0aGlzLml0ZW1MYWJlbH0gd2VyZSAke3ZlcmJ9LmAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIHNldERhdGE6IHRydWUsXG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT5cbiAgICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICB0aXRsZTogYFN1Y2Nlc3NmdWxseSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0ke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgICAgaWYgKGNsb3NlRm9ybSB8fCBidXR0b24uY2xvc2VGb3JtKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgICAgLy8gUmVkaXJlY3QgdG8gdGhlIGZvcm0gZWRpdGluZyB0aGUgbmV3bHkgY3JlYXRlZCBpdGVtOlxuICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSlcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7XG4gICAgICAgICAgICBwYXRoOiByZXNvbHZlUGF0aChgJHt0aGlzLnBhdGh9Ly4uLyR7aWR9YCksXG4gICAgICAgICAgICAvLyBQcmVzZXJ2ZSBoYXNoIGZvciB0YWJzOlxuICAgICAgICAgICAgaGFzaDogdGhpcy4kcm91dGUuaGFzaFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFRyYW5zaWVudChidXR0b24sIF9yZXNvdXJjZSwgX21ldGhvZCwgZGF0YSwge1xuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MsXG4gICAgICBub3RpZnlFcnJvclxuICAgIH0pIHtcbiAgICAgIC8vIEhhbmRsZSB0aGUgZGVmYXVsdCBcInN1Ym1pdHRpbmdcIiBvZiB0cmFuc2llbnQsIG5lc3RlZCBkYXRhOlxuICAgICAgY29uc3Qgc3VjY2VzcyA9IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHRoaXMuYWRkU291cmNlRGF0YShkYXRhKVxuICAgICAgICA6IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnQ291bGQgbm90IHN1Ym1pdCB0cmFuc2llbnQgaXRlbSdcbiAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeUVycm9yLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBVc2UgYSA8ZGl2PiBmb3IgbmVzdGVkIGZvcm1zLCBhcyB3ZSBzaG91bGRuJ3QgbmVzdCBhY3R1YWwgPGZvcm0+IHRhZ3MuXG5kaXYoXG4gIHYtaWY9XCJuZXN0ZWRcIlxuKVxuICBzbG90XG5mb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgdi1lbHNlXG4gIEBzdWJtaXQucHJldmVudFxuKVxuICBzbG90XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRm9ybUlubmVyJywge1xuICBwcm9wczoge1xuICAgIG5lc3RlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvRm9ybSBmcm9tICcuL0RpdG9Gb3JtLnZ1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRm9ybU5lc3RlZCcsIHtcbiAgZXh0ZW5kczogRGl0b0Zvcm1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1mb3JtLW5lc3RlZCB7XG4gIC8vIE5vIHNjcm9sbGluZyBpbnNpZGUgbmVzdGVkIGZvcm1zLCBhbmQgcHJldmVudCBvcGVuIC5tdWx0aXNlbGVjdCBmcm9tXG4gIC8vIGJlaW5nIGNyb3BwZWQuXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1lcnJvcnMoXG4gIHYtaWY9XCJlcnJvcnNcIlxuKVxuICB1bFxuICAgIGxpKFxuICAgICAgdi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIlxuICAgICkge3sgZXJyb3IgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgdGlwcHkgZnJvbSAndGlwcHkuanMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgbWFya1JhdyB9IGZyb20gJ3Z1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRXJyb3JzJywge1xuICBwcm9wczoge1xuICAgIGVycm9yczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGlwOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZXJyb3JzKCkge1xuICAgICAgdGhpcy4kbmV4dFRpY2sodGhpcy51cGRhdGVFcnJvcnMpXG4gICAgfVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLnRpcD8uZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZUVycm9ycygpIHtcbiAgICAgIGxldCB7IHRpcCB9ID0gdGhpc1xuICAgICAgdGlwPy5oaWRlKClcbiAgICAgIGlmICh0aGlzLmVycm9ycykge1xuICAgICAgICB0aXAgPSB0aGlzLnRpcCA/Pz0gbWFya1Jhdyh0aXBweSh0aGlzLiRlbC5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKSkpXG4gICAgICAgIHRpcC5zZXRQcm9wcyh7XG4gICAgICAgICAgY29udGVudDogdGhpcy5lcnJvcnMuam9pbignXFxuJyksXG4gICAgICAgICAgdGhlbWU6ICdlcnJvcicsXG4gICAgICAgICAgdHJpZ2dlcjogJ21hbnVhbCcsXG4gICAgICAgICAgYXBwZW5kVG86ICdwYXJlbnQnLFxuICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbS1zdGFydCcsXG4gICAgICAgICAgYW5pbWF0aW9uOiAnc2hpZnQtYXdheS1zdWJ0bGUnLFxuICAgICAgICAgIHBvcHBlck9wdGlvbnM6IHtcbiAgICAgICAgICAgIG1vZGlmaWVyczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2ZsaXAnLFxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICAgIGhpZGVPbkNsaWNrOiBmYWxzZSxcbiAgICAgICAgICBvZmZzZXQ6IFszLCAzXSwgLy8gMS8yIGZvcm0tc3BhY2luZ1xuICAgICAgICAgIHpJbmRleDogMVxuICAgICAgICB9KVxuICAgICAgICB0aXAucG9wcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICgpID0+IHRpcC5oaWRlKCkpXG4gICAgICAgIHRpcC5zaG93KClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1lcnJvcnMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcblxuICB1bCB7XG4gICAgY29sb3I6ICRjb2xvci1lcnJvcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zY29wZXNcbiAgUm91dGVyTGluayhcbiAgICB2LWZvcj1cIihzY29wZSwga2V5KSBpbiBzY29wZXNcIlxuICAgIDprZXk9XCJrZXlcIlxuICAgIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgOnRvPVwiZ2V0U2NvcGVMaW5rKHNjb3BlKVwiXG4gICAgY3VzdG9tXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VsZWN0ZWQnOiBzY29wZS5uYW1lID09PSBxdWVyeS5zY29wZSB9XCJcbiAgICAgIDp0aXRsZT1cInNjb3BlLmhpbnQgfHwgZ2V0TGFiZWwoc2NvcGUpXCJcbiAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICApIHt7IGdldExhYmVsKHNjb3BlKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1Njb3BlcycsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NvcGVzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRTY29wZUxpbmsoc2NvcGUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0geyAuLi50aGlzLnF1ZXJ5LCBzY29wZTogc2NvcGUubmFtZSB9XG4gICAgICBpZiAocXVlcnkucGFnZSkge1xuICAgICAgICBxdWVyeS5wYWdlID0gMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHF1ZXJ5KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNjb3BlcyB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgLy8gQSBiaXQgbW9yZSB0aGFuIHRoZSB3aWR0aCBvZiBlbGxpcHNpcywgdG8gcHJldmVudCByZXBsYWNpbmcgc2hvcnQgd29yZHNcbiAgICAvLyB3aXRoIGVsbGlwc2lzLlxuICAgIG1pbi13aWR0aDogM2VtO1xuICAgIGZsZXg6IDAgMSBhdXRvO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxZW07XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nLWxlZnQ6IDFlbTtcbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDFlbTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxZW07XG4gICAgfVxuXG4gICAgJiArIC5kaXRvLWJ1dHRvbiB7XG4gICAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgICB9IC8vIERvbid0IGNvdmVyIHRoZSBmb2N1c2VkIGJvcmRlciBvZiBidXR0b25zOlxuICAgICY6Zm9jdXMge1xuICAgICAgei1pbmRleDogMTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuUGFnaW5hdGlvbihcbiAgdi1tb2RlbDpwYWdlPVwicGFnZVwiXG4gIDpwYWdlU2l6ZT1cImxpbWl0XCJcbiAgOnRvdGFsPVwidG90YWxcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IFBhZ2luYXRpb24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhZ2luYXRpb24nLCB7XG4gIGNvbXBvbmVudHM6IHsgUGFnaW5hdGlvbiB9LFxuXG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxpbWl0OiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhZ2U6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICgrdGhpcy5xdWVyeS5wYWdlIHx8IDApICsgMVxuICAgICAgfSxcblxuICAgICAgc2V0KHBhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZSAhPT0gcGFnZSkge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgICAgdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICAgICAgICBwYWdlOiBwYWdlIC0gMVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzRHJhZ2dpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREcmFnZ2FibGVPcHRpb25zKGZvcmNlRmFsbGJhY2sgPSBmYWxzZSkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tZHJhZ2dhYmxlJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGhhbmRsZTogJy5kaXRvLWJ1dHRvbi1kcmFnJyxcbiAgICAgICAgZHJhZ0NsYXNzOiBgJHtwcmVmaXh9X19kcmFnYCxcbiAgICAgICAgY2hvc2VuQ2xhc3M6IGAke3ByZWZpeH1fX2Nob3NlbmAsXG4gICAgICAgIGdob3N0Q2xhc3M6IGAke3ByZWZpeH1fX2dob3N0YCxcbiAgICAgICAgZmFsbGJhY2tDbGFzczogYCR7cHJlZml4fV9fZmFsbGJhY2tgLFxuICAgICAgICBmb3JjZUZhbGxiYWNrLFxuICAgICAgICBvblN0YXJ0OiB0aGlzLm9uU3RhcnREcmFnLFxuICAgICAgICBvbkVuZDogdGhpcy5vbkVuZERyYWdcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25TdGFydERyYWcoKSB7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlXG4gICAgfSxcblxuICAgIG9uRW5kRHJhZyh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSB7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgaWYgKG9sZEluZGV4ICE9PSBuZXdJbmRleCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0LCBwYWdpbmF0aW9uUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHsgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICAgIC8vIFJlb3JkZXIgdGhlIGNoYW5nZWQgZW50cmllcyBieSB0aGVpciBvcmRlciBrZXksIHRha2luZyBwYWdpbmF0aW9uXG4gICAgICAgIC8vIG9mZnNldHMgaW50byBhY2NvdW50OlxuICAgICAgICBjb25zdCBvZmZzZXQgPSBwYWdpbmF0aW9uUmFuZ2U/LlswXSB8fCAwXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxpc3RbaV1bb3JkZXJLZXldID0gaSArIG9mZnNldFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyZWUtaXRlbShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1kcmFnZ2luZyc6IGlzRHJhZ2dpbmcsXG4gICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gIH1gXG4gIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4gIDpkYXRhLXBhdGg9XCJwYXRoXCJcbilcbiAgLmRpdG8tdHJlZS1oZWFkZXIoXG4gICAgdi1pZj1cImxhYmVsXCJcbiAgKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJvcGVuZWQgPSAhb3BlbmVkXCJcbiAgICApXG4gICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IG9wZW5lZCB9XCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwoXG4gICAgICAgIHYtaHRtbD1cImxhYmVsXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtaW5mbyhcbiAgICAgICAgdi1pZj1cImRldGFpbHNcIlxuICAgICAgKSB7eyBkZXRhaWxzIH19XG4gICAgLmRpdG8tdHJlZS1sZWFmKFxuICAgICAgdi1lbHNlXG4gICAgKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbChcbiAgICAgICAgdi1odG1sPVwibGFiZWxcIlxuICAgICAgKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKFxuICAgICAgdi1pZj1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgKVxuICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gIClcbiAgICB0cihcbiAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgKVxuICAgICAgdGRcbiAgICAgICAgRGl0b0xhYmVsKFxuICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICApXG4gICAgICBEaXRvVGFibGVDZWxsKFxuICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgRGl0b0RyYWdnYWJsZShcbiAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgOm9wdGlvbnM9XCJnZXREcmFnZ2FibGVPcHRpb25zKHRydWUpXCJcbiAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgIDptb2RlbFZhbHVlPVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgIEB1cGRhdGU6bW9kZWxWYWx1ZT1cInZhbHVlID0+IChjaGlsZHJlbkxpc3QgPSB2YWx1ZSlcIlxuICApXG4gICAgRGl0b1RyZWVJdGVtKFxuICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGNoaWxkcmVuSXRlbXNcIlxuICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImdldEl0ZW1EYXRhUGF0aChjaGlsZHJlblNjaGVtYSwgaW5kZXgpXCJcbiAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgIDpvcGVuPVwiaXRlbS5vcGVuXCJcbiAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEsIHsgaW5kZXggfSlcIlxuICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICApXG4gICAgLy8tIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAvLy0gcGFzcyBgYXNPYmplY3Q6IHRydWVgIGluIHRoZSBgZ2V0SXRlbUxhYmVsKClgIGNhbGwgYWJvdmUuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbidcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgaGFzRm9ybVNjaGVtYSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVHJlZUl0ZW0nLCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgU29ydGFibGVNaXhpbl0sXG4gIGluamVjdDogWydjb250YWluZXInXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW0FycmF5LCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgb3BlbjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFjdGl2ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxldmVsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlbmVkOiB0aGlzLm9wZW4gfHwgdGhpcy5zY2hlbWEub3BlblxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIubWV0YVxuICAgIH0sXG5cbiAgICBzdG9yZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5zdG9yZVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5kaXNhYmxlZFxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnByb3BlcnRpZXMpXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFNob3VsZCB0aGlzIGJlIG5hbWVkIGBzb3VyY2VTY2hlbWFgIGluc3RlYWQ/IFVzZSBTb3VyY2VNaXhpbj9cbiAgICBjaGlsZHJlblNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5jaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkxpc3Q6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyBuYW1lLCBvcmRlcktleSB9ID0gdGhpcy5jaGlsZHJlblNjaGVtYSA/PyB7fVxuICAgICAgICBjb25zdCB2YWx1ZSA9IG5hbWUgJiYgdGhpcy5kYXRhW25hbWVdXG4gICAgICAgIC8vIEluIG9yZGVyIHRvIGZpeCByZWFjdGl2aXR5IGZvciBgdXBkYXRlT3JkZXIoKWAgYXQgcm9vdCBsZXZlbCBvZiB0cmVlXG4gICAgICAgIC8vIHZpZXdzLCB3ZSBuZWVkIHRvIGFjY2VzcyBhbGwgb3JkZXIga2V5cyBvbmNlLCBpbiBvcmRlciB0byB0cmFjayB0aGVtXG4gICAgICAgIC8vIGZvciByZWFjdGl2aXR5LlxuICAgICAgICAvLyBUT0RPOiBGaW5kIGEgcHJvcGVyIGZpeC5cbiAgICAgICAgdmFsdWU/Lm1hcChjaGlsZCA9PiBjaGlsZFtvcmRlcktleV0pXG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNoaWxkcmVuU2NoZW1hPy5uYW1lXG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICAgIHRoaXMuZGF0YVtuYW1lXSA9IHRoaXMudXBkYXRlT3JkZXIoXG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuU2NoZW1hLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5EcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoID4gMSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdkcmFnZ2FibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICBzY2hlbWE6IHRoaXMuY2hpbGRyZW5TY2hlbWFcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbnVtQ2hpbGRyZW4oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bVByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzPy5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1FbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMubnVtUHJvcGVydGllcyArIHRoaXMubnVtQ2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5JdGVtcygpIHtcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdCB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hICYmIGNoaWxkcmVuTGlzdCkge1xuICAgICAgICBjb25zdCB7IGVkaXRQYXRoIH0gPSB0aGlzLmNvbnRhaW5lclxuICAgICAgICBjb25zdCBjaGlsZHJlbk9wZW4gPSAhdGhpcy5wYXRoICYmIGNoaWxkcmVuU2NoZW1hLm9wZW5cbiAgICAgICAgLy8gQnVpbGQgYSBjaGlsZHJlbiBsaXN0IHdpdGggY2hpbGQgbWV0YSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRlbXBsYXRlLlxuICAgICAgICByZXR1cm4gY2hpbGRyZW5MaXN0Lm1hcCgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gKFxuICAgICAgICAgICAgY2hpbGRyZW5TY2hlbWEucGF0aCAmJlxuICAgICAgICAgICAgYCR7dGhpcy5wYXRofS8ke2NoaWxkcmVuU2NoZW1hLnBhdGh9LyR7aW5kZXh9YFxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCBvcGVuID0gKFxuICAgICAgICAgICAgY2hpbGRyZW5PcGVuIHx8XG4gICAgICAgICAgICAvLyBPbmx5IGNvdW50IGFzIFwiaW4gZWRpdCBwYXRoXCIgd2hlbiBpdCdzIG5vdCB0aGUgZnVsbCBlZGl0IHBhdGguXG4gICAgICAgICAgICBlZGl0UGF0aC5zdGFydHNXaXRoKHBhdGgpICYmIHBhdGgubGVuZ3RoIDwgZWRpdFBhdGgubGVuZ3RoXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IGVkaXRQYXRoID09PSBwYXRoXG4gICAgICAgICAgcmV0dXJuIHsgZGF0YSwgcGF0aCwgb3BlbiwgYWN0aXZlIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXVxuICAgIH0sXG5cbiAgICBkZXRhaWxzKCkge1xuICAgICAgY29uc3QgeyBudW1DaGlsZHJlbiB9ID0gdGhpc1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbnVtQ2hpbGRyZW4gJiZcbiAgICAgICAgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgICAgbnVtQ2hpbGRyZW4gPT09IDEgPyAnaXRlbScgOiAnaXRlbXMnXG4gICAgICAgIH1gXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZHJhZ2dhYmxlIHx8IHRoaXMuZWRpdGFibGUgfHwgdGhpcy5kZWxldGFibGVcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU3VwcG9ydCBjcmVhdGFibGUhXG4gICAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIGNyZWF0YWJsZSwgZWRpdGFibGUgYW5kIGRlbGV0YWJsZSBvdmVycmlkZXMgb24gdGhlXG4gICAgLy8gYXNzb2NpYXRlZCBmb3JtcywganVzdCBsaWtlIGluIGBUeXBlTGlzdGAgYW5kIGBUeXBlT2JqZWN0YCwgdGhyb3VnaFxuICAgIC8vIGBEaXRvRWRpdEJ1dHRvbnNgLiBJdCB3b3VsZCBiZSBiZXN0IHRvIHVzZSBgRGl0b0VkaXRCdXR0b25zYCBoZXJlIHRvby5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgcHJvcGVydHkubmFtZSlcbiAgICB9LFxuXG4gICAgZWRpdFBhdGgocGF0aCkge1xuICAgICAgLy8gQWxsIHdlIGdvdCB0byBkbyBpcyBwdXNoIHRoZSByaWdodCBlZGl0IHBhdGggdG8gdGhlIHJvdXRlciwgdGhlIHJlc3RcbiAgICAgIC8vIGlzIGhhbmRsZWQgYnkgb3VyIHJvdXRlcywgYWxsb3dpbmcgcmVsb2FkcyBhcyB3ZWxsLlxuICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICBwYXRoOiBgJHt0aGlzLmNvbnRhaW5lci5wYXRofSR7cGF0aH1gLFxuICAgICAgICAvLyBQcmVzZXJ2ZSBjdXJyZW50IHF1ZXJ5XG4gICAgICAgIHF1ZXJ5OiB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25FZGl0KCkge1xuICAgICAgdGhpcy5lZGl0UGF0aCh0aGlzLnBhdGgpXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlXG4gICAgb25FbmREcmFnKGV2ZW50KSB7XG4gICAgICBTb3J0YWJsZU1peGluLm1ldGhvZHMub25FbmREcmFnLmNhbGwodGhpcywgZXZlbnQpXG4gICAgICBjb25zdCB7IGl0ZW0gfSA9IGV2ZW50XG4gICAgICAvLyBQcmVzZXJ2ZSBhY3RpdmUgc3RhdGUgb2YgZWRpdGVkIHN1Yi1pdGVtcywgYnkgZWRpdGluZyB0aGVpciBuZXcgcGF0aC5cbiAgICAgIGlmIChpdGVtLmNsYXNzTGlzdC5jb250YWlucygnZGl0by1hY3RpdmUnKSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lZGl0UGF0aChldmVudC5pdGVtLmRhdGFzZXQucGF0aClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmVlLWl0ZW0ge1xuICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH07XG5cbiAgPiAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgPiAuZGl0by10cmVlLWJyYW5jaCxcbiAgICA+IC5kaXRvLXRyZWUtbGVhZiB7XG4gICAgICAvLyBVc2UgYC0tbGV2ZWxgIENTUyB2YXJpYWJsZSB0byBjYWxjdWxhdGVkIHRoZSBhY2N1bXVsYXRlZCBpbmRlbnRcbiAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgLy8gVGhpcyB3YXksIHdlIGNhbiBrZWVwIHRoZSAuZGl0by1hY3RpdmUgYXJlYSBjb3ZlciB0aGUgZnVsbCB3aWR0aDpcbiAgICAgIHBhZGRpbmctbGVmdDogY2FsYyh2YXIoLS1jaGV2cm9uLWluZGVudCkgKiAodmFyKC0tbGV2ZWwsIDEpIC0gMSkpO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXRyZWUtYnJhbmNoIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIH1cblxuICAuZGl0by10cmVlLWJyYW5jaCxcbiAgLmRpdG8tdHJlZS1sZWFmIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXg6IGF1dG87XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogMXB4IDA7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG4gIH1cblxuICAuZGl0by10cmVlLWxhYmVsLFxuICAuZGl0by10cmVlLWluZm8ge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAuZGl0by10cmVlLWluZm8ge1xuICAgIHBhZGRpbmctbGVmdDogMC4zNWVtO1xuICAgIGNvbG9yOiByZ2JhKCRjb2xvci1ibGFjaywgMC4yKTtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXJnaW46IDFweCAwIDFweCAxZW07XG4gIH1cblxuICAuZGl0by10cmVlLWhlYWRlcjpob3ZlciB7XG4gICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgfSAvLyBIaWRlIGJ1dHRvbnMgZHVyaW5nIGRyYWdnaW5nXG4gIH1cblxuICAmLmRpdG8tZHJhZ2dpbmcge1xuICAgIC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLmRpdG8tYWN0aXZlIHtcbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICBwYWRkaW5nOiAwICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcik7XG5cbiAgICAgID4gLmRpdG8tdHJlZS1icmFuY2gge1xuICAgICAgICA+IC5kaXRvLWNoZXZyb246OmJlZm9yZSB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA+ICogPiAuZGl0by10cmVlLWxhYmVsIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1wcm9wZXJ0aWVzIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tbGVmdDogJGNoZXZyb24taW5kZW50O1xuXG4gICAgPiB0ciB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gICAgfVxuXG4gICAgLmRpdG8tbGFiZWwge1xuICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICc6ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICB0clxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgKVxuICAgICAgdGgoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICBSb3V0ZXJMaW5rKFxuICAgICAgICAgIHYtaWY9XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICAgICAgOnRvPVwiZ2V0U29ydExpbmsoY29sdW1uKVwiXG4gICAgICAgICAgY3VzdG9tXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgICBzcGFuKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICApIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICB0aChcbiAgICAgIHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgICAgLy8tIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Nzc1xuICAgICAgc3BhblxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJsZUhlYWQnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbHVtbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGhhc0VkaXRCdXR0b25zOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvcnQoKSB7XG4gICAgICBjb25zdCBvcmRlciA9ICh0aGlzLnF1ZXJ5Lm9yZGVyIHx8ICcnKS5zcGxpdCgvXFxzKy8pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBvcmRlclswXSxcbiAgICAgICAgb3JkZXI6IG9yZGVyWzFdXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb2x1bW5DbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jb2x1bW4tJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0U29ydENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZVxuICAgICAgICA/IGBkaXRvLXNlbGVjdGVkIGRpdG8tb3JkZXItJHt0aGlzLnNvcnQub3JkZXJ9YFxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0U29ydExpbmsoY29sdW1uKSB7XG4gICAgICAvLyBUb2dnbGUgb3JkZXIgaWYgdGhlIHNhbWUgY29sdW1uIGlzIGNsaWNrZWQgYWdhaW4uXG4gICAgICBjb25zdCBvcmRlciA9XG4gICAgICAgIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZSAmJiB0aGlzLnNvcnQub3JkZXIgPT09ICdhc2MnXG4gICAgICAgICAgPyAnZGVzYydcbiAgICAgICAgICA6ICdhc2MnXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICBvcmRlcjogYCR7Y29sdW1uLm5hbWV9ICR7b3JkZXJ9YFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10YWJsZS1oZWFkIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgdHIge1xuICAgIHRoIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZywgc2VlIGJlbG93XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrOyAvLyBPdmVycmlkZSBkZWZhdWx0IGlubGluZS1mbGV4IHBvc2l0aW9uaW5nLlxuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICAgICAgICY6ZW1wdHk6OmFmdGVyIHtcbiAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgY29udGVudDogJ1xcMjAwYic7IC8vIHplcm8td2lkdGggc3BhY2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRkKFxuICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgOnN0eWxlPVwiY2VsbC5zdHlsZVwiXG4pXG4gIC8vLSBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjZWxsLmNvbXBvbmVudFwiXG4gICAgOmlzPVwiY2VsbC5jb21wb25lbnRcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuICBzcGFuKFxuICAgIHYtZWxzZVxuICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBDb250ZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL0NvbnRleHRNaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJsZUNlbGwnLCB7XG4gIG1peGluczogW0NvbnRleHRNaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjZWxsOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckNlbGwoaXRlbSkge1xuICAgICAgY29uc3QgeyBuYW1lLCByZW5kZXIgfSA9IHRoaXMuY2VsbFxuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW25hbWVdXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbCh2YWx1ZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by11cGxvYWQtZmlsZVxuICAuZGl0by10aHVtYm5haWwoXG4gICAgdi1pZj1cInRodW1ibmFpbFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tdGh1bWJuYWlsLS0ke3RodW1ibmFpbH1gXCJcbiAgKVxuICAgIC5kaXRvLXRodW1ibmFpbF9faW5uZXJcbiAgICAgIGltZyhcbiAgICAgICAgdi1pZj1cInNvdXJjZVwiXG4gICAgICAgIDpzcmM9XCJzb3VyY2VcIlxuICAgICAgICBjcm9zc29yaWdpbj1cImFub255bW91c1wiXG4gICAgICApXG4gICAgICAuZGl0by10aHVtYm5haWxfX3R5cGUoXG4gICAgICAgIHYtZWxzZVxuICAgICAgKVxuICAgICAgICBzcGFuIHt7IHR5cGUgfX1cbiAgc3BhbiB7eyBmaWxlLm5hbWUgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9VcGxvYWRGaWxlJywge1xuICBwcm9wczoge1xuICAgIGZpbGU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRodW1ibmFpbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aHVtYm5haWxVcmw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRVcmw6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgVFlQRVNbdGhpcy5maWxlLnR5cGVdIHx8XG4gICAgICAgIHRoaXMuZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCkudG9VcHBlckNhc2UoKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBzb3VyY2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRVcmwgfHwgdGhpcy50aHVtYm5haWxVcmxcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAnZmlsZS51cGxvYWQuZmlsZSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXIoZmlsZSkge1xuICAgICAgICBpZiAodGhpcy50aHVtYm5haWwgJiYgZmlsZT8udHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRVcmwgPSByZWFkZXIucmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGxvYWRVcmwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IFRZUEVTID0ge1xuICAndGV4dC9wbGFpbic6ICdUWFQnLFxuICAndGV4dC9odG1sJzogJ0hUTUwnLFxuICAndGV4dC9jc3MnOiAnQ1NTJyxcbiAgJ3RleHQvamF2YXNjcmlwdCc6ICdKUycsXG4gICdpbWFnZS9qcGVnJzogJ0pQRycsXG4gICdpbWFnZS9wbmcnOiAnUE5HJyxcbiAgJ2ltYWdlL2dpZic6ICdHSUYnLFxuICAnaW1hZ2Uvc3ZnK3htbCc6ICdTVkcnLFxuICAnbW92aWUvbXA0JzogJ01QNCcsXG4gICdhdWRpby9tcGVnJzogJ01QMycsXG4gICdhcHBsaWNhdGlvbi9qc29uJzogJ0pTT04nLFxuICAnYXBwbGljYXRpb24veG1sJzogJ1hNTCcsXG4gICdhcHBsaWNhdGlvbi9wZGYnOiAnUERGJyxcbiAgJ2FwcGxpY2F0aW9uL3ppcCc6ICdaSVAnXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOm1hdGgnO1xuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdXBsb2FkLWZpbGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG59XG5cbi5kaXRvLXRodW1ibmFpbCB7XG4gICRzZWxmOiAmO1xuXG4gIC8vIFNtYWxsIHNpemUgYnkgZGVmYXVsdFxuICAtLW1heC1zaXplOiAjezEgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgLS1jb3JuZXItc2l6ZTogY2FsYyh2YXIoLS1tYXgtc2l6ZSkgLyA1KTtcbiAgLS1zaGFkb3ctc2l6ZTogMXB4O1xuICAtLW1pbi1zaXplOiBjYWxjKDIgKiB2YXIoLS1jb3JuZXItc2l6ZSkpO1xuICAtLW1hcmdpbjogMGVtO1xuICAtLWRyb3Atc2hhZG93OiBkcm9wLXNoYWRvdyhcbiAgICAwIGNhbGModmFyKC0tc2hhZG93LXNpemUpICogMC43NSkgdmFyKC0tc2hhZG93LXNpemUpICN7cmdiYShcbiAgICAgICAgJGNvbG9yLWJsYWNrLFxuICAgICAgICAwLjRcbiAgICAgICl9XG4gICk7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW46IHZhcigtLW1hcmdpbik7XG4gIG1hcmdpbi1yaWdodDogMC41ZW07XG4gIGZpbHRlcjogdmFyKC0tZHJvcC1zaGFkb3cpO1xuXG4gICYtLXNtYWxsIHtcbiAgICAtLW1heC1zaXplOiAjezEgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgICAtLW1hcmdpbjogMGVtO1xuICAgIC0tc2hhZG93LXNpemU6IDFweDtcbiAgfVxuXG4gICYtLW1lZGl1bSB7XG4gICAgLS1tYXgtc2l6ZTogI3syICogJGlucHV0LWhlaWdodH07XG4gICAgLS1tYXJnaW46IDAuMjVlbTtcbiAgICAtLXNoYWRvdy1zaXplOiAxLjVweDtcbiAgfVxuXG4gICYtLWxhcmdlIHtcbiAgICAtLW1heC1zaXplOiAjezQgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgICAtLW1hcmdpbjogMC41ZW07XG4gICAgLS1zaGFkb3ctc2l6ZTogMi41cHg7XG4gIH1cblxuICAmX19pbm5lciB7XG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICBjbGlwLXBhdGg6IHBvbHlnb24oXG4gICAgICAwIDAsXG4gICAgICBjYWxjKDEwMCUgLSB2YXIoLS1jb3JuZXItc2l6ZSkpIDAsXG4gICAgICAxMDAlIHZhcigtLWNvcm5lci1zaXplKSxcbiAgICAgIDEwMCUgMTAwJSxcbiAgICAgIDAgMTAwJVxuICAgICk7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgd2lkdGg6IHZhcigtLWNvcm5lci1zaXplKTtcbiAgICAgIGhlaWdodDogdmFyKC0tY29ybmVyLXNpemUpO1xuICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjZmZmZmZmLCAjZWVlZWVlIDQwJSwgI2RkZGRkZCA1MCUpO1xuICAgICAgZmlsdGVyOiB2YXIoLS1kcm9wLXNoYWRvdyk7XG4gICAgfVxuICB9XG5cbiAgJl9fdHlwZSB7XG4gICAgLS1mb250LXNpemU6IHZhcigtLWNvcm5lci1zaXplKTtcblxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtaW4td2lkdGg6IHZhcigtLW1pbi1zaXplKTtcbiAgICBtaW4taGVpZ2h0OiB2YXIoLS1tYXgtc2l6ZSk7XG4gICAgYXNwZWN0LXJhdGlvOiAzIC8gNDtcblxuICAgIHNwYW4ge1xuICAgICAgLS1jb2xvcjogI3skY29sb3ItZ3JleX07XG5cbiAgICAgIGZvbnQtc2l6ZTogbWluKHZhcigtLWZvbnQtc2l6ZSksICN7MS4yNSAqICRmb250LXNpemV9KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvcik7XG5cbiAgICAgICN7JHNlbGZ9Om5vdCgjeyRzZWxmfS0tc21hbGwpICYge1xuICAgICAgICBwYWRkaW5nOiAwIGNhbGModmFyKC0tZm9udC1zaXplKSAvIDQpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLWZvbnQtc2l6ZSkgLyA0KTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3IpO1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn0tLW1lZGl1bSAmIHtcbiAgICAgICAgLS1jb2xvcjogI3skY29sb3ItbGlnaHR9O1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfS0tbGFyZ2UgJiB7XG4gICAgICAgIC0tY29sb3I6ICN7JGNvbG9yLWxpZ2h0ZXJ9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgLy8gU1ZHIGltYWdlcyBuZWVkIDEwMCUgc2V0dGluZ3MgdG8gc2NhbGUgaW50byB0aGUgY29udGFpbmVyLlxuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtaW4td2lkdGg6IHZhcigtLW1pbi1zaXplKTtcbiAgICBtaW4taGVpZ2h0OiB2YXIoLS1taW4tc2l6ZSk7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS1tYXgtc2l6ZSk7XG4gICAgbWF4LWhlaWdodDogdmFyKC0tbWF4LXNpemUpO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgZGVmYXVsdERvY3VtZW50LCB0cnlPbk1vdW50ZWQsIHRyeU9uU2NvcGVEaXNwb3NlLCB1bnJlZkVsZW1lbnQsIHVzZVZNb2RlbCB9IGZyb20gJ0B2dWV1c2UvY29yZSc7XG5pbXBvcnQgeyBpc1JlZiwgdG9WYWx1ZSwgbmV4dFRpY2ssIGRlZmluZUNvbXBvbmVudCwgcmVmLCByZWFjdGl2ZSwgaCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgU29ydGFibGUgZnJvbSAnc29ydGFibGVqcyc7XG5cbmZ1bmN0aW9uIHVzZVNvcnRhYmxlKGVsLCBsaXN0LCBvcHRpb25zID0ge30pIHtcbiAgbGV0IHNvcnRhYmxlO1xuICBjb25zdCB7IGRvY3VtZW50ID0gZGVmYXVsdERvY3VtZW50LCAuLi5yZXNldE9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIG9uVXBkYXRlOiAoZSkgPT4ge1xuICAgICAgbW92ZUFycmF5RWxlbWVudChsaXN0LCBlLm9sZEluZGV4LCBlLm5ld0luZGV4LCBlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IHR5cGVvZiBlbCA9PT0gXCJzdHJpbmdcIiA/IGRvY3VtZW50Py5xdWVyeVNlbGVjdG9yKGVsKSA6IHVucmVmRWxlbWVudChlbCk7XG4gICAgaWYgKCF0YXJnZXQgfHwgc29ydGFibGUgIT09IHZvaWQgMClcbiAgICAgIHJldHVybjtcbiAgICBzb3J0YWJsZSA9IG5ldyBTb3J0YWJsZSh0YXJnZXQsIHsgLi4uZGVmYXVsdE9wdGlvbnMsIC4uLnJlc2V0T3B0aW9ucyB9KTtcbiAgfTtcbiAgY29uc3Qgc3RvcCA9ICgpID0+IHtcbiAgICBzb3J0YWJsZT8uZGVzdHJveSgpO1xuICAgIHNvcnRhYmxlID0gdm9pZCAwO1xuICB9O1xuICBjb25zdCBvcHRpb24gPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgICBpZiAodmFsdWUgIT09IHZvaWQgMClcbiAgICAgIHNvcnRhYmxlPy5vcHRpb24obmFtZSwgdmFsdWUpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBzb3J0YWJsZT8ub3B0aW9uKG5hbWUpO1xuICB9O1xuICB0cnlPbk1vdW50ZWQoc3RhcnQpO1xuICB0cnlPblNjb3BlRGlzcG9zZShzdG9wKTtcbiAgcmV0dXJuIHtcbiAgICBzdG9wLFxuICAgIHN0YXJ0LFxuICAgIG9wdGlvblxuICB9O1xufVxuZnVuY3Rpb24gaW5zZXJ0Tm9kZUF0KHBhcmVudEVsZW1lbnQsIGVsZW1lbnQsIGluZGV4KSB7XG4gIGNvbnN0IHJlZkVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LmNoaWxkcmVuW2luZGV4XTtcbiAgcGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoZWxlbWVudCwgcmVmRWxlbWVudCk7XG59XG5mdW5jdGlvbiByZW1vdmVOb2RlKG5vZGUpIHtcbiAgaWYgKG5vZGUucGFyZW50Tm9kZSlcbiAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG59XG5mdW5jdGlvbiBtb3ZlQXJyYXlFbGVtZW50KGxpc3QsIGZyb20sIHRvLCBlID0gbnVsbCkge1xuICBpZiAoZSAhPSBudWxsKSB7XG4gICAgcmVtb3ZlTm9kZShlLml0ZW0pO1xuICAgIGluc2VydE5vZGVBdChlLmZyb20sIGUuaXRlbSwgZnJvbSk7XG4gIH1cbiAgY29uc3QgX3ZhbHVlSXNSZWYgPSBpc1JlZihsaXN0KTtcbiAgY29uc3QgYXJyYXkgPSBfdmFsdWVJc1JlZiA/IFsuLi50b1ZhbHVlKGxpc3QpXSA6IHRvVmFsdWUobGlzdCk7XG4gIGlmICh0byA+PSAwICYmIHRvIDwgYXJyYXkubGVuZ3RoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5LnNwbGljZShmcm9tLCAxKVswXTtcbiAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICBhcnJheS5zcGxpY2UodG8sIDAsIGVsZW1lbnQpO1xuICAgICAgaWYgKF92YWx1ZUlzUmVmKVxuICAgICAgICBsaXN0LnZhbHVlID0gYXJyYXk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgVXNlU29ydGFibGUgPSAvKiBAX19QVVJFX18gKi8gLypAX19QVVJFX18qLyBkZWZpbmVDb21wb25lbnQoe1xuICBuYW1lOiBcIlVzZVNvcnRhYmxlXCIsXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgdGFnOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBcImRpdlwiXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xuICAgIGNvbnN0IGxpc3QgPSB1c2VWTW9kZWwocHJvcHMsIFwibW9kZWxWYWx1ZVwiKTtcbiAgICBjb25zdCB0YXJnZXQgPSByZWYoKTtcbiAgICBjb25zdCBkYXRhID0gcmVhY3RpdmUodXNlU29ydGFibGUodGFyZ2V0LCBsaXN0LCBwcm9wcy5vcHRpb25zKSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzbG90cy5kZWZhdWx0KVxuICAgICAgICByZXR1cm4gaChwcm9wcy50YWcsIHsgcmVmOiB0YXJnZXQgfSwgc2xvdHMuZGVmYXVsdChkYXRhKSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IFVzZVNvcnRhYmxlIH07XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVXNlU29ydGFibGUuZGl0by1kcmFnZ2FibGUoXG4gIHYtaWY9XCJkcmFnZ2FibGVcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWRyYWdnYWJsZS0tZHJhZ2dpbmcnOiBpc0RyYWdnaW5nIH1cIlxuICA6dGFnPVwidGFnXCJcbiAgOm1vZGVsVmFsdWU9XCJtb2RlbFZhbHVlXCJcbiAgOm9wdGlvbnM9XCJ7IC4uLm9wdGlvbnMsIG9uU3RhcnQsIG9uRW5kIH1cIlxuICBAdXBkYXRlOm1vZGVsVmFsdWU9XCIkZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCAkZXZlbnQpXCJcbilcbiAgc2xvdFxuY29tcG9uZW50KFxuICB2LWVsc2VcbiAgOmlzPVwidGFnXCJcbilcbiAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgVXNlU29ydGFibGUgfSBmcm9tICdAdnVldXNlL2ludGVncmF0aW9ucy91c2VTb3J0YWJsZS9jb21wb25lbnQnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0RyYWdnYWJsZScsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFVzZVNvcnRhYmxlIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdkaXYnXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZHJhZ2dhYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtb3VzZUV2ZW50czogbnVsbCxcbiAgICAgIGlzRHJhZ2dpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblN0YXJ0KGV2ZW50KSB7XG4gICAgICB0aGlzLm9wdGlvbnMub25TdGFydD8uKGV2ZW50KVxuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZVxuICAgICAgdGhpcy5tb3VzZUV2ZW50cz8ucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgb25FbmQoZXZlbnQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vbkVuZD8uKGV2ZW50KVxuICAgICAgLy8gS2VlcCBgaXNEcmFnZ2luZ2AgdHJ1ZSB1bnRpbCB0aGUgbmV4dCBtb3VzZSBpbnRlcmFjdGlvbiBzbyB0aGF0XG4gICAgICAvLyBjb25mdXNlZCBob3ZlciBzdGF0ZXMgYXJlIGNsZWFyZWQgYmVmb3JlIHJlbW92aW5nIHRoZSBob3ZlciBjYXRjaGVyLlxuICAgICAgdGhpcy5tb3VzZUV2ZW50cyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vkb3duOiB0aGlzLm9uTW91c2UsXG4gICAgICAgIG1vdXNlbW92ZTogdGhpcy5vbk1vdXNlLFxuICAgICAgICBtb3VzZWxlYXZlOiB0aGlzLm9uTW91c2VcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uTW91c2UoKSB7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgdGhpcy5tb3VzZUV2ZW50cz8ucmVtb3ZlKClcbiAgICAgIHRoaXMubW91c2VFdmVudHMgPSBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZHJhZ2dhYmxlIHtcbiAgLy8gT3ZlcmxheSBhIGhvdmVyIGNhdGNoZXIgd2hpbGUgd2UncmUgZHJhZ2dpbmcgdG8gcHJldmVudCBob3ZlciBzdGF0ZXMgZnJvbVxuICAvLyBnZXR0aW5nIHN0dWNrIC8gY29uZnVzZWQuIFNhZmFyaSBzdHJ1Z2dsZXMgd2l0aCB0aGlzLCBzbyBkaXNhYmxlIGl0IHRoZXJlLlxuICBAaW5jbHVkZSBicm93c2VyLXF1ZXJ5KCgnY2hyb21lJywgJ2ZpcmVmb3gnKSkge1xuICAgICY6aGFzKCZfX2Nob3NlbiksXG4gICAgJi0tZHJhZ2dpbmcge1xuICAgICAgPiAqIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgID4gOmZpcnN0LWNoaWxkOjphZnRlciB7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGluc2V0OiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl9fZmFsbGJhY2sge1xuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAycHggNHB4ICRjb2xvci1zaGFkb3cpO1xuXG4gICAgLy8gTmVzdGVkIDx0ZD4gbmVlZCB0byBhbHNvIHN3aXRjaCB0byBgZGlzcGxheTogZmxleGAgc3R5bGUgZHVyaW5nIGRyYWdnaW5nLlxuICAgICYsXG4gICAgdGQge1xuICAgICAgZGlzcGxheTogZmxleDtcblxuICAgICAgPiAqIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc3Bpbm5lcihcbiAgdi1zaG93PVwibG9hZGluZ1wiXG4gIDpzdHlsZT1cInsgJy0tY29sb3InOiBjb2xvciwgJy0tc2l6ZSc6IHNpemUsICctLW1hcmdpbic6IG1hcmdpbiB9XCJcbilcbiAgLmRpdG8tc3Bpbm5lcl9fcHVsc2UuZGl0by1zcGlubmVyX19wdWxzZTFcbiAgLmRpdG8tc3Bpbm5lcl9fcHVsc2UuZGl0by1zcGlubmVyX19wdWxzZTJcbiAgLmRpdG8tc3Bpbm5lcl9fcHVsc2UuZGl0by1zcGlubmVyX19wdWxzZTNcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TcGlubmVyJywge1xuICBwcm9wczoge1xuICAgIGxvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgc2l6ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tc3Bpbm5lciB7XG4gIC0tY29sb3I6ICM5OTk5OTk7XG4gIC0tc2l6ZTogOHB4O1xuICAtLW1hcmdpbjogMnB4O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgJl9fcHVsc2Uge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvcik7XG4gICAgd2lkdGg6IHZhcigtLXNpemUpO1xuICAgIGhlaWdodDogdmFyKC0tc2l6ZSk7XG4gICAgbWFyZ2luOiB2YXIoLS1tYXJnaW4pO1xuICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgYW5pbWF0aW9uOiBkaXRvLXNwaW5uZXItcHVsc2UgMC43NXMgY3ViaWMtYmV6aWVyKDAuMiwgMC42OCwgMC4xOCwgMS4wOCkgMHNcbiAgICAgIGluZmluaXRlIGJvdGg7XG4gIH1cblxuICAmX19wdWxzZTEge1xuICAgIGFuaW1hdGlvbi1kZWxheTogMC4xMnM7XG4gIH1cblxuICAmX19wdWxzZTIge1xuICAgIGFuaW1hdGlvbi1kZWxheTogMC4yNHM7XG4gIH1cblxuICAmX19wdWxzZTMge1xuICAgIGFuaW1hdGlvbi1kZWxheTogMC4zNnM7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBkaXRvLXNwaW5uZXItcHVsc2Uge1xuICAwJSxcbiAgODAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICA0NSUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBkaXRvLXNwaW5uZXItcHVsc2Uge1xuICAwJSxcbiAgODAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICA0NSUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmZ1bmN0aW9uIERpdG9WTm9kZSh7IHZub2RlIH0pIHtcbiAgcmV0dXJuIHZub2RlXG59XG5cbkRpdG9WTm9kZS5wcm9wcyA9IHtcbiAgdm5vZGU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVm5vZGUnLCBEaXRvVk5vZGUpXG48L3NjcmlwdD5cbiIsIi8vIERpdG9UeXBlQ29tcG9uZW50IGlzIHRoZSBhYnN0cmFjdCBiYXNlIGNvbXBvbmVudCBmb3IgYWxsIG90aGVyIHR5cGVcbi8vIGNvbXBvbmVudHMgaW5zaWRlIHRoZSB0eXBlcy8gZm9sZGVyLiBUaGVyZSdzIGFsc28gYSBzZXBhcmF0ZSBjb25jcmV0ZVxuLy8gYERpdG9UeXBlQ29tcG9uZW50LnZ1ZWAgY29tcG9uZW50LCB1c2UgdG8gcmVuZGVyIGB7IHR5cGU6ICdjb21wb25lbnQnIH1gXG5pbXBvcnQgeyBhc0FycmF5LCBjYW1lbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IHJlZ2lzdGVyVHlwZUNvbXBvbmVudCwgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBleHRlbmRzOiBEaXRvQ29tcG9uZW50LFxuICBtaXhpbnM6IFtUeXBlTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiBmYWxzZSxcbiAgdGV4dEZpZWxkOiBmYWxzZSxcbiAgLy8gU2V0IHJlYXNvbmFibGUgZGVmYXVsdHMgZm9yIGFsbCBvZiB0aGVzZSB0aGF0IGFyZSB1c2VkIGJ5IG1vc3QgdHlwZVxuICAvLyBjb21wb25lbnRzLiBUaGVzZSBvbmx5IG5lZWQgZGVmaW5pbmcgaW4gc3ViLWNsYXNzZXMgd2hlbiB0aGV5IGRpZmZlci5cbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBkZWZhdWx0TmVzdGVkOiB0cnVlLFxuICBkZWZhdWx0VmlzaWJsZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogdHJ1ZSxcbiAgZXhjbHVkZVZhbHVlOiBmYWxzZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBudWxsLFxuICBvbWl0U3BhY2luZzogZmFsc2UsXG5cbiAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCxcblxuICBnZXQ6IGdldFR5cGVDb21wb25lbnQsXG5cbiAgcmVnaXN0ZXIodHlwZXMsIGRlZmluaXRpb24gPSB7fSkge1xuICAgIHR5cGVzID0gYXNBcnJheSh0eXBlcylcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudChcbiAgICAgIGBEaXRvVHlwZSR7Y2FtZWxpemUodHlwZXNbMF0sIHRydWUpfWAsXG4gICAgICBkZWZpbml0aW9uXG4gICAgKVxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudClcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudFxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuYnV0dG9uLmRpdG8tYnV0dG9uKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6dHlwZT1cInR5cGVcIlxuICA6dGl0bGU9XCJ0aXRsZVwiXG4gIDpjbGFzcz1cImJ1dHRvbkNsYXNzXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG4gIC5kaXRvLWJ1dHRvbl9fdGV4dChcbiAgICB2LWlmPVwidGV4dFwiXG4gICkge3sgdGV4dCB9fVxuICAuZGl0by1pbmZvKFxuICAgIHYtaWY9XCIhbGFiZWwgJiYgaW5mb1wiXG4gICAgOmRhdGEtaW5mbz1cImluZm9cIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ2J1dHRvbicsICdzdWJtaXQnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICAgIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcbiAgICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICB2ZXJiKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJic1t0aGlzLm5hbWVdXG4gICAgICB9LFxuXG4gICAgICBidXR0b25DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyYiA/IGBkaXRvLWJ1dHRvbi0ke3RoaXMudmVyYn1gIDogbnVsbFxuICAgICAgfSxcblxuICAgICAgdGV4dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RleHQnLCB7XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgICAgfSksXG5cbiAgICAgIHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0IHx8IGxhYmVsaXplKHRoaXMudmVyYilcbiAgICAgIH0sXG5cbiAgICAgIGluZm86IGdldFNjaGVtYUFjY2Vzc29yKCdpbmZvJywge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH0pLFxuXG4gICAgICBjbG9zZUZvcm06IGdldFNjaGVtYUFjY2Vzc29yKCdjbG9zZUZvcm0nLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAvLyBAb3ZlcnJpZGVcbiAgICAgIGdldEV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uQ2xpY2sgfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIHsgb25Gb2N1cywgb25CbHVyLCBvbkNsaWNrIH1cbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIHN1Ym1pdChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlQ29tcG9uZW50Py5zdWJtaXQodGhpcywgb3B0aW9ucylcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIG9uQ2xpY2soKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZW1pdEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICAgIH0pXG4gICAgICAgIC8vIEhhdmUgYnV0dG9ucyB0aGF0IGRlZmluZSByZXNvdXJjZXMgY2FsbCBgdGhpcy5zdWJtaXQoKWAgYnkgZGVmYXVsdDpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmIC8vIE1lYW5pbmc6IGRvbid0IHByZXZlbnQgZGVmYXVsdC5cbiAgICAgICAgICBoYXNSZXNvdXJjZSh0aGlzLnNjaGVtYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1idXR0b24ge1xuICAkc2VsZjogJjtcblxuICAmX190ZXh0IHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jaGVja2JveFxuICBpbnB1dChcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NoZWNrYm94Jywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNoZWNrYm94IHtcbiAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzcztcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNGdW5jdGlvbixcbiAgaXNQcm9taXNlLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBtYXJrUmF3LCByZWYgfSBmcm9tICd2dWUnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtMb2FkaW5nTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBhc3luY0RhdGFFbnRyaWVzOiBtYXJrUmF3KHt9KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsIG5hbWUsIGxvYWRpbmdPcHRpb25zKSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHNjaGVtYSkpIHtcbiAgICAgICAgc2NoZW1hID0geyBkYXRhOiBzY2hlbWEgfVxuICAgICAgfVxuICAgICAgbGV0IHsgZGF0YSA9IHVuZGVmaW5lZCwgZGF0YVBhdGggPSBudWxsIH0gPSBzY2hlbWFcbiAgICAgIC8vIENyZWF0ZSBhIHJlYWN0aXZlIGVudHJ5IGZvciB0aGUgYXN5bmMgZGF0YSwgaWYgaXQgZG9lc24ndCBleGlzdCB5ZXQuXG4gICAgICAvLyBOT1RFOiBgbWFya1JhdygpYCBpcyB1c2VkIHRvIGF2b2lkIHJlYWN0aXZpdHkgb24gYGFzeW5jRGF0YUVudHJpZXNgXG4gICAgICAvLyBpdHNlbGYsIGFzIHJlYWN0aXZpdHkgaXMgb25seSBkZXNpcmVkIG9uIGByZWFjdGl2ZVZlcnNpb25gLCB3aGljaCBpc1xuICAgICAgLy8gdXNlZCB0byB0cmlnZ2VyIGNvbnRyb2xsZWQgcmVldmFsdWF0aW9uIG9mIHRoZSBjb21wdXRlZCBnZXR0ZXIuXG4gICAgICBjb25zdCBhc3luY0VudHJ5ID0gKHRoaXMuYXN5bmNEYXRhRW50cmllc1tuYW1lXSA/Pz0ge1xuICAgICAgICByZWFjdGl2ZVZlcnNpb246IHJlZigxKSxcbiAgICAgICAgZGVwZW5kZW5jeUZ1bmN0aW9uOiBudWxsLFxuICAgICAgICByZXNvbHZlZERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVzb2x2aW5nOiBmYWxzZSxcbiAgICAgICAgcmVzb2x2ZWQ6IGZhbHNlXG4gICAgICB9KVxuICAgICAgLy8gSWYgdGhlIGRhdGEgY2FsbGJhY2sgcHJvdmlkZWQgYSBkZXBlbmRlbmN5IGZ1bmN0aW9uIHdoZW4gaXQgd2FzIGNhbGxlZCxcbiAgICAgIC8vIGNhbCBpdCBpbiBldmVyeSBjYWxsIG9mIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGZvcmNlIFZ1ZSB0byBrZWVwIHRyYWNrXG4gICAgICAvLyBvZiB0aGUgYXN5bmMgZGVwZW5kZW5jaWVzLiBBbHNvIGFjY2VzcyBgcmVhY3RpdmVWZXJzaW9uLnZhbHVlYCByaWdodFxuICAgICAgLy8gYXdheSwgdG8gZW5zdXJlIHRoYXQgdGhlIHJlYWN0aXZlIHByb3BlcnR5IGlzIHRyYWNrZWQgYXMgYSBkZXBlbmRlbmN5OlxuICAgICAgYXN5bmNFbnRyeS5yZWFjdGl2ZVZlcnNpb24udmFsdWUgJiZcbiAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uPy4odGhpcy5jb250ZXh0KVxuXG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZlZCkge1xuICAgICAgICAvLyBJZiB0aGUgZGF0YSB3YXMgcmVzb2x2ZWQgYWxyZWFkeSwgcmV0dXJuIGl0IGFuZCBjbGVhciB0aGUgcmVzb2x2ZWRcbiAgICAgICAgLy8gdmFsdWUuIFRoaXMgd29ya3MgYmVjYXVzZSBWdWUgY2FjaGVzIHRoZSByZXN1bHQgb2YgY29tcHV0ZWQgZ2V0dGVyc1xuICAgICAgICAvLyBhbmQgb25seSByZWV2YWx1YXRlcyBpZiBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VkLiBUaGlzIGlzIHRvXG4gICAgICAgIC8vIGVuc3VyZSB0aGF0IGEgY2FjaGVkIHZhbHVlIGhlcmUgZG9lc24ndCBibG9jayAvIG92ZXJyaWRlXG4gICAgICAgIC8vIHJlZXZhbHVhdGlvbiB3aGVuIGEgZGVwZW5kZW5jeSBjaGFuZ2VzOlxuICAgICAgICBjb25zdCB7IHJlc29sdmVkRGF0YSB9ID0gYXN5bmNFbnRyeVxuICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IHVuZGVmaW5lZFxuICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkID0gZmFsc2VcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkRGF0YVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgY2FsbGluZyB0aGUgZGF0YSBmdW5jdGlvbiB0d2ljZTpcbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmluZykge1xuICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YSh0aGlzLmNvbnRleHQpXG4gICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBmdW5jdGlvbiBpcyBhbm90aGVyIGZ1bmN0aW9uLCB0aGVuIHRoZVxuICAgICAgICAgIC8vIGZpcnN0IGRhdGEgZnVuY3Rpb24gaXMgdGhlcmUgdG8gdHJhY2sgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcmVhbFxuICAgICAgICAgIC8vIGRhdGEgbG9hZGluZyBoYXBwZW5zIGluIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkLiBLZWVwIHRyYWNrXG4gICAgICAgICAgLy8gaXQgaW4gYGRlcGVuZGVuY3lGdW5jdGlvbmAgc28gaXQgY2FuIGJlIGNhbGxlZCBvbiBlYWNoIGNhbGwgb2ZcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgaW50YWN0LCBhbmQgY2FsbFxuICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkIG9uY2UgdG8gZ2V0IHRoZSBhY3R1YWwgZGF0YTpcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXN1bHQpKSB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbiA9IGRhdGFcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHQodGhpcy5jb250ZXh0KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gcmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE5PVEU6IElmIHRoZSBkYXRhIGlzIG5vdCBhIHByb21pc2UsIGl0IGlzIHJlc29sdmVkIGFscmVhZHkuXG4gICAgICAgIGlmIChpc1Byb21pc2UoZGF0YSkpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGF0YSBpcyBhc3luY2hyb25vdXMsIGl0IGNhbid0IGJlIHJldHVybmVkIHN0cmFpZ2h0IGF3YXkuXG4gICAgICAgICAgLy8gQnV0IHdlIGNhbiBjaGVhdCB1c2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFuZCBgcmVzb2x2ZWREYXRhYCxcbiAgICAgICAgICAvLyB3aGljaCBpcyBnb2luZyB0byByZWNlaXZlIHRoZSBsb2FkZWQgZGF0YSBhc3luY2hyb25vdXNseSxcbiAgICAgICAgICAvLyB0cmlnZ2VyaW5nIGEgcmVjb21wdXRlIG9mIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IGNhbGxzXG4gICAgICAgICAgLy8gYGhhbmRsZURhdGFTY2hlbWEoKWAuXG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSB0cnVlXG4gICAgICAgICAgdGhpcy5yZXNvbHZlRGF0YShkYXRhLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IGRhdGFcbiAgICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkID0gdHJ1ZVxuICAgICAgICAgICAgICAvLyBUcmlnZ2VyIHJlZXZhbHVhdGlvbiBvZiB0aGUgY29tcHV0ZWQgZ2V0dGVyIGJ5IGluY3JlYXNpbmcgdGhlXG4gICAgICAgICAgICAgIC8vIGByZWFjdGl2ZVZlcnNpb25gIHZhbHVlLlxuICAgICAgICAgICAgICBhc3luY0VudHJ5LnJlYWN0aXZlVmVyc2lvbi52YWx1ZSsrXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAvLyBDbGVhciBkYXRhIHVudGlsIHByb21pc2UgaXMgcmVzb2x2ZWQgYW5kIGByZXNvbHZlZERhdGFgIGlzIHNldFxuICAgICAgICAgIGRhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YVBhdGgpIHtcbiAgICAgICAgZGF0YSA9IGdldFZhbHVlQXREYXRhUGF0aChcbiAgICAgICAgICB0aGlzLnJvb3REYXRhLFxuICAgICAgICAgIG5vcm1hbGl6ZURhdGFQYXRoKGAke3RoaXMuZGF0YVBhdGh9LyR7ZGF0YVBhdGh9YClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzb2x2ZURhdGEobG9hZCwgbG9hZGluZ09wdGlvbnMgPSB7fSkge1xuICAgICAgLy8gVXNlIGEgdGltZW91dCB0byBhbGxvdyBhbHJlYWR5IHJlc29sdmVkIHByb21pc2VzIHRvIHJldHVybiBkYXRhIHdpdGhvdXRcbiAgICAgIC8vIHNob3dpbmcgYSBsb2FkaW5nIGluZGljYXRvci5cbiAgICAgIGxldCBjbGVhckxvYWRpbmcgPSBmYWxzZVxuICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgICBjbGVhckxvYWRpbmcgPSB0cnVlXG4gICAgICB9LCAwKVxuICAgICAgbGV0IGRhdGEgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gYXdhaXQgKGlzRnVuY3Rpb24obG9hZCkgPyBsb2FkKCkgOiBsb2FkKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvci5tZXNzYWdlIHx8IGVycm9yKVxuICAgICAgfVxuICAgICAgaWYgKGNsZWFyTG9hZGluZykge1xuICAgICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi9EYXRhTWl4aW4uanMnXG5pbXBvcnQgeyBoYXNWaWV3U2NoZW1hLCBnZXRWaWV3RWRpdFBhdGggfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgc2V0VGVtcG9yYXJ5SWQsIGlzUmVmZXJlbmNlIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0FycmF5LFxuICBpc1N0cmluZyxcbiAgaXNGdW5jdGlvbixcbiAgbm9ybWFsaXplRGF0YVBhdGgsXG4gIGxhYmVsaXplLFxuICBkZWJvdW5jZUFzeW5jXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnJlbGF0ZVxuICAgICAgICAgICAgPyB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgOiB2YWx1ZVxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uc1xuICAgICAgICAgICAgPyB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbClcbiAgICAgICAgICAgICAgPyB2YWxcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzQXJyYXkodGhpcy52YWx1ZSlcbiAgICAgICAgICA/IHRoaXMudmFsdWUubWFwKGNvbnZlcnRWYWx1ZSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKVxuICAgICAgICAgIDogY29udmVydFZhbHVlKHRoaXMudmFsdWUpXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIC8vIEFzIHNvb24gYXMgdGhlIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgYW5kLi4uXG4gICAgICAgICAgdGhpcy5oYXNPcHRpb25zICYmIChcbiAgICAgICAgICAgIC8vIC4uLmlmIHRoZSB2YWx1ZSBpcyBmb3JjZWQgdG8gbnVsbCBiZWNhdXNlIGEgZGlzYXBwZWFyZWQgb3B0aW9uLi4uXG4gICAgICAgICAgICB2YWx1ZSA9PT0gbnVsbCAmJiB0aGlzLnZhbHVlICE9PSBudWxsIHx8XG4gICAgICAgICAgICAvLyAuLi5vciBpZiB0aGUgdmFsdWUgaXMgYSByZWZlcmVuY2UsIHJlcGxhY2UgaXQgd2l0aCBpdHMgb3B0aW9uXG4gICAgICAgICAgICAvLyB2YWx1ZSwgc28gdGhhdCBpdCdsbCBob2xkIGFjdHVhbCBkYXRhLCBub3QganVzdCBhIHJlZmVyZW5jZSBpZC5cbiAgICAgICAgICAgIGlzUmVmZXJlbmNlKHRoaXMudmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29udmVydFZhbHVlID0gdmFsdWUgPT5cbiAgICAgICAgICB0aGlzLnJlbGF0ZVxuICAgICAgICAgICAgPyB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKVxuICAgICAgICAgICAgOiB2YWx1ZVxuXG4gICAgICAgIHRoaXMudmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKGNvbnZlcnRWYWx1ZSlcbiAgICAgICAgICA6IGNvbnZlcnRWYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRPcHRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpXG4gICAgfSxcblxuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHRoaXMuc2NoZW1hLm9wdGlvbnMsICdvcHRpb25zJykgPz8gW11cbiAgICAgIGlmICghaXNBcnJheShkYXRhKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgb3B0aW9ucyBkYXRhLCBzaG91bGQgYmUgYXJyYXk6ICR7ZGF0YX1gKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc09wdGlvbnMoZGF0YSlcbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIC8vIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBgVHlwZU11bHRpc2VsZWN0YCB0byByZXR1cm4gdGhlIGBzZWFyY2hlZE9wdGlvbnNgXG4gICAgICAvLyB3aGVuIGEgc2VhcmNoIGZpbHRlciB3YXMgYXBwbGllZC5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgaGFzT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZU9wdGlvbnMubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICByZWxhdGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWxhdGUnLCB7XG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIGByZWxhdGVCeTogJ2lkJ2BcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIC8vIFdlIGNhbm5vdCB1c2Ugc2NoZW1hIGFjY2Vzc29yIGNhbGxiYWNrIG1hZ2ljIGZvciBgcmVsYXRlYCBhcyB3ZSBuZWVkXG4gICAgICAvLyB0aGlzIG91dHNpZGUgb2YgdGhlIGNvbXBvbmVudCdzIGxpZmUtc3Bhbiwgc2VlIGBwcm9jZXNzRGF0YSgpYCBiZWxvdy5cbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZ3JvdXBCeTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2dyb3VwQnknLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYG9wdGlvbnMubGFiZWxLZXlgIC8gYG9wdGlvbkxhYmVsS2V5YD9cbiAgICBvcHRpb25MYWJlbDogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMubGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KGxhYmVsKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAnbGFiZWwnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGxhYmVsIHx8XG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25LZXkoJ2xhYmVsJykgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgb3B0aW9ucy52YWx1ZUtleWAgLyBgb3B0aW9uVmFsdWVLZXlgP1xuICAgIG9wdGlvblZhbHVlOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy52YWx1ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQodmFsdWUpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICd2YWx1ZSc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdmFsdWUgfHxcbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJiAnaWQnIHx8XG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25LZXkoJ3ZhbHVlJykgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IENvbnNpZGVyIG1vdmluZyBzZWFyY2ggdG8gYG9wdGlvbnMuc2VhcmNoYD9cbiAgICBzZWFyY2hGaWx0ZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2gnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHNlYXJjaCkge1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgY29uc3QgeyBmaWx0ZXIsIGRlYm91bmNlIH0gPSBpc0Z1bmN0aW9uKHNlYXJjaClcbiAgICAgICAgICAgID8geyBmaWx0ZXI6IHNlYXJjaCB9XG4gICAgICAgICAgICA6IHNlYXJjaFxuICAgICAgICAgIHJldHVybiBkZWJvdW5jZSA/IGRlYm91bmNlQXN5bmMoZmlsdGVyLCBkZWJvdW5jZSkgOiBmaWx0ZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGVkaXRhYmxlICYmXG4gICAgICAgICAgaGFzVmlld1NjaGVtYSh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0UGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVkaXRhYmxlICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZVxuICAgICAgICA/IGdldFZpZXdFZGl0UGF0aCh0aGlzLnNjaGVtYSwgdGhpcy5zZWxlY3RlZFZhbHVlLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5TGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ2xhYmVsJyA6IG51bGxcbiAgICB9LFxuXG4gICAgZ3JvdXBCeU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ29wdGlvbnMnIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0T3B0aW9uS2V5KGtleSkge1xuICAgICAgY29uc3QgW29wdGlvbl0gPSB0aGlzLmFjdGl2ZU9wdGlvbnNcbiAgICAgIHJldHVybiBpc09iamVjdChvcHRpb24pICYmIGtleSBpbiBvcHRpb24gPyBrZXkgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5yZWxhdGUpIHtcbiAgICAgICAgICAvLyBJZiBpZHMgYXJlIG1pc3NpbmcgYW5kIHdlIHdhbnQgdG8gcmVsYXRlLCBzZXQgdGVtcG9yYXJ5IGlkcy5cbiAgICAgICAgICAvLyBOT1RFOiBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgYWN0dWFsIGRhdGEsIG1ha2luZyBhIGNvcHkgd29uJ3Qgd29ya1xuICAgICAgICAgIC8vIGFzIGl0IHdvbid0IHByb3BhZ2F0ZS5cbiAgICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGRhdGEgaXMgZnJvbSB0aGUgZ3JhcGggdGhhdFxuICAgICAgICAgIC8vIHdlJ3JlIGN1cnJlbnRseSBlZGl0aW5nLlxuICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghKCdpZCcgaW4gb3B0aW9uKSkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICAgICAgc2V0VGVtcG9yYXJ5SWQob3B0aW9uLCAnaWQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncm91cEJ5KSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBlZCA9IHt9XG4gICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMucmVkdWNlKFxuICAgICAgICAgICAgKHJlc3VsdHMsIG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBncm91cCA9IG9wdGlvblt0aGlzLmdyb3VwQnldXG4gICAgICAgICAgICAgIGxldCBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdXG4gICAgICAgICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdID0ge1xuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeUxhYmVsXTogZ3JvdXAsXG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5T3B0aW9uc106IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChlbnRyeSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbnRyeVt0aGlzLmdyb3VwQnlPcHRpb25zXS5wdXNoKG9wdGlvbilcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9LFxuXG4gICAgZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgIGNvbnN0IGZpbmRPcHRpb24gPSAob3B0aW9ucywgdmFsdWUsIGdyb3VwQnkpID0+IHtcbiAgICAgICAgLy8gU2VhcmNoIGZvciB0aGUgb3B0aW9uIG9iamVjdCB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBhbmQgcmV0dXJuIHRoZVxuICAgICAgICAvLyB3aG9sZSBvYmplY3QuXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoZ3JvdXBCeSkge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kT3B0aW9uKG9wdGlvbi5vcHRpb25zLCB2YWx1ZSwgbnVsbClcbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uVmFsdWVcbiAgICAgICAgPyBmaW5kT3B0aW9uKHRoaXMuYWN0aXZlT3B0aW9ucywgdmFsdWUsIHRoaXMuZ3JvdXBCeSlcbiAgICAgICAgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25WYWx1ZSlcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25WYWx1ZV0gPz8gbnVsbFxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uVmFsdWUpXG4gICAgICAgICAgPyBvcHRpb25WYWx1ZShuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBvcHRpb25cbiAgICB9LFxuXG4gICAgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvbkxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uTGFiZWwpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uTGFiZWxdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25MYWJlbClcbiAgICAgICAgICA/IG9wdGlvbkxhYmVsKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IGxhYmVsaXplKGAke29wdGlvbn1gKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoeyBzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCB9LCBncmFwaCkge1xuICAgIGlmIChzY2hlbWEucmVsYXRlKSB7XG4gICAgICAvLyBGb3IgaW50ZXJuYWxseSByZWxhdGluZyBkYXRhIChgc2NoZW1hLm9wdGlvbnMuZGF0YVBhdGhgKSwgd2UgbmVlZCB0b1xuICAgICAgLy8gcHJvY2VzcyBib3RoIHRoZSBvcHRpb25zIChmb3IgJyNyZWYnKSBhbmQgdGhlIHZhbHVlICgnI2lkJykuXG4gICAgICAvLyBTZWUgYERhdGFNaXhpbi5oYW5kbGVEYXRhU2NoZW1hKClgOlxuICAgICAgY29uc3QgcGF0aCA9IHNjaGVtYS5vcHRpb25zPy5kYXRhUGF0aFxuICAgICAgY29uc3QgcmVsYXRlZERhdGFQYXRoID0gcGF0aFxuICAgICAgICA/IG5vcm1hbGl6ZURhdGFQYXRoKGAke2RhdGFQYXRofS8ke3BhdGh9YClcbiAgICAgICAgOiBudWxsXG4gICAgICBncmFwaC5hZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpXG4gICAgICBpZiAocmVsYXRlZERhdGFQYXRoKSB7XG4gICAgICAgIGdyYXBoLnNldFNvdXJjZVJlbGF0ZWQocmVsYXRlZERhdGFQYXRoKVxuICAgICAgfVxuICAgICAgLy8gQ29udmVydCByZWxhdGluZyBvYmplY3RzIHRvIGEgc2hhbGxvdyBjb3B5IHdpdGggb25seSB0aGUgaWQgbGVmdC5cbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gdXNpbmcgYHJlbGF0ZUJ5YDpcbiAgICAgIGNvbnN0IHByb2Nlc3NSZWxhdGUgPSB2YWx1ZSA9PiAodmFsdWUgPyB7IGlkOiB2YWx1ZS5pZCB9IDogdmFsdWUpXG4gICAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBib3RoIG9iamVjdHMgJiBhcnJheXMsIGUuZy4gJ2NoZWNrYm94ZXMnOlxuICAgICAgdmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzUmVsYXRlKVxuICAgICAgICA6IHByb2Nlc3NSZWxhdGUodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1jaGVja2JveGVzKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gIClcbiAgICBsYWJlbFxuICAgICAgLmRpdG8tY2hlY2tib3hcbiAgICAgICAgaW5wdXQoXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgKVxuICAgICAgICBzcGFuIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3hlcycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgZGVmYXVsdFZhbHVlOiBbXSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSlcbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gb3B0aW9uIHx8IFtdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2hlY2tib3hlcyB7XG4gIGxhYmVsIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jb2RlKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbiAgLmRpdG8tY29kZV9fZWRpdG9yKHJlZj1cImVkaXRvclwiKVxuICAuZGl0by1yZXNpemUoXG4gICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgQ29kZUZsYXNrIGZyb20gJ2NvZGVmbGFzaydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2RlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdsaW5lcycsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDNcbiAgICB9KSxcblxuICAgIGxhbmd1YWdlOiBnZXRTY2hlbWFBY2Nlc3NvcignbGFuZ3VhZ2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnamF2YXNjcmlwdCdcbiAgICB9KSxcblxuICAgIGluZGVudFNpemU6IGdldFNjaGVtYUFjY2Vzc29yKCdpbmRlbnRTaXplJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMlxuICAgIH0pLFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdHlsZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgfHwgYGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCBmbGFzayA9IG5ldyBDb2RlRmxhc2sodGhpcy4kcmVmcy5lZGl0b3IsIHtcbiAgICAgIGxhbmd1YWdlOiB0aGlzLmxhbmd1YWdlLFxuICAgICAgaW5kZW50U2l6ZTogdGhpcy5pbmRlbnRTaXplLFxuICAgICAgbGluZU51bWJlcnM6IGZhbHNlXG4gICAgfSlcblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgIGxldCBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICB0aGlzLmRvbU9uKHRoaXMuJHJlZnMuZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyksIHtcbiAgICAgIGZvY3VzOiBvbkZvY3VzLFxuICAgICAgYmx1cjogb25CbHVyXG4gICAgfSlcblxuICAgIGNvbnN0IHNldENvZGUgPSBjb2RlID0+IHtcbiAgICAgIGlmIChjb2RlICE9PSBmbGFzay5jb2RlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IHRydWVcbiAgICAgICAgZmxhc2sudXBkYXRlQ29kZShjb2RlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgICAgb25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZsYXNrLm9uVXBkYXRlKHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVVcGRhdGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFZhbHVlKHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0Q29kZSh2YWx1ZSB8fCAnJylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy4kd2F0Y2goJ2xhbmd1YWdlJywgbGFuZ3VhZ2UgPT4ge1xuICAgICAgZmxhc2sudXBkYXRlTGFuZ3VhZ2UobGFuZ3VhZ2UpXG4gICAgfSlcblxuICAgIHNldENvZGUodGhpcy52YWx1ZSB8fCAnJylcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmJsdXIoKVxuICAgIH0sXG5cbiAgICBvbkRyYWdSZXNpemUoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGdldFBvaW50ID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9KSA9PiAoeyB4LCB5IH0pXG5cbiAgICAgIGxldCBwcmV2WSA9IGdldFBvaW50KGV2ZW50KS55XG4gICAgICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKHRoaXMuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jb2RlIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBGb3IgcHJvcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAyICogJGlucHV0LXBhZGRpbmctdmVyKTtcblxuICAuY29kZWZsYXNrIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIC8vIElnbm9yZSB0aGUgcGFyZW50IHBhZGRpbmcgZGVmaW5lZCBhYm92ZSB3aGljaCBpcyBvbmx5IG5lZWRlZCB0byBzZXRcbiAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuXG4gICAgJl9fdGV4dGFyZWEsXG4gICAgJl9fcHJlIHtcbiAgICAgIC8vIFVzZSBzYW1lIHBhZGRpbmcgYXMgLmRpdG8tY29kZVxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgfVxuXG4gICAgJl9fdGV4dGFyZWEsXG4gICAgJl9fY29kZSxcbiAgICAmX19saW5lcyB7XG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm87XG4gICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSk7XG4gICAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xuICAgIH1cblxuICAgICZfX2xpbmVzIHtcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tY29sb3IoXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJmb2N1c1wiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIC5kaXRvLWlucHV0KDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiKVxuICAgICAgaW5wdXQoXG4gICAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICAgIClcbiAgICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICApXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICBTa2V0Y2hQaWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgICA6ZGlzYWJsZUFscGhhPVwiIWFscGhhXCJcbiAgICAgIDpkaXNhYmxlRmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0Q29sb3JzPVwicHJlc2V0c1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB0aW55Y29sb3IgZnJvbSAndGlueWNvbG9yMidcbmltcG9ydCB7IFNrZXRjaCBhcyBTa2V0Y2hQaWNrZXIgfSBmcm9tICdAbGs3Ny92dWUzLWNvbG9yJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyaWdnZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIE1vbmtleS1wYXRjaCB0aGUgYFNrZXRjaFBpY2tlcidzYCBgaGV4YCBjb21wdXRlZCBwcm9wZXJ0eSB0byByZXR1cm4gbG93ZXJjYXNlXG4vLyBoZXggdmFsdWVzIGluc3RlYWQgb2YgdXBwZXJjYXNlIG9uZXMuXG5jb25zdCB7IGhleCB9ID0gU2tldGNoUGlja2VyLmNvbXB1dGVkXG5Ta2V0Y2hQaWNrZXIuY29tcHV0ZWQuaGV4ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaGV4LmNhbGwodGhpcykudG9Mb3dlckNhc2UoKVxufVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbG9yJywge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIFNrZXRjaFBpY2tlciB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3B1cDogZmFsc2UsXG4gICAgICBjb252ZXJ0ZWRWYWx1ZTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNhblVwZGF0ZVZhbHVlKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmZvY3VzZWQgfHwgdGhpcy5yZWFkb25seVxuICAgIH0sXG5cbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdGhpcy5jb252ZXJ0ZWRWYWx1ZSB8fFxuICAgICAgICAgIHRoaXMudmFsdWUgfHxcbiAgICAgICAgICAodGhpcy5jb2xvckZvcm1hdCA9PT0gJ2hleCcgPyAnJyA6IHt9KVxuICAgICAgICApXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGNvbnZlcnRDb2xvcih2YWx1ZSwgdGhpcy5jb2xvckZvcm1hdClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGV4VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgY29sb3IgPSB0aW55Y29sb3IodGhpcy52YWx1ZSlcbiAgICAgICAgcmV0dXJuIGNvbG9yLmlzVmFsaWQoKVxuICAgICAgICAgID8gY29sb3JcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKGNvbG9yLmdldEFscGhhKCkgPCAxID8gJ2hleDgnIDogJ2hleDYnKVxuICAgICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcih2YWx1ZSlcbiAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID0gY29udmVydENvbG9yKHZhbHVlLCB0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgICAgIGlmICh0aGlzLmNhblVwZGF0ZVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29udmVydGVkVmFsdWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gU3RvcmUgdG8gY2hhbmdlIGxhdGVyLCBvbmNlIGBjYW5VcGRhdGVWYWx1ZWAgaXMgdHJ1ZSBhZ2Fpbi5cbiAgICAgICAgICAgIC8vIFNlZSBgd2F0Y2hgIGJlbG93LlxuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRWYWx1ZSA9IGNvbnZlcnRlZFZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93QWxwaGFgP1xuICAgIGFscGhhOiBnZXRTY2hlbWFBY2Nlc3NvcignYWxwaGEnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0c2A/XG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWU6ICdvbkNoYW5nZScsXG5cbiAgICBjYW5VcGRhdGVWYWx1ZShjYW5VcGRhdGVWYWx1ZSkge1xuICAgICAgaWYgKGNhblVwZGF0ZVZhbHVlICYmIHRoaXMuY29udmVydGVkVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY29udmVydGVkVmFsdWVcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRWYWx1ZSA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGNvbnZlcnRDb2xvcihjb2xvciwgZm9ybWF0KSB7XG4gIHJldHVybiBpc09iamVjdChjb2xvcikgLy8gYSB2dWUzLWNvbG9yIGNvbG9yIG9iamVjdFxuICAgID8gdG9WdWUzQ29sb3JGb3JtYXQoY29sb3IsIGZvcm1hdClcbiAgICA6IHRvVGlueUNvbG9yRm9ybWF0KHRpbnljb2xvcihjb2xvciksIGZvcm1hdClcbn1cblxuZnVuY3Rpb24gdG9WdWUzQ29sb3JGb3JtYXQoY29sb3IsIGZvcm1hdCkge1xuICBjb25zdCB2YWx1ZSA9XG4gICAgY29sb3JbXG4gICAgICB7XG4gICAgICAgIGhleDogY29sb3I/LmEgPCAxID8gJ2hleDgnIDogJ2hleCcsXG4gICAgICAgIHJnYjogJ3JnYmEnXG4gICAgICB9W2Zvcm1hdF0gfHxcbiAgICAgIGZvcm1hdFxuICAgIF1cbiAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSAmJiB2YWx1ZVswXSA9PT0gJyMnID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlXG59XG5cbi8vIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBpbiB0aW55Y29sb3IsIGJ1dCBpdCBvbmx5IGhhcyB0aGUgc3RyaW5nIGVxdWl2YWxlbnRcbi8vIG9mIGl0LlxuZnVuY3Rpb24gdG9UaW55Q29sb3JGb3JtYXQoY29sb3IsIGZvcm1hdCkge1xuICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgIGNhc2UgJ3JnYic6XG4gICAgICByZXR1cm4gY29sb3IudG9SZ2IoKVxuICAgIGNhc2UgJ3ByZ2InOlxuICAgICAgcmV0dXJuIGNvbG9yLnRvUGVyY2VudGFnZVJnYigpXG4gICAgY2FzZSAnbmFtZSc6XG4gICAgICByZXR1cm4gY29sb3IudG9OYW1lKClcbiAgICBjYXNlICdoc2wnOlxuICAgICAgcmV0dXJuIGNvbG9yLnRvSHNsKClcbiAgICBjYXNlICdoc3YnOlxuICAgICAgcmV0dXJuIGNvbG9yLnRvSHN2KClcbiAgICBjYXNlICdoZXgzJzpcbiAgICAgIHJldHVybiBgIyR7Y29sb3IudG9IZXgodHJ1ZSl9YFxuICAgIGNhc2UgJ2hleDQnOlxuICAgICAgcmV0dXJuIGAjJHtjb2xvci50b0hleDgodHJ1ZSl9YFxuICAgIGNhc2UgJ2hleDgnOlxuICAgICAgcmV0dXJuIGAjJHtjb2xvci50b0hleDgoKX1gXG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICdoZXg2JzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGAjJHtjb2xvci50b0hleCgpfWBcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuJGNvbG9yLXN3YXRjaC13aWR0aDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5LXNpemU7XG4kY29sb3Itc3dhdGNoLXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAkYm9yZGVyLXdpZHRoO1xuXG4uZGl0by1jb2xvciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBpbnB1dCB7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICAgIHBhZGRpbmctcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9uLWNsZWFyIHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gIH1cblxuICAuZGl0by1jb2xvci1waWNrZXIge1xuICAgIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICB9XG5cbiAgLmRpdG8tY29sb3ItcHJldmlldyB7XG4gICAgYmFja2dyb3VuZDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5O1xuICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlO1xuXG4gICAgJixcbiAgICBkaXYge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgd2lkdGg6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1cztcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1cztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50KFxuICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVTY2hlbWFDb21wb25lbnQoKWAuIFRoaXNcbi8vIGNhbiBiZSB1c2VkIHRvIG5lc3QgYXJiaXRyYXJ5IHZ1ZSBjb21wb25lbnRzIGluIHNjaGVtYTpcbi8vIHtcbi8vICAgdHlwZTogJ2NvbXBvbmVudCcsXG4vLyAgIGNvbXBvbmVudDogaW1wb3J0KCcuL2NvbXBvbmVudCcpXG4vLyB9XG5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IHJlc29sdmVTY2hlbWFDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiAoeyBzY2hlbWEgfSkgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hKSB7XG4gICAgYXdhaXQgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8tIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVmFsdWVNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsdWVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnY29tcHV0ZWQnLCAnZGF0YScsICdoaWRkZW4nXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSB0aGlzXG4gICAgICAgICAgaWYgKHNjaGVtYS5kYXRhIHx8IHNjaGVtYS5kYXRhUGF0aCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAndmFsdWUnKVxuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICAgIHRoaXMuZGF0YVt0aGlzLm5hbWVdID0gdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFZhbHVlTWl4aW4uY29tcHV0ZWQudmFsdWUuZ2V0LmNhbGwodGhpcylcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICBWYWx1ZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6Zm9ybWF0PVwiZm9ybWF0c1wiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIClcbiAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcFxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgaXNEYXRlLCBhc3NpZ25EZWVwbHkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydkYXRlJywgJ2RhdGV0aW1lJywgJ3RpbWUnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSxcbiAgICAvLyBUT0RPOiBUaGlzIGlzIG9ubHkgaGVyZSBzbyB3ZSBnZXQgcGxhY2Vob2xkZXIgYWRkZWQuIENvbWUgdXAgd2l0aCBhXG4gICAgLy8gYmV0dGVyIHdheSB0byBzdXBwb3J0IGF0dHJpYnV0ZXMgcGVyIGNvbXBvbmVudCAoYSBsaXN0IG9mIGFjdHVhbGx5XG4gICAgLy8gc3VwcG9ydGVkIGF0dHJpYnV0ZXMpXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGRhdGVWYWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IHZhbHVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZm9ybWF0YCwgb25jZSBgc2NoZW1hLmZvcm1hdCgpYCB3YXMgcmVtb3ZlZCB0b1xuICAgICAgLy8gYGZvcm1hdFZhbHVlKClgLlxuICAgICAgZm9ybWF0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Zvcm1hdHMnLCB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgZ2V0KGZvcm1hdHMpIHtcbiAgICAgICAgICBjb25zdCB7IGRhdGUsIHRpbWUgfSA9IGFzc2lnbkRlZXBseSh7fSwgdGhpcy5hcGkuZm9ybWF0cywgZm9ybWF0cylcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0ZTogWydkYXRlJywgJ2RhdGV0aW1lJ10uaW5jbHVkZXModGhpcy50eXBlKSA/IGRhdGUgOiBudWxsLFxuICAgICAgICAgICAgdGltZTogWyd0aW1lJywgJ2RhdGV0aW1lJ10uaW5jbHVkZXModGhpcy50eXBlKSA/IHRpbWUgOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGU6ICdkYXRlLXBpY2tlcicsXG4gICAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgICBkYXRldGltZTogJ2RhdGUtdGltZS1waWNrZXInXG4gICAgICAgIH1bdHlwZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1ZhbHVlKHsgdmFsdWUgfSkge1xuICAgICAgcmV0dXJuIGlzRGF0ZSh2YWx1ZSkgPyB2YWx1ZS50b0lTT1N0cmluZygpIDogdmFsdWVcbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRRdWVyeShxdWVyeSkge1xuICBjb25zdCBlbnRyaWVzID0gcXVlcnlcbiAgICA/IGlzQXJyYXkocXVlcnkpXG4gICAgICA/IHF1ZXJ5XG4gICAgICA6IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KVxuICAgIDogW11cbiAgcmV0dXJuIChcbiAgICBuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgLy8gRXhwYW5kIGFycmF5IHZhbHVlcyBpbnRvIG11bHRpcGxlIGVudHJpZXMgdW5kZXIgdGhlIHNhbWUga2V5LCBzb1xuICAgICAgLy8gYGZvcm1hdFF1ZXJ5KHsgZm9vOiBbMSwgMl0sIGJhcjogMyB9KWAgPT4gJ2Zvbz0xJmZvbz0yJmJhcj0zJy5cbiAgICAgIGVudHJpZXMucmVkdWNlKFxuICAgICAgICAoZW50cmllcywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAvLyBQcmV2ZW50IG51bGwgb3IgdW5kZWZpbmVkIHZhbHVlcyBmcm9tIGJlY29taW5nIHN0cmluZ3MsXG4gICAgICAgICAgICAgIC8vIGJ1dCBzaW5jZSB0aGV5J3JlIGVudHJpZXMgaW4gYW4gYXJyYXksIHdlIHN0aWxsIGluY2x1ZGUgdGhlbS5cbiAgICAgICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksIHZhbCA/PyAnJ10pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgdmFsdWVdKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZW50cmllc1xuICAgICAgICB9LFxuICAgICAgICBbXVxuICAgICAgKVxuICAgIClcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAvLyBkZWNvZGUgYWxsIHRoZXNlIGVuY29kZWQgY2hhcmFjdGVycyB0byBoYXZlIHRoZSBzYW1lIGJlaGF2aW9yIGFzXG4gICAgICAvLyB2dWUtcm91dGVyJ3Mgb3duIHF1ZXJ5IGVuY29kaW5nLlxuICAgICAgLnJlcGxhY2VBbGwoLyUoPzoyMXwyNHwyOHwyOXwyQ3wyRnwzQXwzQnwzRHwzRnw0MCkvZywgZGVjb2RlVVJJQ29tcG9uZW50KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlUm91dGUoeyBwYXRoLCBxdWVyeSwgaGFzaCB9KSB7XG4gIC8vIFByZXNlcnZlIGBoaXN0b3J5LnN0YXRlYCwgc2VlOlxuICAvLyBodHRwczovL3JvdXRlci52dWVqcy5vcmcvZ3VpZGUvbWlncmF0aW9uLyN1c2FnZS1vZi1oaXN0b3J5LXN0YXRlXG4gIGNvbnN0IHsgbG9jYXRpb24gfSA9IHdpbmRvd1xuICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShcbiAgICBoaXN0b3J5LnN0YXRlLFxuICAgIG51bGwsXG4gICAgYCR7XG4gICAgICBsb2NhdGlvbi5vcmlnaW5cbiAgICB9JHtcbiAgICAgIHBhdGggPz8gbG9jYXRpb24ucGF0aG5hbWVcbiAgICB9PyR7XG4gICAgICBxdWVyeSA/IGZvcm1hdFF1ZXJ5KHF1ZXJ5KSA6IGxvY2F0aW9uLnNlYXJjaC5zbGljZSgxKVxuICAgIH0ke1xuICAgICAgaGFzaCA/PyBsb2NhdGlvbi5oYXNoXG4gICAgfWBcbiAgKVxufVxuIiwiaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyByZXBsYWNlUm91dGUgfSBmcm9tICcuLi91dGlscy9yb3V0ZS5qcydcbmltcG9ydCB7XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYSxcbiAgcHJvY2Vzc0Zvcm1zLFxuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldEJ1dHRvblNjaGVtYXMsXG4gIGhhc0Zvcm1TY2hlbWEsXG4gIGdldEZvcm1TY2hlbWFzLFxuICBnZXRWaWV3U2NoZW1hLFxuICBpc0NvbXBhY3QsXG4gIGlzSW5saW5lZCxcbiAgaXNPYmplY3RTb3VyY2UsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzQXJyYXksXG4gIGlzTnVtYmVyLFxuICBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyByYXcgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW4sIFJlc291cmNlTWl4aW4sIFNjaGVtYVBhcmVudE1peGluXSxcblxuICBkZWZhdWx0VmFsdWU6IGNvbnRleHQgPT4gKGlzTGlzdFNvdXJjZShjb250ZXh0LnNjaGVtYSkgPyBbXSA6IG51bGwpLFxuICAvLyBFeGNsdWRlIGFsbCBzb3VyY2VzIHRoYXQgaGF2ZSB0aGVpciBvd24gcmVzb3VyY2UgaGFuZGxpbmcgdGhlIGRhdGEuXG4gIGV4Y2x1ZGVWYWx1ZTogY29udGV4dCA9PiAhIWNvbnRleHQuc2NoZW1hLnJlc291cmNlLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JhcHBlZFByaW1pdGl2ZXM6IG51bGwsXG4gICAgICB1bndyYXBwaW5nUHJpbWl0aXZlczogcmF3KGZhbHNlKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGlzT2JqZWN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMaXN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzTGlzdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIHNob3VsZFJlbmRlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZURlcHRoIDwgdGhpcy5tYXhEZXB0aFxuICAgIH0sXG5cbiAgICBpc1JlYWR5KCkge1xuICAgICAgLy8gTGlzdHMgdGhhdCBoYXZlIG5vIGRhdGEgYW5kIG5vIGFzc29jaWF0ZWQgcmVzb3VyY2Ugc2hvdWxkIHN0aWxsIHJlbmRlcixcbiAgICAgIC8vIGFzIHRoZXkgbWF5IGJlIGdldHRpbmcgdGhlaXIgZGF0YSBlbHNld2hlcmUsIGUuZy4gYGNvbXB1dGUoKWAuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnNob3VsZFJlbmRlciAmJlxuICAgICAgICAodGhpcy5oYXNEYXRhIHx8ICF0aGlzLnByb3ZpZGVzRGF0YSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNJblZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdDb21wb25lbnRcbiAgICB9LFxuXG4gICAgd3JhcFByaW1pdGl2ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEud3JhcFByaW1pdGl2ZXNcbiAgICB9LFxuXG4gICAgbGlzdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnZhbHVlXG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgICAgLy8gQ29udmVydCB0byBsaXN0IGFycmF5LlxuICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBbZGF0YV0gOiBbXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIGRhdGEgZ2V0cyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIHVud3JhcHBpbmcgaXMgbm90IGhhcHBlbmluZ1xuICAgICAgICAgIC8vIGF0IHRoZSByb290IGluIGBzZXREYXRhKClgLCBidXQgaGVyZSBpbnN0ZWFkLlxuICAgICAgICAgIGRhdGEgPSB0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpIHx8IGRhdGFcbiAgICAgICAgfVxuICAgICAgICBkYXRhIHx8PSBbXVxuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIGlmICh0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzLnZhbHVlKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBkb25lIHVud3JhcHBpbmcgb25jZSBgbGlzdERhdGFgIGlzIHJlZXZhbHVhdGVkLCBzbyBzZXRcbiAgICAgICAgICAgIC8vIHRoaXMgdG8gYGZhbHNlYCBhZ2Fpbi4gU2VlIGB3cmFwcGVkUHJpbWl0aXZlc2Agd2F0Y2hlciBhYm92ZS5cbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzLnZhbHVlID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGEubWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IHZhbHVlXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZFByaW1pdGl2ZXNcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMud3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/IGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gZGF0YVswXVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogZGF0YVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9iamVjdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gQWx3YXlzIGdvIHRocm91Z2ggYGxpc3REYXRhYCBpbnRlcm5hbGx5LCB3aGljaCBkb2VzIGFsbCB0aGVcbiAgICAgICAgLy8gcHJvY2Vzc2luZyBvZiBgd3JhcFByaW1pdGl2ZXNgLCBldGMuXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3REYXRhWzBdIHx8IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEgPSBkYXRhID8gW2RhdGFdIDogW11cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgLy8gVGhlIHNvdXJjZVNjaGVtYSBvZiBhIGxpc3QgaXMgdGhlIGxpc3QncyBzY2hlbWEgaXRzZWxmLlxuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIHNvdXJjZURlcHRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLm1hdGNoZWQucmVkdWNlKFxuICAgICAgICAoZGVwdGgsIHJlY29yZCkgPT4gKFxuICAgICAgICAgIGRlcHRoICsgKHJlY29yZC5tZXRhLnNjaGVtYSA9PT0gdGhpcy5zb3VyY2VTY2hlbWEgPyAxIDogMClcbiAgICAgICAgKSxcbiAgICAgICAgMFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBDaGFuZ2UgdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMsIGJ1dCBkb24ndCB0cmlnZ2VyIGEgcm91dGVcbiAgICAgICAgICAvLyBjaGFuZ2UsIGFzIHRoYXQgd291bGQgY2F1c2UgdGhlIGxpc3QgdG8gcmVsb2FkLlxuICAgICAgICAgIHJlcGxhY2VSb3V0ZSh7IHF1ZXJ5IH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5IC8vIExldCBnZXRTdG9yZUFjY2Vzc29yKCkgZG8gdGhlIGFjdHVhbCBzZXR0aW5nXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB0b3RhbDogZ2V0U3RvcmVBY2Nlc3NvcigndG90YWwnKSxcblxuICAgIGNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLmNvbHVtbnMpXG4gICAgfSxcblxuICAgIHNjb3BlcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuc2NvcGVzKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0U2NvcGUoKSB7XG4gICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICBpZiAodGhpcy5zY29wZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBzY29wZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc2NvcGVzKSkge1xuICAgICAgICAgIGlmIChzY29wZS5kZWZhdWx0U2NvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlyc3RcbiAgICB9LFxuXG4gICAgZGVmYXVsdE9yZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRTb3J0IH0gPSBjb2x1bW5cbiAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGlzU3RyaW5nKGRlZmF1bHRTb3J0KSA/IGRlZmF1bHRTb3J0IDogJ2FzYydcbiAgICAgICAgICAgIHJldHVybiBgJHtjb2x1bW4ubmFtZX0gJHtkaXJlY3Rpb259YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpKVxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBsaW5rZWQgdmlldyBzY2hlbWEgaWYgdGhpcyBzb3VyY2UgZWRpdHMgaXQgaXRzIGl0ZW1zIHRocm91Z2hcbiAgICAvLyBhIGxpbmtlZCB2aWV3LlxuICAgIHZpZXcoKSB7XG4gICAgICByZXR1cm4gZ2V0Vmlld1NjaGVtYSh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld1xuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxhcHNpYmxlICYmIHRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY29sbGFwc2VkKSB7XG4gICAgICAgIHJldHVybiBjb2xsYXBzZWQgJiYgdGhpcy5jb2xsYXBzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4RGVwdGg6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhEZXB0aCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDFcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlOiB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMzM5MyNpc3N1ZWNvbW1lbnQtMTE1ODQ3MDE0OVxuICAgICAgZmx1c2g6ICdwb3N0JyxcbiAgICAgIGhhbmRsZXIodG8sIGZyb20pIHtcbiAgICAgICAgaWYgKHRoaXMucHJvdmlkZXNEYXRhKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZnJvbS5wYXRoID09PSB0by5wYXRoICYmXG4gICAgICAgICAgICBmcm9tLmhhc2ggPT09IHRvLmhhc2hcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFBhdGhzIGFuZCBoYXNoZXMgcmVtYWluIHRoZSBzYW1lLCBzbyBvbmx5IHF1ZXJpZXMgaGF2ZSBjaGFuZ2VkLlxuICAgICAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgICAgIHRoaXMucXVlcnkgPSB0by5xdWVyeVxuICAgICAgICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGhpcy5tZXRhLnJlbG9hZCAmJlxuICAgICAgICAgICAgZnJvbS5wYXRoICE9PSB0by5wYXRoICYmXG4gICAgICAgICAgICBmcm9tLnBhdGguc3RhcnRzV2l0aCh0by5wYXRoKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gUmVsb2FkIHRoZSBzb3VyY2Ugd2hlbiBuYXZpZ2F0aW5nIGJhY2sgdG8gYSBwYXJlbnQtcm91dGUgYWZ0ZXJcbiAgICAgICAgICAgIC8vIGNoYW5naW5nIGRhdGEgaW4gYSBjaGlsZC1yb3V0ZS5cbiAgICAgICAgICAgIHRoaXMubWV0YS5yZWxvYWQgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd3JhcHBlZFByaW1pdGl2ZXM6IHtcbiAgICAgIGRlZXA6IHRydWUsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgLy8gU2tpcCB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIHdyYXBwZWRQcmltaXRpdmVzIGFycmF5XG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBmcm9tICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHdyYXBwZWRQcmltaXRpdmVzIGNoYW5nZSwgbWFwIHRoZWlyIHZhbHVlcyBiYWNrIHRvIHRoZVxuICAgICAgICAgIC8vIGFycmF5IG9mIHByaW1pdGl2ZXMsIGluIGEgcHJpbWl0aXZlIHdheSA6KVxuICAgICAgICAgIC8vIEJ1dCBzZXQgYHVud3JhcHBpbmdQcmltaXRpdmVzYCB0byB0cnVlLCBzbyB0aGUgYGxpc3REYXRhYCBjb21wdXRlZFxuICAgICAgICAgIC8vIHByb3BlcnR5IGtub3dzIGFib3V0IGl0LCB3aGljaCBzZXRzIGl0IHRvIGBmYWxzZWAgYWdhaW4uXG4gICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcy52YWx1ZSA9IHRydWVcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdG8ubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy50b3RhbCA9IDBcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gV2hlbiBuZXcgZGF0YSBpcyBsb2FkZWQsIHdlIGNhbiBzdG9yZSBpdCByaWdodCBiYWNrIGluIHRoZSBkYXRhIG9mIHRoZVxuICAgICAgLy8gdmlldyBvciBmb3JtIHRoYXQgY3JlYXRlZCB0aGlzIGxpc3QgY29tcG9uZW50LlxuICAgICAgLy8gU3VwcG9ydCB0d28gZm9ybWF0cyBmb3IgbGlzdCBkYXRhOlxuICAgICAgLy8gLSBBcnJheTogYFsuLi5dYFxuICAgICAgLy8gLSBPYmplY3Q6IGB7IHJlc3VsdHM6IFsuLi5dLCB0b3RhbCB9YCwgc2VlIGB1bndyYXBMaXN0RGF0YSgpYFxuICAgICAgaWYgKFxuICAgICAgICAhZGF0YSB8fFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJiBpc0FycmF5KGRhdGEpIHx8XG4gICAgICAgIHRoaXMuaXNPYmplY3RTb3VyY2UgJiYgaXNPYmplY3QoZGF0YSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpKSB7XG4gICAgICAgIC8vIFRoZSBmb3JtYXQgZGlkbid0IG1hdGNoLCBzZWUgaWYgd2UgcmVjZWl2ZWQgYSBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyBvYmplY3QsIGluIHdoaWNoIGNhc2UgYHRoaXMudmFsdWVgIHdhcyBhbHJlYWR5IHNldCBieVxuICAgICAgICAvLyBgdW53cmFwTGlzdERhdGEoKWAgYW5kIHdlJ3JlIGRvbmUgbm93LlxuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhKSAmJiB0aGlzLmlzSW5WaWV3KSB7XG4gICAgICAgIC8vIFRoZSBjb250cm9sbGVyIGlzIHNlbmRpbmcgZGF0YSBmb3IgYSBmdWxsIG11bHRpLWNvbXBvbmVudCB2aWV3LFxuICAgICAgICAvLyBpbmNsdWRpbmcgdGhlIG5lc3RlZCBsaXN0IGRhdGEuXG4gICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVud3JhcExpc3REYXRhKGRhdGEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiZcbiAgICAgICAgaXNPYmplY3QoZGF0YSkgJiZcbiAgICAgICAgaXNOdW1iZXIoZGF0YS50b3RhbCkgJiZcbiAgICAgICAgaXNBcnJheShkYXRhLnJlc3VsdHMpXG4gICAgICApIHtcbiAgICAgICAgLy8gSWYgQGRpdG9qcy9zZXJ2ZXIgc2VuZHMgZGF0YSBpbiB0aGUgZm9ybSBvZiBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIHJlc3VsdCwgYnV0IHJlbWVtYmVyIHRoZSB0b3RhbCBpbiB0aGUgc3RvcmUuXG4gICAgICAgIHRoaXMudG90YWwgPSBkYXRhLnRvdGFsXG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhLnJlc3VsdHNcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKVxuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gaXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9wZW5TY2hlbWFDb21wb25lbnQoLTEpKVxuICAgICAgfVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICByZXR1cm4gaXRlbVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtKGl0ZW0sIGluZGV4KSB7XG4gICAgICBsZXQgcmVtb3ZlZCA9IGZhbHNlXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBudWxsXG4gICAgICAgIHJlbW92ZWQgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgbGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIHJlbW92ZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlSXRlbVN0b3JlKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gKFxuICAgICAgICBpdGVtICYmXG4gICAgICAgIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCBpdGVtLCB7XG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgZXh0ZW5kZWQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIClcblxuICAgICAgY29uc3Qgbm90aWZ5ID0gKCkgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6IHRoaXMuaXNUcmFuc2llbnQgPyAnaW5mbycgOiAnc3VjY2VzcycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgYCR7bGFiZWx9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgIF1cbiAgICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICBpdGVtICYmXG4gICAgICAgIHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLmRlbGV0ZX0gJHtsYWJlbH0/YFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgaW5kZXgpXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgICAgY29uc3QgbWV0aG9kID0gJ2RlbGV0ZSdcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKFxuICAgICAgICAgICAgaXRlbUlkLFxuICAgICAgICAgICAgdGhpcy5nZXRSZXNvdXJjZSh7IG1ldGhvZCB9KVxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZCwgcmVzb3VyY2UgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgaW5kZXgpXG4gICAgICAgICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzY2hlbWFDb21wb25lbnRzXG4gICAgICByZXR1cm4gc2NoZW1hQ29tcG9uZW50c1soKGluZGV4ICUgbGVuZ3RoKSArIGxlbmd0aCkgJSBsZW5ndGhdXG4gICAgfSxcblxuICAgIG9wZW5TY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KVxuICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZVRvQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFQYXRoLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgICA/IHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGguc2xpY2UodGhpcy5kYXRhUGF0aC5sZW5ndGggKyAxKSlbMF0gPz8gbnVsbFxuICAgICAgICAgICAgOiAwXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCAmJiBpc051bWJlcigraW5kZXgpKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoK2luZGV4KVxuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3BlbmVkIH0gPSBzY2hlbWFDb21wb25lbnRcbiAgICAgICAgICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPiAwICYmIChvbkNvbXBsZXRlPy4oY29tcG9uZW50cykgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSBvcGVuZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSlcbiAgICB9LFxuXG4gICAgbmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsT25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGNvbXBvbmVudCB0aGF0XG4gICAgICAgICAgLy8gd2UganVzdCBuYXZpZ2F0ZWQgdG8sIGFuZCBwYXNzIGl0IG9uIHRvIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgICAgICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50c1tyb3V0ZUNvbXBvbmVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICByZXNvbHZlKG9uQ29tcGxldGU/Lihbcm91dGVDb21wb25lbnRdKSA/PyB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHJvdXRlIHRoYXQgY2FuIHNlcnZlIHBhcnQgb2YgdGhlIGdpdmVuIGRhdGFQYXRoLFxuICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKFxuICAgICAgICAgICAgdGhpcy5hcGkubm9ybWFsaXplUGF0aChub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aFBhcnRzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFjdHVhbGx5IGlzIGEgcm91dGUgZm9yIHRoaXMgc3ViLWNvbXBvbmVudDpcbiAgICAgICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlci5yZXNvbHZlKHBhdGgpXG4gICAgICAgICAgaWYgKG1hdGNoZWQubGVuZ3RoICYmIG1hdGNoZWRbMF0ubmFtZSAhPT0gJ2NhdGNoLWFsbCcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiRyb3V0ZS5wYXRoID09PSBwYXRoKSB7XG4gICAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgdGhlcmUsIHNvIGp1c3QgY2FsbCBgb25Db21wbGV0ZSgpYDpcbiAgICAgICAgICAgICAgY2FsbE9uQ29tcGxldGUoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIGNvbXBvbmVudCdzIHBhdGgsIHRoZW4gY2FsbCBgb25Db21wbGV0ZSgpYF86XG4gICAgICAgICAgICAgIHRoaXMuJHJvdXRlclxuICAgICAgICAgICAgICAgIC5wdXNoKHsgcGF0aCB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChyZWplY3QpXG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGxhc3Qgcm91dGUgY29tcG9uZW50IHRvIGJlIG1vdW50ZWQgaW4gdGhlIG5leHRcbiAgICAgICAgICAgICAgICAvLyB0aWNrIGJlZm9yZSBjYWxsaW5nIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soY2FsbE9uQ29tcGxldGUpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBLZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG4gIH0sIC8vIGVuZCBvZiBgbWV0aG9kc2BcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgICBjb25zdCBpbmxpbmVkID0gaXNJbmxpbmVkKHNjaGVtYSlcbiAgICBpZiAoaW5saW5lZCAmJiBzY2hlbWEucmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE5lc3RlZCAke1xuICAgICAgICAgIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/ICdsaXN0cydcbiAgICAgICAgICAgIDogdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgICA/ICdvYmplY3RzJ1xuICAgICAgICAgICAgICA6ICdzY2hlbWEnXG4gICAgICAgIH0gY2Fubm90IGxvYWQgZGF0YSBmcm9tIHRoZWlyIG93biByZXNvdXJjZXNgXG4gICAgICApXG4gICAgfVxuICAgIC8vIFVzZSBkaWZmZXJlbnRseSBuYW1lZCB1cmwgcGFyYW1ldGVycyBvbiBlYWNoIG5lc3RlZCBsZXZlbCBmb3IgaWQgYXNcbiAgICAvLyBvdGhlcndpc2UgdGhleSB3b3VsZCBjbGFzaCBhbmQgb3ZlcnJpZGUgZWFjaCBvdGhlciBpbnNpZGUgJHJvdXRlLnBhcmFtc1xuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICBjb25zdCBwYXJhbSA9IGBpZCR7bGV2ZWwgKyAxfWBcbiAgICBjb25zdCBtZXRhID0ge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICAgIGNvbnN0IGZvcm1NZXRhID0ge1xuICAgICAgLi4ubWV0YSxcbiAgICAgIC8vIFdoZW4gY2hpbGRyZW4gYXJlIGZsYXR0ZW5lZCAoZS5nLiB0cmVlLWxpc3RzKSwgaW5jbHVkZSB0aGUgYGZsYXR0ZW5gXG4gICAgICAvLyBzZXR0aW5nIGFsc28sIGZvciBmbGF0dGVuaW5nIGJlbG93LlxuICAgICAgZmxhdHRlbixcbiAgICAgIG5lc3RlZCxcbiAgICAgIHBhcmFtXG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUm91dGVzID0gYXdhaXQgcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbClcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgYXdhaXQgcHJvY2VzcyhjaGlsZFJvdXRlcywgbGV2ZWwgKyAxKVxuICAgIH1cbiAgICAvLyBJbmxpbmVkIGZvcm1zIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgYWRkIHJvdXRlcy5cbiAgICBpZiAoaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmICFpbmxpbmVkKSB7XG4gICAgICAvLyBMaXN0cyBpbiBzaW5nbGUtY29tcG9uZW50LXZpZXdzIChsZXZlbCA9PT0gMCkgdXNlIHRoZWlyIHZpZXcncyBwYXRoLFxuICAgICAgLy8gd2hpbGUgYWxsIG90aGVycyBuZWVkIHRoZWlyIHBhdGggcHJlZml4ZWQgd2l0aCB0aGUgcGFyZW50J3MgcGF0aDpcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBsZXZlbCA9PT0gMCA/ICcnIDogc2NoZW1hLnBhdGhcbiAgICAgIGNvbnN0IGZvcm1Sb3V0ZSA9IHtcbiAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShcbiAgICAgICAgICBzb3VyY2VQYXRoLFxuICAgICAgICAgIC8vIE9iamVjdCBzb3VyY2VzIGRvbid0IG5lZWQgaWQgcGFyYW1zIGluIHRoZWlyIGZvcm0gcGF0aHMsIGFzIHRoZXlcbiAgICAgICAgICAvLyBkaXJlY3RseSBlZGl0IG9uZSBvYmplY3QuXG4gICAgICAgICAgaXNMaXN0U291cmNlKHNjaGVtYSkgPyBwYXJhbSA6IG51bGxcbiAgICAgICAgKSxcbiAgICAgICAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudChcbiAgICAgICAgICBuZXN0ZWQgPyAnRGl0b0Zvcm1OZXN0ZWQnIDogJ0RpdG9Gb3JtJ1xuICAgICAgICApLFxuICAgICAgICBtZXRhOiBmb3JtTWV0YVxuICAgICAgfVxuICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHNjaGVtYSkpIHtcbiAgICAgICAgLy8gQWxzbyBhZGQgYSBwYXJhbSByb3V0ZSwgc2ltcGx5IHRvIGhhbmRsZSAnL2NyZWF0ZScgbGlua3MgdGhlIHNhbWVcbiAgICAgICAgLy8gd2F5IHRoYXQgbGlzdHMgZG8sIHdoZXJlIGl0IG92ZXJsYXBzIHdpdGggOmlkIGZvciBpdGVtIGlkcy5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIC4uLmZvcm1Sb3V0ZSxcbiAgICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIHBhcmFtKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZVBhdGgpIHtcbiAgICAgICAgLy8gSnVzdCByZWRpcmVjdCBiYWNrIHRvIHRoZSBwYXJlbnQgd2hlbiBhIG5lc3RlZCBzb3VyY2Ugcm91dGUgaXMgaGl0LlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgcGF0aDogc291cmNlUGF0aCxcbiAgICAgICAgICByZWRpcmVjdDogJy4nLFxuICAgICAgICAgIG1ldGFcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIFBhcnRpdGlvbiBjaGlsZFJvdXRlcyBpbnRvIHRob3NlIHRoYXQgbmVlZCBmbGF0dGVuaW5nIChlLmcuIHRyZWUtbGlzdHMpXG4gICAgICAvLyBhbmQgdGhvc2UgdGhhdCBkb24ndCwgYW5kIHByb2Nlc3MgZWFjaCBncm91cCBzZXBhcmF0ZWx5IGFmdGVyLlxuICAgICAgY29uc3QgW2ZsYXRSb3V0ZXMsIHN1YlJvdXRlc10gPSBjaGlsZFJvdXRlcy5yZWR1Y2UoXG4gICAgICAgIChyZXMsIHJvdXRlKSA9PiB7XG4gICAgICAgICAgcmVzW3JvdXRlLm1ldGEuZmxhdHRlbiA/IDAgOiAxXS5wdXNoKHJvdXRlKVxuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfSxcbiAgICAgICAgW1tdLCBbXV1cbiAgICAgIClcbiAgICAgIGlmIChzdWJSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvcm1Sb3V0ZS5jaGlsZHJlbiA9IHN1YlJvdXRlc1xuICAgICAgfVxuICAgICAgcm91dGVzLnB1c2goZm9ybVJvdXRlKVxuICAgICAgLy8gQWRkIHRoZSBwcmVmaXhlZCBmb3JtUm91dGVzIHdpdGggdGhlaXIgY2hpbGRyZW4gZm9yIG5lc3RlZCBsaXN0cy5cbiAgICAgIGlmIChmbGF0Um91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgZmxhdFJvdXRlcykge1xuICAgICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLihjaGlsZFJvdXRlLnJlZGlyZWN0ID8gY2hpbGRSb3V0ZSA6IGZvcm1Sb3V0ZSksXG4gICAgICAgICAgICBwYXRoOiBgJHtmb3JtUm91dGUucGF0aH0vJHtjaGlsZFJvdXRlLnBhdGh9YCxcbiAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgLi4uY2hpbGRSb3V0ZS5tZXRhLFxuICAgICAgICAgICAgICBmbGF0dGVuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoeyBzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCB9LCBncmFwaCkge1xuICAgIGdyYXBoLmFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBhdGhXaXRoUGFyYW0ocGF0aCwgcGFyYW0pIHtcbiAgcmV0dXJuIHBhcmFtXG4gICAgPyBwYXRoXG4gICAgICA/IGAke3BhdGh9Lzoke3BhcmFtfWBcbiAgICAgIDogYDoke3BhcmFtfWBcbiAgICA6IHBhdGhcbn1cbiIsImltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgcHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzIH0gZnJvbSAnLi9zY2hlbWEnXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJDb21wb25lbnRzID0ge1xuICAndGV4dCcoZmlsdGVyKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdjb250YWlucycsXG4gICAgICAgIHZhbHVlOiAnY29udGFpbnMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VxdWFscycsXG4gICAgICAgIHZhbHVlOiAnZXF1YWxzJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdzdGFydHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnc3RhcnRzLXdpdGgnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VuZHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnZW5kcy13aXRoJ1xuICAgICAgfVxuICAgIF1cbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvcnNcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgIHdpZHRoOiAnMi81JyxcbiAgICAgICAgICAgIG9wdGlvbnM6IGlzQXJyYXkoZmlsdGVyLm9wZXJhdG9ycylcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIG9wdGlvbiA9PiBmaWx0ZXIub3BlcmF0b3JzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogb3B0aW9ucyxcbiAgICAgICAgICAgIGNsZWFyYWJsZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsLFxuICAgICAgdGV4dDoge1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIHdpZHRoOiBmaWx0ZXIub3BlcmF0b3JzID8gJzMvNScgOiAnZmlsbCcsXG4gICAgICAgIGNsZWFyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAnZGF0ZS1yYW5nZScoKSB7XG4gICAgY29uc3QgZGF0ZXRpbWUgPSB7XG4gICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgd2lkdGg6ICcxLzInLFxuICAgICAgZm9ybWF0czoge1xuICAgICAgICAvLyBVc2Ugc2hvcnRlciBkYXRlIGZvcm1hdCBpbiBkYXRlLXJhbmdlIGZpbHRlcnM6XG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiBkYXRldGltZSxcbiAgICAgIHRvOiBkYXRldGltZVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmlsdGVyc1BhbmVsKGFwaSwgZmlsdGVycywgZGF0YVBhdGgsIHF1ZXJ5KSB7XG4gIGNvbnN0IHsgc3RpY2t5LCAuLi5maWx0ZXJTY2hlbWFzIH0gPSBmaWx0ZXJzXG4gIGNvbnN0IHBhbmVsID0ge1xuICAgIHR5cGU6ICdwYW5lbCcsXG4gICAgbGFiZWw6ICdGaWx0ZXJzJyxcbiAgICBuYW1lOiAnJGZpbHRlcnMnLFxuICAgIC8vIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIHN0aWNreSxcblxuICAgIC8vIE5PVEU6IE9uIHBhbmVscywgdGhlIGRhdGEoKSBjYWxsYmFjayBkb2VzIHNvbWV0aGluZyBlbHNlIHRoYW4gb24gbm9ybWFsXG4gICAgLy8gc2NoZW1hOiBJdCBwcm9kdWNlcyB0aGUgYGRhdGFgIHByb3BlcnR5IHRvIGJlIHBhc3NlZCB0byB0aGUgcGFuZWwnc1xuICAgIC8vIHNjaGVtYSwgbm90IHRoZSBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSBwYW5lbCBjb21wb25lbnQgZGlyZWN0bHkuXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiBwYXJzZUZpbHRlcnNEYXRhKFxuICAgICAgICBwYW5lbCxcbiAgICAgICAgcXVlcnkudmFsdWVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgY29tcG9uZW50czogY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMoZmlsdGVyU2NoZW1hcyksXG4gICAgYnV0dG9uczogY3JlYXRlRmlsdGVyc0J1dHRvbnMoZmFsc2UpLFxuICAgIHBhbmVsQnV0dG9uczogY3JlYXRlRmlsdGVyc0J1dHRvbnModHJ1ZSksXG5cbiAgICBldmVudHM6IHtcbiAgICAgIGNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgZmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdEZpbHRlcnNEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICB9LFxuXG4gICAgICBoYXNGaWx0ZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJzLmxlbmd0aCA+IDBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgYXBwbHlGaWx0ZXJzKCkge1xuICAgICAgICBxdWVyeS52YWx1ZSA9IHtcbiAgICAgICAgICAuLi5xdWVyeS52YWx1ZSxcbiAgICAgICAgICBmaWx0ZXI6IHRoaXMuZmlsdGVycyxcbiAgICAgICAgICAvLyBDbGVhciBwYWdpbmF0aW9uIHdoZW4gYXBwbHlpbmcgb3IgY2xlYXJpbmcgZmlsdGVyczpcbiAgICAgICAgICBwYWdlOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgY2xlYXJGaWx0ZXJzKCkge1xuICAgICAgICB0aGlzLnJlc2V0RGF0YSgpXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzKGFwaSwgcGFuZWwpXG4gIHJldHVybiBwYW5lbFxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXJzQnV0dG9ucyhzbWFsbCkge1xuICByZXR1cm4ge1xuICAgIGNsZWFyOiB7XG4gICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgIHRleHQ6IHNtYWxsID8gbnVsbCA6ICdDbGVhcicsXG4gICAgICBkaXNhYmxlZDogKHsgc2NoZW1hQ29tcG9uZW50IH0pID0+ICFzY2hlbWFDb21wb25lbnQuaGFzRmlsdGVycyxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgLy8gU2luY2UgcGFuZWwgYnV0dG9ucyBhcmUgb3V0c2lkZSBvZiB0aGUgc2NoZW1hLCB3ZSBuZWVkIHRvIHVzZSB0aGVcbiAgICAgICAgICAvLyBzY2hlbWEgY29tcG9uZW50IHJlY2VpdmVkIGZyb20gdGhlIGluaXRpYWxpemUgZXZlbnQgYmVsb3c6XG4gICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmNsZWFyRmlsdGVycygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3VibWl0OiB7XG4gICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgIHRleHQ6IHNtYWxsID8gbnVsbCA6ICdGaWx0ZXInLFxuICAgICAgdmlzaWJsZTogIXNtYWxsLFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREYXRhTmFtZShmaWx0ZXJOYW1lKSB7XG4gIC8vIFByZWZpeCBmaWx0ZXIgZGF0YSBrZXlzIHdpdGggJyQnIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIGRhdGEga2V5czpcbiAgcmV0dXJuIGAkJHtmaWx0ZXJOYW1lfWBcbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyTmFtZShkYXRhTmFtZSkge1xuICByZXR1cm4gZGF0YU5hbWUuc3RhcnRzV2l0aCgnJCcpID8gZGF0YU5hbWUuc2xpY2UoMSkgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpIHtcbiAgY29uc3QgY29tcHMgPSB7fVxuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBPYmplY3QudmFsdWVzKGdldE5hbWVkU2NoZW1hcyhmaWx0ZXJzKSB8fCB7fSkpIHtcbiAgICAvLyBTdXBwb3J0IGJvdGggY3VzdG9tIGZvcm1zIGFuZCBkZWZhdWx0IGZpbHRlciBjb21wb25lbnRzLCB0aHJvdWdoIHRoZVxuICAgIC8vIGBmaWx0ZXJDb21wb25lbnRzYCByZWdpc3RyeS4gRXZlbiBmb3IgZGVmYXVsdCBmaWx0ZXJzLCBzdGlsbCB1c2UgdGhlXG4gICAgLy8gcHJvcGVydGllcyBpbiBgZmlsdGVyYCBhcyB0aGUgYmFzZSBmb3IgYGZvcm1gLCBzbyB0aGluZ3MgbGlrZSBgbGFiZWxgXG4gICAgLy8gY2FuIGJlIGNoYW5nZWQgb24gdGhlIHJlc3VsdGluZyBmb3JtLlxuICAgIGNvbnN0IHsgZmlsdGVyOiB0eXBlLCB3aWR0aCwgLi4uZm9ybSB9ID0gZmlsdGVyXG4gICAgY29uc3QgY29tcG9uZW50cyA9IHR5cGVcbiAgICAgID8gZmlsdGVyQ29tcG9uZW50c1t0eXBlXT8uKGZpbHRlcilcbiAgICAgIDogZmlsdGVyLmNvbXBvbmVudHNcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9ybS50eXBlID0gJ2Zvcm0nXG4gICAgICBmb3JtLmNvbXBvbmVudHMgPSB7fVxuICAgICAgLy8gQ29udmVydCBsYWJlbHMgdG8gcGxhY2Vob2xkZXJzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGNvbXBvbmVudC5sYWJlbCB8fCBsYWJlbGl6ZShjb21wb25lbnQubmFtZSB8fCBrZXkpXG4gICAgICAgICAgZm9ybS5jb21wb25lbnRzW2tleV0gPSB7XG4gICAgICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFiZWxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbXBzW2dldERhdGFOYW1lKGZpbHRlci5uYW1lKV0gPSB7XG4gICAgICAgIGxhYmVsOiBmb3JtLmxhYmVsID8/IGxhYmVsaXplKGZpbHRlci5uYW1lKSxcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLFxuICAgICAgICBmb3JtLFxuICAgICAgICBpbmxpbmVkOiB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgZmlsdGVyICcke2ZpbHRlci5uYW1lfSc6IFVua25vd24gZmlsdGVyIHR5cGUgJyR7dHlwZX0nLmBcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbXBzXG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBkYXRhTmFtZSkge1xuICBjb25zdCBjb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50c1tkYXRhTmFtZV1cbiAgcmV0dXJuIGNvbXBvbmVudD8uZm9ybT8uY29tcG9uZW50c1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGaWx0ZXJzRGF0YShzY2hlbWEsIGRhdGEpIHtcbiAgY29uc3QgZmlsdGVycyA9IFtdXG4gIGZvciAoY29uc3QgZGF0YU5hbWUgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVudHJ5ID0gZGF0YVtkYXRhTmFtZV1cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIC8vIE1hcCBjb21wb25lbnRzIHNlcXVlbmNlIHRvIGFyZ3VtZW50czpcbiAgICAgIGNvbnN0IGFyZ3MgPSBPYmplY3Qua2V5cyhcbiAgICAgICAgZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIGRhdGFOYW1lKVxuICAgICAgKS5tYXAoXG4gICAgICAgIGtleSA9PiBlbnRyeVtrZXldID8/IG51bGxcbiAgICAgIClcbiAgICAgIC8vIE9ubHkgYXBwbHkgZmlsdGVyIGlmIHRoZXJlIGFyZSBzb21lIGFyZ3VtZW50cyB0aGF0IGFyZW4ndCBudWxsOlxuICAgICAgaWYgKGFyZ3Muc29tZSh2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgZ2V0RmlsdGVyTmFtZShkYXRhTmFtZSlcbiAgICAgICAgICB9OiR7XG4gICAgICAgICAgICBhcmdzLm1hcChKU09OLnN0cmluZ2lmeSkuam9pbignLCcpXG4gICAgICAgICAgfWBcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsdGVyc1xufVxuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcnNEYXRhKHNjaGVtYSwgcXVlcnkpIHtcbiAgY29uc3QgZmlsdGVycyA9IHt9XG4gIC8vIFNhbWUgYXMgQGRpdG9qcy9zZXJ2ZXIncyBRdWVyeVBhcmFtZXRlcnMuZmlsdGVyOiBUcmFuc2xhdGUgdGhlIHN0cmluZyBkYXRhXG4gIC8vIGZyb20gJHJvdXRlLnF1ZXJ5IGJhY2sgdG8gcGFyYW0gbGlzdHMgcGVyIGZpbHRlcjpcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgYXNBcnJheShxdWVyeS5maWx0ZXIpKSB7XG4gICAgICBjb25zdCBbLCBmaWx0ZXJOYW1lLCBqc29uXSA9IGZpbHRlci5tYXRjaCgvXihcXHcrKTooLiopJC8pXG4gICAgICB0cnkge1xuICAgICAgICBmaWx0ZXJzW2ZpbHRlck5hbWVdID0gYXNBcnJheShKU09OLnBhcnNlKGBbJHtqc29ufV1gKSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIH1cbiAgfVxuICBjb25zdCBmaWx0ZXJzRGF0YSA9IHt9XG4gIGZvciAoY29uc3QgZGF0YU5hbWUgaW4gc2NoZW1hLmNvbXBvbmVudHMpIHtcbiAgICBjb25zdCBkYXRhID0ge31cbiAgICAvLyBJZiB3ZSBoYXZlIHJldHJpZXZlZCBwYXJhbXMgZnJvbSB0aGUgcXVlcnksIGZldGNoIHRoZSBhc3NvY2lhdGVkXG4gICAgLy8gZm9ybSBjb21wb25lbnRzIHNvIHdlIGNhbiBtYXAgdGhlIHZhbHVlcyBiYWNrIHRvIG9iamVjdCBrZXlzOlxuICAgIGNvbnN0IGFyZ3MgPSBmaWx0ZXJzW2dldEZpbHRlck5hbWUoZGF0YU5hbWUpXVxuICAgIGlmIChhcmdzKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIGRhdGFOYW1lKVxuICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgbGV0IGluZGV4ID0gMFxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gYXJnc1tpbmRleCsrXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZpbHRlcnNEYXRhW2RhdGFOYW1lXSA9IGRhdGFcbiAgfVxuICByZXR1cm4gZmlsdGVyc0RhdGFcbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1saXN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbilcbiAgLmRpdG8tbGlzdF9faGVhZGVyKFxuICAgIHYtaWY9XCJzY29wZXMgfHwgaGFzUGFnaW5hdGlvblwiXG4gIClcbiAgICBEaXRvU2NvcGVzKFxuICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICApXG4gICAgLy8tIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAvLy0gZGl2LCBmb3IgdGhlIGxheW91dCBub3QgdG8gYnJlYWsuLi5cbiAgICAuZGl0by1zcGFjZXIoXG4gICAgICB2LWVsc2UtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICApXG4gICAgRGl0b1BhZ2luYXRpb24oXG4gICAgICB2LWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICA6dG90YWw9XCJ0b3RhbCB8fCAwXCJcbiAgICApXG4gIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtYWx0ZXJuYXRlLWNvbG9ycyc6ICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgfWBcbiAgKVxuICAgIERpdG9UYWJsZUhlYWQoXG4gICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6Y29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgOmhhc0VkaXRCdXR0b25zPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgIClcbiAgICBEaXRvRHJhZ2dhYmxlKFxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgOm9wdGlvbnM9XCJnZXREcmFnZ2FibGVPcHRpb25zKClcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6bW9kZWxWYWx1ZT1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgQHVwZGF0ZTptb2RlbFZhbHVlPVwidmFsdWUgPT4gKGxpc3REYXRhID0gdmFsdWUpXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGxpc3REYXRhXCJcbiAgICAgICAgOmlkPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoc2NoZW1hLCBpdGVtKVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgRGl0b1RhYmxlQ2VsbChcbiAgICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmtleT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0Q2VsbENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICApXG4gICAgICAgICAgdGRcbiAgICAgICAgICAgIERpdG9TY2hlbWFJbmxpbmVkKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldEl0ZW1TdG9yZShzY2hlbWEsIGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29tcG9uZW50KFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmlzPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4IH0pXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICB2LWlmPVwiaGFzQ2VsbEVkaXRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIERpdG9FZGl0QnV0dG9ucyhcbiAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cImdldEl0ZW1TdG9yZShzY2hlbWEsIGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgIClcbiAgICAvLy0gUmVuZGVyIGNyZWF0ZSBidXR0b25zIGluc2lkZSB0YWJsZSB3aGVuIG5vdCBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICB0Zm9vdChcbiAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiAhc2luZ2xlXCJcbiAgICApXG4gICAgICB0clxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKDpjb2xzcGFuPVwibnVtQ29sdW1uc1wiKVxuICAgICAgICAgIERpdG9FZGl0QnV0dG9ucyhcbiAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgICAgICApXG4gIC8vLSBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICBEaXRvRWRpdEJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1zdGlja3koXG4gICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmIHNpbmdsZVwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0Vmlld0VkaXRQYXRoLFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50LFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBjcmVhdGVGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xpc3QnLCB7XG4gIG1peGluczogW1NvdXJjZU1peGluLCBTb3J0YWJsZU1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgZ2V0UGFuZWxTY2hlbWEoYXBpLCBzY2hlbWEsIGRhdGFQYXRoLCBjb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRmlsdGVyc1BhbmVsKFxuICAgICAgICBhcGksXG4gICAgICAgIGZpbHRlcnMsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAvLyBQYXNzIGEgY29tcHV0ZWQgdmFsdWUgdG8gZ2V0IC8gc2V0IHRoZSBxdWVyeSwgc2VlIGdldEZpbHRlcnNQYW5lbCgpXG4gICAgICAgIGNvbXB1dGVkKHtcbiAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50LnF1ZXJ5XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIHNldChxdWVyeSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCB1bmRlZmluZWQgdmFsdWVzIGZvciBjb21wYXJpbmcgd2l0aCBlcXVhbHMoKVxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gb2JqID0+IHBpY2tCeShvYmosIHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBpZiAoIWVxdWFscyhmaWx0ZXIocXVlcnkpLCBmaWx0ZXIoY29tcG9uZW50LnF1ZXJ5KSkpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LnF1ZXJ5ID0gcXVlcnlcbiAgICAgICAgICAgICAgY29tcG9uZW50LmxvYWREYXRhKGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBoYXNQYWdpbmF0aW9uKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5wYWdpbmF0ZVxuICAgIH0sXG5cbiAgICBoYXNMaXN0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhISh0aGlzLmJ1dHRvblNjaGVtYXMgfHwgdGhpcy5jcmVhdGFibGUpXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGlzdERhdGEubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgdGhpcy5lZGl0YWJsZSB8fFxuICAgICAgICAgIHRoaXMuZGVsZXRhYmxlIHx8XG4gICAgICAgICAgdGhpcy5kcmFnZ2FibGVcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDZWxsRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNJbmxpbmVkICYmIHRoaXMuaGFzRWRpdEJ1dHRvbnNcbiAgICB9LFxuXG4gICAgaGFzRXZlbkNvdW50KCkge1xuICAgICAgcmV0dXJuICEodGhpcy5saXN0RGF0YS5sZW5ndGggJSAyKVxuICAgIH0sXG5cbiAgICBudW1Db2x1bW5zKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY29sdW1ucyA/IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucykubGVuZ3RoIDogMSkgK1xuICAgICAgICAodGhpcy5oYXNDZWxsRWRpdEJ1dHRvbnMgPyAxIDogMClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERhdGFQYXRoKGluZGV4KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgfSxcblxuICAgIGdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBnZXRWaWV3RWRpdFBhdGgodGhpcy5zY2hlbWEsIGlkLCB0aGlzLmNvbnRleHQpIHx8XG4gICAgICAgICAgYCR7dGhpcy5wYXRofS8ke2lkfWBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q2VsbENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNlbGwtJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0Q29udGV4dChpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgZGF0YVBhdGg6IHRoaXMuZ2V0RGF0YVBhdGgoaW5kZXgpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZpbHRlckVycm9ycyhlcnJvcnMpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnNEYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsICckZmlsdGVycycpXG4gICAgICBjb25zdCBwYW5lbCA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldFBhbmVsQnlEYXRhUGF0aChmaWx0ZXJzRGF0YVBhdGgpXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWwuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSxcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYS5jb2x1bW5zKSxcbiAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgIGFwaSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsLFxuICAgICAgICBuZXN0ZWQsXG4gICAgICAgIGZsYXR0ZW4sXG4gICAgICAgIHByb2Nlc3NcbiAgICAgIClcbiAgICBdKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbGlzdCB7XG4gICRzZWxmOiAmO1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmX19oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIHBhZGRpbmctYm90dG9tOiAkY29udGVudC1wYWRkaW5nLWhhbGY7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAmOmVtcHR5IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgLmRpdG8tc2NvcGVzLFxuICAgIC5kaXRvLXBhZ2luYXRpb24ge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1zaW5nbGUge1xuICAgIC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbTpcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnQ7XG4gICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgLy8gTWFrZSBzaW5nbGUgbGlzdCBoZWFkZXIsIG5hdmlnYXRpb24gYW5kIGJ1dHRvbnMgc3RpY2t5IHRvIHRoZSB0b3AgYW5kXG4gICAgLy8gYm90dG9tOlxuICAgICN7JHNlbGZ9X19oZWFkZXIge1xuICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgIHRvcDogMDtcbiAgICAgIG1hcmdpbi10b3A6IC0kY29udGVudC1wYWRkaW5nO1xuICAgICAgcGFkZGluZy10b3A6ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgei1pbmRleDogMTtcblxuICAgICAgKyAuZGl0by10YWJsZSB7XG4gICAgICAgIC5kaXRvLXRhYmxlLWhlYWQge1xuICAgICAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICAgICAgdG9wOiBjYWxjKCRpbnB1dC1oZWlnaHQgKyAkY29udGVudC1wYWRkaW5nICsgJGNvbnRlbnQtcGFkZGluZy1oYWxmKTtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuRGl0b0xhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KFxuICA6bGFiZWw9XCJ2YWx1ZVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGFiZWwnLCB7XG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2Vcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1sYWJlbC1jb21wb25lbnQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDJlbTtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbWFya3VwKDppZD1cImRhdGFQYXRoXCIpXG4gIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICApXG4gICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICA6a2V5PVwibmFtZVwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4gICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgKVxuICAgICAgICBJY29uKDpuYW1lPVwiaWNvblwiKVxuICBFZGl0b3JDb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICByZWY9XCJlZGl0b3JcIlxuICAgIDplZGl0b3I9XCJlZGl0b3JcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gIClcbiAgLmRpdG8tcmVzaXplKFxuICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDb250ZW50LCBNYXJrLCBnZXRNYXJrQXR0cmlidXRlcyB9IGZyb20gJ0B0aXB0YXAvdnVlLTMnXG4vLyBpbXBvcnQgeyB0b2dnbGVNYXJrIH0gZnJvbSAndGlwdGFwLWNvbW1hbmRzJ1xuLy8gRXNzZW50aWFsczpcbmltcG9ydCB7IERvY3VtZW50IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tZG9jdW1lbnQnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGV4dCdcbi8vIE1hcmtzOlxuaW1wb3J0IHsgQm9sZCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJvbGQnXG5pbXBvcnQgeyBDb2RlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZSdcbmltcG9ydCB7IEl0YWxpYyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWl0YWxpYydcbmltcG9ydCB7IExpbmsgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1saW5rJ1xuaW1wb3J0IHsgU3RyaWtlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tc3RyaWtlJ1xuaW1wb3J0IHsgU3Vic2NyaXB0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tc3Vic2NyaXB0J1xuaW1wb3J0IHsgU3VwZXJzY3JpcHQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1zdXBlcnNjcmlwdCdcbmltcG9ydCB7IFVuZGVybGluZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXVuZGVybGluZSdcbi8vIE5vZGVzOlxuaW1wb3J0IHsgQmxvY2txdW90ZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJsb2NrcXVvdGUnXG5pbXBvcnQgeyBDb2RlQmxvY2sgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2RlLWJsb2NrJ1xuaW1wb3J0IHsgSGFyZEJyZWFrIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGFyZC1icmVhaydcbmltcG9ydCB7IEhlYWRpbmcgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oZWFkaW5nJ1xuaW1wb3J0IHsgUGFyYWdyYXBoIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tcGFyYWdyYXBoJ1xuaW1wb3J0IHsgSG9yaXpvbnRhbFJ1bGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ob3Jpem9udGFsLXJ1bGUnXG5pbXBvcnQgeyBPcmRlcmVkTGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLW9yZGVyZWQtbGlzdCdcbmltcG9ydCB7IEJ1bGxldExpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1idWxsZXQtbGlzdCdcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbGlzdC1pdGVtJ1xuLy8gRm9vdG5vdGVzOlxuaW1wb3J0IHsgRm9vdG5vdGVzLCBGb290bm90ZVJlZmVyZW5jZSwgRm9vdG5vdGUgfSBmcm9tICd0aXB0YXAtZm9vdG5vdGVzJ1xuLy8gVE9ETzpcbi8vIGltcG9ydCB7IEltYWdlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taW1hZ2UnXG4vLyBpbXBvcnQgeyBNZW50aW9uIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbWVudGlvbidcbi8vIGltcG9ydCB7IENvZGVCbG9ja0hpZ2hsaWdodCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUtYmxvY2staGlnaGxpZ2h0J1xuLy8gaW1wb3J0IHsgVGFibGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZSdcbi8vIGltcG9ydCB7IFRhYmxlQ2VsbCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLWNlbGwnXG4vLyBpbXBvcnQgeyBUYWJsZUhlYWRlciB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLWhlYWRlcidcbi8vIGltcG9ydCB7IFRhYmxlTm9kZXMgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1ub2Rlcydcbi8vIGltcG9ydCB7IFRhYmxlUm93IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtcm93J1xuLy8gaW1wb3J0IHsgVGFza0xpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YXNrLWxpc3QnXG4vLyBpbXBvcnQgeyBUYXNrSXRlbSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhc2staXRlbSdcbi8vIFRvb2xzOlxuaW1wb3J0IHsgSGlzdG9yeSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhpc3RvcnknXG5cbmltcG9ydCB7IEljb24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0LCBoeXBoZW5hdGUsIGRlYm91bmNlLCBjYW1lbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbWFya3VwJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFZGl0b3JDb250ZW50LFxuICAgIEljb25cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlZGl0b3I6IG51bGwsXG4gICAgICBoZWlnaHQ6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAxMFxuICAgIH0sXG5cbiAgICBoYXJkQnJlYWsoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnNjaGVtYS5oYXJkQnJlYWtcbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ21hcmtzJywge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgc3RyaWtlOiB0cnVlLFxuICAgICAgICBzbWFsbDogdHJ1ZSxcbiAgICAgICAgY29kZTogdHJ1ZSxcbiAgICAgICAgc3Vic2NyaXB0OiB0cnVlLFxuICAgICAgICBzdXBlcnNjcmlwdDogdHJ1ZSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9uQ2xpY2s6IGVkaXRvciA9PiB0aGlzLm9uQ2xpY2tMaW5rKGVkaXRvcilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYmFzaWNOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBwYXJhZ3JhcGg6IHtcbiAgICAgICAgICBjb21tYW5kOiAnc2V0UGFyYWdyYXBoJ1xuICAgICAgICB9LFxuICAgICAgICBoZWFkaW5nOiB7XG4gICAgICAgICAgYXR0cmlidXRlOiAnbGV2ZWwnLFxuICAgICAgICAgIHZhbHVlczogWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFkdmFuY2VkTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcbiAgICAgICAgb3JkZXJlZExpc3Q6IHRydWUsXG4gICAgICAgIGJsb2NrcXVvdGU6IHRydWUsXG4gICAgICAgIGNvZGVCbG9jazogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdG9vbEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCd0b29scycsIHtcbiAgICAgICAgdW5kbzogdHJ1ZSxcbiAgICAgICAgcmVkbzogdHJ1ZSxcbiAgICAgICAgZm9vdG5vdGVzOiB7XG4gICAgICAgICAgY29tbWFuZDogJ2FkZEZvb3Rub3RlJ1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBncm91cGVkQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHRoaXMubWFya0J1dHRvbnMsXG4gICAgICAgIHRoaXMuYmFzaWNOb2RlQnV0dG9ucyxcbiAgICAgICAgdGhpcy5hZHZhbmNlZE5vZGVCdXR0b25zLFxuICAgICAgICB0aGlzLnRvb2xCdXR0b25zXG4gICAgICBdLmZpbHRlcihidXR0b25zID0+IGJ1dHRvbnMubGVuZ3RoID4gMClcbiAgICB9LFxuXG4gICAgcGFyc2VPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlc2VydmVXaGl0ZXNwYWNlOiB7XG4gICAgICAgICAgJ2NvbGxhcHNlJzogZmFsc2UsXG4gICAgICAgICAgJ3ByZXNlcnZlJzogdHJ1ZSxcbiAgICAgICAgICAncHJlc2VydmUtYWxsJzogJ2Z1bGwnXG4gICAgICAgIH1bdGhpcy53aGl0ZXNwYWNlXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBlZGl0b3JPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWRpdGFibGU6ICF0aGlzLnJlYWR5b25seSxcbiAgICAgICAgYXV0b0ZvY3VzOiB0aGlzLmF1dG9mb2N1cyxcbiAgICAgICAgZGlzYWJsZUlucHV0UnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLmlucHV0LFxuICAgICAgICBkaXNhYmxlUGFzdGVSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMucGFzdGUsXG4gICAgICAgIHBhcnNlT3B0aW9uczogdGhpcy5wYXJzZU9wdGlvbnNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB3aGl0ZXNwYWNlOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2hpdGVzcGFjZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdjb2xsYXBzZSdcbiAgICAgIC8vIFBvc3NpYmxlIHZhbHVlcyBhcmU6ICdjb2xsYXBzZScsICdwcmVzZXJ2ZScsICdwcmVzZXJ2ZS1hbGwnXG4gICAgfSksXG5cbiAgICBlbmFibGVSdWxlczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VuYWJsZVJ1bGVzJywge1xuICAgICAgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlbmFibGVSdWxlcykge1xuICAgICAgICByZXR1cm4gaXNPYmplY3QoZW5hYmxlUnVsZXMpXG4gICAgICAgICAgPyBlbmFibGVSdWxlc1xuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBpbnB1dDogISFlbmFibGVSdWxlcyxcbiAgICAgICAgICAgICAgcGFzdGU6ICEhZW5hYmxlUnVsZXNcbiAgICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgcmVhZHlvbmx5OiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgYXV0b2ZvY3VzOiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgZW5hYmxlUnVsZXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJ1xuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcblxuICAgIGNvbnN0IG9uRm9jdXMgPSAoKSA9PiB0aGlzLm9uRm9jdXMoKVxuXG4gICAgY29uc3Qgb25CbHVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgdXBkYXRlVmFsdWUoKVxuICAgIH1cblxuICAgIGNvbnN0IG9uVXBkYXRlID0gKCkgPT4ge1xuICAgICAgc2V0VmFsdWVEZWJvdW5jZWQoKVxuICAgICAgdGhpcy5vbklucHV0KClcbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZURlYm91bmNlZCA9IGRlYm91bmNlKCgpID0+IHtcbiAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgdXBkYXRlVmFsdWUoKVxuICAgIH0sIDEwMClcblxuICAgIGNvbnN0IHVwZGF0ZVZhbHVlID0gKCkgPT4ge1xuICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuZWRpdG9yLmdldEhUTUwoKVxuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhcmRCcmVha1xuICAgICAgICA/IGNvbnRlbnQucmVwbGFjZSgvXjxwPiguKj8pPFxcL3A+JC9zLCAnJDEnKVxuICAgICAgICA6IGNvbnRlbnRcbiAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgaWYgKCF0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5oYXJkQnJlYWtcbiAgICAgICAgICA/IGA8cD4ke3ZhbHVlfTwvcD5gXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB0aGlzLmVkaXRvci5jb21tYW5kcy5zZXRDb250ZW50KGNvbnRlbnQsIGZhbHNlLCB0aGlzLnBhcnNlT3B0aW9ucylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5lZGl0b3IgPSBuZXcgRWRpdG9yKHtcbiAgICAgIC4uLnRoaXMuZWRpdG9yT3B0aW9ucyxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbkJsdXIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuZ2V0RXh0ZW5zaW9ucygpLFxuICAgICAgY29udGVudDogdGhpcy52YWx1ZSB8fCAnJ1xuICAgIH0pXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkRyYWdSZXNpemUoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGdldFBvaW50ID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9KSA9PiAoeyB4LCB5IH0pXG5cbiAgICAgIGxldCBwcmV2WSA9IGdldFBvaW50KGV2ZW50KS55XG4gICAgICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKHRoaXMuJHJlZnMuZWRpdG9yLiRlbCkuaGVpZ2h0KVxuXG4gICAgICBjb25zdCBtb3VzZW1vdmUgPSBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHsgeSB9ID0gZ2V0UG9pbnQoZXZlbnQpXG4gICAgICAgIGhlaWdodCArPSB5IC0gcHJldllcbiAgICAgICAgcHJldlkgPSB5XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gYCR7TWF0aC5tYXgoaGVpZ2h0LCAwKX1weGBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICAgIG1vdXNlbW92ZSxcblxuICAgICAgICBtb3VzZXVwKGV2ZW50KSB7XG4gICAgICAgICAgbW91c2Vtb3ZlKGV2ZW50KVxuICAgICAgICAgIGhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHVwZGF0ZUVkaXRvck9wdGlvbnMoKSB7XG4gICAgICB0aGlzLmVkaXRvci5zZXRPcHRpb25zKHRoaXMuZWRpdG9yT3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGlja0xpbmsoZWRpdG9yKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgaHJlZjoge1xuICAgICAgICAgICAgdHlwZTogJ3VybCcsXG4gICAgICAgICAgICBsYWJlbDogJ0xpbmsnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgbGFiZWw6ICdUaXRsZSdcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGFwcGx5OiB7IHR5cGU6ICdzdWJtaXQnIH0sXG4gICAgICAgICAgcmVtb3ZlOiB7XG4gICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgY2xpY2soeyBkaWFsb2dDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudC5yZXNvbHZlKG51bGwpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IGdldE1hcmtBdHRyaWJ1dGVzKHRoaXMuZWRpdG9yLnN0YXRlLCAnbGluaycpXG4gICAgICB9KVxuICAgICAgaWYgKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgbGV0IHsgaHJlZiwgdGl0bGUgfSA9IGF0dHJpYnV0ZXNcbiAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICAvLyBTZWUgaWYgYGhyZWZgIGNhbiBiZSBwYXJzZWQgYXMgYSBVUkwsIGFuZCBpZiBub3QsXG4gICAgICAgICAgLy8gcHJlZml4IGl0IHdpdGggYSBkZWZhdWx0IHByb3RvY29sLlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3XG4gICAgICAgICAgICBuZXcgVVJMKGhyZWYpXG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBocmVmID0gYGh0dHBzOi8vJHtocmVmfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLmNvbW1hbmRzLnNldExpbmsoeyBocmVmLCB0aXRsZSB9KVxuICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzID09PSBudWxsKSB7XG4gICAgICAgIGVkaXRvci5jb21tYW5kcy51bnNldExpbmsoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRFeHRlbnNpb25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrcyA9IHt9LFxuICAgICAgICBub2RlcyA9IHt9LFxuICAgICAgICB0b29scyA9IHt9XG4gICAgICB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC8vIEVzc2VudGlhbHM6XG4gICAgICAgIHRvb2xzLmZvb3Rub3Rlc1xuICAgICAgICAgID8gRG9jdW1lbnQuZXh0ZW5kKHsgY29udGVudDogJ2Jsb2NrKyBmb290bm90ZXM/JyB9KVxuICAgICAgICAgIDogRG9jdW1lbnQsXG5cbiAgICAgICAgVGV4dCxcbiAgICAgICAgUGFyYWdyYXBoLCAvLyBidXR0b24gY2FuIGJlIGNvbnRyb2xsZWQsIGJ1dCBub2RlIG5lZWRzIHRvIGJlIG9uLlxuXG4gICAgICAgIC8vIE1hcmtzOiBgc2NoZW1hLm1hcmtzYFxuICAgICAgICBtYXJrcy5ib2xkICYmIEJvbGQsXG4gICAgICAgIG1hcmtzLml0YWxpYyAmJiBJdGFsaWMsXG4gICAgICAgIG1hcmtzLnVuZGVybGluZSAmJiBVbmRlcmxpbmUsXG4gICAgICAgIG1hcmtzLnN0cmlrZSAmJiBTdHJpa2UsXG4gICAgICAgIG1hcmtzLnNtYWxsICYmIFNtYWxsLFxuICAgICAgICBtYXJrcy5jb2RlICYmIENvZGUsXG4gICAgICAgIG1hcmtzLnN1YnNjcmlwdCAmJiBTdXBlcnNjcmlwdCxcbiAgICAgICAgbWFya3Muc3VwZXJzY3JpcHQgJiYgU3Vic2NyaXB0LFxuICAgICAgICBtYXJrcy5saW5rICYmIExpbmtXaXRoVGl0bGUsXG5cbiAgICAgICAgLy8gTm9kZXM6IGBzY2hlbWEubm9kZXNgXG4gICAgICAgIG5vZGVzLmJsb2NrcXVvdGUgJiYgQmxvY2txdW90ZSxcbiAgICAgICAgbm9kZXMuY29kZUJsb2NrICYmIENvZGVCbG9jayxcbiAgICAgICAgbm9kZXMuaGVhZGluZyAmJiBIZWFkaW5nLmNvbmZpZ3VyZSh7IGxldmVsczogbm9kZXMuaGVhZGluZyB9KSxcbiAgICAgICAgbm9kZXMuaG9yaXpvbnRhbFJ1bGUgJiYgSG9yaXpvbnRhbFJ1bGUsXG4gICAgICAgIChub2Rlcy5vcmRlcmVkTGlzdCB8fCBub2Rlcy5idWxsZXRMaXN0KSAmJiBMaXN0SXRlbSxcbiAgICAgICAgbm9kZXMuYnVsbGV0TGlzdCAmJiBCdWxsZXRMaXN0LFxuICAgICAgICBub2Rlcy5vcmRlcmVkTGlzdCAmJiBPcmRlcmVkTGlzdCxcblxuICAgICAgICAvLyBGb290bm90ZXM6XG4gICAgICAgIC4uLih0b29scy5mb290bm90ZXMgPyBbRm9vdG5vdGVzLCBGb290bm90ZSwgRm9vdG5vdGVSZWZlcmVuY2VdIDogW10pLFxuXG4gICAgICAgIC8vIFRPRE86XG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIFRvZG9JdGVtLFxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBUb2RvTGlzdCxcblxuICAgICAgICAvLyBUb29sczogYHNjaGVtYS50b29sc2BcbiAgICAgICAgdG9vbHMuaGlzdG9yeSAmJiBIaXN0b3J5LFxuXG4gICAgICAgIEhhcmRCcmVhay5leHRlbmQoe1xuICAgICAgICAgIGFkZEtleWJvYXJkU2hvcnRjdXRzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXRIYXJkQnJlYWsgPSAoKSA9PiB0aGlzLmVkaXRvci5jb21tYW5kcy5zZXRIYXJkQnJlYWsoKVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgJ01vZC1FbnRlcic6IHNldEhhcmRCcmVhayxcbiAgICAgICAgICAgICAgJ1NoaWZ0LUVudGVyJzogc2V0SGFyZEJyZWFrLFxuICAgICAgICAgICAgICAuLi4odGhpcy5oYXJkQnJlYWsgPyB7IEVudGVyOiBzZXRIYXJkQnJlYWsgfSA6IG51bGwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgXS5maWx0ZXIoZXh0ZW5zaW9uID0+ICEhZXh0ZW5zaW9uKVxuICAgIH0sXG5cbiAgICBnZXRCdXR0b25zKHNldHRpbmdzTmFtZSwgZGVzY3JpcHRpb25zKSB7XG4gICAgICBjb25zdCBsaXN0ID0gW11cbiAgICAgIGNvbnN0IHsgY29tbWFuZHMgfSA9IHRoaXMuZWRpdG9yXG5cbiAgICAgIGNvbnN0IGFkZEJ1dHRvbiA9ICh7IG5hbWUsIGljb24sIGNvbW1hbmQsIGF0dHJpYnV0ZXMsIG9uQ2xpY2sgfSkgPT4ge1xuICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaWNvbixcbiAgICAgICAgICBpc0FjdGl2ZTogdGhpcy5lZGl0b3IuaXNBY3RpdmUobmFtZSwgYXR0cmlidXRlcyksXG4gICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgY29tbWFuZCA/Pz1cbiAgICAgICAgICAgICAgbmFtZSBpbiBjb21tYW5kc1xuICAgICAgICAgICAgICAgID8gbmFtZVxuICAgICAgICAgICAgICAgIDogYHRvZ2dsZSR7Y2FtZWxpemUobmFtZSwgdHJ1ZSl9YFxuICAgICAgICAgICAgaWYgKGNvbW1hbmQgaW4gY29tbWFuZHMpIHtcbiAgICAgICAgICAgICAgY29uc3QgYXBwbHkgPSBhdHRyaWJ1dGVzID0+XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuY2hhaW4oKVtjb21tYW5kXShhdHRyaWJ1dGVzKS5mb2N1cygpLnJ1bigpXG4gICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICA/IG9uQ2xpY2sodGhpcy5lZGl0b3IsIGF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgOiBhcHBseShhdHRyaWJ1dGVzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNjaGVtYVtzZXR0aW5nc05hbWVdXG4gICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgZGVzY3JpcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucykpIHtcbiAgICAgICAgICBjb25zdCBzZXR0aW5nTmFtZSA9IFsndW5kbycsICdyZWRvJ10uaW5jbHVkZXMobmFtZSkgPyAnaGlzdG9yeScgOiBuYW1lXG4gICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW3NldHRpbmdOYW1lXVxuICAgICAgICAgIGNvbnN0IGljb24gPSBoeXBoZW5hdGUobmFtZSlcbiAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgY29tbWFuZCwgYXR0cmlidXRlLCB2YWx1ZXMsIG9uQ2xpY2sgfSA9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZXMpICYmIGlzQXJyYXkoc2V0dGluZykpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgaGVhZGluZyBsZXZlbCBhdHRyczpcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogYCR7aWNvbn0tJHt2YWx1ZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgW2F0dHJpYnV0ZV06IHZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uLCBjb21tYW5kLCBvbkNsaWNrIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1ckVsZW1lbnQoKSB7XG4gICAgICB0aGlzLmVkaXRvci5jb21tYW5kcy5ibHVyKClcbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IFNtYWxsID0gTWFyay5jcmVhdGUoe1xuICBuYW1lOiAnc21hbGwnLFxuXG4gIHBhcnNlSFRNTCgpIHtcbiAgICByZXR1cm4gW3sgdGFnOiAnc21hbGwnIH1dXG4gIH0sXG5cbiAgcmVuZGVySFRNTCgpIHtcbiAgICByZXR1cm4gWydzbWFsbCcsIDBdXG4gIH0sXG5cbiAgYWRkQ29tbWFuZHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNldFNtYWxsOlxuICAgICAgICBhdHRyaWJ1dGVzID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMuc2V0TWFyayh0aGlzLm5hbWUsIGF0dHJpYnV0ZXMpXG4gICAgICAgIH0sXG4gICAgICB0b2dnbGVTbWFsbDpcbiAgICAgICAgYXR0cmlidXRlcyA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnRvZ2dsZU1hcmsodGhpcy5uYW1lLCBhdHRyaWJ1dGVzKVxuICAgICAgICB9LFxuICAgICAgdW5zZXRTbWFsbDpcbiAgICAgICAgKCkgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy51bnNldE1hcmsodGhpcy5uYW1lKVxuICAgICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5jb25zdCBMaW5rV2l0aFRpdGxlID0gTGluay5leHRlbmQoe1xuICBpbmNsdXNpdmU6IGZhbHNlLFxuICBzY2hlbWE6IHtcbiAgICBhdHRyczoge1xuICAgICAgaHJlZjoge1xuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9LFxuICAgICAgdGl0bGU6IHtcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYXJzZUhUTUwoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgdGFnOiAnYScsXG4gICAgICAgICAgZ2V0QXR0cnM6IGVsZW1lbnQgPT4gKHtcbiAgICAgICAgICAgIGhyZWY6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgICB0aXRsZTogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcblxuICAgIHJlbmRlckhUTUwobm9kZSkge1xuICAgICAgcmV0dXJuIFsnYScsIG5vZGUuYXR0cnMsIDBdXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbWFya3VwIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5Qcm9zZU1pcnJvciB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cblxuICAuZGl0by1tYXJrdXAtZWRpdG9yIHtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgbWFyZ2luLXRvcDogJGlucHV0LXBhZGRpbmctdmVyO1xuICAgIC8vIE1vdmUgcGFkZGluZyBcImluc2lkZVwiIGVkaXRvciB0byBjb3JyZWN0bHkgcG9zaXRpb24gc2Nyb2xsYmFyXG4gICAgbWFyZ2luLXJpZ2h0OiAtJGlucHV0LXBhZGRpbmctaG9yO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbnMtdG9vbGJhciB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgcCxcbiAgdWwsXG4gIG9sLFxuICBwcmUsXG4gIGJsb2NrcXVvdGUge1xuICAgIG1hcmdpbjogMXJlbSAwO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gIGgxLFxuICBoMixcbiAgaDMge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgaDEge1xuICAgIGZvbnQtc2l6ZTogMS40cmVtO1xuICB9XG5cbiAgaDIge1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICB9XG5cbiAgdWwge1xuICAgIGxpc3Qtc3R5bGU6IGRpc2M7XG4gIH1cblxuICBjb2RlIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm87XG4gIH1cblxuICBwcmUge1xuICAgIHBhZGRpbmc6IDAuN3JlbSAxcmVtO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXI7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuXG4gICAgY29kZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cblxuICBwIGNvZGUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nOiAwIDAuM3JlbTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcbiAgfVxuXG4gIGEge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICBjb2xvcjogYmx1ZTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgfVxuXG4gIHVsLFxuICBvbCB7XG4gICAgcGFkZGluZy1sZWZ0OiAycmVtO1xuICB9XG5cbiAgbGkge1xuICAgICYgPiBwLFxuICAgICYgPiBvbCxcbiAgICAmID4gdWwge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxuXG4gIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJGNvbG9yLWxpZ2h0ZXI7XG4gICAgcGFkZGluZy1sZWZ0OiAxZW07XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuXG4gICAgcCB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICB9XG5cbiAgb2wuZm9vdG5vdGVzIHtcbiAgICBtYXJnaW4tdG9wOiAxZW07XG4gICAgcGFkZGluZzogMWVtIDA7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsO1xuICAgIHBhZGRpbmctbGVmdDogMmVtO1xuXG4gICAgJjpoYXMobGkpIHtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAkY29sb3ItbGlnaHQ7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW11bHRpc2VsZWN0XG4gIC5kaXRvLW11bHRpc2VsZWN0X19pbm5lclxuICAgIFZ1ZU11bHRpc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgIDpjbGFzcz1ge1xuICAgICAgICAnbXVsdGlzZWxlY3QtLW11bHRpcGxlJzogbXVsdGlwbGUsXG4gICAgICAgICdtdWx0aXNlbGVjdC0tbG9hZGluZyc6IGlzTG9hZGluZyxcbiAgICAgICAgJ211bHRpc2VsZWN0LS1oaWdobGlnaHQnOiBzaG93SGlnaGxpZ2h0XG4gICAgICB9YFxuICAgICAgOnNob3dMYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgICB0YWdQbGFjZWhvbGRlcj1cIlByZXNzIGVudGVyIHRvIGFkZCBuZXcgdGFnXCJcbiAgICAgIDpvcHRpb25zPVwicG9wdWxhdGUgJiYgYWN0aXZlT3B0aW9ucyB8fCBbXVwiXG4gICAgICA6Y3VzdG9tTGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgICA6dHJhY2tCeT1cIm9wdGlvblZhbHVlXCJcbiAgICAgIDpncm91cExhYmVsPVwiZ3JvdXBCeUxhYmVsXCJcbiAgICAgIDpncm91cFZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgICA6aW50ZXJuYWxTZWFyY2g9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpwcmVzZXJ2ZVNlYXJjaD1cIiEhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpjbGVhck9uU2VsZWN0PVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6Y2xvc2VPblNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIEBvcGVuPVwib25PcGVuXCJcbiAgICAgIEBjbG9zZT1cIm9uQ2xvc2VcIlxuICAgICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICAgIEBzZWFyY2gtY2hhbmdlPVwib25TZWFyY2hDaGFuZ2VcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgKVxuICAvLy0gRWRpdCBidXR0b24gaXMgbmV2ZXIgZGlzYWJsZWQsIGV2ZW4gaWYgdGhlIGZpZWxkIGlzIGRpc2FibGVkLlxuICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJmYWxzZVwiXG4gICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcbmltcG9ydCBWdWVNdWx0aXNlbGVjdCBmcm9tICd2dWUtbXVsdGlzZWxlY3QnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNCb29sZWFuIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtdWx0aXNlbGVjdCcsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcbiAgY29tcG9uZW50czogeyBWdWVNdWx0aXNlbGVjdCB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlYXJjaGVkT3B0aW9uczogbnVsbCxcbiAgICAgIHBvcHVsYXRlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSlcbiAgICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgICAvLyBJZiBhbiBvcHRpb24gY2Fubm90IGJlIGZvdW5kLCB3ZSBtYXkgYmUgaW4gdGFnZ2FibGUgbW9kZSBhbmRcbiAgICAgICAgICAgICAgICAvLyBjYW4gYWRkIGl0LlxuICAgICAgICAgICAgICAgIHZhbHVlID0+IChcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHx8IHRoaXMuYWRkVGFnT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IG9wdGlvbnMgdGhhdCB3ZSBjb3VsZG4ndCBtYXRjaC5cbiAgICAgICAgICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGRpc3BsYXkgYW4gZXJyb3IgaW5zdGVhZD9cbiAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgIDogdGhpcy5zZWxlY3RlZE9wdGlvblxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICAvLyBDb252ZXJ0IHZhbHVlIHRvIG9wdGlvbnMgb2JqZWN0LCBzaW5jZSB2dWUtbXVsdGlzZWxlY3QgY2FuJ3QgbWFwIHRoYXRcbiAgICAgICAgLy8gaXRzZWxmIHVuZm9ydHVuYXRlbHkuIGB0cmFjay1ieWAgaXMgdXNlZCBmb3IgOmtleSBtYXBwaW5nIGl0IHNlZW1zLlxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAob3B0aW9uIHx8IFtdKS5tYXAodmFsdWUgPT4gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSkpXG4gICAgICAgICAgOiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hlZE9wdGlvbnMgfHwgdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHNlYXJjaGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2hhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB0YWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdGF5T3BlbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0YXlPcGVuJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcigpIHtcbiAgICAgIGxldCB7IHBsYWNlaG9sZGVyLCBzZWFyY2hhYmxlLCB0YWdnYWJsZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmIChpc0Jvb2xlYW4ocGxhY2Vob2xkZXIpKSB7XG4gICAgICAgIHBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXIgPyB1bmRlZmluZWQgOiBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm4gcGxhY2Vob2xkZXIgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNlYXJjaGFibGUgJiYgdGFnZ2FibGVcbiAgICAgICAgICA/IGBTZWFyY2ggb3IgYWRkIGEgJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgICA6IHNlYXJjaGFibGVcbiAgICAgICAgICAgID8gYFNlbGVjdCBvciBzZWFyY2ggJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIDogcGxhY2Vob2xkZXJcbiAgICB9LFxuXG4gICAgc2hvd0hpZ2hsaWdodCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTW91bnRlZCAmJiB0aGlzLiRyZWZzLmVsZW1lbnQucG9pbnRlckRpcnR5XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICAvLyB2dWUtbXVsdGlzZWxlY3QgZG9lc24ndCBzdXBwb3J0IHRoZSBhdXRvZm9jdXMgYXR0cmlidXRlLiBXZSBuZWVkIHRvXG4gICAgICAvLyBoYW5kbGUgaXQgaGVyZS5cbiAgICAgIHRoaXMuZm9jdXMoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYWRkVGFnT3B0aW9uKHRhZykge1xuICAgICAgaWYgKHRoaXMudGFnZ2FibGUpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCwgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgICAgY29uc3Qgb3B0aW9uID1cbiAgICAgICAgICBvcHRpb25MYWJlbCAmJiBvcHRpb25WYWx1ZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXTogdGFnLFxuICAgICAgICAgICAgICAgIC8vIFRPRE86IERlZmluZSBhIHNpbXBsZSBzY2hlbWEgb3B0aW9uIHRvIGNvbnZlcnQgdGhlIHRhZyB2YWx1ZVxuICAgICAgICAgICAgICAgIC8vIHRvIHNvbWV0aGluZyBlbHNlLCBlLmcuIGB0b1RhZzogdGFnID0+IHVuZGVyc2NvcmUodGFnKWBcbiAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdOiB0YWdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB0YWdcbiAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5hY3RpdmF0ZSgpXG4gICAgfSxcblxuICAgIGJsdXJFbGVtZW50KCkge1xuICAgICAgdGhpcy4kcmVmcy5lbGVtZW50LmRlYWN0aXZhdGUoKVxuICAgIH0sXG5cbiAgICBvbk9wZW4oKSB7XG4gICAgICB0aGlzLnBvcHVsYXRlID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkNsb3NlKCkge1xuICAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgZmlyZSBibHVyIGV2ZW50cyB3aGlsZSB0aGUgbXVsdGlzZWxlY3QgaXMgb3BlbiAoc2VlXG4gICAgICAvLyBiZWxvdyksIHdlIG5lZWQgdG8gZG8gaXQgaGVyZSwgd2hlbiBpdCdzIGFjdHVhbGx5IGNsb3NlZC5cbiAgICAgIGlmICh0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkJsdXIoKSB7XG4gICAgICBpZiAoIXRoaXMuJHJlZnMuZWxlbWVudC5pc09wZW4pIHtcbiAgICAgICAgVHlwZU1peGluLm1ldGhvZHMub25CbHVyLmNhbGwodGhpcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25BZGRUYWcodGFnKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmFkZFRhZ09wdGlvbih0YWcpXG4gICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgIHRoaXMudmFsdWUucHVzaCh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uU2VhcmNoQ2hhbmdlKHF1ZXJ5KSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hGaWx0ZXIpIHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgLy8gU2V0IGBzZWFyY2hlZE9wdGlvbnNgIHRvIGFuIGVtcHR5IGFycmF5LCBiZWZvcmUgaXQgd2lsbCBiZVxuICAgICAgICAgIC8vIHBvcHVsYXRlZCBhc3luY2hyb25vdXNseSB3aXRoIHRoZSBhY3R1YWwgcmVzdWx0cy5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IFtdXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBhd2FpdCB0aGlzLnJlc29sdmVEYXRhKFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5zZWFyY2hGaWx0ZXIobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgcXVlcnkgfSkpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENsZWFyIGBzZWFyY2hlZE9wdGlvbnNgIHdoZW4gdGhlIHF1ZXJ5IGlzIGNsZWFyZWQuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuQGltcG9ydCAndnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0LmNzcyc7XG5cbiRzcGlubmVyLXdpZHRoOiAkc2VsZWN0LWFycm93LXdpZHRoO1xuJHRhZy1pY29uLXdpZHRoOiAxLjhlbTtcbiR0YWctbWFyZ2luOiAycHg7XG4kdGFnLXBhZGRpbmc6IDNweDtcbiR0YWctbGluZS1oZWlnaHQ6IDFlbTtcblxuLmRpdG8tbXVsdGlzZWxlY3Qge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICZfX2lubmVyIHtcbiAgICBmbGV4OiAxO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgfVxuXG4gIC5tdWx0aXNlbGVjdCB7XG4gICAgJHNlbGY6IGxhc3Qtc2VsZWN0b3IoJik7XG5cbiAgICAtLWlucHV0LXdpZHRoOiAxMDAlO1xuXG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIG1pbi1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgY29sb3I6ICRjb2xvci1ibGFjaztcblxuICAgICYtLW11bHRpcGxlIHtcbiAgICAgIC0taW5wdXQtd2lkdGg6IGF1dG87XG4gICAgfVxuXG4gICAgJl9fdGFncyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgICAgbWluLWhlaWdodDogaW5oZXJpdDtcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgcGFkZGluZzogMCAkc3Bpbm5lci13aWR0aCAwIDA7XG4gICAgICAvLyBTbyB0YWdzIGNhbiBmbG9hdCBvbiBtdWx0aXBsZSBsaW5lcyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2luczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkdGFnLW1hcmdpbjtcblxuICAgICAgLmRpdG8taGFzLWVycm9ycyAmIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItZXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fdGFnIHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgbWFyZ2luOiAkdGFnLW1hcmdpbiAwIDAgJHRhZy1tYXJnaW47XG4gICAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nOiAkdGFnLXBhZGRpbmcgJHRhZy1pY29uLXdpZHRoICR0YWctcGFkZGluZyAwLjhlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0O1xuICAgICAgaGVpZ2h0OiBjYWxjKCRpbnB1dC1oZWlnaHQgLSAyICogJHRhZy1wYWRkaW5nKTtcbiAgICB9XG5cbiAgICAmX190YWdzLXdyYXAge1xuICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICBsaW5lLWhlaWdodDogMDtcbiAgICB9XG5cbiAgICAmX19zaW5nbGUsXG4gICAgJl9fcGxhY2Vob2xkZXIsXG4gICAgJl9faW5wdXQge1xuICAgICAgQGluY2x1ZGUgZWxsaXBzaXM7XG5cbiAgICAgIGZsZXg6IDEgMCAwJTtcbiAgICAgIHdpZHRoOiAwO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIG1hcmdpbjogMCAwIDFweCAwO1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIHN0eWxlPVwicGFkZGluZzogLi4uO1wiIGluIGFkZGl0aW9uIHRvIHVzaW5nXG4gICAgICAvLyBjbGFzc2VzLCBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcgIWltcG9ydGFudDtcbiAgICAgIC8vIFNvIGlucHV0IGNhbiBmbG9hdCBuZXh0IHRvIHRhZ3MgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnMgd2l0aFxuICAgICAgLy8gJl9fdGFnczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIH1cblxuICAgICZfX3BsYWNlaG9sZGVyLFxuICAgICZfX2lucHV0OjpwbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogJGNvbG9yLXBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgICZfX3BsYWNlaG9sZGVyIHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgLy8gRW5mb3JjZSBhY3R1YWwgbGluZS1oZWlnaHQgZm9yIHBvc2l0aW9uaW5nLlxuICAgICAgICBjb250ZW50OiAnXFwyMDBiJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19zZWxlY3QsXG4gICAgJl9fc3Bpbm5lciB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgLy8gJGJvcmRlci13aWR0aCB0byBwcmV2ZW50IG1hc2tpbmcgYm9yZGVyIHdpdGggJl9fc3Bpbm5lclxuICAgICAgdG9wOiAkYm9yZGVyLXdpZHRoO1xuICAgICAgcmlnaHQ6ICRib3JkZXItd2lkdGg7XG4gICAgICBib3R0b206ICRib3JkZXItd2lkdGg7XG4gICAgICBoZWlnaHQ6IGluaGVyaXQ7XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICB9XG5cbiAgICAmX19zZWxlY3Qge1xuICAgICAgd2lkdGg6ICRzZWxlY3QtYXJyb3ctd2lkdGg7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBpbmNsdWRlIGFycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSk7XG5cbiAgICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbTtcbiAgICAgICAgcmlnaHQ6ICRzZWxlY3QtYXJyb3ctcmlnaHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fc3Bpbm5lciB7XG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGg7XG5cbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSB3aWR0aCBvZiB0aGUgbG9hZGluZyBzcGlubmVyXG4gICAgICAgIGJvcmRlci13aWR0aDogM3B4O1xuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgbWFyZ2luOiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX29wdGlvbiB7XG4gICAgICAkb3B0aW9uOiBsYXN0LXNlbGVjdG9yKCYpO1xuXG4gICAgICBtaW4taGVpZ2h0OiB1bnNldDtcbiAgICAgIGhlaWdodDogdW5zZXQ7XG4gICAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdGV4dCBmb3Igb3B0aW9uc1xuICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIE9ubHkgc2hvdyB0aGUgaGlnaGxpZ2h0IG9uY2UgdGhlIHB1bGxkb3duIGhhcyByZWNlaXZlZCBtb3VzZSBvclxuICAgICAgLy8ga2V5Ym9hcmQgaW50ZXJhY3Rpb24sIGluIHdoaWNoIGNhc2UgYCYtLWhpZ2hsaWdodGAgd2lsbCBiZSBzZXQsXG4gICAgICAvLyB3aGljaCBpcyBjb250cm9sbGVkIGJ5IGBwb2ludGVyRGlydHlgIGluIHZ1ZS1tdWx0aXNlbGVjdC5cbiAgICAgIC8vIFVudGlsIHRoZW4sIGNsZWFyIHRoZSBoaWdobGlnaHQgc3R5bGUsIGJ1dCBvbmx5IGlmIGl0IGlzbid0IGFsc29cbiAgICAgIC8vIGRpc2FibGVkIG9yIHNlbGVjdGVkLCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8ga2VlcCB0aGUgc3R5bGUuXG4gICAgICBAYXQtcm9vdCAjeyRzZWxmfTpub3QoI3skc2VsZn0tLWhpZ2hsaWdodClcbiAgICAgICAgICAjeyRvcHRpb259Om5vdCgjeyRvcHRpb259LS1kaXNhYmxlZCk6bm90KCN7JG9wdGlvbn0tLXNlbGVjdGVkKSB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgICYtLWhpZ2hsaWdodCB7XG4gICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIEBhdC1yb290ICN7JHNlbGZ9I3skc2VsZn0tLWhpZ2hsaWdodCAje2xhc3Qtc2VsZWN0b3IoJil9IHtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLS1zZWxlY3RlZCB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodDtcblxuICAgICAgICBAYXQtcm9vdCAjeyRzZWxmfSN7JHNlbGZ9LS1oaWdobGlnaHQgJiN7JG9wdGlvbn0tLWhpZ2hsaWdodCB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYtLWRpc2FibGVkIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX190YWcge1xuICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAmX190YWctaWNvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgICAgd2lkdGg6ICR0YWctaWNvbi13aWR0aDtcbiAgICAgIG1hcmdpbjogMDtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWNsZWFyO1xuXG4gICAgICAgIGZvbnQtc2l6ZTogMC45ZW07XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgIH1cblxuICAgICAgJjpob3Zlcjo6YWZ0ZXIge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fdGFncyxcbiAgICAmX19jb250ZW50LXdyYXBwZXIge1xuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgfVxuXG4gICAgJl9fY29udGVudC13cmFwcGVyIHtcbiAgICAgIHotaW5kZXg6ICR6LWluZGV4LXBvcHVwO1xuICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgICY6bm90KCYtLWFib3ZlKSAjeyRzZWxmfV9fY29udGVudC13cmFwcGVyIHtcbiAgICAgIG1hcmdpbjogKC0kYm9yZGVyLXdpZHRoKSAwIDA7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cblxuICAgICYtLWFib3ZlICN7JHNlbGZ9X19jb250ZW50LXdyYXBwZXIge1xuICAgICAgbWFyZ2luOiAwIDAgKC0kYm9yZGVyLXdpZHRoKTtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgfVxuXG4gICAgJi0tYWN0aXZlIHtcbiAgICAgICN7JHNlbGZ9X19wbGFjZWhvbGRlciB7XG4gICAgICAgIC8vIERvbid0IHVzZSBgZGlzcGxheTogbm9uZWAgdG8gaGlkZSBwbGFjZS1ob2xkZXIsIGFzIHRoZSBsYXlvdXQgd291bGRcbiAgICAgICAgLy8gY29sbGFwc2UuXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfV9fc2luZ2xlLFxuICAgICAgI3skc2VsZn1fX2lucHV0IHtcbiAgICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBgc3R5bGU9XCJ3aWR0aFwiYCBpbiBhZGRpdGlvbiB0byB1c2luZyBjbGFzc2VzXG4gICAgICAgIC8vIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICAgIHdpZHRoOiB2YXIoLS1pbnB1dC13aWR0aCkgIWltcG9ydGFudDtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn1fX3RhZ3Mge1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgfVxuXG4gICAgICAmI3skc2VsZn0tLWFib3ZlIHtcbiAgICAgICAgI3skc2VsZn1fX3RhZ3Mge1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLS1sb2FkaW5nIHtcbiAgICAgICN7JHNlbGZ9X190YWdzIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9X19jb250ZW50LXdyYXBwZXIge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICE9PSBudWxsID8gdGhpcy52YWx1ZSA6ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9XG4gICAgICAgICAgdmFsdWUgIT09ICcnXG4gICAgICAgICAgICA/IHRoaXMuaXNJbnRlZ2VyXG4gICAgICAgICAgICAgID8gcGFyc2VJbnQodmFsdWUsIDEwKVxuICAgICAgICAgICAgICA6IHBhcnNlRmxvYXQodmFsdWUpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaXNJbnRlZ2VyKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHN0ZXBWYWx1ZSgpIHtcbiAgICAgIC8vIERvbid0IHNob3cgc3RlcHMgaWYgdGhlIGlucHV0IGlzIGFsc28gY2xlYXJhYmxlLCBzaW5jZSB0aGUgc3RlcCBidXR0b25zXG4gICAgICAvLyB3b3VsZCBjb2xsaWRlIHdpdGggdGhlIGNsZWFyIGJ1dHRvbi5cbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZVxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB0aGlzLnN0ZXAgPT0gbnVsbCAmJiAhdGhpcy5pc0ludGVnZXJcbiAgICAgICAgICA/ICdhbnknXG4gICAgICAgICAgOiB0aGlzLnN0ZXBcbiAgICB9LFxuXG4gICAgZGVjaW1hbHM6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWNpbWFscycsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgc3RlcDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0ZXAnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQoc3RlcCkge1xuICAgICAgICAvLyBGb3IgaW50ZWdlcnMsIHJvdW5kIHRoZSBzdGVwcyB0byB0aGUgbmV4dCBiaWdnZXIgaW50ZWdlciB2YWx1ZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIHN0ZXAgIT0gbnVsbCA/IE1hdGguY2VpbChzdGVwKSA6IHN0ZXBcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1pbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ21pbicsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtaW4pIHtcbiAgICAgICAgbWluID1cbiAgICAgICAgICBtaW4gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlswXVxuICAgICAgICAgICAgOiBtaW5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1pbiAhPSBudWxsID8gTWF0aC5mbG9vcihtaW4pIDogbWluXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXg6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXgnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWF4KSB7XG4gICAgICAgIG1heCA9XG4gICAgICAgICAgbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMV1cbiAgICAgICAgICAgIDogbWF4XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtYXggIT0gbnVsbCA/IE1hdGguY2VpbChtYXgpIDogbWF4XG4gICAgICB9XG4gICAgfSksXG5cbiAgICByYW5nZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JhbmdlJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIGB0aGlzLm1pbmAsIGB0aGlzLm1heGAgYWxyZWFkeSBzdXBwb3J0IGBzY2hlbWEucmFuZ2VgLFxuICAgICAgICAvLyBzbyByZWRpcmVjdCB0aGVyZS5cbiAgICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gbWluICE9IG51bGwgJiYgbWF4ICE9IG51bGwgPyBbbWluLCBtYXhdIDogdW5kZWZpbmVkXG4gICAgICB9LFxuXG4gICAgICBzZXQocmFuZ2UpIHtcbiAgICAgICAgLy8gUHJvdmlkZSBhIHNldHRlciB0aGF0IGRlbGVnYXRlcyB0byBgW3RoaXMubWluLCB0aGlzLm1heF1gLFxuICAgICAgICAvLyBzaW5jZSB0aG9zZSBhbHJlYWR5IGhhbmRsZSBgc2NoZW1hLnJhbmdlYC5cbiAgICAgICAgaWYgKGlzQXJyYXkocmFuZ2UpKSB7XG4gICAgICAgICAgO1t0aGlzLm1pbiwgdGhpcy5tYXhdID0gcmFuZ2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7fVxuICAgICAgY29uc3QgeyByYW5nZSwgbWluLCBtYXgsIGRlY2ltYWxzLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmFuZ2UgPSByYW5nZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1pbiAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWluID0gbWluXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWF4ID0gbWF4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkZWNpbWFscyAhPSBudWxsKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgIH0gZWxzZSBpZiAoc3RlcCkge1xuICAgICAgICBjb25zdCBkZWNpbWFscyA9IChgJHtzdGVwfWAuc3BsaXQoJy4nKVsxXSB8fCAnJykubGVuZ3RoXG4gICAgICAgIGlmIChkZWNpbWFscyA+IDApIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNJbnRlZ2VyKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5JbnB1dEZpZWxkLmRpdG8tbnVtYmVyKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIHR5cGU9XCJudW1iZXJcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgOm1pbj1cIm1pblwiXG4gIDptYXg9XCJtYXhcIlxuICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4pXG4gIHRlbXBsYXRlKCNhZnRlcilcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ251bWJlcicsICdpbnRlZ2VyJ10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gICAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGlzSW50ZWdlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2ludGVnZXInXG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4vLyBPbmx5IHNob3cgc3BpbiBidXR0b25zIGlmIHRoZSBudW1iZXIgY29tcG9uZW50IGRlZmluZXMgYSBzdGVwIHNpemUuXG5pbnB1dFt0eXBlPSdudW1iZXInXTpub3QoW3N0ZXBdKSB7XG4gICY6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gICY6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tb2JqZWN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbilcbiAgLmRpdG8tb2JqZWN0LWNvbnRlbnQoXG4gICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICApXG4gICAgLy8tIFN1cHBvcnQgdGhlIHNhbWUgcmVuZGVyaW5nIG9wdGlvbnMgYXMgVHlwZUxpc3Q6XG4gICAgRGl0b1NjaGVtYUlubGluZWQoXG4gICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgIDpsYWJlbD1cIm9iamVjdExhYmVsXCJcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgICAgOmVkaXRQYXRoPVwicGF0aFwiXG4gICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICAgIClcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWVsc2UtaWY9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlXG4gICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBvYmplY3REYXRhKVwiXG4gICAgKVxuICAvLy0gTk9URTogYERpdG9FZGl0QnV0dG9uc2AgaGVyZSBvbmx5IGhhbmRsZSB0aGUgY3JlYXRlIGJ1dHRvbiBvdXRzaWRlIG9mIHRoZVxuICAvLy0gc2NoZW1hLCB0aGUgZWRpdCBidXR0b25zIGluc2lkZSBhcmUgaGFuZGxlZCBieSBgRGl0b1NjaGVtYUlubGluZWRgLlxuICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICA6cGF0aD1cInBhdGhcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgeyByZXNvbHZlU2NoZW1hQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ29iamVjdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9iamVjdExhYmVsKCkge1xuICAgICAgLy8gT25seSBzaG93IGEgbGFiZWwgaWYgdGhlIG9iamVjdCBpcyBjb2xsYXBzaWJsZS5cbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlXG4gICAgICAgID8gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zY2hlbWEsIHRoaXMub2JqZWN0RGF0YSwgeyBhc09iamVjdDogdHJ1ZSB9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgZGF0YTogdGhpcy5vYmplY3REYXRhIH0pXG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpLFxuICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgYXBpLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJvdXRlcyxcbiAgICAgICAgbGV2ZWwsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgZmxhdHRlbixcbiAgICAgICAgcHJvY2Vzc1xuICAgICAgKVxuICAgIF0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1vYmplY3Qge1xuICBkaXNwbGF5OiBmbGV4O1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmc7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1pbi13aWR0aDogbWluLWNvbnRlbnQ7XG5cbiAgLmRpdG8tb2JqZWN0LWNvbnRlbnQge1xuICAgIGZsZXg6IDAgMSAxMDAlO1xuICB9XG5cbiAgPiAuZGl0by1lZGl0LWJ1dHRvbnMge1xuICAgIGZsZXg6IDEgMCAwJTtcbiAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncGFuZWwnLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBvbWl0U3BhY2luZzogdHJ1ZSxcblxuICBnZXRQYW5lbFNjaGVtYShhcGksIHNjaGVtYSkge1xuICAgIC8vIEZvciBhIFR5cGVQYW5lbCwgdGhlIGNvbXBvbmVudCBzY2hlbWEgaXMgYWxzbyB0aGUgcGFuZWwgc2NoZW1hLCBidXRcbiAgICAvLyByZW1vdmUgdGhlIGFkZGVkIG5hbWUsIHNvIGl0IGRvZXNuJ3QgZ2V0IGFwcGVuZGVkIHR3aWNlIHRvIGRhdGEtcGF0aC5cbiAgICBjb25zdCB7IG5hbWUsIC4uLnBhbmVsIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gcGFuZWxcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICA6bWF4PVwicHJvZ3Jlc3NNYXhcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3Byb2dyZXNzJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvZ3Jlc3NWYWx1ZSgpIHtcbiAgICAgIGxldCB7IHZhbHVlLCByYW5nZSwgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHZhbHVlIC09IHJhbmdlWzBdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHByb2dyZXNzTWF4KCkge1xuICAgICAgY29uc3QgeyByYW5nZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHJhbmdlID8gcmFuZ2VbMV0gLSByYW5nZVswXSA6IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG51bC5kaXRvLXJhZGlvLWJ1dHRvbnMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaShcbiAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgKVxuICAgIGxhYmVsXG4gICAgICBpbnB1dC5kaXRvLXJhZGlvLWJ1dHRvbihcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3JhZGlvJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJ1xufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXJhZGlvLWJ1dHRvbnMge1xuICBsYWJlbCB7XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzcztcbiAgfVxuXG4gIC5kaXRvLXJhZGlvLWJ1dHRvbiB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNlY3Rpb24oOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLS1sYWJlbGxlZCc6IGhhc0xhYmVsIH1cIilcbiAgRGl0b1NjaGVtYUlubGluZWQuZGl0by1zZWN0aW9uX19zY2hlbWEoXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJpdGVtXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6cGFkZGluZz1cImhhc0xhYmVsID8gJ25lc3RlZCcgOiAnaW5saW5lZCdcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmxhYmVsTm9kZT1cImxhYmVsTm9kZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbUZvcm1TY2hlbWEsIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlY3Rpb24nLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6ICh7IHNjaGVtYSB9KSA9PiAhc2NoZW1hLm5lc3RlZCAmJiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuICBkZWZhdWx0TmVzdGVkOiBmYWxzZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy52YWx1ZSA6IHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuc2NoZW1hLmxhYmVsXG4gICAgfSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGNvbGxhcHNlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjb2xsYXBzZWQpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxhcHNlZCAmJiB0aGlzLmNvbGxhcHNpYmxlXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWFcbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gICAgLy8gUHJvY2VzcyBzZWN0aW9uIGNvbXBvbmVudHMgc28gdGhlaXIgZm9ybXMgZ2V0IHJlc29sdmVkIHRvby5cbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbClcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNlY3Rpb24ge1xuICAmLS1sYWJlbGxlZCB7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzICRlYXNlLW91dC1xdWFydDtcbiAgICBtYXJnaW4tdG9wOiAkZm9ybS1zcGFjaW5nLWhhbGY7XG5cbiAgICAmOmhhcyguZGl0by1zY2hlbWEtLW9wZW4pIHtcbiAgICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuLmRpdG8tc2VsZWN0XG4gIC5kaXRvLXNlbGVjdF9faW5uZXJcbiAgICBzZWxlY3QoXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgQG1vdXNlZG93bj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGdyb3VwKFxuICAgICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdClcIlxuICAgICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgICApXG4gICAgICAgIG9wdGlvbig6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCIpIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgKVxuICAvLy0gRWRpdCBidXR0b24gaXMgbmV2ZXIgZGlzYWJsZWQsIGV2ZW4gaWYgdGhlIGZpZWxkIGlzIGRpc2FibGVkLlxuICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJmYWxzZVwiXG4gICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWxlY3QnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gRGlzYWJsZSBsYXp5LXBvcHVsYXRpb24gZm9yIG5vdy5cbiAgICAgIC8vIFRPRE86IFNldCB0byBgZmFsc2VgIE9uY2UgbGluZXRvIGUyZSB0ZXN0cyBhZGRyZXNzIHRoZWlyIGlzc3Vlcy5cbiAgICAgIHBvcHVsYXRlOiB0cnVlXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2VsZWN0IHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICBzZWxlY3Qge1xuICAgIEBleHRlbmQgJWlucHV0O1xuXG4gICAgcGFkZGluZy1yaWdodDogJHNlbGVjdC1hcnJvdy13aWR0aDtcbiAgfVxuXG4gIC8vIGAmX19faW5uZXJgIGlzIG5lZWRlZCB0byBtYWtlIHRoZSBlZGl0IGJ1dHRvbnMgYXBwZWFyIHRvIHRoZSByaWdodCBvZiB0aGVcbiAgLy8gc2VsZWN0OlxuICAmX19pbm5lciB7XG4gICAgZmxleDogMTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgQGluY2x1ZGUgYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbTtcbiAgICAgIHJpZ2h0OiAkc2VsZWN0LWFycm93LXJpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgfVxuXG4gIC8vIEhhbmRsZSAuZGl0by13aWR0aC1maWxsIHNlcGFyYXRlbHkgZHVlIHRvIHJlcXVpcmVkIG5lc3Rpbmcgb2Ygc2VsZWN0OlxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgc2VsZWN0IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1kaXNhYmxlZDo6YWZ0ZXIge1xuICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zbGlkZXJcbiAgaW5wdXQuZGl0by1yYW5nZShcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4gIElucHV0RmllbGQuZGl0by1udW1iZXIoXG4gICAgdi1pZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2xpZGVyJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0YD9cbiAgICBpbnB1dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2xpZGVyIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1yYW5nZSB7XG4gICAgZmxleDogYXV0bztcbiAgICBoZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpKTtcbiAgfVxuXG4gIC5kaXRvLW51bWJlciB7XG4gICAgYm9yZGVyOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlL3ZhbGlkLXRlbXBsYXRlLXJvb3QgLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPjwvdGVtcGxhdGU+XG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzcGFjZXInLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlXG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuU3dpdGNoQnV0dG9uLmRpdG8tc3dpdGNoKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgU3dpdGNoQnV0dG9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc3dpdGNoJywge1xuICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcblxuICBjb21wb25lbnRzOiB7XG4gICAgU3dpdGNoQnV0dG9uXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGFiZWxzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc3dpdGNoIHtcbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBnZXREZWZhdWx0VmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIHRyaW06IGdldFNjaGVtYUFjY2Vzc29yKCd0cmltJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoY29udGV4dCkge1xuICAgIGxldCB7IHNjaGVtYSwgdmFsdWUgfSA9IGNvbnRleHRcbiAgICBpZiAoc2NoZW1hLnRyaW0gJiYgdmFsdWUgIT0gbnVsbCAmJiBpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIC8vIFRleHQgZmllbGRzIGRvbid0IG5lY2Vzc2FyaWx5IGhhdmUgYSBgU3RyaW5nYCB2YWx1ZSB3aGVuIGBmb3JtYXQoKWBcbiAgICAgIC8vIHdpdGhvdXQgYHBhcnNlKClgIGlzIHVzZWQuXG4gICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuICAgIH1cbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICB2YWx1ZSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEsIGNvbnRleHQpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuSW5wdXRGaWVsZC5kaXRvLXRleHQoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgOnR5cGU9XCJpbnB1dFR5cGVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbiAgdGVtcGxhdGUoI2FmdGVyKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvVGV4dE1peGluJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG5jb25zdCBtYXNrZWRQYXNzd29yZCA9ICcqKioqKioqKioqKioqKioqJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgW1xuICAgICd0ZXh0JyxcbiAgICAnZW1haWwnLFxuICAgICd1cmwnLFxuICAgICdob3N0bmFtZScsXG4gICAgJ2RvbWFpbicsXG4gICAgJ3RlbCcsXG4gICAgJ3Bhc3N3b3JkJyxcbiAgICAnY3JlZGl0Y2FyZCdcbiAgXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW1RleHRNaXhpbl0sXG4gICAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuICAgIGlnbm9yZU1pc3NpbmdWYWx1ZTogKHsgc2NoZW1hIH0pID0+IHNjaGVtYS50eXBlID09PSAncGFzc3dvcmQnLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGlucHV0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjcmVkaXRjYXJkOiAndGV4dCcsXG4gICAgICAgICAgICBob3N0bmFtZTogJ3RleHQnLFxuICAgICAgICAgICAgZG9tYWluOiAndGV4dCdcbiAgICAgICAgICB9W3RoaXMudHlwZV0gfHxcbiAgICAgICAgICB0aGlzLnR5cGVcbiAgICAgICAgKVxuICAgICAgfSxcblxuICAgICAgaW5wdXRWYWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJyAmJlxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAhdGhpcy5mb2N1c2VkXG4gICAgICAgICAgKVxuICAgICAgICAgICAgPyBtYXNrZWRQYXNzd29yZFxuICAgICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICAgICAgZW1haWw6ICdlbWFpbCcsXG4gICAgICAgICAgdXJsOiAndXJsJyxcbiAgICAgICAgICBob3N0bmFtZTogJ2hvc3RuYW1lJyxcbiAgICAgICAgICBkb21haW46ICdkb21haW4nLFxuICAgICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQnLFxuICAgICAgICAgIGNyZWRpdGNhcmQ6ICdjcmVkaXRjYXJkJ1xuICAgICAgICB9W3RoaXMudHlwZV1cbiAgICAgICAgcmV0dXJuIHJ1bGUgPyB7IFtydWxlXTogdHJ1ZSB9IDoge31cbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDpyb3dzPVwibGluZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVGV4dE1peGluIGZyb20gJy4uL21peGlucy9UZXh0TWl4aW4nXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3RleHRhcmVhJywge1xuICBtaXhpbnM6IFtUZXh0TWl4aW5dLFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgNFxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGV4dGFyZWEge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcmVzaXplOiBub25lO1xuICBtaW4taGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSArICN7MiAqICRpbnB1dC1wYWRkaW5nLXZlcn0pO1xuXG4gICYuZGl0by1yZXNpemFibGUge1xuICAgIHJlc2l6ZTogdmVydGljYWw7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJlZS1saXN0XG4gIERpdG9TY29wZXMoXG4gICAgdi1pZj1cInNjb3Blc1wiXG4gICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICApXG4gIC5kaXRvLXRyZWUtcGFuZWxcbiAgICBEaXRvVHJlZUl0ZW0oXG4gICAgICA6c2NoZW1hPVwidHJlZVNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgKVxuICAgICAgLy8tIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgUm91dGVyVmlld1xuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQge1xuICBoYXNGb3JtU2NoZW1hLFxuICBnZXRGb3JtU2NoZW1hcyxcbiAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHNcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWyd0cmVlLWxpc3QnLCAndHJlZS1vYmplY3QnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICAgIHByb3ZpZGUoKSB7XG4gICAgICByZXR1cm4geyBjb250YWluZXI6IHRoaXMgfVxuICAgIH0sXG5cbiAgICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAgIHJldHVybiB0eXBlID09PSAndHJlZS1vYmplY3QnID8gJ29iamVjdCcgOiAnbGlzdCdcbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHBhdGgoKSB7XG4gICAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5wYXRoYDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudD8ucGF0aFxuICAgICAgfSxcblxuICAgICAgZWRpdFBhdGgoKSB7XG4gICAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5lZGl0UGF0aGA6XG4gICAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXRoLnNsaWNlKHRoaXMucGF0aD8ubGVuZ3RoKVxuICAgICAgfSxcblxuICAgICAgdHJlZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgID8geyBbdGhpcy5uYW1lXTogdGhpcy52YWx1ZSB9XG4gICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICB9LFxuXG4gICAgICB0cmVlRGF0YVBhdGgoKSB7XG4gICAgICAgIC8vIFJlbW92ZSBgbmFtZWAgZnJvbSBgZGF0YVBhdGhgLCBhcyBpdCBpcyBhZGRlZFxuICAgICAgICAvLyB0byBgdHJlZURhdGFgIGFuZCBgdHJlZVNjaGVtYWBcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB0aGlzLmRhdGFQYXRoLnNsaWNlKDAsIHRoaXMuZGF0YVBhdGgubGVuZ3RoIC0gdGhpcy5uYW1lLmxlbmd0aClcbiAgICAgICAgICA6IHRoaXMuZGF0YVBhdGhcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjaGlsZHJlbjoge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLnNjaGVtYVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB0aGlzLnNjaGVtYVxuICAgICAgfSxcblxuICAgICAgaGFzRWRpdGFibGVGb3JtcygpIHtcbiAgICAgICAgY29uc3QgaGFzRWRpdGFibGVGb3JtcyA9IHNjaGVtYSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAoXG4gICAgICAgICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2VkaXRhYmxlJywge1xuICAgICAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2NoZW1hXG4gICAgICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgICAgIHNjaGVtYS5jaGlsZHJlbiAmJlxuICAgICAgICAgICAgICBoYXNFZGl0YWJsZUZvcm1zKHNjaGVtYS5jaGlsZHJlbilcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc0VkaXRhYmxlRm9ybXModGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgICBhcGksXG4gICAgICBzY2hlbWEsXG4gICAgICBuYW1lLFxuICAgICAgcm91dGVzLFxuICAgICAgbGV2ZWwsXG4gICAgICBuZXN0ZWQgPSB0cnVlLFxuICAgICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgICAgcHJvY2VzcyA9IG51bGxcbiAgICApIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLnByb3BlcnRpZXMpLFxuICAgICAgICBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgIGFwaSxcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICByb3V0ZXMsXG4gICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgIGZsYXR0ZW4sXG4gICAgICAgICAgLy8gUGFzcyBwcm9jZXNzKCkgdG8gYWRkIG1vcmUgcm91dGVzIHRvIGNoaWxkUm91dGVzOlxuICAgICAgICAgIChjaGlsZFJvdXRlcywgbGV2ZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgIC8vIEFkZCBgdHlwZWAgdG8gdGhlIG5lc3RlZCB0cmVlIGxpc3QuXG4gICAgICAgICAgICAgIGNoaWxkcmVuLnR5cGUgPSAndHJlZS1saXN0J1xuICAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBjYWxsIGBwcm9jZXNzU2NoZW1hKClgIGZvciB0aGUgbmVzdGVkIHRyZWUgbGlzdDpcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgICAgICAgICBhcGksXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ubmFtZSxcbiAgICAgICAgICAgICAgICBjaGlsZFJvdXRlcyxcbiAgICAgICAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgICAgICAgdHJ1ZSwgLy8gUGFzcyBgdHJ1ZWAgZm9yIGBmbGF0dGVuYCBpbiB0cmVlIGxpc3RzLlxuICAgICAgICAgICAgICAgIHByb2Nlc3NcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSlcbiAgICB9LFxuXG4gICAgZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nKHNjaGVtYSwgY29udGV4dCkge1xuICAgICAgLy8gQ29udmVydCBuZXN0ZWQgY2hpbGRyZW4gc2NoZW1hIHRvIHN0YW5kLWFsb25lIHNjaGVtYSBjb21wb25lbnQsXG4gICAgICAvLyBwcmVzZW50IGluIGVhY2ggb2YgdGhlIGZvcm1zLCBhcyByZXF1aXJlZCBieSBgcHJvY2Vzc1NjaGVtYURhdGEoKWBcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgPyBmb3JtID0+ICh7XG4gICAgICAgICAgICAgIC4uLmZvcm0sXG4gICAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgICAuLi5mb3JtLmNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgW2NoaWxkcmVuLm5hbWVdOiBjaGlsZHJlblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbnVsbFxuICAgICAgKVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdHJlZS1saXN0IHtcbiAgQGV4dGVuZCAlZmllbGQ7XG5cbiAgLmRpdG8tdHJlZS1wYW5lbCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICA+IC5kaXRvLXRyZWUtaXRlbSB7XG4gICAgICBmbGV4OiAxIDEgMjUlO1xuICAgIH1cblxuICAgID4gLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lciB7XG4gICAgICBmbGV4OiAwIDEgNzUlO1xuICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZTtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDE7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxO1xuICAgICAgbWFyZ2luOiAoLSRpbnB1dC1wYWRkaW5nLXZlcikgKC0kaW5wdXQtcGFkZGluZy1ob3IpO1xuICAgICAgbWFyZ2luLWxlZnQ6ICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBmaWxlc2l6ZSB9IGZyb20gJ2ZpbGVzaXplJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xuICByZXR1cm4gZmlsZXNpemUoc2l6ZSwgeyBiYXNlOiAxMCB9KVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXVwbG9hZFxuICAvLy0gSW4gb3JkZXIgdG8gaGFuZGxlIHVwbG9hZCBidXR0b25zIGluIG11bHRpcGxlIHBvc3NpYmxlIHBsYWNlcywgZGVwZW5kaW5nXG4gIC8vLSBvbiB3aGV0aGVyIHRoZXkgaGFuZGxlIHNpbmdsZSBvciBtdWx0aXBsZSB1cGxvYWRzLCByZW5kZXIgdGhlIHVwbG9hZFxuICAvLy0gY29tcG9uZW50IGludmlzaWJseSBhdCB0aGUgcm9vdCwgYW5kIGRlbGVnYXRlIHRoZSBjbGljayBldmVudHMgdG8gaXQgZnJvbVxuICAvLy0gdGhlIGJ1dHRvbnMgcmVuZGVyZWQgZnVydGhlciBiZWxvdy4gTHVja2lseSB0aGlzIHdvcmtzIHN1cnByaXNpbmdseSB3ZWxsLlxuICBWdWVVcGxvYWQuZGl0by11cGxvYWRfX2lucHV0KFxuICAgIHJlZj1cInVwbG9hZFwiXG4gICAgdi1tb2RlbD1cInVwbG9hZHNcIlxuICAgIDppbnB1dElkPVwiZGF0YVBhdGhcIlxuICAgIDpuYW1lPVwiZGF0YVBhdGhcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6cG9zdEFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgIDpleHRlbnNpb25zPVwiZXh0ZW5zaW9uc1wiXG4gICAgOmFjY2VwdD1cImFjY2VwdFwiXG4gICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgIDpzaXplPVwibWF4U2l6ZVwiXG4gICAgOmRyb3A9XCIkZWw/LmNsb3Nlc3QoJy5kaXRvLWNvbnRhaW5lcicpXCJcbiAgICA6ZHJvcERpcmVjdG9yeT1cInRydWVcIlxuICAgIEBpbnB1dC1maWx0ZXI9XCJvbklucHV0RmlsdGVyXCJcbiAgICBAaW5wdXQtZmlsZT1cIm9uSW5wdXRGaWxlXCJcbiAgKVxuICB0YWJsZS5kaXRvLXRhYmxlLmRpdG8tdGFibGUtc2VwYXJhdG9ycy5kaXRvLXRhYmxlLWJhY2tncm91bmRcbiAgICAvLy0gU3R5bGluZyBjb21lcyBmcm9tIGBEaXRvVGFibGVIZWFkYFxuICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgdHJcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIEZpbGVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICB0aFxuICAgICAgICAgIHNwYW5cbiAgICBEaXRvRHJhZ2dhYmxlKFxuICAgICAgdi1tb2RlbD1cImZpbGVzXCJcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIDpvcHRpb25zPVwiZ2V0RHJhZ2dhYmxlT3B0aW9ucygpXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwibXVsdGlwbGUgfHwgIWlzVXBsb2FkQWN0aXZlXCJcbiAgICAgIClcbiAgICAgICAgdHIoXG4gICAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgICA6a2V5PVwiZmlsZS5uYW1lXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRkKFxuICAgICAgICAgICAgdi1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHRkKFxuICAgICAgICAgICAgdi1lbHNlLWlmPVwiZG93bmxvYWRVcmxzW2luZGV4XVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgYShcbiAgICAgICAgICAgICAgOmRvd25sb2FkPVwiZmlsZS5uYW1lXCJcbiAgICAgICAgICAgICAgOmhyZWY9XCJkb3dubG9hZFVybHNbaW5kZXhdXCJcbiAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJvbkNsaWNrRG93bmxvYWQoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgRGl0b1VwbG9hZEZpbGUoXG4gICAgICAgICAgICAgICAgOmZpbGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICA6dGh1bWJuYWlsPVwidGh1bWJuYWlsc1wiXG4gICAgICAgICAgICAgICAgOnRodW1ibmFpbFVybD1cInRodW1ibmFpbFVybHNbaW5kZXhdXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIHRkKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgKVxuICAgICAgICAgICAgRGl0b1VwbG9hZEZpbGUoXG4gICAgICAgICAgICAgIDpmaWxlPVwiZmlsZVwiXG4gICAgICAgICAgICAgIDp0aHVtYm5haWw9XCJ0aHVtYm5haWxzXCJcbiAgICAgICAgICAgICAgOnRodW1ibmFpbFVybD1cInRodW1ibmFpbFVybHNbaW5kZXhdXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICB0ZC5kaXRvLXVwbG9hZF9fc2l6ZSB7eyBmb3JtYXRGaWxlU2l6ZShmaWxlLnNpemUpIH19XG4gICAgICAgICAgdGQuZGl0by11cGxvYWRfX3N0YXR1c1xuICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgIHYtaWY9XCJmaWxlLnVwbG9hZFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHwgU3RvcmVkXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXVwbG9hZChcbiAgICAgICAgICAgICAgICB2LWlmPVwiIW11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICA6dGl0bGU9XCJ1cGxvYWRUaXRsZVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwib25DbGlja1VwbG9hZFwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgIClcbiAgICB0Zm9vdChcbiAgICAgIHYtaWY9XCJtdWx0aXBsZSB8fCBpc1VwbG9hZEFjdGl2ZSB8fCAhaGFzRmlsZXNcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkKDpjb2xzcGFuPVwiNFwiKVxuICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgKSBDYW5jZWxcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXVwbG9hZChcbiAgICAgICAgICAgICAgICB2LWlmPVwibXVsdGlwbGUgfHwgIWhhc0ZpbGVzXCJcbiAgICAgICAgICAgICAgICA6dGl0bGU9XCJ1cGxvYWRUaXRsZVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwib25DbGlja1VwbG9hZFwiXG4gICAgICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCBwYXJzZUZpbGVTaXplIGZyb20gJ2ZpbGVzaXplLXBhcnNlcidcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL3V0aWxzL3VuaXRzLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVnVlVXBsb2FkIGZyb20gJ3Z1ZS11cGxvYWQtY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3VwbG9hZCcsIHtcbiAgbWl4aW5zOiBbU29ydGFibGVNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVnVlVXBsb2FkIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB1cGxvYWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy51cGxvYWRcbiAgICB9LFxuXG4gICAgdXBsb2FkVGl0bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/ICdVcGxvYWQgRmlsZXMnIDogJ1VwbG9hZCBGaWxlJ1xuICAgIH0sXG5cbiAgICBmaWxlcygpIHtcbiAgICAgIHJldHVybiBhc0ZpbGVzKHRoaXMudmFsdWUpXG4gICAgfSxcblxuICAgIGRvd25sb2FkVXJscygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVzLm1hcCgoZmlsZSwgaW5kZXgpID0+IHRoaXMuZ2V0RG93bmxvYWRVcmwoZmlsZSwgaW5kZXgpKVxuICAgIH0sXG5cbiAgICB0aHVtYm5haWxVcmxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubWFwKChmaWxlLCBpbmRleCkgPT4gdGhpcy5nZXRUaHVtYm5haWxVcmwoZmlsZSwgaW5kZXgpKVxuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gTm8gY2FsbGJhY2sgYXMgaXQncyB1c2VkIGluIGBwcm9jZXNzVmFsdWUoKWBcbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZXh0ZW5zaW9uczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4dGVuc2lvbnMnLCB7XG4gICAgICB0eXBlOiBbQXJyYXksIFN0cmluZywgUmVnRXhwXVxuICAgIH0pLFxuXG4gICAgYWNjZXB0OiBnZXRTY2hlbWFBY2Nlc3NvcignYWNjZXB0Jywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoYWNjZXB0KSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KGFjY2VwdCkgPyBhY2NlcHQuam9pbignLCcpIDogYWNjZXB0XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhTaXplOiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4U2l6ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBnZXQobWF4U2l6ZSkge1xuICAgICAgICByZXR1cm4gbWF4U2l6ZSA/IHBhcnNlRmlsZVNpemUobWF4U2l6ZSkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIGRyYWdnYWJsZSAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDFcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcmVuZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVuZGVyJywge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICB0aHVtYm5haWxzOiBnZXRTY2hlbWFBY2Nlc3NvcigndGh1bWJuYWlscycsIHtcbiAgICAgIHR5cGU6IFtCb29sZWFuLCBTdHJpbmddLFxuICAgICAgZGVmYXVsdCh0aHVtYm5haWxzKSB7XG4gICAgICAgIHJldHVybiB0aHVtYm5haWxzID8/ICEhdGhpcy5zY2hlbWEudGh1bWJuYWlsVXJsXG4gICAgICB9LFxuICAgICAgZ2V0KHRodW1ibmFpbHMpIHtcbiAgICAgICAgcmV0dXJuIHRodW1ibmFpbHMgPT09IHRydWUgPyAnbWVkaXVtJyA6IHRodW1ibmFpbHMgfHwgbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgaGFzRmlsZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWxlcy5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIGhhc1VwbG9hZHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRzLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgaXNVcGxvYWRSZWFkeSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaGFzVXBsb2FkcyAmJlxuICAgICAgICAhKHRoaXMudXBsb2FkLmFjdGl2ZSB8fCB0aGlzLnVwbG9hZC51cGxvYWRlZClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNVcGxvYWRBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNVcGxvYWRzICYmIHRoaXMudXBsb2FkLmFjdGl2ZVxuICAgIH0sXG5cbiAgICB1cGxvYWRQcm9ncmVzcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXBsb2Fkcy5yZWR1Y2UoKHRvdGFsLCBmaWxlKSA9PiB0b3RhbCArICtmaWxlLnByb2dyZXNzLCAwKSAvXG4gICAgICAgIHRoaXMudXBsb2Fkcy5sZW5ndGhcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdXBsb2FkUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlVXJsKHtcbiAgICAgICAgdHlwZTogJ3VwbG9hZCcsXG4gICAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGlzVXBsb2FkUmVhZHkocmVhZHkpIHtcbiAgICAgIGlmIChyZWFkeSkge1xuICAgICAgICAvLyBBdXRvLXVwbG9hZC5cbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBsb2FkLmFjdGl2ZSA9IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvcm1hdEZpbGVTaXplLFxuXG4gICAgZ2V0RmlsZUNvbnRleHQoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgID8gbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIHZhbHVlOiBmaWxlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5maWxlcyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgIH0pXG4gICAgICAgIDogdGhpcy5jb250ZXh0XG4gICAgfSxcblxuICAgIHJlbmRlckZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcih0aGlzLmdldEZpbGVDb250ZXh0KGZpbGUsIGluZGV4KSlcbiAgICB9LFxuXG4gICAgZ2V0RG93bmxvYWRVcmwoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBmaWxlLnVybFxuICAgICAgICA/IGZpbGUudXJsXG4gICAgICAgIDogIWZpbGUudXBsb2FkIHx8IGZpbGUudXBsb2FkLnN1Y2Nlc3NcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2Rvd25sb2FkVXJsJywge1xuICAgICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICAgICAgY29udGV4dDogdGhpcy5nZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFRodW1ibmFpbFVybChmaWxlLCBpbmRleCkge1xuICAgICAgcmV0dXJuICFmaWxlLnVwbG9hZCB8fCBmaWxlLnVwbG9hZC5zdWNjZXNzXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgndGh1bWJuYWlsVXJsJywge1xuICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgICAgY29udGV4dDogdGhpcy5nZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleClcbiAgICAgICAgICB9KSB8fCAoXG4gICAgICAgICAgICBmaWxlLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJylcbiAgICAgICAgICAgICAgPyBmaWxlLnVybFxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICApXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKFxuICAgICAgICBmaWxlICYmXG4gICAgICAgIHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGUudXBsb2FkKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWQucmVtb3ZlKGZpbGUudXBsb2FkKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IGAke25hbWV9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGaWxlSW5kZXgoZmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZVxuICAgICAgICA/IHRoaXMudmFsdWUuZmluZEluZGV4KGl0ID0+IGl0LmlkID09PSBmaWxlLmlkKVxuICAgICAgICA6IC0xXG4gICAgfSxcblxuICAgIGFkZEZpbGUoZmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goZmlsZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gW2ZpbGVdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBmaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2VGaWxlKGZpbGUsIG5ld0ZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGaWxlSW5kZXgoZmlsZSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBpZiAobmV3RmlsZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZVtpbmRleF0gPSBuZXdGaWxlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIG9uSW5wdXRGaWxlKG5ld0ZpbGUsIG9sZEZpbGUpIHtcbiAgICAgIGlmIChuZXdGaWxlICYmICFvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIHNpemUgfSA9IG5ld0ZpbGVcbiAgICAgICAgdGhpcy5hZGRGaWxlKHsgaWQsIG5hbWUsIHNpemUsIHVwbG9hZDogbmV3RmlsZSB9KVxuICAgICAgfVxuICAgICAgaWYgKG5ld0ZpbGUgJiYgb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IHN1Y2Nlc3MsIGVycm9yIH0gPSBuZXdGaWxlXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgICAgY29uc3QgZmlsZSA9IG5ld0ZpbGUucmVzcG9uc2VbMF1cbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZmlsZS51cGxvYWQgPSBuZXdGaWxlXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSB1cGxvYWQgZmlsZSBvYmplY3Qgd2l0aCB0aGUgZmlsZSBvYmplY3QgcmVjZWl2ZWRcbiAgICAgICAgICAgIC8vIGZyb20gdGhlIHVwbG9hZCByZXNwb25zZS5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUZpbGUobmV3RmlsZSwgZmlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgY29uc3QgdGV4dCA9IChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWJvcnQ6ICdVcGxvYWQgYWJvcnRlZCcsXG4gICAgICAgICAgICAgIGRlbmllZDogJ1VwbG9hZCBkZW5pZWQnLFxuICAgICAgICAgICAgICBleHRlbnNpb246IGBVbnN1cHBvcnRlZCBmaWxlLXR5cGU6ICR7bmV3RmlsZS5uYW1lfWAsXG4gICAgICAgICAgICAgIG5ldHdvcms6ICdOZXR3b3JrIGVycm9yIGVuY291bnRlcmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgICBzZXJ2ZXI6ICdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICAgIHNpemU6IGBGaWxlIGlzIHRvbyBsYXJnZTogJHtmb3JtYXRGaWxlU2l6ZShuZXdGaWxlLnNpemUpfWAsXG4gICAgICAgICAgICAgIHRpbWVvdXQ6ICdUaW1lb3V0IG9jY3VycmVkIGR1cmluZyB1cGxvYWQnXG4gICAgICAgICAgICB9W2Vycm9yXSB8fFxuICAgICAgICAgICAgYFVua25vd24gRmlsZSBVcGxvYWQgRXJyb3I6ICcke2Vycm9yfSdgXG4gICAgICAgICAgKVxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIHRpdGxlOiAnRmlsZSBVcGxvYWQgRXJyb3InLFxuICAgICAgICAgICAgdGV4dFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25JbnB1dEZpbHRlcihuZXdGaWxlIC8qLCBvbGRGaWxlLCBwcmV2ZW50ICovKSB7XG4gICAgICBjb25zdCB4aHIgPSBuZXdGaWxlPy54aHJcbiAgICAgIGlmICh0aGlzLmFwaS5jb3JzPy5jcmVkZW50aWFscyAmJiB4aHIgJiYgIXhoci53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGlja0Rvd25sb2FkKGZpbGUsIGluZGV4KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRoaXMuZG93bmxvYWRVcmxzW2luZGV4XSlcbiAgICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlc3BvbnNlLmJsb2IoKVxuICAgICAgICB0aGlzLmRvd25sb2FkKHtcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgIHVybDogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKVxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DbGlja1VwbG9hZChldmVudCkge1xuICAgICAgLy8gRGVsZWdhdGUgdGhlIGNsaWNrIGV2ZW50IHRvIHRoZSBoaWRkZW4gZmlsZSBpbnB1dC5cbiAgICAgIHRoaXMudXBsb2FkLiRlbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBldmVudC5jb25zdHJ1Y3RvcihldmVudC50eXBlLCBldmVudClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHsgc2NoZW1hLCB2YWx1ZSB9KSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgbmV3bHkgYWRkZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGFjdHVhbGx5IHVwbG9hZGVkLlxuICAgIGNvbnN0IGZpbGVzID0gYXNGaWxlcyh2YWx1ZSlcbiAgICAgIC5tYXAoKHsgdXBsb2FkLCAuLi5maWxlIH0pID0+ICghdXBsb2FkIHx8IHVwbG9hZC5zdWNjZXNzID8gZmlsZSA6IG51bGwpKVxuICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUpXG4gICAgcmV0dXJuIHNjaGVtYS5tdWx0aXBsZSA/IGZpbGVzIDogZmlsZXNbMF0gfHwgbnVsbFxuICB9XG59KVxuXG5mdW5jdGlvbiBhc0ZpbGVzKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IGFzQXJyYXkodmFsdWUpIDogW11cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXVwbG9hZCB7XG4gIC5kaXRvLXRhYmxlIHtcbiAgICB0cixcbiAgICAuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cbiAgfVxuXG4gICZfX3NpemUsXG4gICZfX3N0YXR1cyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gICYgJl9faW5wdXQge1xuICAgIC8vIFNlZSBgb25DbGlja1VwbG9hZCgpYCBtZXRob2QgZm9yIGRldGFpbHMuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cblxuICAmX19mb290ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgLmRpdG8tcHJvZ3Jlc3Mge1xuICAgICAgZmxleDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBtb3VudGVkKG5vZGUsIGJpbmRpbmcpIHtcbiAgICBvYnNlcnZlUmVzaXplKG5vZGUsIGJpbmRpbmcudmFsdWUsIGJpbmRpbmcuYXJnKVxuICB9LFxuXG4gIHVubW91bnRlZChub2RlLCBiaW5kaW5nKSB7XG4gICAgdW5vYnNlcnZlUmVzaXplKG5vZGUsIGJpbmRpbmcudmFsdWUsIGJpbmRpbmcuYXJnKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlUmVzaXplKG5vZGUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgT2JzZXJ2ZXIuZ2V0T2JzZXJ2ZXIob3B0aW9ucykub2JzZXJ2ZShub2RlLCBoYW5kbGVyKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5vYnNlcnZlUmVzaXplKG5vZGUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgT2JzZXJ2ZXIuZ2V0T2JzZXJ2ZXIob3B0aW9ucykudW5vYnNlcnZlKG5vZGUsIGhhbmRsZXIpXG59XG5cbmV4cG9ydCBjb25zdCBpc1Jlc2l6ZVN1cHBvcnRlZCA9IHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCdcblxuY29uc3Qgb2JzZXJ2ZXJzID0ge31cblxuY2xhc3MgT2JzZXJ2ZXIge1xuICBjb25zdHJ1Y3RvcihrZXksIG9wdGlvbnMpIHtcbiAgICB0aGlzLmtleSA9IGtleVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcbiAgICB0aGlzLm9ic2VydmVyID0gaXNSZXNpemVTdXBwb3J0ZWRcbiAgICAgID8gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4gdGhpcy5oYW5kbGUoZW50cmllcykpXG4gICAgICA6IG51bGxcbiAgICB0aGlzLmhhbmRsZXJzQnlOb2RlID0gbmV3IFdlYWtNYXAoKVxuICAgIHRoaXMubm9kZUNvdW50ID0gMFxuICB9XG5cbiAgb2JzZXJ2ZShub2RlLCBoYW5kbGVyKSB7XG4gICAgbGV0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc0J5Tm9kZS5nZXQobm9kZSlcbiAgICBpZiAoIWhhbmRsZXJzKSB7XG4gICAgICBoYW5kbGVycyA9IG5ldyBTZXQoKVxuICAgICAgdGhpcy5oYW5kbGVyc0J5Tm9kZS5zZXQobm9kZSwgaGFuZGxlcnMpXG4gICAgICB0aGlzLm9ic2VydmVyPy5vYnNlcnZlKG5vZGUsIHRoaXMub3B0aW9ucylcbiAgICAgIHRoaXMubm9kZUNvdW50KytcbiAgICB9XG4gICAgaGFuZGxlcnMuYWRkKGhhbmRsZXIpXG4gIH1cblxuICB1bm9ic2VydmUobm9kZSwgaGFuZGxlcikge1xuICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc0J5Tm9kZS5nZXQobm9kZSlcbiAgICBpZiAoaGFuZGxlcnM/LmRlbGV0ZShoYW5kbGVyKSAmJiBoYW5kbGVycy5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzQnlOb2RlLmRlbGV0ZShub2RlKVxuICAgICAgdGhpcy5vYnNlcnZlcj8udW5vYnNlcnZlKG5vZGUpXG4gICAgICBpZiAoLS10aGlzLm5vZGVDb3VudCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgb2JzZXJ2ZXJzW3RoaXMua2V5XVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZShlbnRyaWVzKSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNCeU5vZGUuZ2V0KGVudHJ5LnRhcmdldClcbiAgICAgIGlmIChoYW5kbGVycykge1xuICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICB0YXJnZXQ6IGVudHJ5LnRhcmdldCxcbiAgICAgICAgICBjb250ZW50UmVjdDogZW50cnkuY29udGVudFJlY3QsXG4gICAgICAgICAgLy8gVXNlIGBhc0FycmF5YCBzaW5jZSBGaXJlZm94IGJlZm9yZSB2OTIgcmV0dXJucyB0aGVzZSBhcyBvYmplY3RzOlxuICAgICAgICAgIGJvcmRlckJveFNpemU6IGFzQXJyYXkoZW50cnkuYm9yZGVyQm94U2l6ZSksXG4gICAgICAgICAgY29udGVudEJveFNpemU6IGFzQXJyYXkoZW50cnkuY29udGVudEJveFNpemUpLFxuICAgICAgICAgIGRldmljZVBpeGVsQ29udGVudEJveFNpemU6IGFzQXJyYXkoZW50cnkuZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnMpIHtcbiAgICAgICAgICBoYW5kbGVyKGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldE9ic2VydmVyKHsgYm94ID0gJ2NvbnRlbnQtYm94JyB9ID0ge30pIHtcbiAgICBjb25zdCBvcHRpb25zID0geyBib3ggfVxuICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpXG4gICAgb2JzZXJ2ZXJzW2tleV0gfHw9IG5ldyBPYnNlcnZlcihrZXksIG9wdGlvbnMpXG4gICAgcmV0dXJuIG9ic2VydmVyc1trZXldXG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2NyZWF0ZScsICdjcmVhdGVkJyxcbiAgJ3NhdmUnLCAnc2F2ZWQnLFxuICAnYXBwbHknLCAnYXBwbGllZCcsXG4gICdzdWJtaXQnLCAnc3VibWl0dGVkJyxcbiAgJ2RlbGV0ZScsICdkZWxldGVkJyxcbiAgJ3JlbW92ZScsICdyZW1vdmVkJyxcbiAgJ2NsZWFyJywgJ2NsZWFyZWQnLFxuICAnZWRpdCcsICdlZGl0ZWQnLFxuICAnY2xvc2UnLCAnY2xvc2VkJyxcbiAgJ2NhbmNlbCcsICdjYW5jZWxsZWQnLFxuICAnZHJhZycsICdkcmFnZ2VkJyxcbiAgJ2xvZ2luJywgJ2xvZ2dlZCBpbidcbl0ucmVkdWNlKCh2ZXJicywgdmVyYikgPT4ge1xuICB2ZXJic1t2ZXJiXSA9IHZlcmJcbiAgcmV0dXJuIHZlcmJzXG59LCB7fSlcbiIsImltcG9ydCB7IGNyZWF0ZUFwcCwgaCBhcyBjcmVhdGVFbGVtZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyLCBjcmVhdGVXZWJIaXN0b3J5IH0gZnJvbSAndnVlLXJvdXRlcidcbmltcG9ydCBWdWVOb3RpZmljYXRpb25zIGZyb20gJ0BreXZnL3Z1ZTMtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsXG4gIGlzQWJzb2x1dGVVcmwsXG4gIGFzc2lnbkRlZXBseSxcbiAgaHlwaGVuYXRlLFxuICBjYW1lbGl6ZSxcbiAgZGVmYXVsdEZvcm1hdHMsXG4gIGRlcHJlY2F0ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBSZXNpemVEaXJlY3RpdmUgZnJvbSAnLi9kaXJlY3RpdmVzL3Jlc2l6ZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGZvcm1hdFF1ZXJ5IH0gZnJvbSAnLi91dGlscy9yb3V0ZS5qcydcbmltcG9ydCB2ZXJicyBmcm9tICcuL3ZlcmJzLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQWRtaW4ge1xuICBjb25zdHJ1Y3RvcihlbCwge1xuICAgIC8vIGBkaXRvYCBjb250YWlucyB0aGUgYmFzZSBhbmQgYXBpIHNldHRpbmdzIHBhc3NlZCBmcm9tIGBBZG1pbkNvbnRyb2xsZXJgXG4gICAgZGl0byA9IHt9LFxuICAgIGFwaSxcbiAgICB2aWV3cyA9IHt9LFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5lbCA9IGVsXG4gICAgLy8gTWVyZ2UgaW4gYGFwaWAgc2V0dGluZ3MgYXMgcGFzc2VkIGZyb20gYGNvbmZpZy5hZG1pbmAgYW5kIHRocm91Z2ggdGhlXG4gICAgLy8gYEFkbWluQ29udHJvbGxlcmAgd2l0aCBgYXBpYCB2YWx1ZXMgZnJvbSBmcm9tICdhZG1pbi9pbmRleC5qcydcbiAgICAvLyBOT1RFOiBgQWRtaW5Db250cm9sbGVyYCBwcm92aWRlcyBgZGl0by5hcGkuYmFzZWBcbiAgICB0aGlzLmFwaSA9IGFwaSA9IGFzc2lnbkRlZXBseSh7IGJhc2U6ICcvJyB9LCBkaXRvLmFwaSwgYXBpKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcblxuICAgIC8vIFNldHVwIGRlZmF1bHQgYXBpIHNldHRpbmdzOlxuICAgIGFwaS5sb2NhbGUgfHw9ICdlbi1VUydcbiAgICBhcGkuZm9ybWF0cyA9IGFzc2lnbkRlZXBseSh7fSwgZGVmYXVsdEZvcm1hdHMsIGFwaS5mb3JtYXRzKVxuICAgIGFwaS5yZXF1ZXN0IHx8PSBvcHRpb25zID0+IHJlcXVlc3QoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5nZXRBcGlVcmwgfHw9IG9wdGlvbnMgPT4gZ2V0QXBpVXJsKGFwaSwgb3B0aW9ucylcbiAgICBhcGkuaXNBcGlVcmwgfHw9IHVybCA9PiBpc0FwaVVybChhcGksIHVybClcbiAgICAvLyBTZXR0aW5nIGBhcGkubm9ybWFsaXplUGF0aHMgPSB0cnVlIChwbHVyYWwpIHNldHMgYm90aDpcbiAgICAvLyBgYXBpLm5vcm1hbGl6ZVBhdGggPSBoeXBoZW5hdGVgIGFuZCBgYXBpLmRlbm9ybWFsaXplUGF0aCA9IGNhbWVsaXplYFxuICAgIGFwaS5ub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBoeXBoZW5hdGUgOiB2YWwgPT4gdmFsXG4gICAgYXBpLmRlbm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gY2FtZWxpemUgOiB2YWwgPT4gdmFsXG5cbiAgICAvLyBBbGxvdyBkZWZpbml0aW9uIG9mIGRlZmF1bHRzIGZvciBhZG1pbiBjb21wb25lbnQgdHlwZXMsIG5lc3RlZCBwZXIgdHlwZTpcbiAgICAvLyBhcGkuZGVmYXVsdHMgPSB7XG4gICAgLy8gICAnbXVsdGlzZWxlY3QnOiB7XG4gICAgLy8gICAgIHNlbGVjdGFibGU6IHRydWVcbiAgICAvLyAgIH0sXG4gICAgLy8gICAnZmFrZS10eXBlJzogc2NoZW1hID0+IHtcbiAgICAvLyAgICAgLy8gUmV0dXJuIGRlZmF1bHRzLCBvciBkaXJlY3RseSBtb2RpZnkgdGhlIHNjaGVtYTpcbiAgICAvLyAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHtcbiAgICAvLyAgICAgICB0eXBlOiAncmVhbC10eXBlJyxcbiAgICAvLyAgICAgICBmb3JtYXQ6ICh7IHZhbHVlIH0pID0+IGBGb3JtYXR0ZWQgJHt2YWx1ZX1gLFxuICAgIC8vICAgICAgIHByb2Nlc3M6ICh7IHZhbHVlIH0pID0+IGBQcm9jZXNzZWQgJHt2YWx1ZX1gXG4gICAgLy8gICAgIH0pXG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgYXBpLmRlZmF1bHRzIHx8PSB7fVxuXG4gICAgLy8gQWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIGF1dGggcmVzb3VyY2VzLCBsaWtlIHNvOlxuICAgIC8vIGFwaS51c2VycyA9IHtcbiAgICAvLyAgIHBhdGg6ICcvYWRtaW5zJyxcbiAgICAvLyAgIC8vIFRoZXNlIGFyZSB0aGUgZGVmYXVsdHM6XG4gICAgLy8gICBsb2dpbjoge1xuICAgIC8vICAgICBwYXRoOiAnbG9naW4nLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIGxvZ291dDoge1xuICAgIC8vICAgICBwYXRoOiAnbG9nb3V0JyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzZXNzaW9uOiB7XG4gICAgLy8gICAgIHBhdGg6ICdzZXNzaW9uJyxcbiAgICAvLyAgICAgbWV0aG9kOiAnZ2V0J1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICBjb25zdCB1c2VycyA9IGdldFJlc291cmNlKGFwaS51c2Vycywge1xuICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nXG4gICAgfSkgfHwge31cbiAgICB1c2Vycy5sb2dpbiA9IGdldFJlc291cmNlKHVzZXJzLmxvZ2luIHx8ICdsb2dpbicsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMubG9nb3V0ID0gZ2V0UmVzb3VyY2UodXNlcnMubG9nb3V0IHx8ICdsb2dvdXQnLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLnNlc3Npb24gPSBnZXRSZXNvdXJjZSh1c2Vycy5zZXNzaW9uIHx8ICdzZXNzaW9uJywge1xuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIGFwaS51c2VycyA9IHVzZXJzXG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIG9mIHJlc291cmNlIHBhdGggaGFuZGxlcnM6XG4gICAgLy8gYXBpLnJlc291cmNlcyA9IHtcbiAgICAvLyAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAvLyAgICAgcmV0dXJuIHJlc291cmNlLnBhcmVudFxuICAgIC8vICAgICAgID8gYCR7cmVzb3VyY2UucGF0aH0/JHtyZXNvdXJjZS5wYXJlbnQucGF0aH1faWQ9JHtcbiAgICAvLyAgICAgICAgICByZXNvdXJjZS5wYXJlbnQuaWR9YFxuICAgIC8vICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgICBhbnkocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXNbcmVzb3VyY2U/LnR5cGVdIHx8IHRoaXMuZGVmYXVsdFxuICAgICAgICByZXR1cm4gcmVzb3VyY2UgJiYgaGFuZGxlci5jYWxsKHRoaXMsIHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgZGVmYXVsdChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGhpcy5hbnkocmVzb3VyY2UucGFyZW50KVxuICAgICAgICByZXR1cm4gcGFyZW50UGF0aFxuICAgICAgICAgID8gYCR7cGFyZW50UGF0aH0vJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdChyZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIG1lbWJlcihyZXNvdXJjZSkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5kZWZhdWx0KHJlc291cmNlKX0vJHtyZXNvdXJjZS5pZH1gXG4gICAgICB9LFxuXG4gICAgICB1cGxvYWQocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gRGl0byBTZXJ2ZXIgaGFuZGxlcyB1cGxvYWQgcm91dGVzIG9uIHRoZSBjb2xsZWN0aW9uIHJlc291cmNlOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2xsZWN0aW9uKHJlc291cmNlLnBhcmVudCl9L3VwbG9hZC8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgfSxcblxuICAgICAgLi4uYXBpLnJlc291cmNlc1xuICAgIH1cblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgLyBleHRlbmRpbmcgb2YgaGVhZGVyczpcbiAgICAvLyBhcGkuaGVhZGVycyA9IHtcbiAgICAvLyAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAvLyB9XG4gICAgYXBpLmhlYWRlcnMgPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLi4uYXBpLmhlYWRlcnNcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZWwpKSB7XG4gICAgICBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpXG4gICAgfVxuXG4gICAgY29uc3QgYXBwID0gKHRoaXMuYXBwID0gY3JlYXRlQXBwKHtcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgRGl0b1Jvb3QsXG4gICAgICAgIFZ1ZU5vdGlmaWNhdGlvbnMsXG4gICAgICAgIC8vIFRoaXMgbWF5IG9ubHkgYmUgbmVlZGVkIHRvIGF2b2lkIHRyZWUtc2hhY2tpbmcgb2YgdGhlc2UgY29tcG9uZW50cyxcbiAgICAgICAgLy8gc2luY2UgdGhleSBhY3R1YWxseSBoYW5kbGUgcmVnaXN0cnkgaW50ZXJuYWxseSBhbHJlYWR5LlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBvbmNlIHdlIGhhdmUgYSBiZXR0ZXIgc29sdXRpb24uXG4gICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICAgIC4uLnR5cGVzXG4gICAgICB9LFxuXG4gICAgICAvLyBNb3N0IGluamVjdHMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZSByZWFjdGl2ZW5lc3MgYWNyb3NzXG4gICAgICAvLyBwcm92aWRlL2luamVjdCwgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgICBwcm92aWRlOiB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgLy8gQSBkZWZhdWx0IGxpc3Qgb2YgdmVyYnMgYXJlIHByb3ZpZGVkIGJ5ICR2ZXJicygpIGFuZCBjYW4gYmVcbiAgICAgICAgLy8gb3ZlcnJpZGRlbiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvbXBvbmVudCBoaWVyYXJjaHkuXG4gICAgICAgICR2ZXJiczogKCkgPT4gdmVyYnMsXG4gICAgICAgIC8vIFByb3ZpZGUgZGVmYXVsdHMgc28gRGl0b01peGluIGNhbiBpbmplY3QgdGhlbSBmb3IgYWxsIGNvbXBvbmVudHM6XG4gICAgICAgIC8vICAgaW5qZWN0OiBbICAnJGlzUG9wdWxhdGVkJywgJyRzY2hlbWFDb21wb25lbnQnLCAnJHJvdXRlQ29tcG9uZW50JyBdXG4gICAgICAgICR2aWV3czogKCkgPT4ge30sXG4gICAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgJHBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGF0YUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHJlbmRlcjogKCkgPT5cbiAgICAgICAgY3JlYXRlRWxlbWVudChEaXRvUm9vdCwge1xuICAgICAgICAgIHJlZjogJ3Jvb3QnLFxuICAgICAgICAgIGNsYXNzOiBkaXRvLnNldHRpbmdzLnJvb3RDbGFzcyxcbiAgICAgICAgICB1bnJlc29sdmVkVmlld3M6IHZpZXdzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfSlcbiAgICB9KSlcblxuICAgIC8vIFByZXZlbnQgZW5kbGVzcyBsb29wcyBvZiBlcnJvciBtZXNzYWdlcyBkdXJpbmcgcmVuZGVyIGZ1bmN0aW9ucyBieVxuICAgIC8vIHNldHRpbmcgYSBjdXN0b20gZXJyb3IgaGFuZGxlci5cbiAgICBhcHAuY29uZmlnLmVycm9ySGFuZGxlciA9IGNvbnNvbGUuZXJyb3JcblxuICAgIGFwcC51c2UoVnVlTm90aWZpY2F0aW9ucywge1xuICAgICAgY29tcG9uZW50TmFtZTogJ1Z1ZU5vdGlmaWNhdGlvbnMnLFxuICAgICAgbmFtZTogJ25vdGlmeSdcbiAgICB9KVxuXG4gICAgYXBwLmRpcmVjdGl2ZSgncmVzaXplJywgUmVzaXplRGlyZWN0aXZlKVxuXG4gICAgYXBwLnVzZShcbiAgICAgIGNyZWF0ZVJvdXRlcih7XG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBjYXRjaC1hbGwgcm91dGUsIHRvIGJlIHJlcGxhY2VkIGJ5IHRoZSBhY3R1YWwgcm91dGVzXG4gICAgICAgIC8vIG9uY2UgdGhlIHNjaGVtYXMgYXJlIGxvYWRlZCwgdG8gcHJldmVudCB2dWUtcm91dGVyIGZyb20gY29tcGxhaW5pbmcsXG4gICAgICAgIC8vIHNlZTogYHJlc29sdmVWaWV3cygpYCBpbiBgRGl0b1Jvb3RgIGZvciB0aGUgYWN0dWFsIHJvdXRlIHNldHVwLlxuICAgICAgICByb3V0ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnY2F0Y2gtYWxsJyxcbiAgICAgICAgICAgIHBhdGg6ICcvOl8oLiopJyxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHt9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBoaXN0b3J5OiBjcmVhdGVXZWJIaXN0b3J5KGRpdG8uYmFzZSksXG4gICAgICAgIGxpbmtBY3RpdmVDbGFzczogJycsXG4gICAgICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAnJ1xuICAgICAgfSlcbiAgICApXG5cbiAgICBlbC5jbGFzc0xpc3QuYWRkKCdkaXRvLWFwcCcpXG4gICAgYXBwLm1vdW50KGVsKVxuICB9XG5cbiAgcmVnaXN0ZXIodHlwZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcih0eXBlLCBvcHRpb25zKVxuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBzdXBlcihcbiAgICAgIGBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c30gKCR7XG4gICAgICAgIHJlc3BvbnNlLnN0YXR1c1RleHRcbiAgICAgIH0pYFxuICAgIClcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0KGFwaSwge1xuICB1cmwsXG4gIG1ldGhvZCA9ICdnZXQnLFxuICAvLyBUT0RPOiBgcmVxdWVzdC5wYXJhbXNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBgcXVlcnlgIG9uIDIwMjItMTEtMDEsXG4gIC8vIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55IG1vcmUuXG4gIHBhcmFtcyA9IG51bGwsXG4gIHF1ZXJ5ID0gcGFyYW1zIHx8IG51bGwsXG4gIGhlYWRlcnMgPSBudWxsLFxuICBkYXRhID0gbnVsbCxcbiAgc2lnbmFsID0gbnVsbFxufSkge1xuICBpZiAocGFyYW1zKSB7XG4gICAgZGVwcmVjYXRlKFxuICAgICAgYHJlcXVlc3QucGFyYW1zIGlzIGRlcHJlY2F0ZWQuIFVzZSBhY3Rpb24ubWV0aG9kIGFuZCBhY3Rpb24ucGF0aCBpbnN0ZWFkLmBcbiAgICApXG4gIH1cblxuICBjb25zdCBpc0FwaVVybCA9IGFwaS5pc0FwaVVybCh1cmwpXG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeSB9KSwge1xuICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgLi4uKGRhdGEgJiYgeyBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSB9KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi4oaXNBcGlVcmwgJiYgYXBpLmhlYWRlcnMpLFxuICAgICAgLi4uaGVhZGVyc1xuICAgIH0sXG4gICAgY3JlZGVudGlhbHM6XG4gICAgICBpc0FwaVVybCAmJiBhcGkuY29ycz8uY3JlZGVudGlhbHNcbiAgICAgICAgPyAnaW5jbHVkZSdcbiAgICAgICAgOiAnc2FtZS1vcmlnaW4nLFxuICAgIHNpZ25hbFxuICB9KVxuXG4gIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICByZXNwb25zZS5kYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihyZXNwb25zZSlcbiAgfVxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gaXNBcGlVcmwoYXBpLCB1cmwpIHtcbiAgcmV0dXJuICFpc0Fic29sdXRlVXJsKHVybCkgfHwgdXJsLnN0YXJ0c1dpdGgoYXBpLnVybClcbn1cblxuZnVuY3Rpb24gZ2V0QXBpVXJsKGFwaSwgeyB1cmwsIHF1ZXJ5IH0pIHtcbiAgaWYgKCF1cmwuc3RhcnRzV2l0aChhcGkudXJsKSAmJiAhaXNBYnNvbHV0ZVVybCh1cmwpKSB7XG4gICAgdXJsID0gY29tYmluZVVybHMoYXBpLnVybCwgdXJsKVxuICB9XG4gIC8vIFN1cHBvcnQgb3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycywgdG8gYmUgYXJlIGFkZGVkIHRvIHRoZSBVUkwuXG4gIGNvbnN0IHNlYXJjaCA9IGZvcm1hdFF1ZXJ5KHF1ZXJ5KVxuICByZXR1cm4gc2VhcmNoID8gYCR7dXJsfSR7dXJsLmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPyd9JHtzZWFyY2h9YCA6IHVybFxufVxuXG5mdW5jdGlvbiBjb21iaW5lVXJscyhiYXNlVXJsLCByZWxhdGl2ZVVybCkge1xuICAvLyBVc2Ugc2FtZSBhcHByb2FjaCBhcyBheGlvcyBgY29tYmluZVVSTHMoKWAgdG8gam9pbiBiYXNlVXJsICYgcmVsYXRpdmVVcmw6XG4gIHJldHVybiBgJHtiYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpfS8ke3JlbGF0aXZlVXJsLnJlcGxhY2UoL15cXC8rLywgJycpfWBcbn1cbiJdLCJuYW1lcyI6WyJwYXJzZVVzZXJBZ2VudCIsInVzZXJBZ2VudCIsImFnZW50IiwidWEiLCJvcyIsInBsYXRmb3JtIiwibWF0Y2giLCJicm93c2VyIiwidjEiLCJ2MiIsInJ2IiwidmVyc2lvbiIsImFwcFN0YXRlIiwicmVhY3RpdmUiLCJhcHBlbmREYXRhUGF0aCIsImRhdGFQYXRoIiwidG9rZW4iLCJwYXJzZVBhcmVudERhdGFQYXRoIiwicGF0aCIsInBhcnNlRGF0YVBhdGgiLCJwYXJzZUl0ZW1EYXRhUGF0aCIsIm5lc3RlZCIsImdldEl0ZW1EYXRhUGF0aCIsIm5vcm1hbGl6ZURhdGFQYXRoIiwicGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgiLCJpc0ludGVnZXIiLCJnZXRQYXJlbnRJdGVtRGF0YVBhdGgiLCJnZXRJdGVtIiwicm9vdEl0ZW0iLCJnZXRWYWx1ZUF0RGF0YVBhdGgiLCJnZXRQYXJlbnRJdGVtIiwiZ2V0TGFzdERhdGFQYXRoVG9rZW4iLCJnZXRMYXN0RGF0YVBhdGhOYW1lIiwiZ2V0TGFzdERhdGFQYXRoSW5kZXgiLCJpbmRleCIsInRlbXBvcmFyeUlkIiwic2V0VGVtcG9yYXJ5SWQiLCJkYXRhIiwiaWRLZXkiLCJpc1RlbXBvcmFyeUlkIiwiaWQiLCJpc1JlZmVyZW5jZSIsImhhc093blByb3BlcnR5IiwiY29udGV4dHMiLCJ0b09iamVjdCIsImNvbnRleHQiLCJyYXdTdGFydCIsInRvUmF3IiwicmF3Iiwib2JqZWN0IiwiZ2V0Iiwia2V5IiwiZGVmYXVsdFZhbHVlIiwidmFsdWUiLCJpc0Z1bmN0aW9uIiwic2V0IiwiRGl0b0NvbnRleHQiLCJjb21wb25lbnQiLCJpdGVtIiwib3B0aW9ucyIsImxvY2F0aW9uIiwicmVzb3VyY2UiLCJFbWl0dGVyTWl4aW4iLCJldmVudCIsImNhbGxiYWNrIiwiaXNBcnJheSIsImV2IiwiaXNQbGFpbk9iamVjdCIsImxpc3RlbmVycyIsImNhbGxiYWNrcyIsIm9uIiwiYXJncyIsImVudHJ5IiwiX2EiLCJjYiIsInF1ZXVlIiwicmVzb2x2ZSIsIm5leHQiLCJyZXN1bHQiLCJyZXMiLCJlcnJvciIsInRhcmdldCIsIlZhbHVlTWl4aW4iLCJjb21wdXRlVmFsdWUiLCJmb3JtYXQiLCJwYXJzZSIsIkNvbnRleHRNaXhpbiIsImdldFByb2Nlc3NlZFBhcmVudERhdGEiLCJzY2hlbWFDb21wb25lbnQiLCJjcmVkaXRjYXJkIiwiaXNDcmVkaXRDYXJkIiwiZGVjaW1hbHMiLCJlbWFpbCIsImlzRW1haWwiLCJob3N0bmFtZSIsImlzSG9zdG5hbWUiLCJkb21haW4iLCJpc0RvbWFpbiIsImludGVnZXIiLCJtYXgiLCJtaW4iLCJwYXNzd29yZCIsInJhbmdlIiwicmVxdWlyZWQiLCJzZXR0aW5ncyIsInVybCIsImlzVXJsIiwiVmFsaWRhdGlvbk1peGluIiwibm90aWZ5IiwiaXNWYWxpZCIsInJ1bGUiLCJzZXR0aW5nIiwidmFsaWRhdG9yIiwidmFsaWRhdG9ycyIsInZhbGlkYXRlIiwibWVzc2FnZSIsImFkZExhYmVsIiwiZXJyb3JzIiwiZm9jdXMiLCJnZXRTY2hlbWFBY2Nlc3NvciIsImtleU9yRGF0YVBhdGgiLCJ0eXBlIiwiZGVmIiwiaXNTdHJpbmciLCJuYW1lIiwiZ2V0U3RvcmVBY2Nlc3NvciIsIlR5cGVNaXhpbiIsIm5vZGUiLCJjbGVhcmFibGUiLCJldmVudHMiLCJjYW1lbGl6ZSIsIm5hdGl2ZUZpZWxkIiwidGV4dEZpZWxkIiwiYXR0cmlidXRlcyIsInZhbGlkYXRpb25zIiwiYWRkIiwib25Gb2N1cyIsIm9uQmx1ciIsIm9uSW5wdXQiLCJvbkNoYW5nZSIsIl9iIiwiZWxlbWVudCIsImFzQXJyYXkiLCJ1aWRNYXAiLCJ1aWQiLCJnZXRVaWQiLCJnZXRJdGVtSWQiLCJTY2hlbWFHcmFwaCIsIl9fcHVibGljRmllbGQiLCJkZWZhdWx0cyIsInN1YkdyYXBoIiwicGFydCIsInNjaGVtYSIsInJlbGF0ZWREYXRhUGF0aCIsIm5hbm9pZCIsImZsYXR0ZW4iLCJncmFwaCIsImVudHJpZXMiLCIkc2V0dGluZ3MiLCJzdWJLZXkiLCJzb3VyY2VTY2hlbWEiLCJjbGlwYm9hcmQiLCJpbnRlcm5hbCIsInJlbGF0ZWQiLCJyZWZlcmVuY2UiLCJzb3VyY2UiLCJyZWxhdGlvbiIsInZhbHVlcyIsInJlbW92ZUlkIiwicmVmZXJlbmNlSWQiLCJyZWZLZXkiLCJyZXZWYWx1ZSIsInR5cGVDaGVja2VycyIsImlzQm9vbGVhbiIsImlzTnVtYmVyIiwiaXNEYXRlIiwiaXNPYmplY3QiLCJpc1JlZ0V4cCIsInRvQm9vbGVhbiIsInRvTnVtYmVyIiwidG9TdHJpbmciLCJ0b0RhdGUiLCJ0b0FycmF5IiwidG9SZWdFeHAiLCJ0eXBlQ29udmVydGVycyIsImlzTWF0Y2hpbmdUeXBlIiwidHlwZXMiLCJjb252ZXJ0VHlwZSIsImNvbnZlcnRlciIsInR5cGVDb21wb25lbnRzIiwidW5rbm93blR5cGVSZXBvcnRlZCIsImVtcHR5U2NoZW1hIiwicmVnaXN0ZXJUeXBlQ29tcG9uZW50IiwiZ2V0VHlwZUNvbXBvbmVudCIsImFsbG93TnVsbCIsIml0ZXJhdGVTY2hlbWFDb21wb25lbnRzIiwic2NoZW1hcyIsImlzU2luZ2xlQ29tcG9uZW50VmlldyIsImlzU2NoZW1hIiwiaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMiLCJnZXRUYWJTY2hlbWFzIiwiZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudCIsInNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQiLCJoYXNOZXN0ZWRTY2hlbWFDb21wb25lbnRzIiwiaXNGb3JtIiwiaXNWaWV3IiwiaXNUYWIiLCJpc1BhbmVsIiwiaXNNZW51IiwiZ2V0U2NoZW1hSWRlbnRpZmllciIsInJlc29sdmVkU2NoZW1hcyIsInJlc29sdmVTY2hlbWEiLCJ1bndyYXBNb2R1bGUiLCJpc1Byb21pc2UiLCJpc01vZHVsZSIsImtleXMiLCJyZXNvbHZlU2NoZW1hcyIsInVucmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZUl0ZW0iLCJtYXBDb25jdXJyZW50bHkiLCJyZXNvbHZlVmlld3MiLCJ1bnJlc29sdmVkVmlld3MiLCJmbGF0dGVuVmlld3MiLCJ2aWV3cyIsInJlc29sdmVTY2hlbWFDb21wb25lbnQiLCJtYXJrUmF3IiwiRGl0b01peGluIiwicmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMiLCJwcm9jZXNzZWRTY2hlbWFEZXB0aHMiLCJwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyIsImFwaSIsInJvdXRlcyIsImxldmVsIiwibWF4RGVwdGgiLCJkZXB0aCIsInByb21pc2VzIiwicHJvY2VzcyIsInJlbGF0aXZlTGV2ZWwiLCJwcm9jZXNzU2NoZW1hQ29tcG9uZW50IiwiZ2V0UGFuZWxTY2hlbWFzIiwicHJvY2Vzc1NjaGVtYURlZmF1bHRzIiwicGFuZWwiLCJnZXRUeXBlT3B0aW9ucyIsInByb2Nlc3NWaWV3IiwiZnVsbFBhdGgiLCJwcm9jZXNzUm91dGVTY2hlbWEiLCJjaGlsZHJlbiIsInByb2Nlc3NOZXN0ZWRTY2hlbWFzIiwiYXNzaWduRGVlcGx5IiwicHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzIiwiZm9ybXMiLCJnZXRGb3JtU2NoZW1hcyIsImZvcm0iLCJwcm9jZXNzRm9ybXMiLCJjb21wb25lbnRzIiwicHJvY2Vzc0Zvcm0iLCJwcm9jZXNzVGFiIiwicHJvY2Vzc1BhbmVsIiwidGFicyIsInBhbmVscyIsInRhYiIsImhhc0Zvcm1TY2hlbWEiLCJoYXNNdWx0aXBsZUZvcm1TY2hlbWFzIiwiZ2V0Vmlld0Zvcm1TY2hlbWEiLCJ2aWV3Iiwidmlld1NjaGVtYSIsImdldFZpZXdTY2hlbWEiLCJoYXNWaWV3U2NoZW1hIiwiZ2V0Vmlld0VkaXRQYXRoIiwibW9kaWZ5Rm9ybSIsImNvbXBhY3QiLCJnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyIsImdldEl0ZW1Gb3JtU2NoZW1hIiwiaXNFbXB0eVNjaGVtYSIsImlzQ29tcGFjdCIsImlzSW5saW5lZCIsImlzTmVzdGVkIiwiaGFzTGFiZWwiLCJnZW5lcmF0ZUxhYmVscyIsImxhYmVsIiwib21pdFNwYWNpbmciLCJnZXRTY2hlbWFWYWx1ZSIsImNvbnZlcnRlZCIsInNob3VsZFJlbmRlclNjaGVtYSIsImdldENvbnRleHQiLCJnZXREZWZhdWx0VmFsdWUiLCJjbG9uZSIsInNob3VsZEV4Y2x1ZGVWYWx1ZSIsImV4Y2x1ZGVWYWx1ZSIsInNob3VsZElnbm9yZU1pc3NpbmdWYWx1ZSIsInNldERlZmF1bHRWYWx1ZXMiLCJwcm9jZXNzU2NoZW1hRGF0YSIsInJvb3REYXRhIiwiY29tcHV0ZSIsImNsb25lSXRlbSIsImNvcHkiLCJvcmRlcktleSIsInByb2Nlc3NEYXRhIiwic2NoZW1hT25seSIsInByb2Nlc3NlZERhdGEiLCJ3cmFwUHJpbWl0aXZlcyIsImEiLCJiIiwiaWQxIiwiaWQyIiwicHJvY2Vzc1ZhbHVlIiwicHJvY2Vzc0JlZm9yZSIsInByb2Nlc3NBZnRlciIsInByb2Nlc3NDb21wb25lbnRzIiwiZ2V0RGF0YVBhdGgiLCJjb21wb25lbnRTY2hlbWEiLCJjb21wb25lbnREYXRhUGF0aCIsInByb2Nlc3NJdGVtIiwiaXRlbURhdGFQYXRoIiwicHJvY2Vzc2VkSXRlbSIsImdldE5hbWVkU2NoZW1hcyIsImFycmF5IiwidG9TY2hlbWEiLCJnZXRCdXR0b25TY2hlbWFzIiwiYnV0dG9ucyIsImdldFR5cGUiLCJzY2hlbWFPclR5cGUiLCJnZXRTb3VyY2VUeXBlIiwiZ2V0UGFuZWxFbnRyeSIsInRhYkNvbXBvbmVudCIsImdldFBhbmVsRW50cmllcyIsInBhbmVsU2NoZW1hcyIsInBhbmVsRW50cmllcyIsImdldEFsbFBhbmVsRW50cmllcyIsInBhbmVsU2NoZW1hIiwiaXNPYmplY3RTb3VyY2UiLCJpc0xpc3RTb3VyY2UiLCJnZXRJdGVtVWlkIiwiaGFzUmVzb3VyY2UiLCJnZXRSZXNvdXJjZSIsInBhcmVudCIsImRlZnMiLCJnZXRNZW1iZXJSZXNvdXJjZSIsInBpY2tCeSIsInNlbGYiLCJnZXRQYXJlbnRDb21wb25lbnQiLCJuZXh0VWlkIiwibGFiZWxpemUiLCJzdG9yZSIsIm9sZEtleSIsInZlcmIiLCJxdWVyeSIsIm1ldGhvZCIsInNpZ25hbCIsImNoZWNrVXNlciIsInJlc3BvbnNlIiwiZXF1YWxzIiwiY2FjaGUiLCJjYWNoZVBhcmVudCIsImxvYWRDYWNoZSIsImNhY2hlS2V5IiwibG9jYWxlIiwiYm9keSIsImdldENvbXB1dGVkQWNjZXNzb3IiLCJnZXR0ZXIiLCJjb21wdXRlZCIsImFjY2Vzc29yIiwid2F0Y2giLCJoYW5kbGVycyIsImV4cHIiLCJhZGRFdmVudCIsImh5cGhlbmF0ZSIsImhhc0xpc3RlbmVycyIsInBhcmVudEhhc0xpc3RlbmVycyIsImVtaXRFdmVudCIsImhhbmRsZVBhcmVudExpc3RlbmVycyIsImhhbmRsZUxpc3RlbmVycyIsInBhcmFtcyIsImN1cnJlbnQiLCJyZXNvbHZlTWVyZ2VkT3B0aW9ucyIsIm1peGlucyIsIm1lcmdlT3B0aW9ucyIsInRvIiwiZnJvbSIsIm1peGluIiwiZGl0b09wdGlvbktleXMiLCJEaXRvQ29tcG9uZW50IiwiZGVmaW5pdGlvbiIsImRlc2NyaWJlRGF0ZSIsImRhdGUiLCJhbHRlckRhdGUiLCJvdmVycmlkZXMiLCJwYXJzZURhdGUiLCJzdHJpbmciLCJ0aW1lIiwidGltZURlZmF1bHQiLCJkYXkiLCJzZXAxIiwibW9udGgiLCJzZXAyIiwieWVhciIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCIsImdldERhdGVQYXJ0cyIsImdldE1vbnRoSW5kZXgiLCJpc1ZhbGlkVGltZVBhcnQiLCJnZXREYXRlUGFydEF0UG9zaXRpb24iLCJwb3NpdGlvbiIsInBhcnRzIiwiZ2V0UG9zaXRpb24iLCJsZW5ndGgiLCJwb3MiLCJvZmZzZXQiLCJpc1VTIiwic3RhcnQiLCJlbmQiLCJzaG9ydEZvcm1hdCIsImxvbmdGb3JtYXQiLCJpIiwiX3NmY19tYWluIiwid2Vla2RheU5hbWVzIiwibW9udGhOYW1lcyIsImdldExvY2FsZU5hbWVzIiwibW9kZSIsInVwZGF0ZSIsInN0ZXAiLCJjdXJyZW50VmFsdWUiLCJlbnRlciIsInN0YXJ0WWVhciIsImZpcnN0RGF5V2VlayIsIm51bURheXMiLCJwcmV2TW9udGgiLCJwcmV2TW9udGhOdW1EYXlzIiwibm93IiwiaXNEYXkiLCJzdGF0ZSIsIm5leHRNb250aE5lZWQiLCJuZXh0TW9udGgiLCJsb2NhbGVOYW1lcyIsIm5hbWVzIiwiYWRkRXZlbnRzIiwidGFyZ2V0cyIsImhhbmRsZXIiLCJjb21iaW5lRXZlbnRzIiwiZ2V0S2V5IiwiZ2V0S2V5TmF2aWdhdGlvbiIsImdldFRhcmdldCIsImNsYXNzZXMiLCJzaG93IiwidHJpZ2dlciIsInBvcHVwIiwiX2MiLCJlbCIsImJvdW5kcyIsInRyaWdnZXJMZWZ0IiwidHJpZ2dlclRvcCIsInRyaWdnZXJXaWR0aCIsInRyaWdnZXJIZWlnaHQiLCJwb3B1cFdpZHRoIiwicG9wdXBIZWlnaHQiLCJwYXJ0MSIsInBhcnQyIiwid2luV2lkdGgiLCJ3aW5IZWlnaHQiLCJsZWZ0IiwidG9wIiwidHJpZ2dlckJvdW5kcyIsImlucHV0IiwiXyIsInNpemUiLCJnZXRMZW5ndGgiLCJfb3BlbkJsb2NrIiwiX2NyZWF0ZUVsZW1lbnRCbG9jayIsInNldFNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsIlRyaWdnZXIiLCJDYWxlbmRhciIsIklucHV0RmllbGQiLCJJY29uIiwiZGVmYXVsdEZvcm1hdHMiLCJnZXREYXRlUGFydCIsImNhbGVuZGFyIiwidG9nZ2xlIiwic2VsZWN0aW9uIiwic21vb3RoIiwic2Nyb2xsIiwicmVmIiwibGluZUhlaWdodCIsImRpc3RhbmNlIiwiY291bnQiLCJpc0RpZ2l0IiwiY2hhciIsIkRhdGVQaWNrZXIiLCJUaW1lUGlja2VyIiwidHJhbnNpdGlvbiIsImRpc2FibGVkIiwidGV4dCIsInNob3dQcmV2Iiwic2hvd05leHQiLCJjdXJyZW50UGFnZSIsIm51bVBhZ2VzIiwic2hvd0xlbmd0aCIsInBhZ2UiLCJidXR0b24iLCJjaGVja2VkIiwidW5jaGVja2VkIiwibW9kZWxWYWx1ZSIsIlRyYW5zaXRpb25IZWlnaHQiLCJlbmFibGVkIiwic2xvdHMiLCJjcmVhdGVFbGVtZW50IiwiVHJhbnNpdGlvbiIsInByb3BzIiwic2V0U3R5bGUiLCJzdHlsZSIsIm5leHRUaW1lb3V0IiwiZm9yY2VSZXBhaW50Iiwid2lkdGgiLCJoZWlnaHQiLCJoYXNWTm9kZUNvbnRlbnQiLCJ2bm9kZSIsIkNvbW1lbnQiLCJoYXNTbG90Q29udGVudCIsInNsb3QiLCJ1c2VTbG90cyIsIkRvbU1peGluIiwicmVtb3ZlIiwiRGl0b1VzZXIiLCJyb2xlcyIsInJvbGUiLCJTY2hlbWFQYXJlbnRNaXhpbiIsInNjaGVtYUNvbXBvbmVudHMiLCJWYWxpZGF0b3JNaXhpbiIsIml0IiwiZmlyc3QiLCJSb3V0ZU1peGluIiwicm91dGVDb21wb25lbnQiLCJtYXRjaGVkIiwicmVjb3JkIiwiYnJlYWRjcnVtYiIsInJvdXRlQ29tcG9uZW50cyIsIm9rIiwicmVjb3JkUGF0aCIsInJvb3RQYXRoIiwiZ2V0Q29tbW9uUHJlZml4IiwiaXNMb2FkaW5nIiwiVXNlRm9jdXNUcmFwIiwiZGVmaW5lQ29tcG9uZW50IiwidHJhcCIsImFjdGl2YXRlIiwiZGVhY3RpdmF0ZSIsInVucmVmRWxlbWVudCIsImNyZWF0ZUZvY3VzVHJhcCIsIm9uU2NvcGVEaXNwb3NlIiwiaCIsImRpYWxvZ0RhdGEiLCJEaXRvRGlhbG9nIiwicHJlZml4IiwidGlwcHlEZWxlZ2F0ZSIsImluc3RhbmNlIiwiZXJyIiwiZHJhZ0NvdW50IiwidXBsb2FkcyIsInRvZ2dsZURyb3BUYXJnZXRDbGFzcyIsInVwbG9hZCIsInNldERyYWdnaW5nRmlsZXMiLCJoYXNVcGxvYWRzIiwiY2FuRHJvcCIsInRpdGxlIiwicmVqZWN0IiwiZGlhbG9nSWQiLCJhZGRpdGlvbmFsQ29tcG9uZW50cyIsInJlZGlyZWN0QWZ0ZXJMb2dpbiIsImxvZ2luRGF0YSIsInVzZXIiLCJEaXRvVmlldyIsImFkZFJvdXRlcyIsInJvdXRlciIsInJlbW92ZXJzIiwicm91dGUiLCJzdWJNZW51Q2xhc3MiLCJmaXJzdENoaWxkIiwibG9nIiwic3RyaXBUYWdzIiwibm90aWZpY2F0aW9ucyIsImR1cmF0aW9uRmFjdG9yIiwiZHVyYXRpb24iLCJQdWxsZG93bk1peGluIiwic3RhcnRUaW1lIiwib3BlbiIsImNvbnRlbnQiLCJhc09iamVjdCIsIkl0ZW1NaXhpbiIsIml0ZW1JZCIsImV4dGVuZGVkIiwiaXRlbUxhYmVsIiwiZm9ybUxhYmVsIiwiZ2V0Rm9ybUxhYmVsIiwic3VmZml4IiwiY29sdW1ucyIsImhhZExhYmVsIiwiZGVmYXVsdFRhYiIsInJvdXRlVGFiIiwibmV3VGFiIiwib2xkVGFiIiwiZGF0YVBhdGhPck5hbWUiLCJzY3JvbGxDb250YWluZXIiLCJkaXNwYXRjaCIsImNvbXBvbmVudHNCeURhdGFQYXRoIiwiZGF0YVBhdGhzIiwiY2hlY2siLCJmaWVsZCIsInVubWF0Y2hlZCIsIndhc0ZpcnN0IiwiZXJycyIsImZ1bGxEYXRhUGF0aCIsImRhdGFQYXRoUGFydHMiLCJmb3VuZCIsInByb3BlcnR5Iiwic3ViQ29tcG9uZW50cyIsImxvY2FsRGF0YSIsImZvcmVpZ25EYXRhIiwicGFuZSIsInJlZ2lzdHJ5IiwiZW50cmllc0J5RGF0YVBhdGgiLCJfd2l0aERpcmVjdGl2ZXMiLCJfRnJhZ21lbnQiLCJfcmVuZGVyTGlzdCIsIl9jdHgiLCJfaG9pc3RlZF8xIiwiX2NyZWF0ZUJsb2NrIiwiX2NvbXBvbmVudF9EaXRvQ29udGFpbmVyIiwibmVzdGVkRGF0YVBhdGgiLCJfaG9pc3RlZF8yIiwicG9zaXRpb25zIiwiaXNMYXN0SW5Sb3ciLCJmaW5kTmV4dFBvc2l0aW9uIiwicm93cyIsInJvdyIsInZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzIiwiaGFzTGFiZWxzSW5Sb3ciLCJjb250YWluZXIiLCJwYWRkaW5nIiwiZm9udFNpemUiLCJwYXJzZUZyYWN0aW9uIiwiZGl2aWRlbmQiLCJkaXZpc29yIiwiYWNjdW11bGF0ZWRCYXNpcyIsImZsZXhCYXNpcyIsImNvbWJpbmVkQmFzaXMiLCJjYXBpdGFsaXplIiwiY2xpcGJvYXJkRGF0YSIsInBhc3RlIiwiJHNjaGVtYSIsInJlcG9ydCIsImpzb24iLCJkZWluZGVudCIsIkxvYWRpbmdNaXhpbiIsInVwZGF0ZVJvb3QiLCJ1cGRhdGVWaWV3IiwiUmVzb3VyY2VNaXhpbiIsImFtb3VudCIsImNoaWxkIiwidmVyYnMiLCJjbGVhciIsImxvYWRpbmdPcHRpb25zIiwiY29udHJvbGxlciIsInJlcXVlc3QiLCJzZXREYXRhIiwib25TdWNjZXNzIiwib25FcnJvciIsIm5vdGlmeVN1Y2Nlc3MiLCJub3RpZnlFcnJvciIsInBhcmVudE1ldGEiLCJyZXNvbHZlUGF0aCIsImlzQ3JlYXRpbmciLCJwcm92aWRlc0RhdGEiLCJkYXRhUGFydHMiLCJwYXRoUGFydHMiLCJyb3V0ZVBhcnRzIiwibGFzdERhdGFQYXJ0IiwibCIsImRhdGFQYXJ0IiwicGFyYW0iLCJtYWluU2NoZW1hQ29tcG9uZW50IiwicHJlc2VudCIsImNsb3NlRm9ybSIsImdldFZlcmIiLCJidXR0b25SZXNvdXJjZSIsInN1Y2Nlc3MiLCJfcmVzb3VyY2UiLCJfbWV0aG9kIiwiRGl0b0Zvcm0iLCJ0aXAiLCJ0aXBweSIsInNjb3BlIiwiUGFnaW5hdGlvbiIsIlNvcnRhYmxlTWl4aW4iLCJmb3JjZUZhbGxiYWNrIiwib2xkSW5kZXgiLCJuZXdJbmRleCIsImxpc3QiLCJwYWdpbmF0aW9uUmFuZ2UiLCJfbm9ybWFsaXplU3R5bGUiLCJfY2FjaGUiLCJfd2l0aE1vZGlmaWVycyIsIiRldmVudCIsIl9ub3JtYWxpemVDbGFzcyIsIl9jcmVhdGVFbGVtZW50Vk5vZGUiLCJfaG9pc3RlZF80IiwiX3RvRGlzcGxheVN0cmluZyIsIl9ob2lzdGVkXzUiLCJfaG9pc3RlZF83IiwiX21lcmdlUHJvcHMiLCJfaG9pc3RlZF84IiwiX2NvbXBvbmVudF9EaXRvTGFiZWwiLCJfY3JlYXRlVk5vZGUiLCJfY29tcG9uZW50X0RpdG9UYWJsZUNlbGwiLCJfY29tcG9uZW50X0RpdG9EcmFnZ2FibGUiLCJfY29tcG9uZW50X0RpdG9UcmVlSXRlbSIsImNoaWxkcmVuU2NoZW1hIiwiY2hpbGRyZW5MaXN0IiwiZWRpdFBhdGgiLCJjaGlsZHJlbk9wZW4iLCJudW1DaGlsZHJlbiIsImNyZWF0YWJsZSIsImVkaXRhYmxlIiwib3JkZXIiLCJjb2x1bW4iLCJyZW5kZXIiLCJlc2NhcGVIdG1sIiwiVFlQRVMiLCJmaWxlIiwicmVhZGVyIiwidXNlU29ydGFibGUiLCJzb3J0YWJsZSIsImRvY3VtZW50IiwiZGVmYXVsdERvY3VtZW50IiwicmVzZXRPcHRpb25zIiwiZGVmYXVsdE9wdGlvbnMiLCJlIiwibW92ZUFycmF5RWxlbWVudCIsIlNvcnRhYmxlIiwic3RvcCIsIm9wdGlvbiIsInRyeU9uTW91bnRlZCIsInRyeU9uU2NvcGVEaXNwb3NlIiwiaW5zZXJ0Tm9kZUF0IiwicGFyZW50RWxlbWVudCIsInJlZkVsZW1lbnQiLCJyZW1vdmVOb2RlIiwiX3ZhbHVlSXNSZWYiLCJpc1JlZiIsInRvVmFsdWUiLCJuZXh0VGljayIsIlVzZVNvcnRhYmxlIiwidXNlVk1vZGVsIiwiRGl0b1ZOb2RlIiwiRGl0b1R5cGVDb21wb25lbnQkMSIsIkRpdG9UeXBlQ29tcG9uZW50Iiwib25DbGljayIsIkRhdGFNaXhpbiIsImFzeW5jRW50cnkiLCJyZXNvbHZlZERhdGEiLCJsb2FkIiwiY2xlYXJMb2FkaW5nIiwidGltZXIiLCJPcHRpb25zTWl4aW4iLCJjb252ZXJ0VmFsdWUiLCJ2YWwiLCJzZWFyY2giLCJmaWx0ZXIiLCJkZWJvdW5jZSIsImRlYm91bmNlQXN5bmMiLCJncm91cGVkIiwicmVzdWx0cyIsImdyb3VwIiwiZmluZE9wdGlvbiIsImdyb3VwQnkiLCJvcHRpb25WYWx1ZSIsIm9wdGlvbkxhYmVsIiwicHJvY2Vzc1JlbGF0ZSIsImZsYXNrIiwiQ29kZUZsYXNrIiwiY2hhbmdlZCIsImlnbm9yZVdhdGNoIiwiaWdub3JlVXBkYXRlIiwic2V0Q29kZSIsImNvZGUiLCJzZXRWYWx1ZSIsImxhbmd1YWdlIiwiZ2V0UG9pbnQiLCJ4IiwieSIsInByZXZZIiwibW91c2Vtb3ZlIiwiaGV4IiwiU2tldGNoUGlja2VyIiwiY29udmVydENvbG9yIiwiY29sb3IiLCJ0aW55Y29sb3IiLCJjb252ZXJ0ZWRWYWx1ZSIsImNhblVwZGF0ZVZhbHVlIiwidG9WdWUzQ29sb3JGb3JtYXQiLCJ0b1RpbnlDb2xvckZvcm1hdCIsIkRhdGVUaW1lUGlja2VyIiwiZm9ybWF0cyIsImZvcm1hdFF1ZXJ5IiwicmVwbGFjZVJvdXRlIiwiaGFzaCIsIlNvdXJjZU1peGluIiwiZGVmYXVsdFNvcnQiLCJkaXJlY3Rpb24iLCJkcmFnZ2FibGUiLCJjb2xsYXBzaWJsZSIsImNvbGxhcHNlZCIsInJlbW92ZWQiLCJsaXN0RGF0YSIsIm9uQ29tcGxldGUiLCJvcGVuZWQiLCJjYWxsT25Db21wbGV0ZSIsImlubGluZWQiLCJtZXRhIiwiZm9ybU1ldGEiLCJjaGlsZFJvdXRlcyIsInNvdXJjZVBhdGgiLCJmb3JtUm91dGUiLCJnZXRQYXRoV2l0aFBhcmFtIiwiZmxhdFJvdXRlcyIsInN1YlJvdXRlcyIsImNoaWxkUm91dGUiLCJmaWx0ZXJDb21wb25lbnRzIiwiZGF0ZXRpbWUiLCJjcmVhdGVGaWx0ZXJzUGFuZWwiLCJmaWx0ZXJzIiwic3RpY2t5IiwiZmlsdGVyU2NoZW1hcyIsInBhcnNlRmlsdGVyc0RhdGEiLCJjcmVhdGVGaWx0ZXJzQ29tcG9uZW50cyIsImNyZWF0ZUZpbHRlcnNCdXR0b25zIiwiZm9ybWF0RmlsdGVyc0RhdGEiLCJzbWFsbCIsImdldERhdGFOYW1lIiwiZmlsdGVyTmFtZSIsImdldEZpbHRlck5hbWUiLCJkYXRhTmFtZSIsImNvbXBzIiwiZ2V0Q29tcG9uZW50c0ZvckZpbHRlciIsImZpbHRlcnNEYXRhIiwiX2NvbXBvbmVudF9EaXRvVGFibGVIZWFkIiwiX2NvbXBvbmVudF9EaXRvU2NoZW1hSW5saW5lZCIsIl9yZXNvbHZlRHluYW1pY0NvbXBvbmVudCIsIl9jb21wb25lbnRfRGl0b0VkaXRCdXR0b25zIiwiX2hvaXN0ZWRfOSIsIm9iaiIsImZpbHRlcnNEYXRhUGF0aCIsIkVkaXRvckNvbnRlbnQiLCJlZGl0b3IiLCJlbmFibGVSdWxlcyIsInVwZGF0ZVZhbHVlIiwib25VcGRhdGUiLCJzZXRWYWx1ZURlYm91bmNlZCIsIkVkaXRvciIsImRpYWxvZ0NvbXBvbmVudCIsImdldE1hcmtBdHRyaWJ1dGVzIiwiaHJlZiIsIm1hcmtzIiwibm9kZXMiLCJ0b29scyIsIkRvY3VtZW50IiwiVGV4dCIsIlBhcmFncmFwaCIsIkJvbGQiLCJJdGFsaWMiLCJVbmRlcmxpbmUiLCJTdHJpa2UiLCJTbWFsbCIsIkNvZGUiLCJTdXBlcnNjcmlwdCIsIlN1YnNjcmlwdCIsIkxpbmtXaXRoVGl0bGUiLCJCbG9ja3F1b3RlIiwiQ29kZUJsb2NrIiwiSGVhZGluZyIsIkhvcml6b250YWxSdWxlIiwiTGlzdEl0ZW0iLCJCdWxsZXRMaXN0IiwiT3JkZXJlZExpc3QiLCJGb290bm90ZXMiLCJGb290bm90ZSIsIkZvb3Rub3RlUmVmZXJlbmNlIiwiSGlzdG9yeSIsIkhhcmRCcmVhayIsInNldEhhcmRCcmVhayIsImV4dGVuc2lvbiIsInNldHRpbmdzTmFtZSIsImRlc2NyaXB0aW9ucyIsImNvbW1hbmRzIiwiYWRkQnV0dG9uIiwiaWNvbiIsImNvbW1hbmQiLCJkZXNjcmlwdGlvbiIsInNldHRpbmdOYW1lIiwiYXR0cmlidXRlIiwiTWFyayIsIkxpbmsiLCJfY29tcG9uZW50X1Z1ZU11bHRpc2VsZWN0IiwiVnVlTXVsdGlzZWxlY3QiLCJwbGFjZWhvbGRlciIsInNlYXJjaGFibGUiLCJ0YWdnYWJsZSIsInRhZyIsIk51bWJlck1peGluIiwiU3dpdGNoQnV0dG9uIiwiVGV4dE1peGluIiwibWFza2VkUGFzc3dvcmQiLCJoYXNFZGl0YWJsZUZvcm1zIiwiZm9ybWF0RmlsZVNpemUiLCJmaWxlc2l6ZSIsIlZ1ZVVwbG9hZCIsImFzRmlsZXMiLCJhY2NlcHQiLCJtYXhTaXplIiwicGFyc2VGaWxlU2l6ZSIsInRodW1ibmFpbHMiLCJ0b3RhbCIsInJlYWR5IiwibmV3RmlsZSIsIm9sZEZpbGUiLCJ4aHIiLCJibG9iIiwiZmlsZXMiLCJSZXNpemVEaXJlY3RpdmUiLCJiaW5kaW5nIiwib2JzZXJ2ZVJlc2l6ZSIsInVub2JzZXJ2ZVJlc2l6ZSIsIk9ic2VydmVyIiwiaXNSZXNpemVTdXBwb3J0ZWQiLCJvYnNlcnZlcnMiLCJib3giLCJEaXRvQWRtaW4iLCJkaXRvIiwiZ2V0QXBpVXJsIiwiaXNBcGlVcmwiLCJ1c2VycyIsInBhcmVudFBhdGgiLCJhcHAiLCJjcmVhdGVBcHAiLCJEaXRvUm9vdCIsIlZ1ZU5vdGlmaWNhdGlvbnMiLCJjcmVhdGVSb3V0ZXIiLCJjcmVhdGVXZWJIaXN0b3J5IiwiUmVxdWVzdEVycm9yIiwiaGVhZGVycyIsImRlcHJlY2F0ZSIsImlzQWJzb2x1dGVVcmwiLCJjb21iaW5lVXJscyIsImJhc2VVcmwiLCJyZWxhdGl2ZVVybCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR08sU0FBU0EsR0FBZUMsSUFBWSxJQUFJO0FBQzdDLFFBQU1DLElBQVEsQ0FBQSxHQUVSQyxJQUFLRixFQUFVLFlBQVcsR0FDMUIsQ0FBQ0csQ0FBRSxJQUNQLGtFQUFrRTtBQUFBLElBQ2hFRDtBQUFBLEVBQ04sS0FBUyxDQUFBLEdBQ0RFLElBQ0o7QUFBQSxJQUNFLFFBQVU7QUFBQSxJQUNWLFFBQVU7QUFBQSxJQUNWLE1BQVE7QUFBQSxJQUNSLGtCQUFrQjtBQUFBLEVBQ25CLEVBQUNELENBQUUsS0FDSkE7QUFFRixTQUFJQyxNQUNGSCxFQUFNLFdBQVdHLEdBQ2pCSCxFQUFNRyxDQUFRLElBQUksS0FFcEJGLEVBQUc7QUFBQSxJQUNEO0FBQUEsSUFDQSxDQUFDRyxHQUFPQyxHQUFTQyxHQUFJQyxHQUFJQyxNQUFPO0FBRTlCLFVBQUksQ0FBQ1IsRUFBTSxRQUFRO0FBQ2pCLGNBQU1TLElBQVVELEtBQU1ELEtBQU1EO0FBQzVCLFNBQUksQ0FBQ04sRUFBTSxXQUFXSyxNQUFZLGNBR2hDTCxFQUFNLFVBQVVTLEdBQ2hCVCxFQUFNLGdCQUFnQixXQUFXUyxDQUFPLElBRTFDVCxFQUFNLFVBQVVLLEdBQ2hCTCxFQUFNSyxDQUFPLElBQUk7QUFBQSxNQUN6QjtBQUFBLElBQ0E7QUFBQSxFQUNBLEdBQ01MLEVBQU0sVUFFUixPQUFP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
|