@fairfox/polly 0.91.0 → 0.92.1
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/cli/polly.js +3 -3
- package/dist/cli/polly.js.map +3 -3
- package/dist/gallery/gallery.css +2 -2
- package/dist/gallery/gallery.js +248 -241
- package/dist/src/background/index.js +27 -11
- package/dist/src/background/index.js.map +2 -2
- package/dist/src/background/message-router.js +27 -11
- package/dist/src/background/message-router.js.map +2 -2
- package/dist/src/client/index.js +56 -56
- package/dist/src/client/index.js.map +4 -4
- package/dist/src/elysia/index.js +16 -7
- package/dist/src/elysia/index.js.map +4 -4
- package/dist/src/elysia/plugin.d.ts +4 -4
- package/dist/src/index.js +27 -11
- package/dist/src/index.js.map +2 -2
- package/dist/src/mesh.js +2 -2
- package/dist/src/mesh.js.map +3 -3
- package/dist/src/peer.js +6 -6
- package/dist/src/peer.js.map +3 -3
- package/dist/src/polly-ui/index.css +2 -2
- package/dist/src/polly-ui/markdown.js +1844 -1010
- package/dist/src/polly-ui/markdown.js.map +5 -5
- package/dist/src/polly-ui/styles.css +2 -2
- package/dist/src/shared/adapters/index.js +27 -11
- package/dist/src/shared/adapters/index.js.map +2 -2
- package/dist/src/shared/lib/context-helpers.js +27 -11
- package/dist/src/shared/lib/context-helpers.js.map +2 -2
- package/dist/src/shared/lib/message-bus.js +27 -11
- package/dist/src/shared/lib/message-bus.js.map +2 -2
- package/dist/src/shared/lib/resource.js +17 -1
- package/dist/src/shared/lib/resource.js.map +2 -2
- package/dist/src/shared/lib/state.js +17 -1
- package/dist/src/shared/lib/state.js.map +2 -2
- package/dist/src/shared/state/app-state.js +17 -1
- package/dist/src/shared/state/app-state.js.map +2 -2
- package/dist/tools/bdd/src/cli.js +20 -2
- package/dist/tools/bdd/src/cli.js.map +4 -4
- package/dist/tools/bdd/src/index.js +20 -2
- package/dist/tools/bdd/src/index.js.map +3 -3
- package/dist/tools/init/templates/pwa/package.json.template +2 -3
- package/dist/tools/mutate/src/args.d.ts +25 -3
- package/dist/tools/mutate/src/cli.js +3238 -312
- package/dist/tools/mutate/src/cli.js.map +32 -12
- package/dist/tools/mutate/src/config.d.ts +13 -2
- package/dist/tools/mutate/src/define.d.ts +76 -0
- package/dist/tools/mutate/src/engine/ast.d.ts +13 -0
- package/dist/tools/mutate/src/engine/baseline.d.ts +20 -0
- package/dist/tools/mutate/src/engine/cache.d.ts +32 -0
- package/dist/tools/mutate/src/engine/coverage.d.ts +60 -0
- package/dist/tools/mutate/src/engine/generate.d.ts +23 -0
- package/dist/tools/mutate/src/engine/graph.d.ts +11 -0
- package/dist/tools/mutate/src/engine/index.d.ts +16 -0
- package/dist/tools/mutate/src/engine/junit.d.ts +38 -0
- package/dist/tools/mutate/src/engine/operators.d.ts +14 -0
- package/dist/tools/mutate/src/engine/preload.d.ts +10 -0
- package/dist/tools/mutate/src/engine/preload.js +180 -0
- package/dist/tools/mutate/src/engine/preload.js.map +10 -0
- package/dist/tools/mutate/src/engine/probes.d.ts +12 -0
- package/dist/tools/mutate/src/engine/report-writer.d.ts +44 -0
- package/dist/tools/mutate/src/engine/runner.d.ts +31 -0
- package/dist/tools/mutate/src/engine/stray-writes.d.ts +25 -0
- package/dist/tools/mutate/src/engine/typecheck.d.ts +37 -0
- package/dist/tools/mutate/src/engine/types.d.ts +191 -0
- package/dist/tools/mutate/src/engine/verify-callsites.d.ts +9 -0
- package/dist/tools/mutate/src/engine/workdir.d.ts +16 -0
- package/dist/tools/mutate/src/engine-config.d.ts +7 -0
- package/dist/tools/mutate/src/index.d.ts +7 -3
- package/dist/tools/mutate/src/index.js +2821 -193
- package/dist/tools/mutate/src/index.js.map +26 -7
- package/dist/tools/mutate/src/ingest.d.ts +30 -1
- package/dist/tools/mutate/src/init.d.ts +2 -1
- package/dist/tools/mutate/src/migrate.d.ts +32 -0
- package/dist/tools/mutate/src/report.d.ts +3 -0
- package/dist/tools/mutate/src/run.d.ts +17 -8
- package/dist/tools/mutate/src/verify-matrix.d.ts +12 -15
- package/dist/tools/quality/src/cli.js +9 -9
- package/dist/tools/quality/src/cli.js.map +4 -4
- package/dist/tools/quality/src/index.js +9 -9
- package/dist/tools/quality/src/index.js.map +4 -4
- package/dist/tools/quality/src/no-tautology-ensures.d.ts +2 -2
- package/dist/tools/quality/src/plugins/import-checks.d.ts +1 -1
- package/dist/tools/test/src/adapters/index.js +3 -2
- package/dist/tools/test/src/adapters/index.js.map +3 -3
- package/dist/tools/test/src/coverage-policy/cli.d.ts +2 -2
- package/dist/tools/test/src/coverage-policy/cli.js +217 -17
- package/dist/tools/test/src/coverage-policy/cli.js.map +7 -5
- package/dist/tools/test/src/coverage-policy/index.d.ts +1 -1
- package/dist/tools/test/src/coverage-policy/index.js +213 -12
- package/dist/tools/test/src/coverage-policy/index.js.map +7 -5
- package/dist/tools/test/src/coverage-policy/mutate-targets.d.ts +29 -12
- package/dist/tools/test/src/e2e-mesh/index.js +6 -6
- package/dist/tools/test/src/e2e-mesh/index.js.map +4 -4
- package/dist/tools/test/src/e2e-relay/index.js +230 -226
- package/dist/tools/test/src/e2e-relay/index.js.map +7 -7
- package/dist/tools/test/src/index.js +3 -2
- package/dist/tools/test/src/index.js.map +3 -3
- package/dist/tools/test/src/visual/index.js +684 -511
- package/dist/tools/test/src/visual/index.js.map +11 -11
- package/dist/tools/verify/src/cli.js +17 -2
- package/dist/tools/verify/src/cli.js.map +4 -4
- package/dist/tools/verify/src/config.d.ts +1 -1
- package/dist/tools/verify/src/config.js +68 -3
- package/dist/tools/verify/src/config.js.map +4 -4
- package/dist/tools/verify/src/primitives/index.d.ts +34 -0
- package/dist/tools/visualize/src/cli.js +16 -1
- package/dist/tools/visualize/src/cli.js.map +3 -3
- package/package.json +29 -39
- package/dist/tools/verify/src/stryker/index.d.ts +0 -32
- package/dist/tools/verify/src/stryker/index.js +0 -86
- package/dist/tools/verify/src/stryker/index.js.map +0 -10
package/dist/gallery/gallery.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// ../../node_modules/.bun/preact@10.29.
|
|
1
|
+
// ../../node_modules/.bun/preact@10.29.8+6d480b93d497d3a1/node_modules/preact/dist/preact.module.js
|
|
2
2
|
var n;
|
|
3
3
|
var l;
|
|
4
4
|
var u;
|
|
@@ -9,8 +9,8 @@ var o;
|
|
|
9
9
|
var e;
|
|
10
10
|
var f;
|
|
11
11
|
var c;
|
|
12
|
-
var s;
|
|
13
12
|
var a;
|
|
13
|
+
var s;
|
|
14
14
|
var h;
|
|
15
15
|
var p;
|
|
16
16
|
var v;
|
|
@@ -78,29 +78,29 @@ function H() {
|
|
|
78
78
|
i.length = H.__r = 0;
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
-
function L(n, l, u, t, i, r, o, e, f, c,
|
|
82
|
-
var
|
|
83
|
-
for (f = T(u, l,
|
|
84
|
-
(p = u.__k[
|
|
81
|
+
function L(n, l, u, t, i, r, o, e, f, c, a) {
|
|
82
|
+
var s, h, p, v, y, _, g = t && t.__k || w, m = l.length;
|
|
83
|
+
for (f = T(u, l, g, f, m), s = 0;s < m; s++)
|
|
84
|
+
(p = u.__k[s]) != null && (h = p.__i != -1 && g[p.__i] || d, p.__i = s, _ = q(n, p, h, i, r, o, e, f, c, a), v = p.__e, p.ref && h.ref != p.ref && (h.ref && J(h.ref, null, p), a.push(p.ref, p.__c || v, p)), y == null && v != null && (y = v), 4 & p.__u ? (f = j(p, f, n), h.__e && (h.__e = null)) : typeof p.type == "function" && _ !== undefined ? f = _ : v && (f = v.nextSibling), p.__u &= -7);
|
|
85
85
|
return u.__e = y, f;
|
|
86
86
|
}
|
|
87
87
|
function T(n, l, u, t, i) {
|
|
88
|
-
var r, o, e, f, c,
|
|
88
|
+
var r, o, e, f, c, a = u.length, s = a, h = 0;
|
|
89
89
|
for (n.__k = new Array(i), r = 0;r < i; r++)
|
|
90
|
-
(o = l[r]) != null && typeof o != "boolean" && typeof o != "function" ? (typeof o == "string" || typeof o == "number" || typeof o == "bigint" || o.constructor == String ? o = n.__k[r] = x(null, o, null, null, null) : g(o) ? o = n.__k[r] = x(S, { children: o }, null, null, null) : o.constructor === undefined && o.__b > 0 ? o = n.__k[r] = x(o.type, o.props, o.key, o.ref ? o.ref : null, o.__v) : n.__k[r] = o, f = r + h, o.__ = n, o.__b = n.__b + 1, e = null, (c = o.__i = O(o, u, f,
|
|
91
|
-
if (
|
|
92
|
-
for (r = 0;r <
|
|
90
|
+
(o = l[r]) != null && typeof o != "boolean" && typeof o != "function" ? (typeof o == "string" || typeof o == "number" || typeof o == "bigint" || o.constructor == String ? o = n.__k[r] = x(null, o, null, null, null) : g(o) ? o = n.__k[r] = x(S, { children: o }, null, null, null) : o.constructor === undefined && o.__b > 0 ? o = n.__k[r] = x(o.type, o.props, o.key, o.ref ? o.ref : null, o.__v) : n.__k[r] = o, f = r + h, o.__ = n, o.__b = n.__b + 1, e = null, (c = o.__i = O(o, u, f, s)) != -1 && (s--, (e = u[c]) && (e.__u |= 2)), e == null || e.__v == null ? (c == -1 && (i > a ? h-- : i < a && h++), typeof o.type != "function" && (o.__u |= 4)) : c != f && (c == f - 1 ? h-- : c == f + 1 ? h++ : (c > f ? h-- : h++, o.__u |= 4))) : n.__k[r] = null;
|
|
91
|
+
if (s)
|
|
92
|
+
for (r = 0;r < a; r++)
|
|
93
93
|
(e = u[r]) != null && (2 & e.__u) == 0 && (e.__e == t && (t = $(e)), K(e, e));
|
|
94
94
|
return t;
|
|
95
95
|
}
|
|
96
|
-
function j(n, l, u
|
|
97
|
-
var
|
|
96
|
+
function j(n, l, u) {
|
|
97
|
+
var t, i;
|
|
98
98
|
if (typeof n.type == "function") {
|
|
99
|
-
for (
|
|
100
|
-
i
|
|
99
|
+
for (t = n.__k, i = 0;t && i < t.length; i++)
|
|
100
|
+
t[i] && (t[i].__ = n, l = j(t[i], l, u));
|
|
101
101
|
return l;
|
|
102
102
|
}
|
|
103
|
-
n.__e != l && (
|
|
103
|
+
n.__e != l && (l && n.type && !l.parentNode && (l = $(n)), l = u.insertBefore(n.__e, l || null));
|
|
104
104
|
do {
|
|
105
105
|
l = l && l.nextSibling;
|
|
106
106
|
} while (l != null && l.nodeType == 8);
|
|
@@ -112,10 +112,10 @@ function F(n, l) {
|
|
|
112
112
|
}) : l.push(n)), l;
|
|
113
113
|
}
|
|
114
114
|
function O(n, l, u, t) {
|
|
115
|
-
var i, r, o, { key: e, type: f } = n, c = l[u],
|
|
116
|
-
if (c === null && e == null ||
|
|
115
|
+
var i, r, o, { key: e, type: f } = n, c = l[u], a = c != null && (2 & c.__u) == 0;
|
|
116
|
+
if (c === null && e == null || a && e == c.key && f == c.type)
|
|
117
117
|
return u;
|
|
118
|
-
if (t > (
|
|
118
|
+
if (t > (a ? 1 : 0)) {
|
|
119
119
|
for (i = u - 1, r = u + 1;i >= 0 || r < l.length; )
|
|
120
120
|
if ((c = l[o = i >= 0 ? i-- : r++]) != null && (2 & c.__u) == 0 && e == c.key && f == c.type)
|
|
121
121
|
return o;
|
|
@@ -140,7 +140,7 @@ function N(n, l, u, t, i) {
|
|
|
140
140
|
t && u[l] == t[l] || z(n.style, l, u[l]);
|
|
141
141
|
}
|
|
142
142
|
else if (l[0] == "o" && l[1] == "n")
|
|
143
|
-
r = l != (l = l.replace(
|
|
143
|
+
r = l != (l = l.replace(s, "$1")), o = l.toLowerCase(), l = o in n || l == "onFocusOut" || l == "onFocusIn" ? o.slice(2) : l.slice(2), n.l || (n.l = {}), n.l[l + r] = u, u ? t ? u[a] = t[a] : (u[a] = h, n.addEventListener(l, r ? v : p, r)) : n.removeEventListener(l, r ? v : p, r);
|
|
144
144
|
else {
|
|
145
145
|
if (i == "http://www.w3.org/2000/svg")
|
|
146
146
|
l = l.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s");
|
|
@@ -158,58 +158,57 @@ function V(n) {
|
|
|
158
158
|
var t = this.l[u.type + n];
|
|
159
159
|
if (u[c] == null)
|
|
160
160
|
u[c] = h++;
|
|
161
|
-
else if (u[c] < t[
|
|
161
|
+
else if (u[c] < t[a])
|
|
162
162
|
return;
|
|
163
163
|
return t(l.event ? l.event(u) : u);
|
|
164
164
|
}
|
|
165
165
|
};
|
|
166
166
|
}
|
|
167
|
-
function q(n, u, t, i, r, o, e, f, c,
|
|
168
|
-
var
|
|
167
|
+
function q(n, u, t, i, r, o, e, f, c, a) {
|
|
168
|
+
var s, h, p, v, y, d, _, k, x, M, I, P, A, H, T, j, F = u.type;
|
|
169
169
|
if (u.constructor !== undefined)
|
|
170
170
|
return null;
|
|
171
|
-
128 & t.__u && (c = !!(32 & t.__u), o = [f = u.__e = t.__e]), (
|
|
171
|
+
128 & t.__u && (c = !!(32 & t.__u), o = [f = u.__e = t.__e]), (s = l.__b) && s(u);
|
|
172
172
|
n:
|
|
173
|
-
if (typeof
|
|
173
|
+
if (typeof F == "function") {
|
|
174
|
+
h = e.length;
|
|
174
175
|
try {
|
|
175
|
-
if (
|
|
176
|
-
|
|
176
|
+
if (x = u.props, M = F.prototype && F.prototype.render, I = (s = F.contextType) && i[s.__c], P = s ? I ? I.props.value : s.__ : i, t.__c ? k = (p = u.__c = t.__c).__ = p.__E : (M ? u.__c = p = new F(x, P) : (u.__c = p = new C(x, P), p.constructor = F, p.render = Q), I && I.sub(p), p.state || (p.state = {}), p.__n = i, v = p.__d = true, p.__h = [], p._sb = []), M && p.__s == null && (p.__s = p.state), M && F.getDerivedStateFromProps != null && (p.__s == p.state && (p.__s = m({}, p.__s)), m(p.__s, F.getDerivedStateFromProps(x, p.__s))), y = p.props, d = p.state, p.__v = u, v)
|
|
177
|
+
M && F.getDerivedStateFromProps == null && p.componentWillMount != null && p.componentWillMount(), M && p.componentDidMount != null && p.__h.push(p.componentDidMount);
|
|
177
178
|
else {
|
|
178
|
-
if (
|
|
179
|
-
u.__v != t.__v && (
|
|
179
|
+
if (M && F.getDerivedStateFromProps == null && x !== y && p.componentWillReceiveProps != null && p.componentWillReceiveProps(x, P), u.__v == t.__v || !p.__e && p.shouldComponentUpdate != null && p.shouldComponentUpdate(x, p.__s, P) === false) {
|
|
180
|
+
u.__v != t.__v && (p.props = x, p.state = p.__s, p.__d = false), u.__e = t.__e, u.__k = t.__k, u.__k.some(function(n) {
|
|
180
181
|
n && (n.__ = u);
|
|
181
|
-
}), w.push.apply(
|
|
182
|
+
}), w.push.apply(p.__h, p._sb), p._sb = [], p.__h.length && e.push(p), f = $(t);
|
|
182
183
|
break n;
|
|
183
184
|
}
|
|
184
|
-
|
|
185
|
-
|
|
185
|
+
p.componentWillUpdate != null && p.componentWillUpdate(x, p.__s, P), M && p.componentDidUpdate != null && p.__h.push(function() {
|
|
186
|
+
p.componentDidUpdate(y, d, _);
|
|
186
187
|
});
|
|
187
188
|
}
|
|
188
|
-
if (
|
|
189
|
-
|
|
189
|
+
if (p.context = P, p.props = x, p.__P = n, p.__e = false, A = l.__r, H = 0, M)
|
|
190
|
+
p.state = p.__s, p.__d = false, A && A(u), s = p.render(p.props, p.state, p.context), w.push.apply(p.__h, p._sb), p._sb = [];
|
|
190
191
|
else
|
|
191
192
|
do {
|
|
192
|
-
|
|
193
|
-
} while (
|
|
194
|
-
|
|
193
|
+
p.__d = false, A && A(u), s = p.render(p.props, p.state, p.context), p.state = p.__s;
|
|
194
|
+
} while (p.__d && ++H < 25);
|
|
195
|
+
p.state = p.__s, p.getChildContext != null && (i = m(m({}, i), p.getChildContext())), M && !v && p.getSnapshotBeforeUpdate != null && (_ = p.getSnapshotBeforeUpdate(y, d)), T = s != null && s.type === S && s.key == null ? E(s.props.children) : s, f = L(n, g(T) ? T : [T], u, t, i, r, o, e, f, c, a), p.base = u.__e, u.__u &= -161, p.__h.length && e.push(p), k && (p.__E = p.__ = null);
|
|
195
196
|
} catch (n) {
|
|
196
|
-
if (u.__v = null, c || o != null)
|
|
197
|
+
if (e.length = h, u.__v = null, c || o != null) {
|
|
197
198
|
if (n.then) {
|
|
198
199
|
for (u.__u |= c ? 160 : 128;f && f.nodeType == 8 && f.nextSibling; )
|
|
199
200
|
f = f.nextSibling;
|
|
200
|
-
o[o.indexOf(f)] = null, u.__e = f;
|
|
201
|
-
} else
|
|
202
|
-
for (
|
|
203
|
-
b(o[
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
u.__e = t.__e, u.__k = t.__k, n.then || B(u);
|
|
208
|
-
l.__e(n, u, t);
|
|
201
|
+
o != null && (o[o.indexOf(f)] = null), u.__e = f;
|
|
202
|
+
} else if (o != null)
|
|
203
|
+
for (j = o.length;j--; )
|
|
204
|
+
b(o[j]);
|
|
205
|
+
} else
|
|
206
|
+
u.__e = t.__e;
|
|
207
|
+
u.__k == null && (u.__k = t.__k || []), n.then || B(u), l.__e(n, u, t);
|
|
209
208
|
}
|
|
210
|
-
else
|
|
211
|
-
o == null && u.__v == t.__v ? (u.__k = t.__k, u.__e = t.__e) : f = u.__e = G(t.__e, u, t, i, r, o, e, c,
|
|
212
|
-
return (
|
|
209
|
+
} else
|
|
210
|
+
o == null && u.__v == t.__v ? (u.__k = t.__k, u.__e = t.__e) : f = u.__e = G(t.__e, u, t, i, r, o, e, c, a);
|
|
211
|
+
return (s = l.diffed) && s(u), 128 & u.__u ? undefined : f;
|
|
213
212
|
}
|
|
214
213
|
function B(n) {
|
|
215
214
|
n && (n.__c && (n.__c.__e = true), n.__k && n.__k.some(B));
|
|
@@ -228,14 +227,14 @@ function D(n, u, t) {
|
|
|
228
227
|
});
|
|
229
228
|
}
|
|
230
229
|
function E(n) {
|
|
231
|
-
return typeof n != "object" || n == null || n.__b > 0 ? n : g(n) ? n.map(E) : m({}, n);
|
|
230
|
+
return typeof n != "object" || n == null || n.__b > 0 ? n : g(n) ? n.map(E) : n.constructor !== undefined ? null : m({}, n);
|
|
232
231
|
}
|
|
233
|
-
function G(u, t, i, r, o, e, f, c,
|
|
234
|
-
var
|
|
232
|
+
function G(u, t, i, r, o, e, f, c, a) {
|
|
233
|
+
var s, h, p, v, y, w, _, m = i.props || d, { props: k, type: x } = t;
|
|
235
234
|
if (x == "svg" ? o = "http://www.w3.org/2000/svg" : x == "math" ? o = "http://www.w3.org/1998/Math/MathML" : o || (o = "http://www.w3.org/1999/xhtml"), e != null) {
|
|
236
|
-
for (
|
|
237
|
-
if ((y = e[
|
|
238
|
-
u = y, e[
|
|
235
|
+
for (s = 0;s < e.length; s++)
|
|
236
|
+
if ((y = e[s]) && "setAttribute" in y == !!x && (x ? y.localName == x : y.nodeType == 3)) {
|
|
237
|
+
u = y, e[s] = null;
|
|
239
238
|
break;
|
|
240
239
|
}
|
|
241
240
|
}
|
|
@@ -247,19 +246,19 @@ function G(u, t, i, r, o, e, f, c, s) {
|
|
|
247
246
|
if (x == null)
|
|
248
247
|
m === k || c && u.data == k || (u.data = k);
|
|
249
248
|
else {
|
|
250
|
-
if (e = e && n.call(u.childNodes), !c && e != null)
|
|
251
|
-
for (m = {},
|
|
252
|
-
m[(y = u.attributes[
|
|
253
|
-
for (
|
|
254
|
-
y = m[
|
|
255
|
-
for (
|
|
256
|
-
y = k[
|
|
249
|
+
if (e = x == "textarea" && k.defaultValue != null ? null : e && n.call(u.childNodes), !c && e != null)
|
|
250
|
+
for (m = {}, s = 0;s < u.attributes.length; s++)
|
|
251
|
+
m[(y = u.attributes[s]).name] = y.value;
|
|
252
|
+
for (s in m)
|
|
253
|
+
y = m[s], s == "dangerouslySetInnerHTML" ? p = y : s == "children" || (s in k) || s == "value" && ("defaultValue" in k) || s == "checked" && ("defaultChecked" in k) || N(u, s, null, y, o);
|
|
254
|
+
for (s in k)
|
|
255
|
+
y = k[s], s == "children" ? v = y : s == "dangerouslySetInnerHTML" ? h = y : s == "value" ? w = y : s == "checked" ? _ = y : c && typeof y != "function" || m[s] === y || N(u, s, y, m[s], o);
|
|
257
256
|
if (h)
|
|
258
257
|
c || p && (h.__html == p.__html || h.__html == u.innerHTML) || (u.innerHTML = h.__html), t.__k = [];
|
|
259
|
-
else if (p && (u.innerHTML = ""), L(t.type == "template" ? u.content : u, g(v) ? v : [v], t, i, r, x == "foreignObject" ? "http://www.w3.org/1999/xhtml" : o, e, f, e ? e[0] : i.__k && $(i, 0), c,
|
|
260
|
-
for (
|
|
261
|
-
b(e[
|
|
262
|
-
c || (
|
|
258
|
+
else if (p && (u.innerHTML = ""), L(t.type == "template" ? u.content : u, g(v) ? v : [v], t, i, r, x == "foreignObject" ? "http://www.w3.org/1999/xhtml" : o, e, f, e ? e[0] : i.__k && $(i, 0), c, a), e != null)
|
|
259
|
+
for (s = e.length;s--; )
|
|
260
|
+
b(e[s]);
|
|
261
|
+
c && x != "textarea" || (s = "value", x == "progress" && w == null ? u.removeAttribute("value") : w != null && (w !== u[s] || x == "progress" && !w || x == "option" && w != m[s]) && N(u, s, w, m[s], o), s = "checked", _ != null && _ != u[s] && N(u, s, _, m[s], o));
|
|
263
262
|
}
|
|
264
263
|
return u;
|
|
265
264
|
}
|
|
@@ -283,7 +282,7 @@ function K(n, u, t) {
|
|
|
283
282
|
} catch (n) {
|
|
284
283
|
l.__e(n, u);
|
|
285
284
|
}
|
|
286
|
-
i.base = i.__P = null;
|
|
285
|
+
i.base = i.__P = i.__n = null;
|
|
287
286
|
}
|
|
288
287
|
if (i = n.__k)
|
|
289
288
|
for (r = 0;r < i.length; r++)
|
|
@@ -295,7 +294,7 @@ function Q(n, l, u) {
|
|
|
295
294
|
}
|
|
296
295
|
function R(u, t, i) {
|
|
297
296
|
var r, o, e, f;
|
|
298
|
-
t == document && (t = document.documentElement), l.__ && l.__(u, t), o = (r = typeof i == "function") ? null : i && i.__k || t.__k, e = [], f = [], q(t, u = (!r && i || t).__k = k(S, null, [u]), o || d, d, t.namespaceURI, !r && i ? [i] : o ? null : t.firstChild ? n.call(t.childNodes) : null, e, !r && i ? i : o ? o.__e : t.firstChild, r, f), D(e, u, f);
|
|
297
|
+
t == document && (t = document.documentElement), l.__ && l.__(u, t), o = (r = typeof i == "function") ? null : i && i.__k || t.__k, e = [], f = [], q(t, u = (!r && i || t).__k = k(S, null, [u]), o || d, d, t.namespaceURI, !r && i ? [i] : o ? null : t.firstChild ? n.call(t.childNodes) : null, e, !r && i ? i : o ? o.__e : t.firstChild, r, f), D(e, u, f), u.props.children = null;
|
|
299
298
|
}
|
|
300
299
|
function X(n) {
|
|
301
300
|
function l(n) {
|
|
@@ -339,9 +338,9 @@ n = w.slice, l = { __e: function(n, l, u, t) {
|
|
|
339
338
|
this.__v && (this.__e = true, n && this.__h.push(n), A(this));
|
|
340
339
|
}, C.prototype.render = S, i = [], o = typeof Promise == "function" ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, e = function(n, l) {
|
|
341
340
|
return n.__v.__b - l.__v.__b;
|
|
342
|
-
}, H.__r = 0, f = Math.random().toString(8), c = "__d" + f,
|
|
341
|
+
}, H.__r = 0, f = Math.random().toString(8), c = "__d" + f, a = "__a" + f, s = /(PointerCapture)$|Capture$/i, h = 0, p = V(false), v = V(true), y = 0;
|
|
343
342
|
|
|
344
|
-
// ../../node_modules/.bun/preact@10.29.
|
|
343
|
+
// ../../node_modules/.bun/preact@10.29.8+6d480b93d497d3a1/node_modules/preact/hooks/dist/hooks.module.js
|
|
345
344
|
var t2;
|
|
346
345
|
var r2;
|
|
347
346
|
var u2;
|
|
@@ -354,17 +353,17 @@ var a2 = c2.__r;
|
|
|
354
353
|
var v2 = c2.diffed;
|
|
355
354
|
var l2 = c2.__c;
|
|
356
355
|
var m2 = c2.unmount;
|
|
357
|
-
var
|
|
358
|
-
function
|
|
356
|
+
var p2 = c2.__;
|
|
357
|
+
function s2(n, t) {
|
|
359
358
|
c2.__h && c2.__h(r2, n, o2 || t), o2 = 0;
|
|
360
359
|
var u = r2.__H || (r2.__H = { __: [], __h: [] });
|
|
361
360
|
return n >= u.__.length && u.__.push({}), u.__[n];
|
|
362
361
|
}
|
|
363
362
|
function d2(n) {
|
|
364
|
-
return o2 = 1,
|
|
363
|
+
return o2 = 1, y2(D2, n);
|
|
365
364
|
}
|
|
366
|
-
function
|
|
367
|
-
var o =
|
|
365
|
+
function y2(n, u, i) {
|
|
366
|
+
var o = s2(t2++, 2);
|
|
368
367
|
if (o.t = n, !o.__c && (o.__ = [i ? i(u) : D2(undefined, u), function(n) {
|
|
369
368
|
var t = o.__N ? o.__N[0] : o.__[0], r = o.t(t, n);
|
|
370
369
|
t !== r && (o.__N = [r, o.__[1]], o.__c.setState({}));
|
|
@@ -372,20 +371,18 @@ function h2(n, u, i) {
|
|
|
372
371
|
var f = function(n, t, r) {
|
|
373
372
|
if (!o.__c.__H)
|
|
374
373
|
return true;
|
|
375
|
-
var u = o.__c.
|
|
376
|
-
|
|
377
|
-
});
|
|
378
|
-
if (u.every(function(n) {
|
|
379
|
-
return !n.__N;
|
|
380
|
-
}))
|
|
381
|
-
return !c || c.call(this, n, t, r);
|
|
382
|
-
var i = o.__c.props !== n;
|
|
383
|
-
return u.some(function(n) {
|
|
374
|
+
var u = false, i = o.__c.props !== n;
|
|
375
|
+
if (o.__c.__H.__.some(function(n) {
|
|
384
376
|
if (n.__N) {
|
|
377
|
+
u = true;
|
|
385
378
|
var t = n.__[0];
|
|
386
379
|
n.__ = n.__N, n.__N = undefined, t !== n.__[0] && (i = true);
|
|
387
380
|
}
|
|
388
|
-
}), c
|
|
381
|
+
}), c) {
|
|
382
|
+
var f = c.call(this, n, t, r);
|
|
383
|
+
return u ? f || i : f;
|
|
384
|
+
}
|
|
385
|
+
return !u || i;
|
|
389
386
|
};
|
|
390
387
|
r2.__f = true;
|
|
391
388
|
var c = r2.shouldComponentUpdate, e = r2.componentWillUpdate;
|
|
@@ -399,8 +396,8 @@ function h2(n, u, i) {
|
|
|
399
396
|
}
|
|
400
397
|
return o.__N || o.__;
|
|
401
398
|
}
|
|
402
|
-
function
|
|
403
|
-
var i =
|
|
399
|
+
function h2(n, u) {
|
|
400
|
+
var i = s2(t2++, 3);
|
|
404
401
|
!c2.__s && C2(i.__H, u) && (i.__ = n, i.u = u, r2.__H.__h.push(i));
|
|
405
402
|
}
|
|
406
403
|
function A2(n) {
|
|
@@ -409,7 +406,7 @@ function A2(n) {
|
|
|
409
406
|
}, []);
|
|
410
407
|
}
|
|
411
408
|
function T2(n, r) {
|
|
412
|
-
var u =
|
|
409
|
+
var u = s2(t2++, 7);
|
|
413
410
|
return C2(u.__H, r) && (u.__ = n(), u.__H = r, u.__h = n), u.__;
|
|
414
411
|
}
|
|
415
412
|
function q2(n, t) {
|
|
@@ -418,11 +415,11 @@ function q2(n, t) {
|
|
|
418
415
|
}, t);
|
|
419
416
|
}
|
|
420
417
|
function x2(n) {
|
|
421
|
-
var u = r2.context[n.__c], i =
|
|
418
|
+
var u = r2.context[n.__c], i = s2(t2++, 9);
|
|
422
419
|
return i.c = n, u ? (i.__ == null && (i.__ = true, u.sub(r2)), u.props.value) : n.__;
|
|
423
420
|
}
|
|
424
421
|
function g2() {
|
|
425
|
-
var n =
|
|
422
|
+
var n = s2(t2++, 11);
|
|
426
423
|
if (!n.__) {
|
|
427
424
|
for (var u = r2.__v;u !== null && !u.__m && u.__ !== null; )
|
|
428
425
|
u = u.__;
|
|
@@ -445,7 +442,7 @@ function j2() {
|
|
|
445
442
|
c2.__b = function(n) {
|
|
446
443
|
r2 = null, e2 && e2(n);
|
|
447
444
|
}, c2.__ = function(n, t) {
|
|
448
|
-
n && t.__k && t.__k.__m && (n.__m = t.__k.__m),
|
|
445
|
+
n && t.__k && t.__k.__m && (n.__m = t.__k.__m), p2 && p2(n, t);
|
|
449
446
|
}, c2.__r = function(n) {
|
|
450
447
|
a2 && a2(n), t2 = 0;
|
|
451
448
|
var i = (r2 = n.__c).__H;
|
|
@@ -456,7 +453,7 @@ c2.__b = function(n) {
|
|
|
456
453
|
v2 && v2(n);
|
|
457
454
|
var t = n.__c;
|
|
458
455
|
t && t.__H && (t.__H.__h.length && (f2.push(t) !== 1 && i2 === c2.requestAnimationFrame || ((i2 = c2.requestAnimationFrame) || w2)(j2)), t.__H.__.some(function(n) {
|
|
459
|
-
n.u && (n.__H = n.u
|
|
456
|
+
n.u && (n.__H = n.u, n.u = undefined);
|
|
460
457
|
})), u2 = r2 = null;
|
|
461
458
|
}, c2.__c = function(n, t) {
|
|
462
459
|
t.some(function(n) {
|
|
@@ -505,24 +502,28 @@ function D2(n, t) {
|
|
|
505
502
|
return typeof t == "function" ? t(n) : t;
|
|
506
503
|
}
|
|
507
504
|
|
|
508
|
-
// ../../node_modules/.bun/@preact+signals-core@1.14.
|
|
505
|
+
// ../../node_modules/.bun/@preact+signals-core@1.14.4/node_modules/@preact/signals-core/dist/signals-core.module.js
|
|
509
506
|
var i3 = Symbol.for("preact-signals");
|
|
510
507
|
function t3() {
|
|
511
|
-
if (!(
|
|
508
|
+
if (!(v3 > 1)) {
|
|
512
509
|
var i, t = false;
|
|
513
510
|
(function() {
|
|
514
511
|
var i = c3;
|
|
515
512
|
c3 = undefined;
|
|
516
513
|
while (i !== undefined) {
|
|
517
|
-
|
|
518
|
-
|
|
514
|
+
var t = i.S;
|
|
515
|
+
if (t.v === i.v) {
|
|
516
|
+
for (var n = t.t;n !== undefined; n = n.x)
|
|
517
|
+
if (n.i === i.i)
|
|
518
|
+
n.i = t.i;
|
|
519
|
+
}
|
|
519
520
|
i = i.o;
|
|
520
521
|
}
|
|
521
522
|
})();
|
|
522
523
|
while (h3 !== undefined) {
|
|
523
524
|
var n = h3;
|
|
524
525
|
h3 = undefined;
|
|
525
|
-
|
|
526
|
+
s3++;
|
|
526
527
|
while (n !== undefined) {
|
|
527
528
|
var r = n.u;
|
|
528
529
|
n.u = undefined;
|
|
@@ -539,52 +540,54 @@ function t3() {
|
|
|
539
540
|
n = r;
|
|
540
541
|
}
|
|
541
542
|
}
|
|
542
|
-
|
|
543
|
-
|
|
543
|
+
s3 = 0;
|
|
544
|
+
v3--;
|
|
544
545
|
if (t)
|
|
545
546
|
throw i;
|
|
546
547
|
} else
|
|
547
|
-
|
|
548
|
+
v3--;
|
|
548
549
|
}
|
|
549
550
|
function n2(i) {
|
|
550
|
-
if (
|
|
551
|
+
if (v3 > 0)
|
|
551
552
|
return i();
|
|
552
553
|
e3 = ++u3;
|
|
553
|
-
|
|
554
|
+
v3++;
|
|
554
555
|
try {
|
|
555
556
|
return i();
|
|
556
557
|
} finally {
|
|
557
558
|
t3();
|
|
558
559
|
}
|
|
559
560
|
}
|
|
560
|
-
var r3
|
|
561
|
-
|
|
562
|
-
|
|
561
|
+
var r3;
|
|
562
|
+
var o3 = undefined;
|
|
563
|
+
function f3(i) {
|
|
564
|
+
var t = o3, n = r3;
|
|
565
|
+
o3 = undefined;
|
|
563
566
|
r3 = undefined;
|
|
564
567
|
try {
|
|
565
568
|
return i();
|
|
566
569
|
} finally {
|
|
567
|
-
|
|
570
|
+
o3 = t;
|
|
571
|
+
r3 = n;
|
|
568
572
|
}
|
|
569
573
|
}
|
|
570
|
-
var f3;
|
|
571
574
|
var h3 = undefined;
|
|
572
|
-
var s3 = 0;
|
|
573
575
|
var v3 = 0;
|
|
576
|
+
var s3 = 0;
|
|
574
577
|
var u3 = 0;
|
|
575
578
|
var e3 = 0;
|
|
576
579
|
var c3 = undefined;
|
|
577
580
|
var d3 = 0;
|
|
578
581
|
function a3(i) {
|
|
579
|
-
if (
|
|
582
|
+
if (o3 !== undefined) {
|
|
580
583
|
var t = i.n;
|
|
581
|
-
if (t === undefined || t.t !==
|
|
582
|
-
t = { i: 0, S: i, p:
|
|
583
|
-
if (
|
|
584
|
-
|
|
585
|
-
|
|
584
|
+
if (t === undefined || t.t !== o3) {
|
|
585
|
+
t = { i: 0, S: i, p: o3.s, n: undefined, t: o3, e: undefined, x: undefined, r: t };
|
|
586
|
+
if (o3.s !== undefined)
|
|
587
|
+
o3.s.n = t;
|
|
588
|
+
o3.s = t;
|
|
586
589
|
i.n = t;
|
|
587
|
-
if (32 &
|
|
590
|
+
if (32 & o3.f)
|
|
588
591
|
i.S(t);
|
|
589
592
|
return t;
|
|
590
593
|
} else if (t.i === -1) {
|
|
@@ -593,10 +596,10 @@ function a3(i) {
|
|
|
593
596
|
t.n.p = t.p;
|
|
594
597
|
if (t.p !== undefined)
|
|
595
598
|
t.p.n = t.n;
|
|
596
|
-
t.p =
|
|
599
|
+
t.p = o3.s;
|
|
597
600
|
t.n = undefined;
|
|
598
|
-
|
|
599
|
-
|
|
601
|
+
o3.s.n = t;
|
|
602
|
+
o3.s = t;
|
|
600
603
|
}
|
|
601
604
|
return t;
|
|
602
605
|
}
|
|
@@ -624,7 +627,7 @@ l3.prototype.S = function(i) {
|
|
|
624
627
|
if (n !== undefined)
|
|
625
628
|
n.e = i;
|
|
626
629
|
else
|
|
627
|
-
|
|
630
|
+
f3(function() {
|
|
628
631
|
var i;
|
|
629
632
|
(i = t.W) == null || i.call(t);
|
|
630
633
|
});
|
|
@@ -645,7 +648,7 @@ l3.prototype.U = function(i) {
|
|
|
645
648
|
if (i === this.t) {
|
|
646
649
|
this.t = r;
|
|
647
650
|
if (r === undefined)
|
|
648
|
-
|
|
651
|
+
f3(function() {
|
|
649
652
|
var i;
|
|
650
653
|
(i = t.Z) == null || i.call(t);
|
|
651
654
|
});
|
|
@@ -655,13 +658,10 @@ l3.prototype.U = function(i) {
|
|
|
655
658
|
l3.prototype.subscribe = function(i) {
|
|
656
659
|
var t = this;
|
|
657
660
|
return j3(function() {
|
|
658
|
-
var n = t.value
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
} finally {
|
|
663
|
-
r3 = o;
|
|
664
|
-
}
|
|
661
|
+
var n = t.value;
|
|
662
|
+
f3(function() {
|
|
663
|
+
return i(n);
|
|
664
|
+
});
|
|
665
665
|
}, { name: "sub" });
|
|
666
666
|
};
|
|
667
667
|
l3.prototype.valueOf = function() {
|
|
@@ -675,7 +675,7 @@ l3.prototype.toJSON = function() {
|
|
|
675
675
|
};
|
|
676
676
|
l3.prototype.peek = function() {
|
|
677
677
|
var i = this;
|
|
678
|
-
return
|
|
678
|
+
return f3(function() {
|
|
679
679
|
return i.value;
|
|
680
680
|
});
|
|
681
681
|
};
|
|
@@ -686,10 +686,10 @@ Object.defineProperty(l3.prototype, "value", { get: function() {
|
|
|
686
686
|
return this.v;
|
|
687
687
|
}, set: function(i) {
|
|
688
688
|
if (i !== this.v) {
|
|
689
|
-
if (
|
|
689
|
+
if (s3 > 100)
|
|
690
690
|
throw new Error("Cycle detected");
|
|
691
691
|
(function(i) {
|
|
692
|
-
if (
|
|
692
|
+
if (v3 !== 0 && s3 === 0) {
|
|
693
693
|
if (i.l !== e3) {
|
|
694
694
|
i.l = e3;
|
|
695
695
|
c3 = { S: i, v: i.v, i: i.i, o: c3 };
|
|
@@ -699,7 +699,7 @@ Object.defineProperty(l3.prototype, "value", { get: function() {
|
|
|
699
699
|
this.v = i;
|
|
700
700
|
this.i++;
|
|
701
701
|
d3++;
|
|
702
|
-
|
|
702
|
+
v3++;
|
|
703
703
|
try {
|
|
704
704
|
for (var n = this.t;n !== undefined; n = n.x)
|
|
705
705
|
n.t.N();
|
|
@@ -750,14 +750,11 @@ function b2(i) {
|
|
|
750
750
|
i.s = n;
|
|
751
751
|
}
|
|
752
752
|
function p3(i, t) {
|
|
753
|
-
l3.call(this, undefined);
|
|
753
|
+
l3.call(this, undefined, t);
|
|
754
754
|
this.x = i;
|
|
755
755
|
this.s = undefined;
|
|
756
756
|
this.g = d3 - 1;
|
|
757
757
|
this.f = 4;
|
|
758
|
-
this.W = t == null ? undefined : t.watched;
|
|
759
|
-
this.Z = t == null ? undefined : t.unwatched;
|
|
760
|
-
this.name = t == null ? undefined : t.name;
|
|
761
758
|
}
|
|
762
759
|
p3.prototype = new l3;
|
|
763
760
|
p3.prototype.h = function() {
|
|
@@ -775,10 +772,10 @@ p3.prototype.h = function() {
|
|
|
775
772
|
this.f &= -2;
|
|
776
773
|
return true;
|
|
777
774
|
}
|
|
778
|
-
var i =
|
|
775
|
+
var i = o3;
|
|
779
776
|
try {
|
|
780
777
|
_2(this);
|
|
781
|
-
|
|
778
|
+
o3 = this;
|
|
782
779
|
var t = this.x();
|
|
783
780
|
if (16 & this.f || this.v !== t || this.i === 0) {
|
|
784
781
|
this.v = t;
|
|
@@ -790,7 +787,7 @@ p3.prototype.h = function() {
|
|
|
790
787
|
this.f |= 16;
|
|
791
788
|
this.i++;
|
|
792
789
|
}
|
|
793
|
-
|
|
790
|
+
o3 = i;
|
|
794
791
|
b2(this);
|
|
795
792
|
this.f &= -2;
|
|
796
793
|
return true;
|
|
@@ -838,9 +835,9 @@ function S2(i) {
|
|
|
838
835
|
var n = i.m;
|
|
839
836
|
i.m = undefined;
|
|
840
837
|
if (typeof n == "function") {
|
|
841
|
-
|
|
842
|
-
var
|
|
843
|
-
|
|
838
|
+
v3++;
|
|
839
|
+
var r = o3;
|
|
840
|
+
o3 = undefined;
|
|
844
841
|
try {
|
|
845
842
|
n();
|
|
846
843
|
} catch (t) {
|
|
@@ -849,7 +846,7 @@ function S2(i) {
|
|
|
849
846
|
m3(i);
|
|
850
847
|
throw t;
|
|
851
848
|
} finally {
|
|
852
|
-
|
|
849
|
+
o3 = r;
|
|
853
850
|
t3();
|
|
854
851
|
}
|
|
855
852
|
}
|
|
@@ -862,10 +859,10 @@ function m3(i) {
|
|
|
862
859
|
S2(i);
|
|
863
860
|
}
|
|
864
861
|
function x3(i) {
|
|
865
|
-
if (
|
|
862
|
+
if (o3 !== this)
|
|
866
863
|
throw new Error("Out-of-order effect");
|
|
867
864
|
b2(this);
|
|
868
|
-
|
|
865
|
+
o3 = i;
|
|
869
866
|
this.f &= -2;
|
|
870
867
|
if (8 & this.f)
|
|
871
868
|
m3(this);
|
|
@@ -878,8 +875,8 @@ function E2(i, t) {
|
|
|
878
875
|
this.u = undefined;
|
|
879
876
|
this.f = 32;
|
|
880
877
|
this.name = t == null ? undefined : t.name;
|
|
881
|
-
if (
|
|
882
|
-
|
|
878
|
+
if (r3)
|
|
879
|
+
r3.push(this);
|
|
883
880
|
}
|
|
884
881
|
E2.prototype.c = function() {
|
|
885
882
|
var i = this.S();
|
|
@@ -902,9 +899,9 @@ E2.prototype.S = function() {
|
|
|
902
899
|
this.f &= -9;
|
|
903
900
|
S2(this);
|
|
904
901
|
_2(this);
|
|
905
|
-
|
|
906
|
-
var i =
|
|
907
|
-
|
|
902
|
+
v3++;
|
|
903
|
+
var i = o3;
|
|
904
|
+
o3 = this;
|
|
908
905
|
return x3.bind(this, i);
|
|
909
906
|
};
|
|
910
907
|
E2.prototype.N = function() {
|
|
@@ -935,10 +932,10 @@ function j3(i, t) {
|
|
|
935
932
|
return r;
|
|
936
933
|
}
|
|
937
934
|
|
|
938
|
-
// ../../node_modules/.bun/@preact+signals@2.
|
|
935
|
+
// ../../node_modules/.bun/@preact+signals@2.11.3+6d480b93d497d3a1/node_modules/@preact/signals/dist/signals.module.js
|
|
939
936
|
var l4;
|
|
940
|
-
var d4;
|
|
941
937
|
var h4;
|
|
938
|
+
var d4;
|
|
942
939
|
var p4 = typeof window != "undefined" && !!window.__PREACT_SIGNALS_DEVTOOLS__;
|
|
943
940
|
var m4 = [];
|
|
944
941
|
var _3 = [];
|
|
@@ -949,17 +946,18 @@ function g4(i, r) {
|
|
|
949
946
|
l[i] = r.bind(null, l[i] || function() {});
|
|
950
947
|
}
|
|
951
948
|
function b3(i) {
|
|
952
|
-
if (
|
|
953
|
-
var n =
|
|
954
|
-
|
|
949
|
+
if (d4) {
|
|
950
|
+
var n = d4;
|
|
951
|
+
d4 = undefined;
|
|
955
952
|
n();
|
|
956
953
|
}
|
|
957
|
-
|
|
954
|
+
d4 = i && i.S();
|
|
958
955
|
}
|
|
959
956
|
function y4(i) {
|
|
960
|
-
var n = this, t2 = i.data,
|
|
961
|
-
|
|
962
|
-
|
|
957
|
+
var n = this, t2 = i.data, f = useSignal(t2);
|
|
958
|
+
f.name = "ReactiveDom";
|
|
959
|
+
f.value = t2;
|
|
960
|
+
var e = T2(function() {
|
|
963
961
|
var i = n, t2 = n.__v;
|
|
964
962
|
while (t2 = t2.__)
|
|
965
963
|
if (t2.__c) {
|
|
@@ -967,13 +965,13 @@ function y4(i) {
|
|
|
967
965
|
break;
|
|
968
966
|
}
|
|
969
967
|
var o = g3(function() {
|
|
970
|
-
var i =
|
|
968
|
+
var i = f.value.value;
|
|
971
969
|
return i === 0 ? 0 : i === true ? "" : i || "";
|
|
972
|
-
}),
|
|
970
|
+
}), e = g3(function() {
|
|
973
971
|
return !Array.isArray(o.value) && !t(o.value);
|
|
974
972
|
}), a = j3(function() {
|
|
975
973
|
this.N = F2;
|
|
976
|
-
if (
|
|
974
|
+
if (e.value) {
|
|
977
975
|
var n = o.value;
|
|
978
976
|
if (i.__v && i.__v.__e && i.__v.__e.nodeType === 3)
|
|
979
977
|
i.__v.__e.data = n;
|
|
@@ -983,8 +981,8 @@ function y4(i) {
|
|
|
983
981
|
a();
|
|
984
982
|
v.call(this);
|
|
985
983
|
};
|
|
986
|
-
return [
|
|
987
|
-
}, []), a =
|
|
984
|
+
return [e, o];
|
|
985
|
+
}, []), a = e[0], v = e[1];
|
|
988
986
|
return a.value ? v.peek() : v.value;
|
|
989
987
|
}
|
|
990
988
|
y4.displayName = "ReactiveTextNode";
|
|
@@ -995,16 +993,18 @@ Object.defineProperties(l3.prototype, { constructor: { configurable: true, value
|
|
|
995
993
|
} } };
|
|
996
994
|
} }, __b: { configurable: true, value: 1 } });
|
|
997
995
|
g4("__b", function(i, n) {
|
|
996
|
+
b3();
|
|
997
|
+
h4 = undefined;
|
|
998
998
|
if (typeof n.type == "string") {
|
|
999
999
|
var r, t = n.props;
|
|
1000
1000
|
for (var o in t)
|
|
1001
1001
|
if (o !== "children") {
|
|
1002
|
-
var
|
|
1003
|
-
if (
|
|
1002
|
+
var f = t[o];
|
|
1003
|
+
if (f instanceof l3) {
|
|
1004
1004
|
if (!r)
|
|
1005
1005
|
n.__np = r = {};
|
|
1006
|
-
r[o] =
|
|
1007
|
-
t[o] =
|
|
1006
|
+
r[o] = f;
|
|
1007
|
+
t[o] = f.peek();
|
|
1008
1008
|
}
|
|
1009
1009
|
}
|
|
1010
1010
|
}
|
|
@@ -1025,75 +1025,73 @@ g4("__r", function(i, n) {
|
|
|
1025
1025
|
}, { name: n });
|
|
1026
1026
|
r.c = i;
|
|
1027
1027
|
return r;
|
|
1028
|
-
}(function() {
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1028
|
+
}(function(i) {
|
|
1029
|
+
return function() {
|
|
1030
|
+
var n;
|
|
1031
|
+
if (p4)
|
|
1032
|
+
(n = this.y) == null || n.call(this);
|
|
1033
|
+
i.__$f |= 1;
|
|
1034
|
+
i.setState({});
|
|
1035
|
+
};
|
|
1036
|
+
}(o), typeof n.type == "function" ? n.type.displayName || n.type.name : "");
|
|
1035
1037
|
}
|
|
1036
|
-
|
|
1038
|
+
h4 = o;
|
|
1037
1039
|
b3(r);
|
|
1038
1040
|
}
|
|
1039
1041
|
});
|
|
1040
1042
|
g4("__e", function(i, n, r, t) {
|
|
1041
1043
|
b3();
|
|
1042
|
-
|
|
1044
|
+
h4 = undefined;
|
|
1043
1045
|
i(n, r, t);
|
|
1044
1046
|
});
|
|
1045
1047
|
g4("diffed", function(i, n) {
|
|
1046
1048
|
b3();
|
|
1047
|
-
|
|
1049
|
+
h4 = undefined;
|
|
1048
1050
|
var r;
|
|
1049
1051
|
if (typeof n.type == "string" && (r = n.__e)) {
|
|
1050
|
-
var { __np: t, props: o } = n;
|
|
1051
|
-
if (
|
|
1052
|
-
var e
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
u.d();
|
|
1058
|
-
e[f] = undefined;
|
|
1059
|
-
}
|
|
1052
|
+
var { __np: t, props: o } = n, f = r.U;
|
|
1053
|
+
if (f)
|
|
1054
|
+
for (var e in f) {
|
|
1055
|
+
var u = f[e];
|
|
1056
|
+
if (!(u === undefined || t && (e in t))) {
|
|
1057
|
+
u.d();
|
|
1058
|
+
f[e] = undefined;
|
|
1060
1059
|
}
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1060
|
+
}
|
|
1061
|
+
if (t) {
|
|
1062
|
+
if (!f) {
|
|
1063
|
+
f = {};
|
|
1064
|
+
r.U = f;
|
|
1064
1065
|
}
|
|
1065
1066
|
for (var a in t) {
|
|
1066
|
-
var c =
|
|
1067
|
+
var c = f[a], v = t[a];
|
|
1067
1068
|
if (c === undefined) {
|
|
1068
|
-
c = w4(r, a, v);
|
|
1069
|
-
|
|
1069
|
+
c = w4(r, a, v, o);
|
|
1070
|
+
f[a] = c;
|
|
1070
1071
|
} else
|
|
1071
1072
|
c.o(v, o);
|
|
1072
1073
|
}
|
|
1073
|
-
for (var s in t)
|
|
1074
|
-
o[s] = t[s];
|
|
1075
1074
|
}
|
|
1076
1075
|
}
|
|
1077
1076
|
i(n);
|
|
1078
1077
|
});
|
|
1079
1078
|
function w4(i, n, r, t) {
|
|
1080
|
-
var o = n in i && i.ownerSVGElement === undefined,
|
|
1079
|
+
var o = n in i && i.ownerSVGElement === undefined, f = y3(r);
|
|
1081
1080
|
return { o: function(i, n) {
|
|
1082
|
-
|
|
1083
|
-
|
|
1081
|
+
f.value = i;
|
|
1082
|
+
t = n;
|
|
1084
1083
|
}, d: j3(function() {
|
|
1085
1084
|
this.N = F2;
|
|
1086
|
-
var r =
|
|
1087
|
-
if (
|
|
1088
|
-
|
|
1085
|
+
var r = f.value.value;
|
|
1086
|
+
if (t[n] !== r) {
|
|
1087
|
+
t[n] = r;
|
|
1089
1088
|
if (o)
|
|
1090
1089
|
i[n] = r;
|
|
1091
1090
|
else if (r != null && (r !== false || n[4] === "-"))
|
|
1092
1091
|
i.setAttribute(n, r);
|
|
1093
1092
|
else
|
|
1094
1093
|
i.removeAttribute(n);
|
|
1095
|
-
}
|
|
1096
|
-
f = undefined;
|
|
1094
|
+
}
|
|
1097
1095
|
}) };
|
|
1098
1096
|
}
|
|
1099
1097
|
g4("unmount", function(i, n) {
|
|
@@ -1104,27 +1102,34 @@ g4("unmount", function(i, n) {
|
|
|
1104
1102
|
if (t) {
|
|
1105
1103
|
r.U = undefined;
|
|
1106
1104
|
for (var o in t) {
|
|
1107
|
-
var
|
|
1108
|
-
if (
|
|
1109
|
-
|
|
1105
|
+
var f = t[o];
|
|
1106
|
+
if (f)
|
|
1107
|
+
f.d();
|
|
1110
1108
|
}
|
|
1111
1109
|
}
|
|
1112
1110
|
}
|
|
1111
|
+
var e = n.__np;
|
|
1112
|
+
if (e) {
|
|
1113
|
+
var u = n.props;
|
|
1114
|
+
for (var a in e)
|
|
1115
|
+
u[a] = e[a];
|
|
1116
|
+
}
|
|
1113
1117
|
n.__np = undefined;
|
|
1114
1118
|
} else {
|
|
1115
|
-
var
|
|
1116
|
-
if (
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
u
|
|
1119
|
+
var c = n.__c;
|
|
1120
|
+
if (c) {
|
|
1121
|
+
c.__$f |= 8;
|
|
1122
|
+
var v = c.__$u;
|
|
1123
|
+
if (v) {
|
|
1124
|
+
c.__$u = undefined;
|
|
1125
|
+
v.d();
|
|
1121
1126
|
}
|
|
1122
1127
|
}
|
|
1123
1128
|
}
|
|
1124
1129
|
i(n);
|
|
1125
1130
|
});
|
|
1126
1131
|
g4("__h", function(i, n, r, t) {
|
|
1127
|
-
if (t < 3
|
|
1132
|
+
if (t < 3)
|
|
1128
1133
|
n.__$f |= 2;
|
|
1129
1134
|
i(n, r, t);
|
|
1130
1135
|
});
|
|
@@ -1135,8 +1140,8 @@ C.prototype.shouldComponentUpdate = function(i, n) {
|
|
|
1135
1140
|
for (var o in n)
|
|
1136
1141
|
return true;
|
|
1137
1142
|
if (this.__f || typeof this.u == "boolean" && this.u === true) {
|
|
1138
|
-
var
|
|
1139
|
-
if (!(t ||
|
|
1143
|
+
var f = 2 & this.__$f;
|
|
1144
|
+
if (!(t || f || 4 & this.__$f))
|
|
1140
1145
|
return true;
|
|
1141
1146
|
if (1 & this.__$f)
|
|
1142
1147
|
return true;
|
|
@@ -1146,8 +1151,8 @@ C.prototype.shouldComponentUpdate = function(i, n) {
|
|
|
1146
1151
|
if (3 & this.__$f)
|
|
1147
1152
|
return true;
|
|
1148
1153
|
}
|
|
1149
|
-
for (var
|
|
1150
|
-
if (
|
|
1154
|
+
for (var e in i)
|
|
1155
|
+
if (e !== "__source" && i[e] !== this.props[e])
|
|
1151
1156
|
return true;
|
|
1152
1157
|
for (var u in this.props)
|
|
1153
1158
|
if (!(u in i))
|
|
@@ -1162,7 +1167,7 @@ function useSignal(i, n) {
|
|
|
1162
1167
|
function useComputed(i, n) {
|
|
1163
1168
|
var r = A2(i);
|
|
1164
1169
|
r.current = i;
|
|
1165
|
-
|
|
1170
|
+
h4.__$f |= 4;
|
|
1166
1171
|
return T2(function() {
|
|
1167
1172
|
return g3(function() {
|
|
1168
1173
|
return r.current();
|
|
@@ -1206,10 +1211,12 @@ function F2() {
|
|
|
1206
1211
|
function useSignalEffect(i, n) {
|
|
1207
1212
|
var r = A2(i);
|
|
1208
1213
|
r.current = i;
|
|
1209
|
-
|
|
1214
|
+
var t = h4;
|
|
1215
|
+
h2(function() {
|
|
1210
1216
|
return j3(function() {
|
|
1211
1217
|
this.N = T4;
|
|
1212
|
-
|
|
1218
|
+
if (!(t && 8 & t.__$f))
|
|
1219
|
+
return r.current();
|
|
1213
1220
|
}, n);
|
|
1214
1221
|
}, []);
|
|
1215
1222
|
}
|
|
@@ -1517,7 +1524,7 @@ function createForm(config) {
|
|
|
1517
1524
|
actions
|
|
1518
1525
|
};
|
|
1519
1526
|
}
|
|
1520
|
-
// ../../node_modules/.bun/preact@10.29.
|
|
1527
|
+
// ../../node_modules/.bun/preact@10.29.8+6d480b93d497d3a1/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js
|
|
1521
1528
|
var f4 = 0;
|
|
1522
1529
|
function u4(e, t, n, o, i, u) {
|
|
1523
1530
|
t || (t = {});
|
|
@@ -1609,11 +1616,11 @@ function ActionInput(props) {
|
|
|
1609
1616
|
const [mode, setMode] = d2(live ? "edit" : "view");
|
|
1610
1617
|
const [draft, setDraft] = d2(props.value);
|
|
1611
1618
|
const inputRef = A2(null);
|
|
1612
|
-
|
|
1619
|
+
h2(() => {
|
|
1613
1620
|
if (mode === "view")
|
|
1614
1621
|
setDraft(props.value);
|
|
1615
1622
|
}, [props.value, mode]);
|
|
1616
|
-
|
|
1623
|
+
h2(() => {
|
|
1617
1624
|
if (mode === "edit" && !live && inputRef.current) {
|
|
1618
1625
|
inputRef.current.focus();
|
|
1619
1626
|
inputRef.current.select?.();
|
|
@@ -1871,10 +1878,10 @@ function Dropdown(props) {
|
|
|
1871
1878
|
const triggerRef = A2(null);
|
|
1872
1879
|
const idRef = A2(`polly-dropdown-${++dropdownCounter}`);
|
|
1873
1880
|
const popoverId = idRef.current;
|
|
1874
|
-
|
|
1881
|
+
h2(() => {
|
|
1875
1882
|
triggerRef.current?.setAttribute("popovertarget", popoverId);
|
|
1876
1883
|
}, [popoverId]);
|
|
1877
|
-
|
|
1884
|
+
h2(() => {
|
|
1878
1885
|
const menu = menuRef.current;
|
|
1879
1886
|
if (!menu)
|
|
1880
1887
|
return;
|
|
@@ -1888,7 +1895,7 @@ function Dropdown(props) {
|
|
|
1888
1895
|
menu.removeEventListener("overlay:close", onOverlayClose);
|
|
1889
1896
|
};
|
|
1890
1897
|
}, [popoverId, isOpen]);
|
|
1891
|
-
|
|
1898
|
+
h2(() => {
|
|
1892
1899
|
const menu = menuRef.current;
|
|
1893
1900
|
const trigger = triggerRef.current;
|
|
1894
1901
|
if (!menu || !trigger)
|
|
@@ -2787,7 +2794,7 @@ var ConfirmDialog_module_default = {
|
|
|
2787
2794
|
confirm: "confirm_ZfTX4A",
|
|
2788
2795
|
confirmDanger: "confirmDanger_ZfTX4A"
|
|
2789
2796
|
};
|
|
2790
|
-
// ../../node_modules/.bun/preact@10.29.
|
|
2797
|
+
// ../../node_modules/.bun/preact@10.29.8+6d480b93d497d3a1/node_modules/preact/compat/dist/compat.module.js
|
|
2791
2798
|
function g5(n, t) {
|
|
2792
2799
|
for (var e in t)
|
|
2793
2800
|
n[e] = t[e];
|
|
@@ -2818,7 +2825,7 @@ l.__e = function(n, t, e, r) {
|
|
|
2818
2825
|
if (n.then) {
|
|
2819
2826
|
for (var u, o = t;o = o.__; )
|
|
2820
2827
|
if ((u = o.__c) && u.__c)
|
|
2821
|
-
return t.__e == null && (t.__e = e.__e, t.__k = e.__k), u.__c(n, t);
|
|
2828
|
+
return t.__e == null && (t.__e = e.__e, t.__k = e.__k || []), u.__c(n, t);
|
|
2822
2829
|
}
|
|
2823
2830
|
O2(n, t, e, r);
|
|
2824
2831
|
};
|
|
@@ -2852,12 +2859,12 @@ l.unmount = function(n) {
|
|
|
2852
2859
|
var e = t.__c, r = this;
|
|
2853
2860
|
r.o == null && (r.o = []), r.o.push(e);
|
|
2854
2861
|
var u = j4(r.__v), o = false, i = function() {
|
|
2855
|
-
o || r.__z || (o = true, e.__R = null, u ? u(
|
|
2862
|
+
o || r.__z || (o = true, e.__R = null, u ? u(f) : f());
|
|
2856
2863
|
};
|
|
2857
2864
|
e.__R = i;
|
|
2858
2865
|
var l2 = e.__P;
|
|
2859
2866
|
e.__P = null;
|
|
2860
|
-
var
|
|
2867
|
+
var f = function() {
|
|
2861
2868
|
if (!--r.__u) {
|
|
2862
2869
|
if (r.state.__a) {
|
|
2863
2870
|
var n = r.state.__a;
|
|
@@ -2973,8 +2980,8 @@ l.vnode = function(n) {
|
|
|
2973
2980
|
for (var i in t) {
|
|
2974
2981
|
var l2 = t[i];
|
|
2975
2982
|
if (!(i === "value" && ("defaultValue" in t) && l2 == null || Q2 && i === "children" && e === "noscript" || i === "class" || i === "className")) {
|
|
2976
|
-
var
|
|
2977
|
-
i === "defaultValue" && "value" in t && t.value == null ? i = "value" : i === "download" && l2 === true ? l2 = "" :
|
|
2983
|
+
var f = i.toLowerCase();
|
|
2984
|
+
i === "defaultValue" && "value" in t && t.value == null ? i = "value" : i === "download" && l2 === true ? l2 = "" : f === "translate" && l2 === "no" ? l2 = false : f[0] === "o" && f[1] === "n" ? f === "ondoubleclick" ? i = "ondblclick" : f !== "onchange" || e !== "input" && e !== "textarea" || X2(t.type) ? f === "onfocus" ? i = "onfocusin" : f === "onblur" ? i = "onfocusout" : J2.test(i) && (i = f) : f = i = "oninput" : o && G2.test(i) ? i = i.replace(K2, "-$&").toLowerCase() : l2 === null && (l2 = undefined), f === "oninput" && u[i = f] && (i = "oninputCapture"), u[i] = l2;
|
|
2978
2985
|
}
|
|
2979
2986
|
}
|
|
2980
2987
|
e == "select" && (u.multiple && Array.isArray(u.value) && (u.value = F(t.children).forEach(function(n) {
|
|
@@ -2988,9 +2995,9 @@ var ln = l.__r;
|
|
|
2988
2995
|
l.__r = function(n) {
|
|
2989
2996
|
ln && ln(n), rn = n.__c;
|
|
2990
2997
|
};
|
|
2991
|
-
var
|
|
2998
|
+
var fn = l.diffed;
|
|
2992
2999
|
l.diffed = function(n) {
|
|
2993
|
-
|
|
3000
|
+
fn && fn(n);
|
|
2994
3001
|
var { props: t, __e: e } = n;
|
|
2995
3002
|
e != null && n.type === "textarea" && "value" in t && t.value !== e.value && (e.value = t.value == null ? "" : t.value), rn = null;
|
|
2996
3003
|
};
|
|
@@ -3097,7 +3104,7 @@ var OverlayRoot_module_default = {
|
|
|
3097
3104
|
// src/polly-ui/OverlayRoot.tsx
|
|
3098
3105
|
function OverlayRoot() {
|
|
3099
3106
|
const ref = A2(null);
|
|
3100
|
-
|
|
3107
|
+
h2(() => {
|
|
3101
3108
|
let release = null;
|
|
3102
3109
|
const dispose = j3(() => {
|
|
3103
3110
|
if (hasOpenOverlay()) {
|
|
@@ -3141,14 +3148,14 @@ function Root2({ when, onClose, children, "aria-label": ariaLabel }) {
|
|
|
3141
3148
|
const isOpen = typeof when === "boolean" ? when : when.value;
|
|
3142
3149
|
const onCloseRef = A2(onClose);
|
|
3143
3150
|
onCloseRef.current = onClose;
|
|
3144
|
-
|
|
3151
|
+
h2(() => {
|
|
3145
3152
|
if (!isOpen) {
|
|
3146
3153
|
setPortalNode(null);
|
|
3147
3154
|
return;
|
|
3148
3155
|
}
|
|
3149
3156
|
setPortalNode(getOverlayRootNode());
|
|
3150
3157
|
}, [isOpen]);
|
|
3151
|
-
|
|
3158
|
+
h2(() => {
|
|
3152
3159
|
if (!isOpen || !portalNode)
|
|
3153
3160
|
return;
|
|
3154
3161
|
const entry = { id, onClose: () => onCloseRef.current?.() };
|
|
@@ -3866,10 +3873,10 @@ function Viewport(props) {
|
|
|
3866
3873
|
const [portalNode, setPortalNode] = d2(null);
|
|
3867
3874
|
const [paused, setPaused] = d2(false);
|
|
3868
3875
|
const entries = errorState.value;
|
|
3869
|
-
|
|
3876
|
+
h2(() => {
|
|
3870
3877
|
setPortalNode(getOverlayRootNode());
|
|
3871
3878
|
}, []);
|
|
3872
|
-
|
|
3879
|
+
h2(() => {
|
|
3873
3880
|
if (paused || entries.length === 0)
|
|
3874
3881
|
return;
|
|
3875
3882
|
const head = entries[0];
|
|
@@ -5497,5 +5504,5 @@ installEventDelegation(async (dispatch) => {
|
|
|
5497
5504
|
var root = document.getElementById("app") ?? document.body;
|
|
5498
5505
|
R(/* @__PURE__ */ u4(GalleryApp, {}, undefined, false, undefined, this), root);
|
|
5499
5506
|
|
|
5500
|
-
//# debugId=
|
|
5501
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9kaXN0L3ByZWFjdC5tb2R1bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9ob29rcy9kaXN0L2hvb2tzLm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AcHJlYWN0K3NpZ25hbHMtY29yZUAxLjE0LjIvbm9kZV9tb2R1bGVzL0BwcmVhY3Qvc2lnbmFscy1jb3JlL2Rpc3Qvc2lnbmFscy1jb3JlLm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AcHJlYWN0K3NpZ25hbHNAMi45LjArOGFkZTYwMmVkNmMzNjM2MC9ub2RlX21vZHVsZXMvQHByZWFjdC9zaWduYWxzL2Rpc3Qvc2lnbmFscy5tb2R1bGUuanMiLCAic3JjL2FjdGlvbnMvZXJyb3IudHMiLCAic3JjL2FjdGlvbnMvb3ZlcmxheS50cyIsICJzcmMvYWN0aW9ucy9ldmVudC1kZWxlZ2F0aW9uLnRzIiwgInNyYy9hY3Rpb25zL2Zvcm0udHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9qc3gtcnVudGltZS9kaXN0L2pzeFJ1bnRpbWUubW9kdWxlLmpzIiwgInNyYy9hY3Rpb25zL3N0b3JlLnRzeCIsICJzcmMvcG9sbHktdWkvQWN0aW9uRm9ybS50c3giLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL2Rpc3BhdGNoLWFjdGlvbi50cyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvcGFzc3Rocm91Z2gudHMiLCAic3JjL3BvbGx5LXVpL0FjdGlvbklucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvTGF5b3V0LnRzeCIsICJzcmMvcG9sbHktdWkvRHJvcGRvd24udHN4IiwgInNyYy9wb2xseS11aS9pbnRlcm5hbC9zZWxlY3QtdHJpZ2dlci50c3giLCAic3JjL3BvbGx5LXVpL0FjdGlvblNlbGVjdC50c3giLCAic3JjL3BvbGx5LXVpL0JhZGdlLnRzeCIsICJzcmMvcG9sbHktdWkvQnV0dG9uLnRzeCIsICJzcmMvcG9sbHktdWkvU3VyZmFjZS50c3giLCAic3JjL3BvbGx5LXVpL0NhcmQudHN4IiwgInNyYy9wb2xseS11aS9DaGVja2JveC50c3giLCAic3JjL3BvbGx5LXVpL0NsdXN0ZXIudHN4IiwgInNyYy9wb2xseS11aS9Db2RlLnRzeCIsICJzcmMvcG9sbHktdWkvQ29sbGFwc2libGUudHN4IiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3ByZWFjdEAxMC4yOS4xL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L2Rpc3QvY29tcGF0Lm1vZHVsZS5qcyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvZm9jdXMtdHJhcC50cyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvc2Nyb2xsLWxvY2sudHMiLCAic3JjL3BvbGx5LXVpL092ZXJsYXlSb290LnRzeCIsICJzcmMvcG9sbHktdWkvTW9kYWwudHN4IiwgInNyYy9wb2xseS11aS9Db25maXJtRGlhbG9nLnRzeCIsICJzcmMvcG9sbHktdWkvRmlsZUlucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvSHRtbC50c3giLCAic3JjL3BvbGx5LXVpL0xpbmsudHN4IiwgInNyYy9wb2xseS11aS9PdXRwdXQudHN4IiwgInNyYy9wb2xseS11aS9TZWxlY3QudHN4IiwgInNyYy9wb2xseS11aS9Ta2VsZXRvbi50c3giLCAic3JjL3BvbGx5LXVpL1RhYnMudHN4IiwgInNyYy9wb2xseS11aS9UZXh0LnRzeCIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvaW5wdXQtYmFzZS50cyIsICJzcmMvcG9sbHktdWkvVGV4dElucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvVG9hc3QudHN4IiwgInNyYy9wb2xseS11aS9Ub2dnbGUudHN4IiwgInNyYy9zaGFyZWQvbGliL3N0YXRlLnRzIiwgInRvb2xzL2dhbGxlcnkvc3JjL3N0b3Jlcy50cyIsICJ0b29scy9nYWxsZXJ5L3NyYy9hY3Rpb25zLnRzIiwgInRvb2xzL2dhbGxlcnkvc3JjL3NwZWNpbWVucy50c3giLCAidG9vbHMvZ2FsbGVyeS9zcmMvZ2FsbGVyeS1hcHAudHN4IiwgInRvb2xzL2dhbGxlcnkvc3JjL2NsaWVudC50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAidmFyIG4sbCx1LHQsaSxyLG8sZSxmLGMscyxhLGgscCx2LHksZD17fSx3PVtdLF89L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxnPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gbShuLGwpe2Zvcih2YXIgdSBpbiBsKW5bdV09bFt1XTtyZXR1cm4gbn1mdW5jdGlvbiBiKG4pe24mJm4ucGFyZW50Tm9kZSYmbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pfWZ1bmN0aW9uIGsobCx1LHQpe3ZhciBpLHIsbyxlPXt9O2ZvcihvIGluIHUpXCJrZXlcIj09bz9pPXVbb106XCJyZWZcIj09bz9yPXVbb106ZVtvXT11W29dO2lmKGFyZ3VtZW50cy5sZW5ndGg+MiYmKGUuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP24uY2FsbChhcmd1bWVudHMsMik6dCksXCJmdW5jdGlvblwiPT10eXBlb2YgbCYmbnVsbCE9bC5kZWZhdWx0UHJvcHMpZm9yKG8gaW4gbC5kZWZhdWx0UHJvcHMpdm9pZCAwPT09ZVtvXSYmKGVbb109bC5kZWZhdWx0UHJvcHNbb10pO3JldHVybiB4KGwsZSxpLHIsbnVsbCl9ZnVuY3Rpb24geChuLHQsaSxyLG8pe3ZhciBlPXt0eXBlOm4scHJvcHM6dCxrZXk6aSxyZWY6cixfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6bnVsbD09bz8rK3U6byxfX2k6LTEsX191OjB9O3JldHVybiBudWxsPT1vJiZudWxsIT1sLnZub2RlJiZsLnZub2RlKGUpLGV9ZnVuY3Rpb24gTSgpe3JldHVybntjdXJyZW50Om51bGx9fWZ1bmN0aW9uIFMobil7cmV0dXJuIG4uY2hpbGRyZW59ZnVuY3Rpb24gQyhuLGwpe3RoaXMucHJvcHM9bix0aGlzLmNvbnRleHQ9bH1mdW5jdGlvbiAkKG4sbCl7aWYobnVsbD09bClyZXR1cm4gbi5fXz8kKG4uX18sbi5fX2krMSk6bnVsbDtmb3IodmFyIHU7bDxuLl9fay5sZW5ndGg7bCsrKWlmKG51bGwhPSh1PW4uX19rW2xdKSYmbnVsbCE9dS5fX2UpcmV0dXJuIHUuX19lO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4udHlwZT8kKG4pOm51bGx9ZnVuY3Rpb24gSShuKXtpZihuLl9fUCYmbi5fX2Qpe3ZhciB1PW4uX192LHQ9dS5fX2UsaT1bXSxyPVtdLG89bSh7fSx1KTtvLl9fdj11Ll9fdisxLGwudm5vZGUmJmwudm5vZGUobykscShuLl9fUCxvLHUsbi5fX24sbi5fX1AubmFtZXNwYWNlVVJJLDMyJnUuX191P1t0XTpudWxsLGksbnVsbD09dD8kKHUpOnQsISEoMzImdS5fX3UpLHIpLG8uX192PXUuX192LG8uX18uX19rW28uX19pXT1vLEQoaSxvLHIpLHUuX19lPXUuX189bnVsbCxvLl9fZSE9dCYmUChvKX19ZnVuY3Rpb24gUChuKXtpZihudWxsIT0obj1uLl9fKSYmbnVsbCE9bi5fX2MpcmV0dXJuIG4uX19lPW4uX19jLmJhc2U9bnVsbCxuLl9fay5zb21lKGZ1bmN0aW9uKGwpe2lmKG51bGwhPWwmJm51bGwhPWwuX19lKXJldHVybiBuLl9fZT1uLl9fYy5iYXNlPWwuX19lfSksUChuKX1mdW5jdGlvbiBBKG4peyghbi5fX2QmJihuLl9fZD0hMCkmJmkucHVzaChuKSYmIUguX19yKyt8fHIhPWwuZGVib3VuY2VSZW5kZXJpbmcpJiYoKHI9bC5kZWJvdW5jZVJlbmRlcmluZyl8fG8pKEgpfWZ1bmN0aW9uIEgoKXt0cnl7Zm9yKHZhciBuLGw9MTtpLmxlbmd0aDspaS5sZW5ndGg+bCYmaS5zb3J0KGUpLG49aS5zaGlmdCgpLGw9aS5sZW5ndGgsSShuKX1maW5hbGx5e2kubGVuZ3RoPUguX19yPTB9fWZ1bmN0aW9uIEwobixsLHUsdCxpLHIsbyxlLGYsYyxzKXt2YXIgYSxoLHAsdix5LF8sZyxtPXQmJnQuX19rfHx3LGI9bC5sZW5ndGg7Zm9yKGY9VCh1LGwsbSxmLGIpLGE9MDthPGI7YSsrKW51bGwhPShwPXUuX19rW2FdKSYmKGg9LTEhPXAuX19pJiZtW3AuX19pXXx8ZCxwLl9faT1hLF89cShuLHAsaCxpLHIsbyxlLGYsYyxzKSx2PXAuX19lLHAucmVmJiZoLnJlZiE9cC5yZWYmJihoLnJlZiYmSihoLnJlZixudWxsLHApLHMucHVzaChwLnJlZixwLl9fY3x8dixwKSksbnVsbD09eSYmbnVsbCE9diYmKHk9diksKGc9ISEoNCZwLl9fdSkpfHxoLl9faz09PXAuX19rPyhmPWoocCxmLG4sZyksZyYmaC5fX2UmJihoLl9fZT1udWxsKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgcC50eXBlJiZ2b2lkIDAhPT1fP2Y9Xzp2JiYoZj12Lm5leHRTaWJsaW5nKSxwLl9fdSY9LTcpO3JldHVybiB1Ll9fZT15LGZ9ZnVuY3Rpb24gVChuLGwsdSx0LGkpe3ZhciByLG8sZSxmLGMscz11Lmxlbmd0aCxhPXMsaD0wO2ZvcihuLl9faz1uZXcgQXJyYXkoaSkscj0wO3I8aTtyKyspbnVsbCE9KG89bFtyXSkmJlwiYm9vbGVhblwiIT10eXBlb2YgbyYmXCJmdW5jdGlvblwiIT10eXBlb2Ygbz8oXCJzdHJpbmdcIj09dHlwZW9mIG98fFwibnVtYmVyXCI9PXR5cGVvZiBvfHxcImJpZ2ludFwiPT10eXBlb2Ygb3x8by5jb25zdHJ1Y3Rvcj09U3RyaW5nP289bi5fX2tbcl09eChudWxsLG8sbnVsbCxudWxsLG51bGwpOmcobyk/bz1uLl9fa1tyXT14KFMse2NoaWxkcmVuOm99LG51bGwsbnVsbCxudWxsKTp2b2lkIDA9PT1vLmNvbnN0cnVjdG9yJiZvLl9fYj4wP289bi5fX2tbcl09eChvLnR5cGUsby5wcm9wcyxvLmtleSxvLnJlZj9vLnJlZjpudWxsLG8uX192KTpuLl9fa1tyXT1vLGY9citoLG8uX189bixvLl9fYj1uLl9fYisxLGU9bnVsbCwtMSE9KGM9by5fX2k9TyhvLHUsZixhKSkmJihhLS0sKGU9dVtjXSkmJihlLl9fdXw9MikpLG51bGw9PWV8fG51bGw9PWUuX192PygtMT09YyYmKGk+cz9oLS06aTxzJiZoKyspLFwiZnVuY3Rpb25cIiE9dHlwZW9mIG8udHlwZSYmKG8uX191fD00KSk6YyE9ZiYmKGM9PWYtMT9oLS06Yz09ZisxP2grKzooYz5mP2gtLTpoKyssby5fX3V8PTQpKSk6bi5fX2tbcl09bnVsbDtpZihhKWZvcihyPTA7cjxzO3IrKyludWxsIT0oZT11W3JdKSYmMD09KDImZS5fX3UpJiYoZS5fX2U9PXQmJih0PSQoZSkpLEsoZSxlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gaihuLGwsdSx0KXt2YXIgaSxyO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4udHlwZSl7Zm9yKGk9bi5fX2sscj0wO2kmJnI8aS5sZW5ndGg7cisrKWlbcl0mJihpW3JdLl9fPW4sbD1qKGlbcl0sbCx1LHQpKTtyZXR1cm4gbH1uLl9fZSE9bCYmKHQmJihsJiZuLnR5cGUmJiFsLnBhcmVudE5vZGUmJihsPSQobikpLHUuaW5zZXJ0QmVmb3JlKG4uX19lLGx8fG51bGwpKSxsPW4uX19lKTtkb3tsPWwmJmwubmV4dFNpYmxpbmd9d2hpbGUobnVsbCE9bCYmOD09bC5ub2RlVHlwZSk7cmV0dXJuIGx9ZnVuY3Rpb24gRihuLGwpe3JldHVybiBsPWx8fFtdLG51bGw9PW58fFwiYm9vbGVhblwiPT10eXBlb2Ygbnx8KGcobik/bi5zb21lKGZ1bmN0aW9uKG4pe0YobixsKX0pOmwucHVzaChuKSksbH1mdW5jdGlvbiBPKG4sbCx1LHQpe3ZhciBpLHIsbyxlPW4ua2V5LGY9bi50eXBlLGM9bFt1XSxzPW51bGwhPWMmJjA9PSgyJmMuX191KTtpZihudWxsPT09YyYmbnVsbD09ZXx8cyYmZT09Yy5rZXkmJmY9PWMudHlwZSlyZXR1cm4gdTtpZih0PihzPzE6MCkpZm9yKGk9dS0xLHI9dSsxO2k+PTB8fHI8bC5sZW5ndGg7KWlmKG51bGwhPShjPWxbbz1pPj0wP2ktLTpyKytdKSYmMD09KDImYy5fX3UpJiZlPT1jLmtleSYmZj09Yy50eXBlKXJldHVybiBvO3JldHVybi0xfWZ1bmN0aW9uIHoobixsLHUpe1wiLVwiPT1sWzBdP24uc2V0UHJvcGVydHkobCxudWxsPT11P1wiXCI6dSk6bltsXT1udWxsPT11P1wiXCI6XCJudW1iZXJcIiE9dHlwZW9mIHV8fF8udGVzdChsKT91OnUrXCJweFwifWZ1bmN0aW9uIE4obixsLHUsdCxpKXt2YXIgcixvO246aWYoXCJzdHlsZVwiPT1sKWlmKFwic3RyaW5nXCI9PXR5cGVvZiB1KW4uc3R5bGUuY3NzVGV4dD11O2Vsc2V7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJihuLnN0eWxlLmNzc1RleHQ9dD1cIlwiKSx0KWZvcihsIGluIHQpdSYmbCBpbiB1fHx6KG4uc3R5bGUsbCxcIlwiKTtpZih1KWZvcihsIGluIHUpdCYmdVtsXT09dFtsXXx8eihuLnN0eWxlLGwsdVtsXSl9ZWxzZSBpZihcIm9cIj09bFswXSYmXCJuXCI9PWxbMV0pcj1sIT0obD1sLnJlcGxhY2UoYSxcIiQxXCIpKSxvPWwudG9Mb3dlckNhc2UoKSxsPW8gaW4gbnx8XCJvbkZvY3VzT3V0XCI9PWx8fFwib25Gb2N1c0luXCI9PWw/by5zbGljZSgyKTpsLnNsaWNlKDIpLG4ubHx8KG4ubD17fSksbi5sW2wrcl09dSx1P3Q/dVtzXT10W3NdOih1W3NdPWgsbi5hZGRFdmVudExpc3RlbmVyKGwscj92OnAscikpOm4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLHI/djpwLHIpO2Vsc2V7aWYoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPT1pKWw9bC5yZXBsYWNlKC94bGluayhIfDpoKS8sXCJoXCIpLnJlcGxhY2UoL3NOYW1lJC8sXCJzXCIpO2Vsc2UgaWYoXCJ3aWR0aFwiIT1sJiZcImhlaWdodFwiIT1sJiZcImhyZWZcIiE9bCYmXCJsaXN0XCIhPWwmJlwiZm9ybVwiIT1sJiZcInRhYkluZGV4XCIhPWwmJlwiZG93bmxvYWRcIiE9bCYmXCJyb3dTcGFuXCIhPWwmJlwiY29sU3BhblwiIT1sJiZcInJvbGVcIiE9bCYmXCJwb3BvdmVyXCIhPWwmJmwgaW4gbil0cnl7bltsXT1udWxsPT11P1wiXCI6dTticmVhayBufWNhdGNoKG4pe31cImZ1bmN0aW9uXCI9PXR5cGVvZiB1fHwobnVsbD09dXx8ITE9PT11JiZcIi1cIiE9bFs0XT9uLnJlbW92ZUF0dHJpYnV0ZShsKTpuLnNldEF0dHJpYnV0ZShsLFwicG9wb3ZlclwiPT1sJiYxPT11P1wiXCI6dSkpfX1mdW5jdGlvbiBWKG4pe3JldHVybiBmdW5jdGlvbih1KXtpZih0aGlzLmwpe3ZhciB0PXRoaXMubFt1LnR5cGUrbl07aWYobnVsbD09dVtjXSl1W2NdPWgrKztlbHNlIGlmKHVbY108dFtzXSlyZXR1cm47cmV0dXJuIHQobC5ldmVudD9sLmV2ZW50KHUpOnUpfX19ZnVuY3Rpb24gcShuLHUsdCxpLHIsbyxlLGYsYyxzKXt2YXIgYSxoLHAsdix5LGQsXyxrLHgsTSwkLEksUCxBLEgsVD11LnR5cGU7aWYodm9pZCAwIT09dS5jb25zdHJ1Y3RvcilyZXR1cm4gbnVsbDsxMjgmdC5fX3UmJihjPSEhKDMyJnQuX191KSxvPVtmPXUuX19lPXQuX19lXSksKGE9bC5fX2IpJiZhKHUpO246aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgVCl0cnl7aWYoaz11LnByb3BzLHg9VC5wcm90b3R5cGUmJlQucHJvdG90eXBlLnJlbmRlcixNPShhPVQuY29udGV4dFR5cGUpJiZpW2EuX19jXSwkPWE/TT9NLnByb3BzLnZhbHVlOmEuX186aSx0Ll9fYz9fPShoPXUuX19jPXQuX19jKS5fXz1oLl9fRTooeD91Ll9fYz1oPW5ldyBUKGssJCk6KHUuX19jPWg9bmV3IEMoaywkKSxoLmNvbnN0cnVjdG9yPVQsaC5yZW5kZXI9USksTSYmTS5zdWIoaCksaC5zdGF0ZXx8KGguc3RhdGU9e30pLGguX19uPWkscD1oLl9fZD0hMCxoLl9faD1bXSxoLl9zYj1bXSkseCYmbnVsbD09aC5fX3MmJihoLl9fcz1oLnN0YXRlKSx4JiZudWxsIT1ULmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmKGguX19zPT1oLnN0YXRlJiYoaC5fX3M9bSh7fSxoLl9fcykpLG0oaC5fX3MsVC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoayxoLl9fcykpKSx2PWgucHJvcHMseT1oLnN0YXRlLGguX192PXUscCl4JiZudWxsPT1ULmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmbnVsbCE9aC5jb21wb25lbnRXaWxsTW91bnQmJmguY29tcG9uZW50V2lsbE1vdW50KCkseCYmbnVsbCE9aC5jb21wb25lbnREaWRNb3VudCYmaC5fX2gucHVzaChoLmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKHgmJm51bGw9PVQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiZrIT09diYmbnVsbCE9aC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZoLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoaywkKSx1Ll9fdj09dC5fX3Z8fCFoLl9fZSYmbnVsbCE9aC5zaG91bGRDb21wb25lbnRVcGRhdGUmJiExPT09aC5zaG91bGRDb21wb25lbnRVcGRhdGUoayxoLl9fcywkKSl7dS5fX3YhPXQuX192JiYoaC5wcm9wcz1rLGguc3RhdGU9aC5fX3MsaC5fX2Q9ITEpLHUuX19lPXQuX19lLHUuX19rPXQuX19rLHUuX19rLnNvbWUoZnVuY3Rpb24obil7biYmKG4uX189dSl9KSx3LnB1c2guYXBwbHkoaC5fX2gsaC5fc2IpLGguX3NiPVtdLGguX19oLmxlbmd0aCYmZS5wdXNoKGgpO2JyZWFrIG59bnVsbCE9aC5jb21wb25lbnRXaWxsVXBkYXRlJiZoLmNvbXBvbmVudFdpbGxVcGRhdGUoayxoLl9fcywkKSx4JiZudWxsIT1oLmNvbXBvbmVudERpZFVwZGF0ZSYmaC5fX2gucHVzaChmdW5jdGlvbigpe2guY29tcG9uZW50RGlkVXBkYXRlKHYseSxkKX0pfWlmKGguY29udGV4dD0kLGgucHJvcHM9ayxoLl9fUD1uLGguX19lPSExLEk9bC5fX3IsUD0wLHgpaC5zdGF0ZT1oLl9fcyxoLl9fZD0hMSxJJiZJKHUpLGE9aC5yZW5kZXIoaC5wcm9wcyxoLnN0YXRlLGguY29udGV4dCksdy5wdXNoLmFwcGx5KGguX19oLGguX3NiKSxoLl9zYj1bXTtlbHNlIGRve2guX19kPSExLEkmJkkodSksYT1oLnJlbmRlcihoLnByb3BzLGguc3RhdGUsaC5jb250ZXh0KSxoLnN0YXRlPWguX19zfXdoaWxlKGguX19kJiYrK1A8MjUpO2guc3RhdGU9aC5fX3MsbnVsbCE9aC5nZXRDaGlsZENvbnRleHQmJihpPW0obSh7fSxpKSxoLmdldENoaWxkQ29udGV4dCgpKSkseCYmIXAmJm51bGwhPWguZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUmJihkPWguZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUodix5KSksQT1udWxsIT1hJiZhLnR5cGU9PT1TJiZudWxsPT1hLmtleT9FKGEucHJvcHMuY2hpbGRyZW4pOmEsZj1MKG4sZyhBKT9BOltBXSx1LHQsaSxyLG8sZSxmLGMscyksaC5iYXNlPXUuX19lLHUuX191Jj0tMTYxLGguX19oLmxlbmd0aCYmZS5wdXNoKGgpLF8mJihoLl9fRT1oLl9fPW51bGwpfWNhdGNoKG4pe2lmKHUuX192PW51bGwsY3x8bnVsbCE9bylpZihuLnRoZW4pe2Zvcih1Ll9fdXw9Yz8xNjA6MTI4O2YmJjg9PWYubm9kZVR5cGUmJmYubmV4dFNpYmxpbmc7KWY9Zi5uZXh0U2libGluZztvW28uaW5kZXhPZihmKV09bnVsbCx1Ll9fZT1mfWVsc2V7Zm9yKEg9by5sZW5ndGg7SC0tOyliKG9bSF0pO0IodSl9ZWxzZSB1Ll9fZT10Ll9fZSx1Ll9faz10Ll9fayxuLnRoZW58fEIodSk7bC5fX2Uobix1LHQpfWVsc2UgbnVsbD09byYmdS5fX3Y9PXQuX192Pyh1Ll9faz10Ll9fayx1Ll9fZT10Ll9fZSk6Zj11Ll9fZT1HKHQuX19lLHUsdCxpLHIsbyxlLGMscyk7cmV0dXJuKGE9bC5kaWZmZWQpJiZhKHUpLDEyOCZ1Ll9fdT92b2lkIDA6Zn1mdW5jdGlvbiBCKG4pe24mJihuLl9fYyYmKG4uX19jLl9fZT0hMCksbi5fX2smJm4uX19rLnNvbWUoQikpfWZ1bmN0aW9uIEQobix1LHQpe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKUoodFtpXSx0WysraV0sdFsrK2ldKTtsLl9fYyYmbC5fX2ModSxuKSxuLnNvbWUoZnVuY3Rpb24odSl7dHJ5e249dS5fX2gsdS5fX2g9W10sbi5zb21lKGZ1bmN0aW9uKG4pe24uY2FsbCh1KX0pfWNhdGNoKG4pe2wuX19lKG4sdS5fX3YpfX0pfWZ1bmN0aW9uIEUobil7cmV0dXJuXCJvYmplY3RcIiE9dHlwZW9mIG58fG51bGw9PW58fG4uX19iPjA/bjpnKG4pP24ubWFwKEUpOm0oe30sbil9ZnVuY3Rpb24gRyh1LHQsaSxyLG8sZSxmLGMscyl7dmFyIGEsaCxwLHYseSx3LF8sbT1pLnByb3BzfHxkLGs9dC5wcm9wcyx4PXQudHlwZTtpZihcInN2Z1wiPT14P289XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiOlwibWF0aFwiPT14P289XCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCI6b3x8KG89XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIpLG51bGwhPWUpZm9yKGE9MDthPGUubGVuZ3RoO2ErKylpZigoeT1lW2FdKSYmXCJzZXRBdHRyaWJ1dGVcImluIHk9PSEheCYmKHg/eS5sb2NhbE5hbWU9PXg6Mz09eS5ub2RlVHlwZSkpe3U9eSxlW2FdPW51bGw7YnJlYWt9aWYobnVsbD09dSl7aWYobnVsbD09eClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoayk7dT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobyx4LGsuaXMmJmspLGMmJihsLl9fbSYmbC5fX20odCxlKSxjPSExKSxlPW51bGx9aWYobnVsbD09eCltPT09a3x8YyYmdS5kYXRhPT1rfHwodS5kYXRhPWspO2Vsc2V7aWYoZT1lJiZuLmNhbGwodS5jaGlsZE5vZGVzKSwhYyYmbnVsbCE9ZSlmb3IobT17fSxhPTA7YTx1LmF0dHJpYnV0ZXMubGVuZ3RoO2ErKyltWyh5PXUuYXR0cmlidXRlc1thXSkubmFtZV09eS52YWx1ZTtmb3IoYSBpbiBtKXk9bVthXSxcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI9PWE/cD15OlwiY2hpbGRyZW5cIj09YXx8YSBpbiBrfHxcInZhbHVlXCI9PWEmJlwiZGVmYXVsdFZhbHVlXCJpbiBrfHxcImNoZWNrZWRcIj09YSYmXCJkZWZhdWx0Q2hlY2tlZFwiaW4ga3x8Tih1LGEsbnVsbCx5LG8pO2ZvcihhIGluIGspeT1rW2FdLFwiY2hpbGRyZW5cIj09YT92PXk6XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT1hP2g9eTpcInZhbHVlXCI9PWE/dz15OlwiY2hlY2tlZFwiPT1hP189eTpjJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB5fHxtW2FdPT09eXx8Tih1LGEseSxtW2FdLG8pO2lmKGgpY3x8cCYmKGguX19odG1sPT1wLl9faHRtbHx8aC5fX2h0bWw9PXUuaW5uZXJIVE1MKXx8KHUuaW5uZXJIVE1MPWguX19odG1sKSx0Ll9faz1bXTtlbHNlIGlmKHAmJih1LmlubmVySFRNTD1cIlwiKSxMKFwidGVtcGxhdGVcIj09dC50eXBlP3UuY29udGVudDp1LGcodik/djpbdl0sdCxpLHIsXCJmb3JlaWduT2JqZWN0XCI9PXg/XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI6byxlLGYsZT9lWzBdOmkuX19rJiYkKGksMCksYyxzKSxudWxsIT1lKWZvcihhPWUubGVuZ3RoO2EtLTspYihlW2FdKTtjfHwoYT1cInZhbHVlXCIsXCJwcm9ncmVzc1wiPT14JiZudWxsPT13P3UucmVtb3ZlQXR0cmlidXRlKFwidmFsdWVcIik6bnVsbCE9dyYmKHchPT11W2FdfHxcInByb2dyZXNzXCI9PXgmJiF3fHxcIm9wdGlvblwiPT14JiZ3IT1tW2FdKSYmTih1LGEsdyxtW2FdLG8pLGE9XCJjaGVja2VkXCIsbnVsbCE9XyYmXyE9dVthXSYmTih1LGEsXyxtW2FdLG8pKX1yZXR1cm4gdX1mdW5jdGlvbiBKKG4sdSx0KXt0cnl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbil7dmFyIGk9XCJmdW5jdGlvblwiPT10eXBlb2Ygbi5fX3U7aSYmbi5fX3UoKSxpJiZudWxsPT11fHwobi5fX3U9bih1KSl9ZWxzZSBuLmN1cnJlbnQ9dX1jYXRjaChuKXtsLl9fZShuLHQpfX1mdW5jdGlvbiBLKG4sdSx0KXt2YXIgaSxyO2lmKGwudW5tb3VudCYmbC51bm1vdW50KG4pLChpPW4ucmVmKSYmKGkuY3VycmVudCYmaS5jdXJyZW50IT1uLl9fZXx8SihpLG51bGwsdSkpLG51bGwhPShpPW4uX19jKSl7aWYoaS5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7aS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKG4pe2wuX19lKG4sdSl9aS5iYXNlPWkuX19QPW51bGx9aWYoaT1uLl9faylmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl0mJksoaVtyXSx1LHR8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIG4udHlwZSk7dHx8YihuLl9fZSksbi5fX2M9bi5fXz1uLl9fZT12b2lkIDB9ZnVuY3Rpb24gUShuLGwsdSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3Iobix1KX1mdW5jdGlvbiBSKHUsdCxpKXt2YXIgcixvLGUsZjt0PT1kb2N1bWVudCYmKHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxsLl9fJiZsLl9fKHUsdCksbz0ocj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpKT9udWxsOmkmJmkuX19rfHx0Ll9fayxlPVtdLGY9W10scSh0LHU9KCFyJiZpfHx0KS5fX2s9ayhTLG51bGwsW3VdKSxvfHxkLGQsdC5uYW1lc3BhY2VVUkksIXImJmk/W2ldOm8/bnVsbDp0LmZpcnN0Q2hpbGQ/bi5jYWxsKHQuY2hpbGROb2Rlcyk6bnVsbCxlLCFyJiZpP2k6bz9vLl9fZTp0LmZpcnN0Q2hpbGQscixmKSxEKGUsdSxmKX1mdW5jdGlvbiBVKG4sbCl7UihuLGwsVSl9ZnVuY3Rpb24gVyhsLHUsdCl7dmFyIGkscixvLGUsZj1tKHt9LGwucHJvcHMpO2ZvcihvIGluIGwudHlwZSYmbC50eXBlLmRlZmF1bHRQcm9wcyYmKGU9bC50eXBlLmRlZmF1bHRQcm9wcyksdSlcImtleVwiPT1vP2k9dVtvXTpcInJlZlwiPT1vP3I9dVtvXTpmW29dPXZvaWQgMD09PXVbb10mJm51bGwhPWU/ZVtvXTp1W29dO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjImJihmLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9uLmNhbGwoYXJndW1lbnRzLDIpOnQpLHgobC50eXBlLGYsaXx8bC5rZXkscnx8bC5yZWYsbnVsbCl9ZnVuY3Rpb24gWChuKXtmdW5jdGlvbiBsKG4pe3ZhciB1LHQ7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0fHwodT1uZXcgU2V0LCh0PXt9KVtsLl9fY109dGhpcyx0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiB0fSx0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dT1udWxsfSx0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLnByb3BzLnZhbHVlIT1uLnZhbHVlJiZ1LmZvckVhY2goZnVuY3Rpb24obil7bi5fX2U9ITAsQShuKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihuKXt1LmFkZChuKTt2YXIgbD1uLmNvbXBvbmVudFdpbGxVbm1vdW50O24uY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt1JiZ1LmRlbGV0ZShuKSxsJiZsLmNhbGwobil9fSksbi5jaGlsZHJlbn1yZXR1cm4gbC5fX2M9XCJfX2NDXCIreSsrLGwuX189bixsLlByb3ZpZGVyPWwuX19sPShsLkNvbnN1bWVyPWZ1bmN0aW9uKG4sbCl7cmV0dXJuIG4uY2hpbGRyZW4obCl9KS5jb250ZXh0VHlwZT1sLGx9bj13LnNsaWNlLGw9e19fZTpmdW5jdGlvbihuLGwsdSx0KXtmb3IodmFyIGkscixvO2w9bC5fXzspaWYoKGk9bC5fX2MpJiYhaS5fXyl0cnl7aWYoKHI9aS5jb25zdHJ1Y3RvcikmJm51bGwhPXIuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yJiYoaS5zZXRTdGF0ZShyLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihuKSksbz1pLl9fZCksbnVsbCE9aS5jb21wb25lbnREaWRDYXRjaCYmKGkuY29tcG9uZW50RGlkQ2F0Y2gobix0fHx7fSksbz1pLl9fZCksbylyZXR1cm4gaS5fX0U9aX1jYXRjaChsKXtuPWx9dGhyb3cgbn19LHU9MCx0PWZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZ2b2lkIDA9PT1uLmNvbnN0cnVjdG9yfSxDLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihuLGwpe3ZhciB1O3U9bnVsbCE9dGhpcy5fX3MmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPW0oe30sdGhpcy5zdGF0ZSksXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKG49bihtKHt9LHUpLHRoaXMucHJvcHMpKSxuJiZtKHUsbiksbnVsbCE9biYmdGhpcy5fX3YmJihsJiZ0aGlzLl9zYi5wdXNoKGwpLEEodGhpcykpfSxDLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLG4mJnRoaXMuX19oLnB1c2gobiksQSh0aGlzKSl9LEMucHJvdG90eXBlLnJlbmRlcj1TLGk9W10sbz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm9taXNlP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxlPWZ1bmN0aW9uKG4sbCl7cmV0dXJuIG4uX192Ll9fYi1sLl9fdi5fX2J9LEguX19yPTAsZj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLGM9XCJfX2RcIitmLHM9XCJfX2FcIitmLGE9LyhQb2ludGVyQ2FwdHVyZSkkfENhcHR1cmUkL2ksaD0wLHA9VighMSksdj1WKCEwKSx5PTA7ZXhwb3J0e0MgYXMgQ29tcG9uZW50LFMgYXMgRnJhZ21lbnQsVyBhcyBjbG9uZUVsZW1lbnQsWCBhcyBjcmVhdGVDb250ZXh0LGsgYXMgY3JlYXRlRWxlbWVudCxNIGFzIGNyZWF0ZVJlZixrIGFzIGgsVSBhcyBoeWRyYXRlLHQgYXMgaXNWYWxpZEVsZW1lbnQsbCBhcyBvcHRpb25zLFIgYXMgcmVuZGVyLEYgYXMgdG9DaGlsZEFycmF5fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZWFjdC5tb2R1bGUuanMubWFwXG4iLAogICAgImltcG9ydHtvcHRpb25zIGFzIG59ZnJvbVwicHJlYWN0XCI7dmFyIHQscix1LGksbz0wLGY9W10sYz1uLGU9Yy5fX2IsYT1jLl9fcix2PWMuZGlmZmVkLGw9Yy5fX2MsbT1jLnVubW91bnQscz1jLl9fO2Z1bmN0aW9uIHAobix0KXtjLl9faCYmYy5fX2gocixuLG98fHQpLG89MDt2YXIgdT1yLl9fSHx8KHIuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gbj49dS5fXy5sZW5ndGgmJnUuX18ucHVzaCh7fSksdS5fX1tuXX1mdW5jdGlvbiBkKG4pe3JldHVybiBvPTEsaChELG4pfWZ1bmN0aW9uIGgobix1LGkpe3ZhciBvPXAodCsrLDIpO2lmKG8udD1uLCFvLl9fYyYmKG8uX189W2k/aSh1KTpEKHZvaWQgMCx1KSxmdW5jdGlvbihuKXt2YXIgdD1vLl9fTj9vLl9fTlswXTpvLl9fWzBdLHI9by50KHQsbik7dCE9PXImJihvLl9fTj1bcixvLl9fWzFdXSxvLl9fYy5zZXRTdGF0ZSh7fSkpfV0sby5fX2M9ciwhci5fX2YpKXt2YXIgZj1mdW5jdGlvbihuLHQscil7aWYoIW8uX19jLl9fSClyZXR1cm4hMDt2YXIgdT1vLl9fYy5fX0guX18uZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLl9fY30pO2lmKHUuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIW4uX19OfSkpcmV0dXJuIWN8fGMuY2FsbCh0aGlzLG4sdCxyKTt2YXIgaT1vLl9fYy5wcm9wcyE9PW47cmV0dXJuIHUuc29tZShmdW5jdGlvbihuKXtpZihuLl9fTil7dmFyIHQ9bi5fX1swXTtuLl9fPW4uX19OLG4uX19OPXZvaWQgMCx0IT09bi5fX1swXSYmKGk9ITApfX0pLGMmJmMuY2FsbCh0aGlzLG4sdCxyKXx8aX07ci5fX2Y9ITA7dmFyIGM9ci5zaG91bGRDb21wb25lbnRVcGRhdGUsZT1yLmNvbXBvbmVudFdpbGxVcGRhdGU7ci5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKG4sdCxyKXtpZih0aGlzLl9fZSl7dmFyIHU9YztjPXZvaWQgMCxmKG4sdCxyKSxjPXV9ZSYmZS5jYWxsKHRoaXMsbix0LHIpfSxyLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mfXJldHVybiBvLl9fTnx8by5fX31mdW5jdGlvbiB5KG4sdSl7dmFyIGk9cCh0KyssMyk7IWMuX19zJiZDKGkuX19ILHUpJiYoaS5fXz1uLGkudT11LHIuX19ILl9faC5wdXNoKGkpKX1mdW5jdGlvbiBfKG4sdSl7dmFyIGk9cCh0KyssNCk7IWMuX19zJiZDKGkuX19ILHUpJiYoaS5fXz1uLGkudT11LHIuX19oLnB1c2goaSkpfWZ1bmN0aW9uIEEobil7cmV0dXJuIG89NSxUKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bn19LFtdKX1mdW5jdGlvbiBGKG4sdCxyKXtvPTYsXyhmdW5jdGlvbigpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe3ZhciByPW4odCgpKTtyZXR1cm4gZnVuY3Rpb24oKXtuKG51bGwpLHImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHImJnIoKX19aWYobilyZXR1cm4gbi5jdXJyZW50PXQoKSxmdW5jdGlvbigpe3JldHVybiBuLmN1cnJlbnQ9bnVsbH19LG51bGw9PXI/cjpyLmNvbmNhdChuKSl9ZnVuY3Rpb24gVChuLHIpe3ZhciB1PXAodCsrLDcpO3JldHVybiBDKHUuX19ILHIpJiYodS5fXz1uKCksdS5fX0g9cix1Ll9faD1uKSx1Ll9ffWZ1bmN0aW9uIHEobix0KXtyZXR1cm4gbz04LFQoZnVuY3Rpb24oKXtyZXR1cm4gbn0sdCl9ZnVuY3Rpb24geChuKXt2YXIgdT1yLmNvbnRleHRbbi5fX2NdLGk9cCh0KyssOSk7cmV0dXJuIGkuYz1uLHU/KG51bGw9PWkuX18mJihpLl9fPSEwLHUuc3ViKHIpKSx1LnByb3BzLnZhbHVlKTpuLl9ffWZ1bmN0aW9uIFAobix0KXtjLnVzZURlYnVnVmFsdWUmJmMudXNlRGVidWdWYWx1ZSh0P3Qobik6bil9ZnVuY3Rpb24gYihuKXt2YXIgdT1wKHQrKywxMCksaT1kKCk7cmV0dXJuIHUuX189bixyLmNvbXBvbmVudERpZENhdGNofHwoci5jb21wb25lbnREaWRDYXRjaD1mdW5jdGlvbihuLHQpe3UuX18mJnUuX18obix0KSxpWzFdKG4pfSksW2lbMF0sZnVuY3Rpb24oKXtpWzFdKHZvaWQgMCl9XX1mdW5jdGlvbiBnKCl7dmFyIG49cCh0KyssMTEpO2lmKCFuLl9fKXtmb3IodmFyIHU9ci5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXzt2YXIgaT11Ll9fbXx8KHUuX19tPVswLDBdKTtuLl9fPVwiUFwiK2lbMF0rXCItXCIraVsxXSsrfXJldHVybiBuLl9ffWZ1bmN0aW9uIGooKXtmb3IodmFyIG47bj1mLnNoaWZ0KCk7KXt2YXIgdD1uLl9fSDtpZihuLl9fUCYmdCl0cnl7dC5fX2guc29tZSh6KSx0Ll9faC5zb21lKEIpLHQuX19oPVtdfWNhdGNoKHIpe3QuX19oPVtdLGMuX19lKHIsbi5fX3YpfX19Yy5fX2I9ZnVuY3Rpb24obil7cj1udWxsLGUmJmUobil9LGMuX189ZnVuY3Rpb24obix0KXtuJiZ0Ll9fayYmdC5fX2suX19tJiYobi5fX209dC5fX2suX19tKSxzJiZzKG4sdCl9LGMuX19yPWZ1bmN0aW9uKG4pe2EmJmEobiksdD0wO3ZhciBpPShyPW4uX19jKS5fX0g7aSYmKHU9PT1yPyhpLl9faD1bXSxyLl9faD1bXSxpLl9fLnNvbWUoZnVuY3Rpb24obil7bi5fX04mJihuLl9fPW4uX19OKSxuLnU9bi5fX049dm9pZCAwfSkpOihpLl9faC5zb21lKHopLGkuX19oLnNvbWUoQiksaS5fX2g9W10sdD0wKSksdT1yfSxjLmRpZmZlZD1mdW5jdGlvbihuKXt2JiZ2KG4pO3ZhciB0PW4uX19jO3QmJnQuX19IJiYodC5fX0guX19oLmxlbmd0aCYmKDEhPT1mLnB1c2godCkmJmk9PT1jLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChpPWMucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8dykoaikpLHQuX19ILl9fLnNvbWUoZnVuY3Rpb24obil7bi51JiYobi5fX0g9bi51KSxuLnU9dm9pZCAwfSkpLHU9cj1udWxsfSxjLl9fYz1mdW5jdGlvbihuLHQpe3Quc29tZShmdW5jdGlvbihuKXt0cnl7bi5fX2guc29tZSh6KSxuLl9faD1uLl9faC5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIW4uX198fEIobil9KX1jYXRjaChyKXt0LnNvbWUoZnVuY3Rpb24obil7bi5fX2gmJihuLl9faD1bXSl9KSx0PVtdLGMuX19lKHIsbi5fX3YpfX0pLGwmJmwobix0KX0sYy51bm1vdW50PWZ1bmN0aW9uKG4pe20mJm0obik7dmFyIHQscj1uLl9fYztyJiZyLl9fSCYmKHIuX19ILl9fLnNvbWUoZnVuY3Rpb24obil7dHJ5e3oobil9Y2F0Y2gobil7dD1ufX0pLHIuX19IPXZvaWQgMCx0JiZjLl9fZSh0LHIuX192KSl9O3ZhciBrPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTtmdW5jdGlvbiB3KG4pe3ZhciB0LHI9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodSksayYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodCksc2V0VGltZW91dChuKX0sdT1zZXRUaW1lb3V0KHIsMzUpO2smJih0PXJlcXVlc3RBbmltYXRpb25GcmFtZShyKSl9ZnVuY3Rpb24geihuKXt2YXIgdD1yLHU9bi5fX2M7XCJmdW5jdGlvblwiPT10eXBlb2YgdSYmKG4uX19jPXZvaWQgMCx1KCkpLHI9dH1mdW5jdGlvbiBCKG4pe3ZhciB0PXI7bi5fX2M9bi5fXygpLHI9dH1mdW5jdGlvbiBDKG4sdCl7cmV0dXJuIW58fG4ubGVuZ3RoIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0LHIpe3JldHVybiB0IT09bltyXX0pfWZ1bmN0aW9uIEQobix0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Qobik6dH1leHBvcnR7cSBhcyB1c2VDYWxsYmFjayx4IGFzIHVzZUNvbnRleHQsUCBhcyB1c2VEZWJ1Z1ZhbHVlLHkgYXMgdXNlRWZmZWN0LGIgYXMgdXNlRXJyb3JCb3VuZGFyeSxnIGFzIHVzZUlkLEYgYXMgdXNlSW1wZXJhdGl2ZUhhbmRsZSxfIGFzIHVzZUxheW91dEVmZmVjdCxUIGFzIHVzZU1lbW8saCBhcyB1c2VSZWR1Y2VyLEEgYXMgdXNlUmVmLGQgYXMgdXNlU3RhdGV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3MubW9kdWxlLmpzLm1hcFxuIiwKICAgICJ2YXIgaT1TeW1ib2wuZm9yKFwicHJlYWN0LXNpZ25hbHNcIik7ZnVuY3Rpb24gdCgpe2lmKCEocz4xKSl7dmFyIGksdD0hMTshZnVuY3Rpb24oKXt2YXIgaT1jO2M9dm9pZCAwO3doaWxlKHZvaWQgMCE9PWkpe2lmKGkuUy52PT09aS52KWkuUy5pPWkuaTtpPWkub319KCk7d2hpbGUodm9pZCAwIT09aCl7dmFyIG49aDtoPXZvaWQgMDt2Kys7d2hpbGUodm9pZCAwIT09bil7dmFyIHI9bi51O24udT12b2lkIDA7bi5mJj0tMztpZighKDgmbi5mKSYmdyhuKSl0cnl7bi5jKCl9Y2F0Y2gobil7aWYoIXQpe2k9bjt0PSEwfX1uPXJ9fXY9MDtzLS07aWYodCl0aHJvdyBpfWVsc2Ugcy0tfWZ1bmN0aW9uIG4oaSl7aWYocz4wKXJldHVybiBpKCk7ZT0rK3U7cysrO3RyeXtyZXR1cm4gaSgpfWZpbmFsbHl7dCgpfX12YXIgcj12b2lkIDA7ZnVuY3Rpb24gbyhpKXt2YXIgdD1yO3I9dm9pZCAwO3RyeXtyZXR1cm4gaSgpfWZpbmFsbHl7cj10fX12YXIgZixoPXZvaWQgMCxzPTAsdj0wLHU9MCxlPTAsYz12b2lkIDAsZD0wO2Z1bmN0aW9uIGEoaSl7aWYodm9pZCAwIT09cil7dmFyIHQ9aS5uO2lmKHZvaWQgMD09PXR8fHQudCE9PXIpe3Q9e2k6MCxTOmkscDpyLnMsbjp2b2lkIDAsdDpyLGU6dm9pZCAwLHg6dm9pZCAwLHI6dH07aWYodm9pZCAwIT09ci5zKXIucy5uPXQ7ci5zPXQ7aS5uPXQ7aWYoMzImci5mKWkuUyh0KTtyZXR1cm4gdH1lbHNlIGlmKC0xPT09dC5pKXt0Lmk9MDtpZih2b2lkIDAhPT10Lm4pe3Qubi5wPXQucDtpZih2b2lkIDAhPT10LnApdC5wLm49dC5uO3QucD1yLnM7dC5uPXZvaWQgMDtyLnMubj10O3Iucz10fXJldHVybiB0fX19ZnVuY3Rpb24gbChpLHQpe3RoaXMudj1pO3RoaXMuaT0wO3RoaXMubj12b2lkIDA7dGhpcy50PXZvaWQgMDt0aGlzLmw9MDt0aGlzLlc9bnVsbD09dD92b2lkIDA6dC53YXRjaGVkO3RoaXMuWj1udWxsPT10P3ZvaWQgMDp0LnVud2F0Y2hlZDt0aGlzLm5hbWU9bnVsbD09dD92b2lkIDA6dC5uYW1lfWwucHJvdG90eXBlLmJyYW5kPWk7bC5wcm90b3R5cGUuaD1mdW5jdGlvbigpe3JldHVybiEwfTtsLnByb3RvdHlwZS5TPWZ1bmN0aW9uKGkpe3ZhciB0PXRoaXMsbj10aGlzLnQ7aWYobiE9PWkmJnZvaWQgMD09PWkuZSl7aS54PW47dGhpcy50PWk7aWYodm9pZCAwIT09biluLmU9aTtlbHNlIG8oZnVuY3Rpb24oKXt2YXIgaTtudWxsPT0oaT10LlcpfHxpLmNhbGwodCl9KX19O2wucHJvdG90eXBlLlU9ZnVuY3Rpb24oaSl7dmFyIHQ9dGhpcztpZih2b2lkIDAhPT10aGlzLnQpe3ZhciBuPWkuZSxyPWkueDtpZih2b2lkIDAhPT1uKXtuLng9cjtpLmU9dm9pZCAwfWlmKHZvaWQgMCE9PXIpe3IuZT1uO2kueD12b2lkIDB9aWYoaT09PXRoaXMudCl7dGhpcy50PXI7aWYodm9pZCAwPT09cilvKGZ1bmN0aW9uKCl7dmFyIGk7bnVsbD09KGk9dC5aKXx8aS5jYWxsKHQpfSl9fX07bC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGkpe3ZhciB0PXRoaXM7cmV0dXJuIGooZnVuY3Rpb24oKXt2YXIgbj10LnZhbHVlLG89cjtyPXZvaWQgMDt0cnl7aShuKX1maW5hbGx5e3I9b319LHtuYW1lOlwic3ViXCJ9KX07bC5wcm90b3R5cGUudmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfTtsLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlK1wiXCJ9O2wucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfTtsLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcztyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiBpLnZhbHVlfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLnByb3RvdHlwZSxcInZhbHVlXCIse2dldDpmdW5jdGlvbigpe3ZhciBpPWEodGhpcyk7aWYodm9pZCAwIT09aSlpLmk9dGhpcy5pO3JldHVybiB0aGlzLnZ9LHNldDpmdW5jdGlvbihpKXtpZihpIT09dGhpcy52KXtpZih2PjEwMCl0aHJvdyBuZXcgRXJyb3IoXCJDeWNsZSBkZXRlY3RlZFwiKTshZnVuY3Rpb24oaSl7aWYoMCE9PXMmJjA9PT12KWlmKGkubCE9PWUpe2kubD1lO2M9e1M6aSx2OmkudixpOmkuaSxvOmN9fX0odGhpcyk7dGhpcy52PWk7dGhpcy5pKys7ZCsrO3MrKzt0cnl7Zm9yKHZhciBuPXRoaXMudDt2b2lkIDAhPT1uO249bi54KW4udC5OKCl9ZmluYWxseXt0KCl9fX19KTtmdW5jdGlvbiB5KGksdCl7cmV0dXJuIG5ldyBsKGksdCl9ZnVuY3Rpb24gdyhpKXtmb3IodmFyIHQ9aS5zO3ZvaWQgMCE9PXQ7dD10Lm4paWYodC5TLmkhPT10Lml8fCF0LlMuaCgpfHx0LlMuaSE9PXQuaSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBfKGkpe2Zvcih2YXIgdD1pLnM7dm9pZCAwIT09dDt0PXQubil7dmFyIG49dC5TLm47aWYodm9pZCAwIT09bil0LnI9bjt0LlMubj10O3QuaT0tMTtpZih2b2lkIDA9PT10Lm4pe2kucz10O2JyZWFrfX19ZnVuY3Rpb24gYihpKXt2YXIgdD1pLnMsbj12b2lkIDA7d2hpbGUodm9pZCAwIT09dCl7dmFyIHI9dC5wO2lmKC0xPT09dC5pKXt0LlMuVSh0KTtpZih2b2lkIDAhPT1yKXIubj10Lm47aWYodm9pZCAwIT09dC5uKXQubi5wPXJ9ZWxzZSBuPXQ7dC5TLm49dC5yO2lmKHZvaWQgMCE9PXQucil0LnI9dm9pZCAwO3Q9cn1pLnM9bn1mdW5jdGlvbiBwKGksdCl7bC5jYWxsKHRoaXMsdm9pZCAwKTt0aGlzLng9aTt0aGlzLnM9dm9pZCAwO3RoaXMuZz1kLTE7dGhpcy5mPTQ7dGhpcy5XPW51bGw9PXQ/dm9pZCAwOnQud2F0Y2hlZDt0aGlzLlo9bnVsbD09dD92b2lkIDA6dC51bndhdGNoZWQ7dGhpcy5uYW1lPW51bGw9PXQ/dm9pZCAwOnQubmFtZX1wLnByb3RvdHlwZT1uZXcgbDtwLnByb3RvdHlwZS5oPWZ1bmN0aW9uKCl7dGhpcy5mJj0tMztpZigxJnRoaXMuZilyZXR1cm4hMTtpZigzMj09KDM2JnRoaXMuZikpcmV0dXJuITA7dGhpcy5mJj0tNTtpZih0aGlzLmc9PT1kKXJldHVybiEwO3RoaXMuZz1kO3RoaXMuZnw9MTtpZih0aGlzLmk+MCYmIXcodGhpcykpe3RoaXMuZiY9LTI7cmV0dXJuITB9dmFyIGk9cjt0cnl7Xyh0aGlzKTtyPXRoaXM7dmFyIHQ9dGhpcy54KCk7aWYoMTYmdGhpcy5mfHx0aGlzLnYhPT10fHwwPT09dGhpcy5pKXt0aGlzLnY9dDt0aGlzLmYmPS0xNzt0aGlzLmkrK319Y2F0Y2goaSl7dGhpcy52PWk7dGhpcy5mfD0xNjt0aGlzLmkrK31yPWk7Yih0aGlzKTt0aGlzLmYmPS0yO3JldHVybiEwfTtwLnByb3RvdHlwZS5TPWZ1bmN0aW9uKGkpe2lmKHZvaWQgMD09PXRoaXMudCl7dGhpcy5mfD0zNjtmb3IodmFyIHQ9dGhpcy5zO3ZvaWQgMCE9PXQ7dD10Lm4pdC5TLlModCl9bC5wcm90b3R5cGUuUy5jYWxsKHRoaXMsaSl9O3AucHJvdG90eXBlLlU9ZnVuY3Rpb24oaSl7aWYodm9pZCAwIT09dGhpcy50KXtsLnByb3RvdHlwZS5VLmNhbGwodGhpcyxpKTtpZih2b2lkIDA9PT10aGlzLnQpe3RoaXMuZiY9LTMzO2Zvcih2YXIgdD10aGlzLnM7dm9pZCAwIT09dDt0PXQubil0LlMuVSh0KX19fTtwLnByb3RvdHlwZS5OPWZ1bmN0aW9uKCl7aWYoISgyJnRoaXMuZikpe3RoaXMuZnw9Njtmb3IodmFyIGk9dGhpcy50O3ZvaWQgMCE9PWk7aT1pLngpaS50Lk4oKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSxcInZhbHVlXCIse2dldDpmdW5jdGlvbigpe2lmKDEmdGhpcy5mKXRocm93IG5ldyBFcnJvcihcIkN5Y2xlIGRldGVjdGVkXCIpO3ZhciBpPWEodGhpcyk7dGhpcy5oKCk7aWYodm9pZCAwIT09aSlpLmk9dGhpcy5pO2lmKDE2JnRoaXMuZil0aHJvdyB0aGlzLnY7cmV0dXJuIHRoaXMudn19KTtmdW5jdGlvbiBnKGksdCl7cmV0dXJuIG5ldyBwKGksdCl9ZnVuY3Rpb24gUyhpKXt2YXIgbj1pLm07aS5tPXZvaWQgMDtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXtzKys7dmFyIG89cjtyPXZvaWQgMDt0cnl7bigpfWNhdGNoKHQpe2kuZiY9LTI7aS5mfD04O20oaSk7dGhyb3cgdH1maW5hbGx5e3I9bzt0KCl9fX1mdW5jdGlvbiBtKGkpe2Zvcih2YXIgdD1pLnM7dm9pZCAwIT09dDt0PXQubil0LlMuVSh0KTtpLng9dm9pZCAwO2kucz12b2lkIDA7UyhpKX1mdW5jdGlvbiB4KGkpe2lmKHIhPT10aGlzKXRocm93IG5ldyBFcnJvcihcIk91dC1vZi1vcmRlciBlZmZlY3RcIik7Yih0aGlzKTtyPWk7dGhpcy5mJj0tMjtpZig4JnRoaXMuZiltKHRoaXMpO3QoKX1mdW5jdGlvbiBFKGksdCl7dGhpcy54PWk7dGhpcy5tPXZvaWQgMDt0aGlzLnM9dm9pZCAwO3RoaXMudT12b2lkIDA7dGhpcy5mPTMyO3RoaXMubmFtZT1udWxsPT10P3ZvaWQgMDp0Lm5hbWU7aWYoZilmLnB1c2godGhpcyl9RS5wcm90b3R5cGUuYz1mdW5jdGlvbigpe3ZhciBpPXRoaXMuUygpO3RyeXtpZig4JnRoaXMuZilyZXR1cm47aWYodm9pZCAwPT09dGhpcy54KXJldHVybjt2YXIgdD10aGlzLngoKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXRoaXMubT10fWZpbmFsbHl7aSgpfX07RS5wcm90b3R5cGUuUz1mdW5jdGlvbigpe2lmKDEmdGhpcy5mKXRocm93IG5ldyBFcnJvcihcIkN5Y2xlIGRldGVjdGVkXCIpO3RoaXMuZnw9MTt0aGlzLmYmPS05O1ModGhpcyk7Xyh0aGlzKTtzKys7dmFyIGk9cjtyPXRoaXM7cmV0dXJuIHguYmluZCh0aGlzLGkpfTtFLnByb3RvdHlwZS5OPWZ1bmN0aW9uKCl7aWYoISgyJnRoaXMuZikpe3RoaXMuZnw9Mjt0aGlzLnU9aDtoPXRoaXN9fTtFLnByb3RvdHlwZS5kPWZ1bmN0aW9uKCl7dGhpcy5mfD04O2lmKCEoMSZ0aGlzLmYpKW0odGhpcyl9O0UucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmQoKX07ZnVuY3Rpb24gaihpLHQpe3ZhciBuPW5ldyBFKGksdCk7dHJ5e24uYygpfWNhdGNoKGkpe24uZCgpO3Rocm93IGl9dmFyIHI9bi5kLmJpbmQobik7cltTeW1ib2wuZGlzcG9zZV09cjtyZXR1cm4gcn1mdW5jdGlvbiBDKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cyxyPXRoaXM7cmV0dXJuIG4oZnVuY3Rpb24oKXtyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHIsW10uc2xpY2UuY2FsbCh0KSl9KX0pfX1mdW5jdGlvbiBPKCl7dmFyIGk9ZjtmPVtdO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWY7aWYoZiYmaSlpPWkuY29uY2F0KGYpO2Y9aTtyZXR1cm4gdH19dmFyIGs9ZnVuY3Rpb24oaSl7Zm9yKHZhciB0IGluIGkpe3ZhciBuPWlbdF07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbilpW3RdPUMobik7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgbiYmbnVsbCE9PW4mJiEoXCJicmFuZFwiaW4gbikpayhuKX19O2Z1bmN0aW9uIFQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQsbixyPU8oKTt0cnl7bj1pLmFwcGx5KHZvaWQgMCxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfWNhdGNoKGkpe2Y9dm9pZCAwO3Rocm93IGl9ZmluYWxseXt0PXIoKX1rKG4pO25bU3ltYm9sLmRpc3Bvc2VdPUMoZnVuY3Rpb24oKXtpZih0KWZvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXRbaV0uZGlzcG9zZSgpO3Q9dm9pZCAwfSk7cmV0dXJuIG59fWV4cG9ydHtwIGFzIENvbXB1dGVkLEUgYXMgRWZmZWN0LGwgYXMgU2lnbmFsLEMgYXMgYWN0aW9uLG4gYXMgYmF0Y2gsZyBhcyBjb21wdXRlZCxUIGFzIGNyZWF0ZU1vZGVsLGogYXMgZWZmZWN0LHkgYXMgc2lnbmFsLG8gYXMgdW50cmFja2VkfTsvLyMgc291cmNlTWFwcGluZ1VSTD1zaWduYWxzLWNvcmUubW9kdWxlLmpzLm1hcFxuIiwKICAgICJpbXBvcnR7Q29tcG9uZW50IGFzIGksb3B0aW9ucyBhcyBuLGlzVmFsaWRFbGVtZW50IGFzIHIsRnJhZ21lbnQgYXMgdH1mcm9tXCJwcmVhY3RcIjtpbXBvcnR7dXNlTWVtbyBhcyBvLHVzZVJlZiBhcyBlLHVzZUVmZmVjdCBhcyBmfWZyb21cInByZWFjdC9ob29rc1wiO2ltcG9ydHtlZmZlY3QgYXMgdSxTaWduYWwgYXMgYSxjb21wdXRlZCBhcyBjLHNpZ25hbCBhcyB2LGJhdGNoIGFzIHN9ZnJvbVwiQHByZWFjdC9zaWduYWxzLWNvcmVcIjtleHBvcnR7U2lnbmFsLGFjdGlvbixiYXRjaCxjb21wdXRlZCxjcmVhdGVNb2RlbCxlZmZlY3Qsc2lnbmFsLHVudHJhY2tlZH1mcm9tXCJAcHJlYWN0L3NpZ25hbHMtY29yZVwiO3ZhciBsLGQsaCxwPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJiEhd2luZG93Ll9fUFJFQUNUX1NJR05BTFNfREVWVE9PTFNfXyxtPVtdLF89W107dShmdW5jdGlvbigpe2w9dGhpcy5OfSkoKTtmdW5jdGlvbiBnKGkscil7bltpXT1yLmJpbmQobnVsbCxuW2ldfHxmdW5jdGlvbigpe30pfWZ1bmN0aW9uIGIoaSl7aWYoaCl7dmFyIG49aDtoPXZvaWQgMDtuKCl9aD1pJiZpLlMoKX1mdW5jdGlvbiB5KGkpe3ZhciBuPXRoaXMsdD1pLmRhdGEsZT11c2VTaWduYWwodCk7ZS52YWx1ZT10O3ZhciBmPW8oZnVuY3Rpb24oKXt2YXIgaT1uLHQ9bi5fX3Y7d2hpbGUodD10Ll9fKWlmKHQuX19jKXt0Ll9fYy5fXyRmfD00O2JyZWFrfXZhciBvPWMoZnVuY3Rpb24oKXt2YXIgaT1lLnZhbHVlLnZhbHVlO3JldHVybiAwPT09aT8wOiEwPT09aT9cIlwiOml8fFwiXCJ9KSxmPWMoZnVuY3Rpb24oKXtyZXR1cm4hQXJyYXkuaXNBcnJheShvLnZhbHVlKSYmIXIoby52YWx1ZSl9KSxhPXUoZnVuY3Rpb24oKXt0aGlzLk49RjtpZihmLnZhbHVlKXt2YXIgbj1vLnZhbHVlO2lmKGkuX192JiZpLl9fdi5fX2UmJjM9PT1pLl9fdi5fX2Uubm9kZVR5cGUpaS5fX3YuX19lLmRhdGE9bn19KSx2PW4uX18kdS5kO24uX18kdS5kPWZ1bmN0aW9uKCl7YSgpO3YuY2FsbCh0aGlzKX07cmV0dXJuW2Ysb119LFtdKSxhPWZbMF0sdj1mWzFdO3JldHVybiBhLnZhbHVlP3YucGVlaygpOnYudmFsdWV9eS5kaXNwbGF5TmFtZT1cIlJlYWN0aXZlVGV4dE5vZGVcIjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp2b2lkIDB9LHR5cGU6e2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp5fSxwcm9wczp7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBpPXRoaXM7cmV0dXJue2RhdGE6e2dldCB2YWx1ZSgpe3JldHVybiBpLnZhbHVlfX19fX0sX19iOntjb25maWd1cmFibGU6ITAsdmFsdWU6MX19KTtnKFwiX19iXCIsZnVuY3Rpb24oaSxuKXtpZihcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlKXt2YXIgcix0PW4ucHJvcHM7Zm9yKHZhciBvIGluIHQpaWYoXCJjaGlsZHJlblwiIT09byl7dmFyIGU9dFtvXTtpZihlIGluc3RhbmNlb2YgYSl7aWYoIXIpbi5fX25wPXI9e307cltvXT1lO3Rbb109ZS5wZWVrKCl9fX1pKG4pfSk7ZyhcIl9fclwiLGZ1bmN0aW9uKGksbil7aShuKTtpZihuLnR5cGUhPT10KXtiKCk7dmFyIHIsbz1uLl9fYztpZihvKXtvLl9fJGYmPS0yO2lmKHZvaWQgMD09PShyPW8uX18kdSkpby5fXyR1PXI9ZnVuY3Rpb24oaSxuKXt2YXIgcjt1KGZ1bmN0aW9uKCl7cj10aGlzfSx7bmFtZTpufSk7ci5jPWk7cmV0dXJuIHJ9KGZ1bmN0aW9uKCl7dmFyIGk7aWYocCludWxsPT0oaT1yLnkpfHxpLmNhbGwocik7by5fXyRmfD0xO28uc2V0U3RhdGUoe30pfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGU/bi50eXBlLmRpc3BsYXlOYW1lfHxuLnR5cGUubmFtZTpcIlwiKX1kPW87YihyKX19KTtnKFwiX19lXCIsZnVuY3Rpb24oaSxuLHIsdCl7YigpO2Q9dm9pZCAwO2kobixyLHQpfSk7ZyhcImRpZmZlZFwiLGZ1bmN0aW9uKGksbil7YigpO2Q9dm9pZCAwO3ZhciByO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGUmJihyPW4uX19lKSl7dmFyIHQ9bi5fX25wLG89bi5wcm9wcztpZih0KXt2YXIgZT1yLlU7aWYoZSlmb3IodmFyIGYgaW4gZSl7dmFyIHU9ZVtmXTtpZih2b2lkIDAhPT11JiYhKGYgaW4gdCkpe3UuZCgpO2VbZl09dm9pZCAwfX1lbHNle2U9e307ci5VPWV9Zm9yKHZhciBhIGluIHQpe3ZhciBjPWVbYV0sdj10W2FdO2lmKHZvaWQgMD09PWMpe2M9dyhyLGEsdik7ZVthXT1jfWVsc2UgYy5vKHYsbyl9Zm9yKHZhciBzIGluIHQpb1tzXT10W3NdfX1pKG4pfSk7ZnVuY3Rpb24gdyhpLG4scix0KXt2YXIgbz1uIGluIGkmJnZvaWQgMD09PWkub3duZXJTVkdFbGVtZW50LGU9dihyKSxmPXIucGVlaygpO3JldHVybntvOmZ1bmN0aW9uKGksbil7ZS52YWx1ZT1pO2Y9aS5wZWVrKCl9LGQ6dShmdW5jdGlvbigpe3RoaXMuTj1GO3ZhciByPWUudmFsdWUudmFsdWU7aWYoZiE9PXIpe2Y9dm9pZCAwO2lmKG8paVtuXT1yO2Vsc2UgaWYobnVsbCE9ciYmKCExIT09cnx8XCItXCI9PT1uWzRdKSlpLnNldEF0dHJpYnV0ZShuLHIpO2Vsc2UgaS5yZW1vdmVBdHRyaWJ1dGUobil9ZWxzZSBmPXZvaWQgMH0pfX1nKFwidW5tb3VudFwiLGZ1bmN0aW9uKGksbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSl7dmFyIHI9bi5fX2U7aWYocil7dmFyIHQ9ci5VO2lmKHQpe3IuVT12b2lkIDA7Zm9yKHZhciBvIGluIHQpe3ZhciBlPXRbb107aWYoZSllLmQoKX19fW4uX19ucD12b2lkIDB9ZWxzZXt2YXIgZj1uLl9fYztpZihmKXt2YXIgdT1mLl9fJHU7aWYodSl7Zi5fXyR1PXZvaWQgMDt1LmQoKX19fWkobil9KTtnKFwiX19oXCIsZnVuY3Rpb24oaSxuLHIsdCl7aWYodDwzfHw5PT09dCluLl9fJGZ8PTI7aShuLHIsdCl9KTtpLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oaSxuKXtpZih0aGlzLl9fUilyZXR1cm4hMDt2YXIgcj10aGlzLl9fJHUsdD1yJiZ2b2lkIDAhPT1yLnM7Zm9yKHZhciBvIGluIG4pcmV0dXJuITA7aWYodGhpcy5fX2Z8fFwiYm9vbGVhblwiPT10eXBlb2YgdGhpcy51JiYhMD09PXRoaXMudSl7dmFyIGU9MiZ0aGlzLl9fJGY7aWYoISh0fHxlfHw0JnRoaXMuX18kZikpcmV0dXJuITA7aWYoMSZ0aGlzLl9fJGYpcmV0dXJuITB9ZWxzZXtpZighKHR8fDQmdGhpcy5fXyRmKSlyZXR1cm4hMDtpZigzJnRoaXMuX18kZilyZXR1cm4hMH1mb3IodmFyIGYgaW4gaSlpZihcIl9fc291cmNlXCIhPT1mJiZpW2ZdIT09dGhpcy5wcm9wc1tmXSlyZXR1cm4hMDtmb3IodmFyIHUgaW4gdGhpcy5wcm9wcylpZighKHUgaW4gaSkpcmV0dXJuITA7cmV0dXJuITF9O2Z1bmN0aW9uIHVzZVNpZ25hbChpLG4pe3JldHVybiBvKGZ1bmN0aW9uKCl7cmV0dXJuIHYoaSxuKX0sW10pfWZ1bmN0aW9uIHVzZUNvbXB1dGVkKGksbil7dmFyIHI9ZShpKTtyLmN1cnJlbnQ9aTtkLl9fJGZ8PTQ7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gYyhmdW5jdGlvbigpe3JldHVybiByLmN1cnJlbnQoKX0sbil9LFtdKX12YXIgaz1cInVuZGVmaW5lZFwiPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3NldFRpbWVvdXQ6ZnVuY3Rpb24oaSl7dmFyIG49ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQocik7Y2FuY2VsQW5pbWF0aW9uRnJhbWUodCk7aSgpfSxyPXNldFRpbWVvdXQobiwzNSksdD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9LHE9ZnVuY3Rpb24oaSl7cXVldWVNaWNyb3Rhc2soZnVuY3Rpb24oKXtxdWV1ZU1pY3JvdGFzayhpKX0pfTtmdW5jdGlvbiBBKCl7cyhmdW5jdGlvbigpe3ZhciBpO3doaWxlKGk9bS5zaGlmdCgpKWwuY2FsbChpKX0pfWZ1bmN0aW9uIFQoKXtpZigxPT09bS5wdXNoKHRoaXMpKShuLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8aykoQSl9ZnVuY3Rpb24geCgpe3MoZnVuY3Rpb24oKXt2YXIgaTt3aGlsZShpPV8uc2hpZnQoKSlsLmNhbGwoaSl9KX1mdW5jdGlvbiBGKCl7aWYoMT09PV8ucHVzaCh0aGlzKSkobi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHEpKHgpfWZ1bmN0aW9uIHVzZVNpZ25hbEVmZmVjdChpLG4pe3ZhciByPWUoaSk7ci5jdXJyZW50PWk7ZihmdW5jdGlvbigpe3JldHVybiB1KGZ1bmN0aW9uKCl7dGhpcy5OPVQ7cmV0dXJuIHIuY3VycmVudCgpfSxuKX0sW10pfWZ1bmN0aW9uIE0oaSl7dmFyIG49byhmdW5jdGlvbigpe3JldHVybiBpKCl9LFtdKTtmKGZ1bmN0aW9uKCl7cmV0dXJuIG5bU3ltYm9sLmRpc3Bvc2VdfSxbbl0pO3JldHVybiBufWV4cG9ydHt1c2VDb21wdXRlZCxNIGFzIHVzZU1vZGVsLHVzZVNpZ25hbCx1c2VTaWduYWxFZmZlY3R9Oy8vIyBzb3VyY2VNYXBwaW5nVVJMPXNpZ25hbHMubW9kdWxlLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIEdsb2JhbCBlcnJvciBzdXJmYWNlIGZvciBhY3Rpb24gaGFuZGxlcnMuXG4gKlxuICogQWN0aW9ucyB0aGF0IGZhaWwgc2V0IHRoZSBlcnJvclN0YXRlIHNpZ25hbCB2aWEgYHN1Ym1pdEVycm9yYDsgYSBgPFRvYXN0PmBcbiAqIGNvbXBvbmVudCBjb25zdW1lcyB0aGF0IHNpZ25hbCBhbmQgcmVuZGVycyBhIGRpc21pc3NhYmxlIG1lc3NhZ2UuIEhhbmRsZXJzXG4gKiB0aGF0IGNhdGNoIGV4cGVjdGVkIGZhaWx1cmVzICh2YWxpZGF0aW9uLCBxdW90YSkgbWF5IGNhbGwgYHNldEVycm9yYCBkaXJlY3RseS5cbiAqL1xuXG5pbXBvcnQgeyBzaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5cbmV4cG9ydCB0eXBlIEVycm9yU2V2ZXJpdHkgPSBcImVycm9yXCIgfCBcIndhcm5pbmdcIiB8IFwiaW5mb1wiO1xuXG5leHBvcnQgdHlwZSBFcnJvckVudHJ5ID0ge1xuICBpZDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNldmVyaXR5OiBFcnJvclNldmVyaXR5O1xuICBhY3Rpb24/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogbnVtYmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGVycm9yU3RhdGUgPSBzaWduYWw8RXJyb3JFbnRyeVtdPihbXSk7XG5cbmxldCBuZXh0SWQgPSAwO1xuZnVuY3Rpb24gYWxsb2NJZCgpOiBzdHJpbmcge1xuICBuZXh0SWQgKz0gMTtcbiAgcmV0dXJuIGBwb2xseS1lcnItJHtuZXh0SWR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEVycm9yKFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIG9wdHM6IHsgc2V2ZXJpdHk/OiBFcnJvclNldmVyaXR5OyBhY3Rpb24/OiBzdHJpbmcgfSA9IHt9XG4pOiBzdHJpbmcge1xuICBjb25zdCBlbnRyeTogRXJyb3JFbnRyeSA9IHtcbiAgICBpZDogYWxsb2NJZCgpLFxuICAgIG1lc3NhZ2UsXG4gICAgc2V2ZXJpdHk6IG9wdHMuc2V2ZXJpdHkgPz8gXCJlcnJvclwiLFxuICAgIGFjdGlvbjogb3B0cy5hY3Rpb24sXG4gICAgY3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuICB9O1xuICBlcnJvclN0YXRlLnZhbHVlID0gWy4uLmVycm9yU3RhdGUudmFsdWUsIGVudHJ5XTtcbiAgcmV0dXJuIGVudHJ5LmlkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJFcnJvcihpZD86IHN0cmluZyk6IHZvaWQge1xuICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVycm9yU3RhdGUudmFsdWUgPSBbXTtcbiAgICByZXR1cm47XG4gIH1cbiAgZXJyb3JTdGF0ZS52YWx1ZSA9IGVycm9yU3RhdGUudmFsdWUuZmlsdGVyKChlKSA9PiBlLmlkICE9PSBpZCk7XG59XG5cbi8qKlxuICogQ29udmVuaWVuY2Ugd3JhcHBlciBmb3IgYW4gYWN0aW9uJ3MgY2F0Y2ggYmxvY2suXG4gKiBMb2dzIHRoZSBhY3Rpb24gbmFtZSArIGVycm9yIGFuZCBzdXJmYWNlcyBhIHVzZXItdmlzaWJsZSBtZXNzYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VibWl0RXJyb3IoYWN0aW9uOiBzdHJpbmcsIGVycjogdW5rbm93bik6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gIHJldHVybiBzZXRFcnJvcihtZXNzYWdlLCB7IGFjdGlvbiwgc2V2ZXJpdHk6IFwiZXJyb3JcIiB9KTtcbn1cbiIsCiAgICAiLyoqXG4gKiBPdmVybGF5IHJlZ2lzdHJ5LlxuICpcbiAqIFRyYWNrcyB0aGUgc3RhY2sgb2Ygb3BlbiBvdmVybGF5cyAobW9kYWxzLCBwb3BvdmVycywgY29uZmlybSBkaWFsb2dzKSBzb1xuICogRXNjYXBlIGNhbiBjbG9zZSB0aGUgdG9wbW9zdCBhbmQgYGRhdGEtb3ZlcmxheS1pZGAtYmFzZWQgRE9NIHNjYW5zIGhhdmVcbiAqIGEgbWlycm9yIGluIG1lbW9yeS4gRWFjaCBlbnRyeSBzdG9yZXMgYW4gaWQgcGx1cyBhbiBvcHRpb25hbCBjbG9zZVxuICogY2FsbGJhY2s7IGBjbG9zZVRvcE92ZXJsYXlgIGludm9rZXMgdGhlIGNhbGxiYWNrIGFuZCBwb3BzIHRoZSBlbnRyeS5cbiAqL1xuXG5pbXBvcnQgeyBzaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5cbmV4cG9ydCB0eXBlIE92ZXJsYXlFbnRyeSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBzdGFjayA9IHNpZ25hbDxPdmVybGF5RW50cnlbXT4oW10pO1xuXG4vKiogQ3VycmVudCBvdmVybGF5IHN0YWNrIGFzIGEgcmVhZC1vbmx5IHNuYXBzaG90LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG92ZXJsYXlTdGFjaygpOiByZWFkb25seSBPdmVybGF5RW50cnlbXSB7XG4gIHJldHVybiBzdGFjay52YWx1ZTtcbn1cblxuLyoqIElzIGFueSBvdmVybGF5IGN1cnJlbnRseSBvcGVuPyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc09wZW5PdmVybGF5KCk6IGJvb2xlYW4ge1xuICByZXR1cm4gc3RhY2sudmFsdWUubGVuZ3RoID4gMDtcbn1cblxuLyoqIFRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciB1bmRlZmluZWQgaWYgZW1wdHkuICovXG5leHBvcnQgZnVuY3Rpb24gdG9wT3ZlcmxheSgpOiBPdmVybGF5RW50cnkgfCB1bmRlZmluZWQge1xuICBjb25zdCBzID0gc3RhY2sudmFsdWU7XG4gIHJldHVybiBzW3MubGVuZ3RoIC0gMV07XG59XG5cbi8qKiBQdXNoIGFuIG92ZXJsYXkgb250byB0aGUgc3RhY2suIFJldHVybnMgdGhlIHBvcHBlZCBlbnRyeSB3aGVuIGNsb3NlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdXNoT3ZlcmxheShlbnRyeTogT3ZlcmxheUVudHJ5KTogdm9pZCB7XG4gIHN0YWNrLnZhbHVlID0gWy4uLnN0YWNrLnZhbHVlLCBlbnRyeV07XG59XG5cbi8qKiBQb3AgYSBzcGVjaWZpYyBvdmVybGF5IGJ5IGlkIChvciB0aGUgdG9wIGlmIG5vIGlkIGdpdmVuKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3BPdmVybGF5KGlkPzogc3RyaW5nKTogT3ZlcmxheUVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHN0YWNrLnZhbHVlO1xuICBpZiAocy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgdG9wID0gc1tzLmxlbmd0aCAtIDFdO1xuICAgIHN0YWNrLnZhbHVlID0gcy5zbGljZSgwLCAtMSk7XG4gICAgcmV0dXJuIHRvcDtcbiAgfVxuICBjb25zdCBpZHggPSBzLmZpbmRJbmRleCgoZSkgPT4gZS5pZCA9PT0gaWQpO1xuICBpZiAoaWR4ID09PSAtMSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgZW50cnkgPSBzW2lkeF07XG4gIHN0YWNrLnZhbHVlID0gWy4uLnMuc2xpY2UoMCwgaWR4KSwgLi4ucy5zbGljZShpZHggKyAxKV07XG4gIHJldHVybiBlbnRyeTtcbn1cblxuLyoqIENsb3NlIHRoZSB0b3Agb3ZlcmxheSBieSBjYWxsaW5nIGl0cyBvbkNsb3NlIGFuZCBwb3BwaW5nIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlVG9wT3ZlcmxheSgpOiBPdmVybGF5RW50cnkgfCB1bmRlZmluZWQge1xuICBjb25zdCB0b3AgPSB0b3BPdmVybGF5KCk7XG4gIGlmICghdG9wKSByZXR1cm4gdW5kZWZpbmVkO1xuICB0b3Aub25DbG9zZT8uKCk7XG4gIHJldHVybiBwb3BPdmVybGF5KHRvcC5pZCk7XG59XG5cbi8qKiBSZXNldCB0aGUgc3RhY2suIEludGVuZGVkIGZvciB0ZXN0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldE92ZXJsYXlTdGFjaygpOiB2b2lkIHtcbiAgc3RhY2sudmFsdWUgPSBbXTtcbn1cbiIsCiAgICAiLyoqXG4gKiBFdmVudCBkZWxlZ2F0aW9uIGNvcmUuXG4gKlxuICogT25lIGRvY3VtZW50IGxpc3RlbmVyIGRpc3BhdGNoZXMgYGRhdGEtYWN0aW9uYCBldmVudHMgdG8gdHlwZWQgaGFuZGxlcnMuXG4gKiBXYWxrcyB1cCB0aGUgRE9NIHdpdGggYGNsb3Nlc3QoJ1tkYXRhLWFjdGlvbl0nKWAsIHBhcnNlcyBgZGF0YS1hY3Rpb24tKmBcbiAqIGF0dHJpYnV0ZXMgaW50byBhIGNhbWVsQ2FzZSBvYmplY3QsIGFuZCBoYW5kcyB0aGUgZGlzcGF0Y2ggdG8gdGhlIGNhbGxlci5cbiAqXG4gKiBGb3JtcyBhcmUgc2tpcHBlZCBvbiBjbGljayDigJQgYSBgPGZvcm0gZGF0YS1hY3Rpb249XCIuLi5cIj5gIHJlc3BvbmRzIHRvXG4gKiBzdWJtaXQgb25seSwgc28gY2xpY2tzIG9uIGZvcm0gY2hpbGRyZW4gZG9uJ3QgYnViYmxlIGludG8gaXRzIGFjdGlvbi5cbiAqIEVzY2FwZSBjbG9zZXMgdGhlIHRvcG1vc3Qgb3ZlcmxheSBieSBjYWxsaW5nIHRoZSBvdmVybGF5IHJlZ2lzdHJ5LlxuICogRW50ZXIvU3BhY2Ugb24gbm9uLWludGVyYWN0aXZlIGVsZW1lbnRzIHdpdGggYGRhdGEtYWN0aW9uYCBmaXJlIHRoZVxuICogYWN0aW9uIChTcGFjZSBpcyBwcmV2ZW50ZWQgdG8gc3RvcCBwYWdlIHNjcm9sbCkuIENsaWNrIG91dHNpZGUgYW55XG4gKiBgW2RhdGEtb3ZlcmxheS1pZF1gIGVsZW1lbnQgYWxzbyBwb3BzIHRoZSB0b3Agb3ZlcmxheS5cbiAqL1xuXG5pbXBvcnQgeyBjbG9zZVRvcE92ZXJsYXkgYXMgY2xvc2VUb3BSZWdpc3RyeU92ZXJsYXkgfSBmcm9tIFwiLi9vdmVybGF5LnRzXCI7XG5cbi8qKiBFbGVtZW50cyB0aGF0IG5hdGl2ZWx5IGZpcmUgY2xpY2sgb24gRW50ZXIvU3BhY2UuICovXG5leHBvcnQgY29uc3QgSU5URVJBQ1RJVkVfVEFHUyA9IG5ldyBTZXQoW1wiQlVUVE9OXCIsIFwiQVwiLCBcIklOUFVUXCIsIFwiU0VMRUNUXCIsIFwiVEVYVEFSRUFcIl0pO1xuXG4vKiogRXZlbnQgdHlwZXMgdGhhdCBtYXkgdHJpZ2dlciBhIGRhdGEtYWN0aW9uIGRpc3BhdGNoLiAqL1xuZXhwb3J0IGNvbnN0IEFDVElPTl9FVkVOVF9UWVBFUyA9IG5ldyBTZXQoW1wiY2xpY2tcIiwgXCJzdWJtaXRcIiwgXCJjaGFuZ2VcIiwgXCJpbnB1dFwiXSk7XG5cbi8qKiBQYXJzZWQgYWN0aW9uIGRpc3BhdGNoIOKAlCB3aGF0IHRoZSBydW50aW1lIHJlc29sdmVzIGJlZm9yZSBpbnZva2luZyBhIGhhbmRsZXIuICovXG5leHBvcnQgdHlwZSBBY3Rpb25EaXNwYXRjaCA9IHtcbiAgYWN0aW9uOiBzdHJpbmc7XG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICBldmVudDogRXZlbnQ7XG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG4vKipcbiAqIFBhcnNlIGBkYXRhLWFjdGlvbi0qYCBhdHRyaWJ1dGVzIGludG8gY2FtZWxDYXNlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBgZGF0YS1hY3Rpb24tdGV4dC1zZXQtaWQ9XCI0MlwiYCBiZWNvbWVzIGB7IHRleHRTZXRJZDogXCI0MlwiIH1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBY3Rpb25EYXRhKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBhdHRyIG9mIEFycmF5LmZyb20oZWxlbWVudC5hdHRyaWJ1dGVzKSkge1xuICAgIGlmIChhdHRyLm5hbWUuc3RhcnRzV2l0aChcImRhdGEtYWN0aW9uLVwiKSkge1xuICAgICAgY29uc3Qga2V5ID0gYXR0ci5uYW1lXG4gICAgICAgIC5yZXBsYWNlKFwiZGF0YS1hY3Rpb24tXCIsIFwiXCIpXG4gICAgICAgIC5yZXBsYWNlKC8tKFthLXpdKS9nLCAoX206IHN0cmluZywgbGV0dGVyOiBzdHJpbmcpID0+IGxldHRlci50b1VwcGVyQ2FzZSgpKTtcbiAgICAgIGRhdGFba2V5XSA9IGF0dHIudmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIENsb3NlIHRoZSB0b3Btb3N0IG92ZXJsYXkgYnkgZGlzcGF0Y2hpbmcgYG92ZXJsYXk6Y2xvc2VgIG9uIGl0cyBlbGVtZW50LlxuICogT3ZlcmxheXMgbWFyayB0aGVtc2VsdmVzIHdpdGggYGRhdGEtb3ZlcmxheS1pZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVRvcE92ZXJsYXkoKTogdm9pZCB7XG4gIGNvbnN0IG92ZXJsYXlzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICBcIltkYXRhLW92ZXJsYXktaWRdOnBvcG92ZXItb3BlbiwgZGlhbG9nW2RhdGEtb3ZlcmxheS1pZF1bb3Blbl1cIlxuICApO1xuICBpZiAob3ZlcmxheXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIGNvbnN0IHRvcE92ZXJsYXkgPSBvdmVybGF5c1tvdmVybGF5cy5sZW5ndGggLSAxXTtcbiAgaWYgKCF0b3BPdmVybGF5KSByZXR1cm47XG4gIHRvcE92ZXJsYXkuZGlzcGF0Y2hFdmVudChcbiAgICBuZXcgQ3VzdG9tRXZlbnQoXCJvdmVybGF5OmNsb3NlXCIsIHtcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBkZXRhaWw6IHsgaWQ6IHRvcE92ZXJsYXkuZ2V0QXR0cmlidXRlKFwiZGF0YS1vdmVybGF5LWlkXCIpIH0sXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgRE9NIGV2ZW50IHRvIGFuIEFjdGlvbkRpc3BhdGNoLCBvciBudWxsIGlmIG5vIGRhdGEtYWN0aW9uIG1hdGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQWN0aW9uKGV2ZW50OiBFdmVudCk6IEFjdGlvbkRpc3BhdGNoIHwgbnVsbCB7XG4gIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiBudWxsO1xuICBjb25zdCBhY3Rpb25FbGVtZW50ID0gdGFyZ2V0LmNsb3Nlc3QoXCJbZGF0YS1hY3Rpb25dXCIpO1xuICBpZiAoIShhY3Rpb25FbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm4gbnVsbDtcbiAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBhY3Rpb25FbGVtZW50LnRhZ05hbWUgPT09IFwiRk9STVwiKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYWN0aW9uID0gYWN0aW9uRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWFjdGlvblwiKTtcbiAgaWYgKCFhY3Rpb24pIHJldHVybiBudWxsO1xuICByZXR1cm4ge1xuICAgIGFjdGlvbixcbiAgICBlbGVtZW50OiBhY3Rpb25FbGVtZW50LFxuICAgIGV2ZW50LFxuICAgIGRhdGE6IHBhcnNlQWN0aW9uRGF0YShhY3Rpb25FbGVtZW50KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBJbnN0YWxsIGRvY3VtZW50LWxldmVsIGxpc3RlbmVycyBmb3IgdGhlIGRlbGVnYXRpb24gc3lzdGVtLlxuICogUmV0dXJucyBhIGNsZWFudXAgZnVuY3Rpb24gdGhhdCByZW1vdmVzIGV2ZXJ5IGxpc3RlbmVyIGl0IGluc3RhbGxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxFdmVudERlbGVnYXRpb24oXG4gIG9uRGlzcGF0Y2g6IChkaXNwYXRjaDogQWN0aW9uRGlzcGF0Y2gpID0+IHZvaWQsXG4gIG9wdGlvbnM6IHsgb25Fc2NhcGU/OiAoKSA9PiB2b2lkOyBvbk91dHNpZGVPdmVybGF5Q2xpY2s/OiAoKSA9PiB2b2lkIH0gPSB7fVxuKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IGhhbmRsZUFjdGlvbkV2ZW50ID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgIGNvbnN0IGRpc3BhdGNoID0gcmVzb2x2ZUFjdGlvbihldmVudCk7XG4gICAgaWYgKGRpc3BhdGNoKSBvbkRpc3BhdGNoKGRpc3BhdGNoKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuICAgICAgaWYgKG9wdGlvbnMub25Fc2NhcGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkVzY2FwZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xvc2VUb3BSZWdpc3RyeU92ZXJsYXkoKTtcbiAgICAgICAgY2xvc2VUb3BPdmVybGF5KCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiB8fCBldmVudC5rZXkgPT09IFwiIFwiKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xuICAgICAgaWYgKElOVEVSQUNUSVZFX1RBR1MuaGFzKHRhcmdldC50YWdOYW1lKSkgcmV0dXJuO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSByZXNvbHZlQWN0aW9uKGV2ZW50KTtcbiAgICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBvbkRpc3BhdGNoKGRpc3BhdGNoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKCEoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcbiAgICBjb25zdCBjbGlja2VkT3ZlcmxheSA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KFwiW2RhdGEtb3ZlcmxheS1pZF1cIik7XG4gICAgaWYgKGNsaWNrZWRPdmVybGF5KSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnRhcmdldC5jbG9zZXN0KFwiYnV0dG9uW3BvcG92ZXJ0YXJnZXRdXCIpKSByZXR1cm47XG4gICAgaWYgKG9wdGlvbnMub25PdXRzaWRlT3ZlcmxheUNsaWNrKSB7XG4gICAgICBvcHRpb25zLm9uT3V0c2lkZU92ZXJsYXlDbGljaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbG9zZVRvcFJlZ2lzdHJ5T3ZlcmxheSgpO1xuICAgICAgY2xvc2VUb3BPdmVybGF5KCk7XG4gICAgfVxuICB9O1xuXG4gIGZvciAoY29uc3QgZXZlbnRUeXBlIG9mIEFDVElPTl9FVkVOVF9UWVBFUykge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVBY3Rpb25FdmVudCk7XG4gIH1cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgaGFuZGxlTW91c2VEb3duKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZXZlbnRUeXBlIG9mIEFDVElPTl9FVkVOVF9UWVBFUykge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZUFjdGlvbkV2ZW50KTtcbiAgICB9XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBoYW5kbGVNb3VzZURvd24pO1xuICB9O1xufVxuIiwKICAgICIvKipcbiAqIEZvcm0gcHJpbWl0aXZlLlxuICpcbiAqIGBjcmVhdGVGb3JtYCByZXR1cm5zIGEgdHlwZWQgZm9ybSBzdG9yZTogcGVyLWZpZWxkIHNpZ25hbHMsIGFuIGFnZ3JlZ2F0ZWRcbiAqIHZhbHVlcyBzaWduYWwsIG9wZW4vY2xvc2Uvc3VibWl0IG1ldGhvZHMsIGFuZCB0aHJlZSBhdXRvLXJlZ2lzdGVyZWQgYWN0aW9uXG4gKiBoYW5kbGVycyAoYHtuYW1lfTpvcGVuYCwgYHtuYW1lfTpjbG9zZWAsIGB7bmFtZX06c3VibWl0YCkgdGhhdCBjYWxsZXJzIHNwcmVhZFxuICogaW50byB0aGVpciBnbG9iYWwgYWN0aW9uIHJlZ2lzdHJ5LlxuICpcbiAqIExpZmVjeWNsZTpcbiAqICAgb3BlbiAg4oaSIHJlc2V0cyBmaWVsZHMgdG8gaW5pdGlhbFZhbHVlcywgYXBwbGllcyBvbk9wZW4gb3ZlcnJpZGVzLFxuICogICAgICAgICAgIHNldHMgaXNPcGVuID0gdHJ1ZSwgcmVjb3JkcyBkYXRhLWFjdGlvbi0qIGRhdGEgaW4gb3BlblBhcmFtc1xuICogICB0eXBpbmcg4oaSIHVuY29udHJvbGxlZCBpbnB1dHMga2VlcCB0aGVpciBvd24gc3RhdGU7IGNvbnRyb2xsZWQgaW5wdXRzXG4gKiAgICAgICAgICAgd3JpdGUgZmllbGRzLlgudmFsdWUgZGlyZWN0bHlcbiAqICAgc3VibWl0IOKGkiByZWFkcyBGb3JtRGF0YSBmcm9tIHRoZSBmb3JtIGVsZW1lbnQsIG1lcmdlcyBpbnRvIGZpZWxkcyxcbiAqICAgICAgICAgICBydW5zIG9wdGlvbmFsIHZhbGlkYXRlLCBjYWxscyB1c2VyIG9uU3VibWl0IHdpdGggZmluYWwgdmFsdWVzLFxuICogICAgICAgICAgIGNsb3NlcyBvbiBzdWNjZXNzLCBzZXRzIGVycm9yU3RhdGUgb24gZmFpbHVyZVxuICogICBjbG9zZSAg4oaSIHJlc2V0cyBhbmQgc2V0cyBpc09wZW4gPSBmYWxzZVxuICogICBndWFyZCAg4oaSIGF1dG9ub21vdXMgZWZmZWN0OyBpZiBndWFyZCgpIHJldHVybnMgZmFsc2Ugd2hpbGUgb3BlbiwgY2xvc2UoKVxuICovXG5cbmltcG9ydCB7IGNvbXB1dGVkLCBlZmZlY3QsIHR5cGUgUmVhZG9ubHlTaWduYWwsIHR5cGUgU2lnbmFsLCBzaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgeyBzdWJtaXRFcnJvciB9IGZyb20gXCIuL2Vycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblJlZ2lzdHJ5IH0gZnJvbSBcIi4vcmVnaXN0cnkudHNcIjtcblxuZnVuY3Rpb24gaXNGb3JtRWxlbWVudCh0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCk6IHRhcmdldCBpcyBIVE1MRm9ybUVsZW1lbnQge1xuICBpZiAoIXRhcmdldCkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIEhUTUxGb3JtRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQ7XG4gIH1cbiAgY29uc3QgdCA9IHRhcmdldCBhcyB1bmtub3duIGFzIHsgdGFnTmFtZT86IHVua25vd24gfTtcbiAgcmV0dXJuIHR5cGVvZiB0LnRhZ05hbWUgPT09IFwic3RyaW5nXCIgJiYgdC50YWdOYW1lID09PSBcIkZPUk1cIjtcbn1cblxuZXhwb3J0IHR5cGUgRm9ybU9wZW5Db250ZXh0PFRTdG9yZXM+ID0ge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBzdG9yZXM6IFRTdG9yZXM7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtU3VibWl0Q29udGV4dDxUVmFsdWVzLCBUU3RvcmVzPiA9IHtcbiAgdmFsdWVzOiBUVmFsdWVzO1xuICBzdG9yZXM6IFRTdG9yZXM7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtQ29uZmlnPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPiA9IHtcbiAgLyoqIFVzZWQgYXMgYWN0aW9uIG5hbWVzcGFjZTogYHtuYW1lfTpvcGVuYCwgYHtuYW1lfTpjbG9zZWAsIGB7bmFtZX06c3VibWl0YC4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICBpbml0aWFsVmFsdWVzOiBUVmFsdWVzO1xuICBvblN1Ym1pdDogKGN0eDogRm9ybVN1Ym1pdENvbnRleHQ8VFZhbHVlcywgVFN0b3Jlcz4pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAvKiogSW52b2tlZCBvbiBvcGVuOyByZXR1cm4gcGFydGlhbCBvdmVycmlkZXMgdG8gcHJlLXBvcHVsYXRlIGZpZWxkcy4gKi9cbiAgb25PcGVuPzogKGN0eDogRm9ybU9wZW5Db250ZXh0PFRTdG9yZXM+KSA9PiBQYXJ0aWFsPFRWYWx1ZXM+IHwgdW5kZWZpbmVkO1xuICAvKiogUmV0dXJucyBmYWxzZSB3aGlsZSBvcGVuIOKGkiBmb3JtIGF1dG8tY2xvc2VzIChlbnRpdHktZGVsZXRpb24gZ3VhcmQpLiAqL1xuICBndWFyZD86IChjdHg6IHsgc3RvcmVzOiBUU3RvcmVzIH0pID0+IGJvb2xlYW47XG4gIC8qKiBTeW5jaHJvbm91cyB2YWxpZGF0aW9uLiBSZXR1cm5pbmcga2V5cyBibG9ja3Mgc3VibWl0LiAqL1xuICB2YWxpZGF0ZT86ICh2YWx1ZXM6IFRWYWx1ZXMpID0+IFBhcnRpYWw8UmVjb3JkPGtleW9mIFRWYWx1ZXMsIHN0cmluZz4+IHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1TdG9yZTxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4gPSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgaXNPcGVuOiBSZWFkb25seVNpZ25hbDxib29sZWFuPjtcbiAgcmVhZG9ubHkgdmFsdWVzOiBSZWFkb25seVNpZ25hbDxUVmFsdWVzPjtcbiAgcmVhZG9ubHkgZmllbGRzOiB7IFtLIGluIGtleW9mIFRWYWx1ZXNdOiBTaWduYWw8VFZhbHVlc1tLXT4gfTtcbiAgcmVhZG9ubHkgZXJyb3JzOiBSZWFkb25seVNpZ25hbDxQYXJ0aWFsPFJlY29yZDxrZXlvZiBUVmFsdWVzLCBzdHJpbmc+Pj47XG4gIHJlYWRvbmx5IGlzU3VibWl0dGluZzogUmVhZG9ubHlTaWduYWw8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IG9wZW5QYXJhbXM6IFJlYWRvbmx5U2lnbmFsPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuICBvcGVuKG92ZXJyaWRlPzogUGFydGlhbDxUVmFsdWVzPiwgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQ7XG4gIGNsb3NlKCk6IHZvaWQ7XG4gIHN1Ym1pdChldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIExhdGUtYmluZHMgc3RvcmVzOyByZXF1aXJlZCBiZWZvcmUgZ3VhcmQvb25PcGVuL29uU3VibWl0IGNhbiBhY2Nlc3Mgc3RvcmVzLiAqL1xuICBiaW5kU3RvcmVzKGdldFN0b3JlczogKCkgPT4gVFN0b3Jlcyk6IHZvaWQ7XG4gIC8qKiBBY3Rpb24gaGFuZGxlciBlbnRyaWVzLiBTcHJlYWQgaW50byB0aGUgdXNlcidzIEFjdGlvblJlZ2lzdHJ5LiAqL1xuICBhY3Rpb25zOiBBY3Rpb25SZWdpc3RyeTxUU3RvcmVzPjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPihcbiAgY29uZmlnOiBGb3JtQ29uZmlnPFRWYWx1ZXMsIFRTdG9yZXM+XG4pOiBGb3JtU3RvcmU8VFZhbHVlcywgVFN0b3Jlcz4ge1xuICBjb25zdCBmaWVsZEtleXMgPSBPYmplY3Qua2V5cyhjb25maWcuaW5pdGlhbFZhbHVlcykgYXMgdW5rbm93biBhcyAoa2V5b2YgVFZhbHVlcylbXTtcblxuICBjb25zdCBmaWVsZHMgPSB7fSBhcyB1bmtub3duIGFzIHsgW0sgaW4ga2V5b2YgVFZhbHVlc106IFNpZ25hbDxUVmFsdWVzW0tdPiB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZEtleXMpIHtcbiAgICBmaWVsZHNba2V5XSA9IHNpZ25hbChjb25maWcuaW5pdGlhbFZhbHVlc1trZXldKTtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlcyA9IGNvbXB1dGVkPFRWYWx1ZXM+KCgpID0+IHtcbiAgICBjb25zdCB2ID0ge30gYXMgdW5rbm93biBhcyBUVmFsdWVzO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkS2V5cykge1xuICAgICAgdltrZXldID0gZmllbGRzW2tleV0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9KTtcblxuICBjb25zdCBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xuICBjb25zdCBpc1N1Ym1pdHRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBjb25zdCBlcnJvcnMgPSBzaWduYWw8UGFydGlhbDxSZWNvcmQ8a2V5b2YgVFZhbHVlcywgc3RyaW5nPj4+KHt9KTtcbiAgY29uc3Qgb3BlblBhcmFtcyA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSk7XG5cbiAgbGV0IGdldFN0b3Jlc1JlZjogKCgpID0+IFRTdG9yZXMpIHwgbnVsbCA9IG51bGw7XG4gIGxldCBkaXNwb3NlR3VhcmRFZmZlY3Q6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGdldFN0b3Jlc09yVGhyb3coKTogVFN0b3JlcyB7XG4gICAgaWYgKCFnZXRTdG9yZXNSZWYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZvcm0gXCIke2NvbmZpZy5uYW1lfVwiIHVzZWQgYmVmb3JlIGJpbmRTdG9yZXMoKS4gQ2FsbCBmb3JtLmJpbmRTdG9yZXMoKCkgPT4geW91clN0b3JlcykgYXQgYXBwIGluaXQuYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdldFN0b3Jlc1JlZigpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUb0luaXRpYWwoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgZmllbGRLZXlzKSB7XG4gICAgICBmaWVsZHNba2V5XS52YWx1ZSA9IGNvbmZpZy5pbml0aWFsVmFsdWVzW2tleV07XG4gICAgfVxuICAgIGVycm9ycy52YWx1ZSA9IHt9O1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IG9wZW4gYXBwbGllcyB0d28gbGF5ZXJzIG9mIG92ZXJyaWRlcyBwbHVzIG9wdGlvbmFsIG9uT3BlbiDigJQgYnJhbmNoeSBieSBkZXNpZ24uXG4gIGZ1bmN0aW9uIG9wZW4ob3ZlcnJpZGU/OiBQYXJ0aWFsPFRWYWx1ZXM+LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSk6IHZvaWQge1xuICAgIHJlc2V0VG9Jbml0aWFsKCk7XG4gICAgb3BlblBhcmFtcy52YWx1ZSA9IHBhcmFtcztcbiAgICBpZiAoY29uZmlnLm9uT3BlbiAmJiBnZXRTdG9yZXNSZWYpIHtcbiAgICAgIGNvbnN0IG9uT3Blbk92ZXJyaWRlID0gY29uZmlnLm9uT3Blbih7IGRhdGE6IHBhcmFtcywgc3RvcmVzOiBnZXRTdG9yZXNPclRocm93KCkgfSkgPz8ge307XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvbk9wZW5PdmVycmlkZSkpIHtcbiAgICAgICAgaWYgKGsgaW4gZmllbGRzKSB7XG4gICAgICAgICAgZmllbGRzW2sgYXMga2V5b2YgVFZhbHVlc10udmFsdWUgPSB2IGFzIFRWYWx1ZXNba2V5b2YgVFZhbHVlc107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvdmVycmlkZSkpIHtcbiAgICAgICAgaWYgKGsgaW4gZmllbGRzKSB7XG4gICAgICAgICAgZmllbGRzW2sgYXMga2V5b2YgVFZhbHVlc10udmFsdWUgPSB2IGFzIFRWYWx1ZXNba2V5b2YgVFZhbHVlc107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaXNPcGVuLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlKCk6IHZvaWQge1xuICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIHJlc2V0VG9Jbml0aWFsKCk7XG4gICAgb3BlblBhcmFtcy52YWx1ZSA9IHt9O1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IHN1Ym1pdCBmdW5uZWxzIEZvcm1EYXRhLCB2YWxpZGF0ZSwgb25TdWJtaXQsIGVycm9yU3RhdGUsIGFuZCBjbG9zZSDigJQgb25lLXBhdGgtcGVyLXN0YWdlIGJ5IGRlc2lnbi5cbiAgYXN5bmMgZnVuY3Rpb24gc3VibWl0KGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZXZlbnQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGV2ZW50ICYmIGlzRm9ybUVsZW1lbnQoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoZXZlbnQudGFyZ2V0KTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkS2V5cykge1xuICAgICAgICBjb25zdCByYXcgPSBmZC5nZXQoa2V5IGFzIHVua25vd24gYXMgc3RyaW5nKTtcbiAgICAgICAgaWYgKHJhdyAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpZWxkc1trZXldLnZhbHVlID0gU3RyaW5nKHJhdykgYXMgdW5rbm93biBhcyBUVmFsdWVzW3R5cGVvZiBrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnQgPSB2YWx1ZXMudmFsdWU7XG4gICAgY29uc3QgdmFsaWRhdGlvbkVycm9ycyA9IGNvbmZpZy52YWxpZGF0ZT8uKGN1cnJlbnQpO1xuICAgIGlmICh2YWxpZGF0aW9uRXJyb3JzICYmIE9iamVjdC5rZXlzKHZhbGlkYXRpb25FcnJvcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGVycm9ycy52YWx1ZSA9IHZhbGlkYXRpb25FcnJvcnM7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVycm9ycy52YWx1ZSA9IHt9O1xuICAgIGlzU3VibWl0dGluZy52YWx1ZSA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvbmZpZy5vblN1Ym1pdCh7XG4gICAgICAgIHZhbHVlczogY3VycmVudCxcbiAgICAgICAgc3RvcmVzOiBnZXRTdG9yZXNPclRocm93KCksXG4gICAgICB9KTtcbiAgICAgIGNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzdWJtaXRFcnJvcihgJHtjb25maWcubmFtZX06c3VibWl0YCwgZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNTdWJtaXR0aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYmluZFN0b3JlcyhnZXRTdG9yZXM6ICgpID0+IFRTdG9yZXMpOiB2b2lkIHtcbiAgICBnZXRTdG9yZXNSZWYgPSBnZXRTdG9yZXM7XG4gICAgZGlzcG9zZUd1YXJkRWZmZWN0Py4oKTtcbiAgICBjb25zdCBndWFyZEZuID0gY29uZmlnLmd1YXJkO1xuICAgIGlmIChndWFyZEZuKSB7XG4gICAgICBkaXNwb3NlR3VhcmRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWlzT3Blbi52YWx1ZSkgcmV0dXJuO1xuICAgICAgICBpZiAoIWd1YXJkRm4oeyBzdG9yZXM6IGdldFN0b3JlcygpIH0pKSBjbG9zZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYWN0aW9uczogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz4gPSB7XG4gICAgW2Ake2NvbmZpZy5uYW1lfTpvcGVuYF06ICh7IGRhdGEgfSkgPT4ge1xuICAgICAgb3Blbih1bmRlZmluZWQsIGRhdGEpO1xuICAgIH0sXG4gICAgW2Ake2NvbmZpZy5uYW1lfTpjbG9zZWBdOiAoKSA9PiB7XG4gICAgICBjbG9zZSgpO1xuICAgIH0sXG4gICAgW2Ake2NvbmZpZy5uYW1lfTpzdWJtaXRgXTogYXN5bmMgKHsgZXZlbnQgfSkgPT4ge1xuICAgICAgYXdhaXQgc3VibWl0KGV2ZW50KTtcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgaXNPcGVuLFxuICAgIHZhbHVlcyxcbiAgICBmaWVsZHMsXG4gICAgZXJyb3JzLFxuICAgIGlzU3VibWl0dGluZyxcbiAgICBvcGVuUGFyYW1zLFxuICAgIG9wZW4sXG4gICAgY2xvc2UsXG4gICAgc3VibWl0LFxuICAgIGJpbmRTdG9yZXMsXG4gICAgYWN0aW9ucyxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb21wb3NlIG1hbnkgZm9ybXMgaW50byBhIHNpbmdsZSBzZXQ6IG1lcmdlZCBhY3Rpb25zLCBjbG9zZUFsbCwgb3BlbkZvcm0gc2lnbmFsLlxuICovXG5leHBvcnQgdHlwZSBGb3JtU2V0PFRTdG9yZXM+ID0ge1xuICBhY3Rpb25zOiBBY3Rpb25SZWdpc3RyeTxUU3RvcmVzPjtcbiAgb3BlbkZvcm06IFJlYWRvbmx5U2lnbmFsPHN0cmluZyB8IG51bGw+O1xuICBjbG9zZUFsbCgpOiB2b2lkO1xuICBiaW5kU3RvcmVzKGdldFN0b3JlczogKCkgPT4gVFN0b3Jlcyk6IHZvaWQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybVNldDxUU3RvcmVzPihcbiAgZm9ybXM6IHJlYWRvbmx5IEZvcm1TdG9yZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPltdXG4pOiBGb3JtU2V0PFRTdG9yZXM+IHtcbiAgY29uc3QgbWVyZ2VkOiBBY3Rpb25SZWdpc3RyeTxUU3RvcmVzPiA9IHt9O1xuICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIHtcbiAgICBPYmplY3QuYXNzaWduKG1lcmdlZCwgZm9ybS5hY3Rpb25zKTtcbiAgfVxuXG4gIGNvbnN0IG9wZW5Gb3JtID0gY29tcHV0ZWQ8c3RyaW5nIHwgbnVsbD4oKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZm9ybSBvZiBmb3Jtcykge1xuICAgICAgaWYgKGZvcm0uaXNPcGVuLnZhbHVlKSByZXR1cm4gZm9ybS5uYW1lO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhY3Rpb25zOiBtZXJnZWQsXG4gICAgb3BlbkZvcm0sXG4gICAgY2xvc2VBbGwoKSB7XG4gICAgICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIGZvcm0uY2xvc2UoKTtcbiAgICB9LFxuICAgIGJpbmRTdG9yZXMoZ2V0U3RvcmVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIGZvcm0uYmluZFN0b3JlcyhnZXRTdG9yZXMpO1xuICAgIH0sXG4gIH07XG59XG4iLAogICAgImltcG9ydHtvcHRpb25zIGFzIHIsRnJhZ21lbnQgYXMgZX1mcm9tXCJwcmVhY3RcIjtleHBvcnR7RnJhZ21lbnR9ZnJvbVwicHJlYWN0XCI7dmFyIHQ9L1tcIiY8XS87ZnVuY3Rpb24gbihyKXtpZigwPT09ci5sZW5ndGh8fCExPT09dC50ZXN0KHIpKXJldHVybiByO2Zvcih2YXIgZT0wLG49MCxvPVwiXCIsZj1cIlwiO248ci5sZW5ndGg7bisrKXtzd2l0Y2goci5jaGFyQ29kZUF0KG4pKXtjYXNlIDM0OmY9XCImcXVvdDtcIjticmVhaztjYXNlIDM4OmY9XCImYW1wO1wiO2JyZWFrO2Nhc2UgNjA6Zj1cIiZsdDtcIjticmVhaztkZWZhdWx0OmNvbnRpbnVlfW4hPT1lJiYobys9ci5zbGljZShlLG4pKSxvKz1mLGU9bisxfXJldHVybiBuIT09ZSYmKG8rPXIuc2xpY2UoZSxuKSksb312YXIgbz0vYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pLGY9MCxpPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gdShlLHQsbixvLGksdSl7dHx8KHQ9e30pO3ZhciBhLGMscD10O2lmKFwicmVmXCJpbiBwKWZvcihjIGluIHA9e30sdClcInJlZlwiPT1jP2E9dFtjXTpwW2NdPXRbY107dmFyIGw9e3R5cGU6ZSxwcm9wczpwLGtleTpuLHJlZjphLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLWYsX19pOi0xLF9fdTowLF9fc291cmNlOmksX19zZWxmOnV9O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihhPWUuZGVmYXVsdFByb3BzKSlmb3IoYyBpbiBhKXZvaWQgMD09PXBbY10mJihwW2NdPWFbY10pO3JldHVybiByLnZub2RlJiZyLnZub2RlKGwpLGx9ZnVuY3Rpb24gYShyKXt2YXIgdD11KGUse3RwbDpyLGV4cHJzOltdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpfSk7cmV0dXJuIHQua2V5PXQuX192LHR9dmFyIGM9e30scD0vW0EtWl0vZztmdW5jdGlvbiBsKGUsdCl7aWYoci5hdHRyKXt2YXIgZj1yLmF0dHIoZSx0KTtpZihcInN0cmluZ1wiPT10eXBlb2YgZilyZXR1cm4gZn1pZih0PWZ1bmN0aW9uKHIpe3JldHVybiBudWxsIT09ciYmXCJvYmplY3RcIj09dHlwZW9mIHImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHIudmFsdWVPZj9yLnZhbHVlT2YoKTpyfSh0KSxcInJlZlwiPT09ZXx8XCJrZXlcIj09PWUpcmV0dXJuXCJcIjtpZihcInN0eWxlXCI9PT1lJiZcIm9iamVjdFwiPT10eXBlb2YgdCl7dmFyIGk9XCJcIjtmb3IodmFyIHUgaW4gdCl7dmFyIGE9dFt1XTtpZihudWxsIT1hJiZcIlwiIT09YSl7dmFyIGw9XCItXCI9PXVbMF0/dTpjW3VdfHwoY1t1XT11LnJlcGxhY2UocCxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpKSxzPVwiO1wiO1wibnVtYmVyXCIhPXR5cGVvZiBhfHxsLnN0YXJ0c1dpdGgoXCItLVwiKXx8by50ZXN0KGwpfHwocz1cInB4O1wiKSxpPWkrbCtcIjpcIithK3N9fXJldHVybiBlKyc9XCInK24oaSkrJ1wiJ31yZXR1cm4gbnVsbD09dHx8ITE9PT10fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fHxcIm9iamVjdFwiPT10eXBlb2YgdD9cIlwiOiEwPT09dD9lOmUrJz1cIicrbihcIlwiK3QpKydcIid9ZnVuY3Rpb24gcyhyKXtpZihudWxsPT1yfHxcImJvb2xlYW5cIj09dHlwZW9mIHJ8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpcmV0dXJuIG51bGw7aWYoXCJvYmplY3RcIj09dHlwZW9mIHIpe2lmKHZvaWQgMD09PXIuY29uc3RydWN0b3IpcmV0dXJuIHI7aWYoaShyKSl7Zm9yKHZhciBlPTA7ZTxyLmxlbmd0aDtlKyspcltlXT1zKHJbZV0pO3JldHVybiByfX1yZXR1cm4gbihcIlwiK3IpfWV4cG9ydHt1IGFzIGpzeCxsIGFzIGpzeEF0dHIsdSBhcyBqc3hERVYscyBhcyBqc3hFc2NhcGUsYSBhcyBqc3hUZW1wbGF0ZSx1IGFzIGpzeHN9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9anN4UnVudGltZS5tb2R1bGUuanMubWFwXG4iLAogICAgIi8qKlxuICogU3RvcmUgYmFzZSArIFByZWFjdCBjb250ZXh0LlxuICpcbiAqIGBjcmVhdGVTdG9yZWAgaXMgYSB0aGluIGNvbnZlbnRpb24tZW5mb3JjZXI6IGEgdHlwZWQgYmFnIG9mIHNpZ25hbHNcbiAqIHBsdXMgbWV0aG9kcy4gQXBwcyB1c2UgaXQgdG8gZGVmaW5lIGRvbWFpbiBzdG9yZXMgd2hvc2Ugb25seSBwdWJsaWNcbiAqIG11dGF0aW9uIHN1cmZhY2UgaXMgbmFtZWQgbWV0aG9kcyAoYWN0aW9ucyBjYWxsIHRoZW07IGNvbXBvbmVudHMgcmVhZFxuICogc2lnbmFscyBhbmQgZGlzcGF0Y2ggYWN0aW9ucykuIE5vIGNsZXZlcm5lc3Mg4oCUIGEgbmFtZWQgcGF0dGVybiBtb3JlXG4gKiB0aGFuIGEgbGlicmFyeS5cbiAqXG4gKiBgU3RvcmVQcm92aWRlcmAgKyBgdXNlU3RvcmVzYCB3aXJlIHRoZSBzdG9yZXMgYmFnIGludG8gUHJlYWN0IGNvbnRleHRcbiAqIHNvIGNvbXBvbmVudHMgYW5kIHRoZSBkZWxlZ2F0aW9uIHJ1bnRpbWUgY2FuIHJlYWNoIGl0IHZpYSBhIHNpbmdsZSBob29rLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4gfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcblxuLyoqXG4gKiBJZGVudGl0eSBoZWxwZXI7IGV4aXN0cyBzbyBkb21haW4gc3RvcmVzIGhhdmUgYSBjYW5vbmljYWwgY3JlYXRpb25cbiAqIGNhbGwgZXZlbiB0aG91Z2ggdGhlIGJhZyBpdHNlbGYgaXMgYSBwbGFpbiBvYmplY3QuIENlbnRyYWxpc2luZyBoZXJlXG4gKiBsZXRzIHVzIGhhbmcgYWRkaXRpb25hbCBiZWhhdmlvdXIgb2ZmIHRoZSBjYWxsIHNpdGUgbGF0ZXIgKGRlYnVnXG4gKiBpbnN0cnVtZW50YXRpb24sIGRldnRvb2xzKSB3aXRob3V0IGEgbWlncmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RvcmU8VCBleHRlbmRzIG9iamVjdD4oaW5pdDogVCk6IFQge1xuICByZXR1cm4gaW5pdDtcbn1cblxuY29uc3QgU3RvcmVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDx1bmtub3duPihudWxsKTtcblxuZXhwb3J0IHR5cGUgU3RvcmVQcm92aWRlclByb3BzPFRTdG9yZXM+ID0ge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIHN0b3JlczogVFN0b3Jlcztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBTdG9yZVByb3ZpZGVyPFRTdG9yZXM+KHsgY2hpbGRyZW4sIHN0b3JlcyB9OiBTdG9yZVByb3ZpZGVyUHJvcHM8VFN0b3Jlcz4pIHtcbiAgcmV0dXJuIDxTdG9yZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3N0b3Jlc30+e2NoaWxkcmVufTwvU3RvcmVDb250ZXh0LlByb3ZpZGVyPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVN0b3JlczxUU3RvcmVzPigpOiBUU3RvcmVzIHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChTdG9yZUNvbnRleHQpIGFzIHVua25vd24gYXMgVFN0b3JlcyB8IG51bGw7XG4gIGlmIChjdHggPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VTdG9yZXMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFN0b3JlUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGN0eDtcbn1cbiIsCiAgICAiLyoqXG4gKiBBY3Rpb25Gb3JtIOKAlCB3cmFwcyBhIG5hdGl2ZSA8Zm9ybT4gd2l0aCB0aGUgYWN0aW9uIHBhdHRlcm4uXG4gKlxuICogUmVuZGVycyA8Zm9ybSBkYXRhLWFjdGlvbj1cIntmb3JtLm5hbWV9OnN1Ym1pdFwiPiBzbyB0aGUgaW5zdGFsbGVkXG4gKiBldmVudCBkZWxlZ2F0aW9uIGNhdGNoZXMgdGhlIHN1Ym1pdCBldmVudCBhbmQgZGlzcGF0Y2hlcyB0byB0aGVcbiAqIGZvcm0ncyBhdXRvLXJlZ2lzdGVyZWQgOnN1Ym1pdCBoYW5kbGVyLiBgYXJpYS1idXN5YCBtaXJyb3JzIHRoZVxuICogYGlzU3VibWl0dGluZ2Agc2lnbmFsIHNvIGNvbnN1bWVyIHN0eWxpbmcgY2FuIHJlc3BvbmQgd2l0aG91dCBleHRyYVxuICogd2lyaW5nLiBUaGUgZm9ybSBlbGVtZW50IGFsc28gZXhwb3NlcyBgZGF0YS1wb2xseS1hY3Rpb24tZm9ybWAgZm9yXG4gKiBzdGFibGUgc2VsZWN0b3IgaG9va3MuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtU3RvcmUgfSBmcm9tIFwiLi4vYWN0aW9ucy9mb3JtLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9BY3Rpb25Gb3JtLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uRm9ybVByb3BzPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPiA9IHtcbiAgZm9ybTogRm9ybVN0b3JlPFRWYWx1ZXMsIFRTdG9yZXM+O1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxsZWRieVwiPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEFjdGlvbkZvcm08VFZhbHVlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIFRTdG9yZXM+KFxuICBwcm9wczogQWN0aW9uRm9ybVByb3BzPFRWYWx1ZXMsIFRTdG9yZXM+XG4pOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgZm9ybSwgY2hpbGRyZW4sIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuICBjb25zdCBjb21iaW5lZCA9IGNsYXNzTmFtZSA/IGAke2NsYXNzZXNbXCJmb3JtXCJdfSAke2NsYXNzTmFtZX1gIDogY2xhc3Nlc1tcImZvcm1cIl07XG4gIHJldHVybiAoXG4gICAgPGZvcm1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtjb21iaW5lZH1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktYWN0aW9uLWZvcm09e2Zvcm0ubmFtZX1cbiAgICAgIGRhdGEtYWN0aW9uPXtgJHtmb3JtLm5hbWV9OnN1Ym1pdGB9XG4gICAgICBhcmlhLWJ1c3k9e2Zvcm0uaXNTdWJtaXR0aW5nLnZhbHVlfVxuICAgICAgYXJpYS1sYWJlbD17cHJvcHNbXCJhcmlhLWxhYmVsXCJdfVxuICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtwcm9wc1tcImFyaWEtbGFiZWxsZWRieVwiXX1cbiAgICAgIG5vVmFsaWRhdGVcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9mb3JtPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEZpcmUgYSBuYW1lZCBhY3Rpb24gdGhyb3VnaCB0aGUgZ2xvYmFsIGV2ZW50LWRlbGVnYXRpb24gcmVnaXN0cnkuXG4gKlxuICogVGhlIEFjdGlvbiogcHJpbWl0aXZlcyAoPEFjdGlvbklucHV0PiwgPEFjdGlvblNlbGVjdD4pIGNvbW1pdCBieVxuICogY2xpY2tpbmcgYSBkZXRhY2hlZCBgPGJ1dHRvbiBkYXRhLWFjdGlvbj1cIuKAplwiPmAgY2FycnlpbmcgZGF0YS1hY3Rpb24tKlxuICogYXR0cmlidXRlczsgdGhlIGRlbGVnYXRlZCBjbGljayBsaXN0ZW5lciByb3V0ZXMgaXQgaW50byB0aGVcbiAqIGNvbnN1bWVyJ3MgYWN0aW9uIHJlZ2lzdHJ5IHdpdGggbm8gZXh0cmEgd2lyaW5nLiBDZW50cmFsaXNlZCBoZXJlIHNvXG4gKiBldmVyeSBBY3Rpb24qIHByaW1pdGl2ZSBkaXNwYXRjaGVzIGlkZW50aWNhbGx5LlxuICpcbiAqIEtleXMgaW4gYGRhdGFgIGFyZSBjYW1lbENhc2UgYW5kIGNvbnZlcnRlZCB0byBkYXNoLWNhc2UgYXR0cmlidXRlXG4gKiBuYW1lcyDigJQgYGFjdGlvbkRhdGE9e3sgdGFza0lkIH19YCBiZWNvbWVzIGBkYXRhLWFjdGlvbi10YXNrLWlkYC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hBY3Rpb24oYWN0aW9uOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcbiAgY29uc3QgaGlkZGVuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgaGlkZGVuLnNldEF0dHJpYnV0ZShcImRhdGEtYWN0aW9uXCIsIGFjdGlvbik7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgY29uc3QgZGFzaEtleSA9IGtleS5yZXBsYWNlKC9bQS1aXS9nLCAobSkgPT4gYC0ke20udG9Mb3dlckNhc2UoKX1gKTtcbiAgICBoaWRkZW4uc2V0QXR0cmlidXRlKGBkYXRhLWFjdGlvbi0ke2Rhc2hLZXl9YCwgdmFsdWUpO1xuICB9XG4gIGhpZGRlbi5zdHlsZS5wb3NpdGlvbiA9IFwiZml4ZWRcIjtcbiAgaGlkZGVuLnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcbiAgaGlkZGVuLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjtcbiAgaGlkZGVuLnRhYkluZGV4ID0gLTE7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaGlkZGVuKTtcbiAgdHJ5IHtcbiAgICBoaWRkZW4uY2xpY2soKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBoaWRkZW4ucmVtb3ZlKCk7XG4gIH1cbn1cbiIsCiAgICAiLyoqXG4gKiBwb2xseSMxMjU6IGRhdGEtKiAvIGFyaWEtKiBhdHRyaWJ1dGUgcGFzc3Rocm91Z2ggZm9yIFVJIHByaW1pdGl2ZXMuXG4gKlxuICogUHJpbWl0aXZlcyBhY2NlcHQgYSBmaXhlZCBwcm9wIHNldC4gV2l0aG91dCBwYXNzdGhyb3VnaCwgYSBjb25zdW1lclxuICogdGhhdCBuZWVkcyBhIGBkYXRhLSpgIHRlc3QgaG9vayBvciBhbiBgYXJpYS0qYCBhdHRyaWJ1dGUgb24gdGhlXG4gKiBwcmltaXRpdmUncyBvd24gZWxlbWVudCBoYXMgdG8gd3JhcCBpdCBpbiBhbiBleHRyYSBET00gbm9kZSDigJQgYSBzbWVsbC5cbiAqXG4gKiB7QGxpbmsgUGFzc3Rocm91Z2hBdHRyc30gd2lkZW5zIGEgcHJpbWl0aXZlJ3MgcHJvcHMgdG8gYWNjZXB0IGFueVxuICogYGRhdGEtKmAgLyBgYXJpYS0qYCBrZXk7IHtAbGluayBjb2xsZWN0UGFzc3Rocm91Z2h9IGdhdGhlcnMgdGhlbSBmb3JcbiAqIHNwcmVhZGluZyBvbnRvIHRoZSByZW5kZXJlZCByb290IGVsZW1lbnQuIFNwcmVhZCB0aGUgcmVzdWx0ICpiZWZvcmUqXG4gKiB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXMgc28gYSBjb25zdW1lciBrZXkgY2FuIG5ldmVyIG92ZXJyaWRlXG4gKiBvbmUgdGhlIHByaW1pdGl2ZSBzZXRzIGl0c2VsZiAoYGRhdGEtcG9sbHktKmAsIGV0Yy4pLlxuICovXG5cbi8qKiBJbmRleCBzaWduYXR1cmVzIGxldHRpbmcgYSBwcmltaXRpdmUncyBwcm9wcyBhY2NlcHQgYXJiaXRyYXJ5XG4gKiAgYGRhdGEtKmAgYW5kIGBhcmlhLSpgIGF0dHJpYnV0ZXMsIHBsdXMgdGhlIHN0YW5kYXJkIGB0aXRsZWBcbiAqICBhdHRyaWJ1dGUg4oCUIGEgbmF0aXZlIHRvb2x0aXAgaXMgYSBET00gaG9vaywgbm90IHN0eWxpbmcsIHNvIGl0XG4gKiAgcmlkZXMgdGhlIHNhbWUgcGFzc3Rocm91Z2ggcGF0aCAocG9sbHkjMTM1KS4gKi9cbmV4cG9ydCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgPSB7XG4gIFtkYXRhQXR0cjogYGRhdGEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIFthcmlhQXR0cjogYGFyaWEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKiBOYXRpdmUgdG9vbHRpcCB0ZXh0LCBmb3J3YXJkZWQgdG8gdGhlIHJlbmRlcmVkIHJvb3QgZWxlbWVudC4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG59O1xuXG4vKiogS2V5cywgYmV5b25kIHRoZSBgZGF0YS0qYCAvIGBhcmlhLSpgIHByZWZpeGVzLCB0aGF0IHBhc3MgdGhyb3VnaC4gKi9cbmZ1bmN0aW9uIGlzUGFzc3Rocm91Z2hLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGtleS5zdGFydHNXaXRoKFwiZGF0YS1cIikgfHwga2V5LnN0YXJ0c1dpdGgoXCJhcmlhLVwiKSB8fCBrZXkgPT09IFwidGl0bGVcIjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGBkYXRhLSpgIC8gYGFyaWEtKmAgLyBgdGl0bGVgIGF0dHJpYnV0ZXMgZnJvbSBhIHByb3BzIG9iamVjdFxuICogc28gdGhleSBjYW4gYmUgc3ByZWFkIG9udG8gYSBwcmltaXRpdmUncyByb290IGVsZW1lbnQuIGB1bmRlZmluZWRgXG4gKiB2YWx1ZXMgYW5kIG5vbi1hdHRyaWJ1dGUgdmFsdWUgdHlwZXMgKGZ1bmN0aW9ucywgb2JqZWN0cykgYXJlIGRyb3BwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0UGFzc3Rocm91Z2goXG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4ge1xuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+ID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BzKSkge1xuICAgIGlmICghaXNQYXNzdGhyb3VnaEtleShrZXkpKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IHByb3BzW2tleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgb3V0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsCiAgICAiLyoqXG4gKiBBY3Rpb25JbnB1dCDigJQgZHVhbC1tb2RlIHZpZXcvZWRpdCBpbnB1dCB3aXRoIGFjdGlvbiBkaXNwYXRjaCBvbiBjb21taXQuXG4gKlxuICogVmlldyBtb2RlIHJlbmRlcnMgdGhlIGN1cnJlbnQgdmFsdWUgYXMgdGV4dCAob3B0aW9uYWxseSB0aHJvdWdoIGFcbiAqIGNhbGxlci1zdXBwbGllZCBgcmVuZGVyVmlld2AgZm9yIG1hcmtkb3duLCByaWNoIGZvcm1hdHRpbmcsIGV0Yy4pLlxuICogQ2xpY2ssIEVudGVyLCBvciBTcGFjZSBlbnRlcnMgZWRpdCBtb2RlLiBFZGl0IG1vZGUgaXMgYSBuYXRpdmUgaW5wdXRcbiAqIG9yIHRleHRhcmVhOyBjb21taXQgZmlyZXMgdGhlIGNvbmZpZ3VyZWQgYWN0aW9uIHdpdGggYGRhdGEtYWN0aW9uLXZhbHVlYFxuICogYW5kIGBkYXRhLWFjdGlvbi1maWVsZGAgc2V0IGZyb20gRm9ybURhdGEtc2hhcGUgc2VtYW50aWNzLCBzbyB0aGVcbiAqIGV4aXN0aW5nIGV2ZW50IGRlbGVnYXRpb24gaGFuZGxlcyBpdCB3aXRoIG5vIGV4dHJhIHdpcmluZy5cbiAqXG4gKiBgc2F2ZU9uYCBwaWNrcyB0aGUgY29tbWl0IHRyaWdnZXI6XG4gKiAgIFwiYmx1clwiICAgICAgIGNvbW1pdCB3aGVuIHRoZSBmaWVsZCBsb3NlcyBmb2N1c1xuICogICBcImVudGVyXCIgICAgICBjb21taXQgb24gRW50ZXIgKHNpbmdsZS1saW5lKSBvciBDbWQvQ3RybCtFbnRlciAobXVsdGktbGluZSlcbiAqICAgXCJjbWQtZW50ZXJcIiAgY29tbWl0IG9ubHkgb24gQ21kL0N0cmwrRW50ZXJcbiAqICAgXCJleHBsaWNpdFwiICAgbmV2ZXIgYXV0by1jb21taXQg4oCUIGNhbGxlciB3aXJlcyBhIHNhdmUgYnV0dG9uIHdpdGggZGF0YS1hY3Rpb25cbiAqICAgXCJpbnB1dFwiICAgICAgY29tbWl0IG9uIGV2ZXJ5IGtleXN0cm9rZSDigJQgZm9yIGZpbHRlci1hcy15b3UtdHlwZSBmaWVsZHM7XG4gKiAgICAgICAgICAgICAgICB0aGUgZmllbGQgc3RheXMgaW4gZWRpdCBtb2RlIHJhdGhlciB0aGFuIHRvZ2dsaW5nIHRvIHZpZXdcbiAqXG4gKiBgaW5wdXRUeXBlYCBzZXRzIHRoZSBuYXRpdmUgaW5wdXQgdHlwZSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQg4oCUXG4gKiBcInRleHRcIiAoZGVmYXVsdCksIFwiZGF0ZVwiLCBcInRpbWVcIiwgXCJudW1iZXJcIiwgYW5kIGZyaWVuZHMg4oCUIHNvIGEgZGF0ZVxuICogb3IgbnVtZXJpYyBmaWVsZCBjb21taXRzIHRocm91Z2ggdGhlIGFjdGlvbiBzeXN0ZW0gbGlrZSBhbnkgb3RoZXIuXG4gKlxuICogTGF5b3V0LXNoaWZ0LWZyZWU6IHZpZXcgYW5kIGVkaXQgbW9kZXMgc2hhcmUgcGFkZGluZywgYm9yZGVyIHdpZHRoLFxuICogZm9udCwgYW5kIGxpbmUtaGVpZ2h0IHNvIHRoZSB0b2dnbGUgY2F1c2VzIG5vIHJlZmxvdy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9BY3Rpb25JbnB1dC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBkaXNwYXRjaEFjdGlvbiB9IGZyb20gXCIuL2ludGVybmFsL2Rpc3BhdGNoLWFjdGlvbi50c1wiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuXG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFNhdmVPbiA9IFwiYmx1clwiIHwgXCJlbnRlclwiIHwgXCJjbWQtZW50ZXJcIiB8IFwiZXhwbGljaXRcIiB8IFwiaW5wdXRcIjtcbmV4cG9ydCB0eXBlIEFjdGlvbklucHV0VmFyaWFudCA9IFwic2luZ2xlXCIgfCBcIm11bHRpXCI7XG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFR5cGUgPVxuICB8IFwidGV4dFwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcImRhdGV0aW1lLWxvY2FsXCJcbiAgfCBcInRpbWVcIlxuICB8IFwibW9udGhcIlxuICB8IFwid2Vla1wiXG4gIHwgXCJudW1iZXJcIlxuICB8IFwiZW1haWxcIlxuICB8IFwidXJsXCJcbiAgfCBcInRlbFwiO1xuXG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgLyoqIEN1cnJlbnQgdmFsdWUgdG8gcmVuZGVyIGluIHZpZXcgbW9kZSBhbmQgc2VlZCB0aGUgZWRpdCBidWZmZXIuICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBBY3Rpb24gbmFtZSB0byBkaXNwYXRjaCBvbiBjb21taXQuIFJlY2VpdmVzIGRhdGEtYWN0aW9uLXZhbHVlPTxuZXcgdmFsdWU+LiAqL1xuICBhY3Rpb246IHN0cmluZztcbiAgLyoqIENvbW1pdCB0cmlnZ2VyLiBEZWZhdWx0OiBcImJsdXJcIi4gKi9cbiAgc2F2ZU9uPzogQWN0aW9uSW5wdXRTYXZlT247XG4gIHZhcmlhbnQ/OiBBY3Rpb25JbnB1dFZhcmlhbnQ7XG4gIC8qKiBOYXRpdmUgaW5wdXQgdHlwZSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQuIERlZmF1bHQ6IFwidGV4dFwiLiAqL1xuICBpbnB1dFR5cGU/OiBBY3Rpb25JbnB1dFR5cGU7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBFeHRyYSBkYXRhLWFjdGlvbi0qIGF0dHJpYnV0ZXMgdG8gaW5jbHVkZSBhdCBjb21taXQgKGUuZy4gZW50aXR5IGlkKS4gKi9cbiAgYWN0aW9uRGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBDdXN0b20gdmlldyByZW5kZXJlciDigJQgcmVjZWl2ZXMgdmFsdWUsIHJldHVybnMgVk5vZGUuICovXG4gIHJlbmRlclZpZXc/OiAodmFsdWU6IHN0cmluZykgPT4gSlNYLkVsZW1lbnQgfCBzdHJpbmc7XG4gIC8qKiBMYWJlbCBhbm5vdW5jZWQgYnkgc2NyZWVuIHJlYWRlcnMgZm9yIHRoZSBlZGl0IGFmZm9yZGFuY2UuICovXG4gIGFyaWFMYWJlbD86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IHR3byByZW5kZXIgYnJhbmNoZXMgdGltZXMgdHdvIHZhcmlhbnRzIHRpbWVzIGZpdmUgc2F2ZU9uIHRyaWdnZXJzOyBicmFuY2hpbmcgaXMgaW5oZXJlbnQgdG8gdGhlIHByaW1pdGl2ZS5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25JbnB1dChwcm9wczogQWN0aW9uSW5wdXRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgdmFyaWFudCA9IHByb3BzLnZhcmlhbnQgPz8gXCJzaW5nbGVcIjtcbiAgY29uc3Qgc2F2ZU9uID0gcHJvcHMuc2F2ZU9uID8/IFwiYmx1clwiO1xuICAvLyBcImlucHV0XCIgbW9kZSBpcyBhIHBlcm1hbmVudGx5LWVkaXRhYmxlIGZpbHRlciBmaWVsZCDigJQgaXQgbmV2ZXIgaGFzIGFcbiAgLy8gdmlldyBtb2RlIHRvIHRvZ2dsZSBiYWNrIHRvLCBzbyBpdCBzdGFydHMgaW4gZWRpdC5cbiAgY29uc3QgbGl2ZSA9IHNhdmVPbiA9PT0gXCJpbnB1dFwiO1xuICBjb25zdCBbbW9kZSwgc2V0TW9kZV0gPSB1c2VTdGF0ZTxcInZpZXdcIiB8IFwiZWRpdFwiPihsaXZlID8gXCJlZGl0XCIgOiBcInZpZXdcIik7XG4gIGNvbnN0IFtkcmFmdCwgc2V0RHJhZnRdID0gdXNlU3RhdGUocHJvcHMudmFsdWUpO1xuICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1vZGUgPT09IFwidmlld1wiKSBzZXREcmFmdChwcm9wcy52YWx1ZSk7XG4gIH0sIFtwcm9wcy52YWx1ZSwgbW9kZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gRG9uJ3Qgc3RlYWwgZm9jdXMgb24gbW91bnQgZm9yIGEgbGl2ZSBmaWx0ZXIgZmllbGQ7IG9ubHkgcHVsbCBmb2N1c1xuICAgIC8vIHdoZW4gdGhlIHVzZXIgaGFzIGV4cGxpY2l0bHkgdG9nZ2xlZCBhIHZpZXcgZmllbGQgaW50byBlZGl0IG1vZGUuXG4gICAgaWYgKG1vZGUgPT09IFwiZWRpdFwiICYmICFsaXZlICYmIGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuc2VsZWN0Py4oKTtcbiAgICB9XG4gIH0sIFttb2RlLCBsaXZlXSk7XG5cbiAgY29uc3QgZW50ZXJFZGl0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChwcm9wcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIHNldERyYWZ0KHByb3BzLnZhbHVlKTtcbiAgICBzZXRNb2RlKFwiZWRpdFwiKTtcbiAgfSwgW3Byb3BzLmRpc2FibGVkLCBwcm9wcy52YWx1ZV0pO1xuXG4gIGNvbnN0IGNvbW1pdCA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChuZXh0ICE9PSBwcm9wcy52YWx1ZSkge1xuICAgICAgICBkaXNwYXRjaEFjdGlvbihwcm9wcy5hY3Rpb24sIHsgLi4uKHByb3BzLmFjdGlvbkRhdGEgPz8ge30pLCB2YWx1ZTogbmV4dCB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEEgbGl2ZSBmaWx0ZXIgZmllbGQgc3RheXMgZWRpdGFibGU7IGV2ZXJ5IG90aGVyIHRyaWdnZXIgcmV0dXJuc1xuICAgICAgLy8gdG8gdmlldyBtb2RlIG9uY2UgdGhlIHZhbHVlIGlzIGNvbW1pdHRlZC5cbiAgICAgIGlmICghbGl2ZSkgc2V0TW9kZShcInZpZXdcIik7XG4gICAgfSxcbiAgICBbcHJvcHMuYWN0aW9uLCBwcm9wcy5hY3Rpb25EYXRhLCBwcm9wcy52YWx1ZSwgbGl2ZV1cbiAgKTtcblxuICBjb25zdCBjYW5jZWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0RHJhZnQocHJvcHMudmFsdWUpO1xuICAgIGlmICghbGl2ZSkgc2V0TW9kZShcInZpZXdcIik7XG4gIH0sIFtwcm9wcy52YWx1ZSwgbGl2ZV0pO1xuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBrZXlib2FyZCBoYW5kbGVyIGVuY29kZXMgdGhlIHNhdmVPbiDDlyB2YXJpYW50IG1hdHJpeC5cbiAgY29uc3Qgb25LZXlEb3duID0gKGV2ZW50OiBKU1guVGFyZ2V0ZWRLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjYW5jZWwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBjb25zdCBjbWQgPSBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXk7XG4gICAgICBpZiAoc2F2ZU9uID09PSBcImVudGVyXCIgJiYgdmFyaWFudCA9PT0gXCJzaW5nbGVcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb21taXQoZHJhZnQpO1xuICAgICAgfSBlbHNlIGlmICgoc2F2ZU9uID09PSBcImVudGVyXCIgJiYgdmFyaWFudCA9PT0gXCJtdWx0aVwiICYmIGNtZCkgfHwgc2F2ZU9uID09PSBcImNtZC1lbnRlclwiKSB7XG4gICAgICAgIGlmIChjbWQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGNvbW1pdChkcmFmdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lID8gYCR7Y2xhc3Nlc1tcInJvb3RcIl19ICR7cHJvcHMuY2xhc3NOYW1lfWAgOiBjbGFzc2VzW1wicm9vdFwiXTtcblxuICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIGZvcndhcmRlZCBvbnRvIHdoaWNoZXZlciBlbGVtZW50IGlzIHRoZSByb290XG4gIC8vIGZvciB0aGUgY3VycmVudCBtb2RlOyB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXMgd2luIG9uIGNvbGxpc2lvbi5cbiAgY29uc3QgcGFzc3Rocm91Z2ggPSBjb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpO1xuXG4gIGlmIChtb2RlID09PSBcInZpZXdcIikge1xuICAgIGNvbnN0IHJlbmRlcmVkID0gcHJvcHMucmVuZGVyVmlldyA/IHByb3BzLnJlbmRlclZpZXcocHJvcHMudmFsdWUpIDogcHJvcHMudmFsdWU7XG4gICAgY29uc3QgaXNFbXB0eSA9IHByb3BzLnZhbHVlLmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4gKFxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS91c2VTZW1hbnRpY0VsZW1lbnRzOiA8YnV0dG9uPiB3b3VsZCBzd2FsbG93IHRleHQgc2VsZWN0aW9uIGFuZCBhZGQgZGVmYXVsdCBzdHlsaW5nOyBkaXYgd2l0aCByb2xlPWJ1dHRvbiBpcyB0aGUgaW5saW5lLWVkaXQgaWRpb20uXG4gICAgICA8ZGl2XG4gICAgICAgIHsuLi5wYXNzdGhyb3VnaH1cbiAgICAgICAgY2xhc3M9e2Ake2NsYXNzTmFtZX0gJHtjbGFzc2VzW1widmlld1wiXX1gfVxuICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgIGRhdGEtcG9sbHktYWN0aW9uLWlucHV0XG4gICAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgICAgZGF0YS1zdGF0ZT17aXNFbXB0eSA/IFwiZW1wdHlcIiA6IFwiZmlsbGVkXCJ9XG4gICAgICAgIGRhdGEtdmFyaWFudD17dmFyaWFudH1cbiAgICAgICAgdGFiSW5kZXg9e3Byb3BzLmRpc2FibGVkID8gLTEgOiAwfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgYXJpYS1sYWJlbD17cHJvcHMuYXJpYUxhYmVsID8/IFwiRWRpdFwifVxuICAgICAgICBhcmlhLWRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZCA/IFwidHJ1ZVwiIDogdW5kZWZpbmVkfVxuICAgICAgICBvbkNsaWNrPXtlbnRlckVkaXR9XG4gICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIiB8fCBlLmtleSA9PT0gXCIgXCIpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGVudGVyRWRpdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2lzRW1wdHkgJiYgcHJvcHMucGxhY2Vob2xkZXIgPyAoXG4gICAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJwbGFjZWhvbGRlclwiXX0+e3Byb3BzLnBsYWNlaG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICByZW5kZXJlZFxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNvbW1vbiA9IHtcbiAgICAuLi5wYXNzdGhyb3VnaCxcbiAgICBjbGFzczogYCR7Y2xhc3Nlc1tcImVkaXRcIl19ICR7Y2xhc3Nlc1tcInJvb3RcIl19YCxcbiAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9sbHktYWN0aW9uLWlucHV0XCI6IHRydWUsXG4gICAgXCJkYXRhLXN0YXRlXCI6IFwiZWRpdGluZ1wiLFxuICAgIFwiZGF0YS12YXJpYW50XCI6IHZhcmlhbnQsXG4gICAgcGxhY2Vob2xkZXI6IHByb3BzLnBsYWNlaG9sZGVyLFxuICAgIHZhbHVlOiBkcmFmdCxcbiAgICBvbklucHV0OiAoZTogSlNYLlRhcmdldGVkRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgICAgc2V0RHJhZnQobmV4dCk7XG4gICAgICBpZiAobGl2ZSkgY29tbWl0KG5leHQpO1xuICAgIH0sXG4gICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICBpZiAoc2F2ZU9uID09PSBcImJsdXJcIikgY29tbWl0KGRyYWZ0KTtcbiAgICAgIGVsc2UgaWYgKCFsaXZlKSBjYW5jZWwoKTtcbiAgICB9LFxuICAgIG9uS2V5RG93bixcbiAgICBcImFyaWEtbGFiZWxcIjogcHJvcHMuYXJpYUxhYmVsID8/IFwiRWRpdFwiLFxuICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCxcbiAgfTtcblxuICBpZiAodmFyaWFudCA9PT0gXCJtdWx0aVwiKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICByZWY9eyhlbCkgPT4ge1xuICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQgPSBlbDtcbiAgICAgICAgfX1cbiAgICAgICAgey4uLihjb21tb24gYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTFRleHRBcmVhRWxlbWVudD4pfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICByZWY9eyhlbCkgPT4ge1xuICAgICAgICBpbnB1dFJlZi5jdXJyZW50ID0gZWw7XG4gICAgICB9fVxuICAgICAgdHlwZT17cHJvcHMuaW5wdXRUeXBlID8/IFwidGV4dFwifVxuICAgICAgey4uLihjb21tb24gYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTElucHV0RWxlbWVudD4pfVxuICAgIC8+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogTGF5b3V0IOKAlCB0aGUgb25lIHByaW1pdGl2ZSB0aGF0IG93bnMgbGF5b3V0aW5nIGNvbmNlcm5zLlxuICpcbiAqIEV2ZXJ5IG90aGVyIGNvbXBvbmVudCBpbiBAZmFpcmZveC9wb2xseS91aSAoYW5kIGV2ZXJ5IGNvbnN1bWVyIGFwcFxuICogdGhhdCBydW5zIGBwb2xseSBxdWFsaXR5IGNzcy1sYXlvdXRgKSByb3V0ZXMgZmxleC9ncmlkIGRlY2lzaW9uc1xuICogdGhyb3VnaCB0aGlzIGNvbXBvbmVudC4gUHJvcHMgbWFwIHRvIENTUyBjdXN0b20gcHJvcGVydGllcyBzbyB0aGVcbiAqIHN0eWxlc2hlZXQgY2FuIHJlYWQgdGhlbSB1bmlmb3JtbHkgYW5kIHNvIGNvbnN1bWVycyBjYW4gb3ZlcnJpZGVcbiAqIGFueSBvZiB0aGVtIGluIG1lZGlhIHF1ZXJpZXMgd2l0aG91dCB0b3VjaGluZyBzcGVjaWZpY2l0eS5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIENvbXBvbmVudENoaWxkcmVuLCBjcmVhdGVFbGVtZW50LCB0eXBlIEpTWCwgdHlwZSBSZWYgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9MYXlvdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBMYXlvdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoZGl2LCBzZWN0aW9uLCBoZWFkZXIsIG5hdiwg4oCmKS4gRGVmYXVsdHMgdG8gJ2RpdicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuXG4gIC8qKiBDU1MgZ3JpZCBzdHJ1Y3R1cmUuICovXG4gIHJvd3M/OiBzdHJpbmc7XG4gIGNvbHVtbnM/OiBzdHJpbmc7XG4gIGF1dG9GbG93Pzogc3RyaW5nO1xuICBhdXRvUm93cz86IHN0cmluZztcbiAgYXV0b0NvbHVtbnM/OiBzdHJpbmc7XG5cbiAgLyoqIGRpc3BsYXk6IGNvbnRlbnRzIOKAlCBsZXRzIGNoaWxkcmVuIHBhcnRpY2lwYXRlIGluIGFuIGFuY2VzdG9yIGdyaWQuICovXG4gIGNvbnRlbnRzPzogYm9vbGVhbjtcbiAgLyoqIEluaGVyaXQgcGFyZW50IGdyaWQgdHJhY2tzIHZpYSBDU1Mgc3ViZ3JpZC4gKi9cbiAgc3ViZ3JpZD86IGJvb2xlYW47XG5cbiAgLyoqIFNwYWNpbmcuICovXG4gIGdhcD86IHN0cmluZztcbiAgcGFkZGluZz86IHN0cmluZztcblxuICAvKiogU2l6aW5nLiAqL1xuICBoZWlnaHQ/OiBzdHJpbmc7XG4gIG1pbkhlaWdodD86IHN0cmluZztcbiAgLyoqXG4gICAqIENhcCB0aGUgaW5saW5lIHNpemUgYW5kIGNlbnRyZSB3aXRoaW4gdGhlIHBhcmVudC4gVHlwaWNhbCB2YWx1ZXMgdXNlIHRoZVxuICAgKiBgLS1wb2xseS1tZWFzdXJlLSpgIHRva2VucyAoZS5nLiBcInZhcigtLXBvbGx5LW1lYXN1cmUtcGFnZSlcIiBmb3IgYW4gYXBwXG4gICAqIHNoZWxsLCBcInZhcigtLXBvbGx5LW1lYXN1cmUtcHJvc2UpXCIgZm9yIGJvZHkgY29weSkuIEFueSBDU1MgbGVuZ3RoIHdvcmtzLlxuICAgKi9cbiAgbWF4SW5saW5lU2l6ZT86IHN0cmluZztcblxuICAvKiogQ29udGFpbmVyIGFsaWdubWVudC4gKi9cbiAganVzdGlmeUl0ZW1zPzogc3RyaW5nO1xuICBhbGlnbkl0ZW1zPzogc3RyaW5nO1xuICBqdXN0aWZ5Q29udGVudD86IHN0cmluZztcbiAgYWxpZ25Db250ZW50Pzogc3RyaW5nO1xuXG4gIC8qKiBTZWxmIGFsaWdubWVudCAod2hlbiB0aGlzIExheW91dCBpcyBhbiBpdGVtIGluIGEgcGFyZW50IGdyaWQpLiAqL1xuICBqdXN0aWZ5U2VsZj86IHN0cmluZztcbiAgYWxpZ25TZWxmPzogc3RyaW5nO1xuXG4gIC8qKiBDb2xsYXBzZSB0byBhIHNpbmdsZSBjb2x1bW4gYXQg4omkNjQwcHguICovXG4gIHN0YWNrT25Nb2JpbGU/OiBib29sZWFuO1xuXG4gIC8qKiBSZW5kZXIgYXMgZGlzcGxheTogaW5saW5lLWdyaWQgc28gdGhlIExheW91dCBmbG93cyBpbmxpbmUgd2l0aCBzdXJyb3VuZGluZyB0ZXh0L2NvbnRyb2xzLiAqL1xuICBpbmxpbmU/OiBib29sZWFuO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgb25DbGljaz86IEpTWC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gIG9uS2V5RG93bj86IEpTWC5LZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gIG9uS2V5VXA/OiBKU1guS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICAvKiogUG9pbnRlci1lbnRlci9sZWF2ZSBvbiB0aGUgY29udGFpbmVyIGl0c2VsZiDigJQgYSBob3Zlci1zY29wZWQgYmVoYXZpb3VyXG4gICAqIHN1Y2ggYXMgcGF1c2luZyBhIHRpbWVyIHdoaWxlIHRoZSBwb2ludGVyIGlzIG92ZXIgYSBzdGFjay4gV2l0aG91dCB0aGVzZVxuICAgKiBhIGNvbXBvbmVudCB0aGF0IG5lZWRzIG9uZSBoYXMgdG8gcmVuZGVyIGl0cyBvd24gZWxlbWVudCBhbmQgd3JpdGUgaXRzXG4gICAqIG93biBncmlkLCB3aGljaCBpcyB0aGUgbG9vcGhvbGUgPExheW91dD4gZXhpc3RzIHRvIGNsb3NlLiAqL1xuICBvbk1vdXNlRW50ZXI/OiBKU1guTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICBvbk1vdXNlTGVhdmU/OiBKU1guTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICAvKiogUmVmIHRvIHRoZSByZW5kZXJlZCBlbGVtZW50LiBTYW1lIHJlYXNvbiBhcyB0aGUgaGFuZGxlcnMgYWJvdmU6IGEgZm9jdXNcbiAgICogdHJhcCBvciBhIG1lYXN1cmVtZW50IG5lZWRzIHRoZSBub2RlLCBhbmQgcmVmdXNpbmcgaXQgZm9yY2VzIHJhdyBDU1MuXG4gICAqXG4gICAqIE5hbWVkIGBlbGVtZW50UmVmYCwgbm90IGByZWZgOiBQcmVhY3QgbGlmdHMgYSBgcmVmYCBwcm9wIG9mZiBhIGZ1bmN0aW9uXG4gICAqIGNvbXBvbmVudCBpbnRvIHRoZSB2bm9kZSBhbmQgbmV2ZXIgcGFzc2VzIGl0IHRocm91Z2ggcHJvcHMsIHNvIGEgcGxhaW5cbiAgICogYHJlZmAgaGVyZSB3b3VsZCBiZSBzaWxlbnRseSBkcm9wcGVkLiBDYXVnaHQgYnkgTW9kYWwncyBvdmVybGF5IHRlc3Qg4oCUXG4gICAqIHRoZSBzdGFjayBzdG9wcGVkIHBvcHBpbmcgYmVjYXVzZSB0aGUgY2FsbGJhY2sgbmV2ZXIgcmFuLiAqL1xuICBlbGVtZW50UmVmPzogUmVmPEhUTUxFbGVtZW50PjtcblxuICByb2xlPzogSlNYLkFyaWFSb2xlO1xuICB0YWJJbmRleD86IG51bWJlcjtcbiAgaWQ/OiBzdHJpbmc7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxsZWRieVwiPzogc3RyaW5nO1xuICBcImFyaWEtZGVzY3JpYmVkYnlcIj86IHN0cmluZztcbn07XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBzaXh0ZWVuIG9wdGlvbmFsIHByb3AtdG8tY3VzdG9tLXByb3BlcnR5IG1hcHBpbmdzOyBmbGF0IGFuZCBsaW5lYXIuXG5leHBvcnQgZnVuY3Rpb24gTGF5b3V0KHByb3BzOiBMYXlvdXRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGFzID0gXCJkaXZcIixcbiAgICByb3dzLFxuICAgIGNvbHVtbnMsXG4gICAgY29udGVudHMsXG4gICAgc3ViZ3JpZCxcbiAgICBnYXAsXG4gICAgcGFkZGluZyxcbiAgICBoZWlnaHQsXG4gICAgbWluSGVpZ2h0LFxuICAgIG1heElubGluZVNpemUsXG4gICAganVzdGlmeUl0ZW1zLFxuICAgIGFsaWduSXRlbXMsXG4gICAganVzdGlmeUNvbnRlbnQsXG4gICAgYWxpZ25Db250ZW50LFxuICAgIGp1c3RpZnlTZWxmLFxuICAgIGFsaWduU2VsZixcbiAgICBhdXRvRmxvdyxcbiAgICBhdXRvUm93cyxcbiAgICBhdXRvQ29sdW1ucyxcbiAgICBzdGFja09uTW9iaWxlLFxuICAgIGlubGluZSxcbiAgICBjbGFzc05hbWUsXG4gICAgb25DbGljayxcbiAgICBvbktleURvd24sXG4gICAgb25LZXlVcCxcbiAgICBvbk1vdXNlRW50ZXIsXG4gICAgb25Nb3VzZUxlYXZlLFxuICAgIGVsZW1lbnRSZWYsXG4gICAgcm9sZSxcbiAgICB0YWJJbmRleCxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgaWYgKGNvbnRlbnRzKSB7XG4gICAgc3R5bGVbXCJkaXNwbGF5XCJdID0gXCJjb250ZW50c1wiO1xuICB9IGVsc2UgaWYgKHN1YmdyaWQpIHtcbiAgICBzdHlsZVtcIi0tbC1jb2xcIl0gPSBcIjEgLyAtMVwiO1xuICAgIHN0eWxlW1wiLS1sLWNvbHNcIl0gPSBcInN1YmdyaWRcIjtcbiAgICBpZiAocGFkZGluZykgc3R5bGVbXCItLWwtcFwiXSA9IHBhZGRpbmc7XG4gICAgaWYgKGFsaWduSXRlbXMpIHN0eWxlW1wiLS1sLWFpXCJdID0gYWxpZ25JdGVtcztcbiAgICBpZiAoZ2FwKSBzdHlsZVtcIi0tbC1nYXBcIl0gPSBnYXA7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHBhZGRpbmcpIHN0eWxlW1wiLS1sLXBcIl0gPSBwYWRkaW5nO1xuICAgIGlmIChoZWlnaHQpIHN0eWxlW1wiLS1sLWhcIl0gPSBoZWlnaHQ7XG4gICAgaWYgKG1pbkhlaWdodCkgc3R5bGVbXCItLWwtbWhcIl0gPSBtaW5IZWlnaHQ7XG4gICAgaWYgKG1heElubGluZVNpemUpIHN0eWxlW1wiLS1sLW1pc1wiXSA9IG1heElubGluZVNpemU7XG4gICAgaWYgKHJvd3MpIHN0eWxlW1wiLS1sLXJvd3NcIl0gPSByb3dzO1xuICAgIGlmIChjb2x1bW5zKSBzdHlsZVtcIi0tbC1jb2xzXCJdID0gY29sdW1ucztcbiAgICBpZiAoZ2FwKSBzdHlsZVtcIi0tbC1nYXBcIl0gPSBnYXA7XG4gICAgaWYgKGp1c3RpZnlJdGVtcykgc3R5bGVbXCItLWwtamlcIl0gPSBqdXN0aWZ5SXRlbXM7XG4gICAgaWYgKGFsaWduSXRlbXMpIHN0eWxlW1wiLS1sLWFpXCJdID0gYWxpZ25JdGVtcztcbiAgICBpZiAoanVzdGlmeUNvbnRlbnQpIHN0eWxlW1wiLS1sLWpjXCJdID0ganVzdGlmeUNvbnRlbnQ7XG4gICAgaWYgKGFsaWduQ29udGVudCkgc3R5bGVbXCItLWwtYWNcIl0gPSBhbGlnbkNvbnRlbnQ7XG4gICAgaWYgKGF1dG9GbG93KSBzdHlsZVtcIi0tbC1mbG93XCJdID0gYXV0b0Zsb3c7XG4gICAgaWYgKGF1dG9Sb3dzKSBzdHlsZVtcIi0tbC1hcm93c1wiXSA9IGF1dG9Sb3dzO1xuICAgIGlmIChhdXRvQ29sdW1ucykgc3R5bGVbXCItLWwtYWNvbHNcIl0gPSBhdXRvQ29sdW1ucztcbiAgfVxuICBpZiAoanVzdGlmeVNlbGYpIHN0eWxlW1wiLS1sLWpzXCJdID0ganVzdGlmeVNlbGY7XG4gIGlmIChhbGlnblNlbGYpIHN0eWxlW1wiLS1sLWFzXCJdID0gYWxpZ25TZWxmO1xuXG4gIGNvbnN0IGJhc2VQYXJ0cyA9IFtjbGFzc2VzW1wibGF5b3V0XCJdXTtcbiAgaWYgKGlubGluZSkgYmFzZVBhcnRzLnB1c2goY2xhc3Nlc1tcImlubGluZVwiXSk7XG4gIGlmIChzdGFja09uTW9iaWxlKSBiYXNlUGFydHMucHVzaChjbGFzc2VzW1wic3RhY2tPbk1vYmlsZVwiXSk7XG4gIGNvbnN0IGJhc2VDbGFzcyA9IGJhc2VQYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG4gIGNvbnN0IGNvbWJpbmVkID0gY29udGVudHMgPyBjbGFzc05hbWUgOiBjbGFzc05hbWUgPyBgJHtiYXNlQ2xhc3N9ICR7Y2xhc3NOYW1lfWAgOiBiYXNlQ2xhc3M7XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKi90aXRsZSBmaXJzdDsgdGhlIHByaW1pdGl2ZSdzIG93blxuICAgICAgLy8gYXR0cmlidXRlcyBiZWxvdyB3aW4gb24gYW55IGNvbGxpc2lvbi5cbiAgICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgICBpZCxcbiAgICAgIGNsYXNzTmFtZTogY29tYmluZWQsXG4gICAgICBzdHlsZSxcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvbktleURvd24sXG4gICAgICBvbktleVVwLFxuICAgICAgb25Nb3VzZUVudGVyLFxuICAgICAgb25Nb3VzZUxlYXZlLFxuICAgICAgcmVmOiBlbGVtZW50UmVmLFxuICAgICAgcm9sZSxcbiAgICAgIHRhYkluZGV4LFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzW1wiYXJpYS1sYWJlbFwiXSxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHByb3BzW1wiYXJpYS1sYWJlbGxlZGJ5XCJdLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzW1wiYXJpYS1kZXNjcmliZWRieVwiXSxcbiAgICAgIFwiZGF0YS1wb2xseS1sYXlvdXRcIjogdHJ1ZSxcbiAgICB9LFxuICAgIGNoaWxkcmVuXG4gICk7XG59XG4iLAogICAgIi8qKlxuICogRHJvcGRvd24g4oCUIHRyaWdnZXIgYnV0dG9uICsgcG9wb3ZlciBtZW51IHVzaW5nIHRoZSBuYXRpdmUgUG9wb3ZlciBBUEkuXG4gKlxuICogQSBzaG93biBwb3BvdmVyIGlzIHByb21vdGVkIHRvIHRoZSBicm93c2VyJ3MgdG9wIGxheWVyLCB3aGVyZSBDU1NcbiAqIHBvc2l0aW9uaW5nIHJlc29sdmVzIGFnYWluc3QgdGhlIHZpZXdwb3J0IHJhdGhlciB0aGFuIHRoZSBgLmRyb3Bkb3duYFxuICogd3JhcHBlciDigJQgc28gdGhlIG1lbnUgY2Fubm90IGJlIHBsYWNlZCB3aXRoIGBwb3NpdGlvbjogYWJzb2x1dGVgXG4gKiBhbG9uZS4gSW5zdGVhZCBpdCBpcyBwaW5uZWQgd2l0aCBgcG9zaXRpb246IGZpeGVkYCBhbmQgY29vcmRpbmF0ZXNcbiAqIG1lYXN1cmVkIGZyb20gdGhlIHRyaWdnZXI7IHNlZSBgcG9zaXRpb25NZW51YCBiZWxvdyAoaXNzdWUgIzEyOCkuXG4gKlxuICogVGhlIG1lbnUgZWxlbWVudCBnZXRzIGBwb3BvdmVyPVwiYXV0b1wiYCBhbmQgYSB1bmlxdWUgYGRhdGEtb3ZlcmxheS1pZGAuXG4gKiBgY2xvc2VUb3BPdmVybGF5KClgIGZyb20gQGZhaXJmb3gvcG9sbHkvYWN0aW9ucyBmaW5kcyB0aGUgdG9wbW9zdFxuICogYFtkYXRhLW92ZXJsYXktaWRdYCBlbGVtZW50IGFuZCBkaXNwYXRjaGVzIGBvdmVybGF5OmNsb3NlYCDigJQgdGhlXG4gKiBEcm9wZG93biBsaXN0ZW5zIGZvciB0aGF0IGV2ZW50IGFuZCBtaXJyb3JzIGl0IG9udG8gdGhlIGBpc09wZW5gXG4gKiBzaWduYWwuIEluIHNpbmdsZS1zZWxlY3QgbW9kZSwgY2xpY2tpbmcgdGhlIG1lbnUgY2xvc2VzIGl0OyBpblxuICogbXVsdGktc2VsZWN0IG1vZGUsIHRoZSBtZW51IHN0YXlzIG9wZW4gc28gdGhlIGNvbnN1bWVyIGNhbiBwaWNrXG4gKiBzZXZlcmFsIGl0ZW1zLlxuICovXG5cbmltcG9ydCB7IHR5cGUgU2lnbmFsLCB1c2VTaWduYWxFZmZlY3QgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0Ryb3Bkb3duLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgRHJvcGRvd25Qcm9wcyA9IHtcbiAgaXNPcGVuOiBTaWduYWw8Ym9vbGVhbj47XG4gIHRyaWdnZXI6IENvbXBvbmVudENoaWxkcmVuO1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XG4gIG11bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byB0aGUgdHJpZ2dlciA8YnV0dG9uPiBpbiBwbGFjZSBvZiBEcm9wZG93bidzIG93blxuICAgKiBkZWZhdWx0LiBMZXRzIGEgY29tcG9zaW5nIGNvbXBvbmVudCAoU2VsZWN0LCBBY3Rpb25TZWxlY3QpIHN0eWxlXG4gICAqIHRoZSBzaW5nbGUgaW50ZXJhY3RpdmUgZWxlbWVudCBkaXJlY3RseSwgd2l0aCBubyBzdHlsZWQgbm9kZVxuICAgKiBuZXN0ZWQgaW5zaWRlIHRoZSBidXR0b24uIFRoZSB0cmlnZ2VyIGFsc28gY2FycmllcyBhXG4gICAqIGBkYXRhLW9wZW49XCJ0cnVlfGZhbHNlXCJgIGF0dHJpYnV0ZSBtaXJyb3JpbmcgYGlzT3BlbmAsIHNvIHRoZVxuICAgKiBjbGFzcyBjYW4gc3R5bGUgb3Blbi1zdGF0ZSBhZmZvcmRhbmNlcyAoZS5nLiBhIHJvdGF0aW5nIGNhcmV0KS5cbiAgICovXG4gIHRyaWdnZXJDbGFzc05hbWU/OiBzdHJpbmc7XG4gIC8qKiBEaXNhYmxlcyB0aGUgdHJpZ2dlciA8YnV0dG9uPi4gKi9cbiAgdHJpZ2dlckRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE5hdGl2ZSBob3ZlciB0b29sdGlwIG9uIHRoZSB0cmlnZ2VyIDxidXR0b24+LiBTZWxlY3QvQWN0aW9uU2VsZWN0XG4gICAqIHBhc3MgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHNvIGEgdHJ1bmNhdGVkIHRyaWdnZXIgc3RpbGwgcmV2ZWFscyBpdHNcbiAgICogZnVsbCB2YWx1ZSBvbiBob3Zlci5cbiAgICovXG4gIHRyaWdnZXJUaXRsZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5sZXQgZHJvcGRvd25Db3VudGVyID0gMDtcblxuLyoqIEdhcCBpbiBweCB0aGUgbWVudSBsZWF2ZXMgYmV0d2VlbiBpdHNlbGYgYW5kIHRoZSB0cmlnZ2VyLiAqL1xuY29uc3QgTUVOVV9HQVAgPSA0O1xuLyoqIE1pbmltdW0gZ2FwIGluIHB4IHRoZSBtZW51IGtlZXBzIGZyb20gZXZlcnkgdmlld3BvcnQgZWRnZS4gKi9cbmNvbnN0IFZJRVdQT1JUX1BBRERJTkcgPSA4O1xuXG5leHBvcnQgZnVuY3Rpb24gRHJvcGRvd24ocHJvcHM6IERyb3Bkb3duUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBpc09wZW4sXG4gICAgdHJpZ2dlcixcbiAgICBjaGlsZHJlbixcbiAgICBhbGlnbiA9IFwibGVmdFwiLFxuICAgIG11bHRpU2VsZWN0ID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIHRyaWdnZXJDbGFzc05hbWUsXG4gICAgdHJpZ2dlckRpc2FibGVkID0gZmFsc2UsXG4gICAgdHJpZ2dlclRpdGxlLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgbWVudVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHRyaWdnZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBpZFJlZiA9IHVzZVJlZihgcG9sbHktZHJvcGRvd24tJHsrK2Ryb3Bkb3duQ291bnRlcn1gKTtcbiAgY29uc3QgcG9wb3ZlcklkID0gaWRSZWYuY3VycmVudDtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHRyaWdnZXJSZWYuY3VycmVudD8uc2V0QXR0cmlidXRlKFwicG9wb3ZlcnRhcmdldFwiLCBwb3BvdmVySWQpO1xuICB9LCBbcG9wb3ZlcklkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZW51ID0gbWVudVJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSkgcmV0dXJuO1xuICAgIGNvbnN0IG9uT3ZlcmxheUNsb3NlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEN1c3RvbUV2ZW50ICYmIGUuZGV0YWlsPy5pZCA9PT0gcG9wb3ZlcklkKSB7XG4gICAgICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgbWVudS5hZGRFdmVudExpc3RlbmVyKFwib3ZlcmxheTpjbG9zZVwiLCBvbk92ZXJsYXlDbG9zZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIG1lbnUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm92ZXJsYXk6Y2xvc2VcIiwgb25PdmVybGF5Q2xvc2UpO1xuICAgIH07XG4gIH0sIFtwb3BvdmVySWQsIGlzT3Blbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWVudSA9IG1lbnVSZWYuY3VycmVudDtcbiAgICBjb25zdCB0cmlnZ2VyID0gdHJpZ2dlclJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSB8fCAhdHJpZ2dlcikgcmV0dXJuO1xuXG4gICAgLy8gUGluIHRoZSB0b3AtbGF5ZXIgbWVudSB0byBpdHMgdHJpZ2dlciB3aXRoIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICAgIC8vIFJ1biBmcm9tIGBiZWZvcmV0b2dnbGVgIHRoaXMgaGFwcGVucyBzeW5jaHJvbm91c2x5IGJlZm9yZSB0aGVcbiAgICAvLyBwb3BvdmVyIHBhaW50cywgc28gdGhlIG1lbnUgaXMgY29ycmVjdCBvbiBpdHMgZmlyc3QgZnJhbWUg4oCUIG5vXG4gICAgLy8gZmxhc2guIFJ1biBmcm9tIHNjcm9sbC9yZXNpemUgaXQga2VlcHMgdGhlIG1lbnUgcGlubmVkLlxuICAgIGNvbnN0IHBvc2l0aW9uTWVudSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHQgPSB0cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAvLyBBIG5vdC15ZXQtc2hvd24gcG9wb3ZlciBpcyBgZGlzcGxheTogbm9uZWAgYW5kIGhhcyBubyBib3ggdG9cbiAgICAgIC8vIG1lYXN1cmUuIEZvcmNlIGxheW91dCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSAoc3luY2hyb25vdXMpXG4gICAgICAvLyByZWFkLCB0aGVuIHJlc3RvcmUg4oCUIG5vdGhpbmcgcGFpbnRzIGluIGJldHdlZW4uIENsZWFyaW5nIHRoZVxuICAgICAgLy8gaW5saW5lIG1heC1oZWlnaHQgZmlyc3QgbWVhc3VyZXMgdGhlIG1lbnUncyBuYXR1cmFsIHNpemUuXG4gICAgICBjb25zdCBwcmV2RGlzcGxheSA9IG1lbnUuc3R5bGUuZGlzcGxheTtcbiAgICAgIG1lbnUuc3R5bGUubWF4SGVpZ2h0ID0gXCJcIjtcbiAgICAgIG1lbnUuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIGNvbnN0IG1lbnVXaWR0aCA9IG1lbnUub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBtZW51SGVpZ2h0ID0gbWVudS5vZmZzZXRIZWlnaHQ7XG4gICAgICBtZW51LnN0eWxlLmRpc3BsYXkgPSBwcmV2RGlzcGxheTtcblxuICAgICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgLy8gSG9yaXpvbnRhbDogYWxpZ24gbGVmdCBlZGdlcyAocmlnaHQgZWRnZXMgd2hlbiBhbGlnbj1cInJpZ2h0XCIpLFxuICAgICAgLy8gdGhlbiBjbGFtcCBzbyB0aGUgbWVudSBuZXZlciBvdmVyZmxvd3MgYSB2aWV3cG9ydCBlZGdlLiBVbmRlclxuICAgICAgLy8gUlRMIHRoZSBcImxlZnRcIiBkZWZhdWx0IHJlYWRzIGFzIHRoZSBpbmxpbmUtc3RhcnQgZWRnZSwgd2hpY2hcbiAgICAgIC8vIGlzIHRoZSB0cmlnZ2VyJ3MgKnJpZ2h0KiBlZGdlIOKAlCBmbGlwIHRoZSBhbmNob3Igc28gdGhlIG1lbnVcbiAgICAgIC8vIGdyb3dzIHRvd2FyZCB0aGUgaW5saW5lLWVuZCBsaWtlIGl0cyBuYXRpdmUgY291bnRlcnBhcnQuXG4gICAgICBjb25zdCBpc1J0bCA9XG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUodHJpZ2dlcikuZGlyZWN0aW9uID09PSBcInJ0bFwiIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIgPT09IFwicnRsXCI7XG4gICAgICBjb25zdCBwaHlzaWNhbFJpZ2h0ID0gKGlzUnRsICYmIGFsaWduID09PSBcImxlZnRcIikgfHwgYWxpZ24gPT09IFwicmlnaHRcIjtcbiAgICAgIGxldCBsZWZ0ID0gcGh5c2ljYWxSaWdodCA/IHQucmlnaHQgLSBtZW51V2lkdGggOiB0LmxlZnQ7XG4gICAgICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgoVklFV1BPUlRfUEFERElORywgdmlld3BvcnRXaWR0aCAtIG1lbnVXaWR0aCAtIFZJRVdQT1JUX1BBRERJTkcpO1xuICAgICAgbGVmdCA9IE1hdGgubWluKE1hdGgubWF4KGxlZnQsIFZJRVdQT1JUX1BBRERJTkcpLCBtYXhMZWZ0KTtcblxuICAgICAgLy8gVmVydGljYWw6IGJlbG93IHRoZSB0cmlnZ2VyIGJ5IGRlZmF1bHQ7IGZsaXAgYWJvdmUgd2hlbiB0aGF0XG4gICAgICAvLyBsZWF2ZXMgbW9yZSByb29tLiBDYXAgdGhlIGhlaWdodCB0byB0aGUgc3BhY2UgYXZhaWxhYmxlIHNvIHRoZVxuICAgICAgLy8gbWVudSBhbHdheXMgc3RheXMgb24tc2NyZWVuLlxuICAgICAgY29uc3Qgc3BhY2VCZWxvdyA9IHZpZXdwb3J0SGVpZ2h0IC0gdC5ib3R0b20gLSBNRU5VX0dBUCAtIFZJRVdQT1JUX1BBRERJTkc7XG4gICAgICBjb25zdCBzcGFjZUFib3ZlID0gdC50b3AgLSBNRU5VX0dBUCAtIFZJRVdQT1JUX1BBRERJTkc7XG4gICAgICBsZXQgdG9wOiBudW1iZXI7XG4gICAgICBpZiAobWVudUhlaWdodCA8PSBzcGFjZUJlbG93IHx8IHNwYWNlQmVsb3cgPj0gc3BhY2VBYm92ZSkge1xuICAgICAgICB0b3AgPSB0LmJvdHRvbSArIE1FTlVfR0FQO1xuICAgICAgICBpZiAobWVudUhlaWdodCA+IHNwYWNlQmVsb3cpIHtcbiAgICAgICAgICBtZW51LnN0eWxlLm1heEhlaWdodCA9IGAke01hdGgubWF4KHNwYWNlQmVsb3csIDApfXB4YDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlID0gTWF0aC5tYXgoc3BhY2VBYm92ZSwgMCk7XG4gICAgICAgIG1lbnUuc3R5bGUubWF4SGVpZ2h0ID0gYCR7YXZhaWxhYmxlfXB4YDtcbiAgICAgICAgdG9wID0gdC50b3AgLSBNRU5VX0dBUCAtIE1hdGgubWluKG1lbnVIZWlnaHQsIGF2YWlsYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIG1lbnUuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gICAgICBtZW51LnN0eWxlLm1hcmdpbiA9IFwiMFwiO1xuICAgICAgbWVudS5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICBtZW51LnN0eWxlLnRvcCA9IGAke3RvcH1weGA7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uQmVmb3JlVG9nZ2xlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoXCJuZXdTdGF0ZVwiIGluIGUgJiYgZS5uZXdTdGF0ZSA9PT0gXCJvcGVuXCIpIHtcbiAgICAgICAgcG9zaXRpb25NZW51KCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvblJlcG9zaXRpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAobWVudS5tYXRjaGVzKFwiOnBvcG92ZXItb3BlblwiKSkgcG9zaXRpb25NZW51KCk7XG4gICAgfTtcblxuICAgIG1lbnUuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXRvZ2dsZVwiLCBvbkJlZm9yZVRvZ2dsZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25SZXBvc2l0aW9uLCB0cnVlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBvblJlcG9zaXRpb24pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBtZW51LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV0b2dnbGVcIiwgb25CZWZvcmVUb2dnbGUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25SZXBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIG9uUmVwb3NpdGlvbik7XG4gICAgfTtcbiAgfSwgW2FsaWduXSk7XG5cbiAgdXNlU2lnbmFsRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZW51ID0gbWVudVJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSkgcmV0dXJuO1xuICAgIGlmIChpc09wZW4udmFsdWUgJiYgIW1lbnUubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHtcbiAgICAgIG1lbnUuc2hvd1BvcG92ZXIoKTtcbiAgICB9IGVsc2UgaWYgKCFpc09wZW4udmFsdWUgJiYgbWVudS5tYXRjaGVzKFwiOnBvcG92ZXItb3BlblwiKSkge1xuICAgICAgbWVudS5oaWRlUG9wb3ZlcigpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKFwibmV3U3RhdGVcIiBpbiBlKSB7XG4gICAgICBpc09wZW4udmFsdWUgPSAoZSBhcyB1bmtub3duIGFzIHsgbmV3U3RhdGU6IHN0cmluZyB9KS5uZXdTdGF0ZSA9PT0gXCJvcGVuXCI7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1lbnVDbGljayA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoIW11bHRpU2VsZWN0KSB7XG4gICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKGUua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImRyb3Bkb3duXCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGlkPXtpZH0gY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LWRyb3Bkb3duPlxuICAgICAgPGJ1dHRvblxuICAgICAgICByZWY9e3RyaWdnZXJSZWZ9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz17dHJpZ2dlckNsYXNzTmFtZSA/PyBjbGFzc2VzW1widHJpZ2dlclwiXSA/PyBcIlwifVxuICAgICAgICBkaXNhYmxlZD17dHJpZ2dlckRpc2FibGVkfVxuICAgICAgICB0aXRsZT17dHJpZ2dlclRpdGxlfVxuICAgICAgICBkYXRhLW9wZW49e2lzT3Blbi52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgPlxuICAgICAgICB7dHJpZ2dlcn1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e21lbnVSZWZ9XG4gICAgICAgIGlkPXtwb3BvdmVySWR9XG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgYXJpYS1tdWx0aXNlbGVjdGFibGU9e211bHRpU2VsZWN0ID8gXCJ0cnVlXCIgOiB1bmRlZmluZWR9XG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wibWVudVwiXSA/PyBcIlwifVxuICAgICAgICBkYXRhLWFsaWduPXthbGlnbn1cbiAgICAgICAgcG9wb3Zlcj1cImF1dG9cIlxuICAgICAgICBkYXRhLW92ZXJsYXktaWQ9e3BvcG92ZXJJZH1cbiAgICAgICAgb25Ub2dnbGU9e2hhbmRsZVRvZ2dsZX1cbiAgICAgICAgb25DbGljaz17aGFuZGxlTWVudUNsaWNrfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICA+XG4gICAgICAgIDxMYXlvdXQgcm93cz1cImF1dG9cIiBnYXA9XCIwXCI+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L0xheW91dD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFNlbGVjdFRyaWdnZXIg4oCUIHRoZSBsYWJlbC9jYXJldCByb3cgaW5zaWRlIGEgc2VsZWN0IHRyaWdnZXIgYm94LlxuICpcbiAqIGAudHJpZ2dlcmAgaW4gU2VsZWN0Lm1vZHVsZS5jc3Mgc3R5bGVzIHRoZSAqYm94KjogYm9yZGVyLCBwYWRkaW5nLFxuICogYG1pbi1ibG9jay1zaXplYCwgYW5kIGBhbGlnbi1jb250ZW50OiBjZW50ZXJgIHRvIGNlbnRyZSBvbmUgY2hpbGQgaW5cbiAqIGl0LiBJdCBkZWxpYmVyYXRlbHkgZGVjbGFyZXMgbm8gZmxleCBvciBncmlkIG9mIGl0cyBvd24g4oCUIHBvbGx5LXVpXG4gKiByb3V0ZXMgZXZlcnkgbGF5b3V0IGRlY2lzaW9uIHRocm91Z2ggPExheW91dD4g4oCUIHNvIHRoZSBjb21wb25lbnRcbiAqIHRoYXQgYXBwbGllcyBgLnRyaWdnZXJgIG11c3Qgc3VwcGx5IHRoZSByb3cuXG4gKlxuICogcG9sbHkjMTgwOiB0aGF0IHJ1bGUgd2FzIGNoYW5nZWQgZm9yIG9uZSBvZiBpdHMgdHdvIGNvbnN1bWVycy5cbiAqIDxTZWxlY3Q+IGdhaW5lZCBhIDxMYXlvdXQ+OyA8QWN0aW9uU2VsZWN0Piwgd2hpY2ggYXBwbGllcyB0aGUgc2FtZVxuICogY2xhc3MgdGhyb3VnaCBEcm9wZG93bidzIGB0cmlnZ2VyQ2xhc3NOYW1lYCwga2VwdCByZW5kZXJpbmcgdHdvIGJhcmVcbiAqIGlubGluZSBzcGFucywgc28gaXRzIGNhcmV0IHdyYXBwZWQgb250byBhIHNlY29uZCBsaW5lLiBOb3RoaW5nIHRpZWRcbiAqIHRoZSBzdHlsZXNoZWV0J3MgY29udHJhY3QgdG8gdGhlIGNvbXBvbmVudHMgdGhhdCBoYWQgdG8gc2F0aXNmeSBpdC5cbiAqIFRoaXMgbW9kdWxlIGlzIHRoYXQgdGllOiBvbmUgcm93LCBvbmUgZGVmaW5pdGlvbiwgYm90aCBjb25zdW1lcnMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4uL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdFRyaWdnZXJQcm9wcyA9IHtcbiAgLyoqIFRleHQgaW4gdGhlIHRyaWdnZXIg4oCUIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgb3IgdGhlIHBsYWNlaG9sZGVyLiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKipcbiAgICogUmVuZGVyIHRoZSBkcm9wZG93biBjYXJldCBiZXNpZGUgdGhlIGxhYmVsLiBPZmYgZm9yIGEgZGlzYWJsZWRcbiAgICogPEFjdGlvblNlbGVjdD4sIHdoaWNoIGlzIHN0YXRpYyB0ZXh0IHdpdGggbm8gbWVudSB0byBvcGVuLlxuICAgKi9cbiAgY2FyZXQ/OiBib29sZWFuO1xuICAvKipcbiAgICogRWxlbWVudCB0aGUgcm93IHJlbmRlcnMgYXMuIGBzcGFuYCB3aGVyZSB0aGUgdHJpZ2dlciBib3ggaXMgaXRzZWxmXG4gICAqIHBocmFzaW5nIGNvbnRlbnQg4oCUIGEgZGlzYWJsZWQgPEFjdGlvblNlbGVjdD4gcmVuZGVycyBpdHMgYm94IGFzIGFcbiAgICogPHNwYW4+LCB3aGljaCBtYXkgbm90IGNvbnRhaW4gYSA8ZGl2Pi5cbiAgICovXG4gIGFzPzogXCJkaXZcIiB8IFwic3BhblwiO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdFRyaWdnZXIocHJvcHM6IFNlbGVjdFRyaWdnZXJQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBsYWJlbCwgY2FyZXQgPSB0cnVlLCBhcyA9IFwiZGl2XCIgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxMYXlvdXRcbiAgICAgIGFzPXthc31cbiAgICAgIGlubGluZVxuICAgICAgLy8gV2l0aG91dCBhIGNhcmV0IHRoZSBzZWNvbmQgdHJhY2sgd291bGQgc3RpbGwgY29udHJpYnV0ZSBpdHMgZ2FwLFxuICAgICAgLy8gcGFkZGluZyB0aGUgdHJpZ2dlciBieSA4cHggaXQgZG9lcyBub3QgbmVlZC5cbiAgICAgIGNvbHVtbnM9e2NhcmV0ID8gXCIxZnIgYXV0b1wiIDogXCIxZnJcIn1cbiAgICAgIHsuLi4oY2FyZXQgPyB7IGdhcDogXCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIiB9IDoge30pfVxuICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICBtYXhJbmxpbmVTaXplPVwiMTAwJVwiXG4gICAgPlxuICAgICAgey8qIFRoZSAxZnIgdHJhY2sgYmxvY2tpZmllcyB0aGlzIHNwYW4sIHdoaWNoIGlzIHdoYXQgbGV0c1xuICAgICAgICAgIGB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpc2AgYXBwbHkgdG8gYSBsb25nIGxhYmVsLiAqL31cbiAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1widHJpZ2dlckxhYmVsXCJdfSBkYXRhLXBvbGx5LXNlbGVjdC1sYWJlbD5cbiAgICAgICAge2xhYmVsfVxuICAgICAgPC9zcGFuPlxuICAgICAge2NhcmV0ICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wiY2FyZXRcIl19IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+fVxuICAgIDwvTGF5b3V0PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEFjdGlvblNlbGVjdCDigJQgc2luZ2xlLXNlbGVjdCBkcm9wZG93biB0aGF0IGNvbW1pdHMgdmlhIHRoZSBhY3Rpb24gc3lzdGVtLlxuICpcbiAqIFRoZSBhY3Rpb24tZGlzcGF0Y2hpbmcgc2libGluZyBvZiA8U2VsZWN0Pi4gV2hlcmUgPFNlbGVjdD4gYmluZHMgYVxuICogYFNpZ25hbDxTZXQ8VD4+YCBhbmQgaXMgYnVpbHQgZm9yIGluLW1lbW9yeSBmaWx0ZXIgVUlzLCBBY3Rpb25TZWxlY3RcbiAqIHRha2VzIHRoZSBjdXJyZW50IGB2YWx1ZWAgYXMgYSBwbGFpbiBzdHJpbmcgYW5kIGZpcmVzIGBhY3Rpb25gIHdpdGhcbiAqIGBkYXRhLWFjdGlvbi12YWx1ZWAgc2V0IHRvIHRoZSBjaG9zZW4gb3B0aW9uIOKAlCBzbyBlZGl0aW5nIGFcbiAqIHNlcnZlci1iYWNrZWQgZmllbGQgY29tbWl0cyB0aHJvdWdoIHRoZSBzYW1lIGV2ZW50IGRlbGVnYXRpb24gYXNcbiAqIDxBY3Rpb25JbnB1dD4gYW5kIDxBY3Rpb25Gb3JtPiwgd2l0aCBubyBzeW50aGV0aWMgc2lnbmFsIG9yIGJyaWRnaW5nXG4gKiBgZWZmZWN0YCByZXF1aXJlZC5cbiAqXG4gKiBDb21wb3NlcyA8RHJvcGRvd24+IGZvciB0aGUgbWVudS4gVGhlIHRyaWdnZXIgc3R5bGluZyBpcyBhcHBsaWVkXG4gKiBkaXJlY3RseSB0byBEcm9wZG93bidzIG93biA8YnV0dG9uPiB2aWEgYHRyaWdnZXJDbGFzc05hbWVgLCBzbyB0aGVcbiAqIHZpc2libGUgYm94IGFuZCB0aGUgaW50ZXJhY3RpdmUgZWxlbWVudCBhcmUgb25lIGFuZCB0aGUgc2FtZSBub2RlIOKAlFxuICogbm8gc3R5bGVkIDxzcGFuPiBuZXN0ZWQgaW5zaWRlIGFuIHVuc3R5bGVkIDxidXR0b24+LiBBIGRpc2FibGVkXG4gKiBBY3Rpb25TZWxlY3QgcmVuZGVycyBhcyBzdGF0aWMgdGV4dCB3aXRob3V0IGEgY2FyZXQuXG4gKlxuICogQm90aCBicmFuY2hlcyByZW5kZXIgdGhlaXIgbGFiZWwvY2FyZXQgcm93IHRocm91Z2ggPFNlbGVjdFRyaWdnZXI+LFxuICogdGhlIHNhbWUgcm93IDxTZWxlY3Q+IHVzZXMg4oCUIGAudHJpZ2dlcmAgc3R5bGVzIHRoZSBib3ggYW5kIHN1cHBsaWVzXG4gKiBubyBsYXlvdXQsIHNvIHRoZSBjb21wb25lbnQgb3dlcyBpdCBvbmUgKHBvbGx5IzE4MCkuXG4gKi9cblxuaW1wb3J0IHsgdXNlU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gXCIuL0Ryb3Bkb3duLnRzeFwiO1xuaW1wb3J0IHsgZGlzcGF0Y2hBY3Rpb24gfSBmcm9tIFwiLi9pbnRlcm5hbC9kaXNwYXRjaC1hY3Rpb24udHNcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcbmltcG9ydCB7IFNlbGVjdFRyaWdnZXIgfSBmcm9tIFwiLi9pbnRlcm5hbC9zZWxlY3QtdHJpZ2dlci50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdE9wdGlvbiB9IGZyb20gXCIuL1NlbGVjdC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uU2VsZWN0UHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICAvKiogQ3VycmVudCB2YWx1ZSDigJQgbWF0Y2hlZCBhZ2FpbnN0IGBvcHRpb25zYCB0byByZW5kZXIgdGhlIHRyaWdnZXIgbGFiZWwuICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBTZWxlY3RhYmxlIG9wdGlvbnMuICovXG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbjxzdHJpbmc+W107XG4gIC8qKiBBY3Rpb24gbmFtZSB0byBkaXNwYXRjaCBvbiBzZWxlY3Rpb24uIFJlY2VpdmVzIGRhdGEtYWN0aW9uLXZhbHVlPTxvcHRpb24gdmFsdWU+LiAqL1xuICBhY3Rpb246IHN0cmluZztcbiAgLyoqIEV4dHJhIGRhdGEtYWN0aW9uLSogYXR0cmlidXRlcyB0byBpbmNsdWRlIG9uIGNvbW1pdCAoZS5nLiBlbnRpdHkgaWQpLiAqL1xuICBhY3Rpb25EYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFZpc2libGUgZmllbGQgbGFiZWwgcmVuZGVyZWQgYWJvdmUgdGhlIHRyaWdnZXIuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogVHJpZ2dlciB0ZXh0IHNob3duIHdoZW4gYHZhbHVlYCBtYXRjaGVzIG5vIG9wdGlvbi4gRGVmYXVsdDogXCJTZWxlY3TigKZcIi4gKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEFwcGx5IGEgY29tZm9ydGFibGUgbWluaW11bSB3aWR0aCB0byB0aGUgdHJpZ2dlci4gRGVmYXVsdDogc2l6ZXMgdG8gY29udGVudC4gKi9cbiAgd2lkZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBsYWJlbEZvcihvcHRpb25zOiBTZWxlY3RPcHRpb248c3RyaW5nPltdLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGlmIChvcHQudmFsdWUgPT09IHZhbHVlKSByZXR1cm4gb3B0LmxhYmVsO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25TZWxlY3QocHJvcHM6IEFjdGlvblNlbGVjdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgdmFsdWUsXG4gICAgb3B0aW9ucyxcbiAgICBhY3Rpb24sXG4gICAgYWN0aW9uRGF0YSxcbiAgICBsYWJlbCxcbiAgICBwbGFjZWhvbGRlciA9IFwiU2VsZWN04oCmXCIsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICB3aWRlID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaXNPcGVuID0gdXNlU2lnbmFsKGZhbHNlKTtcblxuICBjb25zdCBjdXJyZW50ID0gbGFiZWxGb3Iob3B0aW9ucywgdmFsdWUpO1xuICBjb25zdCBpc0VtcHR5ID0gY3VycmVudCA9PT0gdW5kZWZpbmVkO1xuICBjb25zdCBkaXNwbGF5VGV4dCA9IGN1cnJlbnQgPz8gcGxhY2Vob2xkZXI7XG5cbiAgY29uc3QgY29tbWl0ID0gKG5leHQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIGlmIChuZXh0ID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgIGRpc3BhdGNoQWN0aW9uKGFjdGlvbiwgeyAuLi4oYWN0aW9uRGF0YSA/PyB7fSksIHZhbHVlOiBuZXh0IH0pO1xuICB9O1xuXG4gIGNvbnN0IHRyaWdnZXJQYXJ0cyA9IFtjbGFzc2VzW1widHJpZ2dlclwiXSA/PyBcIlwiXTtcbiAgaWYgKGlzRW1wdHkpIHRyaWdnZXJQYXJ0cy5wdXNoKGNsYXNzZXNbXCJwbGFjZWhvbGRlclwiXSA/PyBcIlwiKTtcbiAgaWYgKHdpZGUpIHRyaWdnZXJQYXJ0cy5wdXNoKGNsYXNzZXNbXCJ0cmlnZ2VyV2lkZVwiXSA/PyBcIlwiKTtcbiAgY29uc3QgdHJpZ2dlckNsYXNzID0gdHJpZ2dlclBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wic2VsZWN0XCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKX1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWFjdGlvbi1zZWxlY3RcbiAgICAgIGRhdGEtc3RhdGU9e2lzRW1wdHkgPyBcImVtcHR5XCIgOiBcImZpbGxlZFwifVxuICAgID5cbiAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibGFiZWxcIl19PntsYWJlbH08L3NwYW4+fVxuICAgICAge2Rpc2FibGVkID8gKFxuICAgICAgICA8c3BhbiBjbGFzcz17dHJpZ2dlckNsYXNzfSBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiIHRpdGxlPXtkaXNwbGF5VGV4dH0+XG4gICAgICAgICAgPFNlbGVjdFRyaWdnZXIgYXM9XCJzcGFuXCIgY2FyZXQ9e2ZhbHNlfSBsYWJlbD17ZGlzcGxheVRleHR9IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICkgOiAoXG4gICAgICAgIDxEcm9wZG93blxuICAgICAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgICAgIHRyaWdnZXJDbGFzc05hbWU9e3RyaWdnZXJDbGFzc31cbiAgICAgICAgICB0cmlnZ2VyVGl0bGU9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgIHRyaWdnZXI9ezxTZWxlY3RUcmlnZ2VyIGxhYmVsPXtkaXNwbGF5VGV4dH0gLz59XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IG9wdC52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgICAgICBjb25zdCBvcHRDbGFzcyA9IGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgPyBgJHtjbGFzc2VzW1wib3B0aW9uXCJdfSAke2NsYXNzZXNbXCJvcHRpb25TZWxlY3RlZFwiXX1gXG4gICAgICAgICAgICAgIDogY2xhc3Nlc1tcIm9wdGlvblwiXTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e29wdC52YWx1ZX1cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz17b3B0Q2xhc3N9XG4gICAgICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD17aXNTZWxlY3RlZCA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNvbW1pdChvcHQudmFsdWUpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e29wdC5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9Ecm9wZG93bj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogQmFkZ2Ug4oCUIHNtYWxsIGlubGluZSBzdGF0dXMgY2hpcC5cbiAqXG4gKiBSZW5kZXJzIGFzIGEgcGFzc2l2ZSA8c3Bhbj4gd2l0aCB0aW50ZWQgYmFja2dyb3VuZCBhbmQgb24tdGludCB0ZXh0XG4gKiBmcm9tIHRoZSBgLS1wb2xseS1zdGF0dXMtKmAgdG9rZW4gZmFtaWx5LiBUaGUgZGVmYXVsdCB2YXJpYW50IHVzZXNcbiAqIHN1cmZhY2Utc3Vua2VuICsgbXV0ZWQgdGV4dCBmb3IgYSBuZXV0cmFsIHBpbGwuIENvbnN1bWVycyBzdHlsZVxuICogcGxhY2VtZW50IHZpYSBjbGFzc05hbWU7IHRoZSBwcmltaXRpdmUgb3ducyBzaXplLCBzaGFwZSwgYW5kIGNvbG91ci5cbiAqXG4gKiBBIGJhZGdlIGlzIG9mdGVuIGFuIGFiYnJldmlhdGVkIG9yIGljb25pYyBzdGF0dXMgKFwiM1wiLCBcIuKXj1wiKTsgcGFzc1xuICogYHRpdGxlYCB0byBhdHRhY2ggYW4gZXhwbGFuYXRvcnkgaG92ZXIgdG9vbHRpcCAoXCIzIHBlZXJzIGNvbm5lY3RlZFwiKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9CYWRnZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEJhZGdlVmFyaWFudCA9IFwiZGVmYXVsdFwiIHwgXCJpbmZvXCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIjtcblxuZXhwb3J0IHR5cGUgQmFkZ2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICB2YXJpYW50PzogQmFkZ2VWYXJpYW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICAvKiogTmF0aXZlIGhvdmVyIHRvb2x0aXAg4oCUIGV4cGxhaW5zIGFuIGFiYnJldmlhdGVkIG9yIGljb25pYyBiYWRnZS4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiB2YXJpYW50Q2xhc3ModmFyaWFudDogQmFkZ2VWYXJpYW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhcmlhbnQgPT09IFwiaW5mb1wiKSByZXR1cm4gY2xhc3Nlc1tcImluZm9cIl07XG4gIGlmICh2YXJpYW50ID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIGNsYXNzZXNbXCJzdWNjZXNzXCJdO1xuICBpZiAodmFyaWFudCA9PT0gXCJ3YXJuaW5nXCIpIHJldHVybiBjbGFzc2VzW1wid2FybmluZ1wiXTtcbiAgaWYgKHZhcmlhbnQgPT09IFwiZGFuZ2VyXCIpIHJldHVybiBjbGFzc2VzW1wiZGFuZ2VyXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQmFkZ2UocHJvcHM6IEJhZGdlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIHZhcmlhbnQgPSBcImRlZmF1bHRcIiwgY2xhc3NOYW1lLCBpZCwgdGl0bGUgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiYmFkZ2VcIl1dO1xuICBjb25zdCB2ID0gdmFyaWFudENsYXNzKHZhcmlhbnQpO1xuICBpZiAodikgcGFydHMucHVzaCh2KTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxzcGFuIGlkPXtpZH0gdGl0bGU9e3RpdGxlfSBjbGFzcz17cGFydHMuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1iYWRnZT17dmFyaWFudH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9zcGFuPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEJ1dHRvbiDigJQgaW50ZXJhY3RpdmUgY29udHJvbCB3aXRoIHRpZXIsIHNlbWFudGljIGNvbG91ciwgYW5kIHNpemUuXG4gKlxuICogUmVuZGVycyBhcyBhIDxidXR0b24+IGJ5IGRlZmF1bHQ7IHN3aXRjaGVzIHRvIGFuIDxhPiB3aGVuIGdpdmVuIGFuXG4gKiBgaHJlZmAuIFRpZXIgc2V0cyB2aXN1YWwgaW1wb3J0YW5jZSAocHJpbWFyeS9zZWNvbmRhcnkvdGVydGlhcnkpLFxuICogY29sb3Igb3ZlcmxheXMgc2VtYW50aWMgbWVhbmluZyAoaW5mby9zdWNjZXNzL3dhcm5pbmcvZGFuZ2VyKSxcbiAqIHNpemUgcGlja3MgdGhlIGhlaWdodCArIHBhZGRpbmcgKyBmb250IHNjYWxlIChzbWFsbC9ub3JtYWwvbGFyZ2UpLlxuICogVGhlIGJ1dHRvbiBpcyBhIGZsZXggY29udGFpbmVyLCBzbyBhbiBpY29uIGFuZCBhIGxhYmVsIGFyZSBpdHMgb3duXG4gKiBjaGlsZHJlbiB3aXRoIGEgYGdhcGAgYmV0d2VlbiB0aGVtLlxuICpcbiAqIEhlaWdodCBjb21lcyBmcm9tIC0tcG9sbHktY29udHJvbC1oZWlnaHQtKiwgbmV2ZXIgZnJvbSBwYWRkaW5nLCBzbyBhXG4gKiBCdXR0b24gaXMgZXhhY3RseSBhcyB0YWxsIGFzIGEgVGV4dElucHV0IG9yIGEgU2VsZWN0IGluIHRoZSBzYW1lIHJvdy5cbiAqXG4gKiBBIHRleHQgYGxhYmVsYCBpcyB0aGUgYWNjZXNzaWJsZSBuYW1lLiBBbiBpY29uLW9ubHkgYnV0dG9uIChpY29uLCBub1xuICogbGFiZWwpIGhhcyBub25lLCBzbyB0aGUgdHlwZSBSRVFVSVJFUyBgYXJpYS1sYWJlbGAgdGhlcmUg4oCUIGFuIHVubmFtZWRcbiAqIGljb24gYnV0dG9uIHdvbid0IGNvbXBpbGUuIE5vIGJ1aWxkLXRpbWUgbGludCBuZWVkZWQ7IHRoZSBjYWxsIHNpdGVcbiAqIGl0c2VsZiBpcyB0aGUgZ2F0ZS5cbiAqXG4gKiBBY3Rpb24gd2lyaW5nIGlzIGRlY2xhcmVkIHZpYSBkYXRhLSogYXR0cmlidXRlcyBjb25zdW1lZCBieSB0aGVcbiAqIGdsb2JhbCBldmVudCBkZWxlZ2F0b3IgaW4gQGZhaXJmb3gvcG9sbHkvYWN0aW9ucyDigJQgQnV0dG9uIGRvZXMgbm90XG4gKiBhY2NlcHQgYW4gb25DbGljayBwcm9wLlxuICpcbiAqIEV2ZXJ5IGJ1dHRvbiBzdXJmYWNlcyBhIG5hdGl2ZSBob3ZlciB0b29sdGlwOiBhbiBleHBsaWNpdCBgdGl0bGVgXG4gKiB3aW5zLCBlbHNlIHRoZSB2aXNpYmxlIHRleHQgbGFiZWwsIGVsc2UgdGhlIGBhcmlhLWxhYmVsYCAoc28gYW5cbiAqIGljb24tb25seSBidXR0b24gc3RpbGwgZ2V0cyBvbmUpLiBQYXNzIGB0aXRsZT1cIlwiYCB0byBzdXBwcmVzcyBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1gsIFZOb2RlIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQnV0dG9uVGllciA9IFwicHJpbWFyeVwiIHwgXCJzZWNvbmRhcnlcIiB8IFwidGVydGlhcnlcIjtcbmV4cG9ydCB0eXBlIEJ1dHRvbkNvbG9yID0gXCJkZWZhdWx0XCIgfCBcImluZm9cIiB8IFwic3VjY2Vzc1wiIHwgXCJ3YXJuaW5nXCIgfCBcImRhbmdlclwiO1xuZXhwb3J0IHR5cGUgQnV0dG9uU2l6ZSA9IFwic21hbGxcIiB8IFwibm9ybWFsXCIgfCBcImxhcmdlXCI7XG5cbnR5cGUgQmFzZUJ1dHRvblByb3BzID0ge1xuICBpZD86IHN0cmluZztcbiAgdGllcj86IEJ1dHRvblRpZXI7XG4gIGNvbG9yPzogQnV0dG9uQ29sb3I7XG4gIHNpemU/OiBCdXR0b25TaXplO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGZ1bGxXaWR0aD86IGJvb2xlYW47XG4gIGNpcmNsZT86IGJvb2xlYW47XG4gIC8qKiBDYXAgdGhlIGJ1dHRvbiB3aWR0aCBhdCBgLS1wb2xseS1jb250cm9sLW1heC13aWR0aGAgYW5kIGVsbGlwc2lzLVxuICAgKiB0cnVuY2F0ZSB0aGUgbGFiZWwuIFVzZSBmb3IgdXNlci1zdXBwbGllZCBvciBvdGhlcndpc2UgdW5ib3VuZGVkXG4gICAqIGxhYmVscyBzbyBhIGxvbmcgc3RyaW5nIGRvZXNuJ3QgYmxvdyBvdXQgdGhlIHJvdy4gKi9cbiAgYm91bmRlZD86IGJvb2xlYW47XG4gIC8qKiBQdWxsIHRoZSBib3ggb3V0IGJ5IGl0cyBvd24gaW5saW5lIHBhZGRpbmcgc28gdGhlIExBQkVMIHNpdHMgb24gdGhlXG4gICAqIHRleHQgZWRnZSByYXRoZXIgdGhhbiB0aGUgYm94IGVkZ2UuIEZvciBhIGB0ZXJ0aWFyeWAgYnV0dG9uIGluIGEgdGV4dFxuICAgKiBjb2x1bW4sIHdoZXJlIHRoZSBpbnZpc2libGUgcGFkZGluZyBvdGhlcndpc2UgcmVhZHMgYXMgYW4gaW5kZW50XG4gICAqIGFnYWluc3QgdGhlIGNvcHkgYmVzaWRlIGl0LiBBIGJvcmRlcmVkIGJ1dHRvbiBzaG91bGQga2VlcCBpdHMgZGVmYXVsdFxuICAgKiBib3ggYWxpZ25tZW50IOKAlCB0aGUgYm9yZGVyIGlzIHdoYXQgbWFrZXMgdGhhdCBlZGdlIGxlZ2libGUuIFRoZSBoaXRcbiAgICogdGFyZ2V0IGlzIHVuY2hhbmdlZDsgb25seSB0aGUgYm94J3MgcG9zaXRpb24gaW4gdGhlIGxheW91dCBtb3Zlcy4gKi9cbiAgZmx1c2g/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBcImRhdGEtYWN0aW9uXCI/OiBzdHJpbmc7XG4gIC8qKiBBZGRpdGlvbmFsIGFjdGlvbi1wYXlsb2FkIGF0dHJpYnV0ZXMgdGhlIGV2ZW50IGRlbGVnYXRvciBwYXJzZXNcbiAgICogaW50byBgY3R4LmRhdGFgLiBgZGF0YS1hY3Rpb24tdGlkPVwidC0xN1wiYCBiZWNvbWVzIGB7IHRpZDogXCJ0LTE3XCIgfWAsXG4gICAqIGBkYXRhLWFjdGlvbi1pdGVtLWlkPVwi4oCmXCJgIGJlY29tZXMgYHsgaXRlbUlkOiBcIuKAplwiIH1gLCBhbmQgc28gb24uXG4gICAqIFR5cGVkIGFzIGFuIGluZGV4IHNpZ25hdHVyZSBzbyBldmVyeSBgZGF0YS1hY3Rpb24tKmAga2V5IHRoZVxuICAgKiBjb25zdW1lciBjYXJlcyBhYm91dCB0eXBlLWNoZWNrcyB3aXRob3V0IGEgQnV0dG9uLXNpZGUgZW51bWVyYXRpb24uICovXG4gIFthY3Rpb25EYXRhQXR0cjogYGRhdGEtYWN0aW9uLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIENvbnRlbnQvYWNjZXNzaWJpbGl0eSBkaW1lbnNpb24uIEEgdmlzaWJsZSB0ZXh0IGBsYWJlbGAgaXMgdGhlXG4gKiBhY2Nlc3NpYmxlIG5hbWUsIHNvIGl0IG1ha2VzIGBhcmlhLWxhYmVsYCBvcHRpb25hbC4gQW4gaWNvbi1vbmx5XG4gKiBidXR0b24gaGFzIG5vIHRleHQgdG8gbmFtZSBpdCwgc28gYGFyaWEtbGFiZWxgIGlzIFJFUVVJUkVEIOKAlCB5b3VcbiAqIGNhbm5vdCBjb25zdHJ1Y3QgYW4gdW5uYW1lZCBpY29uIGJ1dHRvbi4gKEJ1dHRvbidzIGhvdmVyIHRpdGxlIHRoZW5cbiAqIGZhbGxzIGJhY2sgdG8gdGhhdCBhcmlhLWxhYmVsLCBzbyB0aGUgc2FtZSBwcm9wIGdpdmVzIGJvdGggdGhlXG4gKiBhY2Nlc3NpYmxlIG5hbWUgYW5kIHRoZSB0b29sdGlwLilcbiAqL1xudHlwZSBMYWJlbGxlZENvbnRlbnQgPSB7XG4gIGxhYmVsOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgaWNvbj86IFZOb2RlO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbn07XG50eXBlIEljb25Pbmx5Q29udGVudCA9IHtcbiAgaWNvbjogVk5vZGU7XG4gIGxhYmVsPzogbmV2ZXI7XG4gIFwiYXJpYS1sYWJlbFwiOiBzdHJpbmc7XG59O1xudHlwZSBCdXR0b25Db250ZW50ID0gTGFiZWxsZWRDb250ZW50IHwgSWNvbk9ubHlDb250ZW50O1xuXG50eXBlIEJ1dHRvbkVsZW1lbnQgPSB7XG4gIGhyZWY/OiBuZXZlcjtcbiAgdGFyZ2V0PzogbmV2ZXI7XG4gIHJlbD86IG5ldmVyO1xuICBkb3dubG9hZD86IG5ldmVyO1xuICB0eXBlPzogXCJidXR0b25cIiB8IFwic3VibWl0XCIgfCBcInJlc2V0XCI7XG59O1xuXG50eXBlIExpbmtFbGVtZW50ID0ge1xuICBocmVmOiBzdHJpbmc7XG4gIHRhcmdldD86IHN0cmluZztcbiAgcmVsPzogc3RyaW5nO1xuICAvKiogRm9yd2FyZGVkIHRvIHRoZSByZW5kZXJlZCA8YT4gc28gYSBCdXR0b24tYXMtbGluayBjYW4gb2ZmZXIgYSBmaWxlXG4gICAqIGRvd25sb2FkLiBBbiBlbXB0eSBzdHJpbmcgdXNlcyB0aGUgcmVzb3VyY2UncyBvd24gZmlsZW5hbWUuICovXG4gIGRvd25sb2FkPzogc3RyaW5nO1xuICB0eXBlPzogbmV2ZXI7XG59O1xuXG5leHBvcnQgdHlwZSBCdXR0b25Qcm9wcyA9IEJhc2VCdXR0b25Qcm9wcyAmIEJ1dHRvbkNvbnRlbnQgJiAoQnV0dG9uRWxlbWVudCB8IExpbmtFbGVtZW50KTtcblxuZnVuY3Rpb24gdGllckNsYXNzKHRpZXI6IEJ1dHRvblRpZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodGllciA9PT0gXCJwcmltYXJ5XCIpIHJldHVybiBjbGFzc2VzW1widGllclByaW1hcnlcIl07XG4gIGlmICh0aWVyID09PSBcInRlcnRpYXJ5XCIpIHJldHVybiBjbGFzc2VzW1widGllclRlcnRpYXJ5XCJdO1xuICByZXR1cm4gY2xhc3Nlc1tcInRpZXJTZWNvbmRhcnlcIl07XG59XG5cbmZ1bmN0aW9uIGNvbG9yQ2xhc3MoY29sb3I6IEJ1dHRvbkNvbG9yKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNvbG9yID09PSBcImluZm9cIikgcmV0dXJuIGNsYXNzZXNbXCJjb2xvckluZm9cIl07XG4gIGlmIChjb2xvciA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBjbGFzc2VzW1wiY29sb3JTdWNjZXNzXCJdO1xuICBpZiAoY29sb3IgPT09IFwid2FybmluZ1wiKSByZXR1cm4gY2xhc3Nlc1tcImNvbG9yV2FybmluZ1wiXTtcbiAgaWYgKGNvbG9yID09PSBcImRhbmdlclwiKSByZXR1cm4gY2xhc3Nlc1tcImNvbG9yRGFuZ2VyXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBzaXplQ2xhc3Moc2l6ZTogQnV0dG9uU2l6ZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChzaXplID09PSBcInNtYWxsXCIpIHJldHVybiBjbGFzc2VzW1wiYnRuU21hbGxcIl07XG4gIGlmIChzaXplID09PSBcImxhcmdlXCIpIHJldHVybiBjbGFzc2VzW1wiYnRuTGFyZ2VcIl07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBmbGF0IHByb3AtdG8tY2xhc3MgY29tcG9zaXRpb24gcGx1cyBvbmUgYW5jaG9yL2J1dHRvbiBicmFuY2g7IHNwbGl0dGluZyB3b3VsZCBqdXN0IGhpZGUgdGhlIG1hcHBpbmcuXG5leHBvcnQgZnVuY3Rpb24gQnV0dG9uKHByb3BzOiBCdXR0b25Qcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHRpZXIgPSBcInNlY29uZGFyeVwiLFxuICAgIGNvbG9yID0gXCJkZWZhdWx0XCIsXG4gICAgc2l6ZSA9IFwibm9ybWFsXCIsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICBjaXJjbGUgPSBmYWxzZSxcbiAgICBib3VuZGVkID0gZmFsc2UsXG4gICAgZmx1c2ggPSBmYWxzZSxcbiAgICBjbGFzc05hbWUsXG4gICAgdGl0bGUsXG4gICAgaWNvbixcbiAgICBsYWJlbCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJidG5cIl0gPz8gXCJcIl07XG4gIGNvbnN0IHRjID0gdGllckNsYXNzKHRpZXIpO1xuICBpZiAodGMpIHBhcnRzLnB1c2godGMpO1xuICBjb25zdCBjYyA9IGNvbG9yQ2xhc3MoY29sb3IpO1xuICBpZiAoY2MpIHBhcnRzLnB1c2goY2MpO1xuICBjb25zdCBzYyA9IHNpemVDbGFzcyhzaXplKTtcbiAgaWYgKHNjKSBwYXJ0cy5wdXNoKHNjKTtcbiAgaWYgKGNpcmNsZSkgcGFydHMucHVzaChjbGFzc2VzW1wiYnRuQ2lyY2xlXCJdID8/IFwiXCIpO1xuICBpZiAoZnVsbFdpZHRoKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJidG5GdWxsV2lkdGhcIl0gPz8gXCJcIik7XG4gIGlmIChib3VuZGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJidG5Cb3VuZGVkXCJdID8/IFwiXCIpO1xuICBpZiAoZmx1c2gpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImJ0bkZsdXNoXCJdID8/IFwiXCIpO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG4gIGNvbnN0IGJ1dHRvbkNsYXNzID0gcGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuXG4gIC8vIEFuIGljb24gYmVzaWRlIGEgbGFiZWwgaXMgYW4gYXJyYW5nZW1lbnQsIHNvIGl0IGdvZXMgdGhyb3VnaCA8TGF5b3V0Pi5cbiAgLy8gQSBsYWJlbCBvbiBpdHMgb3duIGlzIG5vdDogaXQgaXMgb25lIGlubGluZSBjaGlsZCB0aGF0IHRoZSBidXR0b24nc1xuICAvLyBhbGlnbi1jb250ZW50IGFuZCB0ZXh0LWFsaWduIGNlbnRyZSwgd2l0aCBubyBjb250YWluZXIgYXQgYWxsLlxuICBjb25zdCBjb250ZW50ID1cbiAgICBpY29uID09PSB1bmRlZmluZWQgPyAoXG4gICAgICBsYWJlbFxuICAgICkgOiAoXG4gICAgICA8TGF5b3V0IGlubGluZSBjb2x1bW5zPVwiYXV0byBhdXRvXCIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImljb25cIl19PntpY29ufTwvc3Bhbj5cbiAgICAgICAge2xhYmVsICE9PSB1bmRlZmluZWQgJiYgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJsYWJlbFwiXX0+e2xhYmVsfTwvc3Bhbj59XG4gICAgICA8L0xheW91dD5cbiAgICApO1xuXG4gIGNvbnN0IGRhdGFBY3Rpb24gPSBwcm9wc1tcImRhdGEtYWN0aW9uXCJdO1xuICBjb25zdCBhcmlhTGFiZWwgPSBwcm9wc1tcImFyaWEtbGFiZWxcIl07XG4gIC8vIEV2ZXJ5IGJ1dHRvbiBzdXJmYWNlcyBhIGhvdmVyIHRvb2x0aXA6IGFuIGV4cGxpY2l0IHRpdGxlIHdpbnMsIGVsc2UgdGhlXG4gIC8vIHZpc2libGUgdGV4dCBsYWJlbCwgZWxzZSB0aGUgYWNjZXNzaWJsZSBuYW1lIOKAlCBzbyBhbiBpY29uLW9ubHkgYnV0dG9uXG4gIC8vICh3aGljaCBjYXJyaWVzIGFuIGFyaWEtbGFiZWwpIHN0aWxsIGdldHMgb25lLiBQYXNzIHRpdGxlPVwiXCIgdG8gb3B0IG91dC5cbiAgY29uc3QgcmVzb2x2ZWRUaXRsZSA9XG4gICAgdGl0bGUgPz9cbiAgICAodHlwZW9mIGxhYmVsID09PSBcInN0cmluZ1wiICYmIGxhYmVsLmxlbmd0aCA+IDBcbiAgICAgID8gbGFiZWxcbiAgICAgIDogdHlwZW9mIGFyaWFMYWJlbCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IGFyaWFMYWJlbFxuICAgICAgICA6IHVuZGVmaW5lZCk7XG4gIC8vIENvbGxlY3QgZXZlcnkgYGRhdGEtYWN0aW9uLSpgIGV4dHJhIHRoZSBjb25zdW1lciBwYXNzZWQgc28gdGhlXG4gIC8vIGV2ZW50IGRlbGVnYXRvciBjYW4gcmVhZCB0aGVtIG9mZiB0aGUgcmVuZGVyZWQgZWxlbWVudC4gV2l0aG91dFxuICAvLyB0aGlzLCBhbnl0aGluZyBiZXlvbmQgYGRhdGEtYWN0aW9uYCBpcyBzaWxlbnRseSBkcm9wcGVkIGFuZFxuICAvLyBoYW5kbGVycyBmaXJlIHdpdGggYW4gZW1wdHkgYGN0eC5kYXRhYC5cbiAgY29uc3QgYWN0aW9uRGF0YUF0dHJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BzKSkge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aChcImRhdGEtYWN0aW9uLVwiKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSAocHJvcHMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgYWN0aW9uRGF0YUF0dHJzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoXCJocmVmXCIgaW4gcHJvcHMgJiYgcHJvcHMuaHJlZikge1xuICAgIHJldHVybiAoXG4gICAgICA8YVxuICAgICAgICBpZD17aWR9XG4gICAgICAgIGNsYXNzPXtidXR0b25DbGFzc31cbiAgICAgICAgdGl0bGU9e3Jlc29sdmVkVGl0bGV9XG4gICAgICAgIGhyZWY9e2Rpc2FibGVkID8gdW5kZWZpbmVkIDogcHJvcHMuaHJlZn1cbiAgICAgICAgdGFyZ2V0PXtcInRhcmdldFwiIGluIHByb3BzID8gcHJvcHMudGFyZ2V0IDogdW5kZWZpbmVkfVxuICAgICAgICByZWw9e1wicmVsXCIgaW4gcHJvcHMgPyBwcm9wcy5yZWwgOiB1bmRlZmluZWR9XG4gICAgICAgIGRvd25sb2FkPXtcImRvd25sb2FkXCIgaW4gcHJvcHMgPyBwcm9wcy5kb3dubG9hZCA6IHVuZGVmaW5lZH1cbiAgICAgICAgYXJpYS1kaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LWJ1dHRvbj17dGllcn1cbiAgICAgICAgZGF0YS1hY3Rpb249e2RhdGFBY3Rpb259XG4gICAgICAgIHsuLi5hY3Rpb25EYXRhQXR0cnN9XG4gICAgICA+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9hPlxuICAgICk7XG4gIH1cblxuICBjb25zdCByZXNvbHZlZFR5cGU6IFwiYnV0dG9uXCIgfCBcInN1Ym1pdFwiIHwgXCJyZXNldFwiID1cbiAgICBcInR5cGVcIiBpbiBwcm9wcyAmJiBwcm9wcy50eXBlID8gcHJvcHMudHlwZSA6IFwiYnV0dG9uXCI7XG5cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17YnV0dG9uQ2xhc3N9XG4gICAgICB0aXRsZT17cmVzb2x2ZWRUaXRsZX1cbiAgICAgIHR5cGU9e3Jlc29sdmVkVHlwZX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktYnV0dG9uPXt0aWVyfVxuICAgICAgZGF0YS1hY3Rpb249e2RhdGFBY3Rpb259XG4gICAgICB7Li4uYWN0aW9uRGF0YUF0dHJzfVxuICAgID5cbiAgICAgIHtjb250ZW50fVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFN1cmZhY2Ug4oCUIHRoZSBvbmUgcHJpbWl0aXZlIHRoYXQgb3ducyB2aXN1YWwtc3VyZmFjZSBjb25jZXJucy5cbiAqXG4gKiBXaGVyZSBMYXlvdXQgZ292ZXJucyBzcGF0aWFsIGNvbmNlcm5zIChncmlkLCBmbGV4LCBnYXAsIGFsaWdubWVudCksXG4gKiBTdXJmYWNlIGdvdmVybnMgdGhlIGNocm9tZSB0aGF0IHNpdHMgb24gdG9wIG9mIGxheW91dDogcGFkZGluZyxcbiAqIGJhY2tncm91bmQsIGJvcmRlciwgcmFkaXVzLCBzaGFkb3csIGFuZCB0aGUgbmFycm93IHBvc2l0aW9uaW5nIGlkaW9tc1xuICogKHN0aWNreSBzdHJpcHMsIGZpeGVkIGZsb2F0aW5nIHBhbmVzKSB0aGF0IGNvbnN1bWVycyByZWFjaCBmb3IgaW5saW5lXG4gKiBzdHlsZXMgdG8gZXhwcmVzcy4gRXZlcnkgcHJvcCBtYXBzIHRvIGEgYC0tcG9sbHktKmAgdG9rZW4gdGhyb3VnaCBhXG4gKiBsb2NhbCBgLS1zLSpgIGN1c3RvbSBwcm9wZXJ0eSwgc28gY29uc3VtZXJzIGNhbiByZXRoZW1lIGFuIGluZGl2aWR1YWxcbiAqIFN1cmZhY2UgYnkgb3ZlcnJpZGluZyB0aGUgcG9sbHkgdG9rZW4gaW4gYHN0eWxlYCB3aXRob3V0IHRvdWNoaW5nIHRoZVxuICogcHJpbWl0aXZlJ3MgQ1NTLlxuICovXG5cbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vU3VyZmFjZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFN1cmZhY2VWYXJpYW50ID1cbiAgfCBcInBsYWluXCJcbiAgfCBcInJhaXNlZFwiXG4gIHwgXCJzdW5rZW5cIlxuICB8IFwiYnViYmxlXCJcbiAgfCBcImNoaXBcIlxuICB8IFwiY2FsbG91dFwiXG4gIHwgXCJmbG9hdGluZ1wiXG4gIHwgXCJzdGlja3ktYmFyXCI7XG5cbnR5cGUgQmFja2dyb3VuZCA9IFwicmFpc2VkXCIgfCBcInN1bmtlblwiIHwgXCJ0cmFuc3BhcmVudFwiIHwgKHN0cmluZyAmIHt9KTtcbnR5cGUgUmFkaXVzID0gXCJub25lXCIgfCBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgfCBcImZ1bGxcIjtcbnR5cGUgQm9yZGVyID0gXCJub25lXCIgfCBcImRlZmF1bHRcIiB8IFwic3Ryb25nXCI7XG50eXBlIEJvcmRlcldpZHRoID0gXCJub25lXCIgfCBcImRlZmF1bHRcIiB8IFwibWVkaXVtXCIgfCBcInRoaWNrXCI7XG50eXBlIEJvcmRlclNpZGVzID1cbiAgfCBcImFsbFwiXG4gIHwgXCJibG9jay1zdGFydFwiXG4gIHwgXCJibG9jay1lbmRcIlxuICB8IFwiaW5saW5lLXN0YXJ0XCJcbiAgfCBcImlubGluZS1lbmRcIlxuICB8IFwiYmxvY2tcIlxuICB8IFwiaW5saW5lXCI7XG50eXBlIFNoYWRvdyA9IFwibm9uZVwiIHwgXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiO1xudHlwZSBQb3NpdGlvbiA9IFwic3RhdGljXCIgfCBcInJlbGF0aXZlXCIgfCBcImFic29sdXRlXCIgfCBcInN0aWNreVwiIHwgXCJmaXhlZFwiO1xudHlwZSBCb3JkZXJTdHlsZSA9IFwic29saWRcIiB8IFwiZGFzaGVkXCI7XG50eXBlIE92ZXJmbG93ID0gXCJ2aXNpYmxlXCIgfCBcImhpZGRlblwiIHwgXCJhdXRvXCIgfCBcInNjcm9sbFwiO1xudHlwZSBTY2hlbWUgPSBcImRhcmtcIiB8IFwibGlnaHRcIjtcblxuLyoqXG4gKiBBcmJpdHJhcnkgYGRhdGEtKmAsIGBhcmlhLSpgLCBhbmQgYHRpdGxlYCBhdHRyaWJ1dGVzIGZvcndhcmRlZCB0byB0aGVcbiAqIHJlbmRlcmVkIGVsZW1lbnQgc28gY29uc3VtZXJzIChNb2RhbCwgVG9hc3QsIENhcmQsIGV0Yy4pIGNhbiBjb21wb3NlXG4gKiBTdXJmYWNlIHdpdGhvdXQgbG9zaW5nIERPTSBob29rcywgQVJJQSBzZW1hbnRpY3MsIG9yIGEgbmF0aXZlIHRvb2x0aXAuXG4gKi9cbmV4cG9ydCB0eXBlIFN1cmZhY2VEYXRhQXR0cnMgPSB7XG4gIFtkYXRhQXR0cjogYGRhdGEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIFthcmlhQXR0cjogYGFyaWEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHRpdGxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU3VyZmFjZVByb3BzID0gU3VyZmFjZURhdGFBdHRycyAmIHtcbiAgY2hpbGRyZW4/OiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoZGl2LCBzZWN0aW9uLCBhcnRpY2xlLCBhc2lkZSwgaGVhZGVyLCDigKYpLiBEZWZhdWx0cyB0byAnZGl2Jy4gKi9cbiAgYXM/OiBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG5cbiAgLyoqIE5hbWVkIHByZXNldCB0aGF0IHJlc29sdmVzIHRvIGEgZGVmYXVsdCBidW5kbGUgb2YgdGhlIHByb3BzIGJlbG93LiBFeHBsaWNpdCBwcm9wcyBvdmVycmlkZS4gKi9cbiAgdmFyaWFudD86IFN1cmZhY2VWYXJpYW50O1xuXG4gIC8qKiBBbnkgQ1NTIGxlbmd0aCwgdHlwaWNhbGx5IGB2YXIoLS1wb2xseS1zcGFjZS0qKWAuICovXG4gIHBhZGRpbmc/OiBzdHJpbmc7XG5cbiAgLyoqIE5hbWVkIHZhbHVlcyBtYXAgdG8gYHZhcigtLXBvbGx5LXN1cmZhY2UtKilgOyByYXcgc3RyaW5ncyBwYXNzIHRocm91Z2ggZm9yIG9uZS1vZmYgY29sb3Vycy4gKi9cbiAgYmFja2dyb3VuZD86IEJhY2tncm91bmQ7XG5cbiAgcmFkaXVzPzogUmFkaXVzO1xuICBib3JkZXI/OiBCb3JkZXI7XG4gIGJvcmRlcldpZHRoPzogQm9yZGVyV2lkdGg7XG4gIGJvcmRlclNpZGVzPzogQm9yZGVyU2lkZXM7XG4gIC8qKiBCb3JkZXIgbGluZSBzdHlsZS4gRGVmYXVsdDogYCdzb2xpZCdgLiAqL1xuICBib3JkZXJTdHlsZT86IEJvcmRlclN0eWxlO1xuICAvKiogQW55IENTUyBjb2xvdXIsIG92ZXJyaWRpbmcgdGhlIHRva2VuIHRoZSBgYm9yZGVyYCBwcm9wIHdvdWxkIHBpY2suXG4gICAqIEZvciBvbmUtb2ZmIHJpbmdzIChhIGN1dG91dCByaW5nLCBhIGZvY3VzIGhhbG8pIHRoYXQgbm8gc2VtYW50aWNcbiAgICogYm9yZGVyIHRva2VuIGV4cHJlc3Nlcy4gSW1wbGllcyBhIGJvcmRlciB3aWR0aCB3aGVuIG5vbmUgaXMgc2V0LiAqL1xuICBib3JkZXJDb2xvcj86IHN0cmluZztcbiAgc2hhZG93PzogU2hhZG93O1xuXG4gIC8qKlxuICAgKiBSZXRpbnQgdGhlIHRva2VuIHN1YnRyZWUgc28gZGVzY2VuZGFudCBgVGV4dGAvYEJ1dHRvbmAgcmVhZCB0aGVcbiAgICogcmlnaHQgY29udHJhc3Qgb24gYSBkYXJrIChvciBmb3JjZWQtbGlnaHQpIFN1cmZhY2Ug4oCUIGVycm9yXG4gICAqIGJhbm5lcnMsIGNhbWVyYSBvdmVybGF5cywgY2hhdCBidWJibGVzLiBTZXRzIGBkYXRhLXBvbGx5LXRoZW1lYCxcbiAgICogc28gZXZlcnkgYC0tcG9sbHktKmAgY29sb3VyIHRva2VuIGZsaXBzIGZvciB0aGUgc3VidHJlZTsgbm8gaW5saW5lXG4gICAqIGAtLXBvbGx5LXRleHRgIG92ZXJyaWRlIG5lZWRlZCAocG9sbHkjMTM1KS5cbiAgICovXG4gIHNjaGVtZT86IFNjaGVtZTtcblxuICAvKiogYCdub25lJ2AgbWFrZXMgYSBkZWNvcmF0aXZlIFN1cmZhY2UgKGEgc2Nhbi1mcmFtZSBvdmVybGF5KSBpZ25vcmVcbiAgICogdGhlIHBvaW50ZXIgc28gY2xpY2tzIGZhbGwgdGhyb3VnaCB0byB3aGF0IGlzIGJlaGluZCBpdC4gKi9cbiAgcG9pbnRlckV2ZW50cz86IFwibm9uZVwiIHwgXCJhdXRvXCI7XG5cbiAgLyoqIGRpc3BsYXk6IGlubGluZS1ibG9jayDigJQgU3VyZmFjZSBmbG93cyBpbmxpbmUgd2l0aCBzdXJyb3VuZGluZyB0ZXh0LiAqL1xuICBpbmxpbmU/OiBib29sZWFuO1xuICB3aWR0aD86IHN0cmluZztcbiAgaGVpZ2h0Pzogc3RyaW5nO1xuICBtaW5IZWlnaHQ/OiBzdHJpbmc7XG4gIC8qKiBNYXhpbXVtIGJsb2NrIHNpemUg4oCUIGEgU3VyZmFjZSB0aGF0IHNocmlua3MgdG8gY29udGVudCBidXQgaXMgY2FwcGVkLiAqL1xuICBtYXhIZWlnaHQ/OiBzdHJpbmc7XG4gIG1heElubGluZVNpemU/OiBzdHJpbmc7XG5cbiAgLyoqIE92ZXJmbG93IGJlaGF2aW91ci4gYCdhdXRvJ2AgbWFrZXMgYSBoZWlnaHQtY2FwcGVkIFN1cmZhY2Ugc2Nyb2xsLiAqL1xuICBvdmVyZmxvdz86IE92ZXJmbG93O1xuXG4gIHBvc2l0aW9uPzogUG9zaXRpb247XG4gIC8qKiBBbnkgQ1NTIGluc2V0IHZhbHVlIChgJzAnYCwgYCdhdXRvIGF1dG8gMXJlbSAxcmVtJ2AsIGAnMXJlbSdgLCDigKYpLiAqL1xuICBpbnNldD86IHN0cmluZztcbiAgLyoqIENTUyB0cmFuc2Zvcm0g4oCUIGUuZy4gYCd0cmFuc2xhdGVYKC01MCUpJ2AgdG8gY2VudHJlIGEgZml4ZWQgYmFubmVyXG4gICAqIHBhaXJlZCB3aXRoIGBpbnNldDogJ+KApiBhdXRvIOKApiA1MCUnYC4gVGhlIHNhbmN0aW9uZWQgdHJhbnNmb3JtIGVzY2FwZS4gKi9cbiAgdHJhbnNmb3JtPzogc3RyaW5nO1xuICB6SW5kZXg/OiBudW1iZXI7XG5cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogUGVyLWluc3RhbmNlIG92ZXJyaWRlcy4gVGhlIHN1cHBvcnRlZCByZXRpbnQgcGF0aCBpcyB0byBzZXQgcG9sbHkgdG9rZW5zXG4gICAqIGhlcmUsIGUuZy4gYHN0eWxlPXt7IFwiLS1wb2xseS1zdXJmYWNlLXJhaXNlZFwiOiBcIiNmZWYzYzdcIiB9fWAuIFN1cmZhY2VcbiAgICogbWVyZ2VzIHRoaXMgaW50byBpdHMgb3duIGNvbXB1dGVkIHN0eWxlLlxuICAgKi9cbiAgc3R5bGU/OiBKU1guQ1NTUHJvcGVydGllcztcblxuICBpZD86IHN0cmluZztcbiAgcm9sZT86IEpTWC5BcmlhUm9sZTtcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxsZWRieVwiPzogc3RyaW5nO1xuICBcImFyaWEtZGVzY3JpYmVkYnlcIj86IHN0cmluZztcbiAgb25DbGljaz86IEpTWC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gIG9uS2V5RG93bj86IEpTWC5LZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG59O1xuXG50eXBlIFZhcmlhbnREZWZhdWx0cyA9IFBhcnRpYWw8XG4gIFBpY2s8XG4gICAgU3VyZmFjZVByb3BzLFxuICAgIHwgXCJwYWRkaW5nXCJcbiAgICB8IFwiYmFja2dyb3VuZFwiXG4gICAgfCBcInJhZGl1c1wiXG4gICAgfCBcImJvcmRlclwiXG4gICAgfCBcImJvcmRlcldpZHRoXCJcbiAgICB8IFwiYm9yZGVyU2lkZXNcIlxuICAgIHwgXCJzaGFkb3dcIlxuICAgIHwgXCJpbmxpbmVcIlxuICAgIHwgXCJ3aWR0aFwiXG4gICAgfCBcImhlaWdodFwiXG4gICAgfCBcIm1pbkhlaWdodFwiXG4gICAgfCBcIm1heElubGluZVNpemVcIlxuICAgIHwgXCJwb3NpdGlvblwiXG4gICAgfCBcImluc2V0XCJcbiAgICB8IFwiekluZGV4XCJcbiAgPlxuPjtcblxuY29uc3QgdmFyaWFudERlZmF1bHRzOiBSZWNvcmQ8U3VyZmFjZVZhcmlhbnQsIFZhcmlhbnREZWZhdWx0cz4gPSB7XG4gIHBsYWluOiB7fSxcbiAgcmFpc2VkOiB7XG4gICAgYmFja2dyb3VuZDogXCJyYWlzZWRcIixcbiAgICByYWRpdXM6IFwibWRcIixcbiAgICBzaGFkb3c6IFwibWRcIixcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICB9LFxuICBzdW5rZW46IHtcbiAgICBiYWNrZ3JvdW5kOiBcInN1bmtlblwiLFxuICAgIHJhZGl1czogXCJtZFwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gIH0sXG4gIGJ1YmJsZToge1xuICAgIGJhY2tncm91bmQ6IFwidmFyKC0tcG9sbHktc3VyZmFjZS1idWJibGUpXCIsXG4gICAgcmFkaXVzOiBcIm1kXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgICBwYWRkaW5nOiBcInZhcigtLXBvbGx5LXNwYWNlLXNtKSB2YXIoLS1wb2xseS1zcGFjZS1tZClcIixcbiAgfSxcbiAgY2hpcDoge1xuICAgIGlubGluZTogdHJ1ZSxcbiAgICByYWRpdXM6IFwiZnVsbFwiLFxuICAgIHBhZGRpbmc6IFwidmFyKC0tcG9sbHktc3BhY2UteHMpIHZhcigtLXBvbGx5LXNwYWNlLXNtKVwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gIH0sXG4gIGNhbGxvdXQ6IHtcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICAgIHJhZGl1czogXCJzbVwiLFxuICAgIHBhZGRpbmc6IFwidmFyKC0tcG9sbHktc3BhY2Utc20pIHZhcigtLXBvbGx5LXNwYWNlLW1kKVwiLFxuICB9LFxuICBmbG9hdGluZzoge1xuICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgcmFkaXVzOiBcImxnXCIsXG4gICAgc2hhZG93OiBcImxnXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgICBiYWNrZ3JvdW5kOiBcInJhaXNlZFwiLFxuICAgIHpJbmRleDogOTk5OSxcbiAgfSxcbiAgXCJzdGlja3ktYmFyXCI6IHtcbiAgICBwb3NpdGlvbjogXCJzdGlja3lcIixcbiAgICBpbnNldDogXCIwIDAgYXV0byAwXCIsXG4gICAgYm9yZGVyU2lkZXM6IFwiYmxvY2stZW5kXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGJnVmFsdWUoYjogQmFja2dyb3VuZCk6IHN0cmluZyB7XG4gIGlmIChiID09PSBcInJhaXNlZFwiKSByZXR1cm4gXCJ2YXIoLS1wb2xseS1zdXJmYWNlLXJhaXNlZClcIjtcbiAgaWYgKGIgPT09IFwic3Vua2VuXCIpIHJldHVybiBcInZhcigtLXBvbGx5LXN1cmZhY2Utc3Vua2VuKVwiO1xuICBpZiAoYiA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gXCJ0cmFuc3BhcmVudFwiO1xuICByZXR1cm4gYjtcbn1cblxuZnVuY3Rpb24gcmFkaXVzVmFsdWUocjogUmFkaXVzKTogc3RyaW5nIHtcbiAgaWYgKHIgPT09IFwibm9uZVwiKSByZXR1cm4gXCIwXCI7XG4gIHJldHVybiBgdmFyKC0tcG9sbHktcmFkaXVzLSR7cn0pYDtcbn1cblxuZnVuY3Rpb24gYm9yZGVyQ29sb3JWYWx1ZShiOiBCb3JkZXIpOiBzdHJpbmcge1xuICBpZiAoYiA9PT0gXCJub25lXCIpIHJldHVybiBcInRyYW5zcGFyZW50XCI7XG4gIGlmIChiID09PSBcInN0cm9uZ1wiKSByZXR1cm4gXCJ2YXIoLS1wb2xseS1ib3JkZXItc3Ryb25nKVwiO1xuICByZXR1cm4gXCJ2YXIoLS1wb2xseS1ib3JkZXIpXCI7XG59XG5cbmZ1bmN0aW9uIGJvcmRlcldpZHRoVmFsdWUodzogQm9yZGVyV2lkdGgpOiBzdHJpbmcge1xuICBpZiAodyA9PT0gXCJub25lXCIpIHJldHVybiBcIjBcIjtcbiAgcmV0dXJuIGB2YXIoLS1wb2xseS1ib3JkZXItd2lkdGgtJHt3fSlgO1xufVxuXG5mdW5jdGlvbiBzaGFkb3dWYWx1ZShzOiBTaGFkb3cpOiBzdHJpbmcge1xuICBpZiAocyA9PT0gXCJub25lXCIpIHJldHVybiBcIm5vbmVcIjtcbiAgcmV0dXJuIGB2YXIoLS1wb2xseS1zaGFkb3ctJHtzfSlgO1xufVxuXG5mdW5jdGlvbiBib3JkZXJTaWRlc0NsYXNzKHNpZGVzOiBCb3JkZXJTaWRlcyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChzaWRlcyA9PT0gXCJhbGxcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHNpZGVzID09PSBcImJsb2NrLXN0YXJ0XCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtYmxvY2stc3RhcnRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJibG9jay1lbmRcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1ibG9jay1lbmRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmUtc3RhcnRcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1pbmxpbmUtc3RhcnRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmUtZW5kXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtaW5saW5lLWVuZFwiXTtcbiAgaWYgKHNpZGVzID09PSBcImJsb2NrXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtYmxvY2tcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmVcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1pbmxpbmVcIl07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBwcm9wLXRvLWN1c3RvbS1wcm9wZXJ0eSBtYXBwaW5nOyBmbGF0IGFuZCBsaW5lYXIsIG1pcnJvcnMgTGF5b3V0LnRzeC5cbmV4cG9ydCBmdW5jdGlvbiBTdXJmYWNlKHByb3BzOiBTdXJmYWNlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgdmFyaWFudCA9IFwicGxhaW5cIiB9ID0gcHJvcHM7XG4gIGNvbnN0IHYgPSB2YXJpYW50RGVmYXVsdHNbdmFyaWFudF07XG5cbiAgY29uc3QgYXMgPSBwcm9wcy5hcyA/PyBcImRpdlwiO1xuICBjb25zdCBwYWRkaW5nID0gcHJvcHMucGFkZGluZyA/PyB2LnBhZGRpbmc7XG4gIGNvbnN0IGJhY2tncm91bmQgPSBwcm9wcy5iYWNrZ3JvdW5kID8/IHYuYmFja2dyb3VuZDtcbiAgY29uc3QgcmFkaXVzID0gcHJvcHMucmFkaXVzID8/IHYucmFkaXVzO1xuICBjb25zdCBib3JkZXIgPSBwcm9wcy5ib3JkZXIgPz8gdi5ib3JkZXI7XG4gIGNvbnN0IGJvcmRlclNpZGVzID0gcHJvcHMuYm9yZGVyU2lkZXMgPz8gdi5ib3JkZXJTaWRlcyA/PyBcImFsbFwiO1xuICBjb25zdCBzaGFkb3cgPSBwcm9wcy5zaGFkb3cgPz8gdi5zaGFkb3c7XG4gIGNvbnN0IGlubGluZSA9IHByb3BzLmlubGluZSA/PyB2LmlubGluZTtcbiAgY29uc3Qgd2lkdGggPSBwcm9wcy53aWR0aCA/PyB2LndpZHRoO1xuICBjb25zdCBoZWlnaHQgPSBwcm9wcy5oZWlnaHQgPz8gdi5oZWlnaHQ7XG4gIGNvbnN0IG1pbkhlaWdodCA9IHByb3BzLm1pbkhlaWdodCA/PyB2Lm1pbkhlaWdodDtcbiAgY29uc3QgbWF4SW5saW5lU2l6ZSA9IHByb3BzLm1heElubGluZVNpemUgPz8gdi5tYXhJbmxpbmVTaXplO1xuICBjb25zdCBwb3NpdGlvbiA9IHByb3BzLnBvc2l0aW9uID8/IHYucG9zaXRpb247XG4gIGNvbnN0IGluc2V0ID0gcHJvcHMuaW5zZXQgPz8gdi5pbnNldDtcbiAgY29uc3QgekluZGV4ID0gcHJvcHMuekluZGV4ID8/IHYuekluZGV4O1xuICAvLyBwb2xseSMxMjYvIzEzNTogbm8gdmFyaWFudCBzZXRzIHRoZXNlLCBzbyB0aGV5IHJlc29sdmUgc3RyYWlnaHQgZnJvbSBwcm9wcy5cbiAgY29uc3QgeyBtYXhIZWlnaHQsIG92ZXJmbG93LCBib3JkZXJTdHlsZSwgdHJhbnNmb3JtLCBib3JkZXJDb2xvciwgc2NoZW1lLCBwb2ludGVyRXZlbnRzIH0gPSBwcm9wcztcblxuICAvLyBBIGJvcmRlcmVkIHN1cmZhY2UgbmVlZHMgYSB3aWR0aC4gSWYgdGhlIGNvbnN1bWVyIGFza2VkIGZvciBhIGJvcmRlciDigJRcbiAgLy8gYnkgbmFtZSBvciBieSByYXcgY29sb3VyIOKAlCBidXQgZGlkbid0IHBpY2sgYSB3aWR0aCwgaW5mZXIgJ2RlZmF1bHQnXG4gIC8vIHNvIHRoZSBib3JkZXIgcmVuZGVycy5cbiAgY29uc3Qgd2FudHNCb3JkZXIgPSAoYm9yZGVyICE9PSB1bmRlZmluZWQgJiYgYm9yZGVyICE9PSBcIm5vbmVcIikgfHwgYm9yZGVyQ29sb3IgIT09IHVuZGVmaW5lZDtcbiAgY29uc3QgYm9yZGVyV2lkdGggPSBwcm9wcy5ib3JkZXJXaWR0aCA/PyB2LmJvcmRlcldpZHRoID8/ICh3YW50c0JvcmRlciA/IFwiZGVmYXVsdFwiIDogdW5kZWZpbmVkKTtcblxuICBjb25zdCBzdHlsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBpZiAocGFkZGluZykgc3R5bGVbXCItLXMtcFwiXSA9IHBhZGRpbmc7XG4gIGlmIChiYWNrZ3JvdW5kKSBzdHlsZVtcIi0tcy1iZ1wiXSA9IGJnVmFsdWUoYmFja2dyb3VuZCk7XG4gIGlmIChyYWRpdXMpIHN0eWxlW1wiLS1zLXJhZGl1c1wiXSA9IHJhZGl1c1ZhbHVlKHJhZGl1cyk7XG4gIGlmIChib3JkZXIpIHN0eWxlW1wiLS1zLWJvcmRlci1jb2xvclwiXSA9IGJvcmRlckNvbG9yVmFsdWUoYm9yZGVyKTtcbiAgLy8gQSByYXcgYm9yZGVyQ29sb3Igd2lucyBvdmVyIHdoYXRldmVyIHRva2VuIGBib3JkZXJgIHJlc29sdmVkIHRvLlxuICBpZiAoYm9yZGVyQ29sb3IpIHN0eWxlW1wiLS1zLWJvcmRlci1jb2xvclwiXSA9IGJvcmRlckNvbG9yO1xuICBpZiAoYm9yZGVyV2lkdGgpIHN0eWxlW1wiLS1zLWJvcmRlci13aWR0aFwiXSA9IGJvcmRlcldpZHRoVmFsdWUoYm9yZGVyV2lkdGgpO1xuICBpZiAoc2hhZG93KSBzdHlsZVtcIi0tcy1zaGFkb3dcIl0gPSBzaGFkb3dWYWx1ZShzaGFkb3cpO1xuICBpZiAoYm9yZGVyU3R5bGUpIHN0eWxlW1wiLS1zLWJvcmRlci1zdHlsZVwiXSA9IGJvcmRlclN0eWxlO1xuICBpZiAocG9pbnRlckV2ZW50cykgc3R5bGVbXCItLXMtcGVcIl0gPSBwb2ludGVyRXZlbnRzO1xuICBpZiAod2lkdGgpIHN0eWxlW1wiLS1zLXdcIl0gPSB3aWR0aDtcbiAgaWYgKGhlaWdodCkgc3R5bGVbXCItLXMtaFwiXSA9IGhlaWdodDtcbiAgaWYgKG1pbkhlaWdodCkgc3R5bGVbXCItLXMtbWhcIl0gPSBtaW5IZWlnaHQ7XG4gIGlmIChtYXhIZWlnaHQpIHN0eWxlW1wiLS1zLW1heGhcIl0gPSBtYXhIZWlnaHQ7XG4gIGlmIChtYXhJbmxpbmVTaXplKSBzdHlsZVtcIi0tcy1taXNcIl0gPSBtYXhJbmxpbmVTaXplO1xuICBpZiAob3ZlcmZsb3cpIHN0eWxlW1wiLS1zLW92ZXJmbG93XCJdID0gb3ZlcmZsb3c7XG4gIGlmIChwb3NpdGlvbikgc3R5bGVbXCItLXMtcG9zaXRpb25cIl0gPSBwb3NpdGlvbjtcbiAgaWYgKGluc2V0KSBzdHlsZVtcIi0tcy1pbnNldFwiXSA9IGluc2V0O1xuICBpZiAodHJhbnNmb3JtKSBzdHlsZVtcIi0tcy10cmFuc2Zvcm1cIl0gPSB0cmFuc2Zvcm07XG4gIGlmICh6SW5kZXggIT09IHVuZGVmaW5lZCkgc3R5bGVbXCItLXMtelwiXSA9IFN0cmluZyh6SW5kZXgpO1xuXG4gIGlmIChwcm9wcy5zdHlsZSkge1xuICAgIE9iamVjdC5hc3NpZ24oc3R5bGUsIHByb3BzLnN0eWxlIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPik7XG4gIH1cblxuICBjb25zdCBwYXJ0czogKHN0cmluZyB8IHVuZGVmaW5lZClbXSA9IFtjbGFzc2VzW1wic3VyZmFjZVwiXV07XG4gIGlmIChpbmxpbmUpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImlubGluZVwiXSk7XG4gIHBhcnRzLnB1c2goYm9yZGVyU2lkZXNDbGFzcyhib3JkZXJTaWRlcykpO1xuICBpZiAocHJvcHMuY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKHByb3BzLmNsYXNzTmFtZSk7XG4gIGNvbnN0IGNsYXNzTmFtZSA9IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICBjb25zdCBwYXNzdGhyb3VnaDogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocHJvcHMpKSB7XG4gICAgY29uc3QgaXNEYXRhID0ga2V5LnN0YXJ0c1dpdGgoXCJkYXRhLVwiKTtcbiAgICBjb25zdCBpc0FyaWEgPSBrZXkuc3RhcnRzV2l0aChcImFyaWEtXCIpO1xuICAgIGlmICghaXNEYXRhICYmICFpc0FyaWEgJiYga2V5ICE9PSBcInRpdGxlXCIpIGNvbnRpbnVlO1xuICAgIGlmIChrZXkgPT09IFwiZGF0YS1wb2xseS1zdXJmYWNlXCIpIGNvbnRpbnVlO1xuICAgIGlmIChrZXkgPT09IFwiYXJpYS1sYWJlbFwiIHx8IGtleSA9PT0gXCJhcmlhLWxhYmVsbGVkYnlcIiB8fCBrZXkgPT09IFwiYXJpYS1kZXNjcmliZWRieVwiKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IChwcm9wcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICBwYXNzdGhyb3VnaFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgaWQ6IHByb3BzLmlkLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgc3R5bGUsXG4gICAgICBvbkNsaWNrOiBwcm9wcy5vbkNsaWNrLFxuICAgICAgb25LZXlEb3duOiBwcm9wcy5vbktleURvd24sXG4gICAgICByb2xlOiBwcm9wcy5yb2xlLFxuICAgICAgdGFiSW5kZXg6IHByb3BzLnRhYkluZGV4LFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzW1wiYXJpYS1sYWJlbFwiXSxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHByb3BzW1wiYXJpYS1sYWJlbGxlZGJ5XCJdLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzW1wiYXJpYS1kZXNjcmliZWRieVwiXSxcbiAgICAgIFwiZGF0YS1wb2xseS1zdXJmYWNlXCI6IHZhcmlhbnQsXG4gICAgICBcImRhdGEtcG9sbHktdGhlbWVcIjogc2NoZW1lLFxuICAgICAgLi4ucGFzc3Rocm91Z2gsXG4gICAgfSxcbiAgICBwcm9wcy5jaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIENhcmQg4oCUIGNvbXBvdW5kIHByaW1pdGl2ZSB0aGF0IGNvbXBvc2VzIFN1cmZhY2UgZm9yIGVhY2ggbmFtZWQgc2xvdC5cbiAqXG4gKiBDYXJkIGlzIHRoZSBmaXJzdCBjb21wb3VuZCB0aGF0IGlzIHB1cmVseSBhIHJlLXNraW4gb2YgU3VyZmFjZSDigJQgbm9cbiAqIGJlaGF2aW91cmFsIGxheWVyLiBIZWFkZXIsIEJvZHksIGFuZCBGb290ZXIgYXJlIGVhY2ggU3VyZmFjZXMgd2l0aFxuICogc2Vuc2libGUgZGVmYXVsdHM7IFJvb3QgaXMgYSByYWlzZWQgU3VyZmFjZSB0aGF0IHdyYXBzIHRoZW0uIEV2ZXJ5XG4gKiBzbG90IGFjY2VwdHMgdGhlIGZ1bGwgU3VyZmFjZVByb3BzLCBzbyBjb25zdW1lcnMgcmV0aW50LCBvdmVycmlkZSwgb3JcbiAqIHJlYWNoIGZvciByYXcgcGFkZGluZyB3aXRob3V0IHJlYWNoaW5nIHBhc3QgdGhlIHByaW1pdGl2ZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IFN1cmZhY2UsIHR5cGUgU3VyZmFjZVByb3BzIH0gZnJvbSBcIi4vU3VyZmFjZS50c3hcIjtcblxuZXhwb3J0IHR5cGUgQ2FyZFByb3BzID0gU3VyZmFjZVByb3BzO1xuZXhwb3J0IHR5cGUgQ2FyZFNsb3RQcm9wcyA9IFN1cmZhY2VQcm9wcztcblxuZnVuY3Rpb24gUm9vdChwcm9wczogQ2FyZFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHZhcmlhbnQgPSBcInJhaXNlZFwiLCByYWRpdXMgPSBcIm1kXCIsIC4uLnJlc3QgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlIHZhcmlhbnQ9e3ZhcmlhbnR9IHJhZGl1cz17cmFkaXVzfSBkYXRhLXBvbGx5LWNhcmQgey4uLnJlc3R9PlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSGVhZGVyKHByb3BzOiBDYXJkU2xvdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgcGFkZGluZyA9IFwidmFyKC0tcG9sbHktc3BhY2UtbWQpIHZhcigtLXBvbGx5LXNwYWNlLWxnKVwiLFxuICAgIGJvcmRlciA9IFwiZGVmYXVsdFwiLFxuICAgIGJvcmRlclNpZGVzID0gXCJibG9jay1lbmRcIixcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgcGFkZGluZz17cGFkZGluZ31cbiAgICAgIGJvcmRlcj17Ym9yZGVyfVxuICAgICAgYm9yZGVyU2lkZXM9e2JvcmRlclNpZGVzfVxuICAgICAgZGF0YS1wb2xseS1jYXJkLWhlYWRlclxuICAgICAgey4uLnJlc3R9XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQm9keShwcm9wczogQ2FyZFNsb3RQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBwYWRkaW5nID0gXCJ2YXIoLS1wb2xseS1zcGFjZS1sZylcIiwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2UgcGFkZGluZz17cGFkZGluZ30gZGF0YS1wb2xseS1jYXJkLWJvZHkgey4uLnJlc3R9PlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRm9vdGVyKHByb3BzOiBDYXJkU2xvdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgcGFkZGluZyA9IFwidmFyKC0tcG9sbHktc3BhY2UtbWQpIHZhcigtLXBvbGx5LXNwYWNlLWxnKVwiLFxuICAgIGJvcmRlciA9IFwiZGVmYXVsdFwiLFxuICAgIGJvcmRlclNpZGVzID0gXCJibG9jay1zdGFydFwiLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICBwYWRkaW5nPXtwYWRkaW5nfVxuICAgICAgYm9yZGVyPXtib3JkZXJ9XG4gICAgICBib3JkZXJTaWRlcz17Ym9yZGVyU2lkZXN9XG4gICAgICBkYXRhLXBvbGx5LWNhcmQtZm9vdGVyXG4gICAgICB7Li4ucmVzdH1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5leHBvcnQgY29uc3QgQ2FyZCA9IHsgUm9vdCwgSGVhZGVyLCBCb2R5LCBGb290ZXIgfTtcbiIsCiAgICAiLyoqXG4gKiBDaGVja2JveCDigJQgbmF0aXZlIGNoZWNrYm94IHdyYXBwZWQgaW4gYSBsYWJlbC5cbiAqXG4gKiBQYXNzIGEgcGxhaW4gYm9vbGVhbiBmb3IgY29udHJvbGxlZCB1c2UgKGNhbGxlciBsaXN0ZW5zIGVsc2V3aGVyZSksXG4gKiBvciBhIFNpZ25hbDxib29sZWFuPiB0byBoYXZlIHRoZSBwcmltaXRpdmUgYmluZCBpdHMgb3duIGNoYW5nZVxuICogbGlzdGVuZXIgYW5kIG11dGF0ZSB0aGUgc2lnbmFsIGRpcmVjdGx5LiBUaGUgbGFiZWwgd3JhcHMgdGhlIGlucHV0XG4gKiBzbyBjbGlja3MgYW55d2hlcmUgaW4gdGhlIHRhcmdldCBhcmVhIHRvZ2dsZSBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ2hlY2tib3gubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuXG5leHBvcnQgdHlwZSBDaGVja2JveFByb3BzID0ge1xuICBjaGVja2VkPzogYm9vbGVhbiB8IFNpZ25hbDxib29sZWFuPjtcbiAgZGVmYXVsdENoZWNrZWQ/OiBib29sZWFuO1xuICBuYW1lPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGxhYmVsPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gaXNTaWduYWwodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTaWduYWw8Ym9vbGVhbj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmIFwidmFsdWVcIiBpbiB2YWx1ZSAmJiBcInBlZWtcIiBpbiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENoZWNrYm94KHByb3BzOiBDaGVja2JveFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoZWNrZWQsIGRlZmF1bHRDaGVja2VkLCBuYW1lLCBkaXNhYmxlZCA9IGZhbHNlLCBsYWJlbCwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGU6IEpTWC5UYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KTogdm9pZCA9PiB7XG4gICAgaWYgKGlzU2lnbmFsKGNoZWNrZWQpKSB7XG4gICAgICBjaGVja2VkLnZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQ7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNoZWNrZWRWYWx1ZSA9IGlzU2lnbmFsKGNoZWNrZWQpID8gY2hlY2tlZC52YWx1ZSA6IGNoZWNrZWQ7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImNoZWNrYm94XCJdXTtcbiAgaWYgKGRpc2FibGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJkaXNhYmxlZFwiXSA/PyBcIlwiKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPExheW91dFxuICAgICAgYXM9XCJsYWJlbFwiXG4gICAgICBpbmxpbmVcbiAgICAgIGNvbHVtbnM9XCJhdXRvIGF1dG9cIlxuICAgICAgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCJcbiAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgY2xhc3NOYW1lPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWNoZWNrYm94XG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJpbnB1dFwiXX1cbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZFZhbHVlfVxuICAgICAgICBkZWZhdWx0Q2hlY2tlZD17ZGVmYXVsdENoZWNrZWR9XG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIC8+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICA8L0xheW91dD5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDbHVzdGVyIOKAlCB3cmFwcGluZyByb3cgb2YgdmFyaWFibGUtd2lkdGggaXRlbXMuXG4gKlxuICogVGhlIGZsZXgtd3JhcCBjb3VudGVycGFydCB0byA8TGF5b3V0Pi4gV2hlcmUgTGF5b3V0IG93bnMgQ1NTIGdyaWRcbiAqIHRyYWNrcywgQ2x1c3RlciBvd25zIGEgcm93IG9mIGl0ZW1zIHRoYXQgZGlmZmVyIGluIHdpZHRoIGFuZCBtdXN0XG4gKiByZWZsb3cgYXMgc3BhY2UgcnVucyBvdXQg4oCUIGZpbHRlciBjaGlwcywgdGFnIGFuZCBiYWRnZSBsaXN0cywgZ3JvdXBzXG4gKiBvZiBzbWFsbCBidXR0b25zLiBJdGVtcyBrZWVwIGV2ZW4gc3BhY2luZyBvbiBib3RoIGF4ZXMgdmlhIGBnYXBgOyB0aGVcbiAqIHJvdyB3cmFwcyBhdXRvbWF0aWNhbGx5IGF0IG5hcnJvdyB3aWR0aHMuIExpa2UgTGF5b3V0LCBwcm9wcyBtYXAgdG9cbiAqIENTUyBjdXN0b20gcHJvcGVydGllcyBzbyBjb25zdW1lcnMgY2FuIG92ZXJyaWRlIGFueSBvZiB0aGVtIGluIGFcbiAqIG1lZGlhIHF1ZXJ5IHdpdGhvdXQgdG91Y2hpbmcgc3BlY2lmaWNpdHkuXG4gKlxuICogVGhpcyBpcyB0aGUgc2Vjb25kIChhbmQgZmluYWwpIGxheW91dCBwcmltaXRpdmU6IGEgY29uc3VtZXIgbmV2ZXJcbiAqIHdyaXRlcyBgZGlzcGxheTogZmxleGAgb3IgYGRpc3BsYXk6IGdyaWRgIHRoZW1zZWx2ZXMg4oCUIGdyaWQgZ29lc1xuICogdGhyb3VnaCA8TGF5b3V0PiwgYSB3cmFwcGluZyBjbHVzdGVyIGdvZXMgdGhyb3VnaCA8Q2x1c3Rlcj4uXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9DbHVzdGVyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcblxuZXhwb3J0IHR5cGUgQ2x1c3RlclByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuXG4gIC8qKiBQb2x5bW9ycGhpYyBlbGVtZW50IChkaXYsIG5hdiwgdWwsIOKApikuIERlZmF1bHRzIHRvICdkaXYnLiAqL1xuICBhcz86IGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcblxuICAvKiogU3BhY2UgYmV0d2VlbiBpdGVtcywgYm90aCBheGVzLiBUeXBpY2FsbHkgYSBgLS1wb2xseS1zcGFjZS0qYCB0b2tlbi4gKi9cbiAgZ2FwPzogc3RyaW5nO1xuICBwYWRkaW5nPzogc3RyaW5nO1xuXG4gIC8qKiBNYWluLWF4aXMgZGlzdHJpYnV0aW9uIOKAlCBtYXBzIHRvIGp1c3RpZnktY29udGVudC4gRGVmYXVsdDogc3RhcnQuICovXG4gIGp1c3RpZnk/OiBzdHJpbmc7XG4gIC8qKiBDcm9zcy1heGlzIGFsaWdubWVudCB3aXRoaW4gYSB3cmFwcGVkIHJvdyDigJQgbWFwcyB0byBhbGlnbi1pdGVtcy4gRGVmYXVsdDogY2VudGVyLiAqL1xuICBhbGlnbj86IHN0cmluZztcblxuICAvKiogUmVuZGVyIGFzIGlubGluZS1mbGV4IHNvIHRoZSBjbHVzdGVyIGZsb3dzIGlubGluZSB3aXRoIHN1cnJvdW5kaW5nIHRleHQuICovXG4gIGlubGluZT86IGJvb2xlYW47XG5cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgcm9sZT86IEpTWC5BcmlhUm9sZTtcbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gQ2x1c3Rlcihwcm9wczogQ2x1c3RlclByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCBhcyA9IFwiZGl2XCIsIGdhcCwgcGFkZGluZywganVzdGlmeSwgYWxpZ24sIGlubGluZSwgY2xhc3NOYW1lLCBpZCwgcm9sZSB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc3R5bGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgaWYgKGdhcCkgc3R5bGVbXCItLWMtZ2FwXCJdID0gZ2FwO1xuICBpZiAocGFkZGluZykgc3R5bGVbXCItLWMtcFwiXSA9IHBhZGRpbmc7XG4gIGlmIChqdXN0aWZ5KSBzdHlsZVtcIi0tYy1qY1wiXSA9IGp1c3RpZnk7XG4gIGlmIChhbGlnbikgc3R5bGVbXCItLWMtYWlcIl0gPSBhbGlnbjtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiY2x1c3RlclwiXV07XG4gIGlmIChpbmxpbmUpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImlubGluZVwiXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICBhcyxcbiAgICB7XG4gICAgICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIGZpcnN0OyB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXMgd2luLlxuICAgICAgLi4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKSxcbiAgICAgIGlkLFxuICAgICAgY2xhc3M6IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSxcbiAgICAgIHN0eWxlLFxuICAgICAgcm9sZSxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBwcm9wc1tcImFyaWEtbGFiZWxcIl0sXG4gICAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICAgIFwiZGF0YS1wb2xseS1jbHVzdGVyXCI6IHRydWUsXG4gICAgfSxcbiAgICBjaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIENvZGUg4oCUIGlubGluZSBtb25vc3BhY2UgY29kZSBzcGFuLlxuICpcbiAqIFJlbmRlcnMgYSBgPGNvZGU+YCB3aXRoIHRoZSBgLS1wb2xseS1mb250LW1vbm9gIHN0YWNrLCBhIGZhaW50IHN1bmtlblxuICogdGludCwgYW5kIHNudWcgcGFkZGluZyBzbyBhIGNvbnN1bWVyIG5ldmVyIGhhbmQtcm9sbHMgYSBgLm1vbm9gIGNsYXNzXG4gKiBmb3IgaW5saW5lIGNvZGUsIGlkZW50aWZpZXJzLCBvciBrZXlib2FyZCBoaW50cy4gRm9yIG11bHRpLWxpbmUgY29kZVxuICogYmxvY2tzLCBwYXNzIGBibG9ja2AsIHdoaWNoIHN3aXRjaGVzIHRvIGEgcHJlLXdyYXBwZWQgPHByZT48Y29kZT4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ29kZS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5cbmV4cG9ydCB0eXBlIENvZGVQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgLyoqIFJlbmRlciBhcyBhIGJsb2NrICg8cHJlPjxjb2RlPikgaW5zdGVhZCBvZiBhbiBpbmxpbmUgc3Bhbi4gKi9cbiAgYmxvY2s/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIENvZGUocHJvcHM6IENvZGVQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgYmxvY2ssIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSogc3ByZWFkIGZpcnN0OyB0aGUgZXhwbGljaXQgYXR0cmlidXRlcyBhZnRlclxuICAvLyB3aW4gb24gYW55IGNvbGxpc2lvbi5cbiAgY29uc3QgcGFzc3Rocm91Z2ggPSBjb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpO1xuXG4gIGlmIChibG9jaykge1xuICAgIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJibG9ja1wiXV07XG4gICAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICAgIHJldHVybiAoXG4gICAgICA8cHJlXG4gICAgICAgIHsuLi5wYXNzdGhyb3VnaH1cbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgIGRhdGEtcG9sbHktY29kZT1cImJsb2NrXCJcbiAgICAgID5cbiAgICAgICAgPGNvZGU+e2NoaWxkcmVufTwvY29kZT5cbiAgICAgIDwvcHJlPlxuICAgICk7XG4gIH1cblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiY29kZVwiXV07XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8Y29kZVxuICAgICAgey4uLnBhc3N0aHJvdWdofVxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktY29kZT1cImlubGluZVwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvY29kZT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDb2xsYXBzaWJsZSDigJQgbmF0aXZlIDxkZXRhaWxzPi88c3VtbWFyeT4gd3JhcHBlci5cbiAqXG4gKiBVc2VzIHRoZSBicm93c2VyJ3MgYnVpbHQtaW4gZGlzY2xvc3VyZSBzZW1hbnRpY3Mgc28ga2V5Ym9hcmQgYW5kXG4gKiBzY3JlZW4tcmVhZGVyIGJlaGF2aW91ciBjb21lIGZyZWUuIFRoZSBhcnJvdyBpcyBhIHJlYWwgZWxlbWVudCwgbm90IGFcbiAqIDo6YmVmb3JlOiB0aGUgc3VtbWFyeSBpcyBhIHR3by10cmFjayA8TGF5b3V0PiwgYW5kIG5vIGxheW91dCBjb250YWluZXIgY2FuXG4gKiBhcnJhbmdlIGEgcHNldWRvLWVsZW1lbnQuIEl0IHJvdGF0ZXMgb24gb3Blbi5cbiAqIENvbG9ycywgc3BhY2luZywgYW5kIG1vdGlvbiBjb21lIGZyb20gdG9rZW5zOyBgcHJlZmVycy1yZWR1Y2VkLW1vdGlvbmBcbiAqIHplcm9lcyB0aGUgcm90YXRpb24gdmlhIHRoZSBtb3Rpb24gdG9rZW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ29sbGFwc2libGUubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuXG5leHBvcnQgdHlwZSBDb2xsYXBzaWJsZVByb3BzID0ge1xuICAvKiogRGlzY2xvc3VyZSBoZWFkZXIuIEEgc3RyaW5nIGZvciB0aGUgY29tbW9uIGNhc2UsIG9yIGFueSBub2RlIOKAlFxuICAgKiBlLmcuIGEgbXV0ZWQsIHNtYWxsIDxUZXh0PiDigJQgd2hlbiB0aGUgaGVhZGVyIG5lZWRzIHN0eWxpbmcuICovXG4gIHN1bW1hcnk6IENvbXBvbmVudENoaWxkcmVuO1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGRlZmF1bHRPcGVuPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbi8qKiBJbnB1dCB0eXBlcyB3aG9zZSBTcGFjZS9FbnRlciBpcyBhbiBhY3RpdmF0aW9uLCBub3QgdGV4dCBlbnRyeSDigJQgdGhlc2VcbiAqIGtlZXAgdGhlaXIgb3duIGtleWJvYXJkIGJlaGF2aW91ciBhbmQgbXVzdCBub3QgYmUgZ3VhcmRlZC4gKi9cbmNvbnN0IE5PTl9URVhUX0lOUFVUX1RZUEVTID0gbmV3IFNldChbXG4gIFwiY2hlY2tib3hcIixcbiAgXCJyYWRpb1wiLFxuICBcImJ1dHRvblwiLFxuICBcInN1Ym1pdFwiLFxuICBcInJlc2V0XCIsXG4gIFwiZmlsZVwiLFxuICBcImltYWdlXCIsXG4gIFwicmFuZ2VcIixcbiAgXCJjb2xvclwiLFxuXSk7XG5cbi8qKiBJcyB0aGUgZXZlbnQgdGFyZ2V0IGEgZmllbGQgd2hlcmUgU3BhY2UvRW50ZXIgaW5zZXJ0cy9lZGl0cyB0ZXh0PyAqL1xuZnVuY3Rpb24gaXNUZXh0RW50cnlUYXJnZXQodGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSkgcmV0dXJuIHRydWU7XG4gIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgcmV0dXJuICFOT05fVEVYVF9JTlBVVF9UWVBFUy5oYXModGFyZ2V0LnR5cGUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaHJvbWl1bSB0b2dnbGVzIGEgPGRldGFpbHM+IG9uIHRoZSBTcGFjZS9FbnRlciAqa2V5dXAqIG9mIGl0cyA8c3VtbWFyeT4sXG4gKiBldmVuIHdoZW4gZm9jdXMgc2l0cyBpbiBhIG5lc3RlZCB0ZXh0IGZpZWxkIOKAlCBzbyBldmVyeSBzcGFjZSB0eXBlZCBpbiBhblxuICogZWRpdGFibGUgaGVhZGVyIHdvdWxkIGNvbGxhcHNlIHRoZSBkaXNjbG9zdXJlLiBzdG9wUHJvcGFnYXRpb24gY2FuJ3Qgc3RvcFxuICogaXQgKHRoZSB0b2dnbGUgaXMgdGhlIHN1bW1hcnkncyBvd24gYWN0aXZhdGlvbiBiZWhhdmlvdXIsIG5vdCBhIGJ1YmJsaW5nXG4gKiBsaXN0ZW5lcikgYW5kIHByZXZlbnREZWZhdWx0IG9uICprZXlkb3duKiB3b3VsZCBzd2FsbG93IHRoZSBjaGFyYWN0ZXIuIFRoZVxuICogY2hhcmFjdGVyIGlzIGFscmVhZHkgaW5zZXJ0ZWQgYnkgdGhlIHRpbWUga2V5dXAgZmlyZXMsIHNvIGNhbmNlbGxpbmcgdGhlXG4gKiBrZXl1cCBkZWZhdWx0IGZvciB0ZXh0LWVudHJ5IGZpZWxkcyBraWxscyB0aGUgdG9nZ2xlIHdoaWxlIGxlYXZpbmcgdHlwaW5nXG4gKiB1bnRvdWNoZWQuIEJ1dHRvbnMvY2hlY2tib3gvcmFkaW8gZmFsbCB0aHJvdWdoIGFuZCBrZWVwIHRoZWlyIG93blxuICogYWN0aXZhdGlvbjsgdGhlIHN1bW1hcnkgaXRzZWxmIChubyBuZXN0ZWQgZmllbGQpIGtlZXBzIG5vcm1hbCBrZXlib2FyZFxuICogZGlzY2xvc3VyZS5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeUtleVVwKGV2ZW50OiBKU1guVGFyZ2V0ZWRLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50Pik6IHZvaWQge1xuICBpZiAoZXZlbnQua2V5ICE9PSBcIiBcIiAmJiBldmVudC5rZXkgIT09IFwiRW50ZXJcIikgcmV0dXJuO1xuICBpZiAoIWlzVGV4dEVudHJ5VGFyZ2V0KGV2ZW50LnRhcmdldCkpIHJldHVybjtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbGxhcHNpYmxlKHByb3BzOiBDb2xsYXBzaWJsZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHN1bW1hcnksIGNoaWxkcmVuLCBkZWZhdWx0T3BlbiA9IGZhbHNlLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImNvbGxhcHNpYmxlXCJdXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxkZXRhaWxzXG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuam9pbihcIiBcIil9XG4gICAgICBvcGVuPXtkZWZhdWx0T3Blbn1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktY29sbGFwc2libGVcbiAgICA+XG4gICAgICA8TGF5b3V0XG4gICAgICAgIGFzPVwic3VtbWFyeVwiXG4gICAgICAgIGNvbHVtbnM9XCJhdXRvIDFmclwiXG4gICAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXNbXCJzdW1tYXJ5XCJdfVxuICAgICAgICBvbktleVVwPXtoYW5kbGVTdW1tYXJ5S2V5VXB9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibWFya2VyXCJdfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcInN1bW1hcnlDb250ZW50XCJdfT57c3VtbWFyeX08L3NwYW4+XG4gICAgICA8L0xheW91dD5cbiAgICAgIDxkaXYgY2xhc3M9e2NsYXNzZXNbXCJjb250ZW50XCJdfT57Y2hpbGRyZW59PC9kaXY+XG4gICAgPC9kZXRhaWxzPlxuICApO1xufVxuIiwKICAgICJpbXBvcnR7Q29tcG9uZW50IGFzIG4sY3JlYXRlRWxlbWVudCBhcyB0LG9wdGlvbnMgYXMgZSx0b0NoaWxkQXJyYXkgYXMgcixGcmFnbWVudCBhcyB1LHJlbmRlciBhcyBvLGh5ZHJhdGUgYXMgaSxjcmVhdGVDb250ZXh0IGFzIGwsY3JlYXRlUmVmIGFzIGMsY2xvbmVFbGVtZW50IGFzIGZ9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0NvbXBvbmVudCxGcmFnbWVudCxGcmFnbWVudCBhcyBTdHJpY3RNb2RlLGNyZWF0ZUNvbnRleHQsY3JlYXRlRWxlbWVudCxjcmVhdGVSZWZ9ZnJvbVwicHJlYWN0XCI7aW1wb3J0e3VzZVN0YXRlIGFzIGEsdXNlTGF5b3V0RWZmZWN0IGFzIHMsdXNlRWZmZWN0IGFzIGgsdXNlQ2FsbGJhY2sgYXMgdix1c2VDb250ZXh0IGFzIGQsdXNlRGVidWdWYWx1ZSBhcyBtLHVzZUlkIGFzIHAsdXNlSW1wZXJhdGl2ZUhhbmRsZSBhcyB5LHVzZU1lbW8gYXMgXyx1c2VSZWR1Y2VyIGFzIGIsdXNlUmVmIGFzIFN9ZnJvbVwicHJlYWN0L2hvb2tzXCI7ZXhwb3J0KmZyb21cInByZWFjdC9ob29rc1wiO2Z1bmN0aW9uIGcobix0KXtmb3IodmFyIGUgaW4gdCluW2VdPXRbZV07cmV0dXJuIG59ZnVuY3Rpb24gRShuLHQpe2Zvcih2YXIgZSBpbiBuKWlmKFwiX19zb3VyY2VcIiE9PWUmJiEoZSBpbiB0KSlyZXR1cm4hMDtmb3IodmFyIHIgaW4gdClpZihcIl9fc291cmNlXCIhPT1yJiZuW3JdIT09dFtyXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBDKG4sdCl7dmFyIGU9dCgpLHI9YSh7dDp7X186ZSx1OnR9fSksdT1yWzBdLnQsbz1yWzFdO3JldHVybiBzKGZ1bmN0aW9uKCl7dS5fXz1lLHUudT10LFIodSkmJm8oe3Q6dX0pfSxbbixlLHRdKSxoKGZ1bmN0aW9uKCl7cmV0dXJuIFIodSkmJm8oe3Q6dX0pLG4oZnVuY3Rpb24oKXtSKHUpJiZvKHt0OnV9KX0pfSxbbl0pLGV9ZnVuY3Rpb24gUihuKXt0cnl7cmV0dXJuISgodD1uLl9fKT09PShlPW4udSgpKSYmKDAhPT10fHwxL3Q9PTEvZSl8fHQhPXQmJmUhPWUpfWNhdGNoKG4pe3JldHVybiEwfXZhciB0LGV9ZnVuY3Rpb24geChuKXtuKCl9ZnVuY3Rpb24gdyhuKXtyZXR1cm4gbn1mdW5jdGlvbiBrKCl7cmV0dXJuWyExLHhdfXZhciBJPXM7ZnVuY3Rpb24gTShuLHQpe3RoaXMucHJvcHM9bix0aGlzLmNvbnRleHQ9dH1mdW5jdGlvbiBOKG4sZSl7ZnVuY3Rpb24gcihuKXt2YXIgdD10aGlzLnByb3BzLnJlZjtyZXR1cm4gdCE9bi5yZWYmJnQmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3QobnVsbCk6dC5jdXJyZW50PW51bGwpLGU/IWUodGhpcy5wcm9wcyxuKXx8dCE9bi5yZWY6RSh0aGlzLnByb3BzLG4pfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPXIsdChuLGUpfXJldHVybiB1LmRpc3BsYXlOYW1lPVwiTWVtbyhcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix1Ll9fZj11LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLHUudHlwZT1uLHV9KE0ucHJvdG90eXBlPW5ldyBuKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxNLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gRSh0aGlzLnByb3BzLG4pfHxFKHRoaXMuc3RhdGUsdCl9O3ZhciBUPWUuX19iO2UuX19iPWZ1bmN0aW9uKG4pe24udHlwZSYmbi50eXBlLl9fZiYmbi5yZWYmJihuLnByb3BzLnJlZj1uLnJlZixuLnJlZj1udWxsKSxUJiZUKG4pfTt2YXIgQT1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIil8fDM5MTE7ZnVuY3Rpb24gRChuKXtmdW5jdGlvbiB0KHQpe3ZhciBlPWcoe30sdCk7cmV0dXJuIGRlbGV0ZSBlLnJlZixuKGUsdC5yZWZ8fG51bGwpfXJldHVybiB0LiQkdHlwZW9mPUEsdC5yZW5kZXI9bix0LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXQuX19mPSEwLHQuZGlzcGxheU5hbWU9XCJGb3J3YXJkUmVmKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHR9dmFyIEY9ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bj9udWxsOnIocihuKS5tYXAodCkpfSxMPXttYXA6Rixmb3JFYWNoOkYsY291bnQ6ZnVuY3Rpb24obil7cmV0dXJuIG4/cihuKS5sZW5ndGg6MH0sb25seTpmdW5jdGlvbihuKXt2YXIgdD1yKG4pO2lmKDEhPT10Lmxlbmd0aCl0aHJvd1wiQ2hpbGRyZW4ub25seVwiO3JldHVybiB0WzBdfSx0b0FycmF5OnJ9LE89ZS5fX2U7ZS5fX2U9ZnVuY3Rpb24obix0LGUscil7aWYobi50aGVuKWZvcih2YXIgdSxvPXQ7bz1vLl9fOylpZigodT1vLl9fYykmJnUuX19jKXJldHVybiBudWxsPT10Ll9fZSYmKHQuX19lPWUuX19lLHQuX19rPWUuX19rKSx1Ll9fYyhuLHQpO08obix0LGUscil9O3ZhciBVPWUudW5tb3VudDtmdW5jdGlvbiBWKG4sdCxlKXtyZXR1cm4gbiYmKG4uX19jJiZuLl9fYy5fX0gmJihuLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLl9fYyYmbi5fX2MoKX0pLG4uX19jLl9fSD1udWxsKSxudWxsIT0obj1nKHt9LG4pKS5fX2MmJihuLl9fYy5fX1A9PT1lJiYobi5fX2MuX19QPXQpLG4uX19jLl9fZT0hMCxuLl9fYz1udWxsKSxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBWKG4sdCxlKX0pKSxufWZ1bmN0aW9uIFcobix0LGUpe3JldHVybiBuJiZlJiYobi5fX3Y9bnVsbCxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBXKG4sdCxlKX0pLG4uX19jJiZuLl9fYy5fX1A9PT10JiYobi5fX2UmJmUuYXBwZW5kQ2hpbGQobi5fX2UpLG4uX19jLl9fZT0hMCxuLl9fYy5fX1A9ZSkpLG59ZnVuY3Rpb24gUCgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBqKG4pe3ZhciB0PW4uX18mJm4uX18uX19jO3JldHVybiB0JiZ0Ll9fYSYmdC5fX2Eobil9ZnVuY3Rpb24geihuKXt2YXIgZSxyLHUsbz1udWxsO2Z1bmN0aW9uIGkoaSl7aWYoZXx8KGU9bigpKS50aGVuKGZ1bmN0aW9uKG4pe24mJihvPW4uZGVmYXVsdHx8biksdT0hMH0sZnVuY3Rpb24obil7cj1uLHU9ITB9KSxyKXRocm93IHI7aWYoIXUpdGhyb3cgZTtyZXR1cm4gbz90KG8saSk6bnVsbH1yZXR1cm4gaS5kaXNwbGF5TmFtZT1cIkxhenlcIixpLl9fZj0hMCxpfWZ1bmN0aW9uIEIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1lLnVubW91bnQ9ZnVuY3Rpb24obil7dmFyIHQ9bi5fX2M7dCYmKHQuX196PSEwKSx0JiZ0Ll9fUiYmdC5fX1IoKSx0JiYzMiZuLl9fdSYmKG4udHlwZT1udWxsKSxVJiZVKG4pfSwoUC5wcm90b3R5cGU9bmV3IG4pLl9fYz1mdW5jdGlvbihuLHQpe3ZhciBlPXQuX19jLHI9dGhpcztudWxsPT1yLm8mJihyLm89W10pLHIuby5wdXNoKGUpO3ZhciB1PWooci5fX3YpLG89ITEsaT1mdW5jdGlvbigpe298fHIuX196fHwobz0hMCxlLl9fUj1udWxsLHU/dShjKTpjKCkpfTtlLl9fUj1pO3ZhciBsPWUuX19QO2UuX19QPW51bGw7dmFyIGM9ZnVuY3Rpb24oKXtpZighLS1yLl9fdSl7aWYoci5zdGF0ZS5fX2Epe3ZhciBuPXIuc3RhdGUuX19hO3IuX192Ll9fa1swXT1XKG4sbi5fX2MuX19QLG4uX19jLl9fTyl9dmFyIHQ7Zm9yKHIuc2V0U3RhdGUoe19fYTpyLl9fYj1udWxsfSk7dD1yLm8ucG9wKCk7KXQuX19QPWwsdC5mb3JjZVVwZGF0ZSgpfX07ci5fX3UrK3x8MzImdC5fX3V8fHIuc2V0U3RhdGUoe19fYTpyLl9fYj1yLl9fdi5fX2tbMF19KSxuLnRoZW4oaSxpKX0sUC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LFAucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihuLGUpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksbz10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1WKHRoaXMuX19iLHIsby5fX089by5fX1ApfXRoaXMuX19iPW51bGx9dmFyIGk9ZS5fX2EmJnQodSxudWxsLG4uZmFsbGJhY2spO3JldHVybiBpJiYoaS5fX3UmPS0zMyksW3QodSxudWxsLGUuX19hP251bGw6bi5jaGlsZHJlbiksaV19O3ZhciBIPWZ1bmN0aW9uKG4sdCxlKXtpZigrK2VbMV09PT1lWzBdJiZuLmwuZGVsZXRlKHQpLG4ucHJvcHMucmV2ZWFsT3JkZXImJihcInRcIiE9PW4ucHJvcHMucmV2ZWFsT3JkZXJbMF18fCFuLmwuc2l6ZSkpZm9yKGU9bi5pO2U7KXtmb3IoO2UubGVuZ3RoPjM7KWUucG9wKCkoKTtpZihlWzFdPGVbMF0pYnJlYWs7bi5pPWU9ZVsyXX19O2Z1bmN0aW9uIFoobil7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uY29udGV4dH0sbi5jaGlsZHJlbn1mdW5jdGlvbiBZKG4pe3ZhciBlPXRoaXMscj1uLmg7aWYoZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe28obnVsbCxlLnYpLGUudj1udWxsLGUuaD1udWxsfSxlLmgmJmUuaCE9PXImJmUuY29tcG9uZW50V2lsbFVubW91bnQoKSwhZS52KXtmb3IodmFyIHU9ZS5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXztlLmg9cixlLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpyLGNoaWxkTm9kZXM6W10sX19rOntfX206dS5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpyLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24obix0KXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmguaW5zZXJ0QmVmb3JlKG4sdCl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKG4pe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2Yobik+Pj4xLDEpLGUuaC5yZW1vdmVDaGlsZChuKX19fW8odChaLHtjb250ZXh0OmUuY29udGV4dH0sbi5fX3YpLGUudil9ZnVuY3Rpb24gJChuLGUpe3ZhciByPXQoWSx7X192Om4saDplfSk7cmV0dXJuIHIuY29udGFpbmVySW5mbz1lLHJ9KEIucHJvdG90eXBlPW5ldyBuKS5fX2E9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcyxlPWoodC5fX3YpLHI9dC5sLmdldChuKTtyZXR1cm4gclswXSsrLGZ1bmN0aW9uKHUpe3ZhciBvPWZ1bmN0aW9uKCl7dC5wcm9wcy5yZXZlYWxPcmRlcj8oci5wdXNoKHUpLEgodCxuLHIpKTp1KCl9O2U/ZShvKTpvKCl9fSxCLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obil7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIHQ9cihuLmNoaWxkcmVuKTtuLnJldmVhbE9yZGVyJiZcImJcIj09PW4ucmV2ZWFsT3JkZXJbMF0mJnQucmV2ZXJzZSgpO2Zvcih2YXIgZT10Lmxlbmd0aDtlLS07KXRoaXMubC5zZXQodFtlXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gbi5jaGlsZHJlbn0sQi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPUIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIG49dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbih0LGUpe0gobixlLHQpfSl9O3ZhciBxPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpfHw2MDEwMyxHPS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxKPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sSz0vW0EtWjAtOV0vZyxRPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCxYPWZ1bmN0aW9uKG4pe3JldHVybihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sKCk/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3Qobil9O2Z1bmN0aW9uIG5uKG4sdCxlKXtyZXR1cm4gbnVsbD09dC5fX2smJih0LnRleHRDb250ZW50PVwiXCIpLG8obix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfWZ1bmN0aW9uIHRuKG4sdCxlKXtyZXR1cm4gaShuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9bi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbXCJjb21wb25lbnRXaWxsTW91bnRcIixcImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNcIixcImNvbXBvbmVudFdpbGxVcGRhdGVcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsdCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW1wiVU5TQUZFX1wiK3RdfSxzZXQ6ZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm59KX19KX0pO3ZhciBlbj1lLmV2ZW50O2UuZXZlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGVuJiYobj1lbihuKSksbi5wZXJzaXN0PWZ1bmN0aW9uKCl7fSxuLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSxuLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LG4ubmF0aXZlRXZlbnQ9bn07dmFyIHJuLHVuPXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxvbj1lLnZub2RlO2Uudm5vZGU9ZnVuY3Rpb24obil7XCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSYmZnVuY3Rpb24obil7dmFyIHQ9bi5wcm9wcyxlPW4udHlwZSx1PXt9LG89LTE9PWUuaW5kZXhPZihcIi1cIik7Zm9yKHZhciBpIGluIHQpe3ZhciBsPXRbaV07aWYoIShcInZhbHVlXCI9PT1pJiZcImRlZmF1bHRWYWx1ZVwiaW4gdCYmbnVsbD09bHx8USYmXCJjaGlsZHJlblwiPT09aSYmXCJub3NjcmlwdFwiPT09ZXx8XCJjbGFzc1wiPT09aXx8XCJjbGFzc05hbWVcIj09PWkpKXt2YXIgYz1pLnRvTG93ZXJDYXNlKCk7XCJkZWZhdWx0VmFsdWVcIj09PWkmJlwidmFsdWVcImluIHQmJm51bGw9PXQudmFsdWU/aT1cInZhbHVlXCI6XCJkb3dubG9hZFwiPT09aSYmITA9PT1sP2w9XCJcIjpcInRyYW5zbGF0ZVwiPT09YyYmXCJub1wiPT09bD9sPSExOlwib1wiPT09Y1swXSYmXCJuXCI9PT1jWzFdP1wib25kb3VibGVjbGlja1wiPT09Yz9pPVwib25kYmxjbGlja1wiOlwib25jaGFuZ2VcIiE9PWN8fFwiaW5wdXRcIiE9PWUmJlwidGV4dGFyZWFcIiE9PWV8fFgodC50eXBlKT9cIm9uZm9jdXNcIj09PWM/aT1cIm9uZm9jdXNpblwiOlwib25ibHVyXCI9PT1jP2k9XCJvbmZvY3Vzb3V0XCI6Si50ZXN0KGkpJiYoaT1jKTpjPWk9XCJvbmlucHV0XCI6byYmRy50ZXN0KGkpP2k9aS5yZXBsYWNlKEssXCItJCZcIikudG9Mb3dlckNhc2UoKTpudWxsPT09bCYmKGw9dm9pZCAwKSxcIm9uaW5wdXRcIj09PWMmJnVbaT1jXSYmKGk9XCJvbmlucHV0Q2FwdHVyZVwiKSx1W2ldPWx9fVwic2VsZWN0XCI9PWUmJih1Lm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHUudmFsdWUpJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD0tMSE9dS52YWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpfSkpLG51bGwhPXUuZGVmYXVsdFZhbHVlJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD11Lm11bHRpcGxlPy0xIT11LmRlZmF1bHRWYWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpOnUuZGVmYXVsdFZhbHVlPT1uLnByb3BzLnZhbHVlfSkpKSx0LmNsYXNzJiYhdC5jbGFzc05hbWU/KHUuY2xhc3M9dC5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxcImNsYXNzTmFtZVwiLHVuKSk6dC5jbGFzc05hbWUmJih1LmNsYXNzPXUuY2xhc3NOYW1lPXQuY2xhc3NOYW1lKSxuLnByb3BzPXV9KG4pLG4uJCR0eXBlb2Y9cSxvbiYmb24obil9O3ZhciBsbj1lLl9fcjtlLl9fcj1mdW5jdGlvbihuKXtsbiYmbG4obikscm49bi5fX2N9O3ZhciBjbj1lLmRpZmZlZDtlLmRpZmZlZD1mdW5jdGlvbihuKXtjbiYmY24obik7dmFyIHQ9bi5wcm9wcyxlPW4uX19lO251bGwhPWUmJlwidGV4dGFyZWFcIj09PW4udHlwZSYmXCJ2YWx1ZVwiaW4gdCYmdC52YWx1ZSE9PWUudmFsdWUmJihlLnZhbHVlPW51bGw9PXQudmFsdWU/XCJcIjp0LnZhbHVlKSxybj1udWxsfTt2YXIgZm49e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiBybi5fX25bbi5fX2NdLnByb3BzLnZhbHVlfSx1c2VDYWxsYmFjazp2LHVzZUNvbnRleHQ6ZCx1c2VEZWJ1Z1ZhbHVlOm0sdXNlRGVmZXJyZWRWYWx1ZTp3LHVzZUVmZmVjdDpoLHVzZUlkOnAsdXNlSW1wZXJhdGl2ZUhhbmRsZTp5LHVzZUluc2VydGlvbkVmZmVjdDpJLHVzZUxheW91dEVmZmVjdDpzLHVzZU1lbW86Xyx1c2VSZWR1Y2VyOmIsdXNlUmVmOlMsdXNlU3RhdGU6YSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpDLHVzZVRyYW5zaXRpb246a319fSxhbj1cIjE4LjMuMVwiO2Z1bmN0aW9uIHNuKG4pe3JldHVybiB0LmJpbmQobnVsbCxuKX1mdW5jdGlvbiBobihuKXtyZXR1cm4hIW4mJm4uJCR0eXBlb2Y9PT1xfWZ1bmN0aW9uIHZuKG4pe3JldHVybiBobihuKSYmbi50eXBlPT09dX1mdW5jdGlvbiBkbihuKXtyZXR1cm4hIW4mJlwic3RyaW5nXCI9PXR5cGVvZiBuLmRpc3BsYXlOYW1lJiYwPT1uLmRpc3BsYXlOYW1lLmluZGV4T2YoXCJNZW1vKFwiKX1mdW5jdGlvbiBtbihuKXtyZXR1cm4gaG4obik/Zi5hcHBseShudWxsLGFyZ3VtZW50cyk6bn1mdW5jdGlvbiBwbihuKXtyZXR1cm4hIW4uX19rJiYobyhudWxsLG4pLCEwKX1mdW5jdGlvbiB5bihuKXtyZXR1cm4gbiYmKG4uYmFzZXx8MT09PW4ubm9kZVR5cGUmJm4pfHxudWxsfXZhciBfbj1mdW5jdGlvbihuLHQpe3JldHVybiBuKHQpfSxibj1mdW5jdGlvbihuLHQpe3ZhciByPWUuZGVib3VuY2VSZW5kZXJpbmc7ZS5kZWJvdW5jZVJlbmRlcmluZz1mdW5jdGlvbihuKXtyZXR1cm4gbigpfTt2YXIgdT1uKHQpO3JldHVybiBlLmRlYm91bmNlUmVuZGVyaW5nPXIsdX0sU249aG4sZ249e3VzZVN0YXRlOmEsdXNlSWQ6cCx1c2VSZWR1Y2VyOmIsdXNlRWZmZWN0OmgsdXNlTGF5b3V0RWZmZWN0OnMsdXNlSW5zZXJ0aW9uRWZmZWN0OkksdXNlVHJhbnNpdGlvbjprLHVzZURlZmVycmVkVmFsdWU6dyx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpDLHN0YXJ0VHJhbnNpdGlvbjp4LHVzZVJlZjpTLHVzZUltcGVyYXRpdmVIYW5kbGU6eSx1c2VNZW1vOl8sdXNlQ2FsbGJhY2s6dix1c2VDb250ZXh0OmQsdXNlRGVidWdWYWx1ZTptLHZlcnNpb246XCIxOC4zLjFcIixDaGlsZHJlbjpMLHJlbmRlcjpubixoeWRyYXRlOnRuLHVubW91bnRDb21wb25lbnRBdE5vZGU6cG4sY3JlYXRlUG9ydGFsOiQsY3JlYXRlRWxlbWVudDp0LGNyZWF0ZUNvbnRleHQ6bCxjcmVhdGVGYWN0b3J5OnNuLGNsb25lRWxlbWVudDptbixjcmVhdGVSZWY6YyxGcmFnbWVudDp1LGlzVmFsaWRFbGVtZW50OmhuLGlzRWxlbWVudDpTbixpc0ZyYWdtZW50OnZuLGlzTWVtbzpkbixmaW5kRE9NTm9kZTp5bixDb21wb25lbnQ6bixQdXJlQ29tcG9uZW50Ok0sbWVtbzpOLGZvcndhcmRSZWY6RCxmbHVzaFN5bmM6Ym4sdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6X24sU3RyaWN0TW9kZTp1LFN1c3BlbnNlOlAsU3VzcGVuc2VMaXN0OkIsbGF6eTp6LF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOmZufTtleHBvcnR7TCBhcyBDaGlsZHJlbixNIGFzIFB1cmVDb21wb25lbnQsUCBhcyBTdXNwZW5zZSxCIGFzIFN1c3BlbnNlTGlzdCxmbiBhcyBfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxtbiBhcyBjbG9uZUVsZW1lbnQsc24gYXMgY3JlYXRlRmFjdG9yeSwkIGFzIGNyZWF0ZVBvcnRhbCxnbiBhcyBkZWZhdWx0LHluIGFzIGZpbmRET01Ob2RlLGJuIGFzIGZsdXNoU3luYyxEIGFzIGZvcndhcmRSZWYsdG4gYXMgaHlkcmF0ZSxTbiBhcyBpc0VsZW1lbnQsdm4gYXMgaXNGcmFnbWVudCxkbiBhcyBpc01lbW8saG4gYXMgaXNWYWxpZEVsZW1lbnQseiBhcyBsYXp5LE4gYXMgbWVtbyxubiBhcyByZW5kZXIseCBhcyBzdGFydFRyYW5zaXRpb24scG4gYXMgdW5tb3VudENvbXBvbmVudEF0Tm9kZSxfbiBhcyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyx3IGFzIHVzZURlZmVycmVkVmFsdWUsSSBhcyB1c2VJbnNlcnRpb25FZmZlY3QsQyBhcyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSxrIGFzIHVzZVRyYW5zaXRpb24sYW4gYXMgdmVyc2lvbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wYXQubW9kdWxlLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIEZvY3VzIHRyYXAuXG4gKlxuICogS2VlcHMgVGFiIC8gU2hpZnQrVGFiIGluc2lkZSBhIHJvb3QgZWxlbWVudC4gUmV0dXJucyBhIGNsZWFudXAgdGhhdFxuICogcmVzdG9yZXMgZm9jdXMgdG8gdGhlIGVsZW1lbnQgdGhhdCB3YXMgYWN0aXZlIGJlZm9yZSB0aGUgdHJhcCBtb3VudGVkLlxuICogU2ltcGxlIGFuZCBzeW5jaHJvbm91cyDigJQgYXNzdW1lcyBhIHNpbmdsZSBhY3RpdmUgdHJhcCBwZXIgT3ZlcmxheVJvb3RcbiAqIGFuZCBsZXRzIHRoZSBvdmVybGF5IHJlZ2lzdHJ5IGluIGBAZmFpcmZveC9wb2xseS9hY3Rpb25zYCBlbmZvcmNlIHRoYXRcbiAqIGF0IHRoZSBzdGFjayBsZXZlbC5cbiAqL1xuXG5jb25zdCBGT0NVU0FCTEVfU0VMRUNUT1IgPSBbXG4gIFwiYVtocmVmXVwiLFxuICBcImFyZWFbaHJlZl1cIixcbiAgXCJidXR0b246bm90KFtkaXNhYmxlZF0pXCIsXG4gIFwiaW5wdXQ6bm90KFtkaXNhYmxlZF0pOm5vdChbdHlwZT1oaWRkZW5dKVwiLFxuICBcInNlbGVjdDpub3QoW2Rpc2FibGVkXSlcIixcbiAgXCJ0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSlcIixcbiAgXCJpZnJhbWVcIixcbiAgXCJvYmplY3RcIixcbiAgXCJlbWJlZFwiLFxuICAnW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJyxcbiAgXCJbY29udGVudGVkaXRhYmxlXVwiLFxuXS5qb2luKFwiLFwiKTtcblxuZnVuY3Rpb24gZ2V0Rm9jdXNhYmxlKHJvb3Q6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSB7XG4gIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShyb290LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KEZPQ1VTQUJMRV9TRUxFQ1RPUikpO1xuICByZXR1cm4gbm9kZXMuZmlsdGVyKFxuICAgIChlbCkgPT4gIWVsLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpICYmIGVsLmdldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIpICE9PSBcInRydWVcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbEZvY3VzVHJhcChyb290OiBIVE1MRWxlbWVudCk6ICgpID0+IHZvaWQge1xuICBjb25zdCBwcmV2aW91c0FjdGl2ZSA9IChcbiAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IDogbnVsbFxuICApIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAvLyBNb3ZlIGZvY3VzIGludG8gdGhlIHJvb3QgaWYgaXQncyBub3QgYWxyZWFkeS5cbiAgY29uc3QgZm9jdXNhYmxlID0gZ2V0Rm9jdXNhYmxlKHJvb3QpO1xuICBjb25zdCBmaXJzdCA9IGZvY3VzYWJsZVswXSA/PyByb290O1xuICBpZiAoIXJvb3QuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICBmaXJzdC5mb2N1cygpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgIT09IFwiVGFiXCIpIHJldHVybjtcbiAgICBjb25zdCBpdGVtcyA9IGdldEZvY3VzYWJsZShyb290KTtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdEl0ZW0gPSBpdGVtc1swXTtcbiAgICBjb25zdCBsYXN0SXRlbSA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xuICAgIGlmICghZmlyc3RJdGVtIHx8ICFsYXN0SXRlbSkgcmV0dXJuO1xuICAgIGNvbnN0IGFjdGl2ZSA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBpZiAoYWN0aXZlID09PSBmaXJzdEl0ZW0gfHwgIXJvb3QuY29udGFpbnMoYWN0aXZlKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsYXN0SXRlbS5mb2N1cygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWN0aXZlID09PSBsYXN0SXRlbSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGZpcnN0SXRlbS5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gICAgaWYgKHByZXZpb3VzQWN0aXZlICYmIGRvY3VtZW50LmNvbnRhaW5zKHByZXZpb3VzQWN0aXZlKSkge1xuICAgICAgcHJldmlvdXNBY3RpdmUuZm9jdXMoKTtcbiAgICB9XG4gIH07XG59XG4iLAogICAgIi8qKlxuICogU2Nyb2xsIGxvY2suXG4gKlxuICogUmVmZXJlbmNlLWNvdW50ZWQuIE11bHRpcGxlIG92ZXJsYXlzIGNhbiByZXF1ZXN0IGEgbG9jazsgdGhlIGJvZHlcbiAqIHN0YXlzIGxvY2tlZCB1bnRpbCBldmVyeSByZXF1ZXN0IHJlbGVhc2VzLiBBIHNjcm9sbGJhci1ndXR0ZXIgdG9rZW5cbiAqIGlzIHdyaXR0ZW4gYXQgYWNxdWlyZSB0aW1lIHNvIGNvbnRlbnQgYmVoaW5kIHRoZSBvdmVybGF5IGRvZXNuJ3RcbiAqIHJlZmxvdyB3aGVuIHRoZSBiYXIgZGlzYXBwZWFycy5cbiAqL1xuXG5sZXQgY291bnQgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gYWNxdWlyZVNjcm9sbExvY2soKTogKCkgPT4gdm9pZCB7XG4gIGlmIChjb3VudCA9PT0gMCkge1xuICAgIGNvbnN0IGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgY29uc3QgZ3V0dGVyID0gd2luZG93LmlubmVyV2lkdGggLSBodG1sLmNsaWVudFdpZHRoO1xuICAgIGh0bWwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvbGx5LXNjcm9sbGJhci1ndXR0ZXJcIiwgYCR7Z3V0dGVyfXB4YCk7XG4gICAgaHRtbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXBvbGx5LXNjcm9sbC1sb2NrZWRcIiwgXCJ0cnVlXCIpO1xuICB9XG4gIGNvdW50ICs9IDE7XG4gIGxldCByZWxlYXNlZCA9IGZhbHNlO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmIChyZWxlYXNlZCkgcmV0dXJuO1xuICAgIHJlbGVhc2VkID0gdHJ1ZTtcbiAgICBjb3VudCAtPSAxO1xuICAgIGlmIChjb3VudCA8PSAwKSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgICBjb25zdCBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgaHRtbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXBvbGx5LXNjcm9sbC1sb2NrZWRcIik7XG4gICAgICBodG1sLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwiLS1wb2xseS1zY3JvbGxiYXItZ3V0dGVyXCIpO1xuICAgIH1cbiAgfTtcbn1cbiIsCiAgICAiLyoqXG4gKiBPdmVybGF5Um9vdCDigJQgcG9ydGFsIHRhcmdldCBmb3Igc3RhY2tlZCBvdmVybGF5cy5cbiAqXG4gKiBBcHBzIHJlbmRlciA8T3ZlcmxheVJvb3QgLz4gb25jZSwgdHlwaWNhbGx5IGFzIHRoZSBsYXN0IGNoaWxkIG9mIHRoZVxuICogYXBwIHJvb3QuIE1vZGFsLCBDb25maXJtRGlhbG9nLCBhbmQgVG9hc3QgcG9ydGFsIGludG8gdGhpcyBlbGVtZW50O1xuICogdGhlIHNjcm9sbCBsb2NrIHRvZ2dsZXMgYmFzZWQgb24gdGhlIG92ZXJsYXkgcmVnaXN0cnkgY291bnQuXG4gKi9cblxuaW1wb3J0IHsgZWZmZWN0IH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBoYXNPcGVuT3ZlcmxheSB9IGZyb20gXCIuLi9hY3Rpb25zL292ZXJsYXkudHNcIjtcbmltcG9ydCB7IGFjcXVpcmVTY3JvbGxMb2NrIH0gZnJvbSBcIi4vaW50ZXJuYWwvc2Nyb2xsLWxvY2sudHNcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL092ZXJsYXlSb290Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIE92ZXJsYXlSb290KCkge1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IHJlbGVhc2U6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IGRpc3Bvc2UgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGhhc09wZW5PdmVybGF5KCkpIHtcbiAgICAgICAgaWYgKCFyZWxlYXNlKSByZWxlYXNlID0gYWNxdWlyZVNjcm9sbExvY2soKTtcbiAgICAgIH0gZWxzZSBpZiAocmVsZWFzZSkge1xuICAgICAgICByZWxlYXNlKCk7XG4gICAgICAgIHJlbGVhc2UgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkaXNwb3NlKCk7XG4gICAgICByZWxlYXNlPy4oKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIDxkaXYgcmVmPXtyZWZ9IGNsYXNzPXtjbGFzc2VzW1wicm9vdFwiXX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LW92ZXJsYXktcm9vdCAvPjtcbn1cblxuLyoqIEdldCB0aGUgbW91bnQgbm9kZSBmb3IgcG9ydGFsZWQgb3ZlcmxheXMuIFJldHVybnMgbnVsbCBiZWZvcmUgbW91bnQuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3ZlcmxheVJvb3ROb2RlKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcIltkYXRhLXBvbGx5LW92ZXJsYXktcm9vdF1cIik7XG59XG4iLAogICAgIi8qKlxuICogTW9kYWwg4oCUIGNvbXBvdW5kIGRpYWxvZyB3aXRoIGZvY3VzIHRyYXAsIEVzY2FwZSBoYW5kbGluZywgcG9ydGFsLFxuICogYW5kIG92ZXJsYXktc3RhY2sgaW50ZWdyYXRpb24uXG4gKlxuICogUm9vdCB0YWtlcyBhIGB3aGVuYCBzaWduYWwgKG9yIGJvb2xlYW4pLiBXaGVuIHRydXRoeSB0aGUgY29udGVudCBtb3VudHNcbiAqIGludG8gdGhlIE92ZXJsYXlSb290IHBvcnRhbCwgZm9jdXMgbW92ZXMgaW5zaWRlLCBUYWIgaXMgdHJhcHBlZCwgRXNjYXBlXG4gKiBmaXJlcyBgZGF0YS1hY3Rpb249XCJtb2RhbDpjbG9zZVwiYCAob3IgdGhlIG92ZXJsYXkgcmVnaXN0cnkncyBvbkNsb3NlXG4gKiBjYWxsYmFjayksIGFuZCB0aGUgYm9keSBzY3JvbGwgbG9ja3MuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZWFkb25seVNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUNvbnRleHQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcbmltcG9ydCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlSWQsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBwb3BPdmVybGF5LCBwdXNoT3ZlcmxheSB9IGZyb20gXCIuLi9hY3Rpb25zL292ZXJsYXkudHNcIjtcbmltcG9ydCB7IGluc3RhbGxGb2N1c1RyYXAgfSBmcm9tIFwiLi9pbnRlcm5hbC9mb2N1cy10cmFwLnRzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Nb2RhbC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBnZXRPdmVybGF5Um9vdE5vZGUgfSBmcm9tIFwiLi9PdmVybGF5Um9vdC50c3hcIjtcbmltcG9ydCB7IFN1cmZhY2UgfSBmcm9tIFwiLi9TdXJmYWNlLnRzeFwiO1xuXG50eXBlIE1vZGFsQ29udGV4dCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGVJZDogc3RyaW5nO1xuICBkZXNjSWQ6IHN0cmluZztcbiAgY2xvc2U6ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBDdHggPSBjcmVhdGVDb250ZXh0PE1vZGFsQ29udGV4dCB8IG51bGw+KG51bGwpO1xuXG5mdW5jdGlvbiB1c2VNb2RhbCgpOiBNb2RhbENvbnRleHQge1xuICBjb25zdCBjdHggPSB1c2VDb250ZXh0KEN0eCk7XG4gIGlmICghY3R4KSB0aHJvdyBuZXcgRXJyb3IoXCJNb2RhbCBzdWItY29tcG9uZW50cyBtdXN0IHJlbmRlciBpbnNpZGUgPE1vZGFsLlJvb3Q+XCIpO1xuICByZXR1cm4gY3R4O1xufVxuXG50eXBlIFJvb3RQcm9wcyA9IHtcbiAgd2hlbjogUmVhZG9ubHlTaWduYWw8Ym9vbGVhbj4gfCBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICAvKiogQWNjZXNzaWJsZSBsYWJlbCBzb3VyY2U6IFwidGl0bGVcIiB1c2VzIHRoZSA8TW9kYWwuVGl0bGU+IGlkLCBvciBwYXNzIGFuIGV4cGxpY2l0IGxhYmVsLiAqL1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFJvb3QoeyB3aGVuLCBvbkNsb3NlLCBjaGlsZHJlbiwgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCB9OiBSb290UHJvcHMpIHtcbiAgY29uc3QgaWQgPSB1c2VJZCgpO1xuICBjb25zdCB0aXRsZUlkID0gYCR7aWR9LXRpdGxlYDtcbiAgY29uc3QgZGVzY0lkID0gYCR7aWR9LWRlc2NgO1xuICBjb25zdCBtb3VudFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcG9ydGFsTm9kZSwgc2V0UG9ydGFsTm9kZV0gPSB1c2VTdGF0ZTxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGlzT3BlbiA9IHR5cGVvZiB3aGVuID09PSBcImJvb2xlYW5cIiA/IHdoZW4gOiB3aGVuLnZhbHVlO1xuXG4gIC8vIENvbnN1bWVycyBhbG1vc3QgYWx3YXlzIHBhc3MgYW4gaW5saW5lIGNsb3N1cmUgZm9yIGBvbkNsb3NlYCwgc28gdGhlIHByb3BcbiAgLy8gaGFzIGEgbmV3IGlkZW50aXR5IG9uIGV2ZXJ5IHJlbmRlci4gS2VlcGluZyBpdCBpbiB0aGUgb3ZlcmxheSBlZmZlY3Qnc1xuICAvLyBkZXBlbmRlbmN5IGFycmF5IG1hZGUgdGhhdCBlZmZlY3QgdGVhciBkb3duIGFuZCByZS1pbnN0YWxsIHBlciByZW5kZXI6XG4gIC8vIGVhY2ggcnVuIHdyb3RlIHRoZSBgc3RhY2tgIHNpZ25hbCB0d2ljZSBhbmQgbW92ZWQgZm9jdXMgdHdpY2UsIGFuZCB0aGVcbiAgLy8gc2lnbmFsIHdyaXRlIHJlLXJlbmRlcmVkIHRoZSBzdWJzY3JpYmVyIHRoYXQgcHJvZHVjZWQgdGhlIG5leHQgY2xvc3VyZS5cbiAgLy8gVGhlIHJlc3VsdCB3YXMgYW4gdW5ib3VuZGVkIHJlbmRlciBsb29wIHRoYXQgcGlubmVkIHRoZSBtYWluIHRocmVhZFxuICAvLyAocG9sbHkjMTc3KS4gVGhlIGVmZmVjdCBub3cgcmVhZHMgdGhlIGxhdGVzdCBjYWxsYmFjayB0aHJvdWdoIGEgcmVmLCBzb1xuICAvLyBpdHMgZGVwZW5kZW5jaWVzIGFyZSBvbmx5IHRoZSB2YWx1ZXMgdGhhdCBnZW51aW5lbHkgcmUtb3BlbiB0aGUgb3ZlcmxheS5cbiAgY29uc3Qgb25DbG9zZVJlZiA9IHVzZVJlZihvbkNsb3NlKTtcbiAgb25DbG9zZVJlZi5jdXJyZW50ID0gb25DbG9zZTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICBzZXRQb3J0YWxOb2RlKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRQb3J0YWxOb2RlKGdldE92ZXJsYXlSb290Tm9kZSgpKTtcbiAgfSwgW2lzT3Blbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4gfHwgIXBvcnRhbE5vZGUpIHJldHVybjtcbiAgICBjb25zdCBlbnRyeSA9IHsgaWQsIG9uQ2xvc2U6ICgpID0+IG9uQ2xvc2VSZWYuY3VycmVudD8uKCkgfTtcbiAgICBwdXNoT3ZlcmxheShlbnRyeSk7XG4gICAgY29uc3QgZWwgPSBtb3VudFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGNsZWFudXAgPSBlbFxuICAgICAgPyBpbnN0YWxsRm9jdXNUcmFwKGVsKVxuICAgICAgOiAoKSA9PiB7XG4gICAgICAgICAgLyogbm8gcmVmIHlldCAqL1xuICAgICAgICB9O1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICBwb3BPdmVybGF5KGlkKTtcbiAgICB9O1xuICB9LCBbaXNPcGVuLCBwb3J0YWxOb2RlLCBpZF0pO1xuXG4gIGlmICghaXNPcGVuIHx8ICFwb3J0YWxOb2RlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICBvbkNsb3NlPy4oKTtcbiAgfTtcblxuICBjb25zdCBjdHg6IE1vZGFsQ29udGV4dCA9IHsgaWQsIHRpdGxlSWQsIGRlc2NJZCwgY2xvc2UgfTtcblxuICBjb25zdCBjb250ZW50ID0gKFxuICAgIDxDdHguUHJvdmlkZXIgdmFsdWU9e2N0eH0+XG4gICAgICA8TGF5b3V0XG4gICAgICAgIGVsZW1lbnRSZWY9e21vdW50UmVmfVxuICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAganVzdGlmeUl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc1tcImNvbnRhaW5lclwiXX1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LW1vZGFsLWNvbnRlbnRcbiAgICAgICAgZGF0YS1vdmVybGF5LWlkPXtpZH1cbiAgICAgICAgZGF0YS1zdGF0ZT1cIm9wZW5cIlxuICAgICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e2FyaWFMYWJlbCA/IHVuZGVmaW5lZCA6IHRpdGxlSWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17ZGVzY0lkfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0xheW91dD5cbiAgICA8L0N0eC5Qcm92aWRlcj5cbiAgKTtcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKGNvbnRlbnQsIHBvcnRhbE5vZGUpO1xufVxuXG5mdW5jdGlvbiBCYWNrZHJvcCgpIHtcbiAgY29uc3QgeyBjbG9zZSB9ID0gdXNlTW9kYWwoKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzPXtjbGFzc2VzW1wiYmFja2Ryb3BcIl19IGRhdGEtcG9sbHktbW9kYWwtYmFja2Ryb3Agb25DbGljaz17Y2xvc2V9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICk7XG59XG5cbnR5cGUgQ29udGVudFByb3BzID0ge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBKU1guQ1NTUHJvcGVydGllcztcbn07XG5cbmZ1bmN0aW9uIENvbnRlbnQoeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBzdHlsZSB9OiBDb250ZW50UHJvcHMpIHtcbiAgY29uc3QgY2xzID0gY2xhc3NOYW1lID8gYCR7Y2xhc3Nlc1tcInN1cmZhY2VcIl19ICR7Y2xhc3NOYW1lfWAgOiBjbGFzc2VzW1wic3VyZmFjZVwiXTtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgdmFyaWFudD1cInJhaXNlZFwiXG4gICAgICByYWRpdXM9XCJsZ1wiXG4gICAgICBzaGFkb3c9XCJsZ1wiXG4gICAgICBwb3NpdGlvbj1cInJlbGF0aXZlXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xzfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgZGF0YS1wb2xseS1tb2RhbC1zdXJmYWNlXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSGVhZGVyKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxoZWFkZXIgY2xhc3M9e2NsYXNzZXNbXCJoZWFkZXJcIl19IGRhdGEtcG9sbHktbW9kYWwtaGVhZGVyPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvaGVhZGVyPlxuICApO1xufVxuXG5mdW5jdGlvbiBUaXRsZSh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuIH0pIHtcbiAgY29uc3QgeyB0aXRsZUlkIH0gPSB1c2VNb2RhbCgpO1xuICByZXR1cm4gKFxuICAgIDxoMiBpZD17dGl0bGVJZH0gY2xhc3M9e2NsYXNzZXNbXCJ0aXRsZVwiXX0gZGF0YS1wb2xseS1tb2RhbC10aXRsZT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2gyPlxuICApO1xufVxuXG5mdW5jdGlvbiBCb2R5KHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICBjb25zdCB7IGRlc2NJZCB9ID0gdXNlTW9kYWwoKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGlkPXtkZXNjSWR9IGNsYXNzPXtjbGFzc2VzW1wiYm9keVwiXX0gZGF0YS1wb2xseS1tb2RhbC1ib2R5PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBGb290ZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPGZvb3RlciBjbGFzcz17Y2xhc3Nlc1tcImZvb3RlclwiXX0gZGF0YS1wb2xseS1tb2RhbC1mb290ZXI+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9mb290ZXI+XG4gICk7XG59XG5cbnR5cGUgQ2xvc2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICAvKiogRmlyZSBhIHJlZ2lzdGVyZWQgZGF0YS1hY3Rpb24gaW5zdGVhZCBvZiBjYWxsaW5nIHRoZSBvbkNsb3NlIGNhbGxiYWNrLiAqL1xuICBhY3Rpb24/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBDbG9zZSh7IGNoaWxkcmVuLCBhY3Rpb24gfTogQ2xvc2VQcm9wcykge1xuICBjb25zdCB7IGNsb3NlIH0gPSB1c2VNb2RhbCgpO1xuICBpZiAoYWN0aW9uKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiY2xvc2VcIl19XG4gICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgZGF0YS1wb2xseS1pbnRlcmFjdGl2ZVxuICAgICAgICBkYXRhLXBvbGx5LW1vZGFsLWNsb3NlXG4gICAgICAgIGRhdGEtYWN0aW9uPXthY3Rpb259XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPXtjbGFzc2VzW1wiY2xvc2VcIl19XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICBkYXRhLXBvbGx5LW1vZGFsLWNsb3NlXG4gICAgICBvbkNsaWNrPXtjbG9zZX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBNb2RhbCA9IHtcbiAgUm9vdCxcbiAgQmFja2Ryb3AsXG4gIENvbnRlbnQsXG4gIEhlYWRlcixcbiAgVGl0bGUsXG4gIEJvZHksXG4gIEZvb3RlcixcbiAgQ2xvc2UsXG59O1xuIiwKICAgICIvKipcbiAqIENvbmZpcm1EaWFsb2cg4oCUIFByb21pc2UtcmV0dXJuaW5nIGNvbmZpcm1hdGlvbiBwcmltaXRpdmUuXG4gKlxuICogYGNvbmZpcm0oeyB0aXRsZSwgYm9keSwgZGFuZ2VyIH0pYCByZXR1cm5zIFByb21pc2U8Ym9vbGVhbj4uIE9wZW5zIHRoZVxuICogcmVuZGVyZWQgYDxDb25maXJtRGlhbG9nLkhvc3QgLz5gIG1vZGFsICh3aGljaCBtdXN0IGJlIG1vdW50ZWQgb25jZSBhdFxuICogdGhlIGFwcCByb290KS4gVXNlciBwaWNraW5nIGNvbmZpcm0gb3IgY2FuY2VsIHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogRXNjYXBlLCBiYWNrZHJvcCBjbGljaywgYW5kIGV4cGxpY2l0IGAuZGlzbWlzcygpYCByZXNvbHZlIGZhbHNlLlxuICovXG5cbmltcG9ydCB7IHNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ29uZmlybURpYWxvZy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gXCIuL01vZGFsLnRzeFwiO1xuXG50eXBlIENvbmZpcm1SZXF1ZXN0ID0ge1xuICBpZDogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nO1xuICBkYW5nZXI/OiBib29sZWFuO1xuICBjb25maXJtTGFiZWw/OiBzdHJpbmc7XG4gIGNhbmNlbExhYmVsPzogc3RyaW5nO1xuICByZXNvbHZlOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG59O1xuXG5jb25zdCBwZW5kaW5nID0gc2lnbmFsPENvbmZpcm1SZXF1ZXN0IHwgbnVsbD4obnVsbCk7XG5jb25zdCBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xubGV0IG5leHRJZCA9IDA7XG5cbmV4cG9ydCB0eXBlIENvbmZpcm1PcHRpb25zID0ge1xuICB0aXRsZTogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nO1xuICBkYW5nZXI/OiBib29sZWFuO1xuICBjb25maXJtTGFiZWw/OiBzdHJpbmc7XG4gIGNhbmNlbExhYmVsPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpcm0ob3B0aW9uczogQ29uZmlybU9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG4gICAgbmV4dElkICs9IDE7XG4gICAgcGVuZGluZy52YWx1ZSA9IHtcbiAgICAgIGlkOiBuZXh0SWQsXG4gICAgICB0aXRsZTogb3B0aW9ucy50aXRsZSxcbiAgICAgIGJvZHk6IG9wdGlvbnMuYm9keSxcbiAgICAgIGRhbmdlcjogb3B0aW9ucy5kYW5nZXIsXG4gICAgICBjb25maXJtTGFiZWw6IG9wdGlvbnMuY29uZmlybUxhYmVsLFxuICAgICAgY2FuY2VsTGFiZWw6IG9wdGlvbnMuY2FuY2VsTGFiZWwsXG4gICAgICByZXNvbHZlLFxuICAgIH07XG4gICAgaXNPcGVuLnZhbHVlID0gdHJ1ZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlKHJlc3VsdDogYm9vbGVhbik6IHZvaWQge1xuICBjb25zdCBjdXJyZW50ID0gcGVuZGluZy52YWx1ZTtcbiAgaWYgKCFjdXJyZW50KSByZXR1cm47XG4gIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICBwZW5kaW5nLnZhbHVlID0gbnVsbDtcbiAgY3VycmVudC5yZXNvbHZlKHJlc3VsdCk7XG59XG5cbi8qKiBSZW5kZXJzIHRoZSBhY3RpdmUgY29uZmlybSBkaWFsb2cuIE1vdW50IG9uY2UgbmVhciB0aGUgYXBwIHJvb3QuICovXG5mdW5jdGlvbiBIb3N0KCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IGN1cnJlbnQgPSBwZW5kaW5nLnZhbHVlO1xuICBpZiAoIWN1cnJlbnQpIHJldHVybiBudWxsO1xuICByZXR1cm4gKFxuICAgIDxNb2RhbC5Sb290IHdoZW49e2lzT3Blbn0gb25DbG9zZT17KCkgPT4gY2xvc2UoZmFsc2UpfT5cbiAgICAgIDxNb2RhbC5CYWNrZHJvcCAvPlxuICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgIDxNb2RhbC5IZWFkZXI+XG4gICAgICAgICAgPE1vZGFsLlRpdGxlPntjdXJyZW50LnRpdGxlfTwvTW9kYWwuVGl0bGU+XG4gICAgICAgIDwvTW9kYWwuSGVhZGVyPlxuICAgICAgICB7Y3VycmVudC5ib2R5ID8gPE1vZGFsLkJvZHk+e2N1cnJlbnQuYm9keX08L01vZGFsLkJvZHk+IDogbnVsbH1cbiAgICAgICAgPE1vZGFsLkZvb3Rlcj5cbiAgICAgICAgICA8TGF5b3V0XG4gICAgICAgICAgICBjb2x1bW5zPVwiYXV0byBhdXRvXCJcbiAgICAgICAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudD1cImVuZFwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXNbXCJhY3Rpb25zXCJdfVxuICAgICAgICAgICAgZGF0YS1wb2xseS1jb25maXJtLWFjdGlvbnNcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcImNhbmNlbFwiXX1cbiAgICAgICAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktY29uZmlybS1jYW5jZWxcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2xvc2UoZmFsc2UpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7Y3VycmVudC5jYW5jZWxMYWJlbCA/PyBcIkNhbmNlbFwifVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz17Y3VycmVudC5kYW5nZXIgPyBjbGFzc2VzW1wiY29uZmlybURhbmdlclwiXSA6IGNsYXNzZXNbXCJjb25maXJtXCJdfVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgICAgICAgICAgZGF0YS1wb2xseS1jb25maXJtLW9rXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNsb3NlKHRydWUpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7Y3VycmVudC5jb25maXJtTGFiZWwgPz8gXCJPS1wifVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvTW9kYWwuRm9vdGVyPlxuICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgIDwvTW9kYWwuUm9vdD5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IENvbmZpcm1EaWFsb2cgPSB7IEhvc3QsIGNvbmZpcm0gfTtcbiIsCiAgICAiLyoqXG4gKiBGaWxlSW5wdXQg4oCUIGEgc3R5bGVkIHRyaWdnZXIgZm9yIHRoZSBuYXRpdmUgZmlsZSBwaWNrZXIuXG4gKlxuICogQSBmaWxlIGlzIGEgYmluYXJ5IG9iamVjdDogaXQgY2Fubm90IHJpZGUgYSBgZGF0YS1hY3Rpb25gIGF0dHJpYnV0ZVxuICogdGhlIHdheSBhIHN0cmluZyB2YWx1ZSBkb2VzLCBzbyBGaWxlSW5wdXQgaXMgdGhlIG9uZSBpbnB1dCBwcmltaXRpdmVcbiAqIHRoYXQgdGFrZXMgYSBjYWxsYmFjay4gYG9uRmlsZXNgIGZpcmVzIHdpdGggdGhlIGNob3NlbiBGaWxlTGlzdC4gVGhlXG4gKiBuYXRpdmUgPGlucHV0IHR5cGU9XCJmaWxlXCI+IHN0YXlzIGluIHRoZSBET00g4oCUIHZpc3VhbGx5IGhpZGRlbiBpbnNpZGVcbiAqIHRoZSA8bGFiZWw+IOKAlCBzbyB0aGUgd2hvbGUgY29udHJvbCBvcGVucyB0aGUgcGlja2VyIGFuZCByZW1haW5zXG4gKiBrZXlib2FyZC1hY2Nlc3NpYmxlIChwb2xseSMxMzUpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vRmlsZUlucHV0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgRmlsZUlucHV0UHJvcHMgPSB7XG4gIC8qKiBGaXJlZCB3aXRoIHRoZSBjaG9zZW4gZmlsZXMgd2hlbmV2ZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLiAqL1xuICBvbkZpbGVzOiAoZmlsZXM6IEZpbGVMaXN0KSA9PiB2b2lkO1xuICAvKiogVmlzaWJsZSB0cmlnZ2VyIHRleHQuIERlZmF1bHQ6ICdDaG9vc2UgZmlsZScuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogYGFjY2VwdGAgZmlsdGVyIGZvcndhcmRlZCB0byB0aGUgbmF0aXZlIGlucHV0IChlLmcuICdpbWFnZS8qJykuICovXG4gIGFjY2VwdD86IHN0cmluZztcbiAgLyoqIEFsbG93IHNlbGVjdGluZyBtb3JlIHRoYW4gb25lIGZpbGUuICovXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEZpbGVJbnB1dChwcm9wczogRmlsZUlucHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgb25GaWxlcywgbGFiZWwgPSBcIkNob29zZSBmaWxlXCIsIGFjY2VwdCwgbXVsdGlwbGUsIGRpc2FibGVkLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogSlNYLlRhcmdldGVkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pOiB2b2lkID0+IHtcbiAgICBjb25zdCB7IGZpbGVzIH0gPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIG9uRmlsZXMoZmlsZXMpO1xuICB9O1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJmaWxlSW5wdXRcIl1dO1xuICBpZiAoZGlzYWJsZWQpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImRpc2FibGVkXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGxhYmVsIGlkPXtpZH0gY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LWZpbGUtaW5wdXQ+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcIm5hdGl2ZVwiXX1cbiAgICAgICAgYWNjZXB0PXthY2NlcHR9XG4gICAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgLz5cbiAgICAgIDxzcGFuPntsYWJlbH08L3NwYW4+XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBIdG1sIOKAlCByZW5kZXIgdHJ1c3RlZCwgYWxyZWFkeS1zYW5pdGlzZWQgcmF3IG1hcmt1cC5cbiAqXG4gKiBUaGUgZGVsaWJlcmF0ZSBlc2NhcGUgaGF0Y2ggZm9yIHRoZSByYXJlIHRoaW5nIHBvbGx5LXVpIGNhbm5vdFxuICogZXhwcmVzczogYSBsb2NhbGx5IGdlbmVyYXRlZCwgYWxyZWFkeS1zYWZlIFNWRyAoYSBRUiBjb2RlKSwgYVxuICogcHJlLXJlbmRlcmVkIGRpYWdyYW0uIFRoZSBjYWxsZXIgb3ducyBzYWZldHkg4oCUIGBodG1sYCBnb2VzIHN0cmFpZ2h0XG4gKiBpbnRvIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAsIHNvIGl0IE1VU1QgYmUgdHJ1c3RlZCBvciBzYW5pdGlzZWRcbiAqIGZpcnN0LiBGb3IgdW50cnVzdGVkIG1hcmtkb3duIHVzZSBgcmVuZGVyTWFya2Rvd25gLCB3aGljaCBzYW5pdGlzZXM7XG4gKiBmb3IgYW55dGhpbmcgYSBwcmltaXRpdmUgYWxyZWFkeSBjb3ZlcnMsIHVzZSB0aGUgcHJpbWl0aXZlLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuXG5leHBvcnQgdHlwZSBIdG1sUHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICAvKiogVHJ1c3RlZCwgYWxyZWFkeS1zYW5pdGlzZWQgSFRNTC4gVGhlIGNhbGxlciBvd25zIGl0cyBzYWZldHkuICovXG4gIGh0bWw6IHN0cmluZztcbiAgLyoqIFBvbHltb3JwaGljIHdyYXBwZXIgZWxlbWVudCAoZGl2LCBzcGFuLCBmaWd1cmUsIOKApikuIERlZmF1bHRzIHRvICdkaXYnLiAqL1xuICBhcz86IGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBIdG1sKHByb3BzOiBIdG1sUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgaHRtbCwgYXMgPSBcImRpdlwiLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChhcywge1xuICAgIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSovdGl0bGUgZmlyc3Q7IHRoZSBwcmltaXRpdmUncyBvd25cbiAgICAvLyBhdHRyaWJ1dGVzIGJlbG93IHdpbiBvbiBhbnkgY29sbGlzaW9uLlxuICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgaWQsXG4gICAgY2xhc3M6IGNsYXNzTmFtZSxcbiAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9sbHktaHRtbFwiOiB0cnVlLFxuICAgIC8vIG5vc2VtZ3JlcDogdHlwZXNjcmlwdC5yZWFjdC5zZWN1cml0eS5hdWRpdC5yZWFjdC1kYW5nZXJvdXNseXNldGlubmVyaHRtbC5yZWFjdC1kYW5nZXJvdXNseXNldGlubmVyaHRtbCDigJQgdGhpcyBwcmltaXRpdmUgSVMgdGhlIGRvY3VtZW50ZWQgdHJ1c3RlZC1tYXJrdXAgZXNjYXBlIGhhdGNoOyB0aGUgY2FsbGVyIG93bnMgc2FuaXRpc2F0aW9uIChzZWUgbW9kdWxlIGRvY3MpLlxuICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7IF9faHRtbDogaHRtbCB9LFxuICB9KTtcbn1cbiIsCiAgICAiLyoqXG4gKiBMaW5rIOKAlCB0b2tlbi1zdHlsZWQgbmF2aWdhdGlvbmFsIGFuY2hvci5cbiAqXG4gKiBUaGUgcHJpbWl0aXZlIGZvciBwbGFpbiBoeXBlcmxpbmtzOiBodWIgYXBwLWdyaWQgY2FyZHMsIGEgZmlsZVxuICogZG93bmxvYWQsIGFuIGV4dGVybmFsIHJlZmVyZW5jZS4gPEJ1dHRvbiBocmVmPiBpcyBmb3IgbGluay1zaGFwZWRcbiAqIEJVVFRPTlMg4oCUIGEgY2FsbCB0byBhY3Rpb24gd2VhcmluZyBidXR0b24gY2hyb21lOyA8TGluaz4gaXMgZm9yXG4gKiBpbmxpbmUsIHRleHR1YWwgbGlua3MgdGhhdCByZWFkIGFzIGxpbmtzLiBgZXh0ZXJuYWxgIG9wZW5zIGEgbmV3IHRhYlxuICogd2l0aCBgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiYDsgYGRvd25sb2FkYCBvZmZlcnMgdGhlIHRhcmdldCBhcyBhXG4gKiBmaWxlIChhbiBlbXB0eSBzdHJpbmcga2VlcHMgdGhlIHJlc291cmNlJ3Mgb3duIGZpbGVuYW1lKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9MaW5rLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgTGlua1Byb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBocmVmOiBzdHJpbmc7XG4gIC8qKiBPcGVuIGluIGEgbmV3IHRhYiB3aXRoIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIi4gKi9cbiAgZXh0ZXJuYWw/OiBib29sZWFuO1xuICAvKiogT2ZmZXIgdGhlIGhyZWYgYXMgYSBkb3dubG9hZDsgYW4gZW1wdHkgc3RyaW5nIGtlZXBzIGl0cyBmaWxlbmFtZS4gKi9cbiAgZG93bmxvYWQ/OiBzdHJpbmc7XG4gIC8qKiBEcm9wIHRoZSB1bmRlcmxpbmUgdW50aWwgaG92ZXIg4oCUIGZvciBsaW5rIGdyaWRzIGFuZCBjYXJkIGxpbmtzLiAqL1xuICBzdWJ0bGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIExpbmsocHJvcHM6IExpbmtQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgaHJlZiwgZXh0ZXJuYWwsIGRvd25sb2FkLCBzdWJ0bGUsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJsaW5rXCJdXTtcbiAgaWYgKHN1YnRsZSkgcGFydHMucHVzaChjbGFzc2VzW1wic3VidGxlXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIHsuLi5jb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpfVxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX1cbiAgICAgIGhyZWY9e2hyZWZ9XG4gICAgICB0YXJnZXQ9e2V4dGVybmFsID8gXCJfYmxhbmtcIiA6IHVuZGVmaW5lZH1cbiAgICAgIHJlbD17ZXh0ZXJuYWwgPyBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiA6IHVuZGVmaW5lZH1cbiAgICAgIGRvd25sb2FkPXtkb3dubG9hZH1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktbGlua1xuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2E+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogT3V0cHV0IOKAlCByZWFkLW9ubHksIG11bHRpLWxpbmUgZGlhZ25vc3RpYyB0ZXh0LlxuICpcbiAqIEZvciBwcm9ncmFtIG91dHB1dCBhIGNvbnN1bWVyIG11c3QgU0hPVyBidXQgbm90IGVkaXQ6IGEgbWVzaC1zdGF0ZVxuICogc25hcHNob3QsIGEgcGVyLXBlZXIgc3luYyB0YWJsZSwgYSByZWNvdmVyeSBibG9iLiA8VGV4dElucHV0PiBhbmRcbiAqIDxBY3Rpb25JbnB1dD4gYXJlIHNpbmdsZS1saW5lIGFuZCBlZGl0YWJsZTsgPENvZGU+IGlzIGZvciBjb2RlXG4gKiBzYW1wbGVzIGFuZCBuZXZlciB3cmFwcy4gPE91dHB1dD4gcmVuZGVycyBhIG1vbm9zcGFjZSA8cHJlPiB0aGF0XG4gKiB3cmFwcyBsb25nIGxpbmVzIGJ5IGRlZmF1bHQg4oCUIGEgZGlhZ25vc3RpYyBkdW1wIHNob3VsZCBzdGF5IG9uXG4gKiBzY3JlZW4g4oCUIHdpdGggYHNjcm9sbGAgdG8gc3dpdGNoIHRvIGEgaG9yaXpvbnRhbCBzY3JvbGxiYXIgaW5zdGVhZC5cbiAqXG4gKiBJdCBjYXJyaWVzIHRoZSBwb2xseSMxMjUgcGFzc3Rocm91Z2ggc3VyZmFjZSwgc28gYSBgZGF0YS1hY3Rpb25gXG4gKiBmb3IgYSB0YXAtdG8tc2VsZWN0LWFsbCBnZXN0dXJlIHJpZGVzIHN0cmFpZ2h0IG9udG8gdGhlIDxwcmU+XG4gKiAocG9sbHkjMTM1KS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9PdXRwdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBPdXRwdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgLyoqIFNjcm9sbCBsb25nIHVuYnJlYWthYmxlIGxpbmVzIGhvcml6b250YWxseSBpbnN0ZWFkIG9mIHdyYXBwaW5nLiAqL1xuICBzY3JvbGw/OiBib29sZWFuO1xuICAvKiogTWFrZSB0aGUgYmxvY2sgZm9jdXNhYmxlIOKAlCBwYWlyIHdpdGggYSBgZGF0YS1hY3Rpb25gIHRhcCBnZXN0dXJlLiAqL1xuICB0YWJJbmRleD86IG51bWJlcjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBPdXRwdXQocHJvcHM6IE91dHB1dFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCBzY3JvbGwsIHRhYkluZGV4LCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wib3V0cHV0XCJdXTtcbiAgaWYgKHNjcm9sbCkgcGFydHMucHVzaChjbGFzc2VzW1wic2Nyb2xsXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPHByZVxuICAgICAgey4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyl9XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgdGFiSW5kZXg9e3RhYkluZGV4fVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1vdXRwdXRcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9wcmU+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogU2VsZWN0IOKAlCBkcm9wZG93biBvZiBvcHRpb25zIHdpdGggc2luZ2xlLSBvciBtdWx0aS1zZWxlY3Qgc2VtYW50aWNzLlxuICpcbiAqIENvbXBvc2VzIERyb3Bkb3duIGZvciB0aGUgbWVudSBhbmQgYSBuYXRpdmUgY2hlY2tib3ggaW4gZWFjaCBvcHRpb25cbiAqIHJvdyBmb3IgbXVsdGktc2VsZWN0LiBUaGUgYHNlbGVjdGVkYCBzdGF0ZSBpcyBhIFNpZ25hbDxTZXQ8VD4+O1xuICogc2luZ2xlLXNlbGVjdCByZXBsYWNlcyB0aGUgc2V0LCBtdWx0aS1zZWxlY3QgdG9nZ2xlcyBtZW1iZXJzaGlwLlxuICogTXVsdGktc2VsZWN0IG1vZGUgYWxzbyBzaG93cyBTZWxlY3QgQWxsIC8gQ2xlYXIgYWN0aW9uIGJ1dHRvbnMgYXRcbiAqIHRoZSB0b3Agb2YgdGhlIG1lbnUuIFNpbmdsZS1zZWxlY3QgbW9kZSBjYW4gb3B0IGludG8gYGNsZWFyYWJsZWAsXG4gKiB3aGljaCBwcmVwZW5kcyBhIHBsYWNlaG9sZGVyLWxhYmVsbGVkIG9wdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gKiBzZWxlY3Rpb24gdG8gZW1wdHkg4oCUIGZvciBcIkFueSDigKZcIiBmaWx0ZXIgc2VtYW50aWNzLlxuICovXG5cbmltcG9ydCB7IHR5cGUgU2lnbmFsLCB1c2VDb21wdXRlZCwgdXNlU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gXCIuL0Ryb3Bkb3duLnRzeFwiO1xuaW1wb3J0IHsgU2VsZWN0VHJpZ2dlciB9IGZyb20gXCIuL2ludGVybmFsL3NlbGVjdC10cmlnZ2VyLnRzeFwiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vU2VsZWN0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgU2VsZWN0T3B0aW9uPFQgPSBzdHJpbmc+ID0geyB2YWx1ZTogVDsgbGFiZWw6IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBTZWxlY3RQcm9wczxUID0gc3RyaW5nPiA9IHtcbiAgb3B0aW9uczogU2VsZWN0T3B0aW9uPFQ+W107XG4gIHNlbGVjdGVkOiBTaWduYWw8U2V0PFQ+PjtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBtdWx0aVNlbGVjdD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaW5nbGUtc2VsZWN0IG9ubHk6IHByZXBlbmQgYW4gb3B0aW9uIGxhYmVsbGVkIHdpdGggdGhlIHBsYWNlaG9sZGVyXG4gICAqIHRoYXQgcmV0dXJucyB0aGUgc2VsZWN0aW9uIHRvIGVtcHR5LiBXaXRob3V0IGl0LCBwaWNraW5nIGFuIG9wdGlvblxuICAgKiBpcyBhIHRyYXAg4oCUIG5vdGhpbmcgaW4gdGhlIGxpc3QgbGVhZHMgYmFjayB0byBcImFueVwiLiBVc2UgaXQgZm9yXG4gICAqIG9wdGlvbmFsIGZpbHRlcnMgKFwiQW55IHN0YWdlXCIpLCBub3QgcmVxdWlyZWQgZm9ybSBmaWVsZHNcbiAgICogKFwiU2VsZWN0IGEgdGVhbVwiKS4gSWdub3JlZCBpbiBtdWx0aS1zZWxlY3QsIHdoaWNoIGhhcyBDbGVhci5cbiAgICovXG4gIGNsZWFyYWJsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEFwcGx5IGEgY29tZm9ydGFibGUgbWluaW11bSB3aWR0aCB0byB0aGUgdHJpZ2dlci4gRGVmYXVsdDogc2l6ZXMgdG8gY29udGVudC4gKi9cbiAgd2lkZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBNVUxUSV9TRUxFQ1RfTEFCRUxfVEhSRVNIT0xEID0gMjtcblxuZnVuY3Rpb24gZm9ybWF0U2VsZWN0ZWQ8VD4oXG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbjxUPltdLFxuICBzZWxlY3RlZDogU2V0PFQ+LFxuICBtdWx0aVNlbGVjdDogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgaWYgKHNlbGVjdGVkLnNpemUgPT09IDApIHJldHVybiBcIlwiO1xuICBpZiAobXVsdGlTZWxlY3QgJiYgc2VsZWN0ZWQuc2l6ZSA+IE1VTFRJX1NFTEVDVF9MQUJFTF9USFJFU0hPTEQpIHtcbiAgICByZXR1cm4gYCR7c2VsZWN0ZWQuc2l6ZX0gc2VsZWN0ZWRgO1xuICB9XG4gIGNvbnN0IGxhYmVsczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGlmIChzZWxlY3RlZC5oYXMob3B0LnZhbHVlKSkgbGFiZWxzLnB1c2gob3B0LmxhYmVsKTtcbiAgfVxuICByZXR1cm4gbGFiZWxzLmpvaW4oXCIsIFwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdDxUID0gc3RyaW5nPihwcm9wczogU2VsZWN0UHJvcHM8VD4pOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBvcHRpb25zLFxuICAgIHNlbGVjdGVkLFxuICAgIGxhYmVsLFxuICAgIHBsYWNlaG9sZGVyID0gXCJTZWxlY3RcXHUyMDI2XCIsXG4gICAgbXVsdGlTZWxlY3QgPSBmYWxzZSxcbiAgICBjbGVhcmFibGUgPSBmYWxzZSxcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgIHdpZGUgPSBmYWxzZSxcbiAgICBjbGFzc05hbWUsXG4gICAgaWQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBpc09wZW4gPSB1c2VTaWduYWwoZmFsc2UpO1xuXG4gIGNvbnN0IGRpc3BsYXlUZXh0ID0gdXNlQ29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHRleHQgPSBmb3JtYXRTZWxlY3RlZChvcHRpb25zLCBzZWxlY3RlZC52YWx1ZSwgbXVsdGlTZWxlY3QpO1xuICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA+IDAgPyB0ZXh0IDogcGxhY2Vob2xkZXI7XG4gIH0pO1xuXG4gIGNvbnN0IGlzRW1wdHkgPSB1c2VDb21wdXRlZCgoKSA9PiBzZWxlY3RlZC52YWx1ZS5zaXplID09PSAwKTtcblxuICBjb25zdCBoYW5kbGVPcHRpb25DbGljayA9ICh2YWx1ZTogVCk6IHZvaWQgPT4ge1xuICAgIGlmIChtdWx0aVNlbGVjdCkge1xuICAgICAgY29uc3QgbmV4dCA9IG5ldyBTZXQoc2VsZWN0ZWQudmFsdWUpO1xuICAgICAgaWYgKG5leHQuaGFzKHZhbHVlKSkgbmV4dC5kZWxldGUodmFsdWUpO1xuICAgICAgZWxzZSBuZXh0LmFkZCh2YWx1ZSk7XG4gICAgICBzZWxlY3RlZC52YWx1ZSA9IG5leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGVkLnZhbHVlID0gbmV3IFNldChbdmFsdWVdKTtcbiAgICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RBbGwgPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KG9wdGlvbnMubWFwKChvKSA9PiBvLnZhbHVlKSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2xlYXIgPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KCk7XG4gIH07XG5cbiAgLy8gVGhlIGNsZWFyIG9wdGlvbiBiZWhhdmVzIGxpa2UgYSBub3JtYWwgc2VsZWN0aW9uOiBwaWNrIGl0LCBtZW51IGNsb3Nlcy5cbiAgY29uc3QgaGFuZGxlQ2xlYXJPcHRpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KCk7XG4gICAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gIH07XG5cbiAgY29uc3QgdHJpZ2dlclBhcnRzID0gW2NsYXNzZXNbXCJ0cmlnZ2VyXCJdID8/IFwiXCJdO1xuICBpZiAoaXNFbXB0eS52YWx1ZSkgdHJpZ2dlclBhcnRzLnB1c2goY2xhc3Nlc1tcInBsYWNlaG9sZGVyXCJdID8/IFwiXCIpO1xuICBpZiAod2lkZSkgdHJpZ2dlclBhcnRzLnB1c2goY2xhc3Nlc1tcInRyaWdnZXJXaWRlXCJdID8/IFwiXCIpO1xuICBjb25zdCB0cmlnZ2VyQ2xhc3MgPSB0cmlnZ2VyUGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuICBjb25zdCB0cmlnZ2VyQ29udGVudCA9IDxTZWxlY3RUcmlnZ2VyIGxhYmVsPXtkaXNwbGF5VGV4dC52YWx1ZX0gLz47XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInNlbGVjdFwiXSA/PyBcIlwiXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBpZD17aWR9IGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1zZWxlY3Q+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICAgIDxEcm9wZG93blxuICAgICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgICAgdHJpZ2dlcj17dHJpZ2dlckNvbnRlbnR9XG4gICAgICAgIHRyaWdnZXJDbGFzc05hbWU9e3RyaWdnZXJDbGFzc31cbiAgICAgICAgdHJpZ2dlckRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgdHJpZ2dlclRpdGxlPXtkaXNwbGF5VGV4dC52YWx1ZX1cbiAgICAgICAgbXVsdGlTZWxlY3Q9e211bHRpU2VsZWN0fVxuICAgICAgPlxuICAgICAgICB7bXVsdGlTZWxlY3QgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25zXCJdfT5cbiAgICAgICAgICAgIDxMYXlvdXQgY29sdW1ucz1cIjFmciAxZnJcIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25CdG5cIl19IG9uQ2xpY2s9e2hhbmRsZVNlbGVjdEFsbH0+XG4gICAgICAgICAgICAgICAgU2VsZWN0IEFsbFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25CdG5cIl19IG9uQ2xpY2s9e2hhbmRsZUNsZWFyfT5cbiAgICAgICAgICAgICAgICBDbGVhclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICB7IW11bHRpU2VsZWN0ICYmIGNsZWFyYWJsZSAmJiAoXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzRW1wdHkudmFsdWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICAgIGNsYXNzPXtcbiAgICAgICAgICAgICAgaXNFbXB0eS52YWx1ZVxuICAgICAgICAgICAgICAgID8gYCR7Y2xhc3Nlc1tcIm9wdGlvblwiXX0gJHtjbGFzc2VzW1wib3B0aW9uU2VsZWN0ZWRcIl19YFxuICAgICAgICAgICAgICAgIDogY2xhc3Nlc1tcIm9wdGlvblwiXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS1wb2xseS1zZWxlY3QtY2xlYXJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsZWFyT3B0aW9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPntwbGFjZWhvbGRlcn08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICl9XG4gICAgICAgIHtvcHRpb25zLm1hcCgob3B0KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHNlbGVjdGVkLnZhbHVlLmhhcyhvcHQudmFsdWUpO1xuICAgICAgICAgIGNvbnN0IG9wdENsYXNzID0gaXNTZWxlY3RlZFxuICAgICAgICAgICAgPyBgJHtjbGFzc2VzW1wib3B0aW9uXCJdfSAke2NsYXNzZXNbXCJvcHRpb25TZWxlY3RlZFwiXX1gXG4gICAgICAgICAgICA6IGNsYXNzZXNbXCJvcHRpb25cIl07XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAga2V5PXtTdHJpbmcob3B0LnZhbHVlKX1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICBhcmlhLXNlbGVjdGVkPXtpc1NlbGVjdGVkID8gXCJ0cnVlXCIgOiBcImZhbHNlXCJ9XG4gICAgICAgICAgICAgIGNsYXNzPXtvcHRDbGFzc31cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlT3B0aW9uQ2xpY2sob3B0LnZhbHVlKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge211bHRpU2VsZWN0ICYmIChcbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcIm9wdGlvbkNoZWNrXCJdfVxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17aXNTZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgICAgICAgICAgIHJlYWRPbmx5PXt0cnVlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxzcGFuPntvcHQubGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L0Ryb3Bkb3duPlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFNrZWxldG9uIOKAlCBzaGltbWVyaW5nIHBsYWNlaG9sZGVyIGZvciBsb2FkaW5nIHN0YXRlcy5cbiAqXG4gKiBUaHJlZSB2YXJpYW50czogdGV4dCAoZnVsbC13aWR0aCwgMWVtIHRhbGwpLCByZWN0IChmdWxsLXdpZHRoLCAxMDBweFxuICogdGFsbCksIGNpcmNsZSAoNDB4NDApLiBBIENTUyBncmFkaWVudCBhbmltYXRlcyBsZWZ0LXRvLXJpZ2h0IG92ZXJcbiAqIDEuNXMuIGBwcmVmZXJzLXJlZHVjZWQtbW90aW9uYCB6ZXJvZXMgdGhlIGFuaW1hdGlvbiB2aWEgdGhlIHRva2VuXG4gKiBzeXN0ZW0uIENvbnN1bWVycyBzaXplIHZpYSB3aWR0aC9oZWlnaHQgcHJvcHMgKHB4IG51bWJlcnMgb3IgQ1NTXG4gKiBzdHJpbmdzKTsgZGVmYXVsdCBzaXppbmcgY29tZXMgZnJvbSB0aGUgdmFyaWFudC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1NrZWxldG9uLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgU2tlbGV0b25WYXJpYW50ID0gXCJ0ZXh0XCIgfCBcInJlY3RcIiB8IFwiY2lyY2xlXCI7XG5cbmV4cG9ydCB0eXBlIFNrZWxldG9uUHJvcHMgPSB7XG4gIHZhcmlhbnQ/OiBTa2VsZXRvblZhcmlhbnQ7XG4gIHdpZHRoPzogc3RyaW5nIHwgbnVtYmVyO1xuICBoZWlnaHQ/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIHJlc29sdmVTaXplKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIGAke3ZhbHVlfXB4YDtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiB2YXJpYW50Q2xhc3ModmFyaWFudDogU2tlbGV0b25WYXJpYW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhcmlhbnQgPT09IFwiY2lyY2xlXCIpIHJldHVybiBjbGFzc2VzW1wiY2lyY2xlXCJdO1xuICBpZiAodmFyaWFudCA9PT0gXCJyZWN0XCIpIHJldHVybiBjbGFzc2VzW1wicmVjdFwiXTtcbiAgcmV0dXJuIGNsYXNzZXNbXCJ0ZXh0XCJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU2tlbGV0b24ocHJvcHM6IFNrZWxldG9uUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgdmFyaWFudCA9IFwidGV4dFwiLCB3aWR0aCwgaGVpZ2h0LCBjbGFzc05hbWUgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGNvbnN0IHcgPSByZXNvbHZlU2l6ZSh3aWR0aCk7XG4gIGNvbnN0IGggPSByZXNvbHZlU2l6ZShoZWlnaHQpO1xuICBpZiAodyAhPT0gdW5kZWZpbmVkKSBzdHlsZVtcIndpZHRoXCJdID0gdztcbiAgaWYgKGggIT09IHVuZGVmaW5lZCkgc3R5bGVbXCJoZWlnaHRcIl0gPSBoO1xuXG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBiYXNlID0gY2xhc3Nlc1tcInNrZWxldG9uXCJdO1xuICBpZiAoYmFzZSkgcGFydHMucHVzaChiYXNlKTtcbiAgY29uc3QgdkNsYXNzID0gdmFyaWFudENsYXNzKHZhcmlhbnQpO1xuICBpZiAodkNsYXNzKSBwYXJ0cy5wdXNoKHZDbGFzcyk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBjbGFzcz17cGFydHMuam9pbihcIiBcIil9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXNrZWxldG9uPXt2YXJpYW50fVxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAvPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFRhYnMg4oCUIGhvcml6b250YWwgbmF2IHdpdGggYWN0aXZlLXRhYiBhY2NlbnQuXG4gKlxuICogRWFjaCBidXR0b24gY2FycmllcyBgZGF0YS1hY3Rpb25gICh0aGUgY29uc3VtZXItcHJvdmlkZWQgYWN0aW9uIG5hbWUpXG4gKiBhbmQgYGRhdGEtYWN0aW9uLWlkPXt0YWIuaWR9YCBzbyB0aGUgZXZlbnQgZGVsZWdhdG9yIHJlc29sdmVzIHRoZVxuICogYWN0aXZhdGVkIHRhYi4gVGhlIGFjdGl2ZSB0YWIgZ2V0cyBgYXJpYS1jdXJyZW50PVwicGFnZVwiYCBhbmQgYVxuICogYm90dG9tLWJvcmRlciBhY2NlbnQuIFRoZSBuYXYgc2Nyb2xscyBob3Jpem9udGFsbHkgd2l0aCBhIGhpZGRlblxuICogc2Nyb2xsYmFyIGZvciBvdmVyZmxvdy4gSW50ZXJuYWwgYXJyYW5nZW1lbnQgdXNlcyA8TGF5b3V0PiwgcGFja2VkIHRvXG4gKiB0aGUgaW5saW5lIHN0YXJ0OiB0aGUgZ3JpZCBpcyAxMDAlIHdpZGUsIHNvIHdpdGhvdXQganVzdGlmeUNvbnRlbnQgdGhlXG4gKiBgYXV0b2AgdHJhY2tzIHN0cmV0Y2ggYW5kIGZvdXIgdGFicyBzcHJlYWQgYWNyb3NzIHRoZSB3aG9sZSBjb250YWluZXIuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9UYWJzLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgVGFiID0geyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyBkaXNhYmxlZD86IGJvb2xlYW4gfTtcblxuZXhwb3J0IHR5cGUgVGFic1Byb3BzID0ge1xuICB0YWJzOiBUYWJbXTtcbiAgYWN0aXZlVGFiOiBzdHJpbmc7XG4gIGFjdGlvbj86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gVGFicyhwcm9wczogVGFic1Byb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHRhYnMsIGFjdGl2ZVRhYiwgYWN0aW9uLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInRhYnNcIl0gPz8gXCJcIl07XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8bmF2XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgYXJpYS1sYWJlbD17cHJvcHNbXCJhcmlhLWxhYmVsXCJdfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS10YWJzXG4gICAgPlxuICAgICAgPExheW91dFxuICAgICAgICBjb2x1bW5zPXtgcmVwZWF0KCR7dGFicy5sZW5ndGh9LCBhdXRvKWB9XG4gICAgICAgIGdhcD1cIjBcIlxuICAgICAgICBhbGlnbkl0ZW1zPVwiZW5kXCJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJzdGFydFwiXG4gICAgICA+XG4gICAgICAgIHt0YWJzLm1hcCgodGFiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVUYWIgPT09IHRhYi5pZDtcbiAgICAgICAgICBjb25zdCB0YWJDbGFzcyA9IGlzQWN0aXZlID8gYCR7Y2xhc3Nlc1tcInRhYlwiXX0gJHtjbGFzc2VzW1wiYWN0aXZlXCJdfWAgOiBjbGFzc2VzW1widGFiXCJdO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGtleT17dGFiLmlkfVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9e3RhYkNsYXNzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17dGFiLmRpc2FibGVkfVxuICAgICAgICAgICAgICBhcmlhLWN1cnJlbnQ9e2lzQWN0aXZlID8gXCJwYWdlXCIgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGRhdGEtYWN0aW9uPXthY3Rpb259XG4gICAgICAgICAgICAgIGRhdGEtYWN0aW9uLWlkPXt0YWIuaWR9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0YWIubGFiZWx9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvbmF2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFRleHQg4oCUIHR5cG9ncmFwaGljIHByaW1pdGl2ZSBmb3Igc2Vjb25kYXJ5LCBzaXplZCwgYW5kIHN0YXR1cyBjb3B5LlxuICpcbiAqIFJlbmRlcnMgc3VidGl0bGVzLCBjYXB0aW9ucywgZmllbGQgbGFiZWxzLCBlbXB0eS1zdGF0ZSBjb3B5LCBhbmRcbiAqIGVycm9yL3dhcm5pbmcgbWVzc2FnZXMgd2l0aG91dCB0aGUgY29uc3VtZXIgcmVhY2hpbmcgZm9yIGEgYHN0eWxlYFxuICogYXR0cmlidXRlIG9yIGEgaGFuZC1yb2xsZWQgY2xhc3MuIGB0b25lYCBtYXBzIHRvIHRoZSBzZW1hbnRpY1xuICogYC0tcG9sbHktdGV4dC0qYCBhbmQgYC0tcG9sbHktc3RhdHVzLSpgIHRva2VuIGZhbWlsaWVzOyBgc2l6ZWAsXG4gKiBgd2VpZ2h0YCwgYGl0YWxpY2AsIGFuZCBgbGVhZGluZ2AgY292ZXIgdGhlIHJlbWFpbmluZyB0eXBvZ3JhcGhpY1xuICogYXhlcy4gYGFzYCBrZWVwcyB0aGUgZWxlbWVudCBwb2x5bW9ycGhpYyBzbyB0aGUgc2FtZSBwcmltaXRpdmUgYmFja3MgYVxuICogPHNwYW4+LCA8cD4sIDxsYWJlbD4sIG9yIDxmaWdjYXB0aW9uPi4gQSBuby1wcm9wIDxUZXh0PiBpcyBhbiBvcmRpbmFyeVxuICogPHNwYW4+IGF0IGJvZHkgc2l6ZSBhbmQgZGVmYXVsdCBjb2xvdXIuXG4gKlxuICogcG9sbHkjMTI1OiBhcmJpdHJhcnkgYGRhdGEtKmAgLyBgYXJpYS0qYCBhdHRyaWJ1dGVzIGFyZSBmb3J3YXJkZWQgdG9cbiAqIHRoZSByZW5kZXJlZCBlbGVtZW50LCBzbyBhIFRleHQgdGhhdCBhbHNvIG5lZWRzIGEgdGVzdCBob29rIG9yIGFuXG4gKiBhMTF5IGF0dHJpYnV0ZSBzdGF5cyBhIHNpbmdsZSBlbGVtZW50LlxuICovXG5cbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVGV4dC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFRleHRUb25lID0gXCJkZWZhdWx0XCIgfCBcIm11dGVkXCIgfCBcImRhbmdlclwiIHwgXCJ3YXJuaW5nXCIgfCBcInN1Y2Nlc3NcIjtcbmV4cG9ydCB0eXBlIFRleHRTaXplID0gXCJ4c1wiIHwgXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiIHwgXCJ4bFwiO1xuZXhwb3J0IHR5cGUgVGV4dFdlaWdodCA9IFwibm9ybWFsXCIgfCBcIm1lZGl1bVwiIHwgXCJib2xkXCI7XG5leHBvcnQgdHlwZSBUZXh0TGVhZGluZyA9IFwidGlnaHRcIiB8IFwiYmFzZVwiIHwgXCJsb29zZVwiO1xuXG5leHBvcnQgdHlwZSBUZXh0UHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG5cbiAgLyoqIFBvbHltb3JwaGljIGVsZW1lbnQgKHNwYW4sIHAsIGxhYmVsLCBmaWdjYXB0aW9uLCDigKYpLiBEZWZhdWx0cyB0byAnc3BhbicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuXG4gIC8qKiBDb2xvdXIgcm9sZS4gJ211dGVkJyBkZS1lbXBoYXNpc2VzOyAnZGFuZ2VyJy8nd2FybmluZycvJ3N1Y2Nlc3MnXG4gICAqIHJlbmRlciBzdGF0dXMgY29weSBmcm9tIHRoZSBgLS1wb2xseS1zdGF0dXMtKmAgdG9rZW5zLiBEZWZhdWx0OiAnZGVmYXVsdCcuICovXG4gIHRvbmU/OiBUZXh0VG9uZTtcblxuICAvKiogVG9rZW4tYmFja2VkIGZvbnQgc2l6ZS4gRGVmYXVsdDogaW5oZXJpdCBmcm9tIGNvbnRleHQuICovXG4gIHNpemU/OiBUZXh0U2l6ZTtcblxuICAvKiogVG9rZW4tYmFja2VkIGZvbnQgd2VpZ2h0LiBEZWZhdWx0OiBpbmhlcml0IGZyb20gY29udGV4dC4gKi9cbiAgd2VpZ2h0PzogVGV4dFdlaWdodDtcblxuICAvKiogSXRhbGljIGVtcGhhc2lzIOKAlCBmb3IgaGludHMgYW5kIGFzaWRlcyDigJQgd2l0aG91dCBhbiBpbmxpbmUgc3R5bGUuICovXG4gIGl0YWxpYz86IGJvb2xlYW47XG5cbiAgLyoqIExpbmUtdGhyb3VnaCDigJQgZm9yIGNvbXBsZXRlZCB0b2RvIGl0ZW1zIGFuZCBzdXBlcnNlZGVkIGNvcHkuICovXG4gIHN0cmlrZXRocm91Z2g/OiBib29sZWFuO1xuXG4gIC8qKiBUb2tlbi1iYWNrZWQgbGluZSBoZWlnaHQuICdsb29zZScgc3VpdHMgbXVsdGktbGluZSBib2R5IGNvcHkuICovXG4gIGxlYWRpbmc/OiBUZXh0TGVhZGluZztcblxuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICAvKiogRm9yd2FyZGVkIHNvIDxUZXh0IGFzPVwibGFiZWxcIj4gY2FuIHBvaW50IGF0IGEgY29udHJvbC4gKi9cbiAgaHRtbEZvcj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBUZXh0KHByb3BzOiBUZXh0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBhcyA9IFwic3BhblwiLFxuICAgIHRvbmUgPSBcImRlZmF1bHRcIixcbiAgICBzaXplLFxuICAgIHdlaWdodCxcbiAgICBpdGFsaWMsXG4gICAgc3RyaWtldGhyb3VnaCxcbiAgICBsZWFkaW5nLFxuICAgIGNsYXNzTmFtZSxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJ0ZXh0XCJdXTtcbiAgaWYgKHRvbmUgIT09IFwiZGVmYXVsdFwiKSBwYXJ0cy5wdXNoKGNsYXNzZXNbdG9uZV0pO1xuICBpZiAoc2l6ZSkgcGFydHMucHVzaChjbGFzc2VzW3NpemVdKTtcbiAgaWYgKHdlaWdodCkgcGFydHMucHVzaChjbGFzc2VzW3dlaWdodF0pO1xuICBpZiAoaXRhbGljKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJpdGFsaWNcIl0pO1xuICBpZiAoc3RyaWtldGhyb3VnaCkgcGFydHMucHVzaChjbGFzc2VzW1wic3RyaWtldGhyb3VnaFwiXSk7XG4gIGlmIChsZWFkaW5nKSBwYXJ0cy5wdXNoKGNsYXNzZXNbbGVhZGluZ10pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKiBmaXJzdDsgdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzXG4gICAgICAvLyBiZWxvdyB3aW4gb24gYW55IGNvbGxpc2lvbi5cbiAgICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgICBpZCxcbiAgICAgIGNsYXNzOiBwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIiksXG4gICAgICBmb3I6IHByb3BzLmh0bWxGb3IsXG4gICAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICAgIFwiZGF0YS1wb2xseS10ZXh0XCI6IHRvbmUsXG4gICAgfSxcbiAgICBjaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFNoYXJlZCBpbnB1dCBhMTF5IHdpcmluZy5cbiAqXG4gKiBSZXR1cm5zIGEgY29tbW9uIHNldCBvZiBhdHRyaWJ1dGVzIHRoYXQgVGV4dElucHV0LCBBY3Rpb25JbnB1dCwgYW5kXG4gKiBhbnkgY29uc3VtZXItYnVpbHQgaW5wdXQgY2FuIHNwbGF0IG9udG8gaXRzIG5hdGl2ZSBlbGVtZW50LiBLZWVwc1xuICogYXJpYS0qIGFuZCBkYXRhLXBvbGx5LSogbmFtZXMgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhbWlseS5cbiAqL1xuXG5leHBvcnQgdHlwZSBJbnB1dEExMXlQcm9wcyA9IHtcbiAgbmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgaW52YWxpZD86IGJvb2xlYW47XG4gIGRlc2NyaWJlZEJ5Pzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICByZWFkT25seT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJbnB1dEExMXkocHJvcHM6IElucHV0QTExeVByb3BzKSB7XG4gIGNvbnN0IGF0dHJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9sbHktaW5wdXRcIjogdHJ1ZSxcbiAgICBcImFyaWEtaW52YWxpZFwiOiBwcm9wcy5pbnZhbGlkID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQsXG4gICAgXCJhcmlhLXJlcXVpcmVkXCI6IHByb3BzLnJlcXVpcmVkID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQsXG4gICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzLmRlc2NyaWJlZEJ5LFxuICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgaWQ6IHByb3BzLmlkLFxuICAgIHBsYWNlaG9sZGVyOiBwcm9wcy5wbGFjZWhvbGRlcixcbiAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQsXG4gICAgcmVhZE9ubHk6IHByb3BzLnJlYWRPbmx5LFxuICB9O1xuICBpZiAocHJvcHMuaW52YWxpZCkgYXR0cnNbXCJkYXRhLXN0YXRlXCJdID0gXCJpbnZhbGlkXCI7XG4gIHJldHVybiBhdHRycztcbn1cbiIsCiAgICAiLyoqXG4gKiBUZXh0SW5wdXQg4oCUIHBhc3NpdmUsIHNpZ25hbC1mcmllbmRseSBuYXRpdmUgaW5wdXQgd3JhcHBlci5cbiAqXG4gKiBEZXNpZ25lZCB0byBsaXZlIGluc2lkZSA8QWN0aW9uRm9ybT4uIFBhc3MgYSBwbGFpbiBzdHJpbmcgZm9yXG4gKiB1bmNvbnRyb2xsZWQgbW9kZSAoRm9ybURhdGEtb24tc3VibWl0IHBpY2tzIHVwIHRoZSB2YWx1ZSkgb3IgYVxuICogU2lnbmFsPHN0cmluZz4gZm9yIGNvbnRyb2xsZWQgbW9kZS4gRWl0aGVyIHdheSwgYTExeSBhdHRyaWJ1dGVzIGFyZVxuICogd2lyZWQgYnkgdGhlIHNoYXJlZCBpbnB1dC1iYXNlLCB0aGUgc3RhYmxlIGBbZGF0YS1wb2xseS1pbnB1dF1gIGhvb2tcbiAqIGlzIGFwcGxpZWQgZm9yIHN0eWxpbmcsIGFuZCBgaW52YWxpZGAgZmxpcHMgYGFyaWEtaW52YWxpZGAgYW5kXG4gKiBgZGF0YS1zdGF0ZT1cImludmFsaWRcImAgZm9yIGNvbnN1bWVyIHNlbGVjdG9ycy5cbiAqXG4gKiBgaW5wdXRUeXBlYCBzZXRzIHRoZSBuYXRpdmUgc2luZ2xlLWxpbmUgaW5wdXQgdHlwZSDigJQgXCJ0ZXh0XCIgKGRlZmF1bHQpLFxuICogXCJlbWFpbFwiLCBcIm51bWJlclwiLCBcImRhdGVcIiwgYW5kIGZyaWVuZHMg4oCUIHNvIHRoZSBicm93c2VyIHN1cHBsaWVzIHRoZVxuICogcmlnaHQga2V5Ym9hcmQgYW5kIHZhbGlkYXRpb24uIGBtaW5gL2BtYXhgL2BzdGVwYCBhcHBseSB0byB0aGVcbiAqIHNpbmdsZS1saW5lIHZhcmlhbnQgKGUuZy4gbnVtZXJpYyBvciBkYXRlIGJvdW5kcykgYW5kIGtlZXAgZmlsdGVyXG4gKiBmaWVsZHMgZnJvbSBiZWluZyB1bnZhbGlkYXRlZCBmcmVlIHRleHQuXG4gKlxuICogYGVycm9yYCwgd2hlbiBzdXBwbGllZCwgcmVuZGVycyBhIG1lc3NhZ2UgYmVuZWF0aCB0aGUgZmllbGQsIHdyYXBzIHRoZVxuICogY29udHJvbCBpbiBhIGxhYmVsbGVkIGdyb3VwLCBhbmQgYXV0by13aXJlcyBgYXJpYS1kZXNjcmliZWRieWAgcGx1cyB0aGVcbiAqIGludmFsaWQgc3RhdGUg4oCUIG5vIG1hbnVhbCBpZCBqdWdnbGluZy4gV2l0aG91dCBgZXJyb3JgIHRoZSBwcmltaXRpdmVcbiAqIHN0YXlzIGEgYmFyZSBuYXRpdmUgZWxlbWVudCwgZXhhY3RseSBhcyBiZWZvcmUsIHNvIGNvbnN1bWVycyB0aGF0IG93blxuICogdGhlaXIgb3duIHN1cnJvdW5kaW5nIHN0cnVjdHVyZSBhcmUgdW5hZmZlY3RlZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgdXNlSWQgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBidWlsZElucHV0QTExeSB9IGZyb20gXCIuL2ludGVybmFsL2lucHV0LWJhc2UudHNcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1RleHRJbnB1dC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVmFyaWFudCA9IFwic2luZ2xlXCIgfCBcIm11bHRpXCI7XG5cbi8qKiBOYXRpdmUgc2luZ2xlLWxpbmUgaW5wdXQgdHlwZXMgcG9sbHkncyBmaWx0ZXIvZm9ybSBmaWVsZHMgdXNlLiAqL1xuZXhwb3J0IHR5cGUgVGV4dElucHV0VHlwZSA9XG4gIHwgXCJ0ZXh0XCJcbiAgfCBcImVtYWlsXCJcbiAgfCBcInVybFwiXG4gIHwgXCJ0ZWxcIlxuICB8IFwic2VhcmNoXCJcbiAgfCBcInBhc3N3b3JkXCJcbiAgfCBcIm51bWJlclwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcImRhdGV0aW1lLWxvY2FsXCJcbiAgfCBcInRpbWVcIlxuICB8IFwibW9udGhcIlxuICB8IFwid2Vla1wiO1xuXG5leHBvcnQgdHlwZSBUZXh0SW5wdXRQcm9wcyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICAvKiogU2lnbmFsPHN0cmluZz4gZm9yIGNvbnRyb2xsZWQsIHN0cmluZyBmb3IgdW5jb250cm9sbGVkIGRlZmF1bHQuICovXG4gIHZhbHVlPzogU2lnbmFsPHN0cmluZz4gfCBzdHJpbmc7XG4gIHZhcmlhbnQ/OiBWYXJpYW50O1xuICAvKiogTmF0aXZlIGlucHV0IHR5cGUgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50LiBEZWZhdWx0OiBcInRleHRcIi4gKi9cbiAgaW5wdXRUeXBlPzogVGV4dElucHV0VHlwZTtcbiAgLyoqIExvd2VyIGJvdW5kIGZvciB0aGUgc2luZ2xlLWxpbmUgdmFyaWFudCAobnVtYmVyL2RhdGUgdHlwZXMpLiAqL1xuICBtaW4/OiBudW1iZXIgfCBzdHJpbmc7XG4gIC8qKiBVcHBlciBib3VuZCBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQgKG51bWJlci9kYXRlIHR5cGVzKS4gKi9cbiAgbWF4PzogbnVtYmVyIHwgc3RyaW5nO1xuICAvKiogU3RlcCBncmFudWxhcml0eSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQgKG51bWJlci9kYXRlIHR5cGVzKS4gKi9cbiAgc3RlcD86IG51bWJlciB8IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBOYXRpdmUgaG92ZXIgdG9vbHRpcCDigJQgYSBoaW50IGJleW9uZCB0aGUgcGxhY2Vob2xkZXIvbGFiZWwuICovXG4gIHRpdGxlPzogc3RyaW5nO1xuICBpbnZhbGlkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFZhbGlkYXRpb24gbWVzc2FnZSByZW5kZXJlZCBiZW5lYXRoIHRoZSBmaWVsZC4gV2hlbiBwcmVzZW50IHRoZVxuICAgKiBwcmltaXRpdmUgd3JhcHMgdGhlIGNvbnRyb2wsIGxpbmtzIHRoZSBtZXNzYWdlIHZpYSBhcmlhLWRlc2NyaWJlZGJ5LFxuICAgKiBhbmQgbWFya3MgdGhlIGZpZWxkIGludmFsaWQuIE9taXQgaXQgdG8ga2VlcCBhIGJhcmUgbmF0aXZlIGVsZW1lbnQuXG4gICAqL1xuICBlcnJvcj86IHN0cmluZztcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgaWQ/OiBzdHJpbmc7XG4gIGRlc2NyaWJlZEJ5Pzogc3RyaW5nO1xuICByb3dzPzogbnVtYmVyO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBpc1NpZ25hbDxUPih2OiBTaWduYWw8VD4gfCBUIHwgdW5kZWZpbmVkKTogdiBpcyBTaWduYWw8VD4ge1xuICByZXR1cm4gdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPT0gbnVsbCAmJiBcInZhbHVlXCIgaW4gdiAmJiBcInBlZWtcIiBpbiAodiBhcyB1bmtub3duIGFzIG9iamVjdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUZXh0SW5wdXQocHJvcHM6IFRleHRJbnB1dFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB2YXJpYW50ID0gcHJvcHMudmFyaWFudCA/PyBcInNpbmdsZVwiO1xuICAvLyBBbHdheXMgY2FsbGVkIHNvIGhvb2sgb3JkZXIgaXMgc3RhYmxlOyBvbmx5IHVzZWQgd2hlbiBgZXJyb3JgIGlzIHNldC5cbiAgY29uc3QgZXJyb3JJZCA9IHVzZUlkKCk7XG4gIGNvbnN0IGhhc0Vycm9yID0gcHJvcHMuZXJyb3IgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5lcnJvciAhPT0gXCJcIjtcblxuICBjb25zdCBkZXNjcmliZWRCeSA9XG4gICAgW3Byb3BzLmRlc2NyaWJlZEJ5LCBoYXNFcnJvciA/IGVycm9ySWQgOiB1bmRlZmluZWRdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSB8fCB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYTExeSA9IGJ1aWxkSW5wdXRBMTF5KHtcbiAgICBuYW1lOiBwcm9wcy5uYW1lLFxuICAgIGlkOiBwcm9wcy5pZCxcbiAgICByZXF1aXJlZDogcHJvcHMucmVxdWlyZWQsXG4gICAgLy8gQW4gZXJyb3IgbWVzc2FnZSBpbXBsaWVzIHRoZSBmaWVsZCBpcyBpbnZhbGlkLlxuICAgIGludmFsaWQ6IHByb3BzLmludmFsaWQgfHwgaGFzRXJyb3IsXG4gICAgZGVzY3JpYmVkQnksXG4gICAgcGxhY2Vob2xkZXI6IHByb3BzLnBsYWNlaG9sZGVyLFxuICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCxcbiAgICByZWFkT25seTogcHJvcHMucmVhZE9ubHksXG4gIH0pO1xuXG4gIGNvbnN0IGNvbnRyb2xsZWQgPSBpc1NpZ25hbChwcm9wcy52YWx1ZSk7XG4gIGNvbnN0IHN0cmluZ1ZhbHVlID0gY29udHJvbGxlZCA/IChwcm9wcy52YWx1ZSBhcyB1bmtub3duIGFzIFNpZ25hbDxzdHJpbmc+KS52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gY29udHJvbGxlZFxuICAgID8gdW5kZWZpbmVkXG4gICAgOiAoKHByb3BzLnZhbHVlIGFzIHVua25vd24gYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSA/PyBcIlwiKTtcblxuICBjb25zdCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgPyBgJHtjbGFzc2VzW1wiaW5wdXRcIl19ICR7cHJvcHMuY2xhc3NOYW1lfWAgOiBjbGFzc2VzW1wiaW5wdXRcIl07XG5cbiAgY29uc3Qgb25JbnB1dCA9IChlOiBKU1guVGFyZ2V0ZWRFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD4pOiB2b2lkID0+IHtcbiAgICBpZiAoY29udHJvbGxlZCkge1xuICAgICAgKHByb3BzLnZhbHVlIGFzIHVua25vd24gYXMgU2lnbmFsPHN0cmluZz4pLnZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjb250cm9sID1cbiAgICB2YXJpYW50ID09PSBcIm11bHRpXCIgPyAoXG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgey4uLihhMTF5IGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KX1cbiAgICAgICAgY2xhc3M9e2NsYXNzTmFtZX1cbiAgICAgICAgdGl0bGU9e3Byb3BzLnRpdGxlfVxuICAgICAgICBkYXRhLXBvbGx5LWlucHV0LXZhcmlhbnQ9XCJtdWx0aVwiXG4gICAgICAgIHJvd3M9e3Byb3BzLnJvd3N9XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvbm9BdXRvZm9jdXM6IG9wdC1pbiBwcm9wIOKAlCBjYWxsZXIgcmVxdWVzdHMgYXV0b2ZvY3VzIGV4cGxpY2l0bHkgKGUuZy4gZm9ybSBvcGVucyB0byB0aGlzIGZpZWxkKS5cbiAgICAgICAgYXV0b0ZvY3VzPXtwcm9wcy5hdXRvRm9jdXN9XG4gICAgICAgIHZhbHVlPXtzdHJpbmdWYWx1ZX1cbiAgICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9XG4gICAgICAgIG9uSW5wdXQ9e29uSW5wdXR9XG4gICAgICAvPlxuICAgICkgOiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgey4uLihhMTF5IGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+KX1cbiAgICAgICAgdHlwZT17cHJvcHMuaW5wdXRUeXBlID8/IFwidGV4dFwifVxuICAgICAgICBjbGFzcz17Y2xhc3NOYW1lfVxuICAgICAgICB0aXRsZT17cHJvcHMudGl0bGV9XG4gICAgICAgIGRhdGEtcG9sbHktaW5wdXQtdmFyaWFudD1cInNpbmdsZVwiXG4gICAgICAgIG1pbj17cHJvcHMubWlufVxuICAgICAgICBtYXg9e3Byb3BzLm1heH1cbiAgICAgICAgc3RlcD17cHJvcHMuc3RlcH1cbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub0F1dG9mb2N1czogb3B0LWluIHByb3Ag4oCUIGNhbGxlciByZXF1ZXN0cyBhdXRvZm9jdXMgZXhwbGljaXRseSAoZS5nLiBmb3JtIG9wZW5zIHRvIHRoaXMgZmllbGQpLlxuICAgICAgICBhdXRvRm9jdXM9e3Byb3BzLmF1dG9Gb2N1c31cbiAgICAgICAgdmFsdWU9e3N0cmluZ1ZhbHVlfVxuICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cbiAgICAgICAgb25JbnB1dD17b25JbnB1dH1cbiAgICAgIC8+XG4gICAgKTtcblxuICBpZiAoIWhhc0Vycm9yKSByZXR1cm4gY29udHJvbDtcblxuICByZXR1cm4gKFxuICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCIgY2xhc3NOYW1lPXtjbGFzc2VzW1wiZmllbGRcIl19IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1maWVsZD5cbiAgICAgIHtjb250cm9sfVxuICAgICAgPHNwYW4gaWQ9e2Vycm9ySWR9IHJvbGU9XCJhbGVydFwiIGNsYXNzPXtjbGFzc2VzW1wiZXJyb3JcIl19PlxuICAgICAgICB7cHJvcHMuZXJyb3J9XG4gICAgICA8L3NwYW4+XG4gICAgPC9MYXlvdXQ+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogVG9hc3Qg4oCUIGNvbnN1bWVyLWZhY2luZyBzdXJmYWNlIGZvciB0aGUgZ2xvYmFsIGVycm9yU3RhdGUuXG4gKlxuICogUmVuZGVycyBldmVyeSBlbnRyeSBvZiB0aGUgYGVycm9yU3RhdGVgIHNpZ25hbCBpbnRvIGEgdmlld3BvcnQgbW91bnRlZFxuICogaW5zaWRlIE92ZXJsYXlSb290LiBgYXJpYS1saXZlYCBpcyBwb2xpdGUgZm9yIGluZm8vd2FybmluZyBhbmRcbiAqIGFzc2VydGl2ZSBmb3IgZXJyb3Igc2V2ZXJpdHkuIEVhY2ggaXRlbSBhdXRvLWRpc21pc3NlcyBhZnRlclxuICogYGF1dG9EaXNtaXNzTXNgIHVubGVzcyB0aGUgdXNlciBob3ZlcnMgdGhlIHZpZXdwb3J0LiBDbGlja2luZyBhXG4gKiB0b2FzdCBvciBpdHMgY2xvc2UgYnV0dG9uIHJlbW92ZXMgdGhhdCBzaW5nbGUgZW50cnkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IGNsZWFyRXJyb3IsIHR5cGUgRXJyb3JFbnRyeSwgZXJyb3JTdGF0ZSB9IGZyb20gXCIuLi9hY3Rpb25zL2Vycm9yLnRzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgeyBnZXRPdmVybGF5Um9vdE5vZGUgfSBmcm9tIFwiLi9PdmVybGF5Um9vdC50c3hcIjtcbmltcG9ydCB7IFN1cmZhY2UgfSBmcm9tIFwiLi9TdXJmYWNlLnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVG9hc3QubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBUb2FzdFZpZXdwb3J0UHJvcHMgPSB7XG4gIGF1dG9EaXNtaXNzTXM/OiBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFZpZXdwb3J0KHByb3BzOiBUb2FzdFZpZXdwb3J0UHJvcHMpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBhdXRvRGlzbWlzc01zID0gcHJvcHMuYXV0b0Rpc21pc3NNcyA/PyA1MDAwO1xuICBjb25zdCBbcG9ydGFsTm9kZSwgc2V0UG9ydGFsTm9kZV0gPSB1c2VTdGF0ZTxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcGF1c2VkLCBzZXRQYXVzZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBlbnRyaWVzID0gZXJyb3JTdGF0ZS52YWx1ZTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFBvcnRhbE5vZGUoZ2V0T3ZlcmxheVJvb3ROb2RlKCkpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocGF1c2VkIHx8IGVudHJpZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgaGVhZCA9IGVudHJpZXNbMF07XG4gICAgaWYgKCFoZWFkKSByZXR1cm47XG4gICAgY29uc3QgdGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhckVycm9yKGhlYWQuaWQpO1xuICAgIH0sIGF1dG9EaXNtaXNzTXMpO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgfSwgW3BhdXNlZCwgZW50cmllcywgYXV0b0Rpc21pc3NNc10pO1xuXG4gIGlmICghcG9ydGFsTm9kZSkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgY29udGVudCA9IChcbiAgICA8TGF5b3V0XG4gICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIlxuICAgICAgY2xhc3NOYW1lPXtgJHtjbGFzc2VzW1widmlld3BvcnRcIl19ICR7cHJvcHMuY2xhc3NOYW1lID8/IFwiXCJ9YC50cmltKCl9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXRvYXN0LXZpZXdwb3J0XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldFBhdXNlZCh0cnVlKX1cbiAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0UGF1c2VkKGZhbHNlKX1cbiAgICA+XG4gICAgICB7ZW50cmllcy5tYXAoKGVudHJ5KSA9PiAoXG4gICAgICAgIDxUb2FzdEl0ZW0ga2V5PXtlbnRyeS5pZH0gZW50cnk9e2VudHJ5fSAvPlxuICAgICAgKSl9XG4gICAgPC9MYXlvdXQ+XG4gICk7XG4gIHJldHVybiBjcmVhdGVQb3J0YWwoY29udGVudCwgcG9ydGFsTm9kZSk7XG59XG5cbmZ1bmN0aW9uIFRvYXN0SXRlbSh7IGVudHJ5IH06IHsgZW50cnk6IEVycm9yRW50cnkgfSk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgbGl2ZW5lc3MgPSBlbnRyeS5zZXZlcml0eSA9PT0gXCJlcnJvclwiID8gXCJhc3NlcnRpdmVcIiA6IFwicG9saXRlXCI7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIHZhcmlhbnQ9XCJyYWlzZWRcIlxuICAgICAgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKSB2YXIoLS1wb2xseS1zcGFjZS1sZylcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzW1wiaXRlbVwiXX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktdG9hc3QtaXRlbVxuICAgICAgZGF0YS1zZXZlcml0eT17ZW50cnkuc2V2ZXJpdHl9XG4gICAgICByb2xlPXtlbnRyeS5zZXZlcml0eSA9PT0gXCJlcnJvclwiID8gXCJhbGVydFwiIDogXCJzdGF0dXNcIn1cbiAgICAgIGFyaWEtbGl2ZT17bGl2ZW5lc3N9XG4gICAgPlxuICAgICAgPExheW91dCBjb2x1bW5zPVwiMWZyIGF1dG9cIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIiBhbGlnbkl0ZW1zPVwiY2VudGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibWVzc2FnZVwiXX0+e2VudHJ5Lm1lc3NhZ2V9PC9zcGFuPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJjbG9zZVwiXX1cbiAgICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgICAgZGF0YS1wb2xseS1pbnRlcmFjdGl2ZVxuICAgICAgICAgIGRhdGEtcG9sbHktdG9hc3QtY2xvc2VcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjbGVhckVycm9yKGVudHJ5LmlkKX1cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiRGlzbWlzc1wiXG4gICAgICAgID5cbiAgICAgICAgICDDl1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IFRvYXN0ID0geyBWaWV3cG9ydCB9O1xuIiwKICAgICIvKipcbiAqIFRvZ2dsZSDigJQgc3dpdGNoLXJvbGUgY2hlY2tib3guXG4gKlxuICogQSB2aXN1YWxseS1oaWRkZW4gPGlucHV0IHJvbGU9XCJzd2l0Y2hcIj4gcGFpcmVkIHdpdGggYSBzdHlsZWQgdHJhY2tcbiAqIGFuZCB0aHVtYiBpbnNpZGUgYSA8bGFiZWw+LiBQYXNzaXZlOiB0aGUgY2FsbGVyIGRyaXZlcyBgY2hlY2tlZGAgYW5kXG4gKiBoYW5kbGVzIHN0YXRlIGNoYW5nZXMgdmlhIHRoZSBhY3Rpb24gcmVnaXN0cnkgKHdyYXAgdGhlIFRvZ2dsZSBpbiBhXG4gKiA8bGFiZWwgZGF0YS1hY3Rpb249XCIuLi5cIj4gb3IgYmluZCBhIHBhcmVudCBmb3JtJ3Mgc3VibWl0KS4gYTExeVxuICogYXR0cmlidXRlcyBjb21lIGZyb20gdGhlIG5hdGl2ZSBpbnB1dDsgdGhlIGxhYmVsIHdyYXBzIHNvIGNsaWNrc1xuICogYW55d2hlcmUgaW4gdGhlIGNvbnRyb2wgdG9nZ2xlIHRoZSBpbnB1dC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1RvZ2dsZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZVByb3BzID0ge1xuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBsYWJlbD86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBUb2dnbGUocHJvcHM6IFRvZ2dsZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoZWNrZWQgPSBmYWxzZSwgZGlzYWJsZWQgPSBmYWxzZSwgbGFiZWwsIG5hbWUsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1widG9nZ2xlXCJdXTtcbiAgaWYgKGRpc2FibGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJkaXNhYmxlZFwiXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8TGF5b3V0XG4gICAgICBhcz1cImxhYmVsXCJcbiAgICAgIGlubGluZVxuICAgICAgY29sdW1ucz1cImF1dG8gYXV0b1wiXG4gICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIlxuICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICBjbGFzc05hbWU9e3BhcnRzLmpvaW4oXCIgXCIpfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS10b2dnbGVcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICByb2xlPVwic3dpdGNoXCJcbiAgICAgICAgbmFtZT17bmFtZX1cbiAgICAgICAgYXJpYS1jaGVja2VkPXtjaGVja2VkfVxuICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcImlucHV0XCJdfVxuICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9e2NoZWNrZWQgPyBgJHtjbGFzc2VzW1widHJhY2tcIl19ICR7Y2xhc3Nlc1tcInRyYWNrQ2hlY2tlZFwiXX1gIDogY2xhc3Nlc1tcInRyYWNrXCJdfT5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz17Y2hlY2tlZCA/IGAke2NsYXNzZXNbXCJ0aHVtYlwiXX0gJHtjbGFzc2VzW1widGh1bWJDaGVja2VkXCJdfWAgOiBjbGFzc2VzW1widGh1bWJcIl19XG4gICAgICAgIC8+XG4gICAgICA8L3NwYW4+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICA8L0xheW91dD5cbiAgKTtcbn1cbiIsCiAgICAiLy8gU3RhdGUgcHJpbWl0aXZlcyB3aXRoIG9wdGlvbmFsIHN5bmMgYW5kIHBlcnNpc3RlbmNlXG5cbmltcG9ydCB7IGVmZmVjdCwgdHlwZSBTaWduYWwsIHNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZUJ1cyB9IGZyb20gXCIuL21lc3NhZ2UtYnVzXCI7XG5pbXBvcnQgeyBjcmVhdGVTdG9yYWdlQWRhcHRlciwgdHlwZSBTdG9yYWdlQWRhcHRlciB9IGZyb20gXCIuL3N0b3JhZ2UtYWRhcHRlclwiO1xuaW1wb3J0IHsgY3JlYXRlU3luY0FkYXB0ZXIsIHR5cGUgU3RhdGVTeW5jTWVzc2FnZSwgdHlwZSBTeW5jQWRhcHRlciB9IGZyb20gXCIuL3N5bmMtYWRhcHRlclwiO1xuXG4vKipcbiAqIFNpZ25hbCBleHRlbmRlZCB3aXRoIC5sb2FkZWQgcHJvbWlzZSBmb3IgaHlkcmF0aW9uIGNvbnRyb2xcbiAqL1xudHlwZSBTaWduYWxXaXRoTG9hZGVkPFQ+ID0gU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD4gfTtcblxuLyoqXG4gKiBTaWduYWwgZXh0ZW5kZWQgd2l0aCAubG9hZGVkIGFuZCAudmVyaWZ5IHByb3BlcnRpZXMgZm9yIHZlcmlmaWNhdGlvbiB0cmFja2luZ1xuICovXG50eXBlIFNpZ25hbFdpdGhWZXJpZnk8VD4gPSBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPjsgdmVyaWZ5OiBUIH07XG5cbnR5cGUgU3RhdGVFbnRyeTxUPiA9IHtcbiAgc2lnbmFsOiBTaWduYWw8VD47XG4gIGNsb2NrOiBudW1iZXI7IC8vIExhbXBvcnQgY2xvY2sgZm9yIGNhdXNhbCBvcmRlcmluZ1xuICBsb2FkZWQ6IFByb21pc2U8dm9pZD47XG4gIHVwZGF0aW5nOiBib29sZWFuO1xufTtcblxudHlwZSBTdGF0ZU9wdGlvbnM8VCA9IHVua25vd24+ID0ge1xuICAvLyBMZWdhY3kgTWVzc2FnZUJ1cyBzdXBwb3J0IChkZXByZWNhdGVkLCB3aWxsIGJlIHJlbW92ZWQgaW4gdjIuMClcbiAgYnVzPzogTWVzc2FnZUJ1cztcblxuICAvLyBOZXcgYWRhcHRlciBzeXN0ZW0gKHJlY29tbWVuZGVkKVxuICBzdG9yYWdlPzogU3RvcmFnZUFkYXB0ZXI7IC8vIEN1c3RvbSBzdG9yYWdlIGFkYXB0ZXJcbiAgc3luYz86IFN5bmNBZGFwdGVyOyAvLyBDdXN0b20gc3luYyBhZGFwdGVyXG5cbiAgLy8gQmVoYXZpb3Igb3B0aW9uc1xuICBkZWJvdW5jZU1zPzogbnVtYmVyOyAvLyBEZWJvdW5jZSBzdG9yYWdlIHdyaXRlc1xuICB2YWxpZGF0b3I/OiAodmFsdWU6IHVua25vd24pID0+IHZhbHVlIGlzIFQ7IC8vIFJ1bnRpbWUgdHlwZSB2YWxpZGF0aW9uXG4gIHZlcmlmeT86IGJvb2xlYW47IC8vIEVuYWJsZSB2ZXJpZmljYXRpb24gdHJhY2tpbmcgKGNyZWF0ZXMgcGxhaW4gb2JqZWN0IG1pcnJvcilcbn07XG5cbmNvbnN0IHN0YXRlUmVnaXN0cnkgPSBuZXcgTWFwPHN0cmluZywgU3RhdGVFbnRyeTx1bmtub3duPj4oKTtcblxuLyoqXG4gKiBTaGFyZWQgc3RhdGU6IHN5bmNlZCBhY3Jvc3MgYWxsIGNvbnRleHRzIEFORCBwZXJzaXN0ZWQgdG8gc3RvcmFnZVxuICpcbiAqIFVzZXMgTGFtcG9ydCBjbG9jayBmb3IgY29uZmxpY3QgcmVzb2x1dGlvbi4gU3RhdGUgaXMgYXV0b21hdGljYWxseTpcbiAqIC0gTG9hZGVkIGZyb20gY2hyb21lLnN0b3JhZ2Ugb24gaW5pdGlhbGl6YXRpb25cbiAqIC0gU3luY2VkIHRvIG90aGVyIGNvbnRleHRzIHZpYSBicm9hZGNhc3QgbWVzc2FnZXNcbiAqIC0gUGVyc2lzdGVkIHRvIGNocm9tZS5zdG9yYWdlIG9uIGV2ZXJ5IGNoYW5nZVxuICpcbiAqIEF2YWlsYWJsZSBpbjogYmFja2dyb3VuZCwgcG9wdXAsIG9wdGlvbnMsIGRldnRvb2xzLCBjb250ZW50IHNjcmlwdHNcbiAqIOKaoO+4jyBOT1QgYXZhaWxhYmxlIGluIHBhZ2Ugc2NyaXB0cyAodXNlIGNvbnRlbnQgc2NyaXB0IHN0YXRlIGluc3RlYWQpXG4gKlxuICogQHBhcmFtIGtleSAtIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIHN0YXRlIChlLmcuLCBcImFwcC1zZXR0aW5nc1wiKVxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIERlZmF1bHQgdmFsdWUgaWYgbm90aGluZyBpcyBpbiBzdG9yYWdlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gKGJ1cywgZGVib3VuY2VNcylcbiAqIEByZXR1cm5zIFJlYWN0aXZlIHNpZ25hbCB0aGF0IHN0YXlzIGluIHN5bmMgYWNyb3NzIGFsbCBjb250ZXh0c1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBEZWZpbmUgb25jZSwgdXNlIGV2ZXJ5d2hlcmVcbiAqIGNvbnN0IHNldHRpbmdzID0gJHNoYXJlZFN0YXRlKFwic2V0dGluZ3NcIiwgeyB0aGVtZTogXCJkYXJrXCIgfSlcbiAqXG4gKiAvLyBDaGFuZ2VzIGF1dG9tYXRpY2FsbHkgc3luY1xuICogc2V0dGluZ3MudmFsdWUgPSB7IHRoZW1lOiBcImxpZ2h0XCIgfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiAkc2hhcmVkU3RhdGU8VD4oXG4gIGtleTogc3RyaW5nLFxuICBpbml0aWFsVmFsdWU6IFQsXG4gIG9wdGlvbnM6IFN0YXRlT3B0aW9uczxUPiA9IHt9XG4pOiBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPjsgdmVyaWZ5PzogVCB9IHtcbiAgY29uc3Qgc2lnID0gY3JlYXRlU3RhdGUoa2V5LCBpbml0aWFsVmFsdWUsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGVuYWJsZVN5bmM6IHRydWUsXG4gICAgZW5hYmxlUGVyc2lzdDogdHJ1ZSxcbiAgfSk7XG5cbiAgLy8gRXhwb3NlIGxvYWRlZCBwcm9taXNlIGZvciBhd2FpdGluZyBoeWRyYXRpb25cbiAgY29uc3QgZW50cnkgPSBzdGF0ZVJlZ2lzdHJ5LmdldChrZXkpO1xuICBpZiAoZW50cnkpIHtcbiAgICAoc2lnIGFzIHVua25vd24gYXMgU2lnbmFsV2l0aExvYWRlZDxUPikubG9hZGVkID0gZW50cnkubG9hZGVkO1xuICB9XG5cbiAgcmV0dXJuIHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+IH07XG59XG5cbi8qKlxuICogU3luY2VkIHN0YXRlOiBzeW5jZWQgYWNyb3NzIGFsbCBjb250ZXh0cyBidXQgTk9UIHBlcnNpc3RlZFxuICpcbiAqIFN0YXRlIGlzIGJyb2FkY2FzdCB0byBhbGwgY29udGV4dHMgaW4gcmVhbC10aW1lIGJ1dCByZXNldHMgb24gZXh0ZW5zaW9uIHJlbG9hZC5cbiAqXG4gKiBBdmFpbGFibGUgaW46IGJhY2tncm91bmQsIHBvcHVwLCBvcHRpb25zLCBkZXZ0b29scywgY29udGVudCBzY3JpcHRzXG4gKiDimqDvuI8gTk9UIGF2YWlsYWJsZSBpbiBwYWdlIHNjcmlwdHNcbiAqXG4gKiBAcGFyYW0ga2V5IC0gVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgc3RhdGVcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIFJlYWN0aXZlIHNpZ25hbCBzeW5jZWQgYWNyb3NzIGNvbnRleHRzIChidXQgbm90IHBlcnNpc3RlZClcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gVGVtcG9yYXJ5IHNoYXJlZCBzdGF0ZVxuICogY29uc3QgYWN0aXZlVGFiSWQgPSAkc3luY2VkU3RhdGUoXCJhY3RpdmUtdGFiXCIsIG51bGwpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uICRzeW5jZWRTdGF0ZTxUPihcbiAga2V5OiBzdHJpbmcsXG4gIGluaXRpYWxWYWx1ZTogVCxcbiAgb3B0aW9uczogU3RhdGVPcHRpb25zPFQ+ID0ge31cbik6IFNpZ25hbDxUPiB7XG4gIHJldHVybiBjcmVhdGVTdGF0ZShrZXksIGluaXRpYWxWYWx1ZSwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZW5hYmxlU3luYzogdHJ1ZSxcbiAgICBlbmFibGVQZXJzaXN0OiBmYWxzZSxcbiAgfSk7XG59XG5cbi8qKlxuICogUGVyc2lzdGVkIHN0YXRlOiBwZXJzaXN0ZWQgdG8gc3RvcmFnZSBidXQgTk9UIHN5bmNlZCBhY3Jvc3MgY29udGV4dHNcbiAqXG4gKiBFYWNoIGNvbnRleHQgaGFzIGl0cyBvd24gY29weSBvZiB0aGUgc3RhdGUsIHBlcnNpc3RlZCBpbmRlcGVuZGVudGx5LlxuICpcbiAqIEF2YWlsYWJsZSBpbjogYmFja2dyb3VuZCwgcG9wdXAsIG9wdGlvbnMsIGRldnRvb2xzLCBjb250ZW50IHNjcmlwdHNcbiAqIOKaoO+4jyBOT1QgYXZhaWxhYmxlIGluIHBhZ2Ugc2NyaXB0c1xuICpcbiAqIEBwYXJhbSBrZXkgLSBVbmlxdWUgaWRlbnRpZmllciAodXNlIHByZWZpeCBsaWtlIFwicG9wdXA6c3RhdGVcIiB0byBhdm9pZCBjb2xsaXNpb25zKVxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgUmVhY3RpdmUgc2lnbmFsIHBlcnNpc3RlZCB0byBzdG9yYWdlIChidXQgbm90IHN5bmNlZClcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gRWFjaCBjb250ZXh0IGhhcyBpdHMgb3duIHBlcnNpc3RlZCBzdGF0ZVxuICogY29uc3QgcG9wdXBTdGF0ZSA9ICRwZXJzaXN0ZWRTdGF0ZShcInBvcHVwOmxhc3QtcGFuZWxcIiwgXCJob21lXCIpXG4gKiBjb25zdCBkZXZ0b29sc1N0YXRlID0gJHBlcnNpc3RlZFN0YXRlKFwiZGV2dG9vbHM6ZXhwYW5kZWRcIiwgdHJ1ZSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gJHBlcnNpc3RlZFN0YXRlPFQ+KFxuICBrZXk6IHN0cmluZyxcbiAgaW5pdGlhbFZhbHVlOiBULFxuICBvcHRpb25zOiBTdGF0ZU9wdGlvbnM8VD4gPSB7fVxuKTogU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD4gfSB7XG4gIGNvbnN0IHNpZyA9IGNyZWF0ZVN0YXRlKGtleSwgaW5pdGlhbFZhbHVlLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbmFibGVTeW5jOiBmYWxzZSxcbiAgICBlbmFibGVQZXJzaXN0OiB0cnVlLFxuICB9KTtcblxuICAvLyBFeHBvc2UgbG9hZGVkIHByb21pc2UgZm9yIGF3YWl0aW5nIGh5ZHJhdGlvblxuICBjb25zdCBlbnRyeSA9IHN0YXRlUmVnaXN0cnkuZ2V0KGtleSk7XG4gIGlmIChlbnRyeSkge1xuICAgIChzaWcgYXMgdW5rbm93biBhcyBTaWduYWxXaXRoTG9hZGVkPFQ+KS5sb2FkZWQgPSBlbnRyeS5sb2FkZWQ7XG4gIH1cblxuICByZXR1cm4gc2lnIGFzIHVua25vd24gYXMgU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD4gfTtcbn1cblxuLyoqXG4gKiBMb2NhbCBzdGF0ZTogbm90IHN5bmNlZCwgbm90IHBlcnNpc3RlZCAobGlrZSByZWd1bGFyIFByZWFjdCBzaWduYWwpXG4gKlxuICogU2ltcGxlIHJlYWN0aXZlIHN0YXRlIHRoYXQgbGl2ZXMgb25seSBpbiB0aGUgY3VycmVudCBjb250ZXh0LlxuICogUmVzZXRzIG9uIHJlbG9hZCBvciBjb250ZXh0IHJlc3RhcnQuXG4gKlxuICogQXZhaWxhYmxlIGluOiBhbGwgY29udGV4dHMgKGluY2x1ZGluZyBwYWdlIHNjcmlwdHMpXG4gKlxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIERlZmF1bHQgdmFsdWVcbiAqIEByZXR1cm5zIFJlYWN0aXZlIHNpZ25hbCAobG9jYWwgb25seSlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gTG9jYWwgVUkgc3RhdGVcbiAqIGNvbnN0IGlzTG9hZGluZyA9ICRzdGF0ZShmYWxzZSlcbiAqIGNvbnN0IGVycm9yID0gJHN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uICRzdGF0ZTxUPihpbml0aWFsVmFsdWU6IFQpOiBTaWduYWw8VD4ge1xuICByZXR1cm4gc2lnbmFsKGluaXRpYWxWYWx1ZSk7XG59XG5cbi8qKiBTZXJ2ZXItc2lkZSBhdXRob3JpdGF0aXZlIHN0YXRlLCBrZXllZCBmb3Igc3RhYmxlIGlkZW50aXR5IGFjcm9zcyB0aGVcbiAqICBwcm9jZXNzLiBVbmxpa2UgdGhlIGJyb3dzZXIgcHJpbWl0aXZlcyBpdCBkb2VzIE5PVCBzeW5jIGFjcm9zcyBjb250ZXh0cyBvclxuICogIHBlcnNpc3QgdG8gY2hyb21lLnN0b3JhZ2Ug4oCUIHRoZSBzZXJ2ZXIgaG9sZHMgdGhlIGNhbm9uaWNhbCByZXBsaWNhIGFuZCBpc1xuICogIHRoZSBhbHdheXMtb24gcGVlcjsgY29ubmVjdGVkIGNsaWVudHMgcmVjZWl2ZSBkZXJpdmVkIHVwZGF0ZXMgdGhyb3VnaCB0aGVcbiAqICBFbHlzaWEgYHBvbGx5KClgIHBsdWdpbidzIGVmZmVjdC9icm9hZGNhc3QgbGF5ZXIgcmF0aGVyIHRoYW4gdGhyb3VnaCB0aGlzXG4gKiAgc2lnbmFsIGRpcmVjdGx5LiBVc2VkIGluc2lkZSBgcG9sbHkoeyBzdGF0ZTogeyBzZXJ2ZXI6IHsgLi4uIH0gfSB9KWAgYW5kXG4gKiAgcmVhZCBvbiB0aGUgcmVxdWVzdCBjb250ZXh0IGFzIGBwb2xseVN0YXRlLnNlcnZlci48a2V5Pi52YWx1ZWAuICovXG5jb25zdCBzZXJ2ZXJTdGF0ZVJlZ2lzdHJ5ID0gbmV3IE1hcDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4oKTtcblxuLyoqXG4gKiBSZWFjdGl2ZSBzZXJ2ZXItb25seSBzdGF0ZS4gVGhlIGZpcnN0IGNhbGwgZm9yIGEgYGtleWAgY3JlYXRlcyB0aGUgc2lnbmFsO1xuICogbGF0ZXIgY2FsbHMgd2l0aCB0aGUgc2FtZSBga2V5YCByZXR1cm4gdGhhdCBzYW1lIHNpZ25hbCwgc28gYSBtb2R1bGUgdGhhdFxuICogZGVjbGFyZXMgaXRzIHNlcnZlciBzdGF0ZSBvbmNlIGdldHMgYSBzdGFibGUgcmVmZXJlbmNlIGV2ZXJ5d2hlcmUgaXQgaXNcbiAqIHJlYWQuXG4gKlxuICogQHBhcmFtIGtleSAtIFN0YWJsZSBpZGVudGlmaWVyIGZvciB0aGlzIHNlcnZlciBzdGF0ZSAoZS5nLiBcImRiXCIpXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gVmFsdWUgaGVsZCB1bnRpbCB0aGUgc2VydmVyIG11dGF0ZXMgaXRcbiAqIEByZXR1cm5zIEEgcmVhY3RpdmUgc2lnbmFsIGhvbGRpbmcgdGhlIGF1dGhvcml0YXRpdmUgc2VydmVyIHZhbHVlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7ICRzZXJ2ZXJTdGF0ZSB9IGZyb20gXCJAZmFpcmZveC9wb2xseVwiO1xuICpcbiAqIGNvbnN0IGRiID0geyB0b2Rvczogc2lnbmFsKFtdKSwgbmV4dElkOiAxIH07XG4gKiBwb2xseSh7IHN0YXRlOiB7IHNlcnZlcjogeyBkYjogJHNlcnZlclN0YXRlKFwiZGJcIiwgZGIpIH0gfSB9KTtcbiAqIC8vIGluIGEgaGFuZGxlcjogY3R4LnBvbGx5U3RhdGUuc2VydmVyLmRiLnZhbHVlLnRvZG9zLnZhbHVlID0gWy4uLl1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gJHNlcnZlclN0YXRlPFQ+KGtleTogc3RyaW5nLCBpbml0aWFsVmFsdWU6IFQpOiBTaWduYWw8VD4ge1xuICBjb25zdCBleGlzdGluZyA9IHNlcnZlclN0YXRlUmVnaXN0cnkuZ2V0KGtleSk7XG4gIC8vIFRoZSByZWdpc3RyeSBlcmFzZXMgVCAoaXQgc3RvcmVzIFNpZ25hbDx1bmtub3duPik7IHRoZSBrZXkgaXMgdGhlXG4gIC8vIGNhbGxlcidzIGNvbnRyYWN0IHRoYXQgdGhlIHN0b3JlZCBzaWduYWwgY2FycmllcyB0aGVpciBULlxuICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZyBhcyB1bmtub3duIGFzIFNpZ25hbDxUPjtcbiAgY29uc3Qgc2lnID0gc2lnbmFsKGluaXRpYWxWYWx1ZSk7XG4gIHNlcnZlclN0YXRlUmVnaXN0cnkuc2V0KGtleSwgc2lnIGFzIHVua25vd24gYXMgU2lnbmFsPHVua25vd24+KTtcbiAgcmV0dXJuIHNpZztcbn1cblxudHlwZSBJbnRlcm5hbFN0YXRlT3B0aW9uczxUID0gdW5rbm93bj4gPSBTdGF0ZU9wdGlvbnM8VD4gJiB7XG4gIGVuYWJsZVN5bmM6IGJvb2xlYW47IC8vIFdoZXRoZXIgdG8gZW5hYmxlIHN5bmMgKGF2b2lkIGNvbGxpc2lvbiB3aXRoIHN5bmM/OiBTeW5jQWRhcHRlcilcbiAgZW5hYmxlUGVyc2lzdDogYm9vbGVhbjsgLy8gV2hldGhlciB0byBlbmFibGUgcGVyc2lzdGVuY2Vcbn07XG5cbi8vIERlZXAgZXF1YWxpdHkgY2hlY2sgdG8gcHJldmVudCByZWR1bmRhbnQgdXBkYXRlc1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBFcXVhbChhOiB1bmtub3duLCBiOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBhICE9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBiICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3Qga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgY29uc3Qga2V5c0IgPSBPYmplY3Qua2V5cyhiKTtcblxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzQSkge1xuICAgIGlmICgha2V5c0IuaW5jbHVkZXMoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChcbiAgICAgICFkZWVwRXF1YWwoXG4gICAgICAgIChhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0sXG4gICAgICAgIChiIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV1cbiAgICAgIClcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHN0b3JhZ2UgYW5kIHN5bmMgYWRhcHRlcnMgd2l0aCB0aHJlZS10aWVyIHByaW9yaXR5OlxuICogMS4gRXhwbGljaXQgYWRhcHRlcnMgZnJvbSBvcHRpb25zIChoaWdoZXN0IHByaW9yaXR5KVxuICogMi4gTWVzc2FnZUJ1cyBhZGFwdGVycyAobGVnYWN5LCBkZXByZWNhdGVkKVxuICogMy4gQXV0by1kZXRlY3RlZCBhZGFwdGVycyAoZGVmYXVsdCBiZWhhdmlvcilcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFkYXB0ZXJzKG9wdGlvbnM6IEludGVybmFsU3RhdGVPcHRpb25zKToge1xuICBzdG9yYWdlOiBTdG9yYWdlQWRhcHRlciB8IG51bGw7XG4gIHN5bmM6IFN5bmNBZGFwdGVyIHwgbnVsbDtcbn0ge1xuICAvLyBQcmlvcml0eSAxOiBFeHBsaWNpdCBhZGFwdGVycyAocGFydGlhbCBvciBmdWxsKVxuICBpZiAob3B0aW9ucy5zdG9yYWdlIHx8IG9wdGlvbnMuc3luYykge1xuICAgIHJldHVybiB7XG4gICAgICBzdG9yYWdlOiBvcHRpb25zLnN0b3JhZ2UgfHwgKG9wdGlvbnMuZW5hYmxlUGVyc2lzdCA/IGNyZWF0ZVN0b3JhZ2VBZGFwdGVyKCkgOiBudWxsKSxcbiAgICAgIHN5bmM6IG9wdGlvbnMuc3luYyB8fCAob3B0aW9ucy5lbmFibGVTeW5jID8gY3JlYXRlU3luY0FkYXB0ZXIoKSA6IG51bGwpLFxuICAgIH07XG4gIH1cblxuICAvLyBQcmlvcml0eSAyOiBNZXNzYWdlQnVzIChsZWdhY3kgc3VwcG9ydClcbiAgLy8gTWVzc2FnZUJ1cyBkb2Vzbid0IHByb3ZpZGUgc3luYyBhZGFwdGVyLCBvbmx5IENocm9tZSBzdG9yYWdlXG4gIGlmIChvcHRpb25zLmJ1cykge1xuICAgIHJldHVybiB7XG4gICAgICBzdG9yYWdlOiBvcHRpb25zLmJ1cy5hZGFwdGVycy5zdG9yYWdlLFxuICAgICAgc3luYzogb3B0aW9ucy5lbmFibGVTeW5jID8gY3JlYXRlU3luY0FkYXB0ZXIoKSA6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFByaW9yaXR5IDM6IEF1dG8tZGV0ZWN0IGJhc2VkIG9uIGVuYWJsZVN5bmMgYW5kIGVuYWJsZVBlcnNpc3QgZmxhZ3NcbiAgcmV0dXJuIHtcbiAgICBzdG9yYWdlOiBvcHRpb25zLmVuYWJsZVBlcnNpc3QgPyBjcmVhdGVTdG9yYWdlQWRhcHRlcigpIDogbnVsbCxcbiAgICBzeW5jOiBvcHRpb25zLmVuYWJsZVN5bmMgPyBjcmVhdGVTeW5jQWRhcHRlcigpIDogbnVsbCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RhdGU8VD4oa2V5OiBzdHJpbmcsIGluaXRpYWxWYWx1ZTogVCwgb3B0aW9uczogSW50ZXJuYWxTdGF0ZU9wdGlvbnM8VD4pOiBTaWduYWw8VD4ge1xuICAvLyBSZXR1cm4gZXhpc3Rpbmcgc2lnbmFsIGlmIGFscmVhZHkgcmVnaXN0ZXJlZFxuICBpZiAoc3RhdGVSZWdpc3RyeS5oYXMoa2V5KSkge1xuICAgIHJldHVybiBzdGF0ZVJlZ2lzdHJ5LmdldChrZXkpPy5zaWduYWwgYXMgdW5rbm93biBhcyBTaWduYWw8VD47XG4gIH1cblxuICBjb25zdCBzaWcgPSBzaWduYWwoaW5pdGlhbFZhbHVlKTtcblxuICAvLyBDcmVhdGUgdmVyaWZpY2F0aW9uIG1pcnJvciBpZiByZXF1ZXN0ZWRcbiAgaWYgKG9wdGlvbnMudmVyaWZ5KSB7XG4gICAgLy8gQ3JlYXRlIHBsYWluIG9iamVjdCBtaXJyb3IgZm9yIHZlcmlmaWNhdGlvblxuICAgIGNvbnN0IG1pcnJvciA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW5pdGlhbFZhbHVlKSkgYXMgdW5rbm93biBhcyBUO1xuICAgIChzaWcgYXMgdW5rbm93biBhcyBTaWduYWxXaXRoVmVyaWZ5PFQ+KS52ZXJpZnkgPSBtaXJyb3I7XG4gIH1cblxuICBjb25zdCBlbnRyeTogU3RhdGVFbnRyeTxUPiA9IHtcbiAgICBzaWduYWw6IHNpZyxcbiAgICBjbG9jazogMCxcbiAgICBsb2FkZWQ6IFByb21pc2UucmVzb2x2ZSgpLFxuICAgIHVwZGF0aW5nOiBmYWxzZSxcbiAgfTtcblxuICAvLyBSZXNvbHZlIGFkYXB0ZXJzIChleHBsaWNpdCwgTWVzc2FnZUJ1cywgb3IgYXV0by1kZXRlY3QpXG4gIGNvbnN0IGFkYXB0ZXJzID0gcmVzb2x2ZUFkYXB0ZXJzKG9wdGlvbnMpO1xuXG4gIC8vIExvYWQgZnJvbSBzdG9yYWdlIGlmIHBlcnNpc3QgaXMgZW5hYmxlZFxuICBpZiAob3B0aW9ucy5lbmFibGVQZXJzaXN0ICYmIGFkYXB0ZXJzLnN0b3JhZ2UpIHtcbiAgICBlbnRyeS5sb2FkZWQgPSBsb2FkRnJvbVN0b3JhZ2Uoa2V5LCBzaWcsIGVudHJ5LCBhZGFwdGVycy5zdG9yYWdlLCBvcHRpb25zLnZhbGlkYXRvcik7XG4gIH1cblxuICAvLyBwb2xseSMxNjc6IHRoZSBwZW5kaW5nIGRlYm91bmNlIHRpbWVyIGxpdmVzIGluIGNyZWF0ZVN0YXRlIHNjb3BlLCBub3RcbiAgLy8gaW5zaWRlIHRoZSBgbG9hZGVkYCBjYWxsYmFjaywgYmVjYXVzZSB0aGUgaW5jb21pbmctbWVzc2FnZSBoYW5kbGVyIGJlbG93XG4gIC8vIGhhcyB0byBiZSBhYmxlIHRvIGNhbmNlbCBhIHdyaXRlIHRoZSBtZXNzYWdlIHN1cGVyc2VkZXMuXG4gIGxldCBkZWJvdW5jZVRpbWVyOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFdhdGNoIGZvciBjaGFuZ2VzIGFmdGVyIGluaXRpYWwgbG9hZFxuICBlbnRyeS5sb2FkZWQudGhlbigoKSA9PiB7XG4gICAgbGV0IHByZXZpb3VzVmFsdWUgPSBzaWcudmFsdWU7XG4gICAgbGV0IGlzRmlyc3RSdW4gPSB0cnVlO1xuXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IFN5bmMgZWZmZWN0IHJlcXVpcmVzIGNvb3JkaW5hdGlvbiBvZiBtdWx0aXBsZSBzdGF0ZSBjaGFuZ2Ugc2NlbmFyaW9zXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIC8vIFJlYWQgdGhlIHNpZ25hbCBGSVJTVCwgYmVmb3JlIGFueSBlYXJseSByZXR1cm4gY2FuIGhhcHBlbi5cbiAgICAgIC8vXG4gICAgICAvLyBQcmVhY3QgcmUtY29sbGVjdHMgYW4gZWZmZWN0J3MgZGVwZW5kZW5jaWVzIG9uIGV2ZXJ5IHJ1biwgc28gYSBydW4gdGhhdFxuICAgICAgLy8gcmV0dXJucyB3aXRob3V0IHRvdWNoaW5nIGBzaWcudmFsdWVgIHVuc3Vic2NyaWJlcyB0aGUgZWZmZWN0IGZvciBnb29kLlxuICAgICAgLy8gVGhlIHJ1biBhbiBpbmNvbWluZyBzeW5jIG1lc3NhZ2UgdHJpZ2dlcnMgaXMgZXhhY3RseSBzdWNoIGEgcnVuLlxuICAgICAgY29uc3QgdmFsdWUgPSBzaWcudmFsdWU7XG5cbiAgICAgIC8vIFNraXAgZmlyc3QgcnVuIChlZmZlY3QgZmlyZXMgaW1tZWRpYXRlbHkgb24gcmVnaXN0cmF0aW9uKVxuICAgICAgaWYgKGlzRmlyc3RSdW4pIHtcbiAgICAgICAgaXNGaXJzdFJ1biA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEFuIGluY29taW5nIG1lc3NhZ2UgaXMgYmVpbmcgYXBwbGllZC4gQWRvcHQgaXQgYXMgdGhlIGJhc2VsaW5lIOKAlCB0aGlzXG4gICAgICAvLyBjb250ZXh0IG5vdyBob2xkcyBpdCwgc28gdGhlIG5leHQgbG9jYWwgY2hhbmdlIGlzIGEgY2hhbmdlIGFnYWluc3QgaXQg4oCUXG4gICAgICAvLyBhbmQgZG8gbm90IGJyb2FkY2FzdCwgd2hpY2ggd291bGQgZWNobyBpdCBiYWNrIHRvIHRoZSBzZW5kZXIuXG4gICAgICBpZiAoZW50cnkudXBkYXRpbmcpIHtcbiAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNraXAgaWYgdmFsdWUgaGFzbid0IGNoYW5nZWQgKGRlZXAgZXF1YWxpdHkgY2hlY2spXG4gICAgICBpZiAoZGVlcEVxdWFsKHZhbHVlLCBwcmV2aW91c1ZhbHVlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgLy8gVXBkYXRlIHZlcmlmaWNhdGlvbiBtaXJyb3IgaWYgZW5hYmxlZFxuICAgICAgaWYgKG9wdGlvbnMudmVyaWZ5KSB7XG4gICAgICAgIGNvbnN0IHZlcmlmeVNpZ25hbCA9IHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbFdpdGhWZXJpZnk8VD47XG4gICAgICAgIGlmICh2ZXJpZnlTaWduYWwudmVyaWZ5KSB7XG4gICAgICAgICAgLy8gbm9zZW1ncmVwOiBqYXZhc2NyaXB0Lmxhbmcuc2VjdXJpdHkuaW5zZWN1cmUtb2JqZWN0LWFzc2lnbi5pbnNlY3VyZS1vYmplY3QtYXNzaWduIOKAlCBpbnRlcm5hbCBtaXJyb3I7IHZhbHVlIGlzIGEgZGVlcCBKU09OIGNsb25lLCBub3QgYXJiaXRyYXJ5IGV4dGVybmFsIGlucHV0LlxuICAgICAgICAgIE9iamVjdC5hc3NpZ24odmVyaWZ5U2lnbmFsLnZlcmlmeSwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJbmNyZW1lbnQgY2xvY2sgbW9ub3RvbmljYWxseVxuICAgICAgZW50cnkuY2xvY2srKztcblxuICAgICAgLy8gcG9sbHkjMTY3OiBiaW5kIHRoZSBjbG9jayB0byB0aGUgdmFsdWUgSEVSRSwgd2hlcmUgdGhlIHR3byBhZ3JlZS5cbiAgICAgIC8vXG4gICAgICAvLyBgZG9VcGRhdGVgIHVzZWQgdG8gcmVhZCBgZW50cnkuY2xvY2tgIHdoZW4gaXQgZmlyZWQuIFVuZGVyXG4gICAgICAvLyBgZGVib3VuY2VNc2AgdGhhdCBpcyBhIGxhdGVyIG1vbWVudCwgYW5kIHRoZSBpbmNvbWluZy1tZXNzYWdlIGhhbmRsZXJcbiAgICAgIC8vIGJlbG93IHJhaXNlcyBgZW50cnkuY2xvY2tgIHRvIGFueSBtZXNzYWdlJ3MgY2xvY2sg4oCUIGluY2x1ZGluZyBhXG4gICAgICAvLyBtZXNzYWdlIHdob3NlIHZhbHVlIGl0IHJlamVjdHMuIFNvIHRoZSBkZWZlcnJlZCB3cml0ZSBwYWlyZWQgdGhpc1xuICAgICAgLy8gdmFsdWUgd2l0aCBzb21lYm9keSBlbHNlJ3MgY2xvY2ssIHBlcnNpc3RlZCB0aGUgcGFpciwgYW5kIGJyb2FkY2FzdFxuICAgICAgLy8gaXQuIFRoZSBwZXJzaXN0ZWQgY2xvY2sgaXMgcmVzdG9yZWQgb24gdGhlIG5leHQgbG9hZCwgc28gYSBwZWVyXG4gICAgICAvLyByZS1zZW5kaW5nIHRoZSByZWFsIHZhbHVlIGF0IHRoYXQgY2xvY2sgd2FzIHRoZW4gcmVmdXNlZCBieSB0aGVcbiAgICAgIC8vIHN0cmljdGx5LWdyZWF0ZXIgcnVsZSBhbmQgdGhlIGRpdmVyZ2VuY2UgYmVjYW1lIGR1cmFibGUuXG4gICAgICBjb25zdCBjbG9ja0F0V3JpdGUgPSBlbnRyeS5jbG9jaztcblxuICAgICAgY29uc3QgZG9VcGRhdGUgPSAoKSA9PiB7XG4gICAgICAgIGRlYm91bmNlVGltZXIgPSBudWxsO1xuXG4gICAgICAgIC8vIFBlcnNpc3QgdG8gc3RvcmFnZVxuICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVQZXJzaXN0ICYmIGFkYXB0ZXJzLnN0b3JhZ2UpIHtcbiAgICAgICAgICBwZXJzaXN0VG9TdG9yYWdlKGtleSwgdmFsdWUsIGNsb2NrQXRXcml0ZSwgYWRhcHRlcnMuc3RvcmFnZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCcm9hZGNhc3QgdG8gb3RoZXIgY29udGV4dHNcbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlU3luYyAmJiBhZGFwdGVycy5zeW5jKSB7XG4gICAgICAgICAgYnJvYWRjYXN0VXBkYXRlKGtleSwgdmFsdWUsIGNsb2NrQXRXcml0ZSwgYWRhcHRlcnMuc3luYyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIERlYm91bmNlIGlmIHNwZWNpZmllZFxuICAgICAgaWYgKG9wdGlvbnMuZGVib3VuY2VNcykge1xuICAgICAgICBpZiAoZGVib3VuY2VUaW1lcikgY2xlYXJUaW1lb3V0KGRlYm91bmNlVGltZXIpO1xuICAgICAgICBkZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dChkb1VwZGF0ZSwgb3B0aW9ucy5kZWJvdW5jZU1zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIExpc3RlbiBmb3IgdXBkYXRlcyBmcm9tIG90aGVyIGNvbnRleHRzIChvbmx5IGlmIHN5bmMgZW5hYmxlZClcbiAgaWYgKG9wdGlvbnMuZW5hYmxlU3luYyAmJiBhZGFwdGVycy5zeW5jKSB7XG4gICAgLy8gQ29ubmVjdCBpZiBuZWVkZWQgKHNvbWUgYWRhcHRlcnMgcmVxdWlyZSBleHBsaWNpdCBjb25uZWN0aW9uKVxuICAgIGlmIChhZGFwdGVycy5zeW5jLmNvbm5lY3QpIHtcbiAgICAgIGFkYXB0ZXJzLnN5bmMuY29ubmVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRha2UgYW4gaW5jb21pbmcgdmFsdWUgdGhpcyBjb250ZXh0IGhhcyBkZWNpZGVkIHRvIGFjY2VwdC5cbiAgICAgKlxuICAgICAqIHBvbGx5IzE2NyBwdXQgdHdvIHN0ZXBzIGluIGZyb250IG9mIHRoZSBhcHBseS4gQm90aCBhcmUgYWJvdXQgYSBwZW5kaW5nXG4gICAgICogZGVib3VuY2UgdGltZXIgdGhhdCB0aGUgbWVzc2FnZSBoYXMganVzdCBtYWRlIHdyb25nLlxuICAgICAqL1xuICAgIGNvbnN0IGFjY2VwdEluY29taW5nID0gKHZhbHVlOiBULCBjbG9jazogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAvLyBUaGUgbG9jYWwgdmFsdWUgaXMgY2F1c2FsbHkgb2xkZXIgdGhhbiB0aGlzIG9uZSwgc28gdGhlIGRlZmVycmVkIHdyaXRlXG4gICAgICAvLyBoYXMgbm90aGluZyBsZWZ0IHRvIHNheS4gRHJvcHBpbmcgaXQgc3RvcHMgYSBzdGFsZSBicm9hZGNhc3QgdGhhdCBhXG4gICAgICAvLyB0aGlyZCBjb250ZXh0IHN0aWxsIGJlbG93IHRoaXMgY2xvY2sgd291bGQgYWNjZXB0LlxuICAgICAgLy9cbiAgICAgIC8vIFJlYWNoZWQgb25seSBmb3IgYSB2YWx1ZSB0aGlzIGNvbnRleHQgZG9lcyBub3QgYWxyZWFkeSBob2xkOiB0aGVcbiAgICAgIC8vIGRlZXAtZXF1YWxpdHkgc2tpcCBiZWxvdyByZXR1cm5zIGZpcnN0LCB3aGljaCBsZWF2ZXMgYSBwZW5kaW5nIHRpbWVyXG4gICAgICAvLyBob2xkaW5nIHRoYXQgc2FtZSB2YWx1ZSBhcm1lZCwgYXMgaXQgc2hvdWxkIGJlLlxuICAgICAgaWYgKGRlYm91bmNlVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGRlYm91bmNlVGltZXIpO1xuICAgICAgICBkZWJvdW5jZVRpbWVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgYXBwbHlVcGRhdGUoZW50cnksIHZhbHVlLCBjbG9jayk7XG5cbiAgICAgIC8vIGBhcHBseVVwZGF0ZWAgc2V0cyBgZW50cnkudXBkYXRpbmdgLCBzbyB0aGUgbG9jYWwgZWZmZWN0IHJldHVybnNcbiAgICAgIC8vIHdpdGhvdXQgd3JpdGluZy4gUGVyc2lzdCB0aGUgaW5jb21pbmcgcGFpciBoZXJlLCBvciBzdG9yYWdlIGtlZXBzXG4gICAgICAvLyB3aGF0ZXZlciBpdCBsYXN0IGhlbGQgd2hpbGUgdGhlIHNpZ25hbCBob2xkcyB0aGlzIHZhbHVlIOKAlCBhbmQgb24gdGhlXG4gICAgICAvLyBuZXh0IGxvYWQgdGhlIHR3byBkaXNhZ3JlZS5cbiAgICAgIGlmIChvcHRpb25zLmVuYWJsZVBlcnNpc3QgJiYgYWRhcHRlcnMuc3RvcmFnZSkge1xuICAgICAgICBwZXJzaXN0VG9TdG9yYWdlKGtleSwgdmFsdWUsIGNsb2NrLCBhZGFwdGVycy5zdG9yYWdlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIFdoZXRoZXIgYW4gaW5jb21pbmcgdmFsdWUgaXMgb25lIHRoaXMgY29udGV4dCBzaG91bGQgdGFrZS4gKi9cbiAgICBjb25zdCBzaG91bGRBY2NlcHQgPSAobWVzc2FnZTogU3RhdGVTeW5jTWVzc2FnZTxUPik6IGJvb2xlYW4gPT4ge1xuICAgICAgLy8gVmFsaWRhdGUgaW5jb21pbmcgdmFsdWUgaWYgdmFsaWRhdG9yIHByb3ZpZGVkXG4gICAgICBpZiAob3B0aW9ucy52YWxpZGF0b3IgJiYgIW9wdGlvbnMudmFsaWRhdG9yKG1lc3NhZ2UudmFsdWUpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW1BvbGx5XSBTdGF0ZSBcIiR7a2V5fVwiOiBSZWNlaXZlZCBpbnZhbGlkIHZhbHVlIGZyb20gc3luYyAoY2xvY2s6ICR7bWVzc2FnZS5jbG9ja30pYCxcbiAgICAgICAgICBtZXNzYWdlLnZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gU2tpcCByZWR1bmRhbnQgdXBkYXRlcyAoZGVlcCBlcXVhbGl0eSBjaGVjaylcbiAgICAgIHJldHVybiAhZGVlcEVxdWFsKGVudHJ5LnNpZ25hbC52YWx1ZSwgbWVzc2FnZS52YWx1ZSk7XG4gICAgfTtcblxuICAgIC8vIFJlZ2lzdGVyIHN5bmMgbWVzc2FnZSBsaXN0ZW5lclxuICAgIGFkYXB0ZXJzLnN5bmMub25NZXNzYWdlPFQ+KChtZXNzYWdlKSA9PiB7XG4gICAgICBpZiAobWVzc2FnZS5rZXkgIT09IGtleSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBvbGRDbG9jayA9IGVudHJ5LmNsb2NrO1xuXG4gICAgICAvLyBMYW1wb3J0IGNsb2NrIHJ1bGU6IEFsd2F5cyB1cGRhdGUgdG8gbWF4KGxvY2FsLCByZWNlaXZlZClcbiAgICAgIC8vIFRoaXMgbWFpbnRhaW5zIGNhdXNhbCBvcmRlcmluZyBldmVuIHdoZW4gcmVqZWN0aW5nIHVwZGF0ZXNcbiAgICAgIGVudHJ5LmNsb2NrID0gTWF0aC5tYXgoZW50cnkuY2xvY2ssIG1lc3NhZ2UuY2xvY2spO1xuXG4gICAgICAvLyBPbmx5IGFjY2VwdCB2YWx1ZSB1cGRhdGVzIGlmIHJlY2VpdmVkIGNsb2NrIGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiBvbGQgbG9jYWwgY2xvY2tcbiAgICAgIC8vIFRoaXMgZW5zdXJlcyB3ZSBvbmx5IGFwcGx5IGNhdXNhbGx5IG5ld2VyIHVwZGF0ZXNcbiAgICAgIGlmIChtZXNzYWdlLmNsb2NrID4gb2xkQ2xvY2sgJiYgc2hvdWxkQWNjZXB0KG1lc3NhZ2UpKSB7XG4gICAgICAgIGFjY2VwdEluY29taW5nKG1lc3NhZ2UudmFsdWUgYXMgdW5rbm93biBhcyBULCBtZXNzYWdlLmNsb2NrKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRlUmVnaXN0cnkuc2V0KGtleSwgZW50cnkgYXMgdW5rbm93biBhcyBTdGF0ZUVudHJ5PHVua25vd24+KTtcbiAgcmV0dXJuIHNpZztcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbi8qKlxuICogQmFja2ZpbGwga2V5cyBhZGRlZCB0byB0aGUgc3RhdGUgc2hhcGUgc2luY2UgYSB2YWx1ZSB3YXMgcGVyc2lzdGVkLlxuICpcbiAqIFN0b3JlZCBwbGFpbiBvYmplY3RzIGFyZSBzaGFsbG93LW1lcmdlZCBvdmVyIHRoZSBjdXJyZW50IGRlZmF1bHRzIHNvIHRoYXQgYVxuICogZmllbGQgYWRkZWQgaW4gYSBsYXRlciByZWxlYXNlIHJlaHlkcmF0ZXMgdG8gaXRzIGRlZmF1bHQgcmF0aGVyIHRoYW5cbiAqIGB1bmRlZmluZWRgLiBQcmltaXRpdmVzIGFuZCBhcnJheXMgYXJlIHJlcGxhY2VkIHdob2xlc2FsZSDigJQgbWVyZ2luZyB0aG9zZVxuICogd291bGQgY29ycnVwdCB0aGVtLlxuICovXG5mdW5jdGlvbiByZWNvbmNpbGVXaXRoRGVmYXVsdHM8VD4oZGVmYXVsdHM6IFQsIHN0b3JlZDogdW5rbm93bik6IFQge1xuICAvLyBQZXJzaXN0ZWQgdmFsdWVzIGFyZSB0cnVzdGVkIHRvIGJlIHRoZSBUIHRoaXMga2V5IHdhcyByZWdpc3RlcmVkIHdpdGg7XG4gIC8vIHNjaGVtYSBkcmlmdCBpcyBoYW5kbGVkIGJ5IHRoZSBtZXJnZSwgbm90IGJ5IHJ1bnRpbWUgdmFsaWRhdGlvbi5cbiAgaWYgKGlzUGxhaW5PYmplY3QoZGVmYXVsdHMpICYmIGlzUGxhaW5PYmplY3Qoc3RvcmVkKSkge1xuICAgIHJldHVybiB7IC4uLmRlZmF1bHRzLCAuLi5zdG9yZWQgfSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cbiAgcmV0dXJuIHN0b3JlZCBhcyB1bmtub3duIGFzIFQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRGcm9tU3RvcmFnZTxUPihcbiAga2V5OiBzdHJpbmcsXG4gIHNpZzogU2lnbmFsPFQ+LFxuICBlbnRyeTogU3RhdGVFbnRyeTxUPixcbiAgc3RvcmFnZTogU3RvcmFnZUFkYXB0ZXIsXG4gIHZhbGlkYXRvcj86ICh2YWx1ZTogdW5rbm93bikgPT4gdmFsdWUgaXMgVFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RvcmFnZS5nZXQoW2tleSwgYCR7a2V5fTpjbG9ja2BdKTtcblxuICAgIGlmIChyZXN1bHRba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBzaWcgc3RpbGwgaG9sZHMgdGhlIGluaXRpYWwgdmFsdWUgaGVyZSwgc28gaXQgaXMgdGhlIGRlZmF1bHQgYmFzZVxuICAgICAgLy8gZm9yIGJhY2tmaWxsaW5nIGtleXMgdGhlIHBlcnNpc3RlZCBibG9iIHByZWRhdGVzLlxuICAgICAgY29uc3Qgc3RvcmVkVmFsdWUgPSByZWNvbmNpbGVXaXRoRGVmYXVsdHMoc2lnLnBlZWsoKSwgcmVzdWx0W2tleV0pO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBzdG9yZWQgdmFsdWUgaWYgdmFsaWRhdG9yIHByb3ZpZGVkXG4gICAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICAgIGlmICh2YWxpZGF0b3Ioc3RvcmVkVmFsdWUpKSB7XG4gICAgICAgICAgc2lnLnZhbHVlID0gc3RvcmVkVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFtQb2xseV0gU3RhdGUgXCIke2tleX1cIjogU3RvcmVkIHZhbHVlIGZhaWxlZCB2YWxpZGF0aW9uLCB1c2luZyBpbml0aWFsIHZhbHVlYCxcbiAgICAgICAgICAgIHN0b3JlZFZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2lnLnZhbHVlID0gc3RvcmVkVmFsdWUgYXMgdW5rbm93biBhcyBUO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXN1bHRbYCR7a2V5fTpjbG9ja2BdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVudHJ5LmNsb2NrID0gcmVzdWx0W2Ake2tleX06Y2xvY2tgXSBhcyB1bmtub3duIGFzIG51bWJlcjtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKGBbUG9sbHldIEZhaWxlZCB0byBsb2FkIHN0YXRlIGZyb20gc3RvcmFnZTogJHtrZXl9YCwgZXJyb3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBlcnNpc3RUb1N0b3JhZ2U8VD4oa2V5OiBzdHJpbmcsIHZhbHVlOiBULCBjbG9jazogbnVtYmVyLCBzdG9yYWdlOiBTdG9yYWdlQWRhcHRlcik6IHZvaWQge1xuICB0cnkge1xuICAgIHN0b3JhZ2Uuc2V0KHtcbiAgICAgIFtrZXldOiB2YWx1ZSxcbiAgICAgIFtgJHtrZXl9OmNsb2NrYF06IGNsb2NrLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybihgW1BvbGx5XSBGYWlsZWQgdG8gcGVyc2lzdCBzdGF0ZSB0byBzdG9yYWdlOiAke2tleX1gLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gYnJvYWRjYXN0VXBkYXRlPFQ+KGtleTogc3RyaW5nLCB2YWx1ZTogVCwgY2xvY2s6IG51bWJlciwgc3luYzogU3luY0FkYXB0ZXIpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBzeW5jLmJyb2FkY2FzdCh7XG4gICAgICBrZXksXG4gICAgICB2YWx1ZSxcbiAgICAgIGNsb2NrLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybihgW1BvbGx5XSBGYWlsZWQgdG8gYnJvYWRjYXN0IHN0YXRlIHVwZGF0ZTogJHtrZXl9YCwgZXJyb3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VXBkYXRlPFQ+KGVudHJ5OiBTdGF0ZUVudHJ5PFQ+LCB2YWx1ZTogVCwgY2xvY2s6IG51bWJlcik6IHZvaWQge1xuICBlbnRyeS51cGRhdGluZyA9IHRydWU7XG4gIGVudHJ5LnNpZ25hbC52YWx1ZSA9IHZhbHVlO1xuICBlbnRyeS5jbG9jayA9IGNsb2NrO1xuICBlbnRyeS51cGRhdGluZyA9IGZhbHNlO1xufVxuXG4vKipcbiAqIEdldCBzdGF0ZSBieSBrZXkgKHVzZWZ1bCBmb3IgcmV0cmlldmluZyBzdGF0ZSB3aXRob3V0IHJlLWNyZWF0aW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdGVCeUtleTxUPihrZXk6IHN0cmluZyk6IFNpZ25hbDxUPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGVudHJ5ID0gc3RhdGVSZWdpc3RyeS5nZXQoa2V5KTtcbiAgcmV0dXJuIGVudHJ5Py5zaWduYWwgYXMgdW5rbm93biBhcyBTaWduYWw8VD4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2xlYXIgc3RhdGUgcmVnaXN0cnkgKHVzZWZ1bCBmb3IgdGVzdGluZylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyU3RhdGVSZWdpc3RyeSgpOiB2b2lkIHtcbiAgc3RhdGVSZWdpc3RyeS5jbGVhcigpO1xufVxuIiwKICAgICIvKipcbiAqIFN0YXRlIG93bmVkIGJ5IHRoZSBjb21wb25lbnQgZ2FsbGVyeS5cbiAqXG4gKiBUaGUgZ2FsbGVyeSBpcyBhIHN0YW5kYWxvbmUgZGV2IHN1cmZhY2Ugd2l0aCBubyBzZXJ2ZXIgc3RhdGUsIHNvIHRoZXNlXG4gKiBzaWduYWxzIHN0YXkgbW9kdWxlLWxvY2FsIOKAlCB0aGV5IG5ldmVyIGpvaW4gYSBzeW5jZWQgc3RvcmUgYnVuZGxlLiBBY3Rpb25cbiAqIGhhbmRsZXJzIChhY3Rpb25zLnRzKSByZWFjaCB0aGVtIGJ5IGltcG9ydCwgdGhlIHdheSBlYWwncyBzaG93Y2FzZSBkb2VzLlxuICogYHJlc2V0R2FsbGVyeVN0b3JlcygpYCBleGlzdHMgc28gdGhlIGJyb3dzZXIvdmlzdWFsIHRlc3QgY2FuIGlzb2xhdGUgcnVucy5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVGb3JtLCBzZXRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi9zcmMvYWN0aW9uc1wiO1xuaW1wb3J0IHsgJHN0YXRlIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9zaGFyZWQvbGliL3N0YXRlLnRzXCI7XG5cbmV4cG9ydCB0eXBlIEdhbGxlcnlUaGVtZSA9IFwic3lzdGVtXCIgfCBcImxpZ2h0XCIgfCBcImRhcmtcIjtcblxuLyoqIFRoZSBnYWxsZXJ5J3MgQWN0aW9uRm9ybSBiaW5kcyB0byBhbiBlbXB0eSBidW5kbGUg4oCUIG5vIHN0b3JlIGlzIHRvdWNoZWQuICovXG5leHBvcnQgdHlwZSBHYWxsZXJ5U3RvcmVzID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+O1xuXG4vKiogVGhlbWUgb3ZlcnJpZGUsIGFwcGxpZWQgdG8gdGhlIHBhbmVsIGFzIGBkYXRhLXBvbGx5LXRoZW1lYC4gYHN5c3RlbWAgb21pdHNcbiAqICB0aGUgYXR0cmlidXRlIGFuZCBsZXRzIGBwcmVmZXJzLWNvbG9yLXNjaGVtZWAgZGVjaWRlLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5VGhlbWUgPSAkc3RhdGU8R2FsbGVyeVRoZW1lPihcInN5c3RlbVwiKTtcbi8qKiBEcml2ZXMgdGhlIGxpdmUgPE1vZGFsPiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeU1vZGFsT3BlbiA9ICRzdGF0ZTxib29sZWFuPihmYWxzZSk7XG4vKiogRHJpdmVzIHRoZSBsaXZlIDxEcm9wZG93bj4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlEcm9wZG93bk9wZW4gPSAkc3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuLyoqIFNlbGVjdGlvbiBmb3IgdGhlIHNpbmdsZS1zZWxlY3QgPFNlbGVjdD4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlTZWxlY3RTaW5nbGUgPSAkc3RhdGU8U2V0PHN0cmluZz4+KG5ldyBTZXQoW1wiY29tZXRcIl0pKTtcbi8qKiBTZWxlY3Rpb24gZm9yIHRoZSBtdWx0aS1zZWxlY3QgPFNlbGVjdD4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlTZWxlY3RNdWx0aSA9ICRzdGF0ZTxTZXQ8c3RyaW5nPj4obmV3IFNldChbXCJjb21ldFwiLCBcIm5lYnVsYVwiXSkpO1xuLyoqIFNlbGVjdGlvbiBmb3IgdGhlIGNsZWFyYWJsZSBzaW5nbGUtc2VsZWN0IDxTZWxlY3Q+IHNwZWNpbWVuLiBTdGFydHMgZW1wdHlcbiAqICBzbyB0aGUgXCJBbnkg4oCmXCIgY2xlYXIgb3B0aW9uIGlzIHRoZSBhY3RpdmUgcm93LiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5U2VsZWN0Q2xlYXJhYmxlID0gJHN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KCkpO1xuLyoqIFNlbGVjdGlvbiBmb3IgdGhlIGxvbmctbGFiZWwgPFNlbGVjdD4gc3BlY2ltZW4gKHBvbGx5IzE4MCkuIFRoZSBsYWJlbCBpc1xuICogIHdpZGVyIHRoYW4gYC0tcG9sbHktY29udHJvbC1tYXgtd2lkdGhgLCBzbyB0aGUgdHJpZ2dlciBtdXN0IHRydW5jYXRlIGl0XG4gKiAgcmF0aGVyIHRoYW4gd3JhcCB0aGUgY2FyZXQgb250byBhIHNlY29uZCBsaW5lLiBFdmVyeSBzaG9ydC1sYWJlbCBzcGVjaW1lblxuICogIHBhc3NlZCB0aHJvdWdob3V0IHRoYXQgcmVncmVzc2lvbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVNlbGVjdExvbmcgPSAkc3RhdGU8U2V0PHN0cmluZz4+KG5ldyBTZXQoW1wibG9uZ1wiXSkpO1xuLyoqIFRoZSBsaXZlLCBzaWduYWwtYm91bmQgPENoZWNrYm94PiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeUNoZWNrZWQgPSAkc3RhdGU8Ym9vbGVhbj4odHJ1ZSk7XG4vKiogVGhlIGNvbnRyb2xsZWQgPFRleHRJbnB1dD4gc3BlY2ltZW4gdmFsdWUuICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlUZXh0ID0gJHN0YXRlPHN0cmluZz4oXCJDb250cm9sbGVkIHZhbHVlXCIpO1xuLyoqIExhc3QgdmFsdWUgY29tbWl0dGVkIGJ5IHRoZSA8QWN0aW9uSW5wdXQ+IC8gPEFjdGlvblNlbGVjdD4gc3BlY2ltZW5zLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5Q29tbWl0dGVkID0gJHN0YXRlPHN0cmluZz4oXCLigJRcIik7XG4vKiogQWN0aXZlIHRhYiBpZCBmb3IgdGhlIDxUYWJzPiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVRhYiA9ICRzdGF0ZTxzdHJpbmc+KFwib3ZlcnZpZXdcIik7XG4vKiogTmFtZSBvZiB0aGUgbGFzdCBmaWxlIHBpY2tlZCBieSB0aGUgPEZpbGVJbnB1dD4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlGaWxlTmFtZSA9ICRzdGF0ZTxzdHJpbmc+KFwi4oCUXCIpO1xuXG4vKipcbiAqIFRoZSBmb3JtIGJlaGluZCB0aGUgPEFjdGlvbkZvcm0+IHNwZWNpbWVuLiBgY3JlYXRlRm9ybWAgcmVxdWlyZXMgYGJpbmRTdG9yZXNgXG4gKiBiZWZvcmUgYSBzdWJtaXQgY2FuIHJ1bjsgY2xpZW50LnRzeCBiaW5kcyBpdCB0byB0aGUgZW1wdHkgZ2FsbGVyeSBidW5kbGUgYXRcbiAqIGJvb3QuIEl0cyBgLmFjdGlvbnNgIGFyZSBzcHJlYWQgaW50byB0aGUgcmVnaXN0cnkgKHNlZSBhY3Rpb25zLnRzKS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdhbGxlcnlGb3JtID0gY3JlYXRlRm9ybTx7IGZ1bGxOYW1lOiBzdHJpbmc7IGVtYWlsOiBzdHJpbmcgfSwgR2FsbGVyeVN0b3Jlcz4oe1xuICBuYW1lOiBcImdhbGxlcnktZm9ybVwiLFxuICBpbml0aWFsVmFsdWVzOiB7IGZ1bGxOYW1lOiBcIlwiLCBlbWFpbDogXCJcIiB9LFxuICBvblN1Ym1pdDogKHsgdmFsdWVzIH0pID0+IHtcbiAgICBzZXRFcnJvcihcbiAgICAgIGBBY3Rpb25Gb3JtIHN1Ym1pdHRlZCDigJQgbmFtZSBcIiR7dmFsdWVzLmZ1bGxOYW1lIHx8IFwiKGVtcHR5KVwifVwiLCBgICtcbiAgICAgICAgYGVtYWlsIFwiJHt2YWx1ZXMuZW1haWwgfHwgXCIoZW1wdHkpXCJ9XCIuYCxcbiAgICAgIHsgc2V2ZXJpdHk6IFwiaW5mb1wiIH1cbiAgICApO1xuICB9LFxufSk7XG5cbi8qKiBSZXNldCBldmVyeSBnYWxsZXJ5IHNpZ25hbCB0byBpdHMgaW5pdGlhbCB2YWx1ZSDigJQgZm9yIHRlc3QgaXNvbGF0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0R2FsbGVyeVN0b3JlcygpOiB2b2lkIHtcbiAgJGdhbGxlcnlUaGVtZS52YWx1ZSA9IFwic3lzdGVtXCI7XG4gICRnYWxsZXJ5TW9kYWxPcGVuLnZhbHVlID0gZmFsc2U7XG4gICRnYWxsZXJ5RHJvcGRvd25PcGVuLnZhbHVlID0gZmFsc2U7XG4gICRnYWxsZXJ5U2VsZWN0U2luZ2xlLnZhbHVlID0gbmV3IFNldChbXCJjb21ldFwiXSk7XG4gICRnYWxsZXJ5U2VsZWN0TXVsdGkudmFsdWUgPSBuZXcgU2V0KFtcImNvbWV0XCIsIFwibmVidWxhXCJdKTtcbiAgJGdhbGxlcnlTZWxlY3RDbGVhcmFibGUudmFsdWUgPSBuZXcgU2V0KCk7XG4gICRnYWxsZXJ5U2VsZWN0TG9uZy52YWx1ZSA9IG5ldyBTZXQoW1wibG9uZ1wiXSk7XG4gICRnYWxsZXJ5Q2hlY2tlZC52YWx1ZSA9IHRydWU7XG4gICRnYWxsZXJ5VGV4dC52YWx1ZSA9IFwiQ29udHJvbGxlZCB2YWx1ZVwiO1xuICAkZ2FsbGVyeUNvbW1pdHRlZC52YWx1ZSA9IFwi4oCUXCI7XG4gICRnYWxsZXJ5VGFiLnZhbHVlID0gXCJvdmVydmlld1wiO1xuICAkZ2FsbGVyeUZpbGVOYW1lLnZhbHVlID0gXCLigJRcIjtcbiAgZ2FsbGVyeUZvcm0uY2xvc2UoKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBBY3Rpb25zIGZvciB0aGUgZ2FsbGVyeSdzIGludGVyYWN0aXZlIHNwZWNpbWVucy4gRXZlcnkgaGFuZGxlciBkcml2ZXMgYVxuICogbW9kdWxlLWxvY2FsIHNpZ25hbCAoc3RvcmVzLnRzKSBvciBhIHBvbGx5IG92ZXJsYXkgcHJpbWl0aXZlIOKAlCBub25lIHRvdWNoZXMgYVxuICogc3RvcmUgYnVuZGxlLCBzbyB0aGUgZ2FsbGVyeSBzdGF5cyBhIHNlbGYtY29udGFpbmVkIGRldiBzdXJmYWNlLiBTcHJlYWRpbmdcbiAqIGBnYWxsZXJ5Rm9ybS5hY3Rpb25zYCBhZGRzIHRoZSBhdXRvLXJlZ2lzdGVyZWQgYGdhbGxlcnktZm9ybTp7b3BlbixjbG9zZSxcbiAqIHN1Ym1pdH1gIGhhbmRsZXJzLiBjbGllbnQudHN4IHdpcmVzIHRoaXMgcmVnaXN0cnkgaW50byB0aGUgZG9jdW1lbnQgdmlhXG4gKiBgaW5zdGFsbEV2ZW50RGVsZWdhdGlvbmAsIGV4YWN0bHkgYXMgYSByZWFsIGNvbnN1bWVyIGFwcCB3b3VsZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFjdGlvblJlZ2lzdHJ5LCBFcnJvclNldmVyaXR5IH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9hY3Rpb25zXCI7XG5pbXBvcnQgeyBzZXRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi9zcmMvYWN0aW9uc1wiO1xuaW1wb3J0IHsgY29uZmlybSB9IGZyb20gXCIuLi8uLi8uLi9zcmMvcG9sbHktdWlcIjtcbmltcG9ydCB7XG4gICRnYWxsZXJ5Q29tbWl0dGVkLFxuICAkZ2FsbGVyeU1vZGFsT3BlbixcbiAgJGdhbGxlcnlUYWIsXG4gICRnYWxsZXJ5VGhlbWUsXG4gIHR5cGUgR2FsbGVyeVN0b3JlcyxcbiAgdHlwZSBHYWxsZXJ5VGhlbWUsXG4gIGdhbGxlcnlGb3JtLFxufSBmcm9tIFwiLi9zdG9yZXMudHNcIjtcblxuY29uc3QgVEhFTUVTOiByZWFkb25seSBHYWxsZXJ5VGhlbWVbXSA9IFtcInN5c3RlbVwiLCBcImxpZ2h0XCIsIFwiZGFya1wiXTtcbmNvbnN0IFNFVkVSSVRJRVM6IHJlYWRvbmx5IEVycm9yU2V2ZXJpdHlbXSA9IFtcImluZm9cIiwgXCJ3YXJuaW5nXCIsIFwiZXJyb3JcIl07XG5cbmV4cG9ydCBjb25zdCBHQUxMRVJZX0FDVElPTlM6IEFjdGlvblJlZ2lzdHJ5PEdhbGxlcnlTdG9yZXM+ID0ge1xuICAuLi5nYWxsZXJ5Rm9ybS5hY3Rpb25zLFxuXG4gIFwiZ2FsbGVyeTpzZXQtdGhlbWVcIjogKHsgZGF0YSB9KSA9PiB7XG4gICAgY29uc3QgdGhlbWUgPSBkYXRhW1widGhlbWVcIl07XG4gICAgaWYgKHRoZW1lID09PSBcInN5c3RlbVwiIHx8IHRoZW1lID09PSBcImxpZ2h0XCIgfHwgdGhlbWUgPT09IFwiZGFya1wiKSB7XG4gICAgICAkZ2FsbGVyeVRoZW1lLnZhbHVlID0gdGhlbWU7XG4gICAgfVxuICB9LFxuXG4gIFwiZ2FsbGVyeTpzZXQtdGFiXCI6ICh7IGRhdGEgfSkgPT4ge1xuICAgIGNvbnN0IGlkID0gZGF0YVtcImlkXCJdO1xuICAgIGlmICh0eXBlb2YgaWQgPT09IFwic3RyaW5nXCIpICRnYWxsZXJ5VGFiLnZhbHVlID0gaWQ7XG4gIH0sXG5cbiAgXCJnYWxsZXJ5Om1vZGFsLW9wZW5cIjogKCkgPT4ge1xuICAgICRnYWxsZXJ5TW9kYWxPcGVuLnZhbHVlID0gdHJ1ZTtcbiAgfSxcblxuICBcImdhbGxlcnk6Y29tbWl0XCI6ICh7IGRhdGEgfSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gZGF0YVtcInZhbHVlXCJdO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpICRnYWxsZXJ5Q29tbWl0dGVkLnZhbHVlID0gdmFsdWU7XG4gIH0sXG5cbiAgXCJnYWxsZXJ5OnRvYXN0XCI6ICh7IGRhdGEgfSkgPT4ge1xuICAgIGNvbnN0IHNldmVyaXR5ID0gU0VWRVJJVElFUy5maW5kKChzKSA9PiBzID09PSBkYXRhW1wic2V2ZXJpdHlcIl0pID8/IFwiaW5mb1wiO1xuICAgIHNldEVycm9yKGBUaGlzIGlzIGEgJHtzZXZlcml0eX0gdG9hc3Qg4oCUIGNsaWNrIGl0IG9yIHdhaXQgZm9yIGl0IHRvIGRpc21pc3MuYCwge1xuICAgICAgc2V2ZXJpdHksXG4gICAgfSk7XG4gIH0sXG5cbiAgXCJnYWxsZXJ5OmNvbmZpcm1cIjogYXN5bmMgKHsgZGF0YSB9KSA9PiB7XG4gICAgY29uc3QgZGFuZ2VyID0gZGF0YVtcImRhbmdlclwiXSA9PT0gXCJ0cnVlXCI7XG4gICAgY29uc3Qgb2sgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgIHRpdGxlOiBkYW5nZXIgPyBcIkRlbGV0ZSB0aGlzIGl0ZW0/XCIgOiBcIlNhdmUgeW91ciBjaGFuZ2VzP1wiLFxuICAgICAgYm9keTogZGFuZ2VyXG4gICAgICAgID8gXCJUaGlzIGNhbm5vdCBiZSB1bmRvbmUuIFRoZSBpdGVtIHdpbGwgYmUgcGVybWFuZW50bHkgcmVtb3ZlZC5cIlxuICAgICAgICA6IFwiWW91ciBjaGFuZ2VzIHdpbGwgYmUgYXBwbGllZCBpbW1lZGlhdGVseS5cIixcbiAgICAgIGRhbmdlcixcbiAgICAgIGNvbmZpcm1MYWJlbDogZGFuZ2VyID8gXCJEZWxldGVcIiA6IFwiU2F2ZVwiLFxuICAgIH0pO1xuICAgIHNldEVycm9yKGBDb25maXJtRGlhbG9nIHJlc29sdmVkICR7U3RyaW5nKG9rKX0uYCwgeyBzZXZlcml0eTogb2sgPyBcImluZm9cIiA6IFwid2FybmluZ1wiIH0pO1xuICB9LFxufTtcblxuLyoqIFRoZSB0aGVtZSBjeWNsZSwgZXhwb3NlZCBzbyB0aGUgcGFuZWwgY2FuIHJlbmRlciBvbmUgYnV0dG9uIHBlciBvcHRpb24uICovXG5leHBvcnQgeyBUSEVNRVMgfTtcbiIsCiAgICAiLyoqXG4gKiBUaGUgZ2FsbGVyeSBjYXRhbG9ndWUg4oCUIG9uZSBzZWN0aW9uIHBlciBwb2xseS11aSBwcmltaXRpdmUsIGVhY2ggcmVuZGVyaW5nXG4gKiB0aGUgY29uZmlndXJhdGlvbnMgd29ydGggc2VlaW5nLiBBZGFwdGVkIGZyb20gZWFsJ3Mgc2hvd2Nhc2UgKHdoaWNoIGNvbnN1bWVzXG4gKiB0aGlzIHZlcnkgbGlicmFyeSksIHJlcG9pbnRlZCBhdCB0aGUgbG9jYWwgc291cmNlIHNvIHRoZSBnYWxsZXJ5IHJlbmRlcnMgdGhlXG4gKiBwcmltaXRpdmVzIGV4YWN0bHkgYXMgdGhleSBzaGlwLlxuICpcbiAqIEV2ZXJ5IHNlY3Rpb24gY2FycmllcyBhIGBjb21wb25lbnRgIG5hbWluZyB0aGUgcG9sbHktdWkgZXhwb3J0IGl0IGNvdmVycztcbiAqIHJlZ2lzdHJ5LWNvdmVyYWdlLnRzIGFzc2VydHMgdGhhdCBldmVyeSBjb21wb25lbnQgaW4gcmVnaXN0cnkuZ2VuZXJhdGVkLnRzXG4gKiBoYXMgYSBzZWN0aW9uIGhlcmUsIHNvIGEgbmV3IHByaW1pdGl2ZSBjYW4ndCBsYW5kIHdpdGhvdXQgYSBzcGVjaW1lbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQge1xuICBBY3Rpb25Gb3JtLFxuICBBY3Rpb25JbnB1dCxcbiAgQWN0aW9uU2VsZWN0LFxuICBCYWRnZSxcbiAgQnV0dG9uLFxuICBDYXJkLFxuICBDaGVja2JveCxcbiAgQ2x1c3RlcixcbiAgQ29kZSxcbiAgQ29sbGFwc2libGUsXG4gIERyb3Bkb3duLFxuICBGaWxlSW5wdXQsXG4gIEh0bWwsXG4gIExheW91dCxcbiAgTGluayxcbiAgTW9kYWwsXG4gIE91dHB1dCxcbiAgU2VsZWN0LFxuICBTa2VsZXRvbixcbiAgU3VyZmFjZSxcbiAgVGFicyxcbiAgVGV4dCxcbiAgVGV4dElucHV0LFxuICBUb2dnbGUsXG59IGZyb20gXCIuLi8uLi8uLi9zcmMvcG9sbHktdWlcIjtcbmltcG9ydCB7XG4gICRnYWxsZXJ5Q2hlY2tlZCxcbiAgJGdhbGxlcnlDb21taXR0ZWQsXG4gICRnYWxsZXJ5RHJvcGRvd25PcGVuLFxuICAkZ2FsbGVyeUZpbGVOYW1lLFxuICAkZ2FsbGVyeU1vZGFsT3BlbixcbiAgJGdhbGxlcnlTZWxlY3RDbGVhcmFibGUsXG4gICRnYWxsZXJ5U2VsZWN0TG9uZyxcbiAgJGdhbGxlcnlTZWxlY3RNdWx0aSxcbiAgJGdhbGxlcnlTZWxlY3RTaW5nbGUsXG4gICRnYWxsZXJ5VGFiLFxuICAkZ2FsbGVyeVRleHQsXG4gIGdhbGxlcnlGb3JtLFxufSBmcm9tIFwiLi9zdG9yZXMudHNcIjtcblxuLyoqXG4gKiBPbmUgY2F0YWxvZ3VlZCBleGFtcGxlOiBhIHN0YWdlIGhvbGRpbmcgbGl2ZSBjb21wb25lbnQocykgYW5kIGEgY2FwdGlvblxuICogbmFtaW5nIHRoZSBjb25maWd1cmF0aW9uIG9uIHNob3cuIGB3aWRlYCBzcGFucyBldmVyeSBncmlkIGNvbHVtbiBmb3JcbiAqIHNwZWNpbWVucyB0aGF0IG5lZWQgdGhlIHJvb20gKGxheW91dHMsIGZvcm1zLCBjYXJkcykuXG4gKi9cbmZ1bmN0aW9uIFNwZWNpbWVuKHByb3BzOiB7IGNhcHRpb246IHN0cmluZzsgd2lkZT86IGJvb2xlYW47IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIHZhcmlhbnQ9XCJzdW5rZW5cIlxuICAgICAgcmFkaXVzPVwibWRcIlxuICAgICAgYm9yZGVyPVwiZGVmYXVsdFwiXG4gICAgICBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCJcbiAgICAgIGNsYXNzTmFtZT17cHJvcHMud2lkZSA/IFwiZ2FsbGVyeS1zcGVjaW1lbiBnYWxsZXJ5LXNwZWNpbWVuLS13aWRlXCIgOiBcImdhbGxlcnktc3BlY2ltZW5cIn1cbiAgICA+XG4gICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2FsbGVyeS1zdGFnZVwiPntwcm9wcy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgPFRleHQgc2l6ZT1cInhzXCIgdG9uZT1cIm11dGVkXCIgY2xhc3NOYW1lPVwiZ2FsbGVyeS1jb2RlXCI+XG4gICAgICAgICAge3Byb3BzLmNhcHRpb259XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuLyoqIEEgbmV1dHJhbCBmaWxsZXIgYmxvY2sgZm9yIHRoZSBsYXlvdXQgc3BlY2ltZW5zLiAqL1xuZnVuY3Rpb24gQm94KHByb3BzOiB7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2UgdmFyaWFudD1cInJhaXNlZFwiIHJhZGl1cz1cInNtXCIgYm9yZGVyPVwiZGVmYXVsdFwiIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgIDxUZXh0IHNpemU9XCJzbVwiPntwcm9wcy5jaGlsZHJlbn08L1RleHQ+XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5jb25zdCBTVEFSOiBKU1guRWxlbWVudCA9IChcbiAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJnYWxsZXJ5LWljb25cIj5cbiAgICDimIVcbiAgPC9zcGFuPlxuKTtcblxuLyoqXG4gKiBwb2xseSMxODA6IGEgbGFiZWwgd2lkZXIgdGhhbiBgLS1wb2xseS1jb250cm9sLW1heC13aWR0aGAsIHNoYXJlZCBieSB0aGVcbiAqIDxTZWxlY3Q+IGFuZCA8QWN0aW9uU2VsZWN0PiBsb25nLWxhYmVsIHNwZWNpbWVucyBzbyB0aGUgdHdvIHRyaWdnZXJzIG11c3RcbiAqIG1lYXN1cmUgdGhlIHNhbWUgYm94LiBFdmVyeSBjYXRhbG9ndWVkIFNlbGVjdCB1c2VkIGEgc2hvcnQgbGFiZWwsIHdoaWNoIGlzXG4gKiB3aHkgYSB0cmlnZ2VyIHRoYXQgaGFkIGxvc3QgaXRzIGxheW91dCByb3cgc3RpbGwgbWVhc3VyZWQgNDBweCBhbmQgdGhlXG4gKiBjYXJldCBvbmx5IHdyYXBwZWQgaW4gYSBjb25zdW1lciBhcHAuXG4gKi9cbmNvbnN0IExPTkdfU0VMRUNUX0xBQkVMID0gXCJBIGRlbGliZXJhdGVseSBsb25nIG9wdGlvbiBsYWJlbCB0aGF0IG92ZXJmbG93cyB0aGUgY29udHJvbCBtYXggd2lkdGhcIjtcblxuY29uc3QgTE9OR19TRUxFQ1RfT1BUSU9OUyA9IFtcbiAgeyB2YWx1ZTogXCJsb25nXCIsIGxhYmVsOiBMT05HX1NFTEVDVF9MQUJFTCB9LFxuICB7IHZhbHVlOiBcInNob3J0XCIsIGxhYmVsOiBcIlNob3J0XCIgfSxcbl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2FsbGVyeVNlY3Rpb24ge1xuICAvKiogQW5jaG9yIGlkIGZvciB0aGUgaW4tcGFnZSBuYXYuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IGhlYWRpbmcuICovXG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBUaGUgcG9sbHktdWkgZXhwb3J0IHRoaXMgc2VjdGlvbiBjb3ZlcnMgKG1hdGNoZWQgYWdhaW5zdCB0aGUgcmVnaXN0cnkpLiAqL1xuICBjb21wb25lbnQ6IHN0cmluZztcbiAgLyoqIE9uZS1saW5lIGRlc2NyaXB0aW9uLiAqL1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIHJlbmRlcjogKCkgPT4gSlNYLkVsZW1lbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBHQUxMRVJZX1NFQ1RJT05TOiByZWFkb25seSBHYWxsZXJ5U2VjdGlvbltdID0gW1xuICB7XG4gICAgaWQ6IFwiYmFkZ2VcIixcbiAgICB0aXRsZTogXCJCYWRnZVwiLFxuICAgIGNvbXBvbmVudDogXCJCYWRnZVwiLFxuICAgIHN1bW1hcnk6IFwiU21hbGwgaW5saW5lIHN0YXR1cyBjaGlwLiBPbmUgdmFyaWFudCBwZXIgc2VtYW50aWMgdG9uZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIHsoW1wiZGVmYXVsdFwiLCBcImluZm9cIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiLCBcImRhbmdlclwiXSBhcyBjb25zdCkubWFwKCh2KSA9PiAoXG4gICAgICAgICAgPFNwZWNpbWVuIGtleT17dn0gY2FwdGlvbj17YHZhcmlhbnQ9XCIke3Z9XCJgfT5cbiAgICAgICAgICAgIDxCYWRnZSB2YXJpYW50PXt2fT57dn08L0JhZGdlPlxuICAgICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgICkpfVxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImJ1dHRvblwiLFxuICAgIHRpdGxlOiBcIkJ1dHRvblwiLFxuICAgIGNvbXBvbmVudDogXCJCdXR0b25cIixcbiAgICBzdW1tYXJ5OiBcIkludGVyYWN0aXZlIGNvbnRyb2wuIFRpZXIgc2V0cyBpbXBvcnRhbmNlLCBjb2xvciBvdmVybGF5cyBtZWFuaW5nLCBzaXplIHNldHMgc2NhbGUuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInRpZXI6IHByaW1hcnkgLyBzZWNvbmRhcnkgLyB0ZXJ0aWFyeVwiPlxuICAgICAgICAgIDxCdXR0b24gdGllcj1cInByaW1hcnlcIiBsYWJlbD1cIlByaW1hcnlcIiAvPlxuICAgICAgICAgIDxCdXR0b24gdGllcj1cInNlY29uZGFyeVwiIGxhYmVsPVwiU2Vjb25kYXJ5XCIgLz5cbiAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJ0ZXJ0aWFyeVwiIGxhYmVsPVwiVGVydGlhcnlcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNvbG9yOiBkZWZhdWx0IC8gaW5mbyAvIHN1Y2Nlc3MgLyB3YXJuaW5nIC8gZGFuZ2VyXCI+XG4gICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cImRlZmF1bHRcIiBsYWJlbD1cIkRlZmF1bHRcIiAvPlxuICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJpbmZvXCIgbGFiZWw9XCJJbmZvXCIgLz5cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwic3VjY2Vzc1wiIGxhYmVsPVwiU3VjY2Vzc1wiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cIndhcm5pbmdcIiBsYWJlbD1cIldhcm5pbmdcIiAvPlxuICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJkYW5nZXJcIiBsYWJlbD1cIkRhbmdlclwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic2l6ZTogc21hbGwgLyBub3JtYWwgLyBsYXJnZVwiPlxuICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgbGFiZWw9XCJTbWFsbFwiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBzaXplPVwibm9ybWFsXCIgbGFiZWw9XCJOb3JtYWxcIiAvPlxuICAgICAgICAgIDxCdXR0b24gc2l6ZT1cImxhcmdlXCIgbGFiZWw9XCJMYXJnZVwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICA8QnV0dG9uIGxhYmVsPVwiRGlzYWJsZWRcIiBkaXNhYmxlZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImljb24gKyBsYWJlbFwiPlxuICAgICAgICAgIDxCdXR0b24gaWNvbj17U1RBUn0gbGFiZWw9XCJXaXRoIGljb25cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNpcmNsZSAoaWNvbi1vbmx5IG5lZWRzIGFyaWEtbGFiZWwpXCI+XG4gICAgICAgICAgPEJ1dHRvbiBjaXJjbGUgYXJpYS1sYWJlbD1cIlN0YXJcIiBsYWJlbD17U1RBUn0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJocmVmIOKAlCByZW5kZXJzIGFuIDxhPlwiPlxuICAgICAgICAgIDxCdXR0b24gaHJlZj1cIiNidXR0b25cIiB0aWVyPVwic2Vjb25kYXJ5XCIgbGFiZWw9XCJMaW5rIGJ1dHRvblwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZnVsbFdpZHRoXCIgd2lkZT5cbiAgICAgICAgICA8QnV0dG9uIGZ1bGxXaWR0aCB0aWVyPVwicHJpbWFyeVwiIGxhYmVsPVwiRnVsbC13aWR0aCBidXR0b25cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICB7LyogVGhlIHR3byByb3dzIHNoYXJlIGEgbGVmdCBlZGdlLCBzbyB0aGUgb2Zmc2V0IGlzIHRoZSB3aG9sZSBwb2ludDpcbiAgICAgICAgICAgIHRoZSBkZWZhdWx0IGJ1dHRvbiBhbGlnbnMgaXRzIEJPWCB0byB0aGF0IGVkZ2UgYW5kIGl0cyBsYWJlbCBzaXRzXG4gICAgICAgICAgICBhbiBpbmxpbmUtcGFkZGluZyBmdXJ0aGVyIGluOyB0aGUgZmx1c2ggb25lIHB1dHMgdGhlIExBQkVMIHRoZXJlLiAqL31cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJmbHVzaCDigJQgbGFiZWwgb24gdGhlIHRleHQgZWRnZSwgZm9yIGEgdGVydGlhcnkgYnV0dG9uIGJlc2lkZSBjb3B5XCIgd2lkZT5cbiAgICAgICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiPlxuICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtXCIgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICAgIEEgbGluZSBvZiBib2R5IGNvcHkgZm9yIHRoZSBsZWZ0IGVkZ2UuXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8Q2x1c3Rlcj5cbiAgICAgICAgICAgICAgPEJ1dHRvbiB0aWVyPVwidGVydGlhcnlcIiBsYWJlbD1cIkRlZmF1bHQg4oCUIGJveCBhbGlnbnNcIiAvPlxuICAgICAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgICAgICAgPENsdXN0ZXI+XG4gICAgICAgICAgICAgIDxCdXR0b24gdGllcj1cInRlcnRpYXJ5XCIgZmx1c2ggbGFiZWw9XCJGbHVzaCDigJQgbGFiZWwgYWxpZ25zXCIgLz5cbiAgICAgICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0ZXh0XCIsXG4gICAgdGl0bGU6IFwiVGV4dFwiLFxuICAgIGNvbXBvbmVudDogXCJUZXh0XCIsXG4gICAgc3VtbWFyeTogXCJUeXBvZ3JhcGhpYyBwcmltaXRpdmUg4oCUIHRvbmUsIHNpemUsIHdlaWdodCwgaXRhbGljLCBzdHJpa2V0aHJvdWdoLCBhbmQgbGVhZGluZy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidG9uZTogZGVmYXVsdCAvIG11dGVkIC8gZGFuZ2VyIC8gd2FybmluZyAvIHN1Y2Nlc3NcIj5cbiAgICAgICAgICA8VGV4dCB0b25lPVwiZGVmYXVsdFwiPkRlZmF1bHQ8L1RleHQ+XG4gICAgICAgICAgPFRleHQgdG9uZT1cIm11dGVkXCI+TXV0ZWQ8L1RleHQ+XG4gICAgICAgICAgPFRleHQgdG9uZT1cImRhbmdlclwiPkRhbmdlcjwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB0b25lPVwid2FybmluZ1wiPldhcm5pbmc8L1RleHQ+XG4gICAgICAgICAgPFRleHQgdG9uZT1cInN1Y2Nlc3NcIj5TdWNjZXNzPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNpemU6IHhzIC8gc20gLyBtZCAvIGxnIC8geGxcIj5cbiAgICAgICAgICB7KFtcInhzXCIsIFwic21cIiwgXCJtZFwiLCBcImxnXCIsIFwieGxcIl0gYXMgY29uc3QpLm1hcCgocykgPT4gKFxuICAgICAgICAgICAgPFRleHQga2V5PXtzfSBzaXplPXtzfT5cbiAgICAgICAgICAgICAge3N9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwid2VpZ2h0OiBub3JtYWwgLyBtZWRpdW0gLyBib2xkXCI+XG4gICAgICAgICAgPFRleHQgd2VpZ2h0PVwibm9ybWFsXCI+Tm9ybWFsPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHdlaWdodD1cIm1lZGl1bVwiPk1lZGl1bTwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJib2xkXCI+Qm9sZDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpdGFsaWMgLyBzdHJpa2V0aHJvdWdoXCI+XG4gICAgICAgICAgPFRleHQgaXRhbGljPkl0YWxpYyBlbXBoYXNpczwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHJpa2V0aHJvdWdoPlN0cnVjayB0aHJvdWdoPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0nbGVhZGluZz1cImxvb3NlXCIg4oCUIG11bHRpLWxpbmUgYm9keSBjb3B5JyB3aWRlPlxuICAgICAgICAgIDxUZXh0IGFzPVwicFwiIGxlYWRpbmc9XCJsb29zZVwiPlxuICAgICAgICAgICAgQSBwYXJhZ3JhcGggcmVuZGVyZWQgd2l0aCBsb29zZSBsZWFkaW5nLiBQb2xseSdzIFRleHQgcHJpbWl0aXZlIGJhY2tzIGV2ZXJ5IHNwYW4sXG4gICAgICAgICAgICBwYXJhZ3JhcGgsIGxhYmVsLCBhbmQgY2FwdGlvbiBzbyBjb25zdW1lcnMgbmV2ZXIgcmVhY2ggZm9yIGEgcmF3IHN0eWxlIGF0dHJpYnV0ZSB0byBzZXRcbiAgICAgICAgICAgIHRvbmUsIHNpemUsIHdlaWdodCwgb3IgbGluZSBoZWlnaHQuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNvZGVcIixcbiAgICB0aXRsZTogXCJDb2RlXCIsXG4gICAgY29tcG9uZW50OiBcIkNvZGVcIixcbiAgICBzdW1tYXJ5OiBcIk1vbm9zcGFjZSBjb2RlIOKAlCBpbmxpbmUgYnkgZGVmYXVsdCwgb3IgYSB3cmFwcGVkIGJsb2NrLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpbmxpbmVcIj5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIFJ1biA8Q29kZT5wb2xseSBnYWxsZXJ5PC9Db2RlPiB0byBvcGVuIHRoaXMgcGFnZS5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiYmxvY2tcIiB3aWRlPlxuICAgICAgICAgIDxDb2RlIGJsb2NrPnsnY29uc3QgZ2FsbGVyeSA9IHtcXG4gIHNlcnZlZDogXCJieSBwb2xseVwiLFxcbn07J308L0NvZGU+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwibGlua1wiLFxuICAgIHRpdGxlOiBcIkxpbmtcIixcbiAgICBjb21wb25lbnQ6IFwiTGlua1wiLFxuICAgIHN1bW1hcnk6IFwiQW5jaG9yIHByaW1pdGl2ZSDigJQgdW5kZXJsaW5lIGJ5IGRlZmF1bHQsIHdpdGggZXh0ZXJuYWwsIHN1YnRsZSwgYW5kIGRvd25sb2FkIG1vZGVzLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkZWZhdWx0XCI+XG4gICAgICAgICAgPExpbmsgaHJlZj1cIiNsaW5rXCI+SW4tcGFnZSBsaW5rPC9MaW5rPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImV4dGVybmFsIOKAlCBuZXcgdGFiLCByZWw9bm9vcGVuZXJcIj5cbiAgICAgICAgICA8TGluayBocmVmPVwiaHR0cHM6Ly9leGFtcGxlLmNvbVwiIGV4dGVybmFsPlxuICAgICAgICAgICAgRXh0ZXJuYWwgbGlua1xuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzdWJ0bGUg4oCUIHVuZGVybGluZSBvbiBob3ZlciBvbmx5XCI+XG4gICAgICAgICAgPExpbmsgaHJlZj1cIiNsaW5rXCIgc3VidGxlPlxuICAgICAgICAgICAgU3VidGxlIGxpbmtcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZG93bmxvYWRcIj5cbiAgICAgICAgICA8TGluayBocmVmPVwiZGF0YTp0ZXh0L3BsYWluLGdhbGxlcnlcIiBkb3dubG9hZD1cImdhbGxlcnkudHh0XCI+XG4gICAgICAgICAgICBEb3dubG9hZCBsaW5rXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInN1cmZhY2VcIixcbiAgICB0aXRsZTogXCJTdXJmYWNlXCIsXG4gICAgY29tcG9uZW50OiBcIlN1cmZhY2VcIixcbiAgICBzdW1tYXJ5OiBcIk93bnMgdmlzdWFsIGNocm9tZSDigJQgYmFja2dyb3VuZCwgYm9yZGVyLCByYWRpdXMsIHNoYWRvdywgcG9zaXRpb25pbmcuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICB7KFtcInBsYWluXCIsIFwicmFpc2VkXCIsIFwic3Vua2VuXCIsIFwiYnViYmxlXCIsIFwiY2hpcFwiLCBcImNhbGxvdXRcIl0gYXMgY29uc3QpLm1hcCgodikgPT4gKFxuICAgICAgICAgIDxTcGVjaW1lbiBrZXk9e3Z9IGNhcHRpb249e2B2YXJpYW50PVwiJHt2fVwiYH0+XG4gICAgICAgICAgICA8U3VyZmFjZSB2YXJpYW50PXt2fSBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbVwiPnt2fTwvVGV4dD5cbiAgICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICApKX1cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3ZhcmlhbnQ6IFwiZmxvYXRpbmdcIiAvIFwic3RpY2t5LWJhclwiIHBpbiB0byB0aGUgdmlld3BvcnQg4oCUIG9taXR0ZWQgaGVyZSc+XG4gICAgICAgICAgPFRleHQgc2l6ZT1cInhzXCIgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICBQb3NpdGlvbmFsIHZhcmlhbnRzIGFyZSBwcmV2aWV3ZWQgaW4gY29udGV4dCwgbm90IGluIGEgZ3JpZCBjZWxsLlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgey8qIEVxdWFsIHNxdWFyZSBib3hlcy4gVGhlIGxhYmVsIHVzZWQgdG8gc2l6ZSBlYWNoIG9uZSwgc28gdGhlIGxhZGRlclxuICAgICAgICAgICAgd2FzIGNvbXBhcmVkIGFjcm9zcyBmaXZlIGRpZmZlcmVudCB3aWR0aHMgKDQ2LzM1LzM2LzI4LzM1IHB4KSBhbmRcbiAgICAgICAgICAgIGBmdWxsYCByZW5kZXJlZCBhcyBhIHN0YWRpdW0gdGFsbGVyIHRoYW4gaXQgd2FzIHdpZGUgcmF0aGVyIHRoYW4gYVxuICAgICAgICAgICAgY2lyY2xlLiBBIHNxdWFyZSBib3ggbWFrZXMgOTk5OXB4IHJlYWQgYXMgdGhlIGNpcmNsZSBpdCBpcy4gKi99XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwicmFkaXVzOiBub25lIC8gc20gLyBtZCAvIGxnIC8gZnVsbFwiPlxuICAgICAgICAgIHsoW1wibm9uZVwiLCBcInNtXCIsIFwibWRcIiwgXCJsZ1wiLCBcImZ1bGxcIl0gYXMgY29uc3QpLm1hcCgocikgPT4gKFxuICAgICAgICAgICAgPFN1cmZhY2VcbiAgICAgICAgICAgICAga2V5PXtyfVxuICAgICAgICAgICAgICB2YXJpYW50PVwicmFpc2VkXCJcbiAgICAgICAgICAgICAgYm9yZGVyPVwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgIHJhZGl1cz17cn1cbiAgICAgICAgICAgICAgd2lkdGg9XCI1NnB4XCJcbiAgICAgICAgICAgICAgaGVpZ2h0PVwiNTZweFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxMYXlvdXQgaGVpZ2h0PVwiMTAwJVwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIiBqdXN0aWZ5SXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwieHNcIj57cn08L1RleHQ+XG4gICAgICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICAgICAgPC9TdXJmYWNlPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImJvcmRlcjogbm9uZSAvIGRlZmF1bHQgLyBzdHJvbmdcIj5cbiAgICAgICAgICB7KFtcIm5vbmVcIiwgXCJkZWZhdWx0XCIsIFwic3Ryb25nXCJdIGFzIGNvbnN0KS5tYXAoKGIpID0+IChcbiAgICAgICAgICAgIDxTdXJmYWNlIGtleT17Yn0gYm9yZGVyPXtifSByYWRpdXM9XCJtZFwiIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInhzXCI+e2J9PC9UZXh0PlxuICAgICAgICAgICAgPC9TdXJmYWNlPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICB7LyogT24gdGhlIHN1bmtlbiBjYXJkIGV2ZXJ5IHNwZWNpbWVuIHNpdHMgb24sIGEgc29mdCBzaGFkb3cgbGFuZHMgZ3JleVxuICAgICAgICAgICAgb24gZ3JleSBhbmQgbm9uZSBvZiB0aGUgdGhyZWUgc3RlcHMgcmVhZC4gVGhleSBhcmUgY2FzdCBvbiBhIHBsYWluXG4gICAgICAgICAgICBzdXJmYWNlIGhlcmUsIGFuZCBlYWNoIGJveCBpcyBzcXVhcmUgYW5kIGVxdWFsIHNvIHRoZSBvbmx5IHRoaW5nXG4gICAgICAgICAgICB0aGF0IGRpZmZlcnMgYmV0d2VlbiB0aGVtIGlzIHRoZSBzaGFkb3cuICovfVxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNoYWRvdzogc20gLyBtZCAvIGxnXCI+XG4gICAgICAgICAgPFN1cmZhY2UgYmFja2dyb3VuZD1cInZhcigtLXBvbGx5LXN1cmZhY2UpXCIgcmFkaXVzPVwibWRcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbGcpXCI+XG4gICAgICAgICAgICA8Q2x1c3RlciBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14bClcIj5cbiAgICAgICAgICAgICAgeyhbXCJzbVwiLCBcIm1kXCIsIFwibGdcIl0gYXMgY29uc3QpLm1hcCgocykgPT4gKFxuICAgICAgICAgICAgICAgIDxTdXJmYWNlIGtleT17c30gdmFyaWFudD1cInJhaXNlZFwiIHNoYWRvdz17c30gcmFkaXVzPVwibWRcIiB3aWR0aD1cIjU2cHhcIiBoZWlnaHQ9XCI1NnB4XCI+XG4gICAgICAgICAgICAgICAgICA8TGF5b3V0IGhlaWdodD1cIjEwMCVcIiBhbGlnbkl0ZW1zPVwiY2VudGVyXCIganVzdGlmeUl0ZW1zPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiPntzfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICAgICAgPC9TdXJmYWNlPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNhcmRcIixcbiAgICB0aXRsZTogXCJDYXJkXCIsXG4gICAgY29tcG9uZW50OiBcIkNhcmRcIixcbiAgICBzdW1tYXJ5OiBcIkNvbXBvdW5kIG9mIFN1cmZhY2VzIOKAlCBhIHJhaXNlZCBSb290IHdyYXBwaW5nIEhlYWRlciwgQm9keSwgYW5kIEZvb3RlciBzbG90cy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiQ2FyZC5Sb290ID4gSGVhZGVyIC8gQm9keSAvIEZvb3RlclwiIHdpZGU+XG4gICAgICAgIDxDYXJkLlJvb3QgcGFkZGluZz1cIjBcIj5cbiAgICAgICAgICA8Q2FyZC5IZWFkZXIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgICAgPFRleHQgd2VpZ2h0PVwiYm9sZFwiPkNhcmQgaGVhZGVyPC9UZXh0PlxuICAgICAgICAgIDwvQ2FyZC5IZWFkZXI+XG4gICAgICAgICAgPENhcmQuQm9keSBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgVGhlIGJvZHkgc2xvdCBjYXJyaWVzIHRoZSBtYWluIGNvbnRlbnQuIEVhY2ggc2xvdCBhY2NlcHRzIHRoZSBmdWxsIFN1cmZhY2VQcm9wcywgc28gaXRcbiAgICAgICAgICAgICAgY2FuIGJlIHJldGludGVkIG9yIHJlcGFkZGVkIHdpdGhvdXQgcmVhY2hpbmcgcGFzdCB0aGUgcHJpbWl0aXZlLlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvQ2FyZC5Cb2R5PlxuICAgICAgICAgIDxDYXJkLkZvb3RlciBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIHRpZXI9XCJwcmltYXJ5XCIgbGFiZWw9XCJGb290ZXIgYWN0aW9uXCIgLz5cbiAgICAgICAgICA8L0NhcmQuRm9vdGVyPlxuICAgICAgICA8L0NhcmQuUm9vdD5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInNrZWxldG9uXCIsXG4gICAgdGl0bGU6IFwiU2tlbGV0b25cIixcbiAgICBjb21wb25lbnQ6IFwiU2tlbGV0b25cIixcbiAgICBzdW1tYXJ5OiBcIlNoaW1tZXJpbmcgcGxhY2Vob2xkZXIgZm9yIGxvYWRpbmcgc3RhdGVzLiBBbmltYXRpb24gaG9ub3VycyByZWR1Y2VkLW1vdGlvbi5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIHsoW1widGV4dFwiLCBcInJlY3RcIiwgXCJjaXJjbGVcIl0gYXMgY29uc3QpLm1hcCgodikgPT4gKFxuICAgICAgICAgIDxTcGVjaW1lbiBrZXk9e3Z9IGNhcHRpb249e2B2YXJpYW50PVwiJHt2fVwiYH0+XG4gICAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD17dn0gLz5cbiAgICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICApKX1cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjdXN0b20gd2lkdGggKyBoZWlnaHRcIj5cbiAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD1cInJlY3RcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9ezY0fSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcIm91dHB1dFwiLFxuICAgIHRpdGxlOiBcIk91dHB1dFwiLFxuICAgIGNvbXBvbmVudDogXCJPdXRwdXRcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJNb25vc3BhY2Ugb3V0cHV0IHJlZ2lvbiBmb3IgY29tbWFuZCByZXN1bHRzIG9yIGxvZ3Mg4oCUIHdyYXBzLCBvciBzY3JvbGxzIGhvcml6b250YWxseS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGVmYXVsdCDigJQgd3JhcHNcIiB3aWRlPlxuICAgICAgICAgIDxPdXRwdXQ+cG9sbHkgZ2FsbGVyeSDihpIgc2VydmluZyBhdCBodHRwOi8vbG9jYWxob3N0OjQzMjE8L091dHB1dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzY3JvbGwg4oCUIHNpbmdsZSBsb25nIGxpbmUgc2Nyb2xscyBpbnN0ZWFkIG9mIHdyYXBwaW5nXCIgd2lkZT5cbiAgICAgICAgICA8T3V0cHV0IHNjcm9sbD5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkIHBvbGx5IGdhbGxlcnkgLS1idWlsZCAuL2Rpc3QvZ2FsbGVyeSAgICMgb25lIGxvbmcgbGluZSB0aGF0IHNjcm9sbHMgaG9yaXpvbnRhbGx5IHJhdGhlciB0aGFuIHdyYXBwaW5nIG9udG8gdGhlIG5leHQgcm93XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L091dHB1dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJodG1sXCIsXG4gICAgdGl0bGU6IFwiSHRtbFwiLFxuICAgIGNvbXBvbmVudDogXCJIdG1sXCIsXG4gICAgc3VtbWFyeTogXCJSZW5kZXJzIGEgdHJ1c3RlZCBIVE1MIHN0cmluZy4gVGhlIGNhbGxlciBvd25zIHNhbml0aXNhdGlvbiDigJQgbmV2ZXIgcGFzcyB1c2VyIGlucHV0LlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJodG1sPXt0cnVzdGVkIHN0cmluZ31cIiB3aWRlPlxuICAgICAgICA8SHRtbCBodG1sPVwiPHN0cm9uZz5Cb2xkPC9zdHJvbmc+LCA8ZW0+aXRhbGljPC9lbT4sIGFuZCBhIDxjb2RlPmNvZGUgc3BhbjwvY29kZT4gZnJvbSBhIHRydXN0ZWQgbWFya3VwIHN0cmluZy5cIiAvPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY29sbGFwc2libGVcIixcbiAgICB0aXRsZTogXCJDb2xsYXBzaWJsZVwiLFxuICAgIGNvbXBvbmVudDogXCJDb2xsYXBzaWJsZVwiLFxuICAgIHN1bW1hcnk6IFwiTmF0aXZlIDxkZXRhaWxzPi88c3VtbWFyeT4gZGlzY2xvc3VyZSDigJQga2V5Ym9hcmQgYW5kIHNjcmVlbi1yZWFkZXIgYmVoYXZpb3VyIGZyZWUuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNsb3NlZCBieSBkZWZhdWx0XCIgd2lkZT5cbiAgICAgICAgICA8Q29sbGFwc2libGUgc3VtbWFyeT1cIlNob3cgbW9yZSBkZXRhaWxcIj5cbiAgICAgICAgICAgIDxUZXh0PlRoaXMgY29udGVudCBpcyByZXZlYWxlZCB3aGVuIHRoZSBkaXNjbG9zdXJlIGlzIG9wZW5lZC48L1RleHQ+XG4gICAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkZWZhdWx0T3BlblwiIHdpZGU+XG4gICAgICAgICAgPENvbGxhcHNpYmxlIHN1bW1hcnk9XCJPcGVuIGZyb20gdGhlIHN0YXJ0XCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgICA8VGV4dD5UaGlzIGNvbGxhcHNpYmxlIHJlbmRlcnMgZXhwYW5kZWQgb24gZmlyc3QgcGFpbnQuPC9UZXh0PlxuICAgICAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZWRpdGFibGUgZmllbGQgaW4gdGhlIHN1bW1hcnkg4oCUIFNwYWNlL0VudGVyIG5vIGxvbmdlciBjb2xsYXBzZSBpdFwiIHdpZGU+XG4gICAgICAgICAgPENvbGxhcHNpYmxlXG4gICAgICAgICAgICBzdW1tYXJ5PXtcbiAgICAgICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZ2FsbGVyeS1jb2xsYXBzaWJsZS1zdW1tYXJ5XCIgcGxhY2Vob2xkZXI9XCJUeXBlIGEgc3BhY2UgaGVyZeKAplwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRleHQ+VGhlIGhlYWRlciBndWFyZCBjYW5jZWxzIHRoZSBkaXNjbG9zdXJlIHRvZ2dsZSBmb3IgdGV4dC1lbnRyeSBmaWVsZHMuPC9UZXh0PlxuICAgICAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwibGF5b3V0XCIsXG4gICAgdGl0bGU6IFwiTGF5b3V0XCIsXG4gICAgY29tcG9uZW50OiBcIkxheW91dFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIlRoZSBncmlkIHByaW1pdGl2ZS4gUHJvcHMgbWFwIHRvIENTUyBjdXN0b20gcHJvcGVydGllcyDigJQgbm8gaGFuZC13cml0dGVuIGZsZXggb3IgZ3JpZC5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdjb2x1bW5zPVwiMWZyIDFmciAxZnJcIicgd2lkZT5cbiAgICAgICAgICA8TGF5b3V0IGNvbHVtbnM9XCIxZnIgMWZyIDFmclwiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICAgICAgPEJveD4xZnI8L0JveD5cbiAgICAgICAgICAgIDxCb3g+MWZyPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PjFmcjwvQm94PlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0nY29sdW1ucz1cImF1dG8gMWZyIGF1dG9cIicgd2lkZT5cbiAgICAgICAgICA8TGF5b3V0IGNvbHVtbnM9XCJhdXRvIDFmciBhdXRvXCIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgPEJveD5hdXRvPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PjFmcjwvQm94PlxuICAgICAgICAgICAgPEJveD5hdXRvPC9Cb3g+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic3RhY2tPbk1vYmlsZSDigJQgY29sbGFwc2VzIHRvIG9uZSBjb2x1bW4g4omkNjQwcHhcIiB3aWRlPlxuICAgICAgICAgIDxMYXlvdXQgY29sdW1ucz1cIjFmciAxZnJcIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIiBzdGFja09uTW9iaWxlPlxuICAgICAgICAgICAgPEJveD5TaWRlIGJ5IHNpZGUsIHRoZW4gc3RhY2tlZDwvQm94PlxuICAgICAgICAgICAgPEJveD5TaWRlIGJ5IHNpZGUsIHRoZW4gc3RhY2tlZDwvQm94PlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNsdXN0ZXJcIixcbiAgICB0aXRsZTogXCJDbHVzdGVyXCIsXG4gICAgY29tcG9uZW50OiBcIkNsdXN0ZXJcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJXcmFwcGluZyByb3cgb2YgdmFyaWFibGUtd2lkdGggaXRlbXMg4oCUIGNoaXBzLCB0YWdzLCBidXR0b24gZ3JvdXBzLiBSZWZsb3dzIGFzIHNwYWNlIHJ1bnMgb3V0LlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJnYXAg4oCUIGl0ZW1zIHdyYXAgb250byBuZXcgcm93c1wiIHdpZGU+XG4gICAgICAgIDxDbHVzdGVyIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiPlxuICAgICAgICAgIHtbXCJHcm9jZXJpZXNcIiwgXCJFcnJhbmRzXCIsIFwiSG9tZVwiLCBcIkdhcmRlblwiLCBcIkZpbmFuY2VcIiwgXCJUcmF2ZWxcIiwgXCJIZWFsdGhcIiwgXCJBZG1pblwiXS5tYXAoXG4gICAgICAgICAgICAodGFnKSA9PiAoXG4gICAgICAgICAgICAgIDxCYWRnZSBrZXk9e3RhZ30gdmFyaWFudD1cImluZm9cIj5cbiAgICAgICAgICAgICAgICB7dGFnfVxuICAgICAgICAgICAgICA8L0JhZGdlPlxuICAgICAgICAgICAgKVxuICAgICAgICAgICl9XG4gICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInRhYnNcIixcbiAgICB0aXRsZTogXCJUYWJzXCIsXG4gICAgY29tcG9uZW50OiBcIlRhYnNcIixcbiAgICBzdW1tYXJ5OiBcIkhvcml6b250YWwgbmF2IHdpdGggYW4gYWN0aXZlLXRhYiBhY2NlbnQuIERpc3BhdGNoZXMgYW4gYWN0aW9uIHBlciB0YWIuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImludGVyYWN0aXZlIOKAlCBvbmUgdGFiIGRpc2FibGVkXCIgd2lkZT5cbiAgICAgICAgPFRhYnNcbiAgICAgICAgICB0YWJzPXtbXG4gICAgICAgICAgICB7IGlkOiBcIm92ZXJ2aWV3XCIsIGxhYmVsOiBcIk92ZXJ2aWV3XCIgfSxcbiAgICAgICAgICAgIHsgaWQ6IFwiYWN0aXZpdHlcIiwgbGFiZWw6IFwiQWN0aXZpdHlcIiB9LFxuICAgICAgICAgICAgeyBpZDogXCJzZXR0aW5nc1wiLCBsYWJlbDogXCJTZXR0aW5nc1wiIH0sXG4gICAgICAgICAgICB7IGlkOiBcImFyY2hpdmVkXCIsIGxhYmVsOiBcIkFyY2hpdmVkXCIsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgXX1cbiAgICAgICAgICBhY3RpdmVUYWI9eyRnYWxsZXJ5VGFiLnZhbHVlfVxuICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6c2V0LXRhYlwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkdhbGxlcnkgdGFic1wiXG4gICAgICAgIC8+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjaGVja2JveFwiLFxuICAgIHRpdGxlOiBcIkNoZWNrYm94XCIsXG4gICAgY29tcG9uZW50OiBcIkNoZWNrYm94XCIsXG4gICAgc3VtbWFyeTogXCJOYXRpdmUgY2hlY2tib3ggaW4gYSBsYWJlbC4gQSBwbGFpbiBib29sZWFuIGlzIGNvbnRyb2xsZWQ7IGEgU2lnbmFsIGJpbmRzIGl0c2VsZi5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidW5jaGVja2VkXCI+XG4gICAgICAgICAgPENoZWNrYm94IGxhYmVsPVwiVW5jaGVja2VkXCIgY2hlY2tlZD17ZmFsc2V9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY2hlY2tlZFwiPlxuICAgICAgICAgIDxDaGVja2JveCBsYWJlbD1cIkNoZWNrZWRcIiBjaGVja2VkPXt0cnVlfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPENoZWNrYm94IGxhYmVsPVwiRGlzYWJsZWRcIiBjaGVja2VkPXt0cnVlfSBkaXNhYmxlZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNoZWNrZWQ9e3NpZ25hbH0g4oCUIGNsaWNrIHRvIHRvZ2dsZVwiPlxuICAgICAgICAgIDxDaGVja2JveCBsYWJlbD1cIkJvdW5kIHRvIGEgc2lnbmFsXCIgY2hlY2tlZD17JGdhbGxlcnlDaGVja2VkfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInRvZ2dsZVwiLFxuICAgIHRpdGxlOiBcIlRvZ2dsZVwiLFxuICAgIGNvbXBvbmVudDogXCJUb2dnbGVcIixcbiAgICBzdW1tYXJ5OiBcIlN3aXRjaC1yb2xlIGNoZWNrYm94LiBQYXNzaXZlIOKAlCB0aGUgY2FsbGVyIGRyaXZlcyB0aGUgY2hlY2tlZCBzdGF0ZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwib2ZmXCI+XG4gICAgICAgICAgPFRvZ2dsZSBsYWJlbD1cIk9mZlwiIGNoZWNrZWQ9e2ZhbHNlfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm9uXCI+XG4gICAgICAgICAgPFRvZ2dsZSBsYWJlbD1cIk9uXCIgY2hlY2tlZD17dHJ1ZX0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZFwiPlxuICAgICAgICAgIDxUb2dnbGUgbGFiZWw9XCJEaXNhYmxlZFwiIGNoZWNrZWQ9e3RydWV9IGRpc2FibGVkIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidGV4dC1pbnB1dFwiLFxuICAgIHRpdGxlOiBcIlRleHRJbnB1dFwiLFxuICAgIGNvbXBvbmVudDogXCJUZXh0SW5wdXRcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJTaWduYWwtZnJpZW5kbHkgbmF0aXZlIGlucHV0LiBBIHBsYWluIHN0cmluZyBpcyB1bmNvbnRyb2xsZWQ7IGEgU2lnbmFsIGlzIGNvbnRyb2xsZWQuIFwiICtcbiAgICAgIFwiaW5wdXRUeXBlIHBpY2tzIHRoZSBuYXRpdmUga2V5Ym9hcmQgYW5kIHZhbGlkYXRpb247IGVycm9yIHJlbmRlcnMgYSBsaW5rZWQgbWVzc2FnZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSd2YXJpYW50PVwic2luZ2xlXCIgd2l0aCBwbGFjZWhvbGRlcic+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1zaW5nbGVcIiBwbGFjZWhvbGRlcj1cIlR5cGUgaGVyZeKAplwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSd2YXJpYW50PVwibXVsdGlcIic+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1tdWx0aVwiIHZhcmlhbnQ9XCJtdWx0aVwiIHJvd3M9ezN9IHBsYWNlaG9sZGVyPVwiTXVsdGlwbGUgbGluZXPigKZcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0naW5wdXRUeXBlPVwiZW1haWxcIic+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1lbWFpbFwiIGlucHV0VHlwZT1cImVtYWlsXCIgcGxhY2Vob2xkZXI9XCJhZGFAZXhhbXBsZS5jb21cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0naW5wdXRUeXBlPVwibnVtYmVyXCIgd2l0aCBtaW4vbWF4L3N0ZXAnPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tbnVtYmVyXCIgaW5wdXRUeXBlPVwibnVtYmVyXCIgbWluPXswfSBtYXg9ezEwfSBzdGVwPXsxfSB2YWx1ZT1cIjVcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImVycm9yIOKAlCBsaW5rZWQgbWVzc2FnZSwgbWFya3MgaW52YWxpZFwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tZXJyb3JcIiB2YWx1ZT1cIm5vdC1hbi1lbWFpbFwiIGVycm9yPVwiRW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLlwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaW52YWxpZFwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8taW52YWxpZFwiIHZhbHVlPVwibm90LWFuLWVtYWlsXCIgaW52YWxpZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1kaXNhYmxlZFwiIHZhbHVlPVwiRGlzYWJsZWRcIiBkaXNhYmxlZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInJlYWRPbmx5XCI+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1yZWFkb25seVwiIHZhbHVlPVwiUmVhZCBvbmx5XCIgcmVhZE9ubHkgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ2YWx1ZT17c2lnbmFsfSDigJQgY29udHJvbGxlZFwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tY29udHJvbGxlZFwiIHZhbHVlPXskZ2FsbGVyeVRleHR9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwic2VsZWN0XCIsXG4gICAgdGl0bGU6IFwiU2VsZWN0XCIsXG4gICAgY29tcG9uZW50OiBcIlNlbGVjdFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIkRyb3Bkb3duIG9mIG9wdGlvbnMgYm91bmQgdG8gYSBTaWduYWw8U2V0Pi4gU2luZ2xlIHJlcGxhY2VzLCBtdWx0aSB0b2dnbGVzLiBcIiArXG4gICAgICAnY2xlYXJhYmxlIHByZXBlbmRzIGFuIFwiQW55IOKAplwiIHJvdyBzbyBhbiBvcHRpb25hbCBmaWx0ZXIgaGFzIGEgcGF0aCBiYWNrIHRvIHVuc2V0LicsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNpbmdsZS1zZWxlY3RcIj5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIlBpY2sgb25lXCJcbiAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJjb21ldFwiLCBsYWJlbDogXCJDb21ldFwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibmVidWxhXCIsIGxhYmVsOiBcIk5lYnVsYVwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwicXVhc2FyXCIsIGxhYmVsOiBcIlF1YXNhclwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9eyRnYWxsZXJ5U2VsZWN0U2luZ2xlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY2xlYXJhYmxlIOKAlCBzaW5nbGUtc2VsZWN0IHdpdGggYW4g4oCcQW55IOKApuKAnSByb3dcIj5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIkZpbHRlciBieVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFueSBvYmplY3RcIlxuICAgICAgICAgICAgY2xlYXJhYmxlXG4gICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwiY29tZXRcIiwgbGFiZWw6IFwiQ29tZXRcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm5lYnVsYVwiLCBsYWJlbDogXCJOZWJ1bGFcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcInF1YXNhclwiLCBsYWJlbDogXCJRdWFzYXJcIiB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIHNlbGVjdGVkPXskZ2FsbGVyeVNlbGVjdENsZWFyYWJsZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm11bHRpU2VsZWN0XCI+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgbGFiZWw9XCJQaWNrIHNldmVyYWxcIlxuICAgICAgICAgICAgbXVsdGlTZWxlY3RcbiAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJjb21ldFwiLCBsYWJlbDogXCJDb21ldFwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibmVidWxhXCIsIGxhYmVsOiBcIk5lYnVsYVwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwicXVhc2FyXCIsIGxhYmVsOiBcIlF1YXNhclwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9eyRnYWxsZXJ5U2VsZWN0TXVsdGl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJsb25nIGxhYmVsIOKAlCB0cnVuY2F0ZXMsIGNhcmV0IHN0YXlzIG9uIHRoZSByb3cgKHBvbGx5IzE4MClcIj5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBpZD1cImdhbGxlcnktc2VsZWN0LWxvbmdcIlxuICAgICAgICAgICAgbGFiZWw9XCJMb25nIGxhYmVsXCJcbiAgICAgICAgICAgIG9wdGlvbnM9e0xPTkdfU0VMRUNUX09QVElPTlN9XG4gICAgICAgICAgICBzZWxlY3RlZD17JGdhbGxlcnlTZWxlY3RMb25nfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiZmlsZS1pbnB1dFwiLFxuICAgIHRpdGxlOiBcIkZpbGVJbnB1dFwiLFxuICAgIGNvbXBvbmVudDogXCJGaWxlSW5wdXRcIixcbiAgICBzdW1tYXJ5OiBcIlN0eWxlZCB3cmFwcGVyIG92ZXIgYSBuYXRpdmUgZmlsZSBwaWNrZXIuIEhhbmRzIHRoZSBjaG9zZW4gRmlsZUxpc3QgdG8gb25GaWxlcy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwib25GaWxlcyDigJQgcGljayBhIGZpbGVcIj5cbiAgICAgICAgICA8RmlsZUlucHV0XG4gICAgICAgICAgICBsYWJlbD1cIkNob29zZSBmaWxlXCJcbiAgICAgICAgICAgIG9uRmlsZXM9eyhmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAkZ2FsbGVyeUZpbGVOYW1lLnZhbHVlID0gZmlsZXNbMF0/Lm5hbWUgPz8gXCLigJRcIjtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJhY2NlcHQgKyBtdWx0aXBsZVwiPlxuICAgICAgICAgIDxGaWxlSW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiQ2hvb3NlIGltYWdlc1wiXG4gICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICBvbkZpbGVzPXsoZmlsZXMpID0+IHtcbiAgICAgICAgICAgICAgJGdhbGxlcnlGaWxlTmFtZS52YWx1ZSA9IGZpbGVzWzBdPy5uYW1lID8/IFwi4oCUXCI7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICA8RmlsZUlucHV0XG4gICAgICAgICAgICBsYWJlbD1cIkRpc2FibGVkXCJcbiAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICBvbkZpbGVzPXsoKSA9PiB7XG4gICAgICAgICAgICAgIC8qIGRpc2FibGVkIOKAlCBuZXZlciBpbnZva2VkICovXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibGFzdCBwaWNrZWQgZmlsZVwiIHdpZGU+XG4gICAgICAgICAgPFRleHQgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICBMYXN0IHBpY2tlZDogPENvZGU+eyRnYWxsZXJ5RmlsZU5hbWUudmFsdWV9PC9Db2RlPlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJkcm9wZG93blwiLFxuICAgIHRpdGxlOiBcIkRyb3Bkb3duXCIsXG4gICAgY29tcG9uZW50OiBcIkRyb3Bkb3duXCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiTG93LWxldmVsIHRyaWdnZXIgKyBwb3BvdmVyIHBsdW1iaW5nLiBUaGUgcHJpbWl0aXZlIGl0c2VsZiBoYXMgbm8gY2hyb21lIOKAlCBcIiArXG4gICAgICBcImNvbnN1bWVycyAoU2VsZWN0LCBBY3Rpb25TZWxlY3QpIHdyYXAgaXQgd2l0aCB0aGUgc3R5bGVkIHRyaWdnZXIgYW5kIGNhcmV0LlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ0cmlnZ2VyIGRyZXNzZWQgdmlhIHRyaWdnZXJDbGFzc05hbWUgKyBkYXRhLW9wZW5cIj5cbiAgICAgICAgPERyb3Bkb3duXG4gICAgICAgICAgaXNPcGVuPXskZ2FsbGVyeURyb3Bkb3duT3Blbn1cbiAgICAgICAgICB0cmlnZ2VyQ2xhc3NOYW1lPVwiZ2FsbGVyeS1kcm9wZG93bi10cmlnZ2VyXCJcbiAgICAgICAgICB0cmlnZ2VyPXtcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxzcGFuPk9wZW4gbWVudTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJnYWxsZXJ5LWRyb3Bkb3duLWNhcmV0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgIH1cbiAgICAgICAgPlxuICAgICAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiPlxuICAgICAgICAgICAgPFRleHQ+Rmlyc3QgaXRlbTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0PlNlY29uZCBpdGVtPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQ+VGhpcmQgaXRlbTwvVGV4dD5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9Ecm9wZG93bj5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImFjdGlvbi1pbnB1dFwiLFxuICAgIHRpdGxlOiBcIkFjdGlvbklucHV0XCIsXG4gICAgY29tcG9uZW50OiBcIkFjdGlvbklucHV0XCIsXG4gICAgc3VtbWFyeTogXCJEdWFsLW1vZGUgdmlldy9lZGl0IGZpZWxkLiBDbGljayB0byBlZGl0OyBjb21taXQgZGlzcGF0Y2hlcyBhbiBhY3Rpb24uXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0nc2F2ZU9uPVwiYmx1clwiJz5cbiAgICAgICAgICA8QWN0aW9uSW5wdXRcbiAgICAgICAgICAgIHZhbHVlPVwiQ2xpY2sgdG8gZWRpdCwgY29tbWl0cyBvbiBibHVyXCJcbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIHNhdmVPbj1cImJsdXJcIlxuICAgICAgICAgICAgYXJpYUxhYmVsPVwiQmx1ci1jb21taXQgZGVtb1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3NhdmVPbj1cImVudGVyXCInPlxuICAgICAgICAgIDxBY3Rpb25JbnB1dFxuICAgICAgICAgICAgdmFsdWU9XCJFZGl0IGFuZCBwcmVzcyBFbnRlclwiXG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICBzYXZlT249XCJlbnRlclwiXG4gICAgICAgICAgICBhcmlhTGFiZWw9XCJFbnRlci1jb21taXQgZGVtb1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2lucHV0VHlwZT1cImRhdGVcIic+XG4gICAgICAgICAgPEFjdGlvbklucHV0XG4gICAgICAgICAgICB2YWx1ZT1cIjIwMjYtMDUtMjJcIlxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgaW5wdXRUeXBlPVwiZGF0ZVwiXG4gICAgICAgICAgICBzYXZlT249XCJibHVyXCJcbiAgICAgICAgICAgIGFyaWFMYWJlbD1cIkRhdGUgZGVtb1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3ZhcmlhbnQ9XCJtdWx0aVwiJz5cbiAgICAgICAgICA8QWN0aW9uSW5wdXRcbiAgICAgICAgICAgIHZhbHVlPVwiQSBsb25nZXIsIG11bHRpLWxpbmUgdmFsdWVcIlxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgdmFyaWFudD1cIm11bHRpXCJcbiAgICAgICAgICAgIHNhdmVPbj1cImJsdXJcIlxuICAgICAgICAgICAgYXJpYUxhYmVsPVwiTXVsdGktbGluZSBkZW1vXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImxhc3QgY29tbWl0dGVkIHZhbHVlXCIgd2lkZT5cbiAgICAgICAgICA8VGV4dCB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICAgIExhc3QgY29tbWl0dGVkOiA8Q29kZT57JGdhbGxlcnlDb21taXR0ZWQudmFsdWV9PC9Db2RlPlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJhY3Rpb24tc2VsZWN0XCIsXG4gICAgdGl0bGU6IFwiQWN0aW9uU2VsZWN0XCIsXG4gICAgY29tcG9uZW50OiBcIkFjdGlvblNlbGVjdFwiLFxuICAgIHN1bW1hcnk6IFwiU2luZ2xlLXNlbGVjdCB0aGF0IGNvbW1pdHMgYSBwbGFpbiBzdHJpbmcgdmFsdWUgdGhyb3VnaCB0aGUgYWN0aW9uIHN5c3RlbS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY29tbWl0cyB2aWEgYWN0aW9uXCI+XG4gICAgICAgICAgPEFjdGlvblNlbGVjdFxuICAgICAgICAgICAgbGFiZWw9XCJQcmlvcml0eVwiXG4gICAgICAgICAgICB2YWx1ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibG93XCIsIGxhYmVsOiBcIkxvd1wiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibWVkaXVtXCIsIGxhYmVsOiBcIk1lZGl1bVwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwiaGlnaFwiLCBsYWJlbDogXCJIaWdoXCIgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZCDigJQgcmVuZGVycyBhcyBzdGF0aWMgdGV4dFwiPlxuICAgICAgICAgIDxBY3Rpb25TZWxlY3RcbiAgICAgICAgICAgIGxhYmVsPVwiUHJpb3JpdHlcIlxuICAgICAgICAgICAgdmFsdWU9XCJoaWdoXCJcbiAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJsb3dcIiwgbGFiZWw6IFwiTG93XCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJtZWRpdW1cIiwgbGFiZWw6IFwiTWVkaXVtXCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJoaWdoXCIsIGxhYmVsOiBcIkhpZ2hcIiB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJsb25nIGxhYmVsIOKAlCB0cnVuY2F0ZXMsIGNhcmV0IHN0YXlzIG9uIHRoZSByb3cgKHBvbGx5IzE4MClcIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBpZD1cImdhbGxlcnktYWN0aW9uLXNlbGVjdC1sb25nXCJcbiAgICAgICAgICAgIGxhYmVsPVwiTG9uZyBsYWJlbFwiXG4gICAgICAgICAgICB2YWx1ZT1cImxvbmdcIlxuICAgICAgICAgICAgb3B0aW9ucz17TE9OR19TRUxFQ1RfT1BUSU9OU31cbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImxvbmcgbGFiZWwsIGRpc2FibGVkIOKAlCBvbmUgcm93IGF0IHRoZSBjb250cm9sIGhlaWdodFwiPlxuICAgICAgICAgIDxBY3Rpb25TZWxlY3RcbiAgICAgICAgICAgIGlkPVwiZ2FsbGVyeS1hY3Rpb24tc2VsZWN0LWxvbmctZGlzYWJsZWRcIlxuICAgICAgICAgICAgbGFiZWw9XCJMb25nIGxhYmVsXCJcbiAgICAgICAgICAgIHZhbHVlPVwibG9uZ1wiXG4gICAgICAgICAgICBvcHRpb25zPXtMT05HX1NFTEVDVF9PUFRJT05TfVxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImVtcHR5IOKAlCB0aGUgcGxhY2Vob2xkZXIgaXMgdGhlIHNhbWUgYm94IGFzIGEgdmFsdWVcIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBpZD1cImdhbGxlcnktYWN0aW9uLXNlbGVjdC1sb25nLWVtcHR5XCJcbiAgICAgICAgICAgIGxhYmVsPVwiTG9uZyBwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICB2YWx1ZT1cIlwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17TE9OR19TRUxFQ1RfTEFCRUx9XG4gICAgICAgICAgICBvcHRpb25zPXtMT05HX1NFTEVDVF9PUFRJT05TfVxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwid2lkZSDigJQgc2hvcnQgbGFiZWwsIHN0aWxsIG9uZSBjZW50cmVkIHJvd1wiPlxuICAgICAgICAgIDxBY3Rpb25TZWxlY3RcbiAgICAgICAgICAgIGlkPVwiZ2FsbGVyeS1hY3Rpb24tc2VsZWN0LXdpZGVcIlxuICAgICAgICAgICAgbGFiZWw9XCJXaWRlXCJcbiAgICAgICAgICAgIHZhbHVlPVwic2hvcnRcIlxuICAgICAgICAgICAgb3B0aW9ucz17TE9OR19TRUxFQ1RfT1BUSU9OU31cbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIHdpZGVcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImFjdGlvbi1mb3JtXCIsXG4gICAgdGl0bGU6IFwiQWN0aW9uRm9ybVwiLFxuICAgIGNvbXBvbmVudDogXCJBY3Rpb25Gb3JtXCIsXG4gICAgc3VtbWFyeTogXCJXcmFwcyBhIG5hdGl2ZSBmb3JtIHdpdGggdGhlIGFjdGlvbiBwYXR0ZXJuIOKAlCBzdWJtaXQgZGlzcGF0Y2hlcyB0aGUgZm9ybSBoYW5kbGVyLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJmb3JtIHdpdGggVGV4dElucHV0IGZpZWxkcyArIGEgc3VibWl0IEJ1dHRvblwiIHdpZGU+XG4gICAgICAgIDxBY3Rpb25Gb3JtIGZvcm09e2dhbGxlcnlGb3JtfSBhcmlhLWxhYmVsPVwiR2FsbGVyeSBkZW1vIGZvcm1cIj5cbiAgICAgICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICAgICAgPFRleHQgYXM9XCJsYWJlbFwiIHNpemU9XCJzbVwiIHRvbmU9XCJtdXRlZFwiIGh0bWxGb3I9XCJnYWxsZXJ5LWZvcm0tbmFtZVwiPlxuICAgICAgICAgICAgICBGdWxsIG5hbWVcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgaWQ9XCJnYWxsZXJ5LWZvcm0tbmFtZVwiIG5hbWU9XCJmdWxsTmFtZVwiIHBsYWNlaG9sZGVyPVwiQWRhIExvdmVsYWNlXCIgLz5cbiAgICAgICAgICAgIDxUZXh0IGFzPVwibGFiZWxcIiBzaXplPVwic21cIiB0b25lPVwibXV0ZWRcIiBodG1sRm9yPVwiZ2FsbGVyeS1mb3JtLWVtYWlsXCI+XG4gICAgICAgICAgICAgIEVtYWlsXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dElucHV0IGlkPVwiZ2FsbGVyeS1mb3JtLWVtYWlsXCIgbmFtZT1cImVtYWlsXCIgcGxhY2Vob2xkZXI9XCJhZGFAZXhhbXBsZS5jb21cIiAvPlxuICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwic3VibWl0XCIgdGllcj1cInByaW1hcnlcIiBjb2xvcj1cImluZm9cIiBsYWJlbD1cIlN1Ym1pdFwiIC8+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvQWN0aW9uRm9ybT5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcIm1vZGFsXCIsXG4gICAgdGl0bGU6IFwiTW9kYWxcIixcbiAgICBjb21wb25lbnQ6IFwiTW9kYWxcIixcbiAgICBzdW1tYXJ5OiBcIkNvbXBvdW5kIGRpYWxvZyDigJQgZm9jdXMgdHJhcCwgRXNjYXBlIGhhbmRsaW5nLCBwb3J0YWwsIHNjcm9sbCBsb2NrLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJvcGVucyBhIHBvcnRhbGxlZCBkaWFsb2dcIj5cbiAgICAgICAgPEJ1dHRvbiB0aWVyPVwicHJpbWFyeVwiIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTptb2RhbC1vcGVuXCIgbGFiZWw9XCJPcGVuIG1vZGFsXCIgLz5cbiAgICAgICAgPE1vZGFsLlJvb3RcbiAgICAgICAgICB3aGVuPXskZ2FsbGVyeU1vZGFsT3Blbn1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICAkZ2FsbGVyeU1vZGFsT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIH19XG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkRlbW8gbW9kYWxcIlxuICAgICAgICA+XG4gICAgICAgICAgPE1vZGFsLkJhY2tkcm9wIC8+XG4gICAgICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgICA8TW9kYWwuSGVhZGVyPlxuICAgICAgICAgICAgICA8TW9kYWwuVGl0bGU+TW9kYWwgdGl0bGU8L01vZGFsLlRpdGxlPlxuICAgICAgICAgICAgPC9Nb2RhbC5IZWFkZXI+XG4gICAgICAgICAgICA8TW9kYWwuQm9keT5cbiAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgRm9jdXMgaXMgdHJhcHBlZCBpbnNpZGUgdGhlIGRpYWxvZywgRXNjYXBlIGNsb3NlcyBpdCwgdGhlIGJhY2tkcm9wIGNsaWNrIGNsb3NlcyBpdCxcbiAgICAgICAgICAgICAgICBhbmQgdGhlIGJvZHkgc2Nyb2xsIGlzIGxvY2tlZCB3aGlsZSBpdCBpcyBvcGVuLlxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L01vZGFsLkJvZHk+XG4gICAgICAgICAgICA8TW9kYWwuRm9vdGVyPlxuICAgICAgICAgICAgICA8TW9kYWwuQ2xvc2U+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiB0aWVyPVwicHJpbWFyeVwiIGxhYmVsPVwiRG9uZVwiIC8+XG4gICAgICAgICAgICAgIDwvTW9kYWwuQ2xvc2U+XG4gICAgICAgICAgICA8L01vZGFsLkZvb3Rlcj5cbiAgICAgICAgICA8L01vZGFsLkNvbnRlbnQ+XG4gICAgICAgIDwvTW9kYWwuUm9vdD5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNvbmZpcm0tZGlhbG9nXCIsXG4gICAgdGl0bGU6IFwiQ29uZmlybURpYWxvZ1wiLFxuICAgIGNvbXBvbmVudDogXCJDb25maXJtRGlhbG9nXCIsXG4gICAgc3VtbWFyeTogXCJQcm9taXNlLXJldHVybmluZyBjb25maXJtYXRpb24uIGNvbmZpcm0oKSByZXNvbHZlcyB0cnVlIG9yIGZhbHNlLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjb25maXJtKCkg4oCUIHN0YW5kYXJkXCI+XG4gICAgICAgICAgPEJ1dHRvbiB0aWVyPVwic2Vjb25kYXJ5XCIgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OmNvbmZpcm1cIiBsYWJlbD1cIkNvbmZpcm0gYW4gYWN0aW9uXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjb25maXJtKHsgZGFuZ2VyOiB0cnVlIH0pXCI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGllcj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbj1cImdhbGxlcnk6Y29uZmlybVwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbi1kYW5nZXI9XCJ0cnVlXCJcbiAgICAgICAgICAgIGxhYmVsPVwiQ29uZmlybSBhIGRlbGV0aW9uXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInRvYXN0XCIsXG4gICAgdGl0bGU6IFwiVG9hc3RcIixcbiAgICBjb21wb25lbnQ6IFwiVG9hc3RcIixcbiAgICBzdW1tYXJ5OiBcIlJlbmRlcnMgdGhlIGdsb2JhbCBlcnJvclN0YXRlIHNpZ25hbC4gU2V2ZXJpdHkgc2V0cyB0aGUgYXJpYS1saXZlIHBvbGl0ZW5lc3MuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInB1c2ggYSB0b2FzdCBhdCBlYWNoIHNldmVyaXR5XCIgd2lkZT5cbiAgICAgICAgPENsdXN0ZXIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGllcj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjb2xvcj1cImluZm9cIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OnRvYXN0XCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uLXNldmVyaXR5PVwiaW5mb1wiXG4gICAgICAgICAgICBsYWJlbD1cIkluZm8gdG9hc3RcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGllcj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjb2xvcj1cIndhcm5pbmdcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OnRvYXN0XCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uLXNldmVyaXR5PVwid2FybmluZ1wiXG4gICAgICAgICAgICBsYWJlbD1cIldhcm5pbmcgdG9hc3RcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGllcj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbj1cImdhbGxlcnk6dG9hc3RcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb24tc2V2ZXJpdHk9XCJlcnJvclwiXG4gICAgICAgICAgICBsYWJlbD1cIkVycm9yIHRvYXN0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJvdmVybGF5LXJvb3RcIixcbiAgICB0aXRsZTogXCJPdmVybGF5Um9vdFwiLFxuICAgIGNvbXBvbmVudDogXCJPdmVybGF5Um9vdFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIkluZnJhc3RydWN0dXJlLCBub3QgYSB2aXN1YWwgY29udHJvbC4gTW91bnQgaXQgb25jZSBuZWFyIHRoZSBhcHAgcm9vdDsgTW9kYWwsIFRvYXN0LCBhbmQgXCIgK1xuICAgICAgXCJDb25maXJtRGlhbG9nIHBvcnRhbCBpbnRvIGl0LiBUaGUgZ2FsbGVyeSBzaGVsbCBhbHJlYWR5IG1vdW50cyBvbmUg4oCUIHRoaXMgc2VjdGlvbiBkb2N1bWVudHMgaXQuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm1vdW50ZWQgb25jZSBhdCB0aGUgYXBwIHJvb3RcIiB3aWRlPlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICA8Q29kZT57XCI8T3ZlcmxheVJvb3QgLz5cIn08L0NvZGU+IHJlbmRlcnMgdGhlIHBvcnRhbCB0YXJnZXQgdGhlIG92ZXJsYXkgcHJpbWl0aXZlcyBuZWVkLlxuICAgICAgICAgIFdpdGhvdXQgaXQsIHRoZSBNb2RhbCAvIFRvYXN0IC8gQ29uZmlybURpYWxvZyBzcGVjaW1lbnMgYWJvdmUgd291bGQgaGF2ZSBub3doZXJlIHRvXG4gICAgICAgICAgcmVuZGVyLiBJdCBkcmF3cyBub3RoaW5nIGl0c2VsZjsgdGhlIGdhbGxlcnkgc2hlbGwgbW91bnRzIHRoZSBzaW5nbGUgbGl2ZSBpbnN0YW5jZS5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuXTtcbiIsCiAgICAiLyoqXG4gKiBUaGUgZ2FsbGVyeSBhcHAgcm9vdCDigJQgYSBzaW5nbGUgc2Nyb2xsYWJsZSBwYWdlIGNhdGFsb2d1aW5nIGV2ZXJ5IHBvbGx5LXVpXG4gKiBwcmltaXRpdmUgaW4gaXRzIGNvbmZpZ3VyYXRpb25zLiBBbiBpbi1wYWdlIG5hdiBqdW1wcyBiZXR3ZWVuIHNlY3Rpb25zOyBhXG4gKiB0aGVtZSB0b2dnbGUgZm9yY2VzIGxpZ2h0L2Rhcmsgb24gdGhlIHBhbmVsIHN1YnRyZWUgdmlhIGBkYXRhLXBvbGx5LXRoZW1lYFxuICogc28gYm90aCBwYWxldHRlcyBjYW4gYmUgaW5zcGVjdGVkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIE9TIHNldHRpbmcuXG4gKlxuICogVGhlIG92ZXJsYXkgaG9zdHMgKE92ZXJsYXlSb290IC8gVG9hc3QuVmlld3BvcnQgLyBDb25maXJtRGlhbG9nLkhvc3QpIGFyZVxuICogbW91bnRlZCBoZXJlIG9uY2UsIHNvIHRoZSBNb2RhbCwgVG9hc3QsIGFuZCBDb25maXJtRGlhbG9nIHNwZWNpbWVucyBoYXZlIGFcbiAqIHBvcnRhbCB0YXJnZXQg4oCUIHRoZSBzYW1lIHdpcmluZyBhIHJlYWwgY29uc3VtZXIgYXBwIGRvZXMgYXQgaXRzIHJvb3QuXG4gKi9cblxuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBDbHVzdGVyLFxuICBDb25maXJtRGlhbG9nLFxuICBMYXlvdXQsXG4gIE92ZXJsYXlSb290LFxuICBTdXJmYWNlLFxuICBUZXh0LFxuICBUb2FzdCxcbn0gZnJvbSBcIi4uLy4uLy4uL3NyYy9wb2xseS11aVwiO1xuaW1wb3J0IHsgVEhFTUVTIH0gZnJvbSBcIi4vYWN0aW9ucy50c1wiO1xuaW1wb3J0IHsgR0FMTEVSWV9TRUNUSU9OUywgdHlwZSBHYWxsZXJ5U2VjdGlvbiB9IGZyb20gXCIuL3NwZWNpbWVucy50c3hcIjtcbmltcG9ydCB7ICRnYWxsZXJ5VGhlbWUgfSBmcm9tIFwiLi9zdG9yZXMudHNcIjtcblxuLyoqIEEgY2FwaXRhbGlzZWQgbGFiZWwgZm9yIGEgdGhlbWUgb3B0aW9uLiAqL1xuZnVuY3Rpb24gdGhlbWVMYWJlbCh0aGVtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRoZW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhlbWUuc2xpY2UoMSk7XG59XG5cbi8qKiBPbmUgY2F0YWxvZ3VlZCBjb21wb25lbnQ6IGEgbGFiZWxsZWQgbGFuZG1hcmsgd2l0aCBhIGdyaWQgb2Ygc3BlY2ltZW5zLiAqL1xuZnVuY3Rpb24gU2VjdGlvbihwcm9wczogeyBzZWN0aW9uOiBHYWxsZXJ5U2VjdGlvbiB9KSB7XG4gIGNvbnN0IHsgc2VjdGlvbiB9ID0gcHJvcHM7XG4gIGNvbnN0IGhlYWRpbmdJZCA9IGAke3NlY3Rpb24uaWR9LWhlYWRpbmdgO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICBhcz1cInNlY3Rpb25cIlxuICAgICAgaWQ9e3NlY3Rpb24uaWR9XG4gICAgICB2YXJpYW50PVwicGxhaW5cIlxuICAgICAgY2xhc3NOYW1lPVwiZ2FsbGVyeS1zZWN0aW9uXCJcbiAgICAgIGFyaWEtbGFiZWxsZWRieT17aGVhZGluZ0lkfVxuICAgID5cbiAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgIDxoMiBpZD17aGVhZGluZ0lkfSBjbGFzcz1cImdhbGxlcnktc2VjdGlvbi10aXRsZVwiPlxuICAgICAgICAgIHtzZWN0aW9uLnRpdGxlfVxuICAgICAgICA8L2gyPlxuICAgICAgICA8VGV4dCBhcz1cInBcIiB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICB7c2VjdGlvbi5zdW1tYXJ5fVxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxMYXlvdXRcbiAgICAgICAgICBjb2x1bW5zPVwicmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KG1pbigxMDAlLCAxNHJlbSksIDFmcikpXCJcbiAgICAgICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIlxuICAgICAgICA+XG4gICAgICAgICAge3NlY3Rpb24ucmVuZGVyKCl9XG4gICAgICAgIDwvTGF5b3V0PlxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gR2FsbGVyeUFwcCgpIHtcbiAgY29uc3QgdGhlbWUgPSAkZ2FsbGVyeVRoZW1lLnZhbHVlO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICB2YXJpYW50PVwicmFpc2VkXCJcbiAgICAgIHBhZGRpbmc9XCJjbGFtcCh2YXIoLS1wb2xseS1zcGFjZS1zbSksIDN2dywgdmFyKC0tcG9sbHktc3BhY2UteGwpKVwiXG4gICAgICBkYXRhLWdhbGxlcnktcGFuZWw9XCJ0cnVlXCJcbiAgICAgIGRhdGEtcG9sbHktdGhlbWU9e3RoZW1lID09PSBcInN5c3RlbVwiID8gdW5kZWZpbmVkIDogdGhlbWV9XG4gICAgPlxuICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1sZylcIj5cbiAgICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgICA8aDEgY2xhc3M9XCJnYWxsZXJ5LXRpdGxlXCI+UG9sbHkgVUkgZ2FsbGVyeTwvaDE+XG4gICAgICAgICAgPFRleHQgYXM9XCJwXCIgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICBFdmVyeSA8VGV4dCB3ZWlnaHQ9XCJtZWRpdW1cIj5AZmFpcmZveC9wb2xseS91aTwvVGV4dD4gcHJpbWl0aXZlLCBpbiBpdHMgY29uZmlndXJhdGlvbnMg4oCUXG4gICAgICAgICAgICBhIHJlZmVyZW5jZSBmb3IgYnVpbGRpbmcgcG9sbHkgYXBwcywgYW5kIGEgc2luZ2xlIHN1cmZhY2UgZm9yIGFjY2Vzc2liaWxpdHkgYW5kXG4gICAgICAgICAgICB2aXN1YWwtcmVncmVzc2lvbiBjaGVja3MuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0xheW91dD5cblxuICAgICAgICA8U3VyZmFjZSB2YXJpYW50PVwiY2FsbG91dFwiIHJhZGl1cz1cIm1kXCIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgIDxDbHVzdGVyIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiIGFsaWduPVwiY2VudGVyXCI+XG4gICAgICAgICAgICA8VGV4dCBzaXplPVwic21cIiB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICAgICAgVGhlbWVcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIHtUSEVNRVMubWFwKCh0KSA9PiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e3R9XG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICB0aWVyPXt0ID09PSB0aGVtZSA/IFwicHJpbWFyeVwiIDogXCJ0ZXJ0aWFyeVwifVxuICAgICAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTpzZXQtdGhlbWVcIlxuICAgICAgICAgICAgICAgIGRhdGEtYWN0aW9uLXRoZW1lPXt0fVxuICAgICAgICAgICAgICAgIGxhYmVsPXt0aGVtZUxhYmVsKHQpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgICA8L1N1cmZhY2U+XG5cbiAgICAgICAgPG5hdiBhcmlhLWxhYmVsPVwiQ29tcG9uZW50c1wiPlxuICAgICAgICAgIDxDbHVzdGVyIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiPlxuICAgICAgICAgICAge0dBTExFUllfU0VDVElPTlMubWFwKChzZWN0aW9uKSA9PiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e3NlY3Rpb24uaWR9XG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICB0aWVyPVwidGVydGlhcnlcIlxuICAgICAgICAgICAgICAgIGhyZWY9e2AjJHtzZWN0aW9uLmlkfWB9XG4gICAgICAgICAgICAgICAgbGFiZWw9e3NlY3Rpb24udGl0bGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICAgIDwvbmF2PlxuXG4gICAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteGwpXCI+XG4gICAgICAgICAge0dBTExFUllfU0VDVElPTlMubWFwKChzZWN0aW9uKSA9PiAoXG4gICAgICAgICAgICA8U2VjdGlvbiBrZXk9e3NlY3Rpb24uaWR9IHNlY3Rpb249e3NlY3Rpb259IC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvTGF5b3V0PlxuICAgICAgPC9MYXlvdXQ+XG5cbiAgICAgIHsvKiBNb3VudGVkIG9uY2Ugc28gdGhlIG92ZXJsYXkgc3BlY2ltZW5zIGhhdmUgYSBwb3J0YWwgdGFyZ2V0LiAqL31cbiAgICAgIDxPdmVybGF5Um9vdCAvPlxuICAgICAgPFRvYXN0LlZpZXdwb3J0IC8+XG4gICAgICA8Q29uZmlybURpYWxvZy5Ib3N0IC8+XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFRoZSBnYWxsZXJ5J3MgYnJvd3NlciBlbnRyeSBwb2ludC4gQnVuZGxlZCBieSBzZXJ2ZXIudHMgKG9uZSBCdW4uYnVpbGQgcGFzcylcbiAqIOKAlCBpdHMgdHJhbnNpdGl2ZSBgLm1vZHVsZS5jc3NgIGltcG9ydHMgcGx1cyB0aGUgZ2xvYmFsIHN0eWxlc2hlZXRzIGJlbG93IGNvbWVcbiAqIG91dCBhcyBhIHNpbmdsZSBDU1MgYXJ0aWZhY3QgdGhlIHNlcnZlciBzZXJ2ZXMgYWxvbmdzaWRlIHRoaXMgc2NyaXB0LlxuICpcbiAqIEJvb3QgbWlycm9ycyBhIHJlYWwgY29uc3VtZXIgYXBwOiBiaW5kIHRoZSBkZW1vIGZvcm0sIGluc3RhbGwgdGhlIGRvY3VtZW50XG4gKiBldmVudCBkZWxlZ2F0aW9uIHRoYXQgcm91dGVzIGBkYXRhLWFjdGlvbmAgY2xpY2tzL3N1Ym1pdHMgaW50byB0aGUgZ2FsbGVyeSdzXG4gKiBhY3Rpb24gcmVnaXN0cnksIHRoZW4gcmVuZGVyLiBUaGUgb3ZlcmxheSBob3N0cyBsaXZlIGluc2lkZSA8R2FsbGVyeUFwcCAvPi5cbiAqL1xuXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBpbnN0YWxsRXZlbnREZWxlZ2F0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9hY3Rpb25zXCI7XG5pbXBvcnQgeyBHQUxMRVJZX0FDVElPTlMgfSBmcm9tIFwiLi9hY3Rpb25zLnRzXCI7XG5pbXBvcnQgeyBHYWxsZXJ5QXBwIH0gZnJvbSBcIi4vZ2FsbGVyeS1hcHAudHN4XCI7XG5pbXBvcnQgeyB0eXBlIEdhbGxlcnlTdG9yZXMsIGdhbGxlcnlGb3JtIH0gZnJvbSBcIi4vc3RvcmVzLnRzXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi9zcmMvcG9sbHktdWkvdGhlbWUuY3NzXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi9zcmMvcG9sbHktdWkvc3R5bGVzLmNzc1wiO1xuaW1wb3J0IFwiLi9nYWxsZXJ5LmNzc1wiO1xuXG5jb25zdCBzdG9yZXM6IEdhbGxlcnlTdG9yZXMgPSB7fTtcbmdhbGxlcnlGb3JtLmJpbmRTdG9yZXMoKCkgPT4gc3RvcmVzKTtcblxuaW5zdGFsbEV2ZW50RGVsZWdhdGlvbihhc3luYyAoZGlzcGF0Y2gpID0+IHtcbiAgY29uc3QgaGFuZGxlciA9IEdBTExFUllfQUNUSU9OU1tkaXNwYXRjaC5hY3Rpb25dO1xuICBpZiAoaGFuZGxlcikge1xuICAgIGF3YWl0IGhhbmRsZXIoe1xuICAgICAgc3RvcmVzLFxuICAgICAgZXZlbnQ6IGRpc3BhdGNoLmV2ZW50LFxuICAgICAgZWxlbWVudDogZGlzcGF0Y2guZWxlbWVudCxcbiAgICAgIGRhdGE6IGRpc3BhdGNoLmRhdGEsXG4gICAgfSk7XG4gIH1cbn0pO1xuXG5jb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhcHBcIikgPz8gZG9jdW1lbnQuYm9keTtcbnJlbmRlcig8R2FsbGVyeUFwcCAvPiwgcm9vdCk7XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsSUFBSTtBQUFKLElBQU07QUFBTixJQUFRO0FBQVIsSUFBVTtBQUFWLElBQVk7QUFBWixJQUFjO0FBQWQsSUFBZ0I7QUFBaEIsSUFBa0I7QUFBbEIsSUFBb0I7QUFBcEIsSUFBc0I7QUFBdEIsSUFBd0I7QUFBeEIsSUFBMEI7QUFBMUIsSUFBNEI7QUFBNUIsSUFBOEI7QUFBOUIsSUFBZ0M7QUFBaEMsSUFBa0M7QUFBbEMsSUFBb0MsSUFBRSxDQUFDO0FBQXZDLElBQXlDLElBQUUsQ0FBQztBQUE1QyxJQUE4QyxJQUFFO0FBQWhELElBQW9ILElBQUUsTUFBTTtBQUFRLFNBQVMsQ0FBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsU0FBUSxLQUFLO0FBQUEsSUFBRSxFQUFFLEtBQUcsRUFBRTtBQUFBLEVBQUcsT0FBTztBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsS0FBRyxFQUFFLGNBQVksRUFBRSxXQUFXLFlBQVksQ0FBQztBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUksR0FBRSxHQUFFLEdBQUUsSUFBRSxDQUFDO0FBQUEsRUFBRSxLQUFJLEtBQUs7QUFBQSxJQUFTLEtBQVAsUUFBUyxJQUFFLEVBQUUsS0FBVSxLQUFQLFFBQVMsSUFBRSxFQUFFLEtBQUcsRUFBRSxLQUFHLEVBQUU7QUFBQSxFQUFHLElBQUcsVUFBVSxTQUFPLE1BQUksRUFBRSxXQUFTLFVBQVUsU0FBTyxJQUFFLEVBQUUsS0FBSyxXQUFVLENBQUMsSUFBRSxJQUFlLE9BQU8sS0FBbkIsY0FBNEIsRUFBRSxnQkFBUjtBQUFBLElBQXFCLEtBQUksS0FBSyxFQUFFO0FBQUEsTUFBc0IsRUFBRSxPQUFOLGNBQVcsRUFBRSxLQUFHLEVBQUUsYUFBYTtBQUFBLEVBQUksT0FBTyxFQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsSUFBSTtBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBQyxNQUFLLEdBQUUsT0FBTSxHQUFFLEtBQUksR0FBRSxLQUFJLEdBQUUsS0FBSSxNQUFLLElBQUcsTUFBSyxLQUFJLEdBQUUsS0FBSSxNQUFLLEtBQUksTUFBSyxhQUFpQixXQUFFLEtBQVUsS0FBTixPQUFRLEVBQUUsSUFBRSxHQUFFLEtBQUksSUFBRyxLQUFJLEVBQUM7QUFBQSxFQUFFLE9BQWEsS0FBTixRQUFlLEVBQUUsU0FBUixRQUFlLEVBQUUsTUFBTSxDQUFDLEdBQUU7QUFBQTtBQUFvQyxTQUFTLENBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxPQUFPLEVBQUU7QUFBQTtBQUFTLFNBQVMsQ0FBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsS0FBSyxRQUFNLEdBQUUsS0FBSyxVQUFRO0FBQUE7QUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQVMsS0FBTjtBQUFBLElBQVEsT0FBTyxFQUFFLEtBQUcsRUFBRSxFQUFFLElBQUcsRUFBRSxNQUFJLENBQUMsSUFBRTtBQUFBLEVBQUssU0FBUSxFQUFFLElBQUUsRUFBRSxJQUFJLFFBQU87QUFBQSxJQUFJLEtBQVUsSUFBRSxFQUFFLElBQUksT0FBZixRQUEwQixFQUFFLE9BQVI7QUFBQSxNQUFZLE9BQU8sRUFBRTtBQUFBLEVBQUksT0FBa0IsT0FBTyxFQUFFLFFBQXJCLGFBQTBCLEVBQUUsQ0FBQyxJQUFFO0FBQUE7QUFBSyxTQUFTLENBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFHLEVBQUUsT0FBSyxFQUFFLEtBQUk7QUFBQSxJQUFDLElBQUksSUFBRSxFQUFFLEtBQUksSUFBRSxFQUFFLEtBQUksSUFBRSxDQUFDLEdBQUUsSUFBRSxDQUFDLEdBQUUsSUFBRSxFQUFFLENBQUMsR0FBRSxDQUFDO0FBQUEsSUFBRSxFQUFFLE1BQUksRUFBRSxNQUFJLEdBQUUsRUFBRSxTQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUUsRUFBRSxFQUFFLEtBQUksR0FBRSxHQUFFLEVBQUUsS0FBSSxFQUFFLElBQUksY0FBYSxLQUFHLEVBQUUsTUFBSSxDQUFDLENBQUMsSUFBRSxNQUFLLEdBQVEsS0FBTixPQUFRLEVBQUUsQ0FBQyxJQUFFLEdBQUUsQ0FBQyxFQUFFLEtBQUcsRUFBRSxNQUFLLENBQUMsR0FBRSxFQUFFLE1BQUksRUFBRSxLQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsT0FBSyxHQUFFLEVBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxFQUFFLE1BQUksRUFBRSxLQUFHLE1BQUssRUFBRSxPQUFLLEtBQUcsRUFBRSxDQUFDO0FBQUEsRUFBQztBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsS0FBVSxJQUFFLEVBQUUsT0FBWCxRQUFzQixFQUFFLE9BQVI7QUFBQSxJQUFZLE9BQU8sRUFBRSxNQUFJLEVBQUUsSUFBSSxPQUFLLE1BQUssRUFBRSxJQUFJLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxNQUFDLElBQVMsS0FBTixRQUFlLEVBQUUsT0FBUjtBQUFBLFFBQVksT0FBTyxFQUFFLE1BQUksRUFBRSxJQUFJLE9BQUssRUFBRTtBQUFBLEtBQUksR0FBRSxFQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUU7QUFBQSxHQUFFLENBQUMsRUFBRSxRQUFNLEVBQUUsTUFBSSxTQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUcsQ0FBQyxFQUFFLFNBQU8sS0FBRyxFQUFFLHdCQUFzQixJQUFFLEVBQUUsc0JBQW9CLEdBQUcsQ0FBQztBQUFBO0FBQUUsU0FBUyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUc7QUFBQSxJQUFDLFNBQVEsR0FBRSxJQUFFLEVBQUUsRUFBRTtBQUFBLE1BQVEsRUFBRSxTQUFPLEtBQUcsRUFBRSxLQUFLLENBQUMsR0FBRSxJQUFFLEVBQUUsTUFBTSxHQUFFLElBQUUsRUFBRSxRQUFPLEVBQUUsQ0FBQztBQUFBLFlBQUU7QUFBQSxJQUFRLEVBQUUsU0FBTyxFQUFFLE1BQUk7QUFBQTtBQUFBO0FBQUcsU0FBUyxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsSUFBRSxLQUFHLEVBQUUsT0FBSyxHQUFFLElBQUUsRUFBRTtBQUFBLEVBQU8sS0FBSSxJQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsSUFBRSxFQUFFLElBQUUsR0FBRTtB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S0FBUyxLQUFOO0FBQUEsVUFBUSxJQUFHLEVBQUUsTUFBSztBQUFBLFlBQUMsS0FBSSxFQUFFLE9BQUssSUFBRSxNQUFJLElBQUksS0FBTSxFQUFFLFlBQUwsS0FBZSxFQUFFO0FBQUEsY0FBYSxJQUFFLEVBQUU7QUFBQSxZQUFZLEVBQUUsRUFBRSxRQUFRLENBQUMsS0FBRyxNQUFLLEVBQUUsTUFBSTtBQUFBLFVBQUMsRUFBSztBQUFBLFlBQUMsS0FBSSxJQUFFLEVBQUUsT0FBTztBQUFBLGNBQUssRUFBRSxFQUFFLEVBQUU7QUFBQSxZQUFFLEVBQUUsQ0FBQztBQUFBO0FBQUEsUUFBTztBQUFBLFlBQUUsTUFBSSxFQUFFLEtBQUksRUFBRSxNQUFJLEVBQUUsS0FBSSxFQUFFLFFBQU0sRUFBRSxDQUFDO0FBQUEsUUFBRSxFQUFFLElBQUksR0FBRSxHQUFFLENBQUM7QUFBQTtBQUFBLElBQU87QUFBQSxNQUFNLEtBQU4sUUFBUyxFQUFFLE9BQUssRUFBRSxPQUFLLEVBQUUsTUFBSSxFQUFFLEtBQUksRUFBRSxNQUFJLEVBQUUsT0FBSyxJQUFFLEVBQUUsTUFBSSxFQUFFLEVBQUUsS0FBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxFQUFFLFFBQU8sSUFBRSxFQUFFLFdBQVMsRUFBRSxDQUFDLEdBQUUsTUFBSSxFQUFFLE1BQVMsWUFBRTtBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsTUFBSSxFQUFFLFFBQU0sRUFBRSxJQUFJLE1BQUksT0FBSSxFQUFFLE9BQUssRUFBRSxJQUFJLEtBQUssQ0FBQztBQUFBO0FBQUcsU0FBUyxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLFNBQVEsSUFBRSxFQUFFLElBQUUsRUFBRSxRQUFPO0FBQUEsSUFBSSxFQUFFLEVBQUUsSUFBRyxFQUFFLEVBQUUsSUFBRyxFQUFFLEVBQUUsRUFBRTtBQUFBLEVBQUUsRUFBRSxPQUFLLEVBQUUsSUFBSSxHQUFFLENBQUMsR0FBRSxFQUFFLEtBQUss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SUFBRSxFQUFFLENBQUMsSUFBRSxHQUFPLFdBQUUsQ0FBQyxHQUFFLFFBQVEsQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRSxNQUFJLEVBQUUsSUFBSSxLQUFHLEVBQUUsR0FBRyxJQUFHLElBQUUsRUFBRSxFQUFFLEdBQUUsQ0FBQztBQUFBLElBQUUsTUFBSSxNQUFJLEVBQUUsTUFBSSxDQUFDLEdBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRSxFQUFFLElBQUksU0FBUyxDQUFDLENBQUM7QUFBQSxHQUFHLEdBQUUsRUFBRSxNQUFJLElBQUUsQ0FBQyxHQUFFLE1BQUs7QUFBQSxJQUFDLElBQUksSUFBRSxRQUFRLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxNQUFDLElBQUcsQ0FBQyxFQUFFLElBQUk7QUFBQSxRQUFJLE9BQU07QUFBQSxNQUFHLElBQUksSUFBRSxFQUFFLElBQUksSUFBSSxHQUFHLE9BQU8sUUFBUSxDQUFDLEdBQUU7QUFBQSxRQUFDLE9BQU8sRUFBRTtBQUFBLE9BQUk7QUFBQSxNQUFFLElBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQyxHQUFFO0FBQUEsUUFBQyxPQUFNLENBQUMsRUFBRTtBQUFBLE9BQUk7QUFBQSxRQUFFLE9BQU0sQ0FBQyxLQUFHLEVBQUUsS0FBSyxNQUFLLEdBQUUsR0FBRSxDQUFDO0FBQUEsTUFBRSxJQUFJLElBQUUsRUFBRSxJQUFJLFVBQVE7QUFBQSxNQUFFLE9BQU8sRUFBRSxLQUFLLFFBQVEsQ0FBQyxHQUFFO0FBQUEsUUFBQyxJQUFHLEVBQUUsS0FBSTtBQUFBLFVBQUMsSUFBSSxJQUFFLEVBQUUsR0FBRztBQUFBLFVBQUcsRUFBRSxLQUFHLEVBQUUsS0FBSSxFQUFFLE1BQVMsV0FBRSxNQUFJLEVBQUUsR0FBRyxPQUFLLElBQUU7QUFBQSxRQUFHO0FBQUEsT0FBRSxHQUFFLEtBQUcsRUFBRSxLQUFLLE1BQUssR0FBRSxHQUFFLENBQUMsS0FBRztBQUFBO0FBQUEsSUFBRyxHQUFFLE1BQUk7QUFBQSxJQUFHLElBQUksSUFBRSxHQUFFLHVCQUFzQixJQUFFLEdBQUU7QUFBQSxJQUFvQixHQUFFLHNCQUFvQixRQUFRLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxNQUFDLElBQUcsS0FBSyxLQUFJO0FBQUEsUUFBQyxJQUFJLElBQUU7QUFBQSxRQUFFLElBQU8sV0FBRSxFQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsSUFBRTtBQUFBLE1BQUM7QUFBQSxNQUFDLEtBQUcsRUFBRSxLQUFLLE1BQUssR0FBRSxHQUFFLENBQUM7QUFBQSxPQUFHLEdBQUUsd0JBQXNCO0FBQUEsRUFBQztBQUFBLEVBQUMsT0FBTyxFQUFFLE9BQUssRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxNQUFJLENBQUM7QUFBQSxFQUFFLENBQUMsR0FBRSxPQUFLLEdBQUUsRUFBRSxLQUFJLENBQUMsTUFBSSxFQUFFLEtBQUcsR0FBRSxFQUFFLElBQUUsR0FBRSxHQUFFLElBQUksSUFBSSxLQUFLLENBQUM7QUFBQTtBQUFtRixTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUUsR0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTSxFQUFDLFNBQVEsRUFBQztBQUFBLEtBQUcsQ0FBQyxDQUFDO0FBQUE7QUFBdU4sU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxNQUFJLENBQUM7QUFBQSxFQUFFLE9BQU8sR0FBRSxFQUFFLEtBQUksQ0FBQyxNQUFJLEVBQUUsS0FBRyxFQUFFLEdBQUUsRUFBRSxNQUFJLEdBQUUsRUFBRSxNQUFJLElBQUcsRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUUsR0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTztBQUFBLEtBQUcsQ0FBQztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsUUFBUSxFQUFFLE1BQUssSUFBRSxHQUFFLE1BQUksQ0FBQztBQUFBLEVBQUUsT0FBTyxFQUFFLElBQUUsR0FBRSxLQUFTLEVBQUUsTUFBUixTQUFhLEVBQUUsS0FBRyxNQUFHLEVBQUUsSUFBSSxFQUFDLElBQUcsRUFBRSxNQUFNLFNBQU8sRUFBRTtBQUFBO0FBQWtPLFNBQVMsRUFBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxNQUFJLEVBQUU7QUFBQSxFQUFFLElBQUcsQ0FBQyxFQUFFLElBQUc7QUFBQSxJQUFDLFNBQVEsSUFBRSxHQUFFLElBQVcsTUFBUCxRQUFVLENBQUMsRUFBRSxPQUFZLEVBQUUsT0FBVDtBQUFBLE1BQWEsSUFBRSxFQUFFO0FBQUEsSUFBRyxJQUFJLElBQUUsRUFBRSxRQUFNLEVBQUUsTUFBSSxDQUFDLEdBQUUsQ0FBQztBQUFBLElBQUcsRUFBRSxLQUFHLE1BQUksRUFBRSxLQUFHLE1BQUksRUFBRTtBQUFBLEVBQUk7QUFBQSxFQUFDLE9BQU8sRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLEdBQUU7QUFBQSxFQUFDLFNBQVEsRUFBRSxJQUFFLEdBQUUsTUFBTSxLQUFHO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLElBQUksSUFBRyxFQUFFLE9BQUs7QUFBQSxNQUFFLElBQUc7QUFBQSxRQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUMsR0FBRSxFQUFFLElBQUksS0FBSyxFQUFDLEdBQUUsRUFBRSxNQUFJLENBQUM7QUFBQSxRQUFFLE9BQU0sR0FBRTtBQUFBLFFBQUMsRUFBRSxNQUFJLENBQUMsR0FBRSxHQUFFLElBQUksR0FBRSxFQUFFLEdBQUc7QUFBQTtBQUFBLEVBQUU7QUFBQTtBQUFFLEdBQUUsTUFBSSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsS0FBRSxNQUFLLE1BQUcsR0FBRSxDQUFDO0FBQUEsR0FBRyxHQUFFLEtBQUcsUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsS0FBRyxFQUFFLE9BQUssRUFBRSxJQUFJLFFBQU0sRUFBRSxNQUFJLEVBQUUsSUFBSSxNQUFLLE1BQUcsR0FBRSxHQUFFLENBQUM7QUFBQSxHQUFHLEdBQUUsTUFBSSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLENBQUMsR0FBRSxLQUFFO0FBQUEsRUFBRSxJQUFJLEtBQUcsS0FBRSxFQUFFLEtBQUs7QUFBQSxFQUFJLE1BQUksT0FBSSxNQUFHLEVBQUUsTUFBSSxDQUFDLEdBQUUsR0FBRSxNQUFJLENBQUMsR0FBRSxFQUFFLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsRUFBRSxRQUFNLEVBQUUsS0FBRyxFQUFFLE1BQUssRUFBRSxJQUFFLEVBQUUsTUFBUztBQUFBLEdBQUUsTUFBSSxFQUFFLElBQUksS0FBSyxFQUFDLEdBQUUsRUFBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEVBQUUsTUFBSSxDQUFDLEdBQUUsS0FBRSxLQUFJLEtBQUU7QUFBQSxHQUFHLEdBQUUsU0FBTyxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLENBQUM7QUFBQSxFQUFFLElBQUksSUFBRSxFQUFFO0FBQUEsRUFBSSxLQUFHLEVBQUUsUUFBTSxFQUFFLElBQUksSUFBSSxXQUFhLEdBQUUsS0FBSyxDQUFDLE1BQVosS0FBZSxPQUFJLEdBQUUsMkJBQXlCLEtBQUUsR0FBRSwwQkFBd0IsSUFBRyxFQUFDLElBQUcsRUFBRSxJQUFJLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsRUFBRSxNQUFJLEVBQUUsTUFBSSxFQUFFLElBQUcsRUFBRSxJQUFPO0FBQUEsR0FBRSxJQUFHLEtBQUUsS0FBRTtBQUFBLEdBQU0sR0FBRSxNQUFJLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBRztBQUFBLE1BQUMsRUFBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEVBQUUsTUFBSSxFQUFFLElBQUksT0FBTyxRQUFRLENBQUMsR0FBRTtBQUFBLFFBQUMsT0FBTSxDQUFDLEVBQUUsTUFBSSxH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QUEsSUFBQyxFQUFNLFNBQVEsRUFBRSxNQUFQLElBQVM7QUFBQSxNQUFDLEVBQUUsSUFBRTtBQUFBLE1BQUUsSUFBWSxFQUFFLE1BQU4sV0FBUTtBQUFBLFFBQUMsRUFBRSxFQUFFLElBQUUsRUFBRTtBQUFBLFFBQUUsSUFBWSxFQUFFLE1BQU47QUFBQSxVQUFRLEVBQUUsRUFBRSxJQUFFLEVBQUU7QUFBQSxRQUFFLEVBQUUsSUFBRSxHQUFFO0FBQUEsUUFBRSxFQUFFLElBQU87QUFBQSxRQUFFLEdBQUUsRUFBRSxJQUFFO0FBQUEsUUFBRSxHQUFFLElBQUU7QUFBQSxNQUFDO0FBQUEsTUFBQyxPQUFPO0FBQUEsSUFBQztBQUFBLEVBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLElBQUU7QUFBQSxFQUFFLEtBQUssSUFBTztBQUFBLEVBQUUsS0FBSyxJQUFPO0FBQUEsRUFBRSxLQUFLLElBQUU7QUFBQSxFQUFFLEtBQUssSUFBUSxLQUFOLE9BQWEsWUFBRSxFQUFFO0FBQUEsRUFBUSxLQUFLLElBQVEsS0FBTixPQUFhLFlBQUUsRUFBRTtBQUFBLEVBQVUsS0FBSyxPQUFXLEtBQU4sT0FBYSxZQUFFLEVBQUU7QUFBQTtBQUFLLEdBQUUsVUFBVSxRQUFNO0FBQUUsR0FBRSxVQUFVLElBQUUsUUFBUSxHQUFFO0FBQUEsRUFBQyxPQUFNO0FBQUE7QUFBSSxHQUFFLFVBQVUsSUFBRSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLE1BQUssSUFBRSxLQUFLO0FBQUEsRUFBRSxJQUFHLE1BQUksS0FBWSxFQUFFLE1BQU4sV0FBUTtBQUFBLElBQUMsRUFBRSxJQUFFO0FBQUEsSUFBRSxLQUFLLElBQUU7QUFBQSxJQUFFLElBQVksTUFBSjtBQUFBLE1BQU0sRUFBRSxJQUFFO0FBQUEsSUFBTztBQUFBLFNBQUUsUUFBUSxHQUFFO0FBQUEsUUFBQyxJQUFJO0FBQUEsU0FBUyxJQUFFLEVBQUUsTUFBWCxRQUFlLEVBQUUsS0FBSyxDQUFDO0FBQUEsT0FBRTtBQUFBLEVBQUM7QUFBQTtBQUFHLEdBQUUsVUFBVSxJQUFFLFFBQVEsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUU7QUFBQSxFQUFLLElBQVksS0FBSyxNQUFULFdBQVc7QUFBQSxJQUFDLE1BQVEsR0FBSixHQUFVLEdBQUosTUFBRTtBQUFBLElBQUksSUFBWSxNQUFKLFdBQU07QUFBQSxNQUFDLEVBQUUsSUFBRTtBQUFBLE1BQUUsRUFBRSxJQUFPO0FBQUEsSUFBQztBQUFBLElBQUMsSUFBWSxNQUFKLFdBQU07QUFBQSxNQUFDLEVBQUUsSUFBRTtBQUFBLE1BQUUsRUFBRSxJQUFPO0FBQUEsSUFBQztBQUFBLElBQUMsSUFBRyxNQUFJLEtBQUssR0FBRTtBQUFBLE1BQUMsS0FBSyxJQUFFO0FBQUEsTUFBRSxJQUFZLE1BQUo7QUFBQSxRQUFNLEdBQUUsUUFBUSxHQUFFO0FBQUEsVUFBQyxJQUFJO0FBQUEsV0FBUyxJQUFFLEVBQUUsTUFBWCxRQUFlLEVBQUUsS0FBSyxDQUFDO0FBQUEsU0FBRTtBQUFBLElBQUM7QUFBQSxFQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsWUFBVSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFO0FBQUEsRUFBSyxPQUFPLEdBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRSxPQUFNLElBQUU7QUFBQSxJQUFFLEtBQU87QUFBQSxJQUFFLElBQUc7QUFBQSxNQUFDLEVBQUUsQ0FBQztBQUFBLGNBQUU7QUFBQSxNQUFRLEtBQUU7QUFBQTtBQUFBLEtBQUksRUFBQyxNQUFLLE1BQUssQ0FBQztBQUFBO0FBQUcsR0FBRSxVQUFVLFVBQVEsUUFBUSxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUs7QUFBQTtBQUFPLEdBQUUsVUFBVSxXQUFTLFFBQVEsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFLLFFBQU07QUFBQTtBQUFJLEdBQUUsVUFBVSxTQUFPLFFBQVEsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFLO0FBQUE7QUFBTyxHQUFFLFVBQVUsT0FBSyxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRTtBQUFBLEVBQUssT0FBTyxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTyxFQUFFO0FBQUEsR0FBTTtBQUFBO0FBQUcsT0FBTyxlQUFlLEdBQUUsV0FBVSxTQUFRLEVBQUMsS0FBSSxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxHQUFFLElBQUk7QUFBQSxFQUFFLElBQVksTUFBSjtBQUFBLElBQU0sRUFBRSxJQUFFLEtBQUs7QUFBQSxFQUFFLE9BQU8sS0FBSztBQUFBLEdBQUcsS0FBSSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBRyxNQUFJLEtBQUssR0FBRTtBQUFBLElBQUMsSUFBRyxLQUFFO0FBQUEsTUFBSSxNQUFNLElBQUksTUFBTSxnQkFBZ0I7QUFBQSxLQUFHLFFBQVEsQ0FBQyxHQUFFO0FBQUEsTUFBQyxJQUFPLE9BQUosS0FBVyxPQUFKO0FBQUEsUUFBTSxJQUFHLEVBQUUsTUFBSSxJQUFFO0FBQUEsVUFBQyxFQUFFLElBQUU7QUFBQSxVQUFFLEtBQUUsRUFBQyxHQUFFLEdBQUUsR0FBRSxFQUFFLEdBQUUsR0FBRSxFQUFFLEdBQUUsR0FBRSxHQUFDO0FBQUEsUUFBQztBQUFBO0FBQUEsT0FBRyxJQUFJO0FBQUEsSUFBRSxLQUFLLElBQUU7QUFBQSxJQUFFLEtBQUs7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUksSUFBRztBQUFBLE1BQUMsU0FBUSxJQUFFLEtBQUssRUFBVyxNQUFKLFdBQU0sSUFBRSxFQUFFO0FBQUEsUUFBRSxFQUFFLEVBQUUsRUFBRTtBQUFBLGNBQUU7QUFBQSxNQUFRLEdBQUU7QUFBQTtBQUFBLEVBQUU7QUFBQSxFQUFFLENBQUM7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLE9BQU8sSUFBSSxHQUFFLEdBQUUsQ0FBQztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsU0FBUSxJQUFFLEVBQUUsRUFBVyxNQUFKLFdBQU0sSUFBRSxFQUFFO0FBQUEsSUFBRSxJQUFHLEVBQUUsRUFBRSxNQUFJLEVBQUUsS0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUcsRUFBRSxFQUFFLE1BQUksRUFBRTtBQUFBLE1BQUUsT0FBTTtBQUFBLEVBQUcsT0FBTTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsU0FBUSxJQUFFLEVBQUUsRUFBVyxNQUFKLFdBQU0sSUFBRSxFQUFFLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxFQUFFLEVBQUU7QUFBQSxJQUFFLElBQVksTUFBSjtBQUFBLE1BQU0sRUFBRSxJQUFFO0FBQUEsSUFBRSxFQUFFLEVBQUUsSUFBRTtBQUFBLElBQUUsRUFBRSxJQUFFO0FBQUEsSUFBRyxJQUFZLEVBQUUsTUFBTixXQUFRO0FBQUEsTUFBQyxFQUFFLElBQUU7QUFBQSxNQUFFO0FBQUEsSUFBSztBQUFBLEVBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFLEdBQUUsSUFBTztBQUFBLEVBQUUsT0FBZSxNQUFKLFdBQU07QUFBQSxJQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsSUFBRSxJQUFRLEVBQUUsTUFBUCxJQUFTO0FBQUEsTUFBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQUEsTUFBRSxJQUFZLE1BQUo7QUFBQSxRQUFNLEVBQUUsSUFBRSxFQUFFO0FBQUEsTUFBRSxJQUFZLEVBQUUsTUFBTjtBQUFBLFFBQVEsRUFBRSxFQUFFLElBQUU7QUFBQSxJQUFDLEVBQU07QUFBQSxVQUFFO0FBQUEsSUFBRSxFQUFFLEVBQUUsSUFBRSxFQUFFO0FBQUEsSUFBRSxJQUFZLEVBQUUsTUFBTjtBQUFBLE1BQVEsRUFBRSxJQUFPO0FBQUEsSUFBRSxJQUFFO0FBQUEsRUFBQztBQUFBLEVBQUMsRUFBRSxJQUFFO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLEdBQUUsS0FBSyxNQUFVLFNBQUM7QUFBQSxFQUFFLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxJQUFPO0FBQUEsRUFBRSxLQUFLLElBQUUsS0FBRTtBQUFBLEVBQUUsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLElBQVEsS0FBTixPQUFhLFlBQUUsRUFBRTtBQUFBLEVBQVEsS0FBSyxJQUFRLEtBQU4sT0FBYSxZQUFFLEVBQUU7QUFBQSxFQUFVLEtBQUssT0FBVyxLQUFOLE9BQWEsWUFBRSxFQUFFO0FBQUE7QUFBSyxHQUFFLFlBQVUsSUFBSTtBQUFFLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsS0FBSyxLQUFHO0FBQUEsRUFBRyxJQUFHLElBQUUsS0FBSztBQUFBLElBQUUsT0FBTTtBQUFBLEVBQUcsS0FBUSxLQUFHLEtBQUssTUFBYjtBQUFBLElBQWdCLE9BQU07QUFBQSxFQUFHLEtBQUssS0FBRztBQUFBLEVBQUcsSUFBRyxLQUFLLE1BQUk7QUFBQSxJQUFFLE9BQU07QUFBQSxFQUFHLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxLQUFHO0FBQUEsRUFBRSxJQUFHLEtBQUssSUFBRSxLQUFHLENBQUMsR0FBRSxJQUFJLEdBQUU7QUFBQSxJQUFDLEtBQUssS0FBRztBQUFBLElBQUcsT0FBTTtBQUFBLEVBQUU7QUFBQSxFQUFDLElBQUksSUFBRTtBQUFBLEVBQUUsSUFBRztBQUFBLElBQUMsR0FBRSxJQUFJO0FBQUEsSUFBRSxLQUFFO0FBQUEsSUFBSyxJQUFJLElBQUUsS0FBSyxFQUFFO0FBQUEsSUFBRSxJQUFHLEtBQUcsS0FBSyxLQUFHLEtBQUssTUFBSSxLQUFPLEtBQUssTUFBVCxHQUFXO0FBQUEsTUFBQyxLQUFLLElBQUU7QUFBQSxNQUFFLEtBQUssS0FBRztBQUFBLE1BQUksS0FBSztBQUFBLElBQUc7QUFBQSxJQUFFLE9BQU0sR0FBRTtBQUFBLElBQUMsS0FBSyxJQUFFO0FBQUEsSUFBRSxLQUFLLEtBQUc7QUFBQSxJQUFHLEtBQUs7QUFBQTtBQUFBLEVBQUksS0FBRTtBQUFBLEVBQUUsR0FBRSxJQUFJO0FBQUEsRUFBRSxLQUFLLEtBQUc7QUFBQSxFQUFHLE9BQU07QUFBQTtBQUFJLEdBQUUsVUFBVSxJQUFFLFFBQVEsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFZLEtBQUssTUFBVCxXQUFXO0FBQUEsSUFBQyxLQUFLLEtBQUc7QUFBQSxJQUFHLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLE1BQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUFBLEVBQUM7QUFBQSxFQUFDLEdBQUUsVUFBVSxFQUFFLEtBQUssTUFBSyxDQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBWSxLQUFLLE1BQVQsV0FBVztBQUFBLElBQUMsR0FBRSxVQUFVLEVBQUUsS0FBSyxNQUFLLENBQUM7QUFBQSxJQUFFLElBQVksS0FBSyxNQUFULFdBQVc7QUFBQSxNQUFDLEtBQUssS0FBRztBQUFBLE1BQUksU0FBUSxJQUFFLEtBQUssRUFBVyxNQUFKLFdBQU0sSUFBRSxFQUFFO0FBQUEsUUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQUEsSUFBQztBQUFBLEVBQUM7QUFBQTtBQUFHLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsSUFBRyxFQUFFLElBQUUsS0FBSyxJQUFHO0FBQUEsSUFBQyxLQUFLLEtBQUc7QUFBQSxJQUFFLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLE1BQUUsRUFBRSxFQUFFLEVBQUU7QUFBQSxFQUFDO0FBQUE7QUFBRyxPQUFPLGVBQWUsR0FBRSxXQUFVLFNBQVEsRUFBQyxLQUFJLFFBQVEsR0FBRTtBQUFBLEVBQUMsSUFBRyxJQUFFLEtBQUs7QUFBQSxJQUFFLE1BQU0sSUFBSSxNQUFNLGdCQUFnQjtBQUFBLEVBQUUsSUFBSSxJQUFFLEdBQUUsSUFBSTtBQUFBLEVBQUUsS0FBSyxFQUFFO0FBQUEsRUFBRSxJQUFZLE1BQUo7QUFBQSxJQUFNLEVBQUUsSUFBRSxLQUFLO0FBQUEsRUFBRSxJQUFHLEtBQUcsS0FBSztBQUFBLElBQUUsTUFBTSxLQUFLO0FBQUEsRUFBRSxPQUFPLEtBQUs7QUFBQSxFQUFFLENBQUM7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLE9BQU8sSUFBSSxHQUFFLEdBQUUsQ0FBQztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxFQUFFLEVBQUUsSUFBTztBQUFBLEVBQUUsSUFBZSxPQUFPLEtBQW5CLFlBQXFCO0FBQUEsSUFBQztBQUFBLElBQUksSUFBSSxJQUFFO0FBQUEsSUFBRSxLQUFPO0FBQUEsSUFBRSxJQUFHO0FBQUEsTUFBQyxFQUFFO0FBQUEsTUFBRSxPQUFNLEdBQUU7QUFBQSxNQUFDLEVBQUUsS0FBRztBQUFBLE1BQUcsRUFBRSxLQUFHO0FBQUEsTUFBRSxHQUFFLENBQUM7QUFBQSxNQUFFLE1BQU07QUFBQSxjQUFFO0FBQUEsTUFBUSxLQUFFO0FBQUEsTUFBRSxHQUFFO0FBQUE7QUFBQSxFQUFFO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxTQUFRLElBQUUsRUFBRSxFQUFXLE1BQUosV0FBTSxJQUFFLEVBQUU7QUFBQSxJQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFBQSxFQUFFLEVBQUUsSUFBTztBQUFBLEVBQUUsRUFBRSxJQUFPO0FBQUEsRUFBRSxHQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUcsT0FBSTtBQUFBLElBQUssTUFBTSxJQUFJLE1BQU0scUJBQXFCO0FBQUEsRUFBRSxHQUFFLElBQUk7QUFBQSxFQUFFLEtBQUU7QUFBQSxFQUFFLEtBQUssS0FBRztBQUFBLEVBQUcsSUFBRyxJQUFFLEtBQUs7QUFBQSxJQUFFLEdBQUUsSUFBSTtBQUFBLEVBQUUsR0FBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxLQUFLLElBQUU7QUFB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UUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUU7QUFBQSxFQUFLLE9BQU0sRUFBQyxNQUFLLE1BQUssS0FBSyxHQUFFO0FBQUEsSUFBQyxPQUFPLEVBQUU7QUFBQSxJQUFNLEVBQUM7QUFBQSxFQUFFLEdBQUUsS0FBSSxFQUFDLGNBQWEsTUFBRyxPQUFNLEVBQUMsRUFBQyxDQUFDO0FBQUUsR0FBRSxPQUFNLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQWEsT0FBTyxFQUFFLFFBQW5CLFVBQXdCO0FBQUEsSUFBQyxJQUFJLEdBQUUsSUFBRSxFQUFFO0FBQUEsSUFBTSxTQUFRLEtBQUs7QUFBQSxNQUFFLElBQWdCLE1BQWIsWUFBZTtBQUFBLFFBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxRQUFHLElBQUcsYUFBYSxJQUFFO0FBQUEsVUFBQyxJQUFHLENBQUM7QUFBQSxZQUFFLEVBQUUsT0FBSyxJQUFFLENBQUM7QUFBQSxVQUFFLEVBQUUsS0FBRztBQUFBLFVBQUUsRUFBRSxLQUFHLEVBQUUsS0FBSztBQUFBLFFBQUM7QUFBQSxNQUFDO0FBQUEsRUFBQztBQUFBLEVBQUMsRUFBRSxDQUFDO0FBQUEsQ0FBRTtBQUFFLEdBQUUsT0FBTSxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxFQUFFLENBQUM7QUFBQSxFQUFFLElBQUcsRUFBRSxTQUFPLEdBQUU7QUFBQSxJQUFDLEdBQUU7QUFBQSxJQUFFLElBQUksR0FBRSxJQUFFLEVBQUU7QUFBQSxJQUFJLElBQUcsR0FBRTtBQUFBLE1BQUMsRUFBRSxRQUFNO0FBQUEsTUFBRyxLQUFhLElBQUUsRUFBRSxVQUFUO0FBQUEsUUFBZSxFQUFFLE9BQUssSUFBRSxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsVUFBQyxJQUFJO0FBQUEsVUFBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLFlBQUMsSUFBRTtBQUFBLGFBQU0sRUFBQyxNQUFLLEVBQUMsQ0FBQztBQUFBLFVBQUUsRUFBRSxJQUFFO0FBQUEsVUFBRSxPQUFPO0FBQUEsVUFBRyxRQUFRLEdBQUU7QUFBQSxVQUFDLElBQUk7QUFBQSxVQUFFLElBQUc7QUFBQSxhQUFTLElBQUUsRUFBRSxNQUFYLFFBQWUsRUFBRSxLQUFLLENBQUM7QUFBQSxVQUFFLEVBQUUsUUFBTTtBQUFBLFVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUFBLFdBQWUsT0FBTyxFQUFFLFFBQXJCLGFBQTBCLEVBQUUsS0FBSyxlQUFhLEVBQUUsS0FBSyxPQUFLLEVBQUU7QUFBQSxJQUFDO0FBQUEsSUFBQyxLQUFFO0FBQUEsSUFBRSxHQUFFLENBQUM7QUFBQSxFQUFDO0FBQUEsQ0FBRTtBQUFFLEdBQUUsT0FBTSxRQUFRLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFBLEVBQUMsR0FBRTtBQUFBLEVBQUUsS0FBTztBQUFBLEVBQUUsRUFBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLENBQUU7QUFBRSxHQUFFLFVBQVMsUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsR0FBRTtBQUFBLEVBQUUsS0FBTztBQUFBLEVBQUUsSUFBSTtBQUFBLEVBQUUsSUFBYSxPQUFPLEVBQUUsUUFBbkIsYUFBMEIsSUFBRSxFQUFFLE1BQUs7QUFBQSxJQUFDLE1BQVEsTUFBSixHQUFhLE9BQUosTUFBRTtBQUFBLElBQVEsSUFBRyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLE1BQUUsSUFBRztBQUFBLFFBQUUsU0FBUSxLQUFLLEdBQUU7QUFBQSxVQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsVUFBRyxJQUFZLE1BQUosYUFBTyxFQUFFLEtBQUssSUFBRztBQUFBLFlBQUMsRUFBRSxFQUFFO0FBQUEsWUFBRSxFQUFFLEtBQVE7QUFBQSxVQUFDO0FBQUEsUUFBQztBQUFBLE1BQUs7QUFBQSxRQUFDLElBQUUsQ0FBQztBQUFBLFFBQUUsRUFBRSxJQUFFO0FBQUE7QUFBQSxNQUFFLFNBQVEsS0FBSyxHQUFFO0FBQUEsUUFBQyxJQUFJLElBQUUsRUFBRSxJQUFHLElBQUUsRUFBRTtBQUFBLFFBQUcsSUFBWSxNQUFKLFdBQU07QUFBQSxVQUFDLElBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUUsRUFBRSxLQUFHO0FBQUEsUUFBQyxFQUFNO0FBQUEsWUFBRSxFQUFFLEdBQUUsQ0FBQztBQUFBLE1BQUM7QUFBQSxNQUFDLFNBQVEsS0FBSztBQUFBLFFBQUUsRUFBRSxLQUFHLEVBQUU7QUFBQSxJQUFFO0FBQUEsRUFBQztBQUFBLEVBQUMsRUFBRSxDQUFDO0FBQUEsQ0FBRTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxLQUFLLEtBQVksRUFBRSxvQkFBTixXQUFzQixJQUFFLEdBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxLQUFLO0FBQUEsRUFBRSxPQUFNLEVBQUMsR0FBRSxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsSUFBQyxFQUFFLFFBQU07QUFBQSxJQUFFLElBQUUsRUFBRSxLQUFLO0FBQUEsS0FBRyxHQUFFLEdBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxLQUFLLElBQUU7QUFBQSxJQUFFLElBQUksSUFBRSxFQUFFLE1BQU07QUFBQSxJQUFNLElBQUcsTUFBSSxHQUFFO0FBQUEsTUFBQyxJQUFPO0FBQUEsTUFBRSxJQUFHO0FBQUEsUUFBRSxFQUFFLEtBQUc7QUFBQSxNQUFPLFNBQVMsS0FBTixTQUFlLE1BQUwsU0FBYyxFQUFFLE9BQVI7QUFBQSxRQUFZLEVBQUUsYUFBYSxHQUFFLENBQUM7QUFBQSxNQUFPO0FBQUEsVUFBRSxnQkFBZ0IsQ0FBQztBQUFBLElBQUMsRUFBTTtBQUFBLFVBQU87QUFBQSxHQUFFLEVBQUM7QUFBQTtBQUFFLEdBQUUsV0FBVSxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFhLE9BQU8sRUFBRSxRQUFuQixVQUF3QjtBQUFBLElBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxJQUFJLElBQUcsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxNQUFFLElBQUcsR0FBRTtBQUFBLFFBQUMsRUFBRSxJQUFPO0FBQUEsUUFBRSxTQUFRLEtBQUssR0FBRTtBQUFBLFVBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxVQUFHLElBQUc7QUFBQSxZQUFFLEVBQUUsRUFBRTtBQUFBLFFBQUM7QUFBQSxNQUFDO0FBQUEsSUFBQztBQUFBLElBQUMsRUFBRSxPQUFVO0FBQUEsRUFBQyxFQUFLO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLElBQUksSUFBRyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLE1BQUssSUFBRyxHQUFFO0FBQUEsUUFBQyxFQUFFLE9BQVU7QUFBQSxRQUFFLEVBQUUsRUFBRTtBQUFBLE1BQUM7QUFBQSxJQUFDO0FBQUE7QUFBQSxFQUFFLEVBQUUsQ0FBQztBQUFBLENBQUU7QUFBRSxHQUFFLE9BQU0sUUFBUSxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUcsSUFBRSxLQUFPLE1BQUo7QUFBQSxJQUFNLEVBQUUsUUFBTTtBQUFBLEVBQUUsRUFBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLENBQUU7QUFBRSxFQUFFLFVBQVUsd0JBQXNCLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUcsS0FBSztBQUFBLElBQUksT0FBTTtBQUFBLEVBQUcsSUFBSSxJQUFFLEtBQUssTUFBSyxJQUFFLEtBQVksRUFBRSxNQUFOO0FBQUEsRUFBUSxTQUFRLEtBQUs7QUFBQSxJQUFFLE9BQU07QUFBQSxFQUFHLElBQUcsS0FBSyxPQUFnQixPQUFPLEtBQUssS0FBdkIsYUFBK0IsS0FBSyxNQUFWLE1BQVk7QUFBQSxJQUFDLElBQUksSUFBRSxJQUFFLEtBQUs7QUFBQSxJQUFLLElBQUcsRUFBRSxLQUFHLEtBQUcsSUFBRSxLQUFLO0FBQUEsTUFBTSxPQUFNO0FBQUEsSUFBRyxJQUFHLElBQUUsS0FBSztBQUFBLE1BQUssT0FBTTtBQUFBLEVBQUUsRUFBSztBQUFBLElBQUMsSUFBRyxFQUFFLEtBQUcsSUFBRSxLQUFLO0FBQUEsTUFBTSxPQUFNO0FBQUEsSUFBRyxJQUFHLElBQUUsS0FBSztBQUFBLE1BQUssT0FBTTtBQUFBO0FBQUEsRUFBRyxTQUFRLEtBQUs7QUFBQSxJQUFFLElBQWdCLE1BQWIsY0FBZ0IsRUFBRSxPQUFLLEtBQUssTUFBTTtBQUFBLE1BQUcsT0FBTTtBQUFBLEVBQUcsU0FBUSxLQUFLLEtBQUs7QUFBQSxJQUFNLElBQUcsRUFBRSxLQUFLO0FBQUEsTUFBRyxPQUFNO0FBQUEsRUFBRyxPQUFNO0FBQUE7QUFBSSxTQUFTLFNBQVMsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLE9BQU8sR0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLE9BQU8sR0FBRSxHQUFFLENBQUM7QUFBQSxLQUFHLENBQUMsQ0FBQztBQUFBO0FBQUUsU0FBUyxXQUFXLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxDQUFDO0FBQUEsRUFBRSxFQUFFLFVBQVE7QUFBQSxFQUFFLEdBQUUsUUFBTTtBQUFBLEVBQUUsT0FBTyxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTyxHQUFFLFFBQVEsR0FBRTtBQUFBLE1BQUMsT0FBTyxFQUFFLFFBQVE7QUFBQSxPQUFHLENBQUM7QUFBQSxLQUFHLENBQUMsQ0FBQztBQUFBO0FBQUUsSUFBSSxLQUFlLE9BQU8seUJBQXBCLGNBQTBDLGFBQVcsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLGFBQWEsQ0FBQztBQUFBLElBQUUscUJBQXFCLENBQUM7QUFBQSxJQUFFLEVBQUU7QUFBQSxLQUFHLElBQUUsV0FBVyxHQUFFLEVBQUUsR0FBRSxJQUFFLHNCQUFzQixDQUFDO0FBQUE7QUFBakwsSUFBb0wsS0FBRSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsZUFBZSxRQUFRLEdBQUU7QUFBQSxJQUFDLGVBQWUsQ0FBQztBQUFBLEdBQUU7QUFBQTtBQUFHLFNBQVMsRUFBQyxHQUFFO0FBQUEsRUFBQyxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsSUFBSTtBQUFBLElBQUUsT0FBTSxJQUFFLEdBQUUsTUFBTTtBQUFBLE1BQUUsR0FBRSxLQUFLLENBQUM7QUFBQSxHQUFFO0FBQUE7QUFBRSxTQUFTLEVBQUMsR0FBRTtBQUFBLEVBQUMsSUFBTyxHQUFFLEtBQUssSUFBSSxNQUFmO0FBQUEsS0FBa0IsRUFBRSx5QkFBdUIsSUFBRyxFQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsR0FBRTtBQUFBLEVBQUMsR0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLElBQUk7QUFBQSxJQUFFLE9BQU0sSUFBRSxHQUFFLE1BQU07QUFBQSxNQUFFLEdBQUUsS0FBSyxDQUFDO0FBQUEsR0FBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLEdBQUU7QUFBQSxFQUFDLElBQU8sR0FBRSxLQUFLLElBQUksTUFBZjtBQUFBLEtBQWtCLEVBQUUseUJBQXVCLElBQUcsRUFBQztBQUFBO0FBQUUsU0FBUyxlQUFlLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxDQUFDO0FBQUEsRUFBRSxFQUFFLFVBQVE7QUFBQSxFQUFFLEdBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxPQUFPLEdBQUUsUUFBUSxHQUFFO0FBQUEsTUFBQyxLQUFLLElBQUU7QUFBQSxNQUFFLE9BQU8sRUFBRSxRQUFRO0FBQUEsT0FBRyxDQUFDO0FBQUEsS0FBRyxDQUFDLENBQUM7QUFBQTs7O0FDb0J0N0gsSUFBTSxhQUFhLEdBQXFCLENBQUMsQ0FBQztBQUVqRCxJQUFJLFNBQVM7QUFDYixTQUFTLE9BQU8sR0FBVztBQUFBLEVBQ3pCLFVBQVU7QUFBQSxFQUNWLE9BQU8sYUFBYTtBQUFBO0FBR2YsU0FBUyxRQUFRLENBQ3RCLFNBQ0EsT0FBc0QsQ0FBQyxHQUMvQztBQUFBLEVBQ1IsTUFBTSxRQUFvQjtBQUFBLElBQ3hCLElBQUksUUFBUTtBQUFBLElBQ1o7QUFBQSxJQUNBLFVBQVUsS0FBSyxZQUFZO0FBQUEsSUFDM0IsUUFBUSxLQUFLO0FBQUEsSUFDYixXQUFXLEtBQUssSUFBSTtBQUFBLEVBQ3RCO0FBQUEsRUFDQSxXQUFXLFFBQVEsQ0FBQyxHQUFHLFdBQVcsT0FBTyxLQUFLO0FBQUEsRUFDOUMsT0FBTyxNQUFNO0FBQUE7QUFHUixTQUFTLFVBQVUsQ0FBQyxJQUFtQjtBQUFBLEVBQzVDLElBQUksT0FBTyxXQUFXO0FBQUEsSUFDcEIsV0FBVyxRQUFRLENBQUM7QUFBQSxJQUNwQjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFdBQVcsUUFBUSxXQUFXLE1BQU0sT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUU7QUFBQTtBQU94RCxTQUFTLFdBQVcsQ0FBQyxRQUFnQixLQUFzQjtBQUFBLEVBQ2hFLE1BQU0sVUFBVSxlQUFlLFFBQVEsSUFBSSxVQUFVLE9BQU8sR0FBRztBQUFBLEVBQy9ELE9BQU8sU0FBUyxTQUFTLEVBQUUsUUFBUSxVQUFVLFFBQVEsQ0FBQztBQUFBOztBQ3pDeEQsSUFBTSxRQUFRLEdBQXVCLENBQUMsQ0FBQztBQVFoQyxTQUFTLGNBQWMsR0FBWTtBQUFBLEVBQ3hDLE9BQU8sTUFBTSxNQUFNLFNBQVM7QUFBQTtBQUl2QixTQUFTLFVBQVUsR0FBNkI7QUFBQSxFQUNyRCxNQUFNLElBQUksTUFBTTtBQUFBLEVBQ2hCLE9BQU8sRUFBRSxFQUFFLFNBQVM7QUFBQTtBQUlmLFNBQVMsV0FBVyxDQUFDLE9BQTJCO0FBQUEsRUFDckQsTUFBTSxRQUFRLENBQUMsR0FBRyxNQUFNLE9BQU8sS0FBSztBQUFBO0FBSS9CLFNBQVMsVUFBVSxDQUFDLElBQXVDO0FBQUEsRUFDaEUsTUFBTSxJQUFJLE1BQU07QUFBQSxFQUNoQixJQUFJLEVBQUUsV0FBVztBQUFBLElBQUc7QUFBQSxFQUNwQixJQUFJLE9BQU8sV0FBVztBQUFBLElBQ3BCLE1BQU0sTUFBTSxFQUFFLEVBQUUsU0FBUztBQUFBLElBQ3pCLE1BQU0sUUFBUSxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQUEsSUFDM0IsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLE1BQU0sTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFO0FBQUEsRUFDMUMsSUFBSSxRQUFRO0FBQUEsSUFBSTtBQUFBLEVBQ2hCLE1BQU0sUUFBUSxFQUFFO0FBQUEsRUFDaEIsTUFBTSxRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDLENBQUM7QUFBQSxFQUN0RCxPQUFPO0FBQUE7QUFJRixTQUFTLGVBQWUsR0FBNkI7QUFBQSxFQUMxRCxNQUFNLE1BQU0sV0FBVztBQUFBLEVBQ3ZCLElBQUksQ0FBQztBQUFBLElBQUs7QUFBQSxFQUNWLElBQUksVUFBVTtBQUFBLEVBQ2QsT0FBTyxXQUFXLElBQUksRUFBRTtBQUFBOzs7QUMxQ25CLElBQU0sbUJBQW1CLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLFVBQVUsVUFBVSxDQUFDO0FBRy9FLElBQU0scUJBQXFCLElBQUksSUFBSSxDQUFDLFNBQVMsVUFBVSxVQUFVLE9BQU8sQ0FBQztBQWV6RSxTQUFTLGVBQWUsQ0FBQyxTQUE4QztBQUFBLEVBQzVFLE1BQU0sT0FBK0IsQ0FBQztBQUFBLEVBQ3RDLFdBQVcsUUFBUSxNQUFNLEtBQUssUUFBUSxVQUFVLEdBQUc7QUFBQSxJQUNqRCxJQUFJLEtBQUssS0FBSyxXQUFXLGNBQWMsR0FBRztBQUFBLE1BQ3hDLE1BQU0sTUFBTSxLQUFLLEtBQ2QsUUFBUSxnQkFBZ0IsRUFBRSxFQUMxQixRQUFRLGFBQWEsQ0FBQyxJQUFZLFdBQW1CLE9BQU8sWUFBWSxDQUFDO0FBQUEsTUFDNUUsS0FBSyxPQUFPLEtBQUs7QUFBQSxJQUNuQjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU87QUFBQTtBQU9GLFNBQVMsZ0JBQWUsR0FBUztBQUFBLEVBQ3RDLE1BQU0sV0FBVyxTQUFTLGlCQUN4QiwrREFDRjtBQUFBLEVBQ0EsSUFBSSxTQUFTLFdBQVc7QUFBQSxJQUFHO0FBQUEsRUFDM0IsTUFBTSxhQUFhLFNBQVMsU0FBUyxTQUFTO0FBQUEsRUFDOUMsSUFBSSxDQUFDO0FBQUEsSUFBWTtBQUFBLEVBQ2pCLFdBQVcsY0FDVCxJQUFJLFlBQVksaUJBQWlCO0FBQUEsSUFDL0IsU0FBUztBQUFBLElBQ1QsUUFBUSxFQUFFLElBQUksV0FBVyxhQUFhLGlCQUFpQixFQUFFO0FBQUEsRUFDM0QsQ0FBQyxDQUNIO0FBQUE7QUFNSyxTQUFTLGFBQWEsQ0FBQyxPQUFxQztBQUFBLEVBQ2pFLE1BQU0sU0FBUyxNQUFNO0FBQUEsRUFDckIsSUFBSSxFQUFFLGtCQUFrQjtBQUFBLElBQVUsT0FBTztBQUFBLEVBQ3pDLE1BQU0sZ0JBQWdCLE9BQU8sUUFBUSxlQUFlO0FBQUEsRUFDcEQsSUFBSSxFQUFFLHlCQUF5QjtBQUFBLElBQWMsT0FBTztBQUFBLEVBQ3BELElBQUksTUFBTSxTQUFTLFdBQVcsY0FBYyxZQUFZO0FBQUEsSUFBUSxPQUFPO0FBQUEsRUFDdkUsTUFBTSxTQUFTLGNBQWMsYUFBYSxhQUFhO0FBQUEsRUFDdkQsSUFBSSxDQUFDO0FBQUEsSUFBUSxPQUFPO0FBQUEsRUFDcEIsT0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNUO0FBQUEsSUFDQSxNQUFNLGdCQUFnQixhQUFhO0FBQUEsRUFDckM7QUFBQTtBQU9LLFNBQVMsc0JBQXNCLENBQ3BDLFlBQ0EsVUFBeUUsQ0FBQyxHQUM5RDtBQUFBLEVBQ1osTUFBTSxvQkFBb0IsQ0FBQyxVQUFpQjtBQUFBLElBQzFDLE1BQU0sV0FBVyxjQUFjLEtBQUs7QUFBQSxJQUNwQyxJQUFJO0FBQUEsTUFBVSxXQUFXLFFBQVE7QUFBQTtBQUFBLEVBR25DLE1BQU0sZ0JBQWdCLENBQUMsVUFBeUI7QUFBQSxJQUM5QyxJQUFJLE1BQU0sUUFBUSxVQUFVO0FBQUEsTUFDMUIsSUFBSSxRQUFRLFVBQVU7QUFBQSxRQUNwQixRQUFRLFNBQVM7QUFBQSxNQUNuQixFQUFPO0FBQUEsUUFDTCxnQkFBd0I7QUFBQSxRQUN4QixpQkFBZ0I7QUFBQTtBQUFBLE1BRWxCO0FBQUEsSUFDRjtBQUFBLElBQ0EsSUFBSSxNQUFNLFFBQVEsV0FBVyxNQUFNLFFBQVEsS0FBSztBQUFBLE1BQzlDLE1BQU0sU0FBUyxNQUFNO0FBQUEsTUFDckIsSUFBSSxFQUFFLGtCQUFrQjtBQUFBLFFBQVU7QUFBQSxNQUNsQyxJQUFJLGlCQUFpQixJQUFJLE9BQU8sT0FBTztBQUFBLFFBQUc7QUFBQSxNQUMxQyxNQUFNLFdBQVcsY0FBYyxLQUFLO0FBQUEsTUFDcEMsSUFBSSxVQUFVO0FBQUEsUUFDWixNQUFNLGVBQWU7QUFBQSxRQUNyQixXQUFXLFFBQVE7QUFBQSxNQUNyQjtBQUFBLElBQ0Y7QUFBQTtBQUFBLEVBR0YsTUFBTSxrQkFBa0IsQ0FBQyxVQUFzQjtBQUFBLElBQzdDLElBQUksRUFBRSxNQUFNLGtCQUFrQjtBQUFBLE1BQVU7QUFBQSxJQUN4QyxNQUFNLGlCQUFpQixNQUFNLE9BQU8sUUFBUSxtQkFBbUI7QUFBQSxJQUMvRCxJQUFJO0FBQUEsTUFBZ0I7QUFBQSxJQUNwQixJQUFJLE1BQU0sT0FBTyxRQUFRLHVCQUF1QjtBQUFBLE1BQUc7QUFBQSxJQUNuRCxJQUFJLFFBQVEsdUJBQXVCO0FBQUEsTUFDakMsUUFBUSxzQkFBc0I7QUFBQSxJQUNoQyxFQUFPO0FBQUEsTUFDTCxnQkFBd0I7QUFBQSxNQUN4QixpQkFBZ0I7QUFBQTtBQUFBO0FBQUEsRUFJcEIsV0FBVyxhQUFhLG9CQUFvQjtBQUFBLElBQzFDLFNBQVMsaUJBQWlCLFdBQVcsaUJBQWlCO0FBQUEsRUFDeEQ7QUFBQSxFQUNBLFNBQVMsaUJBQWlCLFdBQVcsYUFBYTtBQUFBLEVBQ2xELFNBQVMsaUJBQWlCLGFBQWEsZUFBZTtBQUFBLEVBRXRELE9BQU8sTUFBTTtBQUFBLElBQ1gsV0FBVyxhQUFhLG9CQUFvQjtBQUFBLE1BQzFDLFNBQVMsb0JBQW9CLFdBQVcsaUJBQWlCO0FBQUEsSUFDM0Q7QUFBQSxJQUNBLFNBQVMsb0JBQW9CLFdBQVcsYUFBYTtBQUFBLElBQ3JELFNBQVMsb0JBQW9CLGFBQWEsZUFBZTtBQUFBO0FBQUE7O0FDMUg3RCxTQUFTLGFBQWEsQ0FBQyxRQUF1RDtBQUFBLEVBQzVFLElBQUksQ0FBQztBQUFBLElBQVEsT0FBTztBQUFBLEVBQ3BCLElBQUksT0FBTyxvQkFBb0IsYUFBYTtBQUFBLElBQzFDLE9BQU8sa0JBQWtCO0FBQUEsRUFDM0I7QUFBQSxFQUNBLE1BQU0sSUFBSTtBQUFBLEVBQ1YsT0FBTyxPQUFPLEVBQUUsWUFBWSxZQUFZLEVBQUUsWUFBWTtBQUFBO0FBMkNqRCxTQUFTLFVBQTJELENBQ3pFLFFBQzZCO0FBQUEsRUFDN0IsTUFBTSxZQUFZLE9BQU8sS0FBSyxPQUFPLGFBQWE7QUFBQSxFQUVsRCxNQUFNLFNBQVMsQ0FBQztBQUFBLEVBQ2hCLFdBQVcsT0FBTyxXQUFXO0FBQUEsSUFDM0IsT0FBTyxPQUFPLEdBQU8sT0FBTyxjQUFjLElBQUk7QUFBQSxFQUNoRDtBQUFBLEVBRUEsTUFBTSxTQUFTLEdBQWtCLE1BQU07QUFBQSxJQUNyQyxNQUFNLElBQUksQ0FBQztBQUFBLElBQ1gsV0FBVyxPQUFPLFdBQVc7QUFBQSxNQUMzQixFQUFFLE9BQU8sT0FBTyxLQUFLO0FBQUEsSUFDdkI7QUFBQSxJQUNBLE9BQU87QUFBQSxHQUNSO0FBQUEsRUFFRCxNQUFNLFNBQVMsR0FBTyxLQUFLO0FBQUEsRUFDM0IsTUFBTSxlQUFlLEdBQU8sS0FBSztBQUFBLEVBQ2pDLE1BQU0sU0FBUyxHQUErQyxDQUFDLENBQUM7QUFBQSxFQUNoRSxNQUFNLGFBQWEsR0FBK0IsQ0FBQyxDQUFDO0FBQUEsRUFFcEQsSUFBSSxlQUF1QztBQUFBLEVBQzNDLElBQUkscUJBQTBDO0FBQUEsRUFFOUMsU0FBUyxnQkFBZ0IsR0FBWTtBQUFBLElBQ25DLElBQUksQ0FBQyxjQUFjO0FBQUEsTUFDakIsTUFBTSxJQUFJLE1BQ1IsU0FBUyxPQUFPLHFGQUNsQjtBQUFBLElBQ0Y7QUFBQSxJQUNBLE9BQU8sYUFBYTtBQUFBO0FBQUEsRUFHdEIsU0FBUyxjQUFjLEdBQVM7QUFBQSxJQUM5QixXQUFXLE9BQU8sV0FBVztBQUFBLE1BQzNCLE9BQU8sS0FBSyxRQUFRLE9BQU8sY0FBYztBQUFBLElBQzNDO0FBQUEsSUFDQSxPQUFPLFFBQVEsQ0FBQztBQUFBO0FBQUEsRUFJbEIsU0FBUyxJQUFJLENBQUMsVUFBNkIsU0FBaUMsQ0FBQyxHQUFTO0FBQUEsSUFDcEYsZUFBZTtBQUFBLElBQ2YsV0FBVyxRQUFRO0FBQUEsSUFDbkIsSUFBSSxPQUFPLFVBQVUsY0FBYztBQUFBLE1BQ2pDLE1BQU0saUJBQWlCLE9BQU8sT0FBTyxFQUFFLE1BQU0sUUFBUSxRQUFRLGlCQUFpQixFQUFFLENBQUMsS0FBSyxDQUFDO0FBQUEsTUFDdkYsWUFBWSxHQUFHLE1BQU0sT0FBTyxRQUFRLGNBQWMsR0FBRztBQUFBLFFBQ25ELElBQUksS0FBSyxRQUFRO0FBQUEsVUFDZixPQUFPLEdBQW9CLFFBQVE7QUFBQSxRQUNyQztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFDQSxJQUFJLFVBQVU7QUFBQSxNQUNaLFlBQVksR0FBRyxNQUFNLE9BQU8sUUFBUSxRQUFRLEdBQUc7QUFBQSxRQUM3QyxJQUFJLEtBQUssUUFBUTtBQUFBLFVBQ2YsT0FBTyxHQUFvQixRQUFRO0FBQUEsUUFDckM7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBQ0EsT0FBTyxRQUFRO0FBQUE7QUFBQSxFQUdqQixTQUFTLEtBQUssR0FBUztBQUFBLElBQ3JCLE9BQU8sUUFBUTtBQUFBLElBQ2YsZUFBZTtBQUFBLElBQ2YsV0FBVyxRQUFRLENBQUM7QUFBQTtBQUFBLEVBSXRCLGVBQWUsTUFBTSxDQUFDLE9BQThCO0FBQUEsSUFDbEQsSUFBSTtBQUFBLE1BQU8sTUFBTSxlQUFlO0FBQUEsSUFDaEMsSUFBSSxTQUFTLGNBQWMsTUFBTSxNQUFNLEdBQUc7QUFBQSxNQUN4QyxNQUFNLEtBQUssSUFBSSxTQUFTLE1BQU0sTUFBTTtBQUFBLE1BQ3BDLFdBQVcsT0FBTyxXQUFXO0FBQUEsUUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUF3QjtBQUFBLFFBQzNDLElBQUksUUFBUSxNQUFNO0FBQUEsVUFDaEIsT0FBTyxLQUFLLFFBQVEsT0FBTyxHQUFHO0FBQUEsUUFDaEM7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBQ0EsTUFBTSxVQUFVLE9BQU87QUFBQSxJQUN2QixNQUFNLG1CQUFtQixPQUFPLFdBQVcsT0FBTztBQUFBLElBQ2xELElBQUksb0JBQW9CLE9BQU8sS0FBSyxnQkFBZ0IsRUFBRSxTQUFTLEdBQUc7QUFBQSxNQUNoRSxPQUFPLFFBQVE7QUFBQSxNQUNmO0FBQUEsSUFDRjtBQUFBLElBQ0EsT0FBTyxRQUFRLENBQUM7QUFBQSxJQUNoQixhQUFhLFFBQVE7QUFBQSxJQUNyQixJQUFJO0FBQUEsTUFDRixNQUFNLE9BQU8sU0FBUztBQUFBLFFBQ3BCLFFBQVE7QUFBQSxRQUNSLFFBQVEsaUJBQWlCO0FBQUEsTUFDM0IsQ0FBQztBQUFBLE1BQ0QsTUFBTTtBQUFBLE1BQ04sT0FBTyxLQUFLO0FBQUEsTUFDWixZQUFZLEdBQUcsT0FBTyxlQUFlLEdBQUc7QUFBQSxjQUN4QztBQUFBLE1BQ0EsYUFBYSxRQUFRO0FBQUE7QUFBQTtBQUFBLEVBSXpCLFNBQVMsVUFBVSxDQUFDLFdBQWdDO0FBQUEsSUFDbEQsZUFBZTtBQUFBLElBQ2YscUJBQXFCO0FBQUEsSUFDckIsTUFBTSxVQUFVLE9BQU87QUFBQSxJQUN2QixJQUFJLFNBQVM7QUFBQSxNQUNYLHFCQUFxQixHQUFPLE1BQU07QUFBQSxRQUNoQyxJQUFJLENBQUMsT0FBTztBQUFBLFVBQU87QUFBQSxRQUNuQixJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsVUFBVSxFQUFFLENBQUM7QUFBQSxVQUFHLE1BQU07QUFBQSxPQUM5QztBQUFBLElBQ0g7QUFBQTtBQUFBLEVBR0YsTUFBTSxVQUFtQztBQUFBLEtBQ3RDLEdBQUcsT0FBTyxjQUFjLEdBQUcsV0FBVztBQUFBLE1BQ3JDLEtBQUssV0FBVyxJQUFJO0FBQUE7QUFBQSxLQUVyQixHQUFHLE9BQU8sZUFBZSxNQUFNO0FBQUEsTUFDOUIsTUFBTTtBQUFBO0FBQUEsS0FFUCxHQUFHLE9BQU8sZ0JBQWdCLFNBQVMsWUFBWTtBQUFBLE1BQzlDLE1BQU0sT0FBTyxLQUFLO0FBQUE7QUFBQSxFQUV0QjtBQUFBLEVBRUEsT0FBTztBQUFBLElBQ0wsTUFBTSxPQUFPO0FBQUEsSUFDYjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQUE7O0FDck5nWCxJQUEwRSxLQUFFO0FBQWtCLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxNQUFJLElBQUUsQ0FBQztBQUFBLEVBQUcsSUFBSSxHQUFFLEdBQUUsSUFBRTtBQUFBLEVBQUUsSUFBRyxTQUFRO0FBQUEsSUFBRSxLQUFJLEtBQUssSUFBRSxDQUFDLEdBQUU7QUFBQSxNQUFTLEtBQVAsUUFBUyxJQUFFLEVBQUUsS0FBRyxFQUFFLEtBQUcsRUFBRTtBQUFBLEVBQUcsSUFBSSxLQUFFLEVBQUMsTUFBSyxHQUFFLE9BQU0sR0FBRSxLQUFJLEdBQUUsS0FBSSxHQUFFLEtBQUksTUFBSyxJQUFHLE1BQUssS0FBSSxHQUFFLEtBQUksTUFBSyxLQUFJLE1BQUssYUFBaUIsV0FBRSxLQUFJLEVBQUUsSUFBRSxLQUFJLElBQUcsS0FBSSxHQUFFLFVBQVMsR0FBRSxRQUFPLEVBQUM7QUFBQSxFQUFFLElBQWUsT0FBTyxLQUFuQixlQUF1QixJQUFFLEVBQUU7QUFBQSxJQUFjLEtBQUksS0FBSztBQUFBLE1BQVcsRUFBRSxPQUFOLGNBQVcsRUFBRSxLQUFHLEVBQUU7QUFBQSxFQUFJLE9BQU8sRUFBRSxTQUFPLEVBQUUsTUFBTSxFQUFDLEdBQUU7QUFBQTs7O0FDMkIxeUIsSUFBTSxlQUFlLEVBQXVCLElBQUk7Ozs7Ozs7QUNIekMsU0FBUyxVQUEyRCxDQUN6RSxPQUNhO0FBQUEsRUFDYixRQUFRLE1BQU0sVUFBVSxXQUFXLE9BQU87QUFBQSxFQUMxQyxNQUFNLFdBQVcsWUFBWSxHQUFHLDBCQUFRLFdBQVcsY0FBYywwQkFBUTtBQUFBLEVBQ3pFLHVCQUNFLEdBWUUsUUFaRjtBQUFBLElBQ0U7QUFBQSxJQUNBLE9BQU87QUFBQSxJQUNQLGlCQUFhO0FBQUEsSUFDYiwwQkFBd0IsS0FBSztBQUFBLElBQzdCLGVBQWEsR0FBRyxLQUFLO0FBQUEsSUFDckIsYUFBVyxLQUFLLGFBQWE7QUFBQSxJQUM3QixjQUFZLE1BQU07QUFBQSxJQUNsQixtQkFBaUIsTUFBTTtBQUFBLElBQ3ZCLFlBQVU7QUFBQSxJQVRaO0FBQUEsc0NBWUU7QUFBQTs7Ozs7Ozs7OztBQzdCQyxTQUFTLGNBQWMsQ0FBQyxRQUFnQixNQUFvQztBQUFBLEVBQ2pGLE1BQU0sU0FBUyxTQUFTLGNBQWMsUUFBUTtBQUFBLEVBQzlDLE9BQU8sYUFBYSxlQUFlLE1BQU07QUFBQSxFQUN6QyxZQUFZLEtBQUssVUFBVSxPQUFPLFFBQVEsSUFBSSxHQUFHO0FBQUEsSUFDL0MsTUFBTSxVQUFVLElBQUksUUFBUSxVQUFVLENBQUMsTUFBTSxJQUFJLEVBQUUsWUFBWSxHQUFHO0FBQUEsSUFDbEUsT0FBTyxhQUFhLGVBQWUsV0FBVyxLQUFLO0FBQUEsRUFDckQ7QUFBQSxFQUNBLE9BQU8sTUFBTSxXQUFXO0FBQUEsRUFDeEIsT0FBTyxNQUFNLFVBQVU7QUFBQSxFQUN2QixPQUFPLE1BQU0sZ0JBQWdCO0FBQUEsRUFDN0IsT0FBTyxXQUFXO0FBQUEsRUFDbEIsU0FBUyxLQUFLLFlBQVksTUFBTTtBQUFBLEVBQ2hDLElBQUk7QUFBQSxJQUNGLE9BQU8sTUFBTTtBQUFBLFlBQ2I7QUFBQSxJQUNBLE9BQU8sT0FBTztBQUFBO0FBQUE7OztBQ0ZsQixTQUFTLGdCQUFnQixDQUFDLEtBQXNCO0FBQUEsRUFDOUMsT0FBTyxJQUFJLFdBQVcsT0FBTyxLQUFLLElBQUksV0FBVyxPQUFPLEtBQUssUUFBUTtBQUFBO0FBUWhFLFNBQVMsa0JBQWtCLENBQ2hDLE9BQzJDO0FBQUEsRUFDM0MsTUFBTSxNQUFpRCxDQUFDO0FBQUEsRUFDeEQsV0FBVyxPQUFPLE9BQU8sS0FBSyxLQUFLLEdBQUc7QUFBQSxJQUNwQyxJQUFJLENBQUMsaUJBQWlCLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFDNUIsTUFBTSxRQUFRLE1BQU07QUFBQSxJQUNwQixJQUFJLE9BQU8sVUFBVSxZQUFZLE9BQU8sVUFBVSxZQUFZLE9BQU8sVUFBVSxXQUFXO0FBQUEsTUFDeEYsSUFBSSxPQUFPO0FBQUEsSUFDYjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU87QUFBQTs7O0FDc0JGLFNBQVMsV0FBVyxDQUFDLE9BQXNDO0FBQUEsRUFDaEUsTUFBTSxVQUFVLE1BQU0sV0FBVztBQUFBLEVBQ2pDLE1BQU0sU0FBUyxNQUFNLFVBQVU7QUFBQSxFQUcvQixNQUFNLE9BQU8sV0FBVztBQUFBLEVBQ3hCLE9BQU8sTUFBTSxXQUFXLEdBQTBCLE9BQU8sU0FBUyxNQUFNO0FBQUEsRUFDeEUsT0FBTyxPQUFPLFlBQVksR0FBUyxNQUFNLEtBQUs7QUFBQSxFQUM5QyxNQUFNLFdBQVcsR0FBc0QsSUFBSTtBQUFBLEVBRTNFLEdBQVUsTUFBTTtBQUFBLElBQ2QsSUFBSSxTQUFTO0FBQUEsTUFBUSxTQUFTLE1BQU0sS0FBSztBQUFBLEtBQ3hDLENBQUMsTUFBTSxPQUFPLElBQUksQ0FBQztBQUFBLEVBRXRCLEdBQVUsTUFBTTtBQUFBLElBR2QsSUFBSSxTQUFTLFVBQVUsQ0FBQyxRQUFRLFNBQVMsU0FBUztBQUFBLE1BQ2hELFNBQVMsUUFBUSxNQUFNO0FBQUEsTUFDdkIsU0FBUyxRQUFRLFNBQVM7QUFBQSxJQUM1QjtBQUFBLEtBQ0MsQ0FBQyxNQUFNLElBQUksQ0FBQztBQUFBLEVBRWYsTUFBTSxZQUFZLEdBQVksTUFBTTtBQUFBLElBQ2xDLElBQUksTUFBTTtBQUFBLE1BQVU7QUFBQSxJQUNwQixTQUFTLE1BQU0sS0FBSztBQUFBLElBQ3BCLFFBQVEsTUFBTTtBQUFBLEtBQ2IsQ0FBQyxNQUFNLFVBQVUsTUFBTSxLQUFLLENBQUM7QUFBQSxFQUVoQyxNQUFNLFNBQVMsR0FDYixDQUFDLFNBQWlCO0FBQUEsSUFDaEIsSUFBSSxTQUFTLE1BQU0sT0FBTztBQUFBLE1BQ3hCLGVBQWUsTUFBTSxRQUFRLEtBQU0sTUFBTSxjQUFjLENBQUMsR0FBSSxPQUFPLEtBQUssQ0FBQztBQUFBLElBQzNFO0FBQUEsSUFHQSxJQUFJLENBQUM7QUFBQSxNQUFNLFFBQVEsTUFBTTtBQUFBLEtBRTNCLENBQUMsTUFBTSxRQUFRLE1BQU0sWUFBWSxNQUFNLE9BQU8sSUFBSSxDQUNwRDtBQUFBLEVBRUEsTUFBTSxTQUFTLEdBQVksTUFBTTtBQUFBLElBQy9CLFNBQVMsTUFBTSxLQUFLO0FBQUEsSUFDcEIsSUFBSSxDQUFDO0FBQUEsTUFBTSxRQUFRLE1BQU07QUFBQSxLQUN4QixDQUFDLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFBQSxFQUd0QixNQUFNLFlBQVksQ0FBQyxVQUE2RTtBQUFBLElBQzlGLElBQUksTUFBTSxRQUFRLFVBQVU7QUFBQSxNQUMxQixNQUFNLGVBQWU7QUFBQSxNQUNyQixPQUFPO0FBQUEsTUFDUDtBQUFBLElBQ0Y7QUFBQSxJQUNBLElBQUksTUFBTSxRQUFRLFNBQVM7QUFBQSxNQUN6QixNQUFNLE1BQU0sTUFBTSxXQUFXLE1BQU07QUFBQSxNQUNuQyxJQUFJLFdBQVcsV0FBVyxZQUFZLFVBQVU7QUFBQSxRQUM5QyxNQUFNLGVBQWU7QUFBQSxRQUNyQixPQUFPLEtBQUs7QUFBQSxNQUNkLEVBQU8sU0FBSyxXQUFXLFdBQVcsWUFBWSxXQUFXLE9BQVEsV0FBVyxhQUFhO0FBQUEsUUFDdkYsSUFBSSxLQUFLO0FBQUEsVUFDUCxNQUFNLGVBQWU7QUFBQSxVQUNyQixPQUFPLEtBQUs7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQTtBQUFBLEVBR0YsTUFBTSxZQUFZLE1BQU0sWUFBWSxHQUFHLDJCQUFRLFdBQVcsTUFBTSxjQUFjLDJCQUFRO0FBQUEsRUFJdEYsTUFBTSxjQUFjLG1CQUFtQixLQUFLO0FBQUEsRUFFNUMsSUFBSSxTQUFTLFFBQVE7QUFBQSxJQUNuQixNQUFNLFdBQVcsTUFBTSxhQUFhLE1BQU0sV0FBVyxNQUFNLEtBQUssSUFBSSxNQUFNO0FBQUEsSUFDMUUsTUFBTSxVQUFVLE1BQU0sTUFBTSxXQUFXO0FBQUEsSUFDdkMsdUJBRUUsR0F5QkUsT0F6QkY7QUFBQSxTQUNNO0FBQUEsTUFDSixPQUFPLEdBQUcsYUFBYSwyQkFBUTtBQUFBLE1BQy9CLGlCQUFhO0FBQUEsTUFDYiwyQkFBdUI7QUFBQSxNQUN2QiwwQkFBc0I7QUFBQSxNQUN0QixjQUFZLFVBQVUsVUFBVTtBQUFBLE1BQ2hDLGdCQUFjO0FBQUEsTUFDZCxVQUFVLE1BQU0sV0FBVyxLQUFLO0FBQUEsTUFDaEMsTUFBSztBQUFBLE1BQ0wsY0FBWSxNQUFNLGFBQWE7QUFBQSxNQUMvQixpQkFBZSxNQUFNLFdBQVcsU0FBUztBQUFBLE1BQ3pDLFNBQVM7QUFBQSxNQUNULFdBQVcsQ0FBQyxNQUFNO0FBQUEsUUFDaEIsSUFBSSxFQUFFLFFBQVEsV0FBVyxFQUFFLFFBQVEsS0FBSztBQUFBLFVBQ3RDLEVBQUUsZUFBZTtBQUFBLFVBQ2pCLFVBQVU7QUFBQSxRQUNaO0FBQUE7QUFBQSxNQWpCSixVQW9CRyxXQUFXLE1BQU0sOEJBQ2hCLEdBQTBELFFBQTFEO0FBQUEsUUFBTSxPQUFPLDJCQUFRO0FBQUEsUUFBckIsVUFBc0MsTUFBTTtBQUFBLFNBQTVDLGlDQUEwRCxJQUUxRDtBQUFBLE9BdkJKLGlDQXlCRTtBQUFBLEVBRU47QUFBQSxFQUVBLE1BQU0sU0FBUztBQUFBLE9BQ1Y7QUFBQSxJQUNILE9BQU8sR0FBRywyQkFBUSxXQUFXLDJCQUFRO0FBQUEsSUFDckMsaUJBQWlCO0FBQUEsSUFDakIsMkJBQTJCO0FBQUEsSUFDM0IsY0FBYztBQUFBLElBQ2QsZ0JBQWdCO0FBQUEsSUFDaEIsYUFBYSxNQUFNO0FBQUEsSUFDbkIsT0FBTztBQUFBLElBQ1AsU0FBUyxDQUFDLE1BQWlFO0FBQUEsTUFDekUsTUFBTSxPQUFPLEVBQUUsY0FBYztBQUFBLE1BQzdCLFNBQVMsSUFBSTtBQUFBLE1BQ2IsSUFBSTtBQUFBLFFBQU0sT0FBTyxJQUFJO0FBQUE7QUFBQSxJQUV2QixRQUFRLE1BQU07QUFBQSxNQUNaLElBQUksV0FBVztBQUFBLFFBQVEsT0FBTyxLQUFLO0FBQUEsTUFDOUIsU0FBSSxDQUFDO0FBQUEsUUFBTSxPQUFPO0FBQUE7QUFBQSxJQUV6QjtBQUFBLElBQ0EsY0FBYyxNQUFNLGFBQWE7QUFBQSxJQUNqQyxVQUFVLE1BQU07QUFBQSxFQUNsQjtBQUFBLEVBRUEsSUFBSSxZQUFZLFNBQVM7QUFBQSxJQUN2Qix1QkFDRSxHQUFDLFlBQUQ7QUFBQSxNQUNFLEtBQUssQ0FBQyxPQUFPO0FBQUEsUUFDWCxTQUFTLFVBQVU7QUFBQTtBQUFBLFNBRWhCO0FBQUEsT0FKUCxpQ0FLQTtBQUFBLEVBRUo7QUFBQSxFQUNBLHVCQUNFLEdBQUMsU0FBRDtBQUFBLElBQ0UsS0FBSyxDQUFDLE9BQU87QUFBQSxNQUNYLFNBQVMsVUFBVTtBQUFBO0FBQUEsSUFFckIsTUFBTSxNQUFNLGFBQWE7QUFBQSxPQUNwQjtBQUFBLEtBTFAsaUNBTUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7OztBQzdIRyxTQUFTLE1BQU0sQ0FBQyxPQUFpQztBQUFBLEVBQ3REO0FBQUEsSUFDRTtBQUFBLElBQ0EsS0FBSztBQUFBLElBQ0w7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLE1BQ0U7QUFBQSxFQUVKLE1BQU0sUUFBZ0MsQ0FBQztBQUFBLEVBRXZDLElBQUksVUFBVTtBQUFBLElBQ1osTUFBTSxhQUFhO0FBQUEsRUFDckIsRUFBTyxTQUFJLFNBQVM7QUFBQSxJQUNsQixNQUFNLGFBQWE7QUFBQSxJQUNuQixNQUFNLGNBQWM7QUFBQSxJQUNwQixJQUFJO0FBQUEsTUFBUyxNQUFNLFdBQVc7QUFBQSxJQUM5QixJQUFJO0FBQUEsTUFBWSxNQUFNLFlBQVk7QUFBQSxJQUNsQyxJQUFJO0FBQUEsTUFBSyxNQUFNLGFBQWE7QUFBQSxFQUM5QixFQUFPO0FBQUEsSUFDTCxJQUFJO0FBQUEsTUFBUyxNQUFNLFdBQVc7QUFBQSxJQUM5QixJQUFJO0FBQUEsTUFBUSxNQUFNLFdBQVc7QUFBQSxJQUM3QixJQUFJO0FBQUEsTUFBVyxNQUFNLFlBQVk7QUFBQSxJQUNqQyxJQUFJO0FBQUEsTUFBZSxNQUFNLGFBQWE7QUFBQSxJQUN0QyxJQUFJO0FBQUEsTUFBTSxNQUFNLGNBQWM7QUFBQSxJQUM5QixJQUFJO0FBQUEsTUFBUyxNQUFNLGNBQWM7QUFBQSxJQUNqQyxJQUFJO0FBQUEsTUFBSyxNQUFNLGFBQWE7QUFBQSxJQUM1QixJQUFJO0FBQUEsTUFBYyxNQUFNLFlBQVk7QUFBQSxJQUNwQyxJQUFJO0FBQUEsTUFBWSxNQUFNLFlBQVk7QUFBQSxJQUNsQyxJQUFJO0FBQUEsTUFBZ0IsTUFBTSxZQUFZO0FBQUEsSUFDdEMsSUFBSTtBQUFBLE1BQWMsTUFBTSxZQUFZO0FBQUEsSUFDcEMsSUFBSTtBQUFBLE1BQVUsTUFBTSxjQUFjO0FBQUEsSUFDbEMsSUFBSTtBQUFBLE1BQVUsTUFBTSxlQUFlO0FBQUEsSUFDbkMsSUFBSTtBQUFBLE1BQWEsTUFBTSxlQUFlO0FBQUE7QUFBQSxFQUV4QyxJQUFJO0FBQUEsSUFBYSxNQUFNLFlBQVk7QUFBQSxFQUNuQyxJQUFJO0FBQUEsSUFBVyxNQUFNLFlBQVk7QUFBQSxFQUVqQyxNQUFNLFlBQVksQ0FBQyxzQkFBUSxTQUFTO0FBQUEsRUFDcEMsSUFBSTtBQUFBLElBQVEsVUFBVSxLQUFLLHNCQUFRLFNBQVM7QUFBQSxFQUM1QyxJQUFJO0FBQUEsSUFBZSxVQUFVLEtBQUssc0JBQVEsZ0JBQWdCO0FBQUEsRUFDMUQsTUFBTSxZQUFZLFVBQVUsT0FBTyxPQUFPLEVBQUUsS0FBSyxHQUFHO0FBQUEsRUFDcEQsTUFBTSxXQUFXLFdBQVcsWUFBWSxZQUFZLEdBQUcsYUFBYSxjQUFjO0FBQUEsRUFFbEYsT0FBTyxFQUNMLElBQ0E7QUFBQSxPQUdLLG1CQUFtQixLQUFLO0FBQUEsSUFDM0I7QUFBQSxJQUNBLFdBQVc7QUFBQSxJQUNYO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLEtBQUs7QUFBQSxJQUNMO0FBQUEsSUFDQTtBQUFBLElBQ0EsY0FBYyxNQUFNO0FBQUEsSUFDcEIsbUJBQW1CLE1BQU07QUFBQSxJQUN6QixvQkFBb0IsTUFBTTtBQUFBLElBQzFCLHFCQUFxQjtBQUFBLEVBQ3ZCLEdBQ0EsUUFDRjtBQUFBOzs7QUNySUYsSUFBSSxrQkFBa0I7QUFHdEIsSUFBTSxXQUFXO0FBRWpCLElBQU0sbUJBQW1CO0FBRWxCLFNBQVMsUUFBUSxDQUFDLE9BQW1DO0FBQUEsRUFDMUQ7QUFBQSxJQUNFO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFFBQVE7QUFBQSxJQUNSLGNBQWM7QUFBQSxJQUNkO0FBQUEsSUFDQTtBQUFBLElBQ0Esa0JBQWtCO0FBQUEsSUFDbEI7QUFBQSxJQUNBO0FBQUEsTUFDRTtBQUFBLEVBRUosTUFBTSxVQUFVLEdBQXVCLElBQUk7QUFBQSxFQUMzQyxNQUFNLGFBQWEsR0FBMEIsSUFBSTtBQUFBLEVBQ2pELE1BQU0sUUFBUSxHQUFPLGtCQUFrQixFQUFFLGlCQUFpQjtBQUFBLEVBQzFELE1BQU0sWUFBWSxNQUFNO0FBQUEsRUFFeEIsR0FBVSxNQUFNO0FBQUEsSUFDZCxXQUFXLFNBQVMsYUFBYSxpQkFBaUIsU0FBUztBQUFBLEtBQzFELENBQUMsU0FBUyxDQUFDO0FBQUEsRUFFZCxHQUFVLE1BQU07QUFBQSxJQUNkLE1BQU0sT0FBTyxRQUFRO0FBQUEsSUFDckIsSUFBSSxDQUFDO0FBQUEsTUFBTTtBQUFBLElBQ1gsTUFBTSxpQkFBaUIsQ0FBQyxNQUFtQjtBQUFBLE1BQ3pDLElBQUksYUFBYSxlQUFlLEVBQUUsUUFBUSxPQUFPLFdBQVc7QUFBQSxRQUMxRCxPQUFPLFFBQVE7QUFBQSxNQUNqQjtBQUFBO0FBQUEsSUFFRixLQUFLLGlCQUFpQixpQkFBaUIsY0FBYztBQUFBLElBQ3JELE9BQU8sTUFBTTtBQUFBLE1BQ1gsS0FBSyxvQkFBb0IsaUJBQWlCLGNBQWM7QUFBQTtBQUFBLEtBRXpELENBQUMsV0FBVyxNQUFNLENBQUM7QUFBQSxFQUV0QixHQUFVLE1BQU07QUFBQSxJQUNkLE1BQU0sT0FBTyxRQUFRO0FBQUEsSUFDckIsTUFBTSxVQUFVLFdBQVc7QUFBQSxJQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDO0FBQUEsTUFBUztBQUFBLElBTXZCLE1BQU0sZUFBZSxNQUFZO0FBQUEsTUFDL0IsTUFBTSxJQUFJLFFBQVEsc0JBQXNCO0FBQUEsTUFNeEMsTUFBTSxjQUFjLEtBQUssTUFBTTtBQUFBLE1BQy9CLEtBQUssTUFBTSxZQUFZO0FBQUEsTUFDdkIsS0FBSyxNQUFNLFVBQVU7QUFBQSxNQUNyQixNQUFNLFlBQVksS0FBSztBQUFBLE1BQ3ZCLE1BQU0sYUFBYSxLQUFLO0FBQUEsTUFDeEIsS0FBSyxNQUFNLFVBQVU7QUFBQSxNQUVyQixNQUFNLGdCQUFnQixTQUFTLGdCQUFnQjtBQUFBLE1BQy9DLE1BQU0saUJBQWlCLFNBQVMsZ0JBQWdCO0FBQUEsTUFPaEQsTUFBTSxRQUNKLGlCQUFpQixPQUFPLEVBQUUsY0FBYyxTQUFTLFNBQVMsZ0JBQWdCLFFBQVE7QUFBQSxNQUNwRixNQUFNLGdCQUFpQixTQUFTLFVBQVUsVUFBVyxVQUFVO0FBQUEsTUFDL0QsSUFBSSxPQUFPLGdCQUFnQixFQUFFLFFBQVEsWUFBWSxFQUFFO0FBQUEsTUFDbkQsTUFBTSxVQUFVLEtBQUssSUFBSSxrQkFBa0IsZ0JBQWdCLFlBQVksZ0JBQWdCO0FBQUEsTUFDdkYsT0FBTyxLQUFLLElBQUksS0FBSyxJQUFJLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTztBQUFBLE1BS3pELE1BQU0sYUFBYSxpQkFBaUIsRUFBRSxTQUFTLFdBQVc7QUFBQSxNQUMxRCxNQUFNLGFBQWEsRUFBRSxNQUFNLFdBQVc7QUFBQSxNQUN0QyxJQUFJO0FBQUEsTUFDSixJQUFJLGNBQWMsY0FBYyxjQUFjLFlBQVk7QUFBQSxRQUN4RCxNQUFNLEVBQUUsU0FBUztBQUFBLFFBQ2pCLElBQUksYUFBYSxZQUFZO0FBQUEsVUFDM0IsS0FBSyxNQUFNLFlBQVksR0FBRyxLQUFLLElBQUksWUFBWSxDQUFDO0FBQUEsUUFDbEQ7QUFBQSxNQUNGLEVBQU87QUFBQSxRQUNMLE1BQU0sWUFBWSxLQUFLLElBQUksWUFBWSxDQUFDO0FBQUEsUUFDeEMsS0FBSyxNQUFNLFlBQVksR0FBRztBQUFBLFFBQzFCLE1BQU0sRUFBRSxNQUFNLFdBQVcsS0FBSyxJQUFJLFlBQVksU0FBUztBQUFBO0FBQUEsTUFHekQsS0FBSyxNQUFNLFdBQVc7QUFBQSxNQUN0QixLQUFLLE1BQU0sU0FBUztBQUFBLE1BQ3BCLEtBQUssTUFBTSxPQUFPLEdBQUc7QUFBQSxNQUNyQixLQUFLLE1BQU0sTUFBTSxHQUFHO0FBQUE7QUFBQSxJQUd0QixNQUFNLGlCQUFpQixDQUFDLE1BQW1CO0FBQUEsTUFDekMsSUFBSSxjQUFjLEtBQUssRUFBRSxhQUFhLFFBQVE7QUFBQSxRQUM1QyxhQUFhO0FBQUEsTUFDZjtBQUFBO0FBQUEsSUFFRixNQUFNLGVBQWUsTUFBWTtBQUFBLE1BQy9CLElBQUksS0FBSyxRQUFRLGVBQWU7QUFBQSxRQUFHLGFBQWE7QUFBQTtBQUFBLElBR2xELEtBQUssaUJBQWlCLGdCQUFnQixjQUFjO0FBQUEsSUFDcEQsT0FBTyxpQkFBaUIsVUFBVSxjQUFjLElBQUk7QUFBQSxJQUNwRCxPQUFPLGlCQUFpQixVQUFVLFlBQVk7QUFBQSxJQUM5QyxPQUFPLE1BQU07QUFBQSxNQUNYLEtBQUssb0JBQW9CLGdCQUFnQixjQUFjO0FBQUEsTUFDdkQsT0FBTyxvQkFBb0IsVUFBVSxjQUFjLElBQUk7QUFBQSxNQUN2RCxPQUFPLG9CQUFvQixVQUFVLFlBQVk7QUFBQTtBQUFBLEtBRWxELENBQUMsS0FBSyxDQUFDO0FBQUEsRUFFVixnQkFBZ0IsTUFBTTtBQUFBLElBQ3BCLE1BQU0sT0FBTyxRQUFRO0FBQUEsSUFDckIsSUFBSSxDQUFDO0FBQUEsTUFBTTtBQUFBLElBQ1gsSUFBSSxPQUFPLFNBQVMsQ0FBQyxLQUFLLFFBQVEsZUFBZSxHQUFHO0FBQUEsTUFDbEQsS0FBSyxZQUFZO0FBQUEsSUFDbkIsRUFBTyxTQUFJLENBQUMsT0FBTyxTQUFTLEtBQUssUUFBUSxlQUFlLEdBQUc7QUFBQSxNQUN6RCxLQUFLLFlBQVk7QUFBQSxJQUNuQjtBQUFBLEdBQ0Q7QUFBQSxFQUVELE1BQU0sZUFBZSxDQUFDLE1BQW1CO0FBQUEsSUFDdkMsSUFBSSxjQUFjLEdBQUc7QUFBQSxNQUNuQixPQUFPLFFBQVMsRUFBc0MsYUFBYTtBQUFBLElBQ3JFO0FBQUE7QUFBQSxFQUdGLE1BQU0sa0JBQWtCLE1BQVk7QUFBQSxJQUNsQyxJQUFJLENBQUMsYUFBYTtBQUFBLE1BQ2hCLE9BQU8sUUFBUTtBQUFBLElBQ2pCO0FBQUE7QUFBQSxFQUdGLE1BQU0sZ0JBQWdCLENBQUMsTUFBMkI7QUFBQSxJQUNoRCxJQUFJLEVBQUUsUUFBUSxVQUFVO0FBQUEsTUFDdEIsT0FBTyxRQUFRO0FBQUEsSUFDakI7QUFBQTtBQUFBLEVBR0YsTUFBTSxRQUFRLENBQUMsd0JBQVEsZUFBZSxFQUFFO0FBQUEsRUFDeEMsSUFBSTtBQUFBLElBQVcsTUFBTSxLQUFLLFNBQVM7QUFBQSxFQUVuQyx1QkFDRSxHQTRCRSxPQTVCRjtBQUFBLElBQUs7QUFBQSxJQUFRLE9BQU8sTUFBTSxPQUFPLE9BQU8sRUFBRSxLQUFLLEdBQUc7QUFBQSxJQUFHLGlCQUFhO0FBQUEsSUFBQyx1QkFBbUI7QUFBQSxJQUF0RixVQTRCRTtBQUFBLHNCQTNCQSxHQVNFLFVBVEY7QUFBQSxRQUNFLEtBQUs7QUFBQSxRQUNMLE1BQUs7QUFBQSxRQUNMLE9BQU8sb0JBQW9CLHdCQUFRLGNBQWM7QUFBQSxRQUNqRCxVQUFVO0FBQUEsUUFDVixPQUFPO0FBQUEsUUFDUCxhQUFXLE9BQU8sUUFBUSxTQUFTO0FBQUEsUUFOckMsVUFRRztBQUFBLFNBUkgsaUNBU0U7QUFBQSxzQkFDRixHQWdCRSxPQWhCRjtBQUFBLFFBQ0UsS0FBSztBQUFBLFFBQ0wsSUFBSTtBQUFBLFFBQ0osTUFBSztBQUFBLFFBQ0wsd0JBQXNCLGNBQWMsU0FBUztBQUFBLFFBQzdDLE9BQU8sd0JBQVEsV0FBVztBQUFBLFFBQzFCLGNBQVk7QUFBQSxRQUNaLFNBQVE7QUFBQSxRQUNSLG1CQUFpQjtBQUFBLFFBQ2pCLFVBQVU7QUFBQSxRQUNWLFNBQVM7QUFBQSxRQUNULFdBQVc7QUFBQSxRQVhiLDBCQWFFLEdBRUUsUUFGRjtBQUFBLFVBQVEsTUFBSztBQUFBLFVBQU8sS0FBSTtBQUFBLFVBQXhCO0FBQUEsNENBRUU7QUFBQSxTQWZKLGlDQWdCRTtBQUFBO0FBQUEsS0EzQkosZ0NBNEJFO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN0TUMsU0FBUyxhQUFhLENBQUMsT0FBd0M7QUFBQSxFQUNwRSxRQUFRLE9BQU8sUUFBUSxNQUFNLEtBQUssVUFBVTtBQUFBLEVBQzVDLHVCQUNFLEdBZ0JFLFFBaEJGO0FBQUEsSUFDRTtBQUFBLElBQ0EsUUFBTTtBQUFBLElBR04sU0FBUyxRQUFRLGFBQWE7QUFBQSxPQUN6QixRQUFRLEVBQUUsS0FBSyx3QkFBd0IsSUFBSSxDQUFDO0FBQUEsSUFDakQsWUFBVztBQUFBLElBQ1gsZUFBYztBQUFBLElBUmhCLFVBZ0JFO0FBQUEsc0JBSkEsR0FFRSxRQUZGO0FBQUEsUUFBTSxPQUFPLHNCQUFRO0FBQUEsUUFBaUIsMkJBQXVCO0FBQUEsUUFBN0QsVUFDRztBQUFBLFNBREgsaUNBRUU7QUFBQSxNQUNELHlCQUFTLEdBQUMsUUFBRDtBQUFBLFFBQU0sT0FBTyxzQkFBUTtBQUFBLFFBQVUsZUFBWTtBQUFBLFNBQTNDLGlDQUFrRDtBQUFBO0FBQUEsS0FmOUQsZ0NBZ0JFO0FBQUE7OztBQ0xOLFNBQVMsUUFBUSxDQUFDLFNBQWlDLE9BQW1DO0FBQUEsRUFDcEYsV0FBVyxPQUFPLFNBQVM7QUFBQSxJQUN6QixJQUFJLElBQUksVUFBVTtBQUFBLE1BQU8sT0FBTyxJQUFJO0FBQUEsRUFDdEM7QUFBQSxFQUNBO0FBQUE7QUFHSyxTQUFTLFlBQVksQ0FBQyxPQUF1QztBQUFBLEVBQ2xFO0FBQUEsSUFDRTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLE9BQU87QUFBQSxJQUNQO0FBQUEsSUFDQTtBQUFBLE1BQ0U7QUFBQSxFQUVKLE1BQU0sU0FBUyxVQUFVLEtBQUs7QUFBQSxFQUU5QixNQUFNLFVBQVUsU0FBUyxTQUFTLEtBQUs7QUFBQSxFQUN2QyxNQUFNLFVBQVUsWUFBWTtBQUFBLEVBQzVCLE1BQU0sY0FBYyxXQUFXO0FBQUEsRUFFL0IsTUFBTSxTQUFTLENBQUMsU0FBdUI7QUFBQSxJQUNyQyxPQUFPLFFBQVE7QUFBQSxJQUNmLElBQUksU0FBUztBQUFBLE1BQU87QUFBQSxJQUNwQixlQUFlLFFBQVEsS0FBTSxjQUFjLENBQUMsR0FBSSxPQUFPLEtBQUssQ0FBQztBQUFBO0FBQUEsRUFHL0QsTUFBTSxlQUFlLENBQUMsc0JBQVEsY0FBYyxFQUFFO0FBQUEsRUFDOUMsSUFBSTtBQUFBLElBQVMsYUFBYSxLQUFLLHNCQUFRLGtCQUFrQixFQUFFO0FBQUEsRUFDM0QsSUFBSTtBQUFBLElBQU0sYUFBYSxLQUFLLHNCQUFRLGtCQUFrQixFQUFFO0FBQUEsRUFDeEQsTUFBTSxlQUFlLGFBQWEsT0FBTyxPQUFPLEVBQUUsS0FBSyxHQUFHO0FBQUEsRUFFMUQsTUFBTSxRQUFRLENBQUMsc0JBQVEsYUFBYSxFQUFFO0FBQUEsRUFDdEMsSUFBSTtBQUFBLElBQVcsTUFBTSxLQUFLLFNBQVM7QUFBQSxFQUVuQyx1QkFDRSxHQXdDRSxPQXhDRjtBQUFBLE9BQ00sbUJBQW1CLEtBQUs7QUFBQSxJQUM1QjtBQUFBLElBQ0EsT0FBTyxNQUFNLE9BQU8sT0FBTyxFQUFFLEtBQUssR0FBRztBQUFBLElBQ3JDLGlCQUFhO0FBQUEsSUFDYiw0QkFBd0I7QUFBQSxJQUN4QixjQUFZLFVBQVUsVUFBVTtBQUFBLElBTmxDLFVBd0NFO0FBQUEsTUFoQ0MsVUFBVSw2QkFBYSxHQUF3QyxRQUF4QztBQUFBLFFBQU0sT0FBTyxzQkFBUTtBQUFBLFFBQXJCLFVBQWdDO0FBQUEsU0FBaEMsaUNBQXdDO0FBQUEsTUFDL0QsMkJBQ0MsR0FFRSxRQUZGO0FBQUEsUUFBTSxPQUFPO0FBQUEsUUFBYyxpQkFBYztBQUFBLFFBQU8sT0FBTztBQUFBLFFBQXZELDBCQUNFLEdBQUMsZUFBRDtBQUFBLFVBQWUsSUFBRztBQUFBLFVBQU8sT0FBTztBQUFBLFVBQU8sT0FBTztBQUFBLFdBQTlDLGlDQUEyRDtBQUFBLFNBRDdELGlDQUVFLG9CQUVGLEdBd0JFLFVBeEJGO0FBQUEsUUFDRTtBQUFBLFFBQ0Esa0JBQWtCO0FBQUEsUUFDbEIsY0FBYztBQUFBLFFBQ2QseUJBQVMsR0FBQyxlQUFEO0FBQUEsVUFBZSxPQUFPO0FBQUEsV0FBdEIsaUNBQW1DO0FBQUEsUUFKOUMsVUFNRyxRQUFRLElBQUksQ0FBQyxRQUFRO0FBQUEsVUFDcEIsTUFBTSxhQUFhLElBQUksVUFBVTtBQUFBLFVBQ2pDLE1BQU0sV0FBVyxhQUNiLEdBQUcsc0JBQVEsYUFBYSxzQkFBUSxzQkFDaEMsc0JBQVE7QUFBQSxVQUNaLHVCQUNFLEdBU0UsVUFURjtBQUFBLFlBRUUsTUFBSztBQUFBLFlBQ0wsTUFBSztBQUFBLFlBQ0wsT0FBTztBQUFBLFlBQ1AsaUJBQWUsYUFBYSxTQUFTO0FBQUEsWUFDckMsU0FBUyxNQUFNLE9BQU8sSUFBSSxLQUFLO0FBQUEsWUFOakMsMEJBUUUsR0FBbUIsUUFBbkI7QUFBQSx3QkFBTyxJQUFJO0FBQUEsZUFBWCxpQ0FBbUI7QUFBQSxhQVBkLElBQUksT0FEWCxzQkFTRTtBQUFBLFNBRUw7QUFBQSxTQXZCSCxpQ0F3QkU7QUFBQTtBQUFBLEtBdENOLGdDQXdDRTtBQUFBOzs7Ozs7Ozs7OztBQzNHTixTQUFTLFlBQVksQ0FBQyxTQUEyQztBQUFBLEVBQy9ELElBQUksWUFBWTtBQUFBLElBQVEsT0FBTyxxQkFBUTtBQUFBLEVBQ3ZDLElBQUksWUFBWTtBQUFBLElBQVcsT0FBTyxxQkFBUTtBQUFBLEVBQzFDLElBQUksWUFBWTtBQUFBLElBQVcsT0FBTyxxQkFBUTtBQUFBLEVBQzFDLElBQUksWUFBWTtBQUFBLElBQVUsT0FBTyxxQkFBUTtBQUFBLEVBQ3pDO0FBQUE7QUFHSyxTQUFTLEtBQUssQ0FBQyxPQUFnQztBQUFBLEVBQ3BELFFBQVEsVUFBVSxVQUFVLFdBQVcsV0FBVyxJQUFJLFVBQVU7QUFBQSxFQUNoRSxNQUFNLFFBQVEsQ0FBQyxxQkFBUSxRQUFRO0FBQUEsRUFDL0IsTUFBTSxJQUFJLGFBQWEsT0FBTztBQUFBLEVBQzlCLElBQUk7QUFBQSxJQUFHLE1BQU0sS0FBSyxDQUFDO0FBQUEsRUFDbkIsSUFBSTtBQUFBLElBQVcsTUFBTSxLQUFLLFNBQVM7QUFBQSxFQUNuQyx1QkFDRSxHQUVFLFFBRkY7QUFBQSxJQUFNO0FBQUEsSUFBUTtBQUFBLElBQWMsT0FBTyxNQUFNLEtBQUssR0FBRztBQUFBLElBQUcsaUJBQWE7QUFBQSxJQUFDLG9CQUFrQjtBQUFBLElBQXBGO0FBQUEsc0NBRUU7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzhETixTQUFTLFNBQVMsQ0FBQyxNQUFzQztBQUFBLEVBQ3ZELElBQUksU0FBUztBQUFBLElBQVcsT0FBTyxzQkFBUTtBQUFBLEVBQ3ZDLElBQUksU0FBUztBQUFBLElBQVksT0FBTyxzQkFBUTtBQUFBLEVBQ3hDLE9BQU8sc0JBQVE7QUFBQTtBQUdqQixTQUFTLFVBQVUsQ0FBQyxPQUF3QztBQUFBLEVBQzFELElBQUksVUFBVTtBQUFBLElBQVEsT0FBTyxzQkFBUTtBQUFBLEVBQ3JDLElBQUksVUFBVTtBQUFBLElBQVcsT0FBTyxzQkFBUTtBQUFBLEVBQ3hDLElBQUksVUFBVTtBQUFBLElBQVcsT0FBTyxzQkFBUTtBQUFBLEVBQ3hDLElBQUksVUFBVTtBQUFBLElBQVUsT0FBTyxzQkFBUTtBQUFBLEVBQ3ZDO0FBQUE7QUFHRixTQUFTLFNBQVMsQ0FBQyxNQUFzQztBQUFBLEVBQ3ZELElBQUksU0FBUztBQUFBLElBQVMsT0FBTyxzQkFBUTtBQUFBLEVBQ3JDLElBQUksU0FBUztBQUFBLElBQVMsT0FBTyxzQkFBUTtBQUFBLEVBQ3JDO0FBQUE7QUFJSyxTQUFTLE1BQU0sQ0FBQyxPQUFpQztBQUFBLEVBQ3REO0FBQUEsSUFDRTtBQUFBLElBQ0EsT0FBTztBQUFBLElBQ1AsUUFBUTtBQUFBLElBQ1IsT0FBTztBQUFBLElBQ1AsV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLElBQ1YsUUFBUTtBQUFBLElBQ1I7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxNQUNFO0FBQUEsRUFFSixNQUFNLFFBQVEsQ0FBQyxzQkFBUSxVQUFVLEVBQUU7QUFBQSxFQUNuQyxNQUFNLEtBQUssVUFBVSxJQUFJO0FBQUEsRUFDekIsSUFBSTtBQUFBLElBQUksTUFBTSxLQUFLLEVBQUU7QUFBQSxFQUNyQixNQUFNLEtBQUssV0FBVyxLQUFLO0FBQUEsRUFDM0IsSUFBSTtBQUFBLElBQUksTUFBTSxLQUFLLEVBQUU7QUFBQSxFQUNyQixNQUFNLEtBQUssVUFBVSxJQUFJO0FBQUEsRUFDekIsSUFBSTtBQUFBLElBQUksTUFBTSxLQUFLLEVBQUU7QUFBQSxFQUNyQixJQUFJO0FBQUEsSUFBUSxNQUFNLEtBQUssc0JBQVEsZ0JBQWdCLEVBQUU7QUFBQSxFQUNqRCxJQUFJO0FBQUEsSUFBVyxNQUFNLEtBQUssc0JBQVEsbUJBQW1CLEVBQUU7QUFBQSxFQUN2RCxJQUFJO0FBQUEsSUFBUyxNQUFNLEtBQUssc0JBQVEsaUJBQWlCLEVBQUU7QUFBQSxFQUNuRCxJQUFJO0FBQUEsSUFBTyxNQUFNLEtBQUssc0JBQVEsZUFBZSxFQUFFO0FBQUEsRUFDL0MsSUFBSTtBQUFBLElBQVcsTUFBTSxLQUFLLFNBQVM7QUFBQSxFQUNuQyxNQUFNLGNBQWMsTUFBTSxPQUFPLE9BQU8sRUFBRSxLQUFLLEdBQUc7QUFBQSxFQUtsRCxNQUFNLFVBQ0osU0FBUyxZQUNQLHdCQUVBLEdBR0UsUUFIRjtBQUFBLElBQVEsUUFBTTtBQUFBLElBQUMsU0FBUTtBQUFBLElBQVksS0FBSTtBQUFBLElBQXdCLFlBQVc7QUFBQSxJQUExRSxVQUdFO0FBQUEsc0JBRkEsR0FBc0MsUUFBdEM7QUFBQSxRQUFNLE9BQU8sc0JBQVE7QUFBQSxRQUFyQixVQUErQjtBQUFBLFNBQS9CLGlDQUFzQztBQUFBLE1BQ3JDLFVBQVUsNkJBQWEsR0FBd0MsUUFBeEM7QUFBQSxRQUFNLE9BQU8sc0JBQVE7QUFBQSxRQUFyQixVQUFnQztBQUFBLFNBQWhDLGlDQUF3QztBQUFBO0FBQUEsS0FGbEUsZ0NBR0U7QUFBQSxFQUdOLE1BQU0sYUFBYSxNQUFNO0FBQUEsRUFDekIsTUFBTSxZQUFZLE1BQU07QUFBQSxFQUl4QixNQUFNLGdCQUNKLFVBQ0MsT0FBTyxVQUFVLFlBQVksTUFBTSxTQUFTLElBQ3pDLFFBQ0EsT0FBTyxjQUFjLFdBQ25CLFlBQ0E7QUFBQSxFQUtSLE1BQU0sa0JBQTBDLENBQUM7QUFBQSxFQUNqRCxXQUFXLE9BQU8sT0FBTyxLQUFLLEtBQUssR0FBRztBQUFBLElBQ3BDLElBQUksSUFBSSxXQUFXLGNBQWMsR0FBRztBQUFBLE1BQ2xDLE1BQU0sUUFBUyxNQUE2QztBQUFBLE1BQzVELElBQUksT0FBTyxVQUFVLFVBQVU7QUFBQSxRQUM3QixnQkFBZ0IsT0FBTztBQUFBLE1BQ3pCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUVBLElBQUksVUFBVSxTQUFTLE1BQU0sTUFBTTtBQUFBLElBQ2pDLHVCQUNFLEdBZ0JFLEtBaEJGO0FBQUEsTUFDRTtBQUFBLE1BQ0EsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsTUFBTSxXQUFXLFlBQVksTUFBTTtBQUFBLE1BQ25DLFFBQVEsWUFBWSxRQUFRLE1BQU0sU0FBUztBQUFBLE1BQzNDLEtBQUssU0FBUyxRQUFRLE1BQU0sTUFBTTtBQUFBLE1BQ2xDLFVBQVUsY0FBYyxRQUFRLE1BQU0sV0FBVztBQUFBLE1BQ2pELGlCQUFlO0FBQUEsTUFDZixjQUFZO0FBQUEsTUFDWixpQkFBYTtBQUFBLE1BQ2IscUJBQW1CO0FBQUEsTUFDbkIsZUFBYTtBQUFBLFNBQ1Q7QUFBQSxNQWJOLFVBZUc7QUFBQSxPQWZILGlDQWdCRTtBQUFBLEVBRU47QUFBQSxFQUVBLE1BQU0sZUFDSixVQUFVLFNBQVMsTUFBTSxPQUFPLE1BQU0sT0FBTztBQUFBLEVBRS9DLHVCQUNFLEdBYUUsVUFiRjtBQUFBLElBQ0U7QUFBQSxJQUNBLE9BQU87QUFBQSxJQUNQLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOO0FBQUEsSUFDQSxjQUFZO0FBQUEsSUFDWixpQkFBYTtBQUFBLElBQ2IscUJBQW1CO0FBQUEsSUFDbkIsZUFBYTtBQUFBLE9BQ1Q7QUFBQSxJQVZOLFVBWUc7QUFBQSxLQVpILGlDQWFFO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0FDakZOLElBQU0sa0JBQTJEO0FBQUEsRUFDL0QsT0FBTyxDQUFDO0FBQUEsRUFDUixRQUFRO0FBQUEsSUFDTixZQUFZO0FBQUEsSUFDWixRQUFRO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUixRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sWUFBWTtBQUFBLElBQ1osUUFBUTtBQUFBLElBQ1IsUUFBUTtBQUFBLEVBQ1Y7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNOLFlBQVk7QUFBQSxJQUNaLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxFQUNYO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDSixRQUFRO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUixTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsRUFDVjtBQUFBLEVBQ0EsU0FBUztBQUFBLElBQ1AsUUFBUTtBQUFBLElBQ1IsUUFBUTtBQUFBLElBQ1IsU0FBUztBQUFBLEVBQ1g7QUFBQSxFQUNBLFVBQVU7QUFBQSxJQUNSLFVBQVU7QUFBQSxJQUNWLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLFlBQVk7QUFBQSxJQUNaLFFBQVE7QUFBQSxFQUNWO0FBQUEsRUFDQSxjQUFjO0FBQUEsSUFDWixVQUFVO0FBQUEsSUFDVixPQUFPO0FBQUEsSUFDUCxhQUFhO0FBQUEsSUFDYixRQUFRO0FBQUEsRUFDVjtBQUNGO0FBRUEsU0FBUyxPQUFPLENBQUMsR0FBdUI7QUFBQSxFQUN0QyxJQUFJLE1BQU07QUFBQSxJQUFVLE9BQU87QUFBQSxFQUMzQixJQUFJLE1BQU07QUFBQSxJQUFVLE9BQU87QUFBQSxFQUMzQixJQUFJLE1BQU07QUFBQSxJQUFlLE9BQU87QUFBQSxFQUNoQyxPQUFPO0FBQUE7QUFHVCxTQUFTLFdBQVcsQ0FBQyxHQUFtQjtBQUFBLEVBQ3RDLElBQUksTUFBTTtBQUFBLElBQVEsT0FBTztBQUFBLEVBQ3pCLE9BQU8sc0JBQXNCO0FBQUE7QUFHL0IsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFtQjtBQUFBLEVBQzNDLElBQUksTUFBTTtBQUFBLElBQVEsT0FBTztBQUFBLEVBQ3pCLElBQUksTUFBTTtBQUFBLElBQVUsT0FBTztBQUFBLEVBQzNCLE9BQU87QUFBQTtBQUdULFNBQVMsZ0JBQWdCLENBQUMsR0FBd0I7QUFBQSxFQUNoRCxJQUFJLE1BQU07QUFBQSxJQUFRLE9BQU87QUFBQSxFQUN6QixPQUFPLDRCQUE0QjtBQUFBO0FBR3JDLFNBQVMsV0FBVyxDQUFDLEdBQW1CO0FBQUEsRUFDdEMsSUFBSSxNQUFNO0FBQUEsSUFBUSxPQUFPO0FBQUEsRUFDekIsT0FBTyxzQkFBc0I7QUFBQTtBQUcvQixTQUFTLGdCQUFnQixDQUFDLE9BQXdDO0FBQUEsRUFDaEUsSUFBSSxVQUFVO0FBQUEsSUFBTztBQUFBLEVBQ3JCLElBQUksVUFBVTtBQUFBLElBQWUsT0FBTyx1QkFBUTtBQUFBLEVBQzVDLElBQUksVUFBVTtBQUFBLElBQWEsT0FBTyx1QkFBUTtBQUFBLEVBQzFDLElBQUksVUFBVTtBQUFBLElBQWdCLE9BQU8sdUJBQVE7QUFBQSxFQUM3QyxJQUFJLFVBQVU7QUFBQSxJQUFjLE9BQU8sdUJBQVE7QUFBQSxFQUMzQyxJQUFJLFVBQVU7QUFBQSxJQUFTLE9BQU8sdUJBQVE7QUFBQSxFQUN0QyxJQUFJLFVBQVU7QUFBQSxJQUFVLE9BQU8sdUJBQVE7QUFBQSxFQUN2QztBQUFBO0FBSUssU0FBUyxPQUFPLENBQUMsT0FBa0M7QUFBQSxFQUN4RCxRQUFRLFVBQVUsWUFBWTtBQUFBLEVBQzlCLE1BQU0sSUFBSSxnQkFBZ0I7QUFBQSxFQUUxQixNQUFNLEtBQUssTUFBTSxNQUFNO0FBQUEsRUFDdkIsTUFBTSxVQUFVLE1BQU0sV0FBVyxFQUFFO0FBQUEsRUFDbkMsTUFBTSxhQUFhLE1BQU0sY0FBYyxFQUFFO0FBQUEsRUFDekMsTUFBTSxTQUFTLE1BQU0sVUFBVSxFQUFFO0FBQUEsRUFDakMsTUFBTSxTQUFTLE1BQU0sVUFBVSxFQUFFO0FBQUEsRUFDakMsTUFBTSxjQUFjLE1BQU0sZUFBZSxFQUFFLGVBQWU7QUFBQSxFQUMxRCxNQUFNLFNBQVMsTUFBTSxVQUFVLEVBQUU7QUFBQSxFQUNqQyxNQUFNLFNBQVMsTUFBTSxVQUFVLEVBQUU7QUFBQSxFQUNqQyxNQUFNLFFBQVEsTUFBTSxTQUFTLEVBQUU7QUFBQSxFQUMvQixNQUFNLFNBQVMsTUFBTSxVQUFVLEVBQUU7QUFBQSxFQUNqQyxNQUFNLFlBQVksTUFBTSxhQUFhLEVBQUU7QUFBQSxFQUN2QyxNQUFNLGdCQUFnQixNQUFNLGlCQUFpQixFQUFFO0FBQUEsRUFDL0MsTUFBTSxXQUFXLE1BQU0sWUFBWSxFQUFFO0FBQUEsRUFDckMsTUFBTSxRQUFRLE1BQU0sU0FBUyxFQUFFO0FBQUEsRUFDL0IsTUFBTSxTQUFTLE1BQU0sVUFBVSxFQUFFO0FBQUEsRUFFakMsUUFBUSxXQUFXLFVBQVUsYUFBYSxXQUFXLGFBQWEsUUFBUSxrQkFBa0I7QUFBQSxFQUs1RixNQUFNLGNBQWUsV0FBVyxhQUFhLFdBQVcsVUFBVyxnQkFBZ0I7QUFBQSxFQUNuRixNQUFNLGNBQWMsTUFBTSxlQUFlLEVBQUUsZ0JBQWdCLGNBQWMsWUFBWTtBQUFBLEVBRXJGLE1BQU0sUUFBZ0MsQ0FBQztBQUFBLEVBQ3ZDLElBQUk7QUFBQSxJQUFTLE1BQU0sV0FBVztBQUFBLEVBQzlCLElBQUk7QUFBQSxJQUFZLE1BQU0sWUFBWSxRQUFRLFVBQVU7QUFBQSxFQUNwRCxJQUFJO0FBQUEsSUFBUSxNQUFNLGdCQUFnQixZQUFZLE1BQU07QUFBQSxFQUNwRCxJQUFJO0FBQUEsSUFBUSxNQUFNLHNCQUFzQixpQkFBaUIsTUFBTTtBQUFBLEVBRS9ELElBQUk7QUFBQSxJQUFhLE1BQU0sc0JBQXNCO0FBQUEsRUFDN0MsSUFBSTtBQUFBLElBQWEsTUFBTSxzQkFBc0IsaUJBQWlCLFdBQVc7QUFBQSxFQUN6RSxJQUFJO0FBQUEsSUFBUSxNQUFNLGdCQUFnQixZQUFZLE1BQU07QUFBQSxFQUNwRCxJQUFJO0FBQUEsSUFBYSxNQUFNLHNCQUFzQjtBQUFBLEVBQzdDLElBQUk7QUFBQSxJQUFlLE1BQU0sWUFBWTtBQUFBLEVBQ3JDLElBQUk7QUFBQSxJQUFPLE1BQU0sV0FBVztBQUFBLEVBQzVCLElBQUk7QUFBQSxJQUFRLE1BQU0sV0FBVztBQUFBLEVBQzdCLElBQUk7QUFBQSxJQUFXLE1BQU0sWUFBWTtBQUFBLEVBQ2pDLElBQUk7QUFBQSxJQUFXLE1BQU0sY0FBYztBQUFBLEVBQ25DLElBQUk7QUFBQSxJQUFlLE1BQU0sYUFBYTtBQUFBLEVBQ3RDLElBQUk7QUFBQSxJQUFVLE1BQU0sa0JBQWtCO0FBQUEsRUFDdEMsSUFBSTtBQUFBLElBQVUsTUFBTSxrQkFBa0I7QUFBQSxFQUN0QyxJQUFJO0FBQUEsSUFBTyxNQUFNLGVBQWU7QUFBQSxFQUNoQyxJQUFJO0FBQUEsSUFBVyxNQUFNLG1CQUFtQjtBQUFBLEVBQ3hDLElBQUksV0FBVztBQUFBLElBQVcsTUFBTSxXQUFXLE9BQU8sTUFBTTtBQUFBLEVBRXhELElBQUksTUFBTSxPQUFPO0FBQUEsSUFDZixPQUFPLE9BQU8sT0FBTyxNQUFNLEtBQTBDO0FBQUEsRUFDdkU7QUFBQSxFQUVBLE1BQU0sUUFBZ0MsQ0FBQyx1QkFBUSxVQUFVO0FBQUEsRUFDekQsSUFBSTtBQUFBLElBQVEsTUFBTSxLQUFLLHVCQUFRLFNBQVM7QUFBQSxFQUN4QyxNQUFNLEtBQUssaUJBQWlCLFdBQVcsQ0FBQztBQUFBLEVBQ3hDLElBQUksTUFBTTtBQUFBLElBQVcsTUFBTSxLQUFLLE1BQU0sU0FBUztBQUFBLEVBQy9DLE1BQU0sWUFBWSxNQUFNLE9BQU8sT0FBTyxFQUFFLEtBQUssR0FBRztBQUFBLEVBRWhELE1BQU0sY0FBeUQsQ0FBQztBQUFBLEVBQ2hFLFdBQVcsT0FBTyxPQUFPLEtBQUssS0FBSyxHQUFHO0FBQUEsSUFDcEMsTUFBTSxTQUFTLElBQUksV0FBVyxPQUFPO0FBQUEsSUFDckMsTUFBTSxTQUFTLElBQUksV0FBVyxPQUFPO0FBQUEsSUFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLFFBQVE7QUFBQSxNQUFTO0FBQUEsSUFDM0MsSUFBSSxRQUFRO0FBQUEsTUFBc0I7QUFBQSxJQUNsQyxJQUFJLFFBQVEsZ0JBQWdCLFFBQVEscUJBQXFCLFFBQVE7QUFBQSxNQUFvQjtBQUFBLElBQ3JGLE1BQU0sUUFBUyxNQUE2QztBQUFBLElBQzVELElBQUksVUFBVTtBQUFBLE1BQVc7QUFBQSxJQUN6QixJQUFJLE9BQU8sVUFBVSxZQUFZLE9BQU8sVUFBVSxZQUFZLE9BQU8sVUFBVSxXQUFXO0FBQUEsTUFDeEYsWUFBWSxPQUFPO0FBQUEsSUFDckI7QUFBQSxFQUNGO0FBQUEsRUFFQSxPQUFPLEVBQ0wsSUFDQTtBQUFBLElBQ0UsSUFBSSxNQUFNO0FBQUEsSUFDVjtBQUFBLElBQ0E7QUFBQSxJQUNBLFNBQVMsTUFBTTtBQUFBLElBQ2YsV0FBVyxNQUFNO0FBQUEsSUFDakIsTUFBTSxNQUFNO0FBQUEsSUFDWixVQUFVLE1BQU07QUFBQSxJQUNoQixjQUFjLE1BQU07QUFBQSxJQUNwQixtQkFBbUIsTUFBTTtBQUFBLElBQ3pCLG9CQUFvQixNQUFNO0FBQUEsSUFDMUIsc0JBQXNCO0FBQUEsSUFDdEIsb0JBQW9CO0FBQUEsT0FDakI7QUFBQSxFQUNMLEdBQ0EsTUFBTSxRQUNSO0FBQUE7OztBQzVURixTQUFTLElBQUksQ0FBQyxPQUErQjtBQUFBLEVBQzNDLFFBQVEsVUFBVSxVQUFVLFNBQVMsU0FBUyxTQUFTO0FBQUEsRUFDdkQsdUJBQ0UsR0FFRSxTQUZGO0FBQUEsSUFBUztBQUFBLElBQWtCO0FBQUEsSUFBZ0IsbUJBQWU7QUFBQSxPQUFLO0FBQUEsSUFBL0QsVUFDRyxNQUFNO0FBQUEsS0FEVCxpQ0FFRTtBQUFBO0FBSU4sU0FBUyxNQUFNLENBQUMsT0FBbUM7QUFBQSxFQUNqRDtBQUFBLElBQ0UsVUFBVTtBQUFBLElBQ1YsU0FBUztBQUFBLElBQ1QsY0FBYztBQUFBLE9BQ1g7QUFBQSxNQUNEO0FBQUEsRUFDSix1QkFDRSxHQVFFLFNBUkY7QUFBQSxJQUNFO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLDBCQUFzQjtBQUFBLE9BQ2xCO0FBQUEsSUFMTixVQU9HLE1BQU07QUFBQSxLQVBULGlDQVFFO0FBQUE7QUFJTixTQUFTLElBQUksQ0FBQyxPQUFtQztBQUFBLEVBQy9DLFFBQVEsVUFBVSw0QkFBNEIsU0FBUztBQUFBLEVBQ3ZELHVCQUNFLEdBRUUsU0FGRjtBQUFBLElBQVM7QUFBQSxJQUFrQix3QkFBb0I7QUFBQSxPQUFLO0FBQUEsSUFBcEQsVUFDRyxNQUFNO0FBQUEsS0FEVCxpQ0FFRTtBQUFBO0FBSU4sU0FBUyxNQUFNLENBQUMsT0FBbUM7QUFBQSxFQUNqRDtBQUFBLElBQ0UsVUFBVTtBQUFBLElBQ1YsU0FBUztBQUFBLElBQ1QsY0FBYztBQUFBLE9BQ1g7QUFBQSxNQUNEO0FBQUEsRUFDSix1QkFDRSxHQVFFLFNBUkY7QUFBQSxJQUNFO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLDBCQUFzQjtBQUFBLE9BQ2xCO0FBQUEsSUFMTixVQU9HLE1BQU07QUFBQSxLQVBULGlDQVFFO0FBQUE7QUFJQyxJQUFNLE9BQU8sRUFBRSxNQUFNLFFBQVEsTUFBTSxPQUFPOzs7Ozs7Ozs7O0FDbERqRCxTQUFTLFFBQVEsQ0FBQyxPQUEwQztBQUFBLEVBQzFELE9BQU8sT0FBTyxVQUFVLFlBQVksVUFBVSxRQUFRLFdBQVcsU0FBUyxVQUFVO0FBQUE7QUFHL0UsU0FBUyxRQUFRLENBQUMsT0FBbUM7QUFBQSxFQUMxRCxRQUFRLFNBQVMsZ0JBQWdCLE1BQU0sV0FBVyxPQUFPLE9BQU8sV0FBVyxPQUFPO0FBQUEsRUFFbEYsTUFBTSxlQUFlLENBQUMsTUFBaUQ7QUFBQSxJQUNyRSxJQUFJLFNBQVMsT0FBTyxHQUFHO0FBQUEsTUFDckIsUUFBUSxRQUFRLEVBQUUsY0FBYztBQUFBLElBQ2xDO0FBQUE7QUFBQSxFQUdGLE1BQU0sZUFBZSxTQUFTLE9BQU8sSUFBSSxRQUFRLFFBQVE7QUFBQSxFQUV6RCxNQUFNLFFBQVEsQ0FBQyx3QkFBUSxXQUFXO0FBQUEsRUFDbEMsSUFBSTtBQUFBLElBQVUsTUFBTSxLQUFLLHdCQUFRLGVBQWUsRUFBRTtBQUFBLEVBQ2xELElBQUk7QUFBQSxJQUFXLE1BQU0sS0FBSyxTQUFTO0FBQUEsRUFFbkMsdUJBQ0UsR0FxQkUsUUFyQkY7QUFBQSxJQUNFLElBQUc7QUFBQSxJQUNILFFBQU07QUFBQSxJQUNOLFNBQVE7QUFBQSxJQUNSLEtBQUk7QUFBQSxJQUNKLFlBQVc7QUFBQSxJQUNYLFdBQVcsTUFBTSxPQUFPLE9BQU8sRUFBRSxLQUFLLEdBQUc7QUFBQSxJQUN6QyxpQkFBYTtBQUFBLElBQ2IsdUJBQW1CO0FBQUEsSUFSckIsVUFxQkU7QUFBQSxzQkFYQSxHQUFDLFNBQUQ7QUFBQSxRQUNFO0FBQUEsUUFDQSxNQUFLO0FBQUEsUUFDTCxPQUFPLHdCQUFRO0FBQUEsUUFDZixTQUFTO0FBQUEsUUFDVDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxVQUFVO0FBQUEsU0FSWixpQ0FTQTtBQUFBLE1BQ0MsVUFBVSw2QkFBYSxHQUF3QyxRQUF4QztBQUFBLFFBQU0sT0FBTyx3QkFBUTtBQUFBLFFBQXJCLFVBQWdDO0FBQUEsU0FBaEMsaUNBQXdDO0FBQUE7QUFBQSxLQXBCbEUsZ0NBcUJFO0FBQUE7Ozs7Ozs7O0FDckJDLFNBQVMsT0FBTyxDQUFDLE9BQWtDO0FBQUEsRUFDeEQsUUFBUSxVQUFVLEtBQUssT0FBTyxLQUFLLFNBQVMsU0FBUyxPQUFPLFFBQVEsV0FBVyxJQUFJLFNBQVM7QUFBQSxFQUU1RixNQUFNLFFBQWdDLENBQUM7QUFBQSxFQUN2QyxJQUFJO0FBQUEsSUFBSyxNQUFNLGFBQWE7QUFBQSxFQUM1QixJQUFJO0FBQUEsSUFBUyxNQUFNLFdBQVc7QUFBQSxFQUM5QixJQUFJO0FBQUEsSUFBUyxNQUFNLFlBQVk7QUFBQSxFQUMvQixJQUFJO0FBQUEsSUFBTyxNQUFNLFlBQVk7QUFBQSxFQUU3QixNQUFNLFFBQVEsQ0FBQyx1QkFBUSxVQUFVO0FBQUEsRUFDakMsSUFBSTtBQUFBLElBQVEsTUFBTSxLQUFLLHVCQUFRLFNBQVM7QUFBQSxFQUN4QyxJQUFJO0FBQUEsSUFBVyxNQUFNLEtBQUssU0FBUztBQUFBLEVBRW5DLE9BQU8sRUFDTCxJQUNBO0FBQUEsT0FFSyxtQkFBbUIsS0FBSztBQUFBLElBQzNCO0FBQUEsSUFDQSxPQUFPLE1BQU0sT0FBTyxPQUFPLEVBQUUsS0FBSyxHQUFHO0FBQUEsSUFDckM7QUFBQSxJQUNBO0FBQUEsSUFDQSxjQUFjLE1BQU07QUFBQSxJQUNwQixpQkFBaUI7QUFBQSxJQUNqQixzQkFBc0I7QUFBQSxFQUN4QixHQUNBLFFBQ0Y7QUFBQTs7Ozs7Ozs7QUNsREssU0FBUyxJQUFJLENBQUMsT0FBK0I7QUFBQSxFQUNsRCxRQUFRLFVBQVUsT0FBTyxXQUFXLE9BQU87QUFBQSxFQUkzQyxNQUFNLGNBQWMsbUJBQW1CLEtBQUs7QUFBQSxFQUU1QyxJQUFJLE9BQU87QUFBQSxJQUNULE1BQU0sUUFBUSxDQUFDLG9CQUFRLFFBQVE7QUFBQSxJQUMvQixJQUFJO0FBQUEsTUFBVyxNQUFNLEtBQUssU0FBUztBQUFBLElBQ25DLHVCQUNFLEdBUUUsT0FSRjtBQUFBLFNBQ007QUFBQSxNQUNKO0FBQUEsTUFDQSxPQUFPLE1BQU0sT0FBTyxPQUFPLEVBQUUsS0FBSyxHQUFHO0FBQUEsTUFDckMsaUJBQWE7QUFBQSxNQUNiLG1CQUFnQjtBQUFBLE1BTGxCLDBCQU9FLEdBQWtCLFFBQWxCO0FBQUE7QUFBQSwwQ0FBa0I7QUFBQSxPQVBwQixpQ0FRRTtBQUFBLEVBRU47QUFBQSxFQUVBLE1BQU0sUUFBUSxDQUFDLG9CQUFRLE9BQU87QUFBQSxFQUM5QixJQUFJO0FBQUEsSUFBVyxNQUFNLEtBQUssU0FBUztBQUFBLEVBQ25DLHVCQUNFLEdBUUUsUUFSRjtBQUFBLE9BQ007QUFBQSxJQUNKO0FBQUEsSUFDQSxPQUFPLE1BQU0sT0FBTyxPQUFPLEVBQUUsS0FBSyxHQUFHO0FBQUEsSUFDckMsaUJBQWE7QUFBQSxJQUNiLG1CQUFnQjtBQUFBLElBTGxCO0FBQUEsc0NBUUU7QUFBQTs7Ozs7Ozs7Ozs7QUM1Qk4sSUFBTSx1QkFBdUIsSUFBSSxJQUFJO0FBQUEsRUFDbkM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGLENBQUM7QUFHRCxTQUFTLGlCQUFpQixDQUFDLFFBQXFDO0FBQUEsRUFDOUQsSUFBSSxFQUFFLGtCQUFrQjtBQUFBLElBQWMsT0FBTztBQUFBLEVBQzdDLElBQUksa0JBQWtCO0FBQUEsSUFBcUIsT0FBTztBQUFBLEVBQ2xELElBQUksT0FBTztBQUFBLElBQW1CLE9BQU87QUFBQSxFQUNyQyxJQUFJLGtCQUFrQixrQkFBa0I7QUFBQSxJQUN0QyxPQUFPLENBQUMscUJBQXFCLElBQUksT0FBTyxJQUFJO0FBQUEsRUFDOUM7QUFBQSxFQUNBLE9BQU87QUFBQTtBQWVULFNBQVMsa0JBQWtCLENBQUMsT0FBcUQ7QUFBQSxFQUMvRSxJQUFJLE1BQU0sUUFBUSxPQUFPLE1BQU0sUUFBUTtBQUFBLElBQVM7QUFBQSxFQUNoRCxJQUFJLENBQUMsa0JBQWtCLE1BQU0sTUFBTTtBQUFBLElBQUc7QUFBQSxFQUN0QyxNQUFNLGVBQWU7QUFBQTtBQUdoQixTQUFTLFdBQVcsQ0FBQyxPQUFzQztBQUFBLEVBQ2hFLFFBQVEsU0FBUyxVQUFVLGNBQWMsT0FBTyxXQUFXLE9BQU87QUFBQSxFQUNsRSxNQUFNLFFBQVEsQ0FBQywyQkFBUSxjQUFjO0FBQUEsRUFDckMsSUFBSTtBQUFBLElBQVcsTUFBTSxLQUFLLFNBQVM7QUFBQSxFQUNuQyx1QkFDRSxHQW1CRSxXQW5CRjtBQUFBLElBQ0U7QUFBQSxJQUNBLE9BQU8sTUFBTSxLQUFLLEdBQUc7QUFBQSxJQUNyQixNQUFNO0FBQUEsSUFDTixpQkFBYTtBQUFBLElBQ2IsMEJBQXNCO0FBQUEsSUFMeEIsVUFtQkU7QUFBQSxzQkFaQSxHQVVFLFFBVkY7QUFBQSxRQUNFLElBQUc7QUFBQSxRQUNILFNBQVE7QUFBQSxRQUNSLEtBQUk7QUFBQSxRQUNKLFlBQVc7QUFBQSxRQUNYLFdBQVcsMkJBQVE7QUFBQSxRQUNuQixTQUFTO0FBQUEsUUFOWCxVQVVFO0FBQUEsMEJBRkEsR0FBQyxRQUFEO0FBQUEsWUFBTSxPQUFPLDJCQUFRO0FBQUEsWUFBVyxlQUFZO0FBQUEsYUFBNUMsaUNBQW1EO0FBQUEsMEJBQ25ELEdBQW1ELFFBQW5EO0FBQUEsWUFBTSxPQUFPLDJCQUFRO0FBQUEsWUFBckIsVUFBeUM7QUFBQSxhQUF6QyxpQ0FBbUQ7QUFBQTtBQUFBLFNBVHJELGdDQVVFO0FBQUEsc0JBQ0YsR0FBNEMsT0FBNUM7QUFBQSxRQUFLLE9BQU8sMkJBQVE7QUFBQSxRQUFwQjtBQUFBLDBDQUE0QztBQUFBO0FBQUEsS0FsQjlDLGdDQW1CRTtBQUFBOzs7Ozs7Ozs7QUM1RnFmLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsU0FBUSxLQUFLO0FBQUEsSUFBRSxFQUFFLEtBQUcsRUFBRTtBQUFBLEVBQUcsT0FBTztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxTQUFRLEtBQUs7QUFBQSxJQUFFLElBQWdCLE1BQWIsY0FBZ0IsRUFBRSxLQUFLO0FBQUEsTUFBRyxPQUFNO0FBQUEsRUFBRyxTQUFRLEtBQUs7QUFBQSxJQUFFLElBQWdCLE1BQWIsY0FBZ0IsRUFBRSxPQUFLLEVBQUU7QUFBQSxNQUFHLE9BQU07QUFBQSxFQUFHLE9BQU07QUFBQTtBQUF3WCxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLEtBQUssUUFBTSxHQUFFLEtBQUssVUFBUTtBQUFBO0NBQXdVLEdBQUUsWUFBVSxJQUFJLEdBQUcsdUJBQXFCLE1BQUcsR0FBRSxVQUFVLHdCQUFzQixRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLEdBQUUsS0FBSyxPQUFNLENBQUMsS0FBRyxHQUFFLEtBQUssT0FBTSxDQUFDO0FBQUE7QUFBRyxJQUFJLEtBQUUsRUFBRTtBQUFJLEVBQUUsTUFBSSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsRUFBRSxRQUFNLEVBQUUsS0FBSyxPQUFLLEVBQUUsUUFBTSxFQUFFLE1BQU0sTUFBSSxFQUFFLEtBQUksRUFBRSxNQUFJLE9BQU0sTUFBRyxHQUFFLENBQUM7QUFBQTtBQUFHLElBQUksS0FBZSxPQUFPLFVBQXBCLGVBQTRCLE9BQU8sT0FBSyxPQUFPLElBQUksbUJBQW1CLEtBQUc7QUFBbU4sSUFBOE0sS0FBRSxFQUFFO0FBQUksRUFBRSxNQUFJLFFBQVEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFHLEVBQUU7QUFBQSxJQUFLLFNBQVEsR0FBRSxJQUFFLEVBQUUsSUFBRSxFQUFFO0FBQUEsTUFBSSxLQUFJLElBQUUsRUFBRSxRQUFNLEVBQUU7QUFBQSxRQUFJLE9BQWEsRUFBRSxPQUFSLFNBQWMsRUFBRSxNQUFJLEVBQUUsS0FBSSxFQUFFLE1BQUksRUFBRSxNQUFLLEVBQUUsSUFBSSxHQUFFLENBQUM7QUFBQTtBQUFBLEVBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUE7QUFBRyxJQUFJLEtBQUUsRUFBRTtBQUFRLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLE1BQUksRUFBRSxPQUFLLEVBQUUsSUFBSSxRQUFNLEVBQUUsSUFBSSxJQUFJLEdBQUcsUUFBUSxRQUFRLENBQUMsR0FBRTtBQUFBLElBQWEsT0FBTyxFQUFFLE9BQXJCLGNBQTBCLEVBQUUsSUFBSTtBQUFBLEdBQUUsR0FBRSxFQUFFLElBQUksTUFBSSxRQUFhLElBQUUsR0FBRSxDQUFDLEdBQUUsQ0FBQyxHQUFHLE9BQWxCLFNBQXdCLEVBQUUsSUFBSSxRQUFNLE1BQUksRUFBRSxJQUFJLE1BQUksSUFBRyxFQUFFLElBQUksTUFBSSxNQUFHLEVBQUUsTUFBSSxPQUFNLEVBQUUsTUFBSSxFQUFFLE9BQUssRUFBRSxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLE9BQU8sR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLEdBQUUsSUFBRztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBRyxNQUFJLEVBQUUsTUFBSSxNQUFLLEVBQUUsTUFBSSxFQUFFLE9BQUssRUFBRSxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLE9BQU8sR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLEdBQUUsR0FBRSxFQUFFLE9BQUssRUFBRSxJQUFJLFFBQU0sTUFBSSxFQUFFLE9BQUssRUFBRSxZQUFZLEVBQUUsR0FBRyxHQUFFLEVBQUUsSUFBSSxNQUFJLE1BQUcsRUFBRSxJQUFJLE1BQUksS0FBSTtBQUFBO0FBQUUsU0FBUyxFQUFDLEdBQUU7QUFBQSxFQUFDLEtBQUssTUFBSSxHQUFFLEtBQUssSUFBRSxNQUFLLEtBQUssTUFBSTtBQUFBO0FBQUssU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEVBQUUsTUFBSSxFQUFFLEdBQUc7QUFBQSxFQUFJLE9BQU8sS0FBRyxFQUFFLE9BQUssRUFBRSxJQUFJLENBQUM7QUFBQTtBQUFtTixTQUFTLEVBQUMsR0FBRTtBQUFBLEVBQUMsS0FBSyxJQUFFLE1BQUssS0FBSyxJQUFFO0FBQUE7QUFBSyxFQUFFLFVBQVEsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsRUFBSSxNQUFJLEVBQUUsTUFBSSxPQUFJLEtBQUcsRUFBRSxPQUFLLEVBQUUsSUFBSSxHQUFFLEtBQUcsS0FBRyxFQUFFLFFBQU0sRUFBRSxPQUFLLE9BQU0sTUFBRyxHQUFFLENBQUM7QUFBQSxJQUFJLEdBQUUsWUFBVSxJQUFJLEdBQUcsTUFBSSxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRSxLQUFJLElBQUU7QUFBQSxFQUFXLEVBQUUsS0FBUixTQUFZLEVBQUUsSUFBRSxDQUFDLElBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQztBQUFBLEVBQUUsSUFBSSxJQUFFLEdBQUUsRUFBRSxHQUFHLEdBQUUsSUFBRSxPQUFHLElBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxLQUFHLEVBQUUsUUFBTSxJQUFFLE1BQUcsRUFBRSxNQUFJLE1BQUssSUFBRSxFQUFFLENBQUMsSUFBRSxFQUFFO0FBQUE7QUFBQSxFQUFJLEVBQUUsTUFBSTtBQUFBLEVBQUUsSUFBSSxLQUFFLEVBQUU7QUFBQSxFQUFJLEVBQUUsTUFBSTtBQUFBLEVBQUssSUFBSSxJQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsSUFBRyxDQUFDLEVBQUUsRUFBRSxLQUFJO0FBQUEsTUFBQyxJQUFHLEVBQUUsTUFBTSxLQUFJO0FBQUEsUUFBQyxJQUFJLElBQUUsRUFBRSxNQUFNO0FBQUEsUUFBSSxFQUFFLElBQUksSUFBSSxLQUFHLEdBQUUsR0FBRSxFQUFFLElBQUksS0FBSSxFQUFFLElBQUksR0FBRztBQUFBLE1BQUM7QUFBQSxNQUFDLElBQUk7QUFBQSxNQUFFLEtBQUksRUFBRSxTQUFTLEVBQUMsS0FBSSxFQUFFLE1BQUksS0FBSSxDQUFDLEVBQUUsSUFBRSxFQUFFLEVBQUUsSUFBSTtBQUFBLFFBQUcsRUFBRSxNQUFJLElBQUUsRUFBRSxZQUFZO0FBQUEsSUFBQztBQUFBO0FBQUEsRUFBRyxFQUFFLFNBQU8sS0FBRyxFQUFFLE9BQUssRUFBRSxTQUFTLEVBQUMsS0FBSSxFQUFFLE1BQUksRUFBRSxJQUFJLElBQUksR0FBRSxDQUFDLEdBQUUsRUFBRSxLQUFLLEdBQUUsQ0FBQztBQUFBLEdBQUcsR0FBRSxVQUFVLHVCQUFxQixRQUFRLEdBQUU7QUFBQSxFQUFDLEtBQUssSUFBRSxDQUFDO0FBQUEsR0FBRyxHQUFFLFVBQVUsU0FBTyxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFHLEtBQUssS0FBSTtBQUFBLElBQUMsSUFBRyxLQUFLLElBQUksS0FBSTtBQUFBLE1BQUMsSUFBSSxJQUFFLFNBQVMsY0FBYyxLQUFLLEdBQUUsSUFBRSxLQUFLLElBQUksSUFBSSxHQUFHO0FBQUEsTUFBSSxLQUFLLElBQUksSUFBSSxLQUFHLEdBQUUsS0FBSyxLQUFJLEdBQUUsRUFBRSxNQUFJLEVBQUUsR0FBRztBQUFBLElBQUM7QUFBQSxJQUFDLEtBQUssTUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFLE9BQUssRUFBRSxHQUFFLE1BQUssRUFBRSxRQUFRO0FBQUEsRUFBRSxPQUFPLE1BQUksRUFBRSxPQUFLLE1BQUssQ0FBQyxFQUFFLEdBQUUsTUFBSyxFQUFFLE1BQUksT0FBSyxFQUFFLFFBQVEsR0FBRSxDQUFDO0FBQUE7QUFBRyxJQUFJLEtBQUUsUUFBUSxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFHLEVBQUUsRUFBRSxPQUFLLEVBQUUsTUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUUsRUFBRSxNQUFNLGdCQUFvQixFQUFFLE1BQU0sWUFBWSxPQUExQixPQUE4QixDQUFDLEVBQUUsRUFBRTtBQUFBLElBQU0sS0FBSSxJQUFFLEVBQUUsRUFBRSxLQUFHO0FBQUEsTUFBQyxNQUFLLEVBQUUsU0FBTztBQUFBLFFBQUcsRUFBRSxJQUFJLEVBQUU7QUFBQSxNQUFFLElBQUcsRUFBRSxLQUFHLEVBQUU7QUFBQSxRQUFHO0FBQUEsTUFBTSxFQUFFLElBQUUsSUFBRSxFQUFFO0FBQUEs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LDBCQUVGLEdBSUUsUUFKRjtBQUFBLFlBQVEsS0FBSTtBQUFBLFlBQVosVUFDRyxpQkFBaUIsSUFBSSxDQUFDLDRCQUNyQixHQUFDLFNBQUQ7QUFBQSxjQUEwQjtBQUFBLGVBQVosUUFBUSxJQUF0QixzQkFBNEMsQ0FDN0M7QUFBQSxhQUhILGlDQUlFO0FBQUE7QUFBQSxTQTlDSixnQ0ErQ0U7QUFBQSxzQkFHRixHQUFDLGFBQUQscUNBQWE7QUFBQSxzQkFDYixHQUFDLE1BQU0sVUFBUCxxQ0FBZ0I7QUFBQSxzQkFDaEIsR0FBQyxjQUFjLE1BQWYscUNBQW9CO0FBQUE7QUFBQSxLQTFEdEIsZ0NBMkRFO0FBQUE7OztBQ3ZHTixJQUFNLFNBQXdCLENBQUM7QUFDL0IsWUFBWSxXQUFXLE1BQU0sTUFBTTtBQUVuQyx1QkFBdUIsT0FBTyxhQUFhO0FBQUEsRUFDekMsTUFBTSxVQUFVLGdCQUFnQixTQUFTO0FBQUEsRUFDekMsSUFBSSxTQUFTO0FBQUEsSUFDWCxNQUFNLFFBQVE7QUFBQSxNQUNaO0FBQUEsTUFDQSxPQUFPLFNBQVM7QUFBQSxNQUNoQixTQUFTLFNBQVM7QUFBQSxNQUNsQixNQUFNLFNBQVM7QUFBQSxJQUNqQixDQUFDO0FBQUEsRUFDSDtBQUFBLENBQ0Q7QUFFRCxJQUFNLE9BQU8sU0FBUyxlQUFlLEtBQUssS0FBSyxTQUFTO0FBQ3hELGtCQUFPLEdBQUMsWUFBRCxxQ0FBWSxHQUFJLElBQUk7IiwKICAiZGVidWdJZCI6ICIwRDI1MzRGMzk3OEQ5RTA5NjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|
|
5507
|
+
//# debugId=7CFCAE483969311B64756E2164756E21
|
|
5508
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjgrNmQ0ODBiOTNkNDk3ZDNhMS9ub2RlX21vZHVsZXMvcHJlYWN0L2Rpc3QvcHJlYWN0Lm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcmVhY3RAMTAuMjkuOCs2ZDQ4MGI5M2Q0OTdkM2ExL25vZGVfbW9kdWxlcy9wcmVhY3QvaG9va3MvZGlzdC9ob29rcy5tb2R1bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQHByZWFjdCtzaWduYWxzLWNvcmVAMS4xNC40L25vZGVfbW9kdWxlcy9AcHJlYWN0L3NpZ25hbHMtY29yZS9kaXN0L3NpZ25hbHMtY29yZS5tb2R1bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vQHByZWFjdCtzaWduYWxzQDIuMTEuMys2ZDQ4MGI5M2Q0OTdkM2ExL25vZGVfbW9kdWxlcy9AcHJlYWN0L3NpZ25hbHMvZGlzdC9zaWduYWxzLm1vZHVsZS5qcyIsICJzcmMvYWN0aW9ucy9lcnJvci50cyIsICJzcmMvYWN0aW9ucy9vdmVybGF5LnRzIiwgInNyYy9hY3Rpb25zL2V2ZW50LWRlbGVnYXRpb24udHMiLCAic3JjL2FjdGlvbnMvZm9ybS50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcmVhY3RAMTAuMjkuOCs2ZDQ4MGI5M2Q0OTdkM2ExL25vZGVfbW9kdWxlcy9wcmVhY3QvanN4LXJ1bnRpbWUvZGlzdC9qc3hSdW50aW1lLm1vZHVsZS5qcyIsICJzcmMvYWN0aW9ucy9zdG9yZS50c3giLCAic3JjL3BvbGx5LXVpL0FjdGlvbkZvcm0udHN4IiwgInNyYy9wb2xseS11aS9pbnRlcm5hbC9kaXNwYXRjaC1hY3Rpb24udHMiLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzIiwgInNyYy9wb2xseS11aS9BY3Rpb25JbnB1dC50c3giLCAic3JjL3BvbGx5LXVpL0xheW91dC50c3giLCAic3JjL3BvbGx5LXVpL0Ryb3Bkb3duLnRzeCIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvc2VsZWN0LXRyaWdnZXIudHN4IiwgInNyYy9wb2xseS11aS9BY3Rpb25TZWxlY3QudHN4IiwgInNyYy9wb2xseS11aS9CYWRnZS50c3giLCAic3JjL3BvbGx5LXVpL0J1dHRvbi50c3giLCAic3JjL3BvbGx5LXVpL1N1cmZhY2UudHN4IiwgInNyYy9wb2xseS11aS9DYXJkLnRzeCIsICJzcmMvcG9sbHktdWkvQ2hlY2tib3gudHN4IiwgInNyYy9wb2xseS11aS9DbHVzdGVyLnRzeCIsICJzcmMvcG9sbHktdWkvQ29kZS50c3giLCAic3JjL3BvbGx5LXVpL0NvbGxhcHNpYmxlLnRzeCIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9wcmVhY3RAMTAuMjkuOCs2ZDQ4MGI5M2Q0OTdkM2ExL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L2Rpc3QvY29tcGF0Lm1vZHVsZS5qcyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvZm9jdXMtdHJhcC50cyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvc2Nyb2xsLWxvY2sudHMiLCAic3JjL3BvbGx5LXVpL092ZXJsYXlSb290LnRzeCIsICJzcmMvcG9sbHktdWkvTW9kYWwudHN4IiwgInNyYy9wb2xseS11aS9Db25maXJtRGlhbG9nLnRzeCIsICJzcmMvcG9sbHktdWkvRmlsZUlucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvSHRtbC50c3giLCAic3JjL3BvbGx5LXVpL0xpbmsudHN4IiwgInNyYy9wb2xseS11aS9PdXRwdXQudHN4IiwgInNyYy9wb2xseS11aS9TZWxlY3QudHN4IiwgInNyYy9wb2xseS11aS9Ta2VsZXRvbi50c3giLCAic3JjL3BvbGx5LXVpL1RhYnMudHN4IiwgInNyYy9wb2xseS11aS9UZXh0LnRzeCIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvaW5wdXQtYmFzZS50cyIsICJzcmMvcG9sbHktdWkvVGV4dElucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvVG9hc3QudHN4IiwgInNyYy9wb2xseS11aS9Ub2dnbGUudHN4IiwgInNyYy9zaGFyZWQvbGliL3N0YXRlLnRzIiwgInRvb2xzL2dhbGxlcnkvc3JjL3N0b3Jlcy50cyIsICJ0b29scy9nYWxsZXJ5L3NyYy9hY3Rpb25zLnRzIiwgInRvb2xzL2dhbGxlcnkvc3JjL3NwZWNpbWVucy50c3giLCAidG9vbHMvZ2FsbGVyeS9zcmMvZ2FsbGVyeS1hcHAudHN4IiwgInRvb2xzL2dhbGxlcnkvc3JjL2NsaWVudC50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAidmFyIG4sbCx1LHQsaSxyLG8sZSxmLGMsYSxzLGgscCx2LHksZD17fSx3PVtdLF89L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxnPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gbShuLGwpe2Zvcih2YXIgdSBpbiBsKW5bdV09bFt1XTtyZXR1cm4gbn1mdW5jdGlvbiBiKG4pe24mJm4ucGFyZW50Tm9kZSYmbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pfWZ1bmN0aW9uIGsobCx1LHQpe3ZhciBpLHIsbyxlPXt9O2ZvcihvIGluIHUpXCJrZXlcIj09bz9pPXVbb106XCJyZWZcIj09bz9yPXVbb106ZVtvXT11W29dO2lmKGFyZ3VtZW50cy5sZW5ndGg+MiYmKGUuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP24uY2FsbChhcmd1bWVudHMsMik6dCksXCJmdW5jdGlvblwiPT10eXBlb2YgbCYmbnVsbCE9bC5kZWZhdWx0UHJvcHMpZm9yKG8gaW4gbC5kZWZhdWx0UHJvcHMpdm9pZCAwPT09ZVtvXSYmKGVbb109bC5kZWZhdWx0UHJvcHNbb10pO3JldHVybiB4KGwsZSxpLHIsbnVsbCl9ZnVuY3Rpb24geChuLHQsaSxyLG8pe3ZhciBlPXt0eXBlOm4scHJvcHM6dCxrZXk6aSxyZWY6cixfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6bnVsbD09bz8rK3U6byxfX2k6LTEsX191OjB9O3JldHVybiBudWxsPT1vJiZudWxsIT1sLnZub2RlJiZsLnZub2RlKGUpLGV9ZnVuY3Rpb24gTSgpe3JldHVybntjdXJyZW50Om51bGx9fWZ1bmN0aW9uIFMobil7cmV0dXJuIG4uY2hpbGRyZW59ZnVuY3Rpb24gQyhuLGwpe3RoaXMucHJvcHM9bix0aGlzLmNvbnRleHQ9bH1mdW5jdGlvbiAkKG4sbCl7aWYobnVsbD09bClyZXR1cm4gbi5fXz8kKG4uX18sbi5fX2krMSk6bnVsbDtmb3IodmFyIHU7bDxuLl9fay5sZW5ndGg7bCsrKWlmKG51bGwhPSh1PW4uX19rW2xdKSYmbnVsbCE9dS5fX2UpcmV0dXJuIHUuX19lO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4udHlwZT8kKG4pOm51bGx9ZnVuY3Rpb24gSShuKXtpZihuLl9fUCYmbi5fX2Qpe3ZhciB1PW4uX192LHQ9dS5fX2UsaT1bXSxyPVtdLG89bSh7fSx1KTtvLl9fdj11Ll9fdisxLGwudm5vZGUmJmwudm5vZGUobykscShuLl9fUCxvLHUsbi5fX24sbi5fX1AubmFtZXNwYWNlVVJJLDMyJnUuX191P1t0XTpudWxsLGksbnVsbD09dD8kKHUpOnQsISEoMzImdS5fX3UpLHIpLG8uX192PXUuX192LG8uX18uX19rW28uX19pXT1vLEQoaSxvLHIpLHUuX19lPXUuX189bnVsbCxvLl9fZSE9dCYmUChvKX19ZnVuY3Rpb24gUChuKXtpZihudWxsIT0obj1uLl9fKSYmbnVsbCE9bi5fX2MpcmV0dXJuIG4uX19lPW4uX19jLmJhc2U9bnVsbCxuLl9fay5zb21lKGZ1bmN0aW9uKGwpe2lmKG51bGwhPWwmJm51bGwhPWwuX19lKXJldHVybiBuLl9fZT1uLl9fYy5iYXNlPWwuX19lfSksUChuKX1mdW5jdGlvbiBBKG4peyghbi5fX2QmJihuLl9fZD0hMCkmJmkucHVzaChuKSYmIUguX19yKyt8fHIhPWwuZGVib3VuY2VSZW5kZXJpbmcpJiYoKHI9bC5kZWJvdW5jZVJlbmRlcmluZyl8fG8pKEgpfWZ1bmN0aW9uIEgoKXt0cnl7Zm9yKHZhciBuLGw9MTtpLmxlbmd0aDspaS5sZW5ndGg+bCYmaS5zb3J0KGUpLG49aS5zaGlmdCgpLGw9aS5sZW5ndGgsSShuKX1maW5hbGx5e2kubGVuZ3RoPUguX19yPTB9fWZ1bmN0aW9uIEwobixsLHUsdCxpLHIsbyxlLGYsYyxhKXt2YXIgcyxoLHAsdix5LF8sZz10JiZ0Ll9fa3x8dyxtPWwubGVuZ3RoO2ZvcihmPVQodSxsLGcsZixtKSxzPTA7czxtO3MrKyludWxsIT0ocD11Ll9fa1tzXSkmJihoPS0xIT1wLl9faSYmZ1twLl9faV18fGQscC5fX2k9cyxfPXEobixwLGgsaSxyLG8sZSxmLGMsYSksdj1wLl9fZSxwLnJlZiYmaC5yZWYhPXAucmVmJiYoaC5yZWYmJkooaC5yZWYsbnVsbCxwKSxhLnB1c2gocC5yZWYscC5fX2N8fHYscCkpLG51bGw9PXkmJm51bGwhPXYmJih5PXYpLDQmcC5fX3U/KGY9aihwLGYsbiksaC5fX2UmJihoLl9fZT1udWxsKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgcC50eXBlJiZ2b2lkIDAhPT1fP2Y9Xzp2JiYoZj12Lm5leHRTaWJsaW5nKSxwLl9fdSY9LTcpO3JldHVybiB1Ll9fZT15LGZ9ZnVuY3Rpb24gVChuLGwsdSx0LGkpe3ZhciByLG8sZSxmLGMsYT11Lmxlbmd0aCxzPWEsaD0wO2ZvcihuLl9faz1uZXcgQXJyYXkoaSkscj0wO3I8aTtyKyspbnVsbCE9KG89bFtyXSkmJlwiYm9vbGVhblwiIT10eXBlb2YgbyYmXCJmdW5jdGlvblwiIT10eXBlb2Ygbz8oXCJzdHJpbmdcIj09dHlwZW9mIG98fFwibnVtYmVyXCI9PXR5cGVvZiBvfHxcImJpZ2ludFwiPT10eXBlb2Ygb3x8by5jb25zdHJ1Y3Rvcj09U3RyaW5nP289bi5fX2tbcl09eChudWxsLG8sbnVsbCxudWxsLG51bGwpOmcobyk/bz1uLl9fa1tyXT14KFMse2NoaWxkcmVuOm99LG51bGwsbnVsbCxudWxsKTp2b2lkIDA9PT1vLmNvbnN0cnVjdG9yJiZvLl9fYj4wP289bi5fX2tbcl09eChvLnR5cGUsby5wcm9wcyxvLmtleSxvLnJlZj9vLnJlZjpudWxsLG8uX192KTpuLl9fa1tyXT1vLGY9citoLG8uX189bixvLl9fYj1uLl9fYisxLGU9bnVsbCwtMSE9KGM9by5fX2k9TyhvLHUsZixzKSkmJihzLS0sKGU9dVtjXSkmJihlLl9fdXw9MikpLG51bGw9PWV8fG51bGw9PWUuX192PygtMT09YyYmKGk+YT9oLS06aTxhJiZoKyspLFwiZnVuY3Rpb25cIiE9dHlwZW9mIG8udHlwZSYmKG8uX191fD00KSk6YyE9ZiYmKGM9PWYtMT9oLS06Yz09ZisxP2grKzooYz5mP2gtLTpoKyssby5fX3V8PTQpKSk6bi5fX2tbcl09bnVsbDtpZihzKWZvcihyPTA7cjxhO3IrKyludWxsIT0oZT11W3JdKSYmMD09KDImZS5fX3UpJiYoZS5fX2U9PXQmJih0PSQoZSkpLEsoZSxlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gaihuLGwsdSl7dmFyIHQsaTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGUpe2Zvcih0PW4uX19rLGk9MDt0JiZpPHQubGVuZ3RoO2krKyl0W2ldJiYodFtpXS5fXz1uLGw9aih0W2ldLGwsdSkpO3JldHVybiBsfW4uX19lIT1sJiYobCYmbi50eXBlJiYhbC5wYXJlbnROb2RlJiYobD0kKG4pKSxsPXUuaW5zZXJ0QmVmb3JlKG4uX19lLGx8fG51bGwpKTtkb3tsPWwmJmwubmV4dFNpYmxpbmd9d2hpbGUobnVsbCE9bCYmOD09bC5ub2RlVHlwZSk7cmV0dXJuIGx9ZnVuY3Rpb24gRihuLGwpe3JldHVybiBsPWx8fFtdLG51bGw9PW58fFwiYm9vbGVhblwiPT10eXBlb2Ygbnx8KGcobik/bi5zb21lKGZ1bmN0aW9uKG4pe0YobixsKX0pOmwucHVzaChuKSksbH1mdW5jdGlvbiBPKG4sbCx1LHQpe3ZhciBpLHIsbyxlPW4ua2V5LGY9bi50eXBlLGM9bFt1XSxhPW51bGwhPWMmJjA9PSgyJmMuX191KTtpZihudWxsPT09YyYmbnVsbD09ZXx8YSYmZT09Yy5rZXkmJmY9PWMudHlwZSlyZXR1cm4gdTtpZih0PihhPzE6MCkpZm9yKGk9dS0xLHI9dSsxO2k+PTB8fHI8bC5sZW5ndGg7KWlmKG51bGwhPShjPWxbbz1pPj0wP2ktLTpyKytdKSYmMD09KDImYy5fX3UpJiZlPT1jLmtleSYmZj09Yy50eXBlKXJldHVybiBvO3JldHVybi0xfWZ1bmN0aW9uIHoobixsLHUpe1wiLVwiPT1sWzBdP24uc2V0UHJvcGVydHkobCxudWxsPT11P1wiXCI6dSk6bltsXT1udWxsPT11P1wiXCI6XCJudW1iZXJcIiE9dHlwZW9mIHV8fF8udGVzdChsKT91OnUrXCJweFwifWZ1bmN0aW9uIE4obixsLHUsdCxpKXt2YXIgcixvO246aWYoXCJzdHlsZVwiPT1sKWlmKFwic3RyaW5nXCI9PXR5cGVvZiB1KW4uc3R5bGUuY3NzVGV4dD11O2Vsc2V7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJihuLnN0eWxlLmNzc1RleHQ9dD1cIlwiKSx0KWZvcihsIGluIHQpdSYmbCBpbiB1fHx6KG4uc3R5bGUsbCxcIlwiKTtpZih1KWZvcihsIGluIHUpdCYmdVtsXT09dFtsXXx8eihuLnN0eWxlLGwsdVtsXSl9ZWxzZSBpZihcIm9cIj09bFswXSYmXCJuXCI9PWxbMV0pcj1sIT0obD1sLnJlcGxhY2UocyxcIiQxXCIpKSxvPWwudG9Mb3dlckNhc2UoKSxsPW8gaW4gbnx8XCJvbkZvY3VzT3V0XCI9PWx8fFwib25Gb2N1c0luXCI9PWw/by5zbGljZSgyKTpsLnNsaWNlKDIpLG4ubHx8KG4ubD17fSksbi5sW2wrcl09dSx1P3Q/dVthXT10W2FdOih1W2FdPWgsbi5hZGRFdmVudExpc3RlbmVyKGwscj92OnAscikpOm4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLHI/djpwLHIpO2Vsc2V7aWYoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPT1pKWw9bC5yZXBsYWNlKC94bGluayhIfDpoKS8sXCJoXCIpLnJlcGxhY2UoL3NOYW1lJC8sXCJzXCIpO2Vsc2UgaWYoXCJ3aWR0aFwiIT1sJiZcImhlaWdodFwiIT1sJiZcImhyZWZcIiE9bCYmXCJsaXN0XCIhPWwmJlwiZm9ybVwiIT1sJiZcInRhYkluZGV4XCIhPWwmJlwiZG93bmxvYWRcIiE9bCYmXCJyb3dTcGFuXCIhPWwmJlwiY29sU3BhblwiIT1sJiZcInJvbGVcIiE9bCYmXCJwb3BvdmVyXCIhPWwmJmwgaW4gbil0cnl7bltsXT1udWxsPT11P1wiXCI6dTticmVhayBufWNhdGNoKG4pe31cImZ1bmN0aW9uXCI9PXR5cGVvZiB1fHwobnVsbD09dXx8ITE9PT11JiZcIi1cIiE9bFs0XT9uLnJlbW92ZUF0dHJpYnV0ZShsKTpuLnNldEF0dHJpYnV0ZShsLFwicG9wb3ZlclwiPT1sJiYxPT11P1wiXCI6dSkpfX1mdW5jdGlvbiBWKG4pe3JldHVybiBmdW5jdGlvbih1KXtpZih0aGlzLmwpe3ZhciB0PXRoaXMubFt1LnR5cGUrbl07aWYobnVsbD09dVtjXSl1W2NdPWgrKztlbHNlIGlmKHVbY108dFthXSlyZXR1cm47cmV0dXJuIHQobC5ldmVudD9sLmV2ZW50KHUpOnUpfX19ZnVuY3Rpb24gcShuLHUsdCxpLHIsbyxlLGYsYyxhKXt2YXIgcyxoLHAsdix5LGQsXyxrLHgsTSxJLFAsQSxILFQsaixGPXUudHlwZTtpZih2b2lkIDAhPT11LmNvbnN0cnVjdG9yKXJldHVybiBudWxsOzEyOCZ0Ll9fdSYmKGM9ISEoMzImdC5fX3UpLG89W2Y9dS5fX2U9dC5fX2VdKSwocz1sLl9fYikmJnModSk7bjppZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBGKXtoPWUubGVuZ3RoO3RyeXtpZih4PXUucHJvcHMsTT1GLnByb3RvdHlwZSYmRi5wcm90b3R5cGUucmVuZGVyLEk9KHM9Ri5jb250ZXh0VHlwZSkmJmlbcy5fX2NdLFA9cz9JP0kucHJvcHMudmFsdWU6cy5fXzppLHQuX19jP2s9KHA9dS5fX2M9dC5fX2MpLl9fPXAuX19FOihNP3UuX19jPXA9bmV3IEYoeCxQKToodS5fX2M9cD1uZXcgQyh4LFApLHAuY29uc3RydWN0b3I9RixwLnJlbmRlcj1RKSxJJiZJLnN1YihwKSxwLnN0YXRlfHwocC5zdGF0ZT17fSkscC5fX249aSx2PXAuX19kPSEwLHAuX19oPVtdLHAuX3NiPVtdKSxNJiZudWxsPT1wLl9fcyYmKHAuX19zPXAuc3RhdGUpLE0mJm51bGwhPUYuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiYocC5fX3M9PXAuc3RhdGUmJihwLl9fcz1tKHt9LHAuX19zKSksbShwLl9fcyxGLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyh4LHAuX19zKSkpLHk9cC5wcm9wcyxkPXAuc3RhdGUscC5fX3Y9dSx2KU0mJm51bGw9PUYuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiZudWxsIT1wLmNvbXBvbmVudFdpbGxNb3VudCYmcC5jb21wb25lbnRXaWxsTW91bnQoKSxNJiZudWxsIT1wLmNvbXBvbmVudERpZE1vdW50JiZwLl9faC5wdXNoKHAuY29tcG9uZW50RGlkTW91bnQpO2Vsc2V7aWYoTSYmbnVsbD09Ri5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMmJnghPT15JiZudWxsIT1wLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJnAuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh4LFApLHUuX192PT10Ll9fdnx8IXAuX19lJiZudWxsIT1wLnNob3VsZENvbXBvbmVudFVwZGF0ZSYmITE9PT1wLnNob3VsZENvbXBvbmVudFVwZGF0ZSh4LHAuX19zLFApKXt1Ll9fdiE9dC5fX3YmJihwLnByb3BzPXgscC5zdGF0ZT1wLl9fcyxwLl9fZD0hMSksdS5fX2U9dC5fX2UsdS5fX2s9dC5fX2ssdS5fX2suc29tZShmdW5jdGlvbihuKXtuJiYobi5fXz11KX0pLHcucHVzaC5hcHBseShwLl9faCxwLl9zYikscC5fc2I9W10scC5fX2gubGVuZ3RoJiZlLnB1c2gocCksZj0kKHQpO2JyZWFrIG59bnVsbCE9cC5jb21wb25lbnRXaWxsVXBkYXRlJiZwLmNvbXBvbmVudFdpbGxVcGRhdGUoeCxwLl9fcyxQKSxNJiZudWxsIT1wLmNvbXBvbmVudERpZFVwZGF0ZSYmcC5fX2gucHVzaChmdW5jdGlvbigpe3AuY29tcG9uZW50RGlkVXBkYXRlKHksZCxfKX0pfWlmKHAuY29udGV4dD1QLHAucHJvcHM9eCxwLl9fUD1uLHAuX19lPSExLEE9bC5fX3IsSD0wLE0pcC5zdGF0ZT1wLl9fcyxwLl9fZD0hMSxBJiZBKHUpLHM9cC5yZW5kZXIocC5wcm9wcyxwLnN0YXRlLHAuY29udGV4dCksdy5wdXNoLmFwcGx5KHAuX19oLHAuX3NiKSxwLl9zYj1bXTtlbHNlIGRve3AuX19kPSExLEEmJkEodSkscz1wLnJlbmRlcihwLnByb3BzLHAuc3RhdGUscC5jb250ZXh0KSxwLnN0YXRlPXAuX19zfXdoaWxlKHAuX19kJiYrK0g8MjUpO3Auc3RhdGU9cC5fX3MsbnVsbCE9cC5nZXRDaGlsZENvbnRleHQmJihpPW0obSh7fSxpKSxwLmdldENoaWxkQ29udGV4dCgpKSksTSYmIXYmJm51bGwhPXAuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUmJihfPXAuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoeSxkKSksVD1udWxsIT1zJiZzLnR5cGU9PT1TJiZudWxsPT1zLmtleT9FKHMucHJvcHMuY2hpbGRyZW4pOnMsZj1MKG4sZyhUKT9UOltUXSx1LHQsaSxyLG8sZSxmLGMsYSkscC5iYXNlPXUuX19lLHUuX191Jj0tMTYxLHAuX19oLmxlbmd0aCYmZS5wdXNoKHApLGsmJihwLl9fRT1wLl9fPW51bGwpfWNhdGNoKG4pe2lmKGUubGVuZ3RoPWgsdS5fX3Y9bnVsbCxjfHxudWxsIT1vKXtpZihuLnRoZW4pe2Zvcih1Ll9fdXw9Yz8xNjA6MTI4O2YmJjg9PWYubm9kZVR5cGUmJmYubmV4dFNpYmxpbmc7KWY9Zi5uZXh0U2libGluZztudWxsIT1vJiYob1tvLmluZGV4T2YoZildPW51bGwpLHUuX19lPWZ9ZWxzZSBpZihudWxsIT1vKWZvcihqPW8ubGVuZ3RoO2otLTspYihvW2pdKX1lbHNlIHUuX19lPXQuX19lO251bGw9PXUuX19rJiYodS5fX2s9dC5fX2t8fFtdKSxuLnRoZW58fEIodSksbC5fX2Uobix1LHQpfX1lbHNlIG51bGw9PW8mJnUuX192PT10Ll9fdj8odS5fX2s9dC5fX2ssdS5fX2U9dC5fX2UpOmY9dS5fX2U9Ryh0Ll9fZSx1LHQsaSxyLG8sZSxjLGEpO3JldHVybihzPWwuZGlmZmVkKSYmcyh1KSwxMjgmdS5fX3U/dm9pZCAwOmZ9ZnVuY3Rpb24gQihuKXtuJiYobi5fX2MmJihuLl9fYy5fX2U9ITApLG4uX19rJiZuLl9fay5zb21lKEIpKX1mdW5jdGlvbiBEKG4sdSx0KXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylKKHRbaV0sdFsrK2ldLHRbKytpXSk7bC5fX2MmJmwuX19jKHUsbiksbi5zb21lKGZ1bmN0aW9uKHUpe3RyeXtuPXUuX19oLHUuX19oPVtdLG4uc29tZShmdW5jdGlvbihuKXtuLmNhbGwodSl9KX1jYXRjaChuKXtsLl9fZShuLHUuX192KX19KX1mdW5jdGlvbiBFKG4pe3JldHVyblwib2JqZWN0XCIhPXR5cGVvZiBufHxudWxsPT1ufHxuLl9fYj4wP246ZyhuKT9uLm1hcChFKTp2b2lkIDAhPT1uLmNvbnN0cnVjdG9yP251bGw6bSh7fSxuKX1mdW5jdGlvbiBHKHUsdCxpLHIsbyxlLGYsYyxhKXt2YXIgcyxoLHAsdix5LHcsXyxtPWkucHJvcHN8fGQsaz10LnByb3BzLHg9dC50eXBlO2lmKFwic3ZnXCI9PXg/bz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI6XCJtYXRoXCI9PXg/bz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIjpvfHwobz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiksbnVsbCE9ZSlmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKWlmKCh5PWVbc10pJiZcInNldEF0dHJpYnV0ZVwiaW4geT09ISF4JiYoeD95LmxvY2FsTmFtZT09eDozPT15Lm5vZGVUeXBlKSl7dT15LGVbc109bnVsbDticmVha31pZihudWxsPT11KXtpZihudWxsPT14KXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShrKTt1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvLHgsay5pcyYmayksYyYmKGwuX19tJiZsLl9fbSh0LGUpLGM9ITEpLGU9bnVsbH1pZihudWxsPT14KW09PT1rfHxjJiZ1LmRhdGE9PWt8fCh1LmRhdGE9ayk7ZWxzZXtpZihlPVwidGV4dGFyZWFcIj09eCYmbnVsbCE9ay5kZWZhdWx0VmFsdWU/bnVsbDplJiZuLmNhbGwodS5jaGlsZE5vZGVzKSwhYyYmbnVsbCE9ZSlmb3IobT17fSxzPTA7czx1LmF0dHJpYnV0ZXMubGVuZ3RoO3MrKyltWyh5PXUuYXR0cmlidXRlc1tzXSkubmFtZV09eS52YWx1ZTtmb3IocyBpbiBtKXk9bVtzXSxcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI9PXM/cD15OlwiY2hpbGRyZW5cIj09c3x8cyBpbiBrfHxcInZhbHVlXCI9PXMmJlwiZGVmYXVsdFZhbHVlXCJpbiBrfHxcImNoZWNrZWRcIj09cyYmXCJkZWZhdWx0Q2hlY2tlZFwiaW4ga3x8Tih1LHMsbnVsbCx5LG8pO2ZvcihzIGluIGspeT1rW3NdLFwiY2hpbGRyZW5cIj09cz92PXk6XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT1zP2g9eTpcInZhbHVlXCI9PXM/dz15OlwiY2hlY2tlZFwiPT1zP189eTpjJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB5fHxtW3NdPT09eXx8Tih1LHMseSxtW3NdLG8pO2lmKGgpY3x8cCYmKGguX19odG1sPT1wLl9faHRtbHx8aC5fX2h0bWw9PXUuaW5uZXJIVE1MKXx8KHUuaW5uZXJIVE1MPWguX19odG1sKSx0Ll9faz1bXTtlbHNlIGlmKHAmJih1LmlubmVySFRNTD1cIlwiKSxMKFwidGVtcGxhdGVcIj09dC50eXBlP3UuY29udGVudDp1LGcodik/djpbdl0sdCxpLHIsXCJmb3JlaWduT2JqZWN0XCI9PXg/XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI6byxlLGYsZT9lWzBdOmkuX19rJiYkKGksMCksYyxhKSxudWxsIT1lKWZvcihzPWUubGVuZ3RoO3MtLTspYihlW3NdKTtjJiZcInRleHRhcmVhXCIhPXh8fChzPVwidmFsdWVcIixcInByb2dyZXNzXCI9PXgmJm51bGw9PXc/dS5yZW1vdmVBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTpudWxsIT13JiYodyE9PXVbc118fFwicHJvZ3Jlc3NcIj09eCYmIXd8fFwib3B0aW9uXCI9PXgmJnchPW1bc10pJiZOKHUscyx3LG1bc10sbykscz1cImNoZWNrZWRcIixudWxsIT1fJiZfIT11W3NdJiZOKHUscyxfLG1bc10sbykpfXJldHVybiB1fWZ1bmN0aW9uIEoobix1LHQpe3RyeXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXt2YXIgaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuLl9fdTtpJiZuLl9fdSgpLGkmJm51bGw9PXV8fChuLl9fdT1uKHUpKX1lbHNlIG4uY3VycmVudD11fWNhdGNoKG4pe2wuX19lKG4sdCl9fWZ1bmN0aW9uIEsobix1LHQpe3ZhciBpLHI7aWYobC51bm1vdW50JiZsLnVubW91bnQobiksKGk9bi5yZWYpJiYoaS5jdXJyZW50JiZpLmN1cnJlbnQhPW4uX19lfHxKKGksbnVsbCx1KSksbnVsbCE9KGk9bi5fX2MpKXtpZihpLmNvbXBvbmVudFdpbGxVbm1vdW50KXRyeXtpLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2gobil7bC5fX2Uobix1KX1pLmJhc2U9aS5fX1A9aS5fX249bnVsbH1pZihpPW4uX19rKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspaVtyXSYmSyhpW3JdLHUsdHx8XCJmdW5jdGlvblwiIT10eXBlb2Ygbi50eXBlKTt0fHxiKG4uX19lKSxuLl9fYz1uLl9fPW4uX19lPXZvaWQgMH1mdW5jdGlvbiBRKG4sbCx1KXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcihuLHUpfWZ1bmN0aW9uIFIodSx0LGkpe3ZhciByLG8sZSxmO3Q9PWRvY3VtZW50JiYodD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLGwuX18mJmwuX18odSx0KSxvPShyPVwiZnVuY3Rpb25cIj09dHlwZW9mIGkpP251bGw6aSYmaS5fX2t8fHQuX19rLGU9W10sZj1bXSxxKHQsdT0oIXImJml8fHQpLl9faz1rKFMsbnVsbCxbdV0pLG98fGQsZCx0Lm5hbWVzcGFjZVVSSSwhciYmaT9baV06bz9udWxsOnQuZmlyc3RDaGlsZD9uLmNhbGwodC5jaGlsZE5vZGVzKTpudWxsLGUsIXImJmk/aTpvP28uX19lOnQuZmlyc3RDaGlsZCxyLGYpLEQoZSx1LGYpLHUucHJvcHMuY2hpbGRyZW49bnVsbH1mdW5jdGlvbiBVKG4sbCl7UihuLGwsVSl9ZnVuY3Rpb24gVyhsLHUsdCl7dmFyIGkscixvLGUsZj1tKHt9LGwucHJvcHMpO2ZvcihvIGluIGwudHlwZSYmbC50eXBlLmRlZmF1bHRQcm9wcyYmKGU9bC50eXBlLmRlZmF1bHRQcm9wcyksdSlcImtleVwiPT1vP2k9dVtvXTpcInJlZlwiPT1vP3I9dVtvXTpmW29dPXZvaWQgMD09PXVbb10mJm51bGwhPWU/ZVtvXTp1W29dO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjImJihmLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9uLmNhbGwoYXJndW1lbnRzLDIpOnQpLHgobC50eXBlLGYsaXx8bC5rZXkscnx8bC5yZWYsbnVsbCl9ZnVuY3Rpb24gWChuKXtmdW5jdGlvbiBsKG4pe3ZhciB1LHQ7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0fHwodT1uZXcgU2V0LCh0PXt9KVtsLl9fY109dGhpcyx0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiB0fSx0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dT1udWxsfSx0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLnByb3BzLnZhbHVlIT1uLnZhbHVlJiZ1LmZvckVhY2goZnVuY3Rpb24obil7bi5fX2U9ITAsQShuKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihuKXt1LmFkZChuKTt2YXIgbD1uLmNvbXBvbmVudFdpbGxVbm1vdW50O24uY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt1JiZ1LmRlbGV0ZShuKSxsJiZsLmNhbGwobil9fSksbi5jaGlsZHJlbn1yZXR1cm4gbC5fX2M9XCJfX2NDXCIreSsrLGwuX189bixsLlByb3ZpZGVyPWwuX19sPShsLkNvbnN1bWVyPWZ1bmN0aW9uKG4sbCl7cmV0dXJuIG4uY2hpbGRyZW4obCl9KS5jb250ZXh0VHlwZT1sLGx9bj13LnNsaWNlLGw9e19fZTpmdW5jdGlvbihuLGwsdSx0KXtmb3IodmFyIGkscixvO2w9bC5fXzspaWYoKGk9bC5fX2MpJiYhaS5fXyl0cnl7aWYoKHI9aS5jb25zdHJ1Y3RvcikmJm51bGwhPXIuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yJiYoaS5zZXRTdGF0ZShyLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihuKSksbz1pLl9fZCksbnVsbCE9aS5jb21wb25lbnREaWRDYXRjaCYmKGkuY29tcG9uZW50RGlkQ2F0Y2gobix0fHx7fSksbz1pLl9fZCksbylyZXR1cm4gaS5fX0U9aX1jYXRjaChsKXtuPWx9dGhyb3cgbn19LHU9MCx0PWZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZ2b2lkIDA9PT1uLmNvbnN0cnVjdG9yfSxDLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihuLGwpe3ZhciB1O3U9bnVsbCE9dGhpcy5fX3MmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPW0oe30sdGhpcy5zdGF0ZSksXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKG49bihtKHt9LHUpLHRoaXMucHJvcHMpKSxuJiZtKHUsbiksbnVsbCE9biYmdGhpcy5fX3YmJihsJiZ0aGlzLl9zYi5wdXNoKGwpLEEodGhpcykpfSxDLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLG4mJnRoaXMuX19oLnB1c2gobiksQSh0aGlzKSl9LEMucHJvdG90eXBlLnJlbmRlcj1TLGk9W10sbz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm9taXNlP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxlPWZ1bmN0aW9uKG4sbCl7cmV0dXJuIG4uX192Ll9fYi1sLl9fdi5fX2J9LEguX19yPTAsZj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLGM9XCJfX2RcIitmLGE9XCJfX2FcIitmLHM9LyhQb2ludGVyQ2FwdHVyZSkkfENhcHR1cmUkL2ksaD0wLHA9VighMSksdj1WKCEwKSx5PTA7ZXhwb3J0e0MgYXMgQ29tcG9uZW50LFMgYXMgRnJhZ21lbnQsVyBhcyBjbG9uZUVsZW1lbnQsWCBhcyBjcmVhdGVDb250ZXh0LGsgYXMgY3JlYXRlRWxlbWVudCxNIGFzIGNyZWF0ZVJlZixrIGFzIGgsVSBhcyBoeWRyYXRlLHQgYXMgaXNWYWxpZEVsZW1lbnQsbCBhcyBvcHRpb25zLFIgYXMgcmVuZGVyLEYgYXMgdG9DaGlsZEFycmF5fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZWFjdC5tb2R1bGUuanMubWFwXG4iLAogICAgImltcG9ydHtvcHRpb25zIGFzIG59ZnJvbVwicHJlYWN0XCI7dmFyIHQscix1LGksbz0wLGY9W10sYz1uLGU9Yy5fX2IsYT1jLl9fcix2PWMuZGlmZmVkLGw9Yy5fX2MsbT1jLnVubW91bnQscD1jLl9fO2Z1bmN0aW9uIHMobix0KXtjLl9faCYmYy5fX2gocixuLG98fHQpLG89MDt2YXIgdT1yLl9fSHx8KHIuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gbj49dS5fXy5sZW5ndGgmJnUuX18ucHVzaCh7fSksdS5fX1tuXX1mdW5jdGlvbiBkKG4pe3JldHVybiBvPTEseShELG4pfWZ1bmN0aW9uIHkobix1LGkpe3ZhciBvPXModCsrLDIpO2lmKG8udD1uLCFvLl9fYyYmKG8uX189W2k/aSh1KTpEKHZvaWQgMCx1KSxmdW5jdGlvbihuKXt2YXIgdD1vLl9fTj9vLl9fTlswXTpvLl9fWzBdLHI9by50KHQsbik7dCE9PXImJihvLl9fTj1bcixvLl9fWzFdXSxvLl9fYy5zZXRTdGF0ZSh7fSkpfV0sby5fX2M9ciwhci5fX2YpKXt2YXIgZj1mdW5jdGlvbihuLHQscil7aWYoIW8uX19jLl9fSClyZXR1cm4hMDt2YXIgdT0hMSxpPW8uX19jLnByb3BzIT09bjtpZihvLl9fYy5fX0guX18uc29tZShmdW5jdGlvbihuKXtpZihuLl9fTil7dT0hMDt2YXIgdD1uLl9fWzBdO24uX189bi5fX04sbi5fX049dm9pZCAwLHQhPT1uLl9fWzBdJiYoaT0hMCl9fSksYyl7dmFyIGY9Yy5jYWxsKHRoaXMsbix0LHIpO3JldHVybiB1P2Z8fGk6Zn1yZXR1cm4hdXx8aX07ci5fX2Y9ITA7dmFyIGM9ci5zaG91bGRDb21wb25lbnRVcGRhdGUsZT1yLmNvbXBvbmVudFdpbGxVcGRhdGU7ci5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKG4sdCxyKXtpZih0aGlzLl9fZSl7dmFyIHU9YztjPXZvaWQgMCxmKG4sdCxyKSxjPXV9ZSYmZS5jYWxsKHRoaXMsbix0LHIpfSxyLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mfXJldHVybiBvLl9fTnx8by5fX31mdW5jdGlvbiBoKG4sdSl7dmFyIGk9cyh0KyssMyk7IWMuX19zJiZDKGkuX19ILHUpJiYoaS5fXz1uLGkudT11LHIuX19ILl9faC5wdXNoKGkpKX1mdW5jdGlvbiBfKG4sdSl7dmFyIGk9cyh0KyssNCk7IWMuX19zJiZDKGkuX19ILHUpJiYoaS5fXz1uLGkudT11LHIuX19oLnB1c2goaSkpfWZ1bmN0aW9uIEEobil7cmV0dXJuIG89NSxUKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bn19LFtdKX1mdW5jdGlvbiBGKG4sdCxyKXtvPTYsXyhmdW5jdGlvbigpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe3ZhciByPW4odCgpKTtyZXR1cm4gZnVuY3Rpb24oKXtuKG51bGwpLHImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHImJnIoKX19aWYobilyZXR1cm4gbi5jdXJyZW50PXQoKSxmdW5jdGlvbigpe3JldHVybiBuLmN1cnJlbnQ9bnVsbH19LG51bGw9PXI/cjpyLmNvbmNhdChuKSl9ZnVuY3Rpb24gVChuLHIpe3ZhciB1PXModCsrLDcpO3JldHVybiBDKHUuX19ILHIpJiYodS5fXz1uKCksdS5fX0g9cix1Ll9faD1uKSx1Ll9ffWZ1bmN0aW9uIHEobix0KXtyZXR1cm4gbz04LFQoZnVuY3Rpb24oKXtyZXR1cm4gbn0sdCl9ZnVuY3Rpb24geChuKXt2YXIgdT1yLmNvbnRleHRbbi5fX2NdLGk9cyh0KyssOSk7cmV0dXJuIGkuYz1uLHU/KG51bGw9PWkuX18mJihpLl9fPSEwLHUuc3ViKHIpKSx1LnByb3BzLnZhbHVlKTpuLl9ffWZ1bmN0aW9uIFAobix0KXtjLnVzZURlYnVnVmFsdWUmJmMudXNlRGVidWdWYWx1ZSh0P3Qobik6bil9ZnVuY3Rpb24gYihuKXt2YXIgdT1zKHQrKywxMCksaT1kKCk7cmV0dXJuIHUuX189bixyLmNvbXBvbmVudERpZENhdGNofHwoci5jb21wb25lbnREaWRDYXRjaD1mdW5jdGlvbihuLHQpe3UuX18mJnUuX18obix0KSxpWzFdKG4pfSksW2lbMF0sZnVuY3Rpb24oKXtpWzFdKHZvaWQgMCl9XX1mdW5jdGlvbiBnKCl7dmFyIG49cyh0KyssMTEpO2lmKCFuLl9fKXtmb3IodmFyIHU9ci5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXzt2YXIgaT11Ll9fbXx8KHUuX19tPVswLDBdKTtuLl9fPVwiUFwiK2lbMF0rXCItXCIraVsxXSsrfXJldHVybiBuLl9ffWZ1bmN0aW9uIGooKXtmb3IodmFyIG47bj1mLnNoaWZ0KCk7KXt2YXIgdD1uLl9fSDtpZihuLl9fUCYmdCl0cnl7dC5fX2guc29tZSh6KSx0Ll9faC5zb21lKEIpLHQuX19oPVtdfWNhdGNoKHIpe3QuX19oPVtdLGMuX19lKHIsbi5fX3YpfX19Yy5fX2I9ZnVuY3Rpb24obil7cj1udWxsLGUmJmUobil9LGMuX189ZnVuY3Rpb24obix0KXtuJiZ0Ll9fayYmdC5fX2suX19tJiYobi5fX209dC5fX2suX19tKSxwJiZwKG4sdCl9LGMuX19yPWZ1bmN0aW9uKG4pe2EmJmEobiksdD0wO3ZhciBpPShyPW4uX19jKS5fX0g7aSYmKHU9PT1yPyhpLl9faD1bXSxyLl9faD1bXSxpLl9fLnNvbWUoZnVuY3Rpb24obil7bi5fX04mJihuLl9fPW4uX19OKSxuLnU9bi5fX049dm9pZCAwfSkpOihpLl9faC5zb21lKHopLGkuX19oLnNvbWUoQiksaS5fX2g9W10sdD0wKSksdT1yfSxjLmRpZmZlZD1mdW5jdGlvbihuKXt2JiZ2KG4pO3ZhciB0PW4uX19jO3QmJnQuX19IJiYodC5fX0guX19oLmxlbmd0aCYmKDEhPT1mLnB1c2godCkmJmk9PT1jLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChpPWMucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8dykoaikpLHQuX19ILl9fLnNvbWUoZnVuY3Rpb24obil7bi51JiYobi5fX0g9bi51LG4udT12b2lkIDApfSkpLHU9cj1udWxsfSxjLl9fYz1mdW5jdGlvbihuLHQpe3Quc29tZShmdW5jdGlvbihuKXt0cnl7bi5fX2guc29tZSh6KSxuLl9faD1uLl9faC5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIW4uX198fEIobil9KX1jYXRjaChyKXt0LnNvbWUoZnVuY3Rpb24obil7bi5fX2gmJihuLl9faD1bXSl9KSx0PVtdLGMuX19lKHIsbi5fX3YpfX0pLGwmJmwobix0KX0sYy51bm1vdW50PWZ1bmN0aW9uKG4pe20mJm0obik7dmFyIHQscj1uLl9fYztyJiZyLl9fSCYmKHIuX19ILl9fLnNvbWUoZnVuY3Rpb24obil7dHJ5e3oobil9Y2F0Y2gobil7dD1ufX0pLHIuX19IPXZvaWQgMCx0JiZjLl9fZSh0LHIuX192KSl9O3ZhciBrPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTtmdW5jdGlvbiB3KG4pe3ZhciB0LHI9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodSksayYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodCksc2V0VGltZW91dChuKX0sdT1zZXRUaW1lb3V0KHIsMzUpO2smJih0PXJlcXVlc3RBbmltYXRpb25GcmFtZShyKSl9ZnVuY3Rpb24geihuKXt2YXIgdD1yLHU9bi5fX2M7XCJmdW5jdGlvblwiPT10eXBlb2YgdSYmKG4uX19jPXZvaWQgMCx1KCkpLHI9dH1mdW5jdGlvbiBCKG4pe3ZhciB0PXI7bi5fX2M9bi5fXygpLHI9dH1mdW5jdGlvbiBDKG4sdCl7cmV0dXJuIW58fG4ubGVuZ3RoIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0LHIpe3JldHVybiB0IT09bltyXX0pfWZ1bmN0aW9uIEQobix0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Qobik6dH1leHBvcnR7cSBhcyB1c2VDYWxsYmFjayx4IGFzIHVzZUNvbnRleHQsUCBhcyB1c2VEZWJ1Z1ZhbHVlLGggYXMgdXNlRWZmZWN0LGIgYXMgdXNlRXJyb3JCb3VuZGFyeSxnIGFzIHVzZUlkLEYgYXMgdXNlSW1wZXJhdGl2ZUhhbmRsZSxfIGFzIHVzZUxheW91dEVmZmVjdCxUIGFzIHVzZU1lbW8seSBhcyB1c2VSZWR1Y2VyLEEgYXMgdXNlUmVmLGQgYXMgdXNlU3RhdGV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3MubW9kdWxlLmpzLm1hcFxuIiwKICAgICJ2YXIgaT1TeW1ib2wuZm9yKFwicHJlYWN0LXNpZ25hbHNcIik7ZnVuY3Rpb24gdCgpe2lmKCEodj4xKSl7dmFyIGksdD0hMTshZnVuY3Rpb24oKXt2YXIgaT1jO2M9dm9pZCAwO3doaWxlKHZvaWQgMCE9PWkpe3ZhciB0PWkuUztpZih0LnY9PT1pLnYpZm9yKHZhciBuPXQudDt2b2lkIDAhPT1uO249bi54KWlmKG4uaT09PWkuaSluLmk9dC5pO2k9aS5vfX0oKTt3aGlsZSh2b2lkIDAhPT1oKXt2YXIgbj1oO2g9dm9pZCAwO3MrKzt3aGlsZSh2b2lkIDAhPT1uKXt2YXIgcj1uLnU7bi51PXZvaWQgMDtuLmYmPS0zO2lmKCEoOCZuLmYpJiZ3KG4pKXRyeXtuLmMoKX1jYXRjaChuKXtpZighdCl7aT1uO3Q9ITB9fW49cn19cz0wO3YtLTtpZih0KXRocm93IGl9ZWxzZSB2LS19ZnVuY3Rpb24gbihpKXtpZih2PjApcmV0dXJuIGkoKTtlPSsrdTt2Kys7dHJ5e3JldHVybiBpKCl9ZmluYWxseXt0KCl9fXZhciByLG89dm9pZCAwO2Z1bmN0aW9uIGYoaSl7dmFyIHQ9byxuPXI7bz12b2lkIDA7cj12b2lkIDA7dHJ5e3JldHVybiBpKCl9ZmluYWxseXtvPXQ7cj1ufX12YXIgaD12b2lkIDAsdj0wLHM9MCx1PTAsZT0wLGM9dm9pZCAwLGQ9MDtmdW5jdGlvbiBhKGkpe2lmKHZvaWQgMCE9PW8pe3ZhciB0PWkubjtpZih2b2lkIDA9PT10fHx0LnQhPT1vKXt0PXtpOjAsUzppLHA6by5zLG46dm9pZCAwLHQ6byxlOnZvaWQgMCx4OnZvaWQgMCxyOnR9O2lmKHZvaWQgMCE9PW8ucylvLnMubj10O28ucz10O2kubj10O2lmKDMyJm8uZilpLlModCk7cmV0dXJuIHR9ZWxzZSBpZigtMT09PXQuaSl7dC5pPTA7aWYodm9pZCAwIT09dC5uKXt0Lm4ucD10LnA7aWYodm9pZCAwIT09dC5wKXQucC5uPXQubjt0LnA9by5zO3Qubj12b2lkIDA7by5zLm49dDtvLnM9dH1yZXR1cm4gdH19fWZ1bmN0aW9uIGwoaSx0KXt0aGlzLnY9aTt0aGlzLmk9MDt0aGlzLm49dm9pZCAwO3RoaXMudD12b2lkIDA7dGhpcy5sPTA7dGhpcy5XPW51bGw9PXQ/dm9pZCAwOnQud2F0Y2hlZDt0aGlzLlo9bnVsbD09dD92b2lkIDA6dC51bndhdGNoZWQ7dGhpcy5uYW1lPW51bGw9PXQ/dm9pZCAwOnQubmFtZX1sLnByb3RvdHlwZS5icmFuZD1pO2wucHJvdG90eXBlLmg9ZnVuY3Rpb24oKXtyZXR1cm4hMH07bC5wcm90b3R5cGUuUz1mdW5jdGlvbihpKXt2YXIgdD10aGlzLG49dGhpcy50O2lmKG4hPT1pJiZ2b2lkIDA9PT1pLmUpe2kueD1uO3RoaXMudD1pO2lmKHZvaWQgMCE9PW4pbi5lPWk7ZWxzZSBmKGZ1bmN0aW9uKCl7dmFyIGk7bnVsbD09KGk9dC5XKXx8aS5jYWxsKHQpfSl9fTtsLnByb3RvdHlwZS5VPWZ1bmN0aW9uKGkpe3ZhciB0PXRoaXM7aWYodm9pZCAwIT09dGhpcy50KXt2YXIgbj1pLmUscj1pLng7aWYodm9pZCAwIT09bil7bi54PXI7aS5lPXZvaWQgMH1pZih2b2lkIDAhPT1yKXtyLmU9bjtpLng9dm9pZCAwfWlmKGk9PT10aGlzLnQpe3RoaXMudD1yO2lmKHZvaWQgMD09PXIpZihmdW5jdGlvbigpe3ZhciBpO251bGw9PShpPXQuWil8fGkuY2FsbCh0KX0pfX19O2wucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihpKXt2YXIgdD10aGlzO3JldHVybiBqKGZ1bmN0aW9uKCl7dmFyIG49dC52YWx1ZTtmKGZ1bmN0aW9uKCl7cmV0dXJuIGkobil9KX0se25hbWU6XCJzdWJcIn0pfTtsLnByb3RvdHlwZS52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9O2wucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWUrXCJcIn07bC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9O2wucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3JldHVybiBmKGZ1bmN0aW9uKCl7cmV0dXJuIGkudmFsdWV9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGwucHJvdG90eXBlLFwidmFsdWVcIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIGk9YSh0aGlzKTtpZih2b2lkIDAhPT1pKWkuaT10aGlzLmk7cmV0dXJuIHRoaXMudn0sc2V0OmZ1bmN0aW9uKGkpe2lmKGkhPT10aGlzLnYpe2lmKHM+MTAwKXRocm93IG5ldyBFcnJvcihcIkN5Y2xlIGRldGVjdGVkXCIpOyFmdW5jdGlvbihpKXtpZigwIT09diYmMD09PXMpaWYoaS5sIT09ZSl7aS5sPWU7Yz17UzppLHY6aS52LGk6aS5pLG86Y319fSh0aGlzKTt0aGlzLnY9aTt0aGlzLmkrKztkKys7disrO3RyeXtmb3IodmFyIG49dGhpcy50O3ZvaWQgMCE9PW47bj1uLngpbi50Lk4oKX1maW5hbGx5e3QoKX19fX0pO2Z1bmN0aW9uIHkoaSx0KXtyZXR1cm4gbmV3IGwoaSx0KX1mdW5jdGlvbiB3KGkpe2Zvcih2YXIgdD1pLnM7dm9pZCAwIT09dDt0PXQubilpZih0LlMuaSE9PXQuaXx8IXQuUy5oKCl8fHQuUy5pIT09dC5pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIF8oaSl7Zm9yKHZhciB0PWkuczt2b2lkIDAhPT10O3Q9dC5uKXt2YXIgbj10LlMubjtpZih2b2lkIDAhPT1uKXQucj1uO3QuUy5uPXQ7dC5pPS0xO2lmKHZvaWQgMD09PXQubil7aS5zPXQ7YnJlYWt9fX1mdW5jdGlvbiBiKGkpe3ZhciB0PWkucyxuPXZvaWQgMDt3aGlsZSh2b2lkIDAhPT10KXt2YXIgcj10LnA7aWYoLTE9PT10Lmkpe3QuUy5VKHQpO2lmKHZvaWQgMCE9PXIpci5uPXQubjtpZih2b2lkIDAhPT10Lm4pdC5uLnA9cn1lbHNlIG49dDt0LlMubj10LnI7aWYodm9pZCAwIT09dC5yKXQucj12b2lkIDA7dD1yfWkucz1ufWZ1bmN0aW9uIHAoaSx0KXtsLmNhbGwodGhpcyx2b2lkIDAsdCk7dGhpcy54PWk7dGhpcy5zPXZvaWQgMDt0aGlzLmc9ZC0xO3RoaXMuZj00fXAucHJvdG90eXBlPW5ldyBsO3AucHJvdG90eXBlLmg9ZnVuY3Rpb24oKXt0aGlzLmYmPS0zO2lmKDEmdGhpcy5mKXJldHVybiExO2lmKDMyPT0oMzYmdGhpcy5mKSlyZXR1cm4hMDt0aGlzLmYmPS01O2lmKHRoaXMuZz09PWQpcmV0dXJuITA7dGhpcy5nPWQ7dGhpcy5mfD0xO2lmKHRoaXMuaT4wJiYhdyh0aGlzKSl7dGhpcy5mJj0tMjtyZXR1cm4hMH12YXIgaT1vO3RyeXtfKHRoaXMpO289dGhpczt2YXIgdD10aGlzLngoKTtpZigxNiZ0aGlzLmZ8fHRoaXMudiE9PXR8fDA9PT10aGlzLmkpe3RoaXMudj10O3RoaXMuZiY9LTE3O3RoaXMuaSsrfX1jYXRjaChpKXt0aGlzLnY9aTt0aGlzLmZ8PTE2O3RoaXMuaSsrfW89aTtiKHRoaXMpO3RoaXMuZiY9LTI7cmV0dXJuITB9O3AucHJvdG90eXBlLlM9ZnVuY3Rpb24oaSl7aWYodm9pZCAwPT09dGhpcy50KXt0aGlzLmZ8PTM2O2Zvcih2YXIgdD10aGlzLnM7dm9pZCAwIT09dDt0PXQubil0LlMuUyh0KX1sLnByb3RvdHlwZS5TLmNhbGwodGhpcyxpKX07cC5wcm90b3R5cGUuVT1mdW5jdGlvbihpKXtpZih2b2lkIDAhPT10aGlzLnQpe2wucHJvdG90eXBlLlUuY2FsbCh0aGlzLGkpO2lmKHZvaWQgMD09PXRoaXMudCl7dGhpcy5mJj0tMzM7Zm9yKHZhciB0PXRoaXMuczt2b2lkIDAhPT10O3Q9dC5uKXQuUy5VKHQpfX19O3AucHJvdG90eXBlLk49ZnVuY3Rpb24oKXtpZighKDImdGhpcy5mKSl7dGhpcy5mfD02O2Zvcih2YXIgaT10aGlzLnQ7dm9pZCAwIT09aTtpPWkueClpLnQuTigpfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHAucHJvdG90eXBlLFwidmFsdWVcIix7Z2V0OmZ1bmN0aW9uKCl7aWYoMSZ0aGlzLmYpdGhyb3cgbmV3IEVycm9yKFwiQ3ljbGUgZGV0ZWN0ZWRcIik7dmFyIGk9YSh0aGlzKTt0aGlzLmgoKTtpZih2b2lkIDAhPT1pKWkuaT10aGlzLmk7aWYoMTYmdGhpcy5mKXRocm93IHRoaXMudjtyZXR1cm4gdGhpcy52fX0pO2Z1bmN0aW9uIGcoaSx0KXtyZXR1cm4gbmV3IHAoaSx0KX1mdW5jdGlvbiBTKGkpe3ZhciBuPWkubTtpLm09dm9pZCAwO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe3YrKzt2YXIgcj1vO289dm9pZCAwO3RyeXtuKCl9Y2F0Y2godCl7aS5mJj0tMjtpLmZ8PTg7bShpKTt0aHJvdyB0fWZpbmFsbHl7bz1yO3QoKX19fWZ1bmN0aW9uIG0oaSl7Zm9yKHZhciB0PWkuczt2b2lkIDAhPT10O3Q9dC5uKXQuUy5VKHQpO2kueD12b2lkIDA7aS5zPXZvaWQgMDtTKGkpfWZ1bmN0aW9uIHgoaSl7aWYobyE9PXRoaXMpdGhyb3cgbmV3IEVycm9yKFwiT3V0LW9mLW9yZGVyIGVmZmVjdFwiKTtiKHRoaXMpO289aTt0aGlzLmYmPS0yO2lmKDgmdGhpcy5mKW0odGhpcyk7dCgpfWZ1bmN0aW9uIEUoaSx0KXt0aGlzLng9aTt0aGlzLm09dm9pZCAwO3RoaXMucz12b2lkIDA7dGhpcy51PXZvaWQgMDt0aGlzLmY9MzI7dGhpcy5uYW1lPW51bGw9PXQ/dm9pZCAwOnQubmFtZTtpZihyKXIucHVzaCh0aGlzKX1FLnByb3RvdHlwZS5jPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5TKCk7dHJ5e2lmKDgmdGhpcy5mKXJldHVybjtpZih2b2lkIDA9PT10aGlzLngpcmV0dXJuO3ZhciB0PXRoaXMueCgpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpdGhpcy5tPXR9ZmluYWxseXtpKCl9fTtFLnByb3RvdHlwZS5TPWZ1bmN0aW9uKCl7aWYoMSZ0aGlzLmYpdGhyb3cgbmV3IEVycm9yKFwiQ3ljbGUgZGV0ZWN0ZWRcIik7dGhpcy5mfD0xO3RoaXMuZiY9LTk7Uyh0aGlzKTtfKHRoaXMpO3YrKzt2YXIgaT1vO289dGhpcztyZXR1cm4geC5iaW5kKHRoaXMsaSl9O0UucHJvdG90eXBlLk49ZnVuY3Rpb24oKXtpZighKDImdGhpcy5mKSl7dGhpcy5mfD0yO3RoaXMudT1oO2g9dGhpc319O0UucHJvdG90eXBlLmQ9ZnVuY3Rpb24oKXt0aGlzLmZ8PTg7aWYoISgxJnRoaXMuZikpbSh0aGlzKX07RS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZCgpfTtmdW5jdGlvbiBqKGksdCl7dmFyIG49bmV3IEUoaSx0KTt0cnl7bi5jKCl9Y2F0Y2goaSl7bi5kKCk7dGhyb3cgaX12YXIgcj1uLmQuYmluZChuKTtyW1N5bWJvbC5kaXNwb3NlXT1yO3JldHVybiByfWZ1bmN0aW9uIEMoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLHI9dGhpcztyZXR1cm4gbihmdW5jdGlvbigpe3JldHVybiBmKGZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkocixbXS5zbGljZS5jYWxsKHQpKX0pfSl9fWZ1bmN0aW9uIE8oKXt2YXIgaT1yO3I9W107cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9cjtpZihyJiZpKWk9aS5jb25jYXQocik7cj1pO3JldHVybiB0fX12YXIgaz1mdW5jdGlvbihpKXtmb3IodmFyIHQgaW4gaSl7dmFyIG49aVt0XTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKWlbdF09QyhuKTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiBuJiZudWxsIT09biYmIShcImJyYW5kXCJpbiBuKSlrKG4pfX07ZnVuY3Rpb24gVChpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdCxuLG89TygpO3RyeXtuPWkuYXBwbHkodm9pZCAwLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9Y2F0Y2goaSl7cj12b2lkIDA7dGhyb3cgaX1maW5hbGx5e3Q9bygpfWsobik7bltTeW1ib2wuZGlzcG9zZV09QyhmdW5jdGlvbigpe2lmKHQpZm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspdFtpXS5kaXNwb3NlKCk7dD12b2lkIDB9KTtyZXR1cm4gbn19ZXhwb3J0e3AgYXMgQ29tcHV0ZWQsRSBhcyBFZmZlY3QsbCBhcyBTaWduYWwsQyBhcyBhY3Rpb24sbiBhcyBiYXRjaCxnIGFzIGNvbXB1dGVkLFQgYXMgY3JlYXRlTW9kZWwsaiBhcyBlZmZlY3QseSBhcyBzaWduYWwsZiBhcyB1bnRyYWNrZWR9Oy8vIyBzb3VyY2VNYXBwaW5nVVJMPXNpZ25hbHMtY29yZS5tb2R1bGUuanMubWFwXG4iLAogICAgImltcG9ydHtDb21wb25lbnQgYXMgaSxvcHRpb25zIGFzIG4saXNWYWxpZEVsZW1lbnQgYXMgcixGcmFnbWVudCBhcyB0fWZyb21cInByZWFjdFwiO2ltcG9ydHt1c2VNZW1vIGFzIG8sdXNlUmVmIGFzIGYsdXNlRWZmZWN0IGFzIGV9ZnJvbVwicHJlYWN0L2hvb2tzXCI7aW1wb3J0e2VmZmVjdCBhcyB1LFNpZ25hbCBhcyBhLGNvbXB1dGVkIGFzIGMsc2lnbmFsIGFzIHYsYmF0Y2ggYXMgc31mcm9tXCJAcHJlYWN0L3NpZ25hbHMtY29yZVwiO2V4cG9ydHtTaWduYWwsYWN0aW9uLGJhdGNoLGNvbXB1dGVkLGNyZWF0ZU1vZGVsLGVmZmVjdCxzaWduYWwsdW50cmFja2VkfWZyb21cIkBwcmVhY3Qvc2lnbmFscy1jb3JlXCI7dmFyIGwsaCxkLHA9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmISF3aW5kb3cuX19QUkVBQ1RfU0lHTkFMU19ERVZUT09MU19fLG09W10sXz1bXTt1KGZ1bmN0aW9uKCl7bD10aGlzLk59KSgpO2Z1bmN0aW9uIGcoaSxyKXtuW2ldPXIuYmluZChudWxsLG5baV18fGZ1bmN0aW9uKCl7fSl9ZnVuY3Rpb24gYihpKXtpZihkKXt2YXIgbj1kO2Q9dm9pZCAwO24oKX1kPWkmJmkuUygpfWZ1bmN0aW9uIHkoaSl7dmFyIG49dGhpcyx0PWkuZGF0YSxmPXVzZVNpZ25hbCh0KTtmLm5hbWU9XCJSZWFjdGl2ZURvbVwiO2YudmFsdWU9dDt2YXIgZT1vKGZ1bmN0aW9uKCl7dmFyIGk9bix0PW4uX192O3doaWxlKHQ9dC5fXylpZih0Ll9fYyl7dC5fX2MuX18kZnw9NDticmVha312YXIgbz1jKGZ1bmN0aW9uKCl7dmFyIGk9Zi52YWx1ZS52YWx1ZTtyZXR1cm4gMD09PWk/MDohMD09PWk/XCJcIjppfHxcIlwifSksZT1jKGZ1bmN0aW9uKCl7cmV0dXJuIUFycmF5LmlzQXJyYXkoby52YWx1ZSkmJiFyKG8udmFsdWUpfSksYT11KGZ1bmN0aW9uKCl7dGhpcy5OPUY7aWYoZS52YWx1ZSl7dmFyIG49by52YWx1ZTtpZihpLl9fdiYmaS5fX3YuX19lJiYzPT09aS5fX3YuX19lLm5vZGVUeXBlKWkuX192Ll9fZS5kYXRhPW59fSksdj1uLl9fJHUuZDtuLl9fJHUuZD1mdW5jdGlvbigpe2EoKTt2LmNhbGwodGhpcyl9O3JldHVybltlLG9dfSxbXSksYT1lWzBdLHY9ZVsxXTtyZXR1cm4gYS52YWx1ZT92LnBlZWsoKTp2LnZhbHVlfXkuZGlzcGxheU5hbWU9XCJSZWFjdGl2ZVRleHROb2RlXCI7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOntjb25maWd1cmFibGU6ITAsdmFsdWU6dm9pZCAwfSx0eXBlOntjb25maWd1cmFibGU6ITAsdmFsdWU6eX0scHJvcHM6e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3JldHVybntkYXRhOntnZXQgdmFsdWUoKXtyZXR1cm4gaS52YWx1ZX19fX19LF9fYjp7Y29uZmlndXJhYmxlOiEwLHZhbHVlOjF9fSk7ZyhcIl9fYlwiLGZ1bmN0aW9uKGksbil7YigpO2g9dm9pZCAwO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGUpe3ZhciByLHQ9bi5wcm9wcztmb3IodmFyIG8gaW4gdClpZihcImNoaWxkcmVuXCIhPT1vKXt2YXIgZj10W29dO2lmKGYgaW5zdGFuY2VvZiBhKXtpZighciluLl9fbnA9cj17fTtyW29dPWY7dFtvXT1mLnBlZWsoKX19fWkobil9KTtnKFwiX19yXCIsZnVuY3Rpb24oaSxuKXtpKG4pO2lmKG4udHlwZSE9PXQpe2IoKTt2YXIgcixvPW4uX19jO2lmKG8pe28uX18kZiY9LTI7aWYodm9pZCAwPT09KHI9by5fXyR1KSlvLl9fJHU9cj1mdW5jdGlvbihpLG4pe3ZhciByO3UoZnVuY3Rpb24oKXtyPXRoaXN9LHtuYW1lOm59KTtyLmM9aTtyZXR1cm4gcn0oZnVuY3Rpb24oaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG47aWYocCludWxsPT0obj10aGlzLnkpfHxuLmNhbGwodGhpcyk7aS5fXyRmfD0xO2kuc2V0U3RhdGUoe30pfX0obyksXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50eXBlP24udHlwZS5kaXNwbGF5TmFtZXx8bi50eXBlLm5hbWU6XCJcIil9aD1vO2Iocil9fSk7ZyhcIl9fZVwiLGZ1bmN0aW9uKGksbixyLHQpe2IoKTtoPXZvaWQgMDtpKG4scix0KX0pO2coXCJkaWZmZWRcIixmdW5jdGlvbihpLG4pe2IoKTtoPXZvaWQgMDt2YXIgcjtpZihcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlJiYocj1uLl9fZSkpe3ZhciB0PW4uX19ucCxvPW4ucHJvcHMsZj1yLlU7aWYoZilmb3IodmFyIGUgaW4gZil7dmFyIHU9ZltlXTtpZighKHZvaWQgMD09PXV8fHQmJmUgaW4gdCkpe3UuZCgpO2ZbZV09dm9pZCAwfX1pZih0KXtpZighZil7Zj17fTtyLlU9Zn1mb3IodmFyIGEgaW4gdCl7dmFyIGM9ZlthXSx2PXRbYV07aWYodm9pZCAwPT09Yyl7Yz13KHIsYSx2LG8pO2ZbYV09Y31lbHNlIGMubyh2LG8pfX19aShuKX0pO2Z1bmN0aW9uIHcoaSxuLHIsdCl7dmFyIG89biBpbiBpJiZ2b2lkIDA9PT1pLm93bmVyU1ZHRWxlbWVudCxmPXYocik7cmV0dXJue286ZnVuY3Rpb24oaSxuKXtmLnZhbHVlPWk7dD1ufSxkOnUoZnVuY3Rpb24oKXt0aGlzLk49Rjt2YXIgcj1mLnZhbHVlLnZhbHVlO2lmKHRbbl0hPT1yKXt0W25dPXI7aWYobylpW25dPXI7ZWxzZSBpZihudWxsIT1yJiYoITEhPT1yfHxcIi1cIj09PW5bNF0pKWkuc2V0QXR0cmlidXRlKG4scik7ZWxzZSBpLnJlbW92ZUF0dHJpYnV0ZShuKX19KX19ZyhcInVubW91bnRcIixmdW5jdGlvbihpLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGUpe3ZhciByPW4uX19lO2lmKHIpe3ZhciB0PXIuVTtpZih0KXtyLlU9dm9pZCAwO2Zvcih2YXIgbyBpbiB0KXt2YXIgZj10W29dO2lmKGYpZi5kKCl9fX12YXIgZT1uLl9fbnA7aWYoZSl7dmFyIHU9bi5wcm9wcztmb3IodmFyIGEgaW4gZSl1W2FdPWVbYV19bi5fX25wPXZvaWQgMH1lbHNle3ZhciBjPW4uX19jO2lmKGMpe2MuX18kZnw9ODt2YXIgdj1jLl9fJHU7aWYodil7Yy5fXyR1PXZvaWQgMDt2LmQoKX19fWkobil9KTtnKFwiX19oXCIsZnVuY3Rpb24oaSxuLHIsdCl7aWYodDwzKW4uX18kZnw9MjtpKG4scix0KX0pO2kucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihpLG4pe2lmKHRoaXMuX19SKXJldHVybiEwO3ZhciByPXRoaXMuX18kdSx0PXImJnZvaWQgMCE9PXIucztmb3IodmFyIG8gaW4gbilyZXR1cm4hMDtpZih0aGlzLl9fZnx8XCJib29sZWFuXCI9PXR5cGVvZiB0aGlzLnUmJiEwPT09dGhpcy51KXt2YXIgZj0yJnRoaXMuX18kZjtpZighKHR8fGZ8fDQmdGhpcy5fXyRmKSlyZXR1cm4hMDtpZigxJnRoaXMuX18kZilyZXR1cm4hMH1lbHNle2lmKCEodHx8NCZ0aGlzLl9fJGYpKXJldHVybiEwO2lmKDMmdGhpcy5fXyRmKXJldHVybiEwfWZvcih2YXIgZSBpbiBpKWlmKFwiX19zb3VyY2VcIiE9PWUmJmlbZV0hPT10aGlzLnByb3BzW2VdKXJldHVybiEwO2Zvcih2YXIgdSBpbiB0aGlzLnByb3BzKWlmKCEodSBpbiBpKSlyZXR1cm4hMDtyZXR1cm4hMX07ZnVuY3Rpb24gdXNlU2lnbmFsKGksbil7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gdihpLG4pfSxbXSl9ZnVuY3Rpb24gdXNlQ29tcHV0ZWQoaSxuKXt2YXIgcj1mKGkpO3IuY3VycmVudD1pO2guX18kZnw9NDtyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiBjKGZ1bmN0aW9uKCl7cmV0dXJuIHIuY3VycmVudCgpfSxuKX0sW10pfXZhciBrPVwidW5kZWZpbmVkXCI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/c2V0VGltZW91dDpmdW5jdGlvbihpKXt2YXIgbj1mdW5jdGlvbigpe2NsZWFyVGltZW91dChyKTtjYW5jZWxBbmltYXRpb25GcmFtZSh0KTtpKCl9LHI9c2V0VGltZW91dChuLDM1KSx0PXJlcXVlc3RBbmltYXRpb25GcmFtZShuKX0scT1mdW5jdGlvbihpKXtxdWV1ZU1pY3JvdGFzayhmdW5jdGlvbigpe3F1ZXVlTWljcm90YXNrKGkpfSl9O2Z1bmN0aW9uIEEoKXtzKGZ1bmN0aW9uKCl7dmFyIGk7d2hpbGUoaT1tLnNoaWZ0KCkpbC5jYWxsKGkpfSl9ZnVuY3Rpb24gVCgpe2lmKDE9PT1tLnB1c2godGhpcykpKG4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxrKShBKX1mdW5jdGlvbiB4KCl7cyhmdW5jdGlvbigpe3ZhciBpO3doaWxlKGk9Xy5zaGlmdCgpKWwuY2FsbChpKX0pfWZ1bmN0aW9uIEYoKXtpZigxPT09Xy5wdXNoKHRoaXMpKShuLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8cSkoeCl9ZnVuY3Rpb24gdXNlU2lnbmFsRWZmZWN0KGksbil7dmFyIHI9ZihpKTtyLmN1cnJlbnQ9aTt2YXIgdD1oO2UoZnVuY3Rpb24oKXtyZXR1cm4gdShmdW5jdGlvbigpe3RoaXMuTj1UO2lmKCEodCYmOCZ0Ll9fJGYpKXJldHVybiByLmN1cnJlbnQoKX0sbil9LFtdKX1mdW5jdGlvbiBNKGkpe3ZhciBuPW8oZnVuY3Rpb24oKXtyZXR1cm4gaSgpfSxbXSk7ZShmdW5jdGlvbigpe3JldHVybiBuW1N5bWJvbC5kaXNwb3NlXX0sW25dKTtyZXR1cm4gbn1leHBvcnR7dXNlQ29tcHV0ZWQsTSBhcyB1c2VNb2RlbCx1c2VTaWduYWwsdXNlU2lnbmFsRWZmZWN0fTsvLyMgc291cmNlTWFwcGluZ1VSTD1zaWduYWxzLm1vZHVsZS5qcy5tYXBcbiIsCiAgICAiLyoqXG4gKiBHbG9iYWwgZXJyb3Igc3VyZmFjZSBmb3IgYWN0aW9uIGhhbmRsZXJzLlxuICpcbiAqIEFjdGlvbnMgdGhhdCBmYWlsIHNldCB0aGUgZXJyb3JTdGF0ZSBzaWduYWwgdmlhIGBzdWJtaXRFcnJvcmA7IGEgYDxUb2FzdD5gXG4gKiBjb21wb25lbnQgY29uc3VtZXMgdGhhdCBzaWduYWwgYW5kIHJlbmRlcnMgYSBkaXNtaXNzYWJsZSBtZXNzYWdlLiBIYW5kbGVyc1xuICogdGhhdCBjYXRjaCBleHBlY3RlZCBmYWlsdXJlcyAodmFsaWRhdGlvbiwgcXVvdGEpIG1heSBjYWxsIGBzZXRFcnJvcmAgZGlyZWN0bHkuXG4gKi9cblxuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuXG5leHBvcnQgdHlwZSBFcnJvclNldmVyaXR5ID0gXCJlcnJvclwiIHwgXCJ3YXJuaW5nXCIgfCBcImluZm9cIjtcblxuZXhwb3J0IHR5cGUgRXJyb3JFbnRyeSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzZXZlcml0eTogRXJyb3JTZXZlcml0eTtcbiAgYWN0aW9uPzogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBlcnJvclN0YXRlID0gc2lnbmFsPEVycm9yRW50cnlbXT4oW10pO1xuXG5sZXQgbmV4dElkID0gMDtcbmZ1bmN0aW9uIGFsbG9jSWQoKTogc3RyaW5nIHtcbiAgbmV4dElkICs9IDE7XG4gIHJldHVybiBgcG9sbHktZXJyLSR7bmV4dElkfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvcihcbiAgbWVzc2FnZTogc3RyaW5nLFxuICBvcHRzOiB7IHNldmVyaXR5PzogRXJyb3JTZXZlcml0eTsgYWN0aW9uPzogc3RyaW5nIH0gPSB7fVxuKTogc3RyaW5nIHtcbiAgY29uc3QgZW50cnk6IEVycm9yRW50cnkgPSB7XG4gICAgaWQ6IGFsbG9jSWQoKSxcbiAgICBtZXNzYWdlLFxuICAgIHNldmVyaXR5OiBvcHRzLnNldmVyaXR5ID8/IFwiZXJyb3JcIixcbiAgICBhY3Rpb246IG9wdHMuYWN0aW9uLFxuICAgIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgfTtcbiAgZXJyb3JTdGF0ZS52YWx1ZSA9IFsuLi5lcnJvclN0YXRlLnZhbHVlLCBlbnRyeV07XG4gIHJldHVybiBlbnRyeS5pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyRXJyb3IoaWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGlkID09PSB1bmRlZmluZWQpIHtcbiAgICBlcnJvclN0YXRlLnZhbHVlID0gW107XG4gICAgcmV0dXJuO1xuICB9XG4gIGVycm9yU3RhdGUudmFsdWUgPSBlcnJvclN0YXRlLnZhbHVlLmZpbHRlcigoZSkgPT4gZS5pZCAhPT0gaWQpO1xufVxuXG4vKipcbiAqIENvbnZlbmllbmNlIHdyYXBwZXIgZm9yIGFuIGFjdGlvbidzIGNhdGNoIGJsb2NrLlxuICogTG9ncyB0aGUgYWN0aW9uIG5hbWUgKyBlcnJvciBhbmQgc3VyZmFjZXMgYSB1c2VyLXZpc2libGUgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1Ym1pdEVycm9yKGFjdGlvbjogc3RyaW5nLCBlcnI6IHVua25vd24pOiBzdHJpbmcge1xuICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICByZXR1cm4gc2V0RXJyb3IobWVzc2FnZSwgeyBhY3Rpb24sIHNldmVyaXR5OiBcImVycm9yXCIgfSk7XG59XG4iLAogICAgIi8qKlxuICogT3ZlcmxheSByZWdpc3RyeS5cbiAqXG4gKiBUcmFja3MgdGhlIHN0YWNrIG9mIG9wZW4gb3ZlcmxheXMgKG1vZGFscywgcG9wb3ZlcnMsIGNvbmZpcm0gZGlhbG9ncykgc29cbiAqIEVzY2FwZSBjYW4gY2xvc2UgdGhlIHRvcG1vc3QgYW5kIGBkYXRhLW92ZXJsYXktaWRgLWJhc2VkIERPTSBzY2FucyBoYXZlXG4gKiBhIG1pcnJvciBpbiBtZW1vcnkuIEVhY2ggZW50cnkgc3RvcmVzIGFuIGlkIHBsdXMgYW4gb3B0aW9uYWwgY2xvc2VcbiAqIGNhbGxiYWNrOyBgY2xvc2VUb3BPdmVybGF5YCBpbnZva2VzIHRoZSBjYWxsYmFjayBhbmQgcG9wcyB0aGUgZW50cnkuXG4gKi9cblxuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuXG5leHBvcnQgdHlwZSBPdmVybGF5RW50cnkgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xufTtcblxuY29uc3Qgc3RhY2sgPSBzaWduYWw8T3ZlcmxheUVudHJ5W10+KFtdKTtcblxuLyoqIEN1cnJlbnQgb3ZlcmxheSBzdGFjayBhcyBhIHJlYWQtb25seSBzbmFwc2hvdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVybGF5U3RhY2soKTogcmVhZG9ubHkgT3ZlcmxheUVudHJ5W10ge1xuICByZXR1cm4gc3RhY2sudmFsdWU7XG59XG5cbi8qKiBJcyBhbnkgb3ZlcmxheSBjdXJyZW50bHkgb3Blbj8gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNPcGVuT3ZlcmxheSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN0YWNrLnZhbHVlLmxlbmd0aCA+IDA7XG59XG5cbi8qKiBUaGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgdW5kZWZpbmVkIGlmIGVtcHR5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvcE92ZXJsYXkoKTogT3ZlcmxheUVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHN0YWNrLnZhbHVlO1xuICByZXR1cm4gc1tzLmxlbmd0aCAtIDFdO1xufVxuXG4vKiogUHVzaCBhbiBvdmVybGF5IG9udG8gdGhlIHN0YWNrLiBSZXR1cm5zIHRoZSBwb3BwZWQgZW50cnkgd2hlbiBjbG9zZWQuICovXG5leHBvcnQgZnVuY3Rpb24gcHVzaE92ZXJsYXkoZW50cnk6IE92ZXJsYXlFbnRyeSk6IHZvaWQge1xuICBzdGFjay52YWx1ZSA9IFsuLi5zdGFjay52YWx1ZSwgZW50cnldO1xufVxuXG4vKiogUG9wIGEgc3BlY2lmaWMgb3ZlcmxheSBieSBpZCAob3IgdGhlIHRvcCBpZiBubyBpZCBnaXZlbikuICovXG5leHBvcnQgZnVuY3Rpb24gcG9wT3ZlcmxheShpZD86IHN0cmluZyk6IE92ZXJsYXlFbnRyeSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHMgPSBzdGFjay52YWx1ZTtcbiAgaWYgKHMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHRvcCA9IHNbcy5sZW5ndGggLSAxXTtcbiAgICBzdGFjay52YWx1ZSA9IHMuc2xpY2UoMCwgLTEpO1xuICAgIHJldHVybiB0b3A7XG4gIH1cbiAgY29uc3QgaWR4ID0gcy5maW5kSW5kZXgoKGUpID0+IGUuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA9PT0gLTEpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGVudHJ5ID0gc1tpZHhdO1xuICBzdGFjay52YWx1ZSA9IFsuLi5zLnNsaWNlKDAsIGlkeCksIC4uLnMuc2xpY2UoaWR4ICsgMSldO1xuICByZXR1cm4gZW50cnk7XG59XG5cbi8qKiBDbG9zZSB0aGUgdG9wIG92ZXJsYXkgYnkgY2FsbGluZyBpdHMgb25DbG9zZSBhbmQgcG9wcGluZyBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVRvcE92ZXJsYXkoKTogT3ZlcmxheUVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdG9wID0gdG9wT3ZlcmxheSgpO1xuICBpZiAoIXRvcCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdG9wLm9uQ2xvc2U/LigpO1xuICByZXR1cm4gcG9wT3ZlcmxheSh0b3AuaWQpO1xufVxuXG4vKiogUmVzZXQgdGhlIHN0YWNrLiBJbnRlbmRlZCBmb3IgdGVzdHMuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRPdmVybGF5U3RhY2soKTogdm9pZCB7XG4gIHN0YWNrLnZhbHVlID0gW107XG59XG4iLAogICAgIi8qKlxuICogRXZlbnQgZGVsZWdhdGlvbiBjb3JlLlxuICpcbiAqIE9uZSBkb2N1bWVudCBsaXN0ZW5lciBkaXNwYXRjaGVzIGBkYXRhLWFjdGlvbmAgZXZlbnRzIHRvIHR5cGVkIGhhbmRsZXJzLlxuICogV2Fsa3MgdXAgdGhlIERPTSB3aXRoIGBjbG9zZXN0KCdbZGF0YS1hY3Rpb25dJylgLCBwYXJzZXMgYGRhdGEtYWN0aW9uLSpgXG4gKiBhdHRyaWJ1dGVzIGludG8gYSBjYW1lbENhc2Ugb2JqZWN0LCBhbmQgaGFuZHMgdGhlIGRpc3BhdGNoIHRvIHRoZSBjYWxsZXIuXG4gKlxuICogRm9ybXMgYXJlIHNraXBwZWQgb24gY2xpY2sg4oCUIGEgYDxmb3JtIGRhdGEtYWN0aW9uPVwiLi4uXCI+YCByZXNwb25kcyB0b1xuICogc3VibWl0IG9ubHksIHNvIGNsaWNrcyBvbiBmb3JtIGNoaWxkcmVuIGRvbid0IGJ1YmJsZSBpbnRvIGl0cyBhY3Rpb24uXG4gKiBFc2NhcGUgY2xvc2VzIHRoZSB0b3Btb3N0IG92ZXJsYXkgYnkgY2FsbGluZyB0aGUgb3ZlcmxheSByZWdpc3RyeS5cbiAqIEVudGVyL1NwYWNlIG9uIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50cyB3aXRoIGBkYXRhLWFjdGlvbmAgZmlyZSB0aGVcbiAqIGFjdGlvbiAoU3BhY2UgaXMgcHJldmVudGVkIHRvIHN0b3AgcGFnZSBzY3JvbGwpLiBDbGljayBvdXRzaWRlIGFueVxuICogYFtkYXRhLW92ZXJsYXktaWRdYCBlbGVtZW50IGFsc28gcG9wcyB0aGUgdG9wIG92ZXJsYXkuXG4gKi9cblxuaW1wb3J0IHsgY2xvc2VUb3BPdmVybGF5IGFzIGNsb3NlVG9wUmVnaXN0cnlPdmVybGF5IH0gZnJvbSBcIi4vb3ZlcmxheS50c1wiO1xuXG4vKiogRWxlbWVudHMgdGhhdCBuYXRpdmVseSBmaXJlIGNsaWNrIG9uIEVudGVyL1NwYWNlLiAqL1xuZXhwb3J0IGNvbnN0IElOVEVSQUNUSVZFX1RBR1MgPSBuZXcgU2V0KFtcIkJVVFRPTlwiLCBcIkFcIiwgXCJJTlBVVFwiLCBcIlNFTEVDVFwiLCBcIlRFWFRBUkVBXCJdKTtcblxuLyoqIEV2ZW50IHR5cGVzIHRoYXQgbWF5IHRyaWdnZXIgYSBkYXRhLWFjdGlvbiBkaXNwYXRjaC4gKi9cbmV4cG9ydCBjb25zdCBBQ1RJT05fRVZFTlRfVFlQRVMgPSBuZXcgU2V0KFtcImNsaWNrXCIsIFwic3VibWl0XCIsIFwiY2hhbmdlXCIsIFwiaW5wdXRcIl0pO1xuXG4vKiogUGFyc2VkIGFjdGlvbiBkaXNwYXRjaCDigJQgd2hhdCB0aGUgcnVudGltZSByZXNvbHZlcyBiZWZvcmUgaW52b2tpbmcgYSBoYW5kbGVyLiAqL1xuZXhwb3J0IHR5cGUgQWN0aW9uRGlzcGF0Y2ggPSB7XG4gIGFjdGlvbjogc3RyaW5nO1xuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgZXZlbnQ6IEV2ZW50O1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuLyoqXG4gKiBQYXJzZSBgZGF0YS1hY3Rpb24tKmAgYXR0cmlidXRlcyBpbnRvIGNhbWVsQ2FzZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogYGRhdGEtYWN0aW9uLXRleHQtc2V0LWlkPVwiNDJcImAgYmVjb21lcyBgeyB0ZXh0U2V0SWQ6IFwiNDJcIiB9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQWN0aW9uRGF0YShlbGVtZW50OiBIVE1MRWxlbWVudCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgYXR0ciBvZiBBcnJheS5mcm9tKGVsZW1lbnQuYXR0cmlidXRlcykpIHtcbiAgICBpZiAoYXR0ci5uYW1lLnN0YXJ0c1dpdGgoXCJkYXRhLWFjdGlvbi1cIikpIHtcbiAgICAgIGNvbnN0IGtleSA9IGF0dHIubmFtZVxuICAgICAgICAucmVwbGFjZShcImRhdGEtYWN0aW9uLVwiLCBcIlwiKVxuICAgICAgICAucmVwbGFjZSgvLShbYS16XSkvZywgKF9tOiBzdHJpbmcsIGxldHRlcjogc3RyaW5nKSA9PiBsZXR0ZXIudG9VcHBlckNhc2UoKSk7XG4gICAgICBkYXRhW2tleV0gPSBhdHRyLnZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBDbG9zZSB0aGUgdG9wbW9zdCBvdmVybGF5IGJ5IGRpc3BhdGNoaW5nIGBvdmVybGF5OmNsb3NlYCBvbiBpdHMgZWxlbWVudC5cbiAqIE92ZXJsYXlzIG1hcmsgdGhlbXNlbHZlcyB3aXRoIGBkYXRhLW92ZXJsYXktaWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VUb3BPdmVybGF5KCk6IHZvaWQge1xuICBjb25zdCBvdmVybGF5cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgXCJbZGF0YS1vdmVybGF5LWlkXTpwb3BvdmVyLW9wZW4sIGRpYWxvZ1tkYXRhLW92ZXJsYXktaWRdW29wZW5dXCJcbiAgKTtcbiAgaWYgKG92ZXJsYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBjb25zdCB0b3BPdmVybGF5ID0gb3ZlcmxheXNbb3ZlcmxheXMubGVuZ3RoIC0gMV07XG4gIGlmICghdG9wT3ZlcmxheSkgcmV0dXJuO1xuICB0b3BPdmVybGF5LmRpc3BhdGNoRXZlbnQoXG4gICAgbmV3IEN1c3RvbUV2ZW50KFwib3ZlcmxheTpjbG9zZVwiLCB7XG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgZGV0YWlsOiB7IGlkOiB0b3BPdmVybGF5LmdldEF0dHJpYnV0ZShcImRhdGEtb3ZlcmxheS1pZFwiKSB9LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIERPTSBldmVudCB0byBhbiBBY3Rpb25EaXNwYXRjaCwgb3IgbnVsbCBpZiBubyBkYXRhLWFjdGlvbiBtYXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUFjdGlvbihldmVudDogRXZlbnQpOiBBY3Rpb25EaXNwYXRjaCB8IG51bGwge1xuICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYWN0aW9uRWxlbWVudCA9IHRhcmdldC5jbG9zZXN0KFwiW2RhdGEtYWN0aW9uXVwiKTtcbiAgaWYgKCEoYWN0aW9uRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuIG51bGw7XG4gIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgYWN0aW9uRWxlbWVudC50YWdOYW1lID09PSBcIkZPUk1cIikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFjdGlvbiA9IGFjdGlvbkVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1hY3Rpb25cIik7XG4gIGlmICghYWN0aW9uKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBhY3Rpb24sXG4gICAgZWxlbWVudDogYWN0aW9uRWxlbWVudCxcbiAgICBldmVudCxcbiAgICBkYXRhOiBwYXJzZUFjdGlvbkRhdGEoYWN0aW9uRWxlbWVudCksXG4gIH07XG59XG5cbi8qKlxuICogSW5zdGFsbCBkb2N1bWVudC1sZXZlbCBsaXN0ZW5lcnMgZm9yIHRoZSBkZWxlZ2F0aW9uIHN5c3RlbS5cbiAqIFJldHVybnMgYSBjbGVhbnVwIGZ1bmN0aW9uIHRoYXQgcmVtb3ZlcyBldmVyeSBsaXN0ZW5lciBpdCBpbnN0YWxsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsRXZlbnREZWxlZ2F0aW9uKFxuICBvbkRpc3BhdGNoOiAoZGlzcGF0Y2g6IEFjdGlvbkRpc3BhdGNoKSA9PiB2b2lkLFxuICBvcHRpb25zOiB7IG9uRXNjYXBlPzogKCkgPT4gdm9pZDsgb25PdXRzaWRlT3ZlcmxheUNsaWNrPzogKCkgPT4gdm9pZCB9ID0ge31cbik6ICgpID0+IHZvaWQge1xuICBjb25zdCBoYW5kbGVBY3Rpb25FdmVudCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICBjb25zdCBkaXNwYXRjaCA9IHJlc29sdmVBY3Rpb24oZXZlbnQpO1xuICAgIGlmIChkaXNwYXRjaCkgb25EaXNwYXRjaChkaXNwYXRjaCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgIGlmIChvcHRpb25zLm9uRXNjYXBlKSB7XG4gICAgICAgIG9wdGlvbnMub25Fc2NhcGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsb3NlVG9wUmVnaXN0cnlPdmVybGF5KCk7XG4gICAgICAgIGNsb3NlVG9wT3ZlcmxheSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIgfHwgZXZlbnQua2V5ID09PSBcIiBcIikge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcbiAgICAgIGlmIChJTlRFUkFDVElWRV9UQUdTLmhhcyh0YXJnZXQudGFnTmFtZSkpIHJldHVybjtcbiAgICAgIGNvbnN0IGRpc3BhdGNoID0gcmVzb2x2ZUFjdGlvbihldmVudCk7XG4gICAgICBpZiAoZGlzcGF0Y2gpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25EaXNwYXRjaChkaXNwYXRjaCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIGlmICghKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XG4gICAgY29uc3QgY2xpY2tlZE92ZXJsYXkgPSBldmVudC50YXJnZXQuY2xvc2VzdChcIltkYXRhLW92ZXJsYXktaWRdXCIpO1xuICAgIGlmIChjbGlja2VkT3ZlcmxheSkgcmV0dXJuO1xuICAgIGlmIChldmVudC50YXJnZXQuY2xvc2VzdChcImJ1dHRvbltwb3BvdmVydGFyZ2V0XVwiKSkgcmV0dXJuO1xuICAgIGlmIChvcHRpb25zLm9uT3V0c2lkZU92ZXJsYXlDbGljaykge1xuICAgICAgb3B0aW9ucy5vbk91dHNpZGVPdmVybGF5Q2xpY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xvc2VUb3BSZWdpc3RyeU92ZXJsYXkoKTtcbiAgICAgIGNsb3NlVG9wT3ZlcmxheSgpO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBvZiBBQ1RJT05fRVZFTlRfVFlQRVMpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlQWN0aW9uRXZlbnQpO1xuICB9XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIGhhbmRsZU1vdXNlRG93bik7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBvZiBBQ1RJT05fRVZFTlRfVFlQRVMpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVBY3Rpb25FdmVudCk7XG4gICAgfVxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgaGFuZGxlTW91c2VEb3duKTtcbiAgfTtcbn1cbiIsCiAgICAiLyoqXG4gKiBGb3JtIHByaW1pdGl2ZS5cbiAqXG4gKiBgY3JlYXRlRm9ybWAgcmV0dXJucyBhIHR5cGVkIGZvcm0gc3RvcmU6IHBlci1maWVsZCBzaWduYWxzLCBhbiBhZ2dyZWdhdGVkXG4gKiB2YWx1ZXMgc2lnbmFsLCBvcGVuL2Nsb3NlL3N1Ym1pdCBtZXRob2RzLCBhbmQgdGhyZWUgYXV0by1yZWdpc3RlcmVkIGFjdGlvblxuICogaGFuZGxlcnMgKGB7bmFtZX06b3BlbmAsIGB7bmFtZX06Y2xvc2VgLCBge25hbWV9OnN1Ym1pdGApIHRoYXQgY2FsbGVycyBzcHJlYWRcbiAqIGludG8gdGhlaXIgZ2xvYmFsIGFjdGlvbiByZWdpc3RyeS5cbiAqXG4gKiBMaWZlY3ljbGU6XG4gKiAgIG9wZW4gIOKGkiByZXNldHMgZmllbGRzIHRvIGluaXRpYWxWYWx1ZXMsIGFwcGxpZXMgb25PcGVuIG92ZXJyaWRlcyxcbiAqICAgICAgICAgICBzZXRzIGlzT3BlbiA9IHRydWUsIHJlY29yZHMgZGF0YS1hY3Rpb24tKiBkYXRhIGluIG9wZW5QYXJhbXNcbiAqICAgdHlwaW5nIOKGkiB1bmNvbnRyb2xsZWQgaW5wdXRzIGtlZXAgdGhlaXIgb3duIHN0YXRlOyBjb250cm9sbGVkIGlucHV0c1xuICogICAgICAgICAgIHdyaXRlIGZpZWxkcy5YLnZhbHVlIGRpcmVjdGx5XG4gKiAgIHN1Ym1pdCDihpIgcmVhZHMgRm9ybURhdGEgZnJvbSB0aGUgZm9ybSBlbGVtZW50LCBtZXJnZXMgaW50byBmaWVsZHMsXG4gKiAgICAgICAgICAgcnVucyBvcHRpb25hbCB2YWxpZGF0ZSwgY2FsbHMgdXNlciBvblN1Ym1pdCB3aXRoIGZpbmFsIHZhbHVlcyxcbiAqICAgICAgICAgICBjbG9zZXMgb24gc3VjY2Vzcywgc2V0cyBlcnJvclN0YXRlIG9uIGZhaWx1cmVcbiAqICAgY2xvc2UgIOKGkiByZXNldHMgYW5kIHNldHMgaXNPcGVuID0gZmFsc2VcbiAqICAgZ3VhcmQgIOKGkiBhdXRvbm9tb3VzIGVmZmVjdDsgaWYgZ3VhcmQoKSByZXR1cm5zIGZhbHNlIHdoaWxlIG9wZW4sIGNsb3NlKClcbiAqL1xuXG5pbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0LCB0eXBlIFJlYWRvbmx5U2lnbmFsLCB0eXBlIFNpZ25hbCwgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHsgc3VibWl0RXJyb3IgfSBmcm9tIFwiLi9lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25SZWdpc3RyeSB9IGZyb20gXCIuL3JlZ2lzdHJ5LnRzXCI7XG5cbmZ1bmN0aW9uIGlzRm9ybUVsZW1lbnQodGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwpOiB0YXJnZXQgaXMgSFRNTEZvcm1FbGVtZW50IHtcbiAgaWYgKCF0YXJnZXQpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBIVE1MRm9ybUVsZW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50O1xuICB9XG4gIGNvbnN0IHQgPSB0YXJnZXQgYXMgdW5rbm93biBhcyB7IHRhZ05hbWU/OiB1bmtub3duIH07XG4gIHJldHVybiB0eXBlb2YgdC50YWdOYW1lID09PSBcInN0cmluZ1wiICYmIHQudGFnTmFtZSA9PT0gXCJGT1JNXCI7XG59XG5cbmV4cG9ydCB0eXBlIEZvcm1PcGVuQ29udGV4dDxUU3RvcmVzPiA9IHtcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgc3RvcmVzOiBUU3RvcmVzO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybVN1Ym1pdENvbnRleHQ8VFZhbHVlcywgVFN0b3Jlcz4gPSB7XG4gIHZhbHVlczogVFZhbHVlcztcbiAgc3RvcmVzOiBUU3RvcmVzO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybUNvbmZpZzxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4gPSB7XG4gIC8qKiBVc2VkIGFzIGFjdGlvbiBuYW1lc3BhY2U6IGB7bmFtZX06b3BlbmAsIGB7bmFtZX06Y2xvc2VgLCBge25hbWV9OnN1Ym1pdGAuICovXG4gIG5hbWU6IHN0cmluZztcbiAgaW5pdGlhbFZhbHVlczogVFZhbHVlcztcbiAgb25TdWJtaXQ6IChjdHg6IEZvcm1TdWJtaXRDb250ZXh0PFRWYWx1ZXMsIFRTdG9yZXM+KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgLyoqIEludm9rZWQgb24gb3BlbjsgcmV0dXJuIHBhcnRpYWwgb3ZlcnJpZGVzIHRvIHByZS1wb3B1bGF0ZSBmaWVsZHMuICovXG4gIG9uT3Blbj86IChjdHg6IEZvcm1PcGVuQ29udGV4dDxUU3RvcmVzPikgPT4gUGFydGlhbDxUVmFsdWVzPiB8IHVuZGVmaW5lZDtcbiAgLyoqIFJldHVybnMgZmFsc2Ugd2hpbGUgb3BlbiDihpIgZm9ybSBhdXRvLWNsb3NlcyAoZW50aXR5LWRlbGV0aW9uIGd1YXJkKS4gKi9cbiAgZ3VhcmQ/OiAoY3R4OiB7IHN0b3JlczogVFN0b3JlcyB9KSA9PiBib29sZWFuO1xuICAvKiogU3luY2hyb25vdXMgdmFsaWRhdGlvbi4gUmV0dXJuaW5nIGtleXMgYmxvY2tzIHN1Ym1pdC4gKi9cbiAgdmFsaWRhdGU/OiAodmFsdWVzOiBUVmFsdWVzKSA9PiBQYXJ0aWFsPFJlY29yZDxrZXlvZiBUVmFsdWVzLCBzdHJpbmc+PiB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtU3RvcmU8VFZhbHVlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIFRTdG9yZXM+ID0ge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlzT3BlbjogUmVhZG9ubHlTaWduYWw8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IHZhbHVlczogUmVhZG9ubHlTaWduYWw8VFZhbHVlcz47XG4gIHJlYWRvbmx5IGZpZWxkczogeyBbSyBpbiBrZXlvZiBUVmFsdWVzXTogU2lnbmFsPFRWYWx1ZXNbS10+IH07XG4gIHJlYWRvbmx5IGVycm9yczogUmVhZG9ubHlTaWduYWw8UGFydGlhbDxSZWNvcmQ8a2V5b2YgVFZhbHVlcywgc3RyaW5nPj4+O1xuICByZWFkb25seSBpc1N1Ym1pdHRpbmc6IFJlYWRvbmx5U2lnbmFsPGJvb2xlYW4+O1xuICByZWFkb25seSBvcGVuUGFyYW1zOiBSZWFkb25seVNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgb3BlbihvdmVycmlkZT86IFBhcnRpYWw8VFZhbHVlcz4sIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkO1xuICBjbG9zZSgpOiB2b2lkO1xuICBzdWJtaXQoZXZlbnQ/OiBFdmVudCk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBMYXRlLWJpbmRzIHN0b3JlczsgcmVxdWlyZWQgYmVmb3JlIGd1YXJkL29uT3Blbi9vblN1Ym1pdCBjYW4gYWNjZXNzIHN0b3Jlcy4gKi9cbiAgYmluZFN0b3JlcyhnZXRTdG9yZXM6ICgpID0+IFRTdG9yZXMpOiB2b2lkO1xuICAvKiogQWN0aW9uIGhhbmRsZXIgZW50cmllcy4gU3ByZWFkIGludG8gdGhlIHVzZXIncyBBY3Rpb25SZWdpc3RyeS4gKi9cbiAgYWN0aW9uczogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybTxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4oXG4gIGNvbmZpZzogRm9ybUNvbmZpZzxUVmFsdWVzLCBUU3RvcmVzPlxuKTogRm9ybVN0b3JlPFRWYWx1ZXMsIFRTdG9yZXM+IHtcbiAgY29uc3QgZmllbGRLZXlzID0gT2JqZWN0LmtleXMoY29uZmlnLmluaXRpYWxWYWx1ZXMpIGFzIHVua25vd24gYXMgKGtleW9mIFRWYWx1ZXMpW107XG5cbiAgY29uc3QgZmllbGRzID0ge30gYXMgdW5rbm93biBhcyB7IFtLIGluIGtleW9mIFRWYWx1ZXNdOiBTaWduYWw8VFZhbHVlc1tLXT4gfTtcbiAgZm9yIChjb25zdCBrZXkgb2YgZmllbGRLZXlzKSB7XG4gICAgZmllbGRzW2tleV0gPSBzaWduYWwoY29uZmlnLmluaXRpYWxWYWx1ZXNba2V5XSk7XG4gIH1cblxuICBjb25zdCB2YWx1ZXMgPSBjb21wdXRlZDxUVmFsdWVzPigoKSA9PiB7XG4gICAgY29uc3QgdiA9IHt9IGFzIHVua25vd24gYXMgVFZhbHVlcztcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZEtleXMpIHtcbiAgICAgIHZba2V5XSA9IGZpZWxkc1trZXldLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfSk7XG5cbiAgY29uc3QgaXNPcGVuID0gc2lnbmFsKGZhbHNlKTtcbiAgY29uc3QgaXNTdWJtaXR0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgY29uc3QgZXJyb3JzID0gc2lnbmFsPFBhcnRpYWw8UmVjb3JkPGtleW9mIFRWYWx1ZXMsIHN0cmluZz4+Pih7fSk7XG4gIGNvbnN0IG9wZW5QYXJhbXMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xuXG4gIGxldCBnZXRTdG9yZXNSZWY6ICgoKSA9PiBUU3RvcmVzKSB8IG51bGwgPSBudWxsO1xuICBsZXQgZGlzcG9zZUd1YXJkRWZmZWN0OiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICBmdW5jdGlvbiBnZXRTdG9yZXNPclRocm93KCk6IFRTdG9yZXMge1xuICAgIGlmICghZ2V0U3RvcmVzUmVmKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGb3JtIFwiJHtjb25maWcubmFtZX1cIiB1c2VkIGJlZm9yZSBiaW5kU3RvcmVzKCkuIENhbGwgZm9ybS5iaW5kU3RvcmVzKCgpID0+IHlvdXJTdG9yZXMpIGF0IGFwcCBpbml0LmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBnZXRTdG9yZXNSZWYoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VG9Jbml0aWFsKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkS2V5cykge1xuICAgICAgZmllbGRzW2tleV0udmFsdWUgPSBjb25maWcuaW5pdGlhbFZhbHVlc1trZXldO1xuICAgIH1cbiAgICBlcnJvcnMudmFsdWUgPSB7fTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBvcGVuIGFwcGxpZXMgdHdvIGxheWVycyBvZiBvdmVycmlkZXMgcGx1cyBvcHRpb25hbCBvbk9wZW4g4oCUIGJyYW5jaHkgYnkgZGVzaWduLlxuICBmdW5jdGlvbiBvcGVuKG92ZXJyaWRlPzogUGFydGlhbDxUVmFsdWVzPiwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30pOiB2b2lkIHtcbiAgICByZXNldFRvSW5pdGlhbCgpO1xuICAgIG9wZW5QYXJhbXMudmFsdWUgPSBwYXJhbXM7XG4gICAgaWYgKGNvbmZpZy5vbk9wZW4gJiYgZ2V0U3RvcmVzUmVmKSB7XG4gICAgICBjb25zdCBvbk9wZW5PdmVycmlkZSA9IGNvbmZpZy5vbk9wZW4oeyBkYXRhOiBwYXJhbXMsIHN0b3JlczogZ2V0U3RvcmVzT3JUaHJvdygpIH0pID8/IHt9O1xuICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob25PcGVuT3ZlcnJpZGUpKSB7XG4gICAgICAgIGlmIChrIGluIGZpZWxkcykge1xuICAgICAgICAgIGZpZWxkc1trIGFzIGtleW9mIFRWYWx1ZXNdLnZhbHVlID0gdiBhcyBUVmFsdWVzW2tleW9mIFRWYWx1ZXNdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvdmVycmlkZSkge1xuICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob3ZlcnJpZGUpKSB7XG4gICAgICAgIGlmIChrIGluIGZpZWxkcykge1xuICAgICAgICAgIGZpZWxkc1trIGFzIGtleW9mIFRWYWx1ZXNdLnZhbHVlID0gdiBhcyBUVmFsdWVzW2tleW9mIFRWYWx1ZXNdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlzT3Blbi52YWx1ZSA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZSgpOiB2b2lkIHtcbiAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICByZXNldFRvSW5pdGlhbCgpO1xuICAgIG9wZW5QYXJhbXMudmFsdWUgPSB7fTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBzdWJtaXQgZnVubmVscyBGb3JtRGF0YSwgdmFsaWRhdGUsIG9uU3VibWl0LCBlcnJvclN0YXRlLCBhbmQgY2xvc2Ug4oCUIG9uZS1wYXRoLXBlci1zdGFnZSBieSBkZXNpZ24uXG4gIGFzeW5jIGZ1bmN0aW9uIHN1Ym1pdChldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGV2ZW50KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChldmVudCAmJiBpc0Zvcm1FbGVtZW50KGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIGNvbnN0IGZkID0gbmV3IEZvcm1EYXRhKGV2ZW50LnRhcmdldCk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZEtleXMpIHtcbiAgICAgICAgY29uc3QgcmF3ID0gZmQuZ2V0KGtleSBhcyB1bmtub3duIGFzIHN0cmluZyk7XG4gICAgICAgIGlmIChyYXcgIT09IG51bGwpIHtcbiAgICAgICAgICBmaWVsZHNba2V5XS52YWx1ZSA9IFN0cmluZyhyYXcpIGFzIHVua25vd24gYXMgVFZhbHVlc1t0eXBlb2Yga2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjdXJyZW50ID0gdmFsdWVzLnZhbHVlO1xuICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvcnMgPSBjb25maWcudmFsaWRhdGU/LihjdXJyZW50KTtcbiAgICBpZiAodmFsaWRhdGlvbkVycm9ycyAmJiBPYmplY3Qua2V5cyh2YWxpZGF0aW9uRXJyb3JzKS5sZW5ndGggPiAwKSB7XG4gICAgICBlcnJvcnMudmFsdWUgPSB2YWxpZGF0aW9uRXJyb3JzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlcnJvcnMudmFsdWUgPSB7fTtcbiAgICBpc1N1Ym1pdHRpbmcudmFsdWUgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb25maWcub25TdWJtaXQoe1xuICAgICAgICB2YWx1ZXM6IGN1cnJlbnQsXG4gICAgICAgIHN0b3JlczogZ2V0U3RvcmVzT3JUaHJvdygpLFxuICAgICAgfSk7XG4gICAgICBjbG9zZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc3VibWl0RXJyb3IoYCR7Y29uZmlnLm5hbWV9OnN1Ym1pdGAsIGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlzU3VibWl0dGluZy52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGJpbmRTdG9yZXMoZ2V0U3RvcmVzOiAoKSA9PiBUU3RvcmVzKTogdm9pZCB7XG4gICAgZ2V0U3RvcmVzUmVmID0gZ2V0U3RvcmVzO1xuICAgIGRpc3Bvc2VHdWFyZEVmZmVjdD8uKCk7XG4gICAgY29uc3QgZ3VhcmRGbiA9IGNvbmZpZy5ndWFyZDtcbiAgICBpZiAoZ3VhcmRGbikge1xuICAgICAgZGlzcG9zZUd1YXJkRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFpc09wZW4udmFsdWUpIHJldHVybjtcbiAgICAgICAgaWYgKCFndWFyZEZuKHsgc3RvcmVzOiBnZXRTdG9yZXMoKSB9KSkgY2xvc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFjdGlvbnM6IEFjdGlvblJlZ2lzdHJ5PFRTdG9yZXM+ID0ge1xuICAgIFtgJHtjb25maWcubmFtZX06b3BlbmBdOiAoeyBkYXRhIH0pID0+IHtcbiAgICAgIG9wZW4odW5kZWZpbmVkLCBkYXRhKTtcbiAgICB9LFxuICAgIFtgJHtjb25maWcubmFtZX06Y2xvc2VgXTogKCkgPT4ge1xuICAgICAgY2xvc2UoKTtcbiAgICB9LFxuICAgIFtgJHtjb25maWcubmFtZX06c3VibWl0YF06IGFzeW5jICh7IGV2ZW50IH0pID0+IHtcbiAgICAgIGF3YWl0IHN1Ym1pdChldmVudCk7XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgIGlzT3BlbixcbiAgICB2YWx1ZXMsXG4gICAgZmllbGRzLFxuICAgIGVycm9ycyxcbiAgICBpc1N1Ym1pdHRpbmcsXG4gICAgb3BlblBhcmFtcyxcbiAgICBvcGVuLFxuICAgIGNsb3NlLFxuICAgIHN1Ym1pdCxcbiAgICBiaW5kU3RvcmVzLFxuICAgIGFjdGlvbnMsXG4gIH07XG59XG5cbi8qKlxuICogQ29tcG9zZSBtYW55IGZvcm1zIGludG8gYSBzaW5nbGUgc2V0OiBtZXJnZWQgYWN0aW9ucywgY2xvc2VBbGwsIG9wZW5Gb3JtIHNpZ25hbC5cbiAqL1xuZXhwb3J0IHR5cGUgRm9ybVNldDxUU3RvcmVzPiA9IHtcbiAgYWN0aW9uczogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz47XG4gIG9wZW5Gb3JtOiBSZWFkb25seVNpZ25hbDxzdHJpbmcgfCBudWxsPjtcbiAgY2xvc2VBbGwoKTogdm9pZDtcbiAgYmluZFN0b3JlcyhnZXRTdG9yZXM6ICgpID0+IFRTdG9yZXMpOiB2b2lkO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZvcm1TZXQ8VFN0b3Jlcz4oXG4gIGZvcm1zOiByZWFkb25seSBGb3JtU3RvcmU8UmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz5bXVxuKTogRm9ybVNldDxUU3RvcmVzPiB7XG4gIGNvbnN0IG1lcmdlZDogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz4gPSB7fTtcbiAgZm9yIChjb25zdCBmb3JtIG9mIGZvcm1zKSB7XG4gICAgT2JqZWN0LmFzc2lnbihtZXJnZWQsIGZvcm0uYWN0aW9ucyk7XG4gIH1cblxuICBjb25zdCBvcGVuRm9ybSA9IGNvbXB1dGVkPHN0cmluZyB8IG51bGw+KCgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIHtcbiAgICAgIGlmIChmb3JtLmlzT3Blbi52YWx1ZSkgcmV0dXJuIGZvcm0ubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgYWN0aW9uczogbWVyZ2VkLFxuICAgIG9wZW5Gb3JtLFxuICAgIGNsb3NlQWxsKCkge1xuICAgICAgZm9yIChjb25zdCBmb3JtIG9mIGZvcm1zKSBmb3JtLmNsb3NlKCk7XG4gICAgfSxcbiAgICBiaW5kU3RvcmVzKGdldFN0b3Jlcykge1xuICAgICAgZm9yIChjb25zdCBmb3JtIG9mIGZvcm1zKSBmb3JtLmJpbmRTdG9yZXMoZ2V0U3RvcmVzKTtcbiAgICB9LFxuICB9O1xufVxuIiwKICAgICJpbXBvcnR7b3B0aW9ucyBhcyByLEZyYWdtZW50IGFzIGV9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0ZyYWdtZW50fWZyb21cInByZWFjdFwiO3ZhciB0PS9bXCImPF0vO2Z1bmN0aW9uIG4ocil7aWYoMD09PXIubGVuZ3RofHwhMT09PXQudGVzdChyKSlyZXR1cm4gcjtmb3IodmFyIGU9MCxuPTAsbz1cIlwiLGY9XCJcIjtuPHIubGVuZ3RoO24rKyl7c3dpdGNoKHIuY2hhckNvZGVBdChuKSl7Y2FzZSAzNDpmPVwiJnF1b3Q7XCI7YnJlYWs7Y2FzZSAzODpmPVwiJmFtcDtcIjticmVhaztjYXNlIDYwOmY9XCImbHQ7XCI7YnJlYWs7ZGVmYXVsdDpjb250aW51ZX1uIT09ZSYmKG8rPXIuc2xpY2UoZSxuKSksbys9ZixlPW4rMX1yZXR1cm4gbiE9PWUmJihvKz1yLnNsaWNlKGUsbikpLG99dmFyIG89L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxmPTAsaT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIHUoZSx0LG4sbyxpLHUpe3R8fCh0PXt9KTt2YXIgYSxjLHA9dDtpZihcInJlZlwiaW4gcClmb3IoYyBpbiBwPXt9LHQpXCJyZWZcIj09Yz9hPXRbY106cFtjXT10W2NdO3ZhciBsPXt0eXBlOmUscHJvcHM6cCxrZXk6bixyZWY6YSxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1mLF9faTotMSxfX3U6MCxfX3NvdXJjZTppLF9fc2VsZjp1fTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoYT1lLmRlZmF1bHRQcm9wcykpZm9yKGMgaW4gYSl2b2lkIDA9PT1wW2NdJiYocFtjXT1hW2NdKTtyZXR1cm4gci52bm9kZSYmci52bm9kZShsKSxsfWZ1bmN0aW9uIGEocil7dmFyIHQ9dShlLHt0cGw6cixleHByczpbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKX0pO3JldHVybiB0LmtleT10Ll9fdix0fXZhciBjPXt9LHA9L1tBLVpdL2c7ZnVuY3Rpb24gbChlLHQpe2lmKHIuYXR0cil7dmFyIGY9ci5hdHRyKGUsdCk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGYpcmV0dXJuIGZ9aWYodD1mdW5jdGlvbihyKXtyZXR1cm4gbnVsbCE9PXImJlwib2JqZWN0XCI9PXR5cGVvZiByJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnZhbHVlT2Y/ci52YWx1ZU9mKCk6cn0odCksXCJyZWZcIj09PWV8fFwia2V5XCI9PT1lKXJldHVyblwiXCI7aWYoXCJzdHlsZVwiPT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIHQpe3ZhciBpPVwiXCI7Zm9yKHZhciB1IGluIHQpe3ZhciBhPXRbdV07aWYobnVsbCE9YSYmXCJcIiE9PWEpe3ZhciBsPVwiLVwiPT11WzBdP3U6Y1t1XXx8KGNbdV09dS5yZXBsYWNlKHAsXCItJCZcIikudG9Mb3dlckNhc2UoKSkscz1cIjtcIjtcIm51bWJlclwiIT10eXBlb2YgYXx8bC5zdGFydHNXaXRoKFwiLS1cIil8fG8udGVzdChsKXx8KHM9XCJweDtcIiksaT1pK2wrXCI6XCIrYStzfX1yZXR1cm4gZSsnPVwiJytuKGkpKydcIid9cmV0dXJuIG51bGw9PXR8fCExPT09dHx8XCJmdW5jdGlvblwiPT10eXBlb2YgdHx8XCJvYmplY3RcIj09dHlwZW9mIHQ/XCJcIjohMD09PXQ/ZTplKyc9XCInK24oXCJcIit0KSsnXCInfWZ1bmN0aW9uIHMocil7aWYobnVsbD09cnx8XCJib29sZWFuXCI9PXR5cGVvZiByfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByKXJldHVybiBudWxsO2lmKFwib2JqZWN0XCI9PXR5cGVvZiByKXtpZih2b2lkIDA9PT1yLmNvbnN0cnVjdG9yKXJldHVybiByO2lmKGkocikpe2Zvcih2YXIgZT0wO2U8ci5sZW5ndGg7ZSsrKXJbZV09cyhyW2VdKTtyZXR1cm4gcn19cmV0dXJuIG4oXCJcIityKX1leHBvcnR7dSBhcyBqc3gsbCBhcyBqc3hBdHRyLHUgYXMganN4REVWLHMgYXMganN4RXNjYXBlLGEgYXMganN4VGVtcGxhdGUsdSBhcyBqc3hzfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzeFJ1bnRpbWUubW9kdWxlLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIFN0b3JlIGJhc2UgKyBQcmVhY3QgY29udGV4dC5cbiAqXG4gKiBgY3JlYXRlU3RvcmVgIGlzIGEgdGhpbiBjb252ZW50aW9uLWVuZm9yY2VyOiBhIHR5cGVkIGJhZyBvZiBzaWduYWxzXG4gKiBwbHVzIG1ldGhvZHMuIEFwcHMgdXNlIGl0IHRvIGRlZmluZSBkb21haW4gc3RvcmVzIHdob3NlIG9ubHkgcHVibGljXG4gKiBtdXRhdGlvbiBzdXJmYWNlIGlzIG5hbWVkIG1ldGhvZHMgKGFjdGlvbnMgY2FsbCB0aGVtOyBjb21wb25lbnRzIHJlYWRcbiAqIHNpZ25hbHMgYW5kIGRpc3BhdGNoIGFjdGlvbnMpLiBObyBjbGV2ZXJuZXNzIOKAlCBhIG5hbWVkIHBhdHRlcm4gbW9yZVxuICogdGhhbiBhIGxpYnJhcnkuXG4gKlxuICogYFN0b3JlUHJvdmlkZXJgICsgYHVzZVN0b3Jlc2Agd2lyZSB0aGUgc3RvcmVzIGJhZyBpbnRvIFByZWFjdCBjb250ZXh0XG4gKiBzbyBjb21wb25lbnRzIGFuZCB0aGUgZGVsZWdhdGlvbiBydW50aW1lIGNhbiByZWFjaCBpdCB2aWEgYSBzaW5nbGUgaG9vay5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5cbi8qKlxuICogSWRlbnRpdHkgaGVscGVyOyBleGlzdHMgc28gZG9tYWluIHN0b3JlcyBoYXZlIGEgY2Fub25pY2FsIGNyZWF0aW9uXG4gKiBjYWxsIGV2ZW4gdGhvdWdoIHRoZSBiYWcgaXRzZWxmIGlzIGEgcGxhaW4gb2JqZWN0LiBDZW50cmFsaXNpbmcgaGVyZVxuICogbGV0cyB1cyBoYW5nIGFkZGl0aW9uYWwgYmVoYXZpb3VyIG9mZiB0aGUgY2FsbCBzaXRlIGxhdGVyIChkZWJ1Z1xuICogaW5zdHJ1bWVudGF0aW9uLCBkZXZ0b29scykgd2l0aG91dCBhIG1pZ3JhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0b3JlPFQgZXh0ZW5kcyBvYmplY3Q+KGluaXQ6IFQpOiBUIHtcbiAgcmV0dXJuIGluaXQ7XG59XG5cbmNvbnN0IFN0b3JlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8dW5rbm93bj4obnVsbCk7XG5cbmV4cG9ydCB0eXBlIFN0b3JlUHJvdmlkZXJQcm9wczxUU3RvcmVzPiA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBzdG9yZXM6IFRTdG9yZXM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gU3RvcmVQcm92aWRlcjxUU3RvcmVzPih7IGNoaWxkcmVuLCBzdG9yZXMgfTogU3RvcmVQcm92aWRlclByb3BzPFRTdG9yZXM+KSB7XG4gIHJldHVybiA8U3RvcmVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtzdG9yZXN9PntjaGlsZHJlbn08L1N0b3JlQ29udGV4dC5Qcm92aWRlcj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdG9yZXM8VFN0b3Jlcz4oKTogVFN0b3JlcyB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoU3RvcmVDb250ZXh0KSBhcyB1bmtub3duIGFzIFRTdG9yZXMgfCBudWxsO1xuICBpZiAoY3R4ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlU3RvcmVzIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBTdG9yZVByb3ZpZGVyXCIpO1xuICB9XG4gIHJldHVybiBjdHg7XG59XG4iLAogICAgIi8qKlxuICogQWN0aW9uRm9ybSDigJQgd3JhcHMgYSBuYXRpdmUgPGZvcm0+IHdpdGggdGhlIGFjdGlvbiBwYXR0ZXJuLlxuICpcbiAqIFJlbmRlcnMgPGZvcm0gZGF0YS1hY3Rpb249XCJ7Zm9ybS5uYW1lfTpzdWJtaXRcIj4gc28gdGhlIGluc3RhbGxlZFxuICogZXZlbnQgZGVsZWdhdGlvbiBjYXRjaGVzIHRoZSBzdWJtaXQgZXZlbnQgYW5kIGRpc3BhdGNoZXMgdG8gdGhlXG4gKiBmb3JtJ3MgYXV0by1yZWdpc3RlcmVkIDpzdWJtaXQgaGFuZGxlci4gYGFyaWEtYnVzeWAgbWlycm9ycyB0aGVcbiAqIGBpc1N1Ym1pdHRpbmdgIHNpZ25hbCBzbyBjb25zdW1lciBzdHlsaW5nIGNhbiByZXNwb25kIHdpdGhvdXQgZXh0cmFcbiAqIHdpcmluZy4gVGhlIGZvcm0gZWxlbWVudCBhbHNvIGV4cG9zZXMgYGRhdGEtcG9sbHktYWN0aW9uLWZvcm1gIGZvclxuICogc3RhYmxlIHNlbGVjdG9yIGhvb2tzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB0eXBlIHsgRm9ybVN0b3JlIH0gZnJvbSBcIi4uL2FjdGlvbnMvZm9ybS50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQWN0aW9uRm9ybS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEFjdGlvbkZvcm1Qcm9wczxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4gPSB7XG4gIGZvcm06IEZvcm1TdG9yZTxUVmFsdWVzLCBUU3RvcmVzPjtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25Gb3JtPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPihcbiAgcHJvcHM6IEFjdGlvbkZvcm1Qcm9wczxUVmFsdWVzLCBUU3RvcmVzPlxuKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGZvcm0sIGNoaWxkcmVuLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcbiAgY29uc3QgY29tYmluZWQgPSBjbGFzc05hbWUgPyBgJHtjbGFzc2VzW1wiZm9ybVwiXX0gJHtjbGFzc05hbWV9YCA6IGNsYXNzZXNbXCJmb3JtXCJdO1xuICByZXR1cm4gKFxuICAgIDxmb3JtXG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17Y29tYmluZWR9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWFjdGlvbi1mb3JtPXtmb3JtLm5hbWV9XG4gICAgICBkYXRhLWFjdGlvbj17YCR7Zm9ybS5uYW1lfTpzdWJtaXRgfVxuICAgICAgYXJpYS1idXN5PXtmb3JtLmlzU3VibWl0dGluZy52YWx1ZX1cbiAgICAgIGFyaWEtbGFiZWw9e3Byb3BzW1wiYXJpYS1sYWJlbFwiXX1cbiAgICAgIGFyaWEtbGFiZWxsZWRieT17cHJvcHNbXCJhcmlhLWxhYmVsbGVkYnlcIl19XG4gICAgICBub1ZhbGlkYXRlXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZm9ybT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBGaXJlIGEgbmFtZWQgYWN0aW9uIHRocm91Z2ggdGhlIGdsb2JhbCBldmVudC1kZWxlZ2F0aW9uIHJlZ2lzdHJ5LlxuICpcbiAqIFRoZSBBY3Rpb24qIHByaW1pdGl2ZXMgKDxBY3Rpb25JbnB1dD4sIDxBY3Rpb25TZWxlY3Q+KSBjb21taXQgYnlcbiAqIGNsaWNraW5nIGEgZGV0YWNoZWQgYDxidXR0b24gZGF0YS1hY3Rpb249XCLigKZcIj5gIGNhcnJ5aW5nIGRhdGEtYWN0aW9uLSpcbiAqIGF0dHJpYnV0ZXM7IHRoZSBkZWxlZ2F0ZWQgY2xpY2sgbGlzdGVuZXIgcm91dGVzIGl0IGludG8gdGhlXG4gKiBjb25zdW1lcidzIGFjdGlvbiByZWdpc3RyeSB3aXRoIG5vIGV4dHJhIHdpcmluZy4gQ2VudHJhbGlzZWQgaGVyZSBzb1xuICogZXZlcnkgQWN0aW9uKiBwcmltaXRpdmUgZGlzcGF0Y2hlcyBpZGVudGljYWxseS5cbiAqXG4gKiBLZXlzIGluIGBkYXRhYCBhcmUgY2FtZWxDYXNlIGFuZCBjb252ZXJ0ZWQgdG8gZGFzaC1jYXNlIGF0dHJpYnV0ZVxuICogbmFtZXMg4oCUIGBhY3Rpb25EYXRhPXt7IHRhc2tJZCB9fWAgYmVjb21lcyBgZGF0YS1hY3Rpb24tdGFzay1pZGAuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoQWN0aW9uKGFjdGlvbjogc3RyaW5nLCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gIGNvbnN0IGhpZGRlbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gIGhpZGRlbi5zZXRBdHRyaWJ1dGUoXCJkYXRhLWFjdGlvblwiLCBhY3Rpb24pO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgIGNvbnN0IGRhc2hLZXkgPSBrZXkucmVwbGFjZSgvW0EtWl0vZywgKG0pID0+IGAtJHttLnRvTG93ZXJDYXNlKCl9YCk7XG4gICAgaGlkZGVuLnNldEF0dHJpYnV0ZShgZGF0YS1hY3Rpb24tJHtkYXNoS2V5fWAsIHZhbHVlKTtcbiAgfVxuICBoaWRkZW4uc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gIGhpZGRlbi5zdHlsZS5vcGFjaXR5ID0gXCIwXCI7XG4gIGhpZGRlbi5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJub25lXCI7XG4gIGhpZGRlbi50YWJJbmRleCA9IC0xO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhpZGRlbik7XG4gIHRyeSB7XG4gICAgaGlkZGVuLmNsaWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgaGlkZGVuLnJlbW92ZSgpO1xuICB9XG59XG4iLAogICAgIi8qKlxuICogcG9sbHkjMTI1OiBkYXRhLSogLyBhcmlhLSogYXR0cmlidXRlIHBhc3N0aHJvdWdoIGZvciBVSSBwcmltaXRpdmVzLlxuICpcbiAqIFByaW1pdGl2ZXMgYWNjZXB0IGEgZml4ZWQgcHJvcCBzZXQuIFdpdGhvdXQgcGFzc3Rocm91Z2gsIGEgY29uc3VtZXJcbiAqIHRoYXQgbmVlZHMgYSBgZGF0YS0qYCB0ZXN0IGhvb2sgb3IgYW4gYGFyaWEtKmAgYXR0cmlidXRlIG9uIHRoZVxuICogcHJpbWl0aXZlJ3Mgb3duIGVsZW1lbnQgaGFzIHRvIHdyYXAgaXQgaW4gYW4gZXh0cmEgRE9NIG5vZGUg4oCUIGEgc21lbGwuXG4gKlxuICoge0BsaW5rIFBhc3N0aHJvdWdoQXR0cnN9IHdpZGVucyBhIHByaW1pdGl2ZSdzIHByb3BzIHRvIGFjY2VwdCBhbnlcbiAqIGBkYXRhLSpgIC8gYGFyaWEtKmAga2V5OyB7QGxpbmsgY29sbGVjdFBhc3N0aHJvdWdofSBnYXRoZXJzIHRoZW0gZm9yXG4gKiBzcHJlYWRpbmcgb250byB0aGUgcmVuZGVyZWQgcm9vdCBlbGVtZW50LiBTcHJlYWQgdGhlIHJlc3VsdCAqYmVmb3JlKlxuICogdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzIHNvIGEgY29uc3VtZXIga2V5IGNhbiBuZXZlciBvdmVycmlkZVxuICogb25lIHRoZSBwcmltaXRpdmUgc2V0cyBpdHNlbGYgKGBkYXRhLXBvbGx5LSpgLCBldGMuKS5cbiAqL1xuXG4vKiogSW5kZXggc2lnbmF0dXJlcyBsZXR0aW5nIGEgcHJpbWl0aXZlJ3MgcHJvcHMgYWNjZXB0IGFyYml0cmFyeVxuICogIGBkYXRhLSpgIGFuZCBgYXJpYS0qYCBhdHRyaWJ1dGVzLCBwbHVzIHRoZSBzdGFuZGFyZCBgdGl0bGVgXG4gKiAgYXR0cmlidXRlIOKAlCBhIG5hdGl2ZSB0b29sdGlwIGlzIGEgRE9NIGhvb2ssIG5vdCBzdHlsaW5nLCBzbyBpdFxuICogIHJpZGVzIHRoZSBzYW1lIHBhc3N0aHJvdWdoIHBhdGggKHBvbGx5IzEzNSkuICovXG5leHBvcnQgdHlwZSBQYXNzdGhyb3VnaEF0dHJzID0ge1xuICBbZGF0YUF0dHI6IGBkYXRhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBbYXJpYUF0dHI6IGBhcmlhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKiogTmF0aXZlIHRvb2x0aXAgdGV4dCwgZm9yd2FyZGVkIHRvIHRoZSByZW5kZXJlZCByb290IGVsZW1lbnQuICovXG4gIHRpdGxlPzogc3RyaW5nO1xufTtcblxuLyoqIEtleXMsIGJleW9uZCB0aGUgYGRhdGEtKmAgLyBgYXJpYS0qYCBwcmVmaXhlcywgdGhhdCBwYXNzIHRocm91Z2guICovXG5mdW5jdGlvbiBpc1Bhc3N0aHJvdWdoS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBrZXkuc3RhcnRzV2l0aChcImRhdGEtXCIpIHx8IGtleS5zdGFydHNXaXRoKFwiYXJpYS1cIikgfHwga2V5ID09PSBcInRpdGxlXCI7XG59XG5cbi8qKlxuICogQ29sbGVjdCBgZGF0YS0qYCAvIGBhcmlhLSpgIC8gYHRpdGxlYCBhdHRyaWJ1dGVzIGZyb20gYSBwcm9wcyBvYmplY3RcbiAqIHNvIHRoZXkgY2FuIGJlIHNwcmVhZCBvbnRvIGEgcHJpbWl0aXZlJ3Mgcm9vdCBlbGVtZW50LiBgdW5kZWZpbmVkYFxuICogdmFsdWVzIGFuZCBub24tYXR0cmlidXRlIHZhbHVlIHR5cGVzIChmdW5jdGlvbnMsIG9iamVjdHMpIGFyZSBkcm9wcGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFBhc3N0aHJvdWdoKFxuICBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+IHtcbiAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm9wcykpIHtcbiAgICBpZiAoIWlzUGFzc3Rocm91Z2hLZXkoa2V5KSkgY29udGludWU7XG4gICAgY29uc3QgdmFsdWUgPSBwcm9wc1trZXldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIG91dFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLAogICAgIi8qKlxuICogQWN0aW9uSW5wdXQg4oCUIGR1YWwtbW9kZSB2aWV3L2VkaXQgaW5wdXQgd2l0aCBhY3Rpb24gZGlzcGF0Y2ggb24gY29tbWl0LlxuICpcbiAqIFZpZXcgbW9kZSByZW5kZXJzIHRoZSBjdXJyZW50IHZhbHVlIGFzIHRleHQgKG9wdGlvbmFsbHkgdGhyb3VnaCBhXG4gKiBjYWxsZXItc3VwcGxpZWQgYHJlbmRlclZpZXdgIGZvciBtYXJrZG93biwgcmljaCBmb3JtYXR0aW5nLCBldGMuKS5cbiAqIENsaWNrLCBFbnRlciwgb3IgU3BhY2UgZW50ZXJzIGVkaXQgbW9kZS4gRWRpdCBtb2RlIGlzIGEgbmF0aXZlIGlucHV0XG4gKiBvciB0ZXh0YXJlYTsgY29tbWl0IGZpcmVzIHRoZSBjb25maWd1cmVkIGFjdGlvbiB3aXRoIGBkYXRhLWFjdGlvbi12YWx1ZWBcbiAqIGFuZCBgZGF0YS1hY3Rpb24tZmllbGRgIHNldCBmcm9tIEZvcm1EYXRhLXNoYXBlIHNlbWFudGljcywgc28gdGhlXG4gKiBleGlzdGluZyBldmVudCBkZWxlZ2F0aW9uIGhhbmRsZXMgaXQgd2l0aCBubyBleHRyYSB3aXJpbmcuXG4gKlxuICogYHNhdmVPbmAgcGlja3MgdGhlIGNvbW1pdCB0cmlnZ2VyOlxuICogICBcImJsdXJcIiAgICAgICBjb21taXQgd2hlbiB0aGUgZmllbGQgbG9zZXMgZm9jdXNcbiAqICAgXCJlbnRlclwiICAgICAgY29tbWl0IG9uIEVudGVyIChzaW5nbGUtbGluZSkgb3IgQ21kL0N0cmwrRW50ZXIgKG11bHRpLWxpbmUpXG4gKiAgIFwiY21kLWVudGVyXCIgIGNvbW1pdCBvbmx5IG9uIENtZC9DdHJsK0VudGVyXG4gKiAgIFwiZXhwbGljaXRcIiAgIG5ldmVyIGF1dG8tY29tbWl0IOKAlCBjYWxsZXIgd2lyZXMgYSBzYXZlIGJ1dHRvbiB3aXRoIGRhdGEtYWN0aW9uXG4gKiAgIFwiaW5wdXRcIiAgICAgIGNvbW1pdCBvbiBldmVyeSBrZXlzdHJva2Ug4oCUIGZvciBmaWx0ZXItYXMteW91LXR5cGUgZmllbGRzO1xuICogICAgICAgICAgICAgICAgdGhlIGZpZWxkIHN0YXlzIGluIGVkaXQgbW9kZSByYXRoZXIgdGhhbiB0b2dnbGluZyB0byB2aWV3XG4gKlxuICogYGlucHV0VHlwZWAgc2V0cyB0aGUgbmF0aXZlIGlucHV0IHR5cGUgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50IOKAlFxuICogXCJ0ZXh0XCIgKGRlZmF1bHQpLCBcImRhdGVcIiwgXCJ0aW1lXCIsIFwibnVtYmVyXCIsIGFuZCBmcmllbmRzIOKAlCBzbyBhIGRhdGVcbiAqIG9yIG51bWVyaWMgZmllbGQgY29tbWl0cyB0aHJvdWdoIHRoZSBhY3Rpb24gc3lzdGVtIGxpa2UgYW55IG90aGVyLlxuICpcbiAqIExheW91dC1zaGlmdC1mcmVlOiB2aWV3IGFuZCBlZGl0IG1vZGVzIHNoYXJlIHBhZGRpbmcsIGJvcmRlciB3aWR0aCxcbiAqIGZvbnQsIGFuZCBsaW5lLWhlaWdodCBzbyB0aGUgdG9nZ2xlIGNhdXNlcyBubyByZWZsb3cuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQWN0aW9uSW5wdXQubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgZGlzcGF0Y2hBY3Rpb24gfSBmcm9tIFwiLi9pbnRlcm5hbC9kaXNwYXRjaC1hY3Rpb24udHNcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uSW5wdXRTYXZlT24gPSBcImJsdXJcIiB8IFwiZW50ZXJcIiB8IFwiY21kLWVudGVyXCIgfCBcImV4cGxpY2l0XCIgfCBcImlucHV0XCI7XG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFZhcmlhbnQgPSBcInNpbmdsZVwiIHwgXCJtdWx0aVwiO1xuZXhwb3J0IHR5cGUgQWN0aW9uSW5wdXRUeXBlID1cbiAgfCBcInRleHRcIlxuICB8IFwiZGF0ZVwiXG4gIHwgXCJkYXRldGltZS1sb2NhbFwiXG4gIHwgXCJ0aW1lXCJcbiAgfCBcIm1vbnRoXCJcbiAgfCBcIndlZWtcIlxuICB8IFwibnVtYmVyXCJcbiAgfCBcImVtYWlsXCJcbiAgfCBcInVybFwiXG4gIHwgXCJ0ZWxcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uSW5wdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIC8qKiBDdXJyZW50IHZhbHVlIHRvIHJlbmRlciBpbiB2aWV3IG1vZGUgYW5kIHNlZWQgdGhlIGVkaXQgYnVmZmVyLiAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogQWN0aW9uIG5hbWUgdG8gZGlzcGF0Y2ggb24gY29tbWl0LiBSZWNlaXZlcyBkYXRhLWFjdGlvbi12YWx1ZT08bmV3IHZhbHVlPi4gKi9cbiAgYWN0aW9uOiBzdHJpbmc7XG4gIC8qKiBDb21taXQgdHJpZ2dlci4gRGVmYXVsdDogXCJibHVyXCIuICovXG4gIHNhdmVPbj86IEFjdGlvbklucHV0U2F2ZU9uO1xuICB2YXJpYW50PzogQWN0aW9uSW5wdXRWYXJpYW50O1xuICAvKiogTmF0aXZlIGlucHV0IHR5cGUgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50LiBEZWZhdWx0OiBcInRleHRcIi4gKi9cbiAgaW5wdXRUeXBlPzogQWN0aW9uSW5wdXRUeXBlO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogRXh0cmEgZGF0YS1hY3Rpb24tKiBhdHRyaWJ1dGVzIHRvIGluY2x1ZGUgYXQgY29tbWl0IChlLmcuIGVudGl0eSBpZCkuICovXG4gIGFjdGlvbkRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogQ3VzdG9tIHZpZXcgcmVuZGVyZXIg4oCUIHJlY2VpdmVzIHZhbHVlLCByZXR1cm5zIFZOb2RlLiAqL1xuICByZW5kZXJWaWV3PzogKHZhbHVlOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50IHwgc3RyaW5nO1xuICAvKiogTGFiZWwgYW5ub3VuY2VkIGJ5IHNjcmVlbiByZWFkZXJzIGZvciB0aGUgZWRpdCBhZmZvcmRhbmNlLiAqL1xuICBhcmlhTGFiZWw/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiB0d28gcmVuZGVyIGJyYW5jaGVzIHRpbWVzIHR3byB2YXJpYW50cyB0aW1lcyBmaXZlIHNhdmVPbiB0cmlnZ2VyczsgYnJhbmNoaW5nIGlzIGluaGVyZW50IHRvIHRoZSBwcmltaXRpdmUuXG5leHBvcnQgZnVuY3Rpb24gQWN0aW9uSW5wdXQocHJvcHM6IEFjdGlvbklucHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHZhcmlhbnQgPSBwcm9wcy52YXJpYW50ID8/IFwic2luZ2xlXCI7XG4gIGNvbnN0IHNhdmVPbiA9IHByb3BzLnNhdmVPbiA/PyBcImJsdXJcIjtcbiAgLy8gXCJpbnB1dFwiIG1vZGUgaXMgYSBwZXJtYW5lbnRseS1lZGl0YWJsZSBmaWx0ZXIgZmllbGQg4oCUIGl0IG5ldmVyIGhhcyBhXG4gIC8vIHZpZXcgbW9kZSB0byB0b2dnbGUgYmFjayB0bywgc28gaXQgc3RhcnRzIGluIGVkaXQuXG4gIGNvbnN0IGxpdmUgPSBzYXZlT24gPT09IFwiaW5wdXRcIjtcbiAgY29uc3QgW21vZGUsIHNldE1vZGVdID0gdXNlU3RhdGU8XCJ2aWV3XCIgfCBcImVkaXRcIj4obGl2ZSA/IFwiZWRpdFwiIDogXCJ2aWV3XCIpO1xuICBjb25zdCBbZHJhZnQsIHNldERyYWZ0XSA9IHVzZVN0YXRlKHByb3BzLnZhbHVlKTtcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsPihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtb2RlID09PSBcInZpZXdcIikgc2V0RHJhZnQocHJvcHMudmFsdWUpO1xuICB9LCBbcHJvcHMudmFsdWUsIG1vZGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIERvbid0IHN0ZWFsIGZvY3VzIG9uIG1vdW50IGZvciBhIGxpdmUgZmlsdGVyIGZpZWxkOyBvbmx5IHB1bGwgZm9jdXNcbiAgICAvLyB3aGVuIHRoZSB1c2VyIGhhcyBleHBsaWNpdGx5IHRvZ2dsZWQgYSB2aWV3IGZpZWxkIGludG8gZWRpdCBtb2RlLlxuICAgIGlmIChtb2RlID09PSBcImVkaXRcIiAmJiAhbGl2ZSAmJiBpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LnNlbGVjdD8uKCk7XG4gICAgfVxuICB9LCBbbW9kZSwgbGl2ZV0pO1xuXG4gIGNvbnN0IGVudGVyRWRpdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAocHJvcHMuZGlzYWJsZWQpIHJldHVybjtcbiAgICBzZXREcmFmdChwcm9wcy52YWx1ZSk7XG4gICAgc2V0TW9kZShcImVkaXRcIik7XG4gIH0sIFtwcm9wcy5kaXNhYmxlZCwgcHJvcHMudmFsdWVdKTtcblxuICBjb25zdCBjb21taXQgPSB1c2VDYWxsYmFjayhcbiAgICAobmV4dDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobmV4dCAhPT0gcHJvcHMudmFsdWUpIHtcbiAgICAgICAgZGlzcGF0Y2hBY3Rpb24ocHJvcHMuYWN0aW9uLCB7IC4uLihwcm9wcy5hY3Rpb25EYXRhID8/IHt9KSwgdmFsdWU6IG5leHQgfSk7XG4gICAgICB9XG4gICAgICAvLyBBIGxpdmUgZmlsdGVyIGZpZWxkIHN0YXlzIGVkaXRhYmxlOyBldmVyeSBvdGhlciB0cmlnZ2VyIHJldHVybnNcbiAgICAgIC8vIHRvIHZpZXcgbW9kZSBvbmNlIHRoZSB2YWx1ZSBpcyBjb21taXR0ZWQuXG4gICAgICBpZiAoIWxpdmUpIHNldE1vZGUoXCJ2aWV3XCIpO1xuICAgIH0sXG4gICAgW3Byb3BzLmFjdGlvbiwgcHJvcHMuYWN0aW9uRGF0YSwgcHJvcHMudmFsdWUsIGxpdmVdXG4gICk7XG5cbiAgY29uc3QgY2FuY2VsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldERyYWZ0KHByb3BzLnZhbHVlKTtcbiAgICBpZiAoIWxpdmUpIHNldE1vZGUoXCJ2aWV3XCIpO1xuICB9LCBbcHJvcHMudmFsdWUsIGxpdmVdKTtcblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eToga2V5Ym9hcmQgaGFuZGxlciBlbmNvZGVzIHRoZSBzYXZlT24gw5cgdmFyaWFudCBtYXRyaXguXG4gIGNvbnN0IG9uS2V5RG93biA9IChldmVudDogSlNYLlRhcmdldGVkS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY2FuY2VsKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgY29uc3QgY21kID0gZXZlbnQubWV0YUtleSB8fCBldmVudC5jdHJsS2V5O1xuICAgICAgaWYgKHNhdmVPbiA9PT0gXCJlbnRlclwiICYmIHZhcmlhbnQgPT09IFwic2luZ2xlXCIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29tbWl0KGRyYWZ0KTtcbiAgICAgIH0gZWxzZSBpZiAoKHNhdmVPbiA9PT0gXCJlbnRlclwiICYmIHZhcmlhbnQgPT09IFwibXVsdGlcIiAmJiBjbWQpIHx8IHNhdmVPbiA9PT0gXCJjbWQtZW50ZXJcIikge1xuICAgICAgICBpZiAoY21kKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBjb21taXQoZHJhZnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSA/IGAke2NsYXNzZXNbXCJyb290XCJdfSAke3Byb3BzLmNsYXNzTmFtZX1gIDogY2xhc3Nlc1tcInJvb3RcIl07XG5cbiAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKiBmb3J3YXJkZWQgb250byB3aGljaGV2ZXIgZWxlbWVudCBpcyB0aGUgcm9vdFxuICAvLyBmb3IgdGhlIGN1cnJlbnQgbW9kZTsgdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzIHdpbiBvbiBjb2xsaXNpb24uXG4gIGNvbnN0IHBhc3N0aHJvdWdoID0gY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKTtcblxuICBpZiAobW9kZSA9PT0gXCJ2aWV3XCIpIHtcbiAgICBjb25zdCByZW5kZXJlZCA9IHByb3BzLnJlbmRlclZpZXcgPyBwcm9wcy5yZW5kZXJWaWV3KHByb3BzLnZhbHVlKSA6IHByb3BzLnZhbHVlO1xuICAgIGNvbnN0IGlzRW1wdHkgPSBwcm9wcy52YWx1ZS5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIChcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlU2VtYW50aWNFbGVtZW50czogPGJ1dHRvbj4gd291bGQgc3dhbGxvdyB0ZXh0IHNlbGVjdGlvbiBhbmQgYWRkIGRlZmF1bHQgc3R5bGluZzsgZGl2IHdpdGggcm9sZT1idXR0b24gaXMgdGhlIGlubGluZS1lZGl0IGlkaW9tLlxuICAgICAgPGRpdlxuICAgICAgICB7Li4ucGFzc3Rocm91Z2h9XG4gICAgICAgIGNsYXNzPXtgJHtjbGFzc05hbWV9ICR7Y2xhc3Nlc1tcInZpZXdcIl19YH1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LWFjdGlvbi1pbnB1dFxuICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgIGRhdGEtc3RhdGU9e2lzRW1wdHkgPyBcImVtcHR5XCIgOiBcImZpbGxlZFwifVxuICAgICAgICBkYXRhLXZhcmlhbnQ9e3ZhcmlhbnR9XG4gICAgICAgIHRhYkluZGV4PXtwcm9wcy5kaXNhYmxlZCA/IC0xIDogMH1cbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIGFyaWEtbGFiZWw9e3Byb3BzLmFyaWFMYWJlbCA/PyBcIkVkaXRcIn1cbiAgICAgICAgYXJpYS1kaXNhYmxlZD17cHJvcHMuZGlzYWJsZWQgPyBcInRydWVcIiA6IHVuZGVmaW5lZH1cbiAgICAgICAgb25DbGljaz17ZW50ZXJFZGl0fVxuICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgaWYgKGUua2V5ID09PSBcIkVudGVyXCIgfHwgZS5rZXkgPT09IFwiIFwiKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlbnRlckVkaXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtpc0VtcHR5ICYmIHByb3BzLnBsYWNlaG9sZGVyID8gKFxuICAgICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wicGxhY2Vob2xkZXJcIl19Pntwcm9wcy5wbGFjZWhvbGRlcn08L3NwYW4+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgcmVuZGVyZWRcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBjb25zdCBjb21tb24gPSB7XG4gICAgLi4ucGFzc3Rocm91Z2gsXG4gICAgY2xhc3M6IGAke2NsYXNzZXNbXCJlZGl0XCJdfSAke2NsYXNzZXNbXCJyb290XCJdfWAsXG4gICAgXCJkYXRhLXBvbGx5LXVpXCI6IHRydWUsXG4gICAgXCJkYXRhLXBvbGx5LWFjdGlvbi1pbnB1dFwiOiB0cnVlLFxuICAgIFwiZGF0YS1zdGF0ZVwiOiBcImVkaXRpbmdcIixcbiAgICBcImRhdGEtdmFyaWFudFwiOiB2YXJpYW50LFxuICAgIHBsYWNlaG9sZGVyOiBwcm9wcy5wbGFjZWhvbGRlcixcbiAgICB2YWx1ZTogZHJhZnQsXG4gICAgb25JbnB1dDogKGU6IEpTWC5UYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IGUuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICAgIHNldERyYWZ0KG5leHQpO1xuICAgICAgaWYgKGxpdmUpIGNvbW1pdChuZXh0KTtcbiAgICB9LFxuICAgIG9uQmx1cjogKCkgPT4ge1xuICAgICAgaWYgKHNhdmVPbiA9PT0gXCJibHVyXCIpIGNvbW1pdChkcmFmdCk7XG4gICAgICBlbHNlIGlmICghbGl2ZSkgY2FuY2VsKCk7XG4gICAgfSxcbiAgICBvbktleURvd24sXG4gICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzLmFyaWFMYWJlbCA/PyBcIkVkaXRcIixcbiAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQsXG4gIH07XG5cbiAgaWYgKHZhcmlhbnQgPT09IFwibXVsdGlcIikge1xuICAgIHJldHVybiAoXG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgcmVmPXsoZWwpID0+IHtcbiAgICAgICAgICBpbnB1dFJlZi5jdXJyZW50ID0gZWw7XG4gICAgICAgIH19XG4gICAgICAgIHsuLi4oY29tbW9uIGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxpbnB1dFxuICAgICAgcmVmPXsoZWwpID0+IHtcbiAgICAgICAgaW5wdXRSZWYuY3VycmVudCA9IGVsO1xuICAgICAgfX1cbiAgICAgIHR5cGU9e3Byb3BzLmlucHV0VHlwZSA/PyBcInRleHRcIn1cbiAgICAgIHsuLi4oY29tbW9uIGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+KX1cbiAgICAvPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIExheW91dCDigJQgdGhlIG9uZSBwcmltaXRpdmUgdGhhdCBvd25zIGxheW91dGluZyBjb25jZXJucy5cbiAqXG4gKiBFdmVyeSBvdGhlciBjb21wb25lbnQgaW4gQGZhaXJmb3gvcG9sbHkvdWkgKGFuZCBldmVyeSBjb25zdW1lciBhcHBcbiAqIHRoYXQgcnVucyBgcG9sbHkgcXVhbGl0eSBjc3MtbGF5b3V0YCkgcm91dGVzIGZsZXgvZ3JpZCBkZWNpc2lvbnNcbiAqIHRocm91Z2ggdGhpcyBjb21wb25lbnQuIFByb3BzIG1hcCB0byBDU1MgY3VzdG9tIHByb3BlcnRpZXMgc28gdGhlXG4gKiBzdHlsZXNoZWV0IGNhbiByZWFkIHRoZW0gdW5pZm9ybWx5IGFuZCBzbyBjb25zdW1lcnMgY2FuIG92ZXJyaWRlXG4gKiBhbnkgb2YgdGhlbSBpbiBtZWRpYSBxdWVyaWVzIHdpdGhvdXQgdG91Y2hpbmcgc3BlY2lmaWNpdHkuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1gsIHR5cGUgUmVmIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vTGF5b3V0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgTGF5b3V0UHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG5cbiAgLyoqIFBvbHltb3JwaGljIGVsZW1lbnQgKGRpdiwgc2VjdGlvbiwgaGVhZGVyLCBuYXYsIOKApikuIERlZmF1bHRzIHRvICdkaXYnLiAqL1xuICBhcz86IGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcblxuICAvKiogQ1NTIGdyaWQgc3RydWN0dXJlLiAqL1xuICByb3dzPzogc3RyaW5nO1xuICBjb2x1bW5zPzogc3RyaW5nO1xuICBhdXRvRmxvdz86IHN0cmluZztcbiAgYXV0b1Jvd3M/OiBzdHJpbmc7XG4gIGF1dG9Db2x1bW5zPzogc3RyaW5nO1xuXG4gIC8qKiBkaXNwbGF5OiBjb250ZW50cyDigJQgbGV0cyBjaGlsZHJlbiBwYXJ0aWNpcGF0ZSBpbiBhbiBhbmNlc3RvciBncmlkLiAqL1xuICBjb250ZW50cz86IGJvb2xlYW47XG4gIC8qKiBJbmhlcml0IHBhcmVudCBncmlkIHRyYWNrcyB2aWEgQ1NTIHN1YmdyaWQuICovXG4gIHN1YmdyaWQ/OiBib29sZWFuO1xuXG4gIC8qKiBTcGFjaW5nLiAqL1xuICBnYXA/OiBzdHJpbmc7XG4gIHBhZGRpbmc/OiBzdHJpbmc7XG5cbiAgLyoqIFNpemluZy4gKi9cbiAgaGVpZ2h0Pzogc3RyaW5nO1xuICBtaW5IZWlnaHQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDYXAgdGhlIGlubGluZSBzaXplIGFuZCBjZW50cmUgd2l0aGluIHRoZSBwYXJlbnQuIFR5cGljYWwgdmFsdWVzIHVzZSB0aGVcbiAgICogYC0tcG9sbHktbWVhc3VyZS0qYCB0b2tlbnMgKGUuZy4gXCJ2YXIoLS1wb2xseS1tZWFzdXJlLXBhZ2UpXCIgZm9yIGFuIGFwcFxuICAgKiBzaGVsbCwgXCJ2YXIoLS1wb2xseS1tZWFzdXJlLXByb3NlKVwiIGZvciBib2R5IGNvcHkpLiBBbnkgQ1NTIGxlbmd0aCB3b3Jrcy5cbiAgICovXG4gIG1heElubGluZVNpemU/OiBzdHJpbmc7XG5cbiAgLyoqIENvbnRhaW5lciBhbGlnbm1lbnQuICovXG4gIGp1c3RpZnlJdGVtcz86IHN0cmluZztcbiAgYWxpZ25JdGVtcz86IHN0cmluZztcbiAganVzdGlmeUNvbnRlbnQ/OiBzdHJpbmc7XG4gIGFsaWduQ29udGVudD86IHN0cmluZztcblxuICAvKiogU2VsZiBhbGlnbm1lbnQgKHdoZW4gdGhpcyBMYXlvdXQgaXMgYW4gaXRlbSBpbiBhIHBhcmVudCBncmlkKS4gKi9cbiAganVzdGlmeVNlbGY/OiBzdHJpbmc7XG4gIGFsaWduU2VsZj86IHN0cmluZztcblxuICAvKiogQ29sbGFwc2UgdG8gYSBzaW5nbGUgY29sdW1uIGF0IOKJpDY0MHB4LiAqL1xuICBzdGFja09uTW9iaWxlPzogYm9vbGVhbjtcblxuICAvKiogUmVuZGVyIGFzIGRpc3BsYXk6IGlubGluZS1ncmlkIHNvIHRoZSBMYXlvdXQgZmxvd3MgaW5saW5lIHdpdGggc3Vycm91bmRpbmcgdGV4dC9jb250cm9scy4gKi9cbiAgaW5saW5lPzogYm9vbGVhbjtcblxuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIG9uQ2xpY2s/OiBKU1guTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICBvbktleURvd24/OiBKU1guS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICBvbktleVVwPzogSlNYLktleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxFbGVtZW50PjtcbiAgLyoqIFBvaW50ZXItZW50ZXIvbGVhdmUgb24gdGhlIGNvbnRhaW5lciBpdHNlbGYg4oCUIGEgaG92ZXItc2NvcGVkIGJlaGF2aW91clxuICAgKiBzdWNoIGFzIHBhdXNpbmcgYSB0aW1lciB3aGlsZSB0aGUgcG9pbnRlciBpcyBvdmVyIGEgc3RhY2suIFdpdGhvdXQgdGhlc2VcbiAgICogYSBjb21wb25lbnQgdGhhdCBuZWVkcyBvbmUgaGFzIHRvIHJlbmRlciBpdHMgb3duIGVsZW1lbnQgYW5kIHdyaXRlIGl0c1xuICAgKiBvd24gZ3JpZCwgd2hpY2ggaXMgdGhlIGxvb3Bob2xlIDxMYXlvdXQ+IGV4aXN0cyB0byBjbG9zZS4gKi9cbiAgb25Nb3VzZUVudGVyPzogSlNYLk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxFbGVtZW50PjtcbiAgb25Nb3VzZUxlYXZlPzogSlNYLk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxFbGVtZW50PjtcbiAgLyoqIFJlZiB0byB0aGUgcmVuZGVyZWQgZWxlbWVudC4gU2FtZSByZWFzb24gYXMgdGhlIGhhbmRsZXJzIGFib3ZlOiBhIGZvY3VzXG4gICAqIHRyYXAgb3IgYSBtZWFzdXJlbWVudCBuZWVkcyB0aGUgbm9kZSwgYW5kIHJlZnVzaW5nIGl0IGZvcmNlcyByYXcgQ1NTLlxuICAgKlxuICAgKiBOYW1lZCBgZWxlbWVudFJlZmAsIG5vdCBgcmVmYDogUHJlYWN0IGxpZnRzIGEgYHJlZmAgcHJvcCBvZmYgYSBmdW5jdGlvblxuICAgKiBjb21wb25lbnQgaW50byB0aGUgdm5vZGUgYW5kIG5ldmVyIHBhc3NlcyBpdCB0aHJvdWdoIHByb3BzLCBzbyBhIHBsYWluXG4gICAqIGByZWZgIGhlcmUgd291bGQgYmUgc2lsZW50bHkgZHJvcHBlZC4gQ2F1Z2h0IGJ5IE1vZGFsJ3Mgb3ZlcmxheSB0ZXN0IOKAlFxuICAgKiB0aGUgc3RhY2sgc3RvcHBlZCBwb3BwaW5nIGJlY2F1c2UgdGhlIGNhbGxiYWNrIG5ldmVyIHJhbi4gKi9cbiAgZWxlbWVudFJlZj86IFJlZjxIVE1MRWxlbWVudD47XG5cbiAgcm9sZT86IEpTWC5BcmlhUm9sZTtcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG4gIGlkPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIj86IHN0cmluZztcbiAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI/OiBzdHJpbmc7XG59O1xuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eTogc2l4dGVlbiBvcHRpb25hbCBwcm9wLXRvLWN1c3RvbS1wcm9wZXJ0eSBtYXBwaW5nczsgZmxhdCBhbmQgbGluZWFyLlxuZXhwb3J0IGZ1bmN0aW9uIExheW91dChwcm9wczogTGF5b3V0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBhcyA9IFwiZGl2XCIsXG4gICAgcm93cyxcbiAgICBjb2x1bW5zLFxuICAgIGNvbnRlbnRzLFxuICAgIHN1YmdyaWQsXG4gICAgZ2FwLFxuICAgIHBhZGRpbmcsXG4gICAgaGVpZ2h0LFxuICAgIG1pbkhlaWdodCxcbiAgICBtYXhJbmxpbmVTaXplLFxuICAgIGp1c3RpZnlJdGVtcyxcbiAgICBhbGlnbkl0ZW1zLFxuICAgIGp1c3RpZnlDb250ZW50LFxuICAgIGFsaWduQ29udGVudCxcbiAgICBqdXN0aWZ5U2VsZixcbiAgICBhbGlnblNlbGYsXG4gICAgYXV0b0Zsb3csXG4gICAgYXV0b1Jvd3MsXG4gICAgYXV0b0NvbHVtbnMsXG4gICAgc3RhY2tPbk1vYmlsZSxcbiAgICBpbmxpbmUsXG4gICAgY2xhc3NOYW1lLFxuICAgIG9uQ2xpY2ssXG4gICAgb25LZXlEb3duLFxuICAgIG9uS2V5VXAsXG4gICAgb25Nb3VzZUVudGVyLFxuICAgIG9uTW91c2VMZWF2ZSxcbiAgICBlbGVtZW50UmVmLFxuICAgIHJvbGUsXG4gICAgdGFiSW5kZXgsXG4gICAgaWQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBzdHlsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGlmIChjb250ZW50cykge1xuICAgIHN0eWxlW1wiZGlzcGxheVwiXSA9IFwiY29udGVudHNcIjtcbiAgfSBlbHNlIGlmIChzdWJncmlkKSB7XG4gICAgc3R5bGVbXCItLWwtY29sXCJdID0gXCIxIC8gLTFcIjtcbiAgICBzdHlsZVtcIi0tbC1jb2xzXCJdID0gXCJzdWJncmlkXCI7XG4gICAgaWYgKHBhZGRpbmcpIHN0eWxlW1wiLS1sLXBcIl0gPSBwYWRkaW5nO1xuICAgIGlmIChhbGlnbkl0ZW1zKSBzdHlsZVtcIi0tbC1haVwiXSA9IGFsaWduSXRlbXM7XG4gICAgaWYgKGdhcCkgc3R5bGVbXCItLWwtZ2FwXCJdID0gZ2FwO1xuICB9IGVsc2Uge1xuICAgIGlmIChwYWRkaW5nKSBzdHlsZVtcIi0tbC1wXCJdID0gcGFkZGluZztcbiAgICBpZiAoaGVpZ2h0KSBzdHlsZVtcIi0tbC1oXCJdID0gaGVpZ2h0O1xuICAgIGlmIChtaW5IZWlnaHQpIHN0eWxlW1wiLS1sLW1oXCJdID0gbWluSGVpZ2h0O1xuICAgIGlmIChtYXhJbmxpbmVTaXplKSBzdHlsZVtcIi0tbC1taXNcIl0gPSBtYXhJbmxpbmVTaXplO1xuICAgIGlmIChyb3dzKSBzdHlsZVtcIi0tbC1yb3dzXCJdID0gcm93cztcbiAgICBpZiAoY29sdW1ucykgc3R5bGVbXCItLWwtY29sc1wiXSA9IGNvbHVtbnM7XG4gICAgaWYgKGdhcCkgc3R5bGVbXCItLWwtZ2FwXCJdID0gZ2FwO1xuICAgIGlmIChqdXN0aWZ5SXRlbXMpIHN0eWxlW1wiLS1sLWppXCJdID0ganVzdGlmeUl0ZW1zO1xuICAgIGlmIChhbGlnbkl0ZW1zKSBzdHlsZVtcIi0tbC1haVwiXSA9IGFsaWduSXRlbXM7XG4gICAgaWYgKGp1c3RpZnlDb250ZW50KSBzdHlsZVtcIi0tbC1qY1wiXSA9IGp1c3RpZnlDb250ZW50O1xuICAgIGlmIChhbGlnbkNvbnRlbnQpIHN0eWxlW1wiLS1sLWFjXCJdID0gYWxpZ25Db250ZW50O1xuICAgIGlmIChhdXRvRmxvdykgc3R5bGVbXCItLWwtZmxvd1wiXSA9IGF1dG9GbG93O1xuICAgIGlmIChhdXRvUm93cykgc3R5bGVbXCItLWwtYXJvd3NcIl0gPSBhdXRvUm93cztcbiAgICBpZiAoYXV0b0NvbHVtbnMpIHN0eWxlW1wiLS1sLWFjb2xzXCJdID0gYXV0b0NvbHVtbnM7XG4gIH1cbiAgaWYgKGp1c3RpZnlTZWxmKSBzdHlsZVtcIi0tbC1qc1wiXSA9IGp1c3RpZnlTZWxmO1xuICBpZiAoYWxpZ25TZWxmKSBzdHlsZVtcIi0tbC1hc1wiXSA9IGFsaWduU2VsZjtcblxuICBjb25zdCBiYXNlUGFydHMgPSBbY2xhc3Nlc1tcImxheW91dFwiXV07XG4gIGlmIChpbmxpbmUpIGJhc2VQYXJ0cy5wdXNoKGNsYXNzZXNbXCJpbmxpbmVcIl0pO1xuICBpZiAoc3RhY2tPbk1vYmlsZSkgYmFzZVBhcnRzLnB1c2goY2xhc3Nlc1tcInN0YWNrT25Nb2JpbGVcIl0pO1xuICBjb25zdCBiYXNlQ2xhc3MgPSBiYXNlUGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuICBjb25zdCBjb21iaW5lZCA9IGNvbnRlbnRzID8gY2xhc3NOYW1lIDogY2xhc3NOYW1lID8gYCR7YmFzZUNsYXNzfSAke2NsYXNzTmFtZX1gIDogYmFzZUNsYXNzO1xuXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgIGFzLFxuICAgIHtcbiAgICAgIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSovdGl0bGUgZmlyc3Q7IHRoZSBwcmltaXRpdmUncyBvd25cbiAgICAgIC8vIGF0dHJpYnV0ZXMgYmVsb3cgd2luIG9uIGFueSBjb2xsaXNpb24uXG4gICAgICAuLi5jb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpLFxuICAgICAgaWQsXG4gICAgICBjbGFzc05hbWU6IGNvbWJpbmVkLFxuICAgICAgc3R5bGUsXG4gICAgICBvbkNsaWNrLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25LZXlVcCxcbiAgICAgIG9uTW91c2VFbnRlcixcbiAgICAgIG9uTW91c2VMZWF2ZSxcbiAgICAgIHJlZjogZWxlbWVudFJlZixcbiAgICAgIHJvbGUsXG4gICAgICB0YWJJbmRleCxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBwcm9wc1tcImFyaWEtbGFiZWxcIl0sXG4gICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBwcm9wc1tcImFyaWEtbGFiZWxsZWRieVwiXSxcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBwcm9wc1tcImFyaWEtZGVzY3JpYmVkYnlcIl0sXG4gICAgICBcImRhdGEtcG9sbHktbGF5b3V0XCI6IHRydWUsXG4gICAgfSxcbiAgICBjaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIERyb3Bkb3duIOKAlCB0cmlnZ2VyIGJ1dHRvbiArIHBvcG92ZXIgbWVudSB1c2luZyB0aGUgbmF0aXZlIFBvcG92ZXIgQVBJLlxuICpcbiAqIEEgc2hvd24gcG9wb3ZlciBpcyBwcm9tb3RlZCB0byB0aGUgYnJvd3NlcidzIHRvcCBsYXllciwgd2hlcmUgQ1NTXG4gKiBwb3NpdGlvbmluZyByZXNvbHZlcyBhZ2FpbnN0IHRoZSB2aWV3cG9ydCByYXRoZXIgdGhhbiB0aGUgYC5kcm9wZG93bmBcbiAqIHdyYXBwZXIg4oCUIHNvIHRoZSBtZW51IGNhbm5vdCBiZSBwbGFjZWQgd2l0aCBgcG9zaXRpb246IGFic29sdXRlYFxuICogYWxvbmUuIEluc3RlYWQgaXQgaXMgcGlubmVkIHdpdGggYHBvc2l0aW9uOiBmaXhlZGAgYW5kIGNvb3JkaW5hdGVzXG4gKiBtZWFzdXJlZCBmcm9tIHRoZSB0cmlnZ2VyOyBzZWUgYHBvc2l0aW9uTWVudWAgYmVsb3cgKGlzc3VlICMxMjgpLlxuICpcbiAqIFRoZSBtZW51IGVsZW1lbnQgZ2V0cyBgcG9wb3Zlcj1cImF1dG9cImAgYW5kIGEgdW5pcXVlIGBkYXRhLW92ZXJsYXktaWRgLlxuICogYGNsb3NlVG9wT3ZlcmxheSgpYCBmcm9tIEBmYWlyZm94L3BvbGx5L2FjdGlvbnMgZmluZHMgdGhlIHRvcG1vc3RcbiAqIGBbZGF0YS1vdmVybGF5LWlkXWAgZWxlbWVudCBhbmQgZGlzcGF0Y2hlcyBgb3ZlcmxheTpjbG9zZWAg4oCUIHRoZVxuICogRHJvcGRvd24gbGlzdGVucyBmb3IgdGhhdCBldmVudCBhbmQgbWlycm9ycyBpdCBvbnRvIHRoZSBgaXNPcGVuYFxuICogc2lnbmFsLiBJbiBzaW5nbGUtc2VsZWN0IG1vZGUsIGNsaWNraW5nIHRoZSBtZW51IGNsb3NlcyBpdDsgaW5cbiAqIG11bHRpLXNlbGVjdCBtb2RlLCB0aGUgbWVudSBzdGF5cyBvcGVuIHNvIHRoZSBjb25zdW1lciBjYW4gcGlja1xuICogc2V2ZXJhbCBpdGVtcy5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIFNpZ25hbCwgdXNlU2lnbmFsRWZmZWN0IH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Ecm9wZG93bi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5cbmV4cG9ydCB0eXBlIERyb3Bkb3duUHJvcHMgPSB7XG4gIGlzT3BlbjogU2lnbmFsPGJvb2xlYW4+O1xuICB0cmlnZ2VyOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBhbGlnbj86IFwibGVmdFwiIHwgXCJyaWdodFwiO1xuICBtdWx0aVNlbGVjdD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIENsYXNzIGFwcGxpZWQgdG8gdGhlIHRyaWdnZXIgPGJ1dHRvbj4gaW4gcGxhY2Ugb2YgRHJvcGRvd24ncyBvd25cbiAgICogZGVmYXVsdC4gTGV0cyBhIGNvbXBvc2luZyBjb21wb25lbnQgKFNlbGVjdCwgQWN0aW9uU2VsZWN0KSBzdHlsZVxuICAgKiB0aGUgc2luZ2xlIGludGVyYWN0aXZlIGVsZW1lbnQgZGlyZWN0bHksIHdpdGggbm8gc3R5bGVkIG5vZGVcbiAgICogbmVzdGVkIGluc2lkZSB0aGUgYnV0dG9uLiBUaGUgdHJpZ2dlciBhbHNvIGNhcnJpZXMgYVxuICAgKiBgZGF0YS1vcGVuPVwidHJ1ZXxmYWxzZVwiYCBhdHRyaWJ1dGUgbWlycm9yaW5nIGBpc09wZW5gLCBzbyB0aGVcbiAgICogY2xhc3MgY2FuIHN0eWxlIG9wZW4tc3RhdGUgYWZmb3JkYW5jZXMgKGUuZy4gYSByb3RhdGluZyBjYXJldCkuXG4gICAqL1xuICB0cmlnZ2VyQ2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKiogRGlzYWJsZXMgdGhlIHRyaWdnZXIgPGJ1dHRvbj4uICovXG4gIHRyaWdnZXJEaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBOYXRpdmUgaG92ZXIgdG9vbHRpcCBvbiB0aGUgdHJpZ2dlciA8YnV0dG9uPi4gU2VsZWN0L0FjdGlvblNlbGVjdFxuICAgKiBwYXNzIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBzbyBhIHRydW5jYXRlZCB0cmlnZ2VyIHN0aWxsIHJldmVhbHMgaXRzXG4gICAqIGZ1bGwgdmFsdWUgb24gaG92ZXIuXG4gICAqL1xuICB0cmlnZ2VyVGl0bGU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxubGV0IGRyb3Bkb3duQ291bnRlciA9IDA7XG5cbi8qKiBHYXAgaW4gcHggdGhlIG1lbnUgbGVhdmVzIGJldHdlZW4gaXRzZWxmIGFuZCB0aGUgdHJpZ2dlci4gKi9cbmNvbnN0IE1FTlVfR0FQID0gNDtcbi8qKiBNaW5pbXVtIGdhcCBpbiBweCB0aGUgbWVudSBrZWVwcyBmcm9tIGV2ZXJ5IHZpZXdwb3J0IGVkZ2UuICovXG5jb25zdCBWSUVXUE9SVF9QQURESU5HID0gODtcblxuZXhwb3J0IGZ1bmN0aW9uIERyb3Bkb3duKHByb3BzOiBEcm9wZG93blByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgaXNPcGVuLFxuICAgIHRyaWdnZXIsXG4gICAgY2hpbGRyZW4sXG4gICAgYWxpZ24gPSBcImxlZnRcIixcbiAgICBtdWx0aVNlbGVjdCA9IGZhbHNlLFxuICAgIGNsYXNzTmFtZSxcbiAgICB0cmlnZ2VyQ2xhc3NOYW1lLFxuICAgIHRyaWdnZXJEaXNhYmxlZCA9IGZhbHNlLFxuICAgIHRyaWdnZXJUaXRsZSxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IG1lbnVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCB0cmlnZ2VyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKTtcbiAgY29uc3QgaWRSZWYgPSB1c2VSZWYoYHBvbGx5LWRyb3Bkb3duLSR7Kytkcm9wZG93bkNvdW50ZXJ9YCk7XG4gIGNvbnN0IHBvcG92ZXJJZCA9IGlkUmVmLmN1cnJlbnQ7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB0cmlnZ2VyUmVmLmN1cnJlbnQ/LnNldEF0dHJpYnV0ZShcInBvcG92ZXJ0YXJnZXRcIiwgcG9wb3ZlcklkKTtcbiAgfSwgW3BvcG92ZXJJZF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWVudSA9IG1lbnVSZWYuY3VycmVudDtcbiAgICBpZiAoIW1lbnUpIHJldHVybjtcbiAgICBjb25zdCBvbk92ZXJsYXlDbG9zZSA9IChlOiBFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBDdXN0b21FdmVudCAmJiBlLmRldGFpbD8uaWQgPT09IHBvcG92ZXJJZCkge1xuICAgICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIG1lbnUuYWRkRXZlbnRMaXN0ZW5lcihcIm92ZXJsYXk6Y2xvc2VcIiwgb25PdmVybGF5Q2xvc2UpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBtZW51LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvdmVybGF5OmNsb3NlXCIsIG9uT3ZlcmxheUNsb3NlKTtcbiAgICB9O1xuICB9LCBbcG9wb3ZlcklkLCBpc09wZW5dKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG1lbnUgPSBtZW51UmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgdHJpZ2dlciA9IHRyaWdnZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIW1lbnUgfHwgIXRyaWdnZXIpIHJldHVybjtcblxuICAgIC8vIFBpbiB0aGUgdG9wLWxheWVyIG1lbnUgdG8gaXRzIHRyaWdnZXIgd2l0aCB2aWV3cG9ydCBjb29yZGluYXRlcy5cbiAgICAvLyBSdW4gZnJvbSBgYmVmb3JldG9nZ2xlYCB0aGlzIGhhcHBlbnMgc3luY2hyb25vdXNseSBiZWZvcmUgdGhlXG4gICAgLy8gcG9wb3ZlciBwYWludHMsIHNvIHRoZSBtZW51IGlzIGNvcnJlY3Qgb24gaXRzIGZpcnN0IGZyYW1lIOKAlCBub1xuICAgIC8vIGZsYXNoLiBSdW4gZnJvbSBzY3JvbGwvcmVzaXplIGl0IGtlZXBzIHRoZSBtZW51IHBpbm5lZC5cbiAgICBjb25zdCBwb3NpdGlvbk1lbnUgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB0ID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgLy8gQSBub3QteWV0LXNob3duIHBvcG92ZXIgaXMgYGRpc3BsYXk6IG5vbmVgIGFuZCBoYXMgbm8gYm94IHRvXG4gICAgICAvLyBtZWFzdXJlLiBGb3JjZSBsYXlvdXQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgKHN5bmNocm9ub3VzKVxuICAgICAgLy8gcmVhZCwgdGhlbiByZXN0b3JlIOKAlCBub3RoaW5nIHBhaW50cyBpbiBiZXR3ZWVuLiBDbGVhcmluZyB0aGVcbiAgICAgIC8vIGlubGluZSBtYXgtaGVpZ2h0IGZpcnN0IG1lYXN1cmVzIHRoZSBtZW51J3MgbmF0dXJhbCBzaXplLlxuICAgICAgY29uc3QgcHJldkRpc3BsYXkgPSBtZW51LnN0eWxlLmRpc3BsYXk7XG4gICAgICBtZW51LnN0eWxlLm1heEhlaWdodCA9IFwiXCI7XG4gICAgICBtZW51LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICBjb25zdCBtZW51V2lkdGggPSBtZW51Lm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgbWVudUhlaWdodCA9IG1lbnUub2Zmc2V0SGVpZ2h0O1xuICAgICAgbWVudS5zdHlsZS5kaXNwbGF5ID0gcHJldkRpc3BsYXk7XG5cbiAgICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG5cbiAgICAgIC8vIEhvcml6b250YWw6IGFsaWduIGxlZnQgZWRnZXMgKHJpZ2h0IGVkZ2VzIHdoZW4gYWxpZ249XCJyaWdodFwiKSxcbiAgICAgIC8vIHRoZW4gY2xhbXAgc28gdGhlIG1lbnUgbmV2ZXIgb3ZlcmZsb3dzIGEgdmlld3BvcnQgZWRnZS4gVW5kZXJcbiAgICAgIC8vIFJUTCB0aGUgXCJsZWZ0XCIgZGVmYXVsdCByZWFkcyBhcyB0aGUgaW5saW5lLXN0YXJ0IGVkZ2UsIHdoaWNoXG4gICAgICAvLyBpcyB0aGUgdHJpZ2dlcidzICpyaWdodCogZWRnZSDigJQgZmxpcCB0aGUgYW5jaG9yIHNvIHRoZSBtZW51XG4gICAgICAvLyBncm93cyB0b3dhcmQgdGhlIGlubGluZS1lbmQgbGlrZSBpdHMgbmF0aXZlIGNvdW50ZXJwYXJ0LlxuICAgICAgY29uc3QgaXNSdGwgPVxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKHRyaWdnZXIpLmRpcmVjdGlvbiA9PT0gXCJydGxcIiB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGlyID09PSBcInJ0bFwiO1xuICAgICAgY29uc3QgcGh5c2ljYWxSaWdodCA9IChpc1J0bCAmJiBhbGlnbiA9PT0gXCJsZWZ0XCIpIHx8IGFsaWduID09PSBcInJpZ2h0XCI7XG4gICAgICBsZXQgbGVmdCA9IHBoeXNpY2FsUmlnaHQgPyB0LnJpZ2h0IC0gbWVudVdpZHRoIDogdC5sZWZ0O1xuICAgICAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KFZJRVdQT1JUX1BBRERJTkcsIHZpZXdwb3J0V2lkdGggLSBtZW51V2lkdGggLSBWSUVXUE9SVF9QQURESU5HKTtcbiAgICAgIGxlZnQgPSBNYXRoLm1pbihNYXRoLm1heChsZWZ0LCBWSUVXUE9SVF9QQURESU5HKSwgbWF4TGVmdCk7XG5cbiAgICAgIC8vIFZlcnRpY2FsOiBiZWxvdyB0aGUgdHJpZ2dlciBieSBkZWZhdWx0OyBmbGlwIGFib3ZlIHdoZW4gdGhhdFxuICAgICAgLy8gbGVhdmVzIG1vcmUgcm9vbS4gQ2FwIHRoZSBoZWlnaHQgdG8gdGhlIHNwYWNlIGF2YWlsYWJsZSBzbyB0aGVcbiAgICAgIC8vIG1lbnUgYWx3YXlzIHN0YXlzIG9uLXNjcmVlbi5cbiAgICAgIGNvbnN0IHNwYWNlQmVsb3cgPSB2aWV3cG9ydEhlaWdodCAtIHQuYm90dG9tIC0gTUVOVV9HQVAgLSBWSUVXUE9SVF9QQURESU5HO1xuICAgICAgY29uc3Qgc3BhY2VBYm92ZSA9IHQudG9wIC0gTUVOVV9HQVAgLSBWSUVXUE9SVF9QQURESU5HO1xuICAgICAgbGV0IHRvcDogbnVtYmVyO1xuICAgICAgaWYgKG1lbnVIZWlnaHQgPD0gc3BhY2VCZWxvdyB8fCBzcGFjZUJlbG93ID49IHNwYWNlQWJvdmUpIHtcbiAgICAgICAgdG9wID0gdC5ib3R0b20gKyBNRU5VX0dBUDtcbiAgICAgICAgaWYgKG1lbnVIZWlnaHQgPiBzcGFjZUJlbG93KSB7XG4gICAgICAgICAgbWVudS5zdHlsZS5tYXhIZWlnaHQgPSBgJHtNYXRoLm1heChzcGFjZUJlbG93LCAwKX1weGA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZSA9IE1hdGgubWF4KHNwYWNlQWJvdmUsIDApO1xuICAgICAgICBtZW51LnN0eWxlLm1heEhlaWdodCA9IGAke2F2YWlsYWJsZX1weGA7XG4gICAgICAgIHRvcCA9IHQudG9wIC0gTUVOVV9HQVAgLSBNYXRoLm1pbihtZW51SGVpZ2h0LCBhdmFpbGFibGUpO1xuICAgICAgfVxuXG4gICAgICBtZW51LnN0eWxlLnBvc2l0aW9uID0gXCJmaXhlZFwiO1xuICAgICAgbWVudS5zdHlsZS5tYXJnaW4gPSBcIjBcIjtcbiAgICAgIG1lbnUuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgO1xuICAgICAgbWVudS5zdHlsZS50b3AgPSBgJHt0b3B9cHhgO1xuICAgIH07XG5cbiAgICBjb25zdCBvbkJlZm9yZVRvZ2dsZSA9IChlOiBFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKFwibmV3U3RhdGVcIiBpbiBlICYmIGUubmV3U3RhdGUgPT09IFwib3BlblwiKSB7XG4gICAgICAgIHBvc2l0aW9uTWVudSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb25SZXBvc2l0aW9uID0gKCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKG1lbnUubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHBvc2l0aW9uTWVudSgpO1xuICAgIH07XG5cbiAgICBtZW51LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV0b2dnbGVcIiwgb25CZWZvcmVUb2dnbGUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIG9uUmVwb3NpdGlvbiwgdHJ1ZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgb25SZXBvc2l0aW9uKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbWVudS5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldG9nZ2xlXCIsIG9uQmVmb3JlVG9nZ2xlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIG9uUmVwb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBvblJlcG9zaXRpb24pO1xuICAgIH07XG4gIH0sIFthbGlnbl0pO1xuXG4gIHVzZVNpZ25hbEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWVudSA9IG1lbnVSZWYuY3VycmVudDtcbiAgICBpZiAoIW1lbnUpIHJldHVybjtcbiAgICBpZiAoaXNPcGVuLnZhbHVlICYmICFtZW51Lm1hdGNoZXMoXCI6cG9wb3Zlci1vcGVuXCIpKSB7XG4gICAgICBtZW51LnNob3dQb3BvdmVyKCk7XG4gICAgfSBlbHNlIGlmICghaXNPcGVuLnZhbHVlICYmIG1lbnUubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHtcbiAgICAgIG1lbnUuaGlkZVBvcG92ZXIoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZSA9IChlOiBFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmIChcIm5ld1N0YXRlXCIgaW4gZSkge1xuICAgICAgaXNPcGVuLnZhbHVlID0gKGUgYXMgdW5rbm93biBhcyB7IG5ld1N0YXRlOiBzdHJpbmcgfSkubmV3U3RhdGUgPT09IFwib3BlblwiO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVNZW51Q2xpY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKCFtdWx0aVNlbGVjdCkge1xuICAgICAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gXCJFc2NhcGVcIikge1xuICAgICAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJkcm9wZG93blwiXSA/PyBcIlwiXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBpZD17aWR9IGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1kcm9wZG93bj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgcmVmPXt0cmlnZ2VyUmVmfVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9e3RyaWdnZXJDbGFzc05hbWUgPz8gY2xhc3Nlc1tcInRyaWdnZXJcIl0gPz8gXCJcIn1cbiAgICAgICAgZGlzYWJsZWQ9e3RyaWdnZXJEaXNhYmxlZH1cbiAgICAgICAgdGl0bGU9e3RyaWdnZXJUaXRsZX1cbiAgICAgICAgZGF0YS1vcGVuPXtpc09wZW4udmFsdWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgID5cbiAgICAgICAge3RyaWdnZXJ9XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXttZW51UmVmfVxuICAgICAgICBpZD17cG9wb3ZlcklkfVxuICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgIGFyaWEtbXVsdGlzZWxlY3RhYmxlPXttdWx0aVNlbGVjdCA/IFwidHJ1ZVwiIDogdW5kZWZpbmVkfVxuICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcIm1lbnVcIl0gPz8gXCJcIn1cbiAgICAgICAgZGF0YS1hbGlnbj17YWxpZ259XG4gICAgICAgIHBvcG92ZXI9XCJhdXRvXCJcbiAgICAgICAgZGF0YS1vdmVybGF5LWlkPXtwb3BvdmVySWR9XG4gICAgICAgIG9uVG9nZ2xlPXtoYW5kbGVUb2dnbGV9XG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZU1lbnVDbGlja31cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgPlxuICAgICAgICA8TGF5b3V0IHJvd3M9XCJhdXRvXCIgZ2FwPVwiMFwiPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9MYXlvdXQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBTZWxlY3RUcmlnZ2VyIOKAlCB0aGUgbGFiZWwvY2FyZXQgcm93IGluc2lkZSBhIHNlbGVjdCB0cmlnZ2VyIGJveC5cbiAqXG4gKiBgLnRyaWdnZXJgIGluIFNlbGVjdC5tb2R1bGUuY3NzIHN0eWxlcyB0aGUgKmJveCo6IGJvcmRlciwgcGFkZGluZyxcbiAqIGBtaW4tYmxvY2stc2l6ZWAsIGFuZCBgYWxpZ24tY29udGVudDogY2VudGVyYCB0byBjZW50cmUgb25lIGNoaWxkIGluXG4gKiBpdC4gSXQgZGVsaWJlcmF0ZWx5IGRlY2xhcmVzIG5vIGZsZXggb3IgZ3JpZCBvZiBpdHMgb3duIOKAlCBwb2xseS11aVxuICogcm91dGVzIGV2ZXJ5IGxheW91dCBkZWNpc2lvbiB0aHJvdWdoIDxMYXlvdXQ+IOKAlCBzbyB0aGUgY29tcG9uZW50XG4gKiB0aGF0IGFwcGxpZXMgYC50cmlnZ2VyYCBtdXN0IHN1cHBseSB0aGUgcm93LlxuICpcbiAqIHBvbGx5IzE4MDogdGhhdCBydWxlIHdhcyBjaGFuZ2VkIGZvciBvbmUgb2YgaXRzIHR3byBjb25zdW1lcnMuXG4gKiA8U2VsZWN0PiBnYWluZWQgYSA8TGF5b3V0PjsgPEFjdGlvblNlbGVjdD4sIHdoaWNoIGFwcGxpZXMgdGhlIHNhbWVcbiAqIGNsYXNzIHRocm91Z2ggRHJvcGRvd24ncyBgdHJpZ2dlckNsYXNzTmFtZWAsIGtlcHQgcmVuZGVyaW5nIHR3byBiYXJlXG4gKiBpbmxpbmUgc3BhbnMsIHNvIGl0cyBjYXJldCB3cmFwcGVkIG9udG8gYSBzZWNvbmQgbGluZS4gTm90aGluZyB0aWVkXG4gKiB0aGUgc3R5bGVzaGVldCdzIGNvbnRyYWN0IHRvIHRoZSBjb21wb25lbnRzIHRoYXQgaGFkIHRvIHNhdGlzZnkgaXQuXG4gKiBUaGlzIG1vZHVsZSBpcyB0aGF0IHRpZTogb25lIHJvdywgb25lIGRlZmluaXRpb24sIGJvdGggY29uc3VtZXJzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4uL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuLi9TZWxlY3QubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBTZWxlY3RUcmlnZ2VyUHJvcHMgPSB7XG4gIC8qKiBUZXh0IGluIHRoZSB0cmlnZ2VyIOKAlCB0aGUgY3VycmVudCBzZWxlY3Rpb24sIG9yIHRoZSBwbGFjZWhvbGRlci4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgZHJvcGRvd24gY2FyZXQgYmVzaWRlIHRoZSBsYWJlbC4gT2ZmIGZvciBhIGRpc2FibGVkXG4gICAqIDxBY3Rpb25TZWxlY3Q+LCB3aGljaCBpcyBzdGF0aWMgdGV4dCB3aXRoIG5vIG1lbnUgdG8gb3Blbi5cbiAgICovXG4gIGNhcmV0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVsZW1lbnQgdGhlIHJvdyByZW5kZXJzIGFzLiBgc3BhbmAgd2hlcmUgdGhlIHRyaWdnZXIgYm94IGlzIGl0c2VsZlxuICAgKiBwaHJhc2luZyBjb250ZW50IOKAlCBhIGRpc2FibGVkIDxBY3Rpb25TZWxlY3Q+IHJlbmRlcnMgaXRzIGJveCBhcyBhXG4gICAqIDxzcGFuPiwgd2hpY2ggbWF5IG5vdCBjb250YWluIGEgPGRpdj4uXG4gICAqL1xuICBhcz86IFwiZGl2XCIgfCBcInNwYW5cIjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWxlY3RUcmlnZ2VyKHByb3BzOiBTZWxlY3RUcmlnZ2VyUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgbGFiZWwsIGNhcmV0ID0gdHJ1ZSwgYXMgPSBcImRpdlwiIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8TGF5b3V0XG4gICAgICBhcz17YXN9XG4gICAgICBpbmxpbmVcbiAgICAgIC8vIFdpdGhvdXQgYSBjYXJldCB0aGUgc2Vjb25kIHRyYWNrIHdvdWxkIHN0aWxsIGNvbnRyaWJ1dGUgaXRzIGdhcCxcbiAgICAgIC8vIHBhZGRpbmcgdGhlIHRyaWdnZXIgYnkgOHB4IGl0IGRvZXMgbm90IG5lZWQuXG4gICAgICBjb2x1bW5zPXtjYXJldCA/IFwiMWZyIGF1dG9cIiA6IFwiMWZyXCJ9XG4gICAgICB7Li4uKGNhcmV0ID8geyBnYXA6IFwidmFyKC0tcG9sbHktc3BhY2Utc20pXCIgfSA6IHt9KX1cbiAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgbWF4SW5saW5lU2l6ZT1cIjEwMCVcIlxuICAgID5cbiAgICAgIHsvKiBUaGUgMWZyIHRyYWNrIGJsb2NraWZpZXMgdGhpcyBzcGFuLCB3aGljaCBpcyB3aGF0IGxldHNcbiAgICAgICAgICBgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXNgIGFwcGx5IHRvIGEgbG9uZyBsYWJlbC4gKi99XG4gICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcInRyaWdnZXJMYWJlbFwiXX0gZGF0YS1wb2xseS1zZWxlY3QtbGFiZWw+XG4gICAgICAgIHtsYWJlbH1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHtjYXJldCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImNhcmV0XCJdfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPn1cbiAgICA8L0xheW91dD5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBBY3Rpb25TZWxlY3Qg4oCUIHNpbmdsZS1zZWxlY3QgZHJvcGRvd24gdGhhdCBjb21taXRzIHZpYSB0aGUgYWN0aW9uIHN5c3RlbS5cbiAqXG4gKiBUaGUgYWN0aW9uLWRpc3BhdGNoaW5nIHNpYmxpbmcgb2YgPFNlbGVjdD4uIFdoZXJlIDxTZWxlY3Q+IGJpbmRzIGFcbiAqIGBTaWduYWw8U2V0PFQ+PmAgYW5kIGlzIGJ1aWx0IGZvciBpbi1tZW1vcnkgZmlsdGVyIFVJcywgQWN0aW9uU2VsZWN0XG4gKiB0YWtlcyB0aGUgY3VycmVudCBgdmFsdWVgIGFzIGEgcGxhaW4gc3RyaW5nIGFuZCBmaXJlcyBgYWN0aW9uYCB3aXRoXG4gKiBgZGF0YS1hY3Rpb24tdmFsdWVgIHNldCB0byB0aGUgY2hvc2VuIG9wdGlvbiDigJQgc28gZWRpdGluZyBhXG4gKiBzZXJ2ZXItYmFja2VkIGZpZWxkIGNvbW1pdHMgdGhyb3VnaCB0aGUgc2FtZSBldmVudCBkZWxlZ2F0aW9uIGFzXG4gKiA8QWN0aW9uSW5wdXQ+IGFuZCA8QWN0aW9uRm9ybT4sIHdpdGggbm8gc3ludGhldGljIHNpZ25hbCBvciBicmlkZ2luZ1xuICogYGVmZmVjdGAgcmVxdWlyZWQuXG4gKlxuICogQ29tcG9zZXMgPERyb3Bkb3duPiBmb3IgdGhlIG1lbnUuIFRoZSB0cmlnZ2VyIHN0eWxpbmcgaXMgYXBwbGllZFxuICogZGlyZWN0bHkgdG8gRHJvcGRvd24ncyBvd24gPGJ1dHRvbj4gdmlhIGB0cmlnZ2VyQ2xhc3NOYW1lYCwgc28gdGhlXG4gKiB2aXNpYmxlIGJveCBhbmQgdGhlIGludGVyYWN0aXZlIGVsZW1lbnQgYXJlIG9uZSBhbmQgdGhlIHNhbWUgbm9kZSDigJRcbiAqIG5vIHN0eWxlZCA8c3Bhbj4gbmVzdGVkIGluc2lkZSBhbiB1bnN0eWxlZCA8YnV0dG9uPi4gQSBkaXNhYmxlZFxuICogQWN0aW9uU2VsZWN0IHJlbmRlcnMgYXMgc3RhdGljIHRleHQgd2l0aG91dCBhIGNhcmV0LlxuICpcbiAqIEJvdGggYnJhbmNoZXMgcmVuZGVyIHRoZWlyIGxhYmVsL2NhcmV0IHJvdyB0aHJvdWdoIDxTZWxlY3RUcmlnZ2VyPixcbiAqIHRoZSBzYW1lIHJvdyA8U2VsZWN0PiB1c2VzIOKAlCBgLnRyaWdnZXJgIHN0eWxlcyB0aGUgYm94IGFuZCBzdXBwbGllc1xuICogbm8gbGF5b3V0LCBzbyB0aGUgY29tcG9uZW50IG93ZXMgaXQgb25lIChwb2xseSMxODApLlxuICovXG5cbmltcG9ydCB7IHVzZVNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgRHJvcGRvd24gfSBmcm9tIFwiLi9Ecm9wZG93bi50c3hcIjtcbmltcG9ydCB7IGRpc3BhdGNoQWN0aW9uIH0gZnJvbSBcIi4vaW50ZXJuYWwvZGlzcGF0Y2gtYWN0aW9uLnRzXCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgeyBTZWxlY3RUcmlnZ2VyIH0gZnJvbSBcIi4vaW50ZXJuYWwvc2VsZWN0LXRyaWdnZXIudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9TZWxlY3QubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RPcHRpb24gfSBmcm9tIFwiLi9TZWxlY3QudHN4XCI7XG5cbmV4cG9ydCB0eXBlIEFjdGlvblNlbGVjdFByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgLyoqIEN1cnJlbnQgdmFsdWUg4oCUIG1hdGNoZWQgYWdhaW5zdCBgb3B0aW9uc2AgdG8gcmVuZGVyIHRoZSB0cmlnZ2VyIGxhYmVsLiAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogU2VsZWN0YWJsZSBvcHRpb25zLiAqL1xuICBvcHRpb25zOiBTZWxlY3RPcHRpb248c3RyaW5nPltdO1xuICAvKiogQWN0aW9uIG5hbWUgdG8gZGlzcGF0Y2ggb24gc2VsZWN0aW9uLiBSZWNlaXZlcyBkYXRhLWFjdGlvbi12YWx1ZT08b3B0aW9uIHZhbHVlPi4gKi9cbiAgYWN0aW9uOiBzdHJpbmc7XG4gIC8qKiBFeHRyYSBkYXRhLWFjdGlvbi0qIGF0dHJpYnV0ZXMgdG8gaW5jbHVkZSBvbiBjb21taXQgKGUuZy4gZW50aXR5IGlkKS4gKi9cbiAgYWN0aW9uRGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBWaXNpYmxlIGZpZWxkIGxhYmVsIHJlbmRlcmVkIGFib3ZlIHRoZSB0cmlnZ2VyLiAqL1xuICBsYWJlbD86IHN0cmluZztcbiAgLyoqIFRyaWdnZXIgdGV4dCBzaG93biB3aGVuIGB2YWx1ZWAgbWF0Y2hlcyBubyBvcHRpb24uIERlZmF1bHQ6IFwiU2VsZWN04oCmXCIuICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBBcHBseSBhIGNvbWZvcnRhYmxlIG1pbmltdW0gd2lkdGggdG8gdGhlIHRyaWdnZXIuIERlZmF1bHQ6IHNpemVzIHRvIGNvbnRlbnQuICovXG4gIHdpZGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gbGFiZWxGb3Iob3B0aW9uczogU2VsZWN0T3B0aW9uPHN0cmluZz5bXSwgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0LnZhbHVlID09PSB2YWx1ZSkgcmV0dXJuIG9wdC5sYWJlbDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWN0aW9uU2VsZWN0KHByb3BzOiBBY3Rpb25TZWxlY3RQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIHZhbHVlLFxuICAgIG9wdGlvbnMsXG4gICAgYWN0aW9uLFxuICAgIGFjdGlvbkRhdGEsXG4gICAgbGFiZWwsXG4gICAgcGxhY2Vob2xkZXIgPSBcIlNlbGVjdOKAplwiLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgd2lkZSA9IGZhbHNlLFxuICAgIGNsYXNzTmFtZSxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGlzT3BlbiA9IHVzZVNpZ25hbChmYWxzZSk7XG5cbiAgY29uc3QgY3VycmVudCA9IGxhYmVsRm9yKG9wdGlvbnMsIHZhbHVlKTtcbiAgY29uc3QgaXNFbXB0eSA9IGN1cnJlbnQgPT09IHVuZGVmaW5lZDtcbiAgY29uc3QgZGlzcGxheVRleHQgPSBjdXJyZW50ID8/IHBsYWNlaG9sZGVyO1xuXG4gIGNvbnN0IGNvbW1pdCA9IChuZXh0OiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICBpZiAobmV4dCA9PT0gdmFsdWUpIHJldHVybjtcbiAgICBkaXNwYXRjaEFjdGlvbihhY3Rpb24sIHsgLi4uKGFjdGlvbkRhdGEgPz8ge30pLCB2YWx1ZTogbmV4dCB9KTtcbiAgfTtcblxuICBjb25zdCB0cmlnZ2VyUGFydHMgPSBbY2xhc3Nlc1tcInRyaWdnZXJcIl0gPz8gXCJcIl07XG4gIGlmIChpc0VtcHR5KSB0cmlnZ2VyUGFydHMucHVzaChjbGFzc2VzW1wicGxhY2Vob2xkZXJcIl0gPz8gXCJcIik7XG4gIGlmICh3aWRlKSB0cmlnZ2VyUGFydHMucHVzaChjbGFzc2VzW1widHJpZ2dlcldpZGVcIl0gPz8gXCJcIik7XG4gIGNvbnN0IHRyaWdnZXJDbGFzcyA9IHRyaWdnZXJQYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInNlbGVjdFwiXSA/PyBcIlwiXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgey4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyl9XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1hY3Rpb24tc2VsZWN0XG4gICAgICBkYXRhLXN0YXRlPXtpc0VtcHR5ID8gXCJlbXB0eVwiIDogXCJmaWxsZWRcIn1cbiAgICA+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICAgIHtkaXNhYmxlZCA/IChcbiAgICAgICAgPHNwYW4gY2xhc3M9e3RyaWdnZXJDbGFzc30gYXJpYS1kaXNhYmxlZD1cInRydWVcIiB0aXRsZT17ZGlzcGxheVRleHR9PlxuICAgICAgICAgIDxTZWxlY3RUcmlnZ2VyIGFzPVwic3BhblwiIGNhcmV0PXtmYWxzZX0gbGFiZWw9e2Rpc3BsYXlUZXh0fSAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApIDogKFxuICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgICAgICB0cmlnZ2VyQ2xhc3NOYW1lPXt0cmlnZ2VyQ2xhc3N9XG4gICAgICAgICAgdHJpZ2dlclRpdGxlPXtkaXNwbGF5VGV4dH1cbiAgICAgICAgICB0cmlnZ2VyPXs8U2VsZWN0VHJpZ2dlciBsYWJlbD17ZGlzcGxheVRleHR9IC8+fVxuICAgICAgICA+XG4gICAgICAgICAge29wdGlvbnMubWFwKChvcHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBvcHQudmFsdWUgPT09IHZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgb3B0Q2xhc3MgPSBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgID8gYCR7Y2xhc3Nlc1tcIm9wdGlvblwiXX0gJHtjbGFzc2VzW1wib3B0aW9uU2VsZWN0ZWRcIl19YFxuICAgICAgICAgICAgICA6IGNsYXNzZXNbXCJvcHRpb25cIl07XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAga2V5PXtvcHQudmFsdWV9XG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9e29wdENsYXNzfVxuICAgICAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzU2VsZWN0ZWQgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjb21taXQob3B0LnZhbHVlKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuPntvcHQubGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvRHJvcGRvd24+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEJhZGdlIOKAlCBzbWFsbCBpbmxpbmUgc3RhdHVzIGNoaXAuXG4gKlxuICogUmVuZGVycyBhcyBhIHBhc3NpdmUgPHNwYW4+IHdpdGggdGludGVkIGJhY2tncm91bmQgYW5kIG9uLXRpbnQgdGV4dFxuICogZnJvbSB0aGUgYC0tcG9sbHktc3RhdHVzLSpgIHRva2VuIGZhbWlseS4gVGhlIGRlZmF1bHQgdmFyaWFudCB1c2VzXG4gKiBzdXJmYWNlLXN1bmtlbiArIG11dGVkIHRleHQgZm9yIGEgbmV1dHJhbCBwaWxsLiBDb25zdW1lcnMgc3R5bGVcbiAqIHBsYWNlbWVudCB2aWEgY2xhc3NOYW1lOyB0aGUgcHJpbWl0aXZlIG93bnMgc2l6ZSwgc2hhcGUsIGFuZCBjb2xvdXIuXG4gKlxuICogQSBiYWRnZSBpcyBvZnRlbiBhbiBhYmJyZXZpYXRlZCBvciBpY29uaWMgc3RhdHVzIChcIjNcIiwgXCLil49cIik7IHBhc3NcbiAqIGB0aXRsZWAgdG8gYXR0YWNoIGFuIGV4cGxhbmF0b3J5IGhvdmVyIHRvb2x0aXAgKFwiMyBwZWVycyBjb25uZWN0ZWRcIikuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQmFkZ2UubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBCYWRnZVZhcmlhbnQgPSBcImRlZmF1bHRcIiB8IFwiaW5mb1wiIHwgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiZGFuZ2VyXCI7XG5cbmV4cG9ydCB0eXBlIEJhZGdlUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgdmFyaWFudD86IEJhZGdlVmFyaWFudDtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgLyoqIE5hdGl2ZSBob3ZlciB0b29sdGlwIOKAlCBleHBsYWlucyBhbiBhYmJyZXZpYXRlZCBvciBpY29uaWMgYmFkZ2UuICovXG4gIHRpdGxlPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gdmFyaWFudENsYXNzKHZhcmlhbnQ6IEJhZGdlVmFyaWFudCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YXJpYW50ID09PSBcImluZm9cIikgcmV0dXJuIGNsYXNzZXNbXCJpbmZvXCJdO1xuICBpZiAodmFyaWFudCA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBjbGFzc2VzW1wic3VjY2Vzc1wiXTtcbiAgaWYgKHZhcmlhbnQgPT09IFwid2FybmluZ1wiKSByZXR1cm4gY2xhc3Nlc1tcIndhcm5pbmdcIl07XG4gIGlmICh2YXJpYW50ID09PSBcImRhbmdlclwiKSByZXR1cm4gY2xhc3Nlc1tcImRhbmdlclwiXTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEJhZGdlKHByb3BzOiBCYWRnZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCB2YXJpYW50ID0gXCJkZWZhdWx0XCIsIGNsYXNzTmFtZSwgaWQsIHRpdGxlIH0gPSBwcm9wcztcbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImJhZGdlXCJdXTtcbiAgY29uc3QgdiA9IHZhcmlhbnRDbGFzcyh2YXJpYW50KTtcbiAgaWYgKHYpIHBhcnRzLnB1c2godik7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8c3BhbiBpZD17aWR9IHRpdGxlPXt0aXRsZX0gY2xhc3M9e3BhcnRzLmpvaW4oXCIgXCIpfSBkYXRhLXBvbGx5LXVpIGRhdGEtcG9sbHktYmFkZ2U9e3ZhcmlhbnR9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBCdXR0b24g4oCUIGludGVyYWN0aXZlIGNvbnRyb2wgd2l0aCB0aWVyLCBzZW1hbnRpYyBjb2xvdXIsIGFuZCBzaXplLlxuICpcbiAqIFJlbmRlcnMgYXMgYSA8YnV0dG9uPiBieSBkZWZhdWx0OyBzd2l0Y2hlcyB0byBhbiA8YT4gd2hlbiBnaXZlbiBhblxuICogYGhyZWZgLiBUaWVyIHNldHMgdmlzdWFsIGltcG9ydGFuY2UgKHByaW1hcnkvc2Vjb25kYXJ5L3RlcnRpYXJ5KSxcbiAqIGNvbG9yIG92ZXJsYXlzIHNlbWFudGljIG1lYW5pbmcgKGluZm8vc3VjY2Vzcy93YXJuaW5nL2RhbmdlciksXG4gKiBzaXplIHBpY2tzIHRoZSBoZWlnaHQgKyBwYWRkaW5nICsgZm9udCBzY2FsZSAoc21hbGwvbm9ybWFsL2xhcmdlKS5cbiAqIFRoZSBidXR0b24gaXMgYSBmbGV4IGNvbnRhaW5lciwgc28gYW4gaWNvbiBhbmQgYSBsYWJlbCBhcmUgaXRzIG93blxuICogY2hpbGRyZW4gd2l0aCBhIGBnYXBgIGJldHdlZW4gdGhlbS5cbiAqXG4gKiBIZWlnaHQgY29tZXMgZnJvbSAtLXBvbGx5LWNvbnRyb2wtaGVpZ2h0LSosIG5ldmVyIGZyb20gcGFkZGluZywgc28gYVxuICogQnV0dG9uIGlzIGV4YWN0bHkgYXMgdGFsbCBhcyBhIFRleHRJbnB1dCBvciBhIFNlbGVjdCBpbiB0aGUgc2FtZSByb3cuXG4gKlxuICogQSB0ZXh0IGBsYWJlbGAgaXMgdGhlIGFjY2Vzc2libGUgbmFtZS4gQW4gaWNvbi1vbmx5IGJ1dHRvbiAoaWNvbiwgbm9cbiAqIGxhYmVsKSBoYXMgbm9uZSwgc28gdGhlIHR5cGUgUkVRVUlSRVMgYGFyaWEtbGFiZWxgIHRoZXJlIOKAlCBhbiB1bm5hbWVkXG4gKiBpY29uIGJ1dHRvbiB3b24ndCBjb21waWxlLiBObyBidWlsZC10aW1lIGxpbnQgbmVlZGVkOyB0aGUgY2FsbCBzaXRlXG4gKiBpdHNlbGYgaXMgdGhlIGdhdGUuXG4gKlxuICogQWN0aW9uIHdpcmluZyBpcyBkZWNsYXJlZCB2aWEgZGF0YS0qIGF0dHJpYnV0ZXMgY29uc3VtZWQgYnkgdGhlXG4gKiBnbG9iYWwgZXZlbnQgZGVsZWdhdG9yIGluIEBmYWlyZm94L3BvbGx5L2FjdGlvbnMg4oCUIEJ1dHRvbiBkb2VzIG5vdFxuICogYWNjZXB0IGFuIG9uQ2xpY2sgcHJvcC5cbiAqXG4gKiBFdmVyeSBidXR0b24gc3VyZmFjZXMgYSBuYXRpdmUgaG92ZXIgdG9vbHRpcDogYW4gZXhwbGljaXQgYHRpdGxlYFxuICogd2lucywgZWxzZSB0aGUgdmlzaWJsZSB0ZXh0IGxhYmVsLCBlbHNlIHRoZSBgYXJpYS1sYWJlbGAgKHNvIGFuXG4gKiBpY29uLW9ubHkgYnV0dG9uIHN0aWxsIGdldHMgb25lKS4gUGFzcyBgdGl0bGU9XCJcImAgdG8gc3VwcHJlc3MgaXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYLCBWTm9kZSB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5cbmV4cG9ydCB0eXBlIEJ1dHRvblRpZXIgPSBcInByaW1hcnlcIiB8IFwic2Vjb25kYXJ5XCIgfCBcInRlcnRpYXJ5XCI7XG5leHBvcnQgdHlwZSBCdXR0b25Db2xvciA9IFwiZGVmYXVsdFwiIHwgXCJpbmZvXCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIjtcbmV4cG9ydCB0eXBlIEJ1dHRvblNpemUgPSBcInNtYWxsXCIgfCBcIm5vcm1hbFwiIHwgXCJsYXJnZVwiO1xuXG50eXBlIEJhc2VCdXR0b25Qcm9wcyA9IHtcbiAgaWQ/OiBzdHJpbmc7XG4gIHRpZXI/OiBCdXR0b25UaWVyO1xuICBjb2xvcj86IEJ1dHRvbkNvbG9yO1xuICBzaXplPzogQnV0dG9uU2l6ZTtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBmdWxsV2lkdGg/OiBib29sZWFuO1xuICBjaXJjbGU/OiBib29sZWFuO1xuICAvKiogQ2FwIHRoZSBidXR0b24gd2lkdGggYXQgYC0tcG9sbHktY29udHJvbC1tYXgtd2lkdGhgIGFuZCBlbGxpcHNpcy1cbiAgICogdHJ1bmNhdGUgdGhlIGxhYmVsLiBVc2UgZm9yIHVzZXItc3VwcGxpZWQgb3Igb3RoZXJ3aXNlIHVuYm91bmRlZFxuICAgKiBsYWJlbHMgc28gYSBsb25nIHN0cmluZyBkb2Vzbid0IGJsb3cgb3V0IHRoZSByb3cuICovXG4gIGJvdW5kZWQ/OiBib29sZWFuO1xuICAvKiogUHVsbCB0aGUgYm94IG91dCBieSBpdHMgb3duIGlubGluZSBwYWRkaW5nIHNvIHRoZSBMQUJFTCBzaXRzIG9uIHRoZVxuICAgKiB0ZXh0IGVkZ2UgcmF0aGVyIHRoYW4gdGhlIGJveCBlZGdlLiBGb3IgYSBgdGVydGlhcnlgIGJ1dHRvbiBpbiBhIHRleHRcbiAgICogY29sdW1uLCB3aGVyZSB0aGUgaW52aXNpYmxlIHBhZGRpbmcgb3RoZXJ3aXNlIHJlYWRzIGFzIGFuIGluZGVudFxuICAgKiBhZ2FpbnN0IHRoZSBjb3B5IGJlc2lkZSBpdC4gQSBib3JkZXJlZCBidXR0b24gc2hvdWxkIGtlZXAgaXRzIGRlZmF1bHRcbiAgICogYm94IGFsaWdubWVudCDigJQgdGhlIGJvcmRlciBpcyB3aGF0IG1ha2VzIHRoYXQgZWRnZSBsZWdpYmxlLiBUaGUgaGl0XG4gICAqIHRhcmdldCBpcyB1bmNoYW5nZWQ7IG9ubHkgdGhlIGJveCdzIHBvc2l0aW9uIGluIHRoZSBsYXlvdXQgbW92ZXMuICovXG4gIGZsdXNoPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgXCJkYXRhLWFjdGlvblwiPzogc3RyaW5nO1xuICAvKiogQWRkaXRpb25hbCBhY3Rpb24tcGF5bG9hZCBhdHRyaWJ1dGVzIHRoZSBldmVudCBkZWxlZ2F0b3IgcGFyc2VzXG4gICAqIGludG8gYGN0eC5kYXRhYC4gYGRhdGEtYWN0aW9uLXRpZD1cInQtMTdcImAgYmVjb21lcyBgeyB0aWQ6IFwidC0xN1wiIH1gLFxuICAgKiBgZGF0YS1hY3Rpb24taXRlbS1pZD1cIuKAplwiYCBiZWNvbWVzIGB7IGl0ZW1JZDogXCLigKZcIiB9YCwgYW5kIHNvIG9uLlxuICAgKiBUeXBlZCBhcyBhbiBpbmRleCBzaWduYXR1cmUgc28gZXZlcnkgYGRhdGEtYWN0aW9uLSpgIGtleSB0aGVcbiAgICogY29uc3VtZXIgY2FyZXMgYWJvdXQgdHlwZS1jaGVja3Mgd2l0aG91dCBhIEJ1dHRvbi1zaWRlIGVudW1lcmF0aW9uLiAqL1xuICBbYWN0aW9uRGF0YUF0dHI6IGBkYXRhLWFjdGlvbi0ke3N0cmluZ31gXTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDb250ZW50L2FjY2Vzc2liaWxpdHkgZGltZW5zaW9uLiBBIHZpc2libGUgdGV4dCBgbGFiZWxgIGlzIHRoZVxuICogYWNjZXNzaWJsZSBuYW1lLCBzbyBpdCBtYWtlcyBgYXJpYS1sYWJlbGAgb3B0aW9uYWwuIEFuIGljb24tb25seVxuICogYnV0dG9uIGhhcyBubyB0ZXh0IHRvIG5hbWUgaXQsIHNvIGBhcmlhLWxhYmVsYCBpcyBSRVFVSVJFRCDigJQgeW91XG4gKiBjYW5ub3QgY29uc3RydWN0IGFuIHVubmFtZWQgaWNvbiBidXR0b24uIChCdXR0b24ncyBob3ZlciB0aXRsZSB0aGVuXG4gKiBmYWxscyBiYWNrIHRvIHRoYXQgYXJpYS1sYWJlbCwgc28gdGhlIHNhbWUgcHJvcCBnaXZlcyBib3RoIHRoZVxuICogYWNjZXNzaWJsZSBuYW1lIGFuZCB0aGUgdG9vbHRpcC4pXG4gKi9cbnR5cGUgTGFiZWxsZWRDb250ZW50ID0ge1xuICBsYWJlbDogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGljb24/OiBWTm9kZTtcbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG59O1xudHlwZSBJY29uT25seUNvbnRlbnQgPSB7XG4gIGljb246IFZOb2RlO1xuICBsYWJlbD86IG5ldmVyO1xuICBcImFyaWEtbGFiZWxcIjogc3RyaW5nO1xufTtcbnR5cGUgQnV0dG9uQ29udGVudCA9IExhYmVsbGVkQ29udGVudCB8IEljb25Pbmx5Q29udGVudDtcblxudHlwZSBCdXR0b25FbGVtZW50ID0ge1xuICBocmVmPzogbmV2ZXI7XG4gIHRhcmdldD86IG5ldmVyO1xuICByZWw/OiBuZXZlcjtcbiAgZG93bmxvYWQ/OiBuZXZlcjtcbiAgdHlwZT86IFwiYnV0dG9uXCIgfCBcInN1Ym1pdFwiIHwgXCJyZXNldFwiO1xufTtcblxudHlwZSBMaW5rRWxlbWVudCA9IHtcbiAgaHJlZjogc3RyaW5nO1xuICB0YXJnZXQ/OiBzdHJpbmc7XG4gIHJlbD86IHN0cmluZztcbiAgLyoqIEZvcndhcmRlZCB0byB0aGUgcmVuZGVyZWQgPGE+IHNvIGEgQnV0dG9uLWFzLWxpbmsgY2FuIG9mZmVyIGEgZmlsZVxuICAgKiBkb3dubG9hZC4gQW4gZW1wdHkgc3RyaW5nIHVzZXMgdGhlIHJlc291cmNlJ3Mgb3duIGZpbGVuYW1lLiAqL1xuICBkb3dubG9hZD86IHN0cmluZztcbiAgdHlwZT86IG5ldmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQnV0dG9uUHJvcHMgPSBCYXNlQnV0dG9uUHJvcHMgJiBCdXR0b25Db250ZW50ICYgKEJ1dHRvbkVsZW1lbnQgfCBMaW5rRWxlbWVudCk7XG5cbmZ1bmN0aW9uIHRpZXJDbGFzcyh0aWVyOiBCdXR0b25UaWVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHRpZXIgPT09IFwicHJpbWFyeVwiKSByZXR1cm4gY2xhc3Nlc1tcInRpZXJQcmltYXJ5XCJdO1xuICBpZiAodGllciA9PT0gXCJ0ZXJ0aWFyeVwiKSByZXR1cm4gY2xhc3Nlc1tcInRpZXJUZXJ0aWFyeVwiXTtcbiAgcmV0dXJuIGNsYXNzZXNbXCJ0aWVyU2Vjb25kYXJ5XCJdO1xufVxuXG5mdW5jdGlvbiBjb2xvckNsYXNzKGNvbG9yOiBCdXR0b25Db2xvcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChjb2xvciA9PT0gXCJpbmZvXCIpIHJldHVybiBjbGFzc2VzW1wiY29sb3JJbmZvXCJdO1xuICBpZiAoY29sb3IgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gY2xhc3Nlc1tcImNvbG9yU3VjY2Vzc1wiXTtcbiAgaWYgKGNvbG9yID09PSBcIndhcm5pbmdcIikgcmV0dXJuIGNsYXNzZXNbXCJjb2xvcldhcm5pbmdcIl07XG4gIGlmIChjb2xvciA9PT0gXCJkYW5nZXJcIikgcmV0dXJuIGNsYXNzZXNbXCJjb2xvckRhbmdlclwiXTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gc2l6ZUNsYXNzKHNpemU6IEJ1dHRvblNpemUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoc2l6ZSA9PT0gXCJzbWFsbFwiKSByZXR1cm4gY2xhc3Nlc1tcImJ0blNtYWxsXCJdO1xuICBpZiAoc2l6ZSA9PT0gXCJsYXJnZVwiKSByZXR1cm4gY2xhc3Nlc1tcImJ0bkxhcmdlXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eTogZmxhdCBwcm9wLXRvLWNsYXNzIGNvbXBvc2l0aW9uIHBsdXMgb25lIGFuY2hvci9idXR0b24gYnJhbmNoOyBzcGxpdHRpbmcgd291bGQganVzdCBoaWRlIHRoZSBtYXBwaW5nLlxuZXhwb3J0IGZ1bmN0aW9uIEJ1dHRvbihwcm9wczogQnV0dG9uUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICB0aWVyID0gXCJzZWNvbmRhcnlcIixcbiAgICBjb2xvciA9IFwiZGVmYXVsdFwiLFxuICAgIHNpemUgPSBcIm5vcm1hbFwiLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgY2lyY2xlID0gZmFsc2UsXG4gICAgYm91bmRlZCA9IGZhbHNlLFxuICAgIGZsdXNoID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIHRpdGxlLFxuICAgIGljb24sXG4gICAgbGFiZWwsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiYnRuXCJdID8/IFwiXCJdO1xuICBjb25zdCB0YyA9IHRpZXJDbGFzcyh0aWVyKTtcbiAgaWYgKHRjKSBwYXJ0cy5wdXNoKHRjKTtcbiAgY29uc3QgY2MgPSBjb2xvckNsYXNzKGNvbG9yKTtcbiAgaWYgKGNjKSBwYXJ0cy5wdXNoKGNjKTtcbiAgY29uc3Qgc2MgPSBzaXplQ2xhc3Moc2l6ZSk7XG4gIGlmIChzYykgcGFydHMucHVzaChzYyk7XG4gIGlmIChjaXJjbGUpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImJ0bkNpcmNsZVwiXSA/PyBcIlwiKTtcbiAgaWYgKGZ1bGxXaWR0aCkgcGFydHMucHVzaChjbGFzc2VzW1wiYnRuRnVsbFdpZHRoXCJdID8/IFwiXCIpO1xuICBpZiAoYm91bmRlZCkgcGFydHMucHVzaChjbGFzc2VzW1wiYnRuQm91bmRlZFwiXSA/PyBcIlwiKTtcbiAgaWYgKGZsdXNoKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJidG5GbHVzaFwiXSA/PyBcIlwiKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICBjb25zdCBidXR0b25DbGFzcyA9IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICAvLyBBbiBpY29uIGJlc2lkZSBhIGxhYmVsIGlzIGFuIGFycmFuZ2VtZW50LCBzbyBpdCBnb2VzIHRocm91Z2ggPExheW91dD4uXG4gIC8vIEEgbGFiZWwgb24gaXRzIG93biBpcyBub3Q6IGl0IGlzIG9uZSBpbmxpbmUgY2hpbGQgdGhhdCB0aGUgYnV0dG9uJ3NcbiAgLy8gYWxpZ24tY29udGVudCBhbmQgdGV4dC1hbGlnbiBjZW50cmUsIHdpdGggbm8gY29udGFpbmVyIGF0IGFsbC5cbiAgY29uc3QgY29udGVudCA9XG4gICAgaWNvbiA9PT0gdW5kZWZpbmVkID8gKFxuICAgICAgbGFiZWxcbiAgICApIDogKFxuICAgICAgPExheW91dCBpbmxpbmUgY29sdW1ucz1cImF1dG8gYXV0b1wiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJpY29uXCJdfT57aWNvbn08L3NwYW4+XG4gICAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibGFiZWxcIl19PntsYWJlbH08L3NwYW4+fVxuICAgICAgPC9MYXlvdXQ+XG4gICAgKTtcblxuICBjb25zdCBkYXRhQWN0aW9uID0gcHJvcHNbXCJkYXRhLWFjdGlvblwiXTtcbiAgY29uc3QgYXJpYUxhYmVsID0gcHJvcHNbXCJhcmlhLWxhYmVsXCJdO1xuICAvLyBFdmVyeSBidXR0b24gc3VyZmFjZXMgYSBob3ZlciB0b29sdGlwOiBhbiBleHBsaWNpdCB0aXRsZSB3aW5zLCBlbHNlIHRoZVxuICAvLyB2aXNpYmxlIHRleHQgbGFiZWwsIGVsc2UgdGhlIGFjY2Vzc2libGUgbmFtZSDigJQgc28gYW4gaWNvbi1vbmx5IGJ1dHRvblxuICAvLyAod2hpY2ggY2FycmllcyBhbiBhcmlhLWxhYmVsKSBzdGlsbCBnZXRzIG9uZS4gUGFzcyB0aXRsZT1cIlwiIHRvIG9wdCBvdXQuXG4gIGNvbnN0IHJlc29sdmVkVGl0bGUgPVxuICAgIHRpdGxlID8/XG4gICAgKHR5cGVvZiBsYWJlbCA9PT0gXCJzdHJpbmdcIiAmJiBsYWJlbC5sZW5ndGggPiAwXG4gICAgICA/IGxhYmVsXG4gICAgICA6IHR5cGVvZiBhcmlhTGFiZWwgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyBhcmlhTGFiZWxcbiAgICAgICAgOiB1bmRlZmluZWQpO1xuICAvLyBDb2xsZWN0IGV2ZXJ5IGBkYXRhLWFjdGlvbi0qYCBleHRyYSB0aGUgY29uc3VtZXIgcGFzc2VkIHNvIHRoZVxuICAvLyBldmVudCBkZWxlZ2F0b3IgY2FuIHJlYWQgdGhlbSBvZmYgdGhlIHJlbmRlcmVkIGVsZW1lbnQuIFdpdGhvdXRcbiAgLy8gdGhpcywgYW55dGhpbmcgYmV5b25kIGBkYXRhLWFjdGlvbmAgaXMgc2lsZW50bHkgZHJvcHBlZCBhbmRcbiAgLy8gaGFuZGxlcnMgZmlyZSB3aXRoIGFuIGVtcHR5IGBjdHguZGF0YWAuXG4gIGNvbnN0IGFjdGlvbkRhdGFBdHRyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm9wcykpIHtcbiAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoXCJkYXRhLWFjdGlvbi1cIikpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gKHByb3BzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGFjdGlvbkRhdGFBdHRyc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKFwiaHJlZlwiIGluIHByb3BzICYmIHByb3BzLmhyZWYpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGFcbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICBjbGFzcz17YnV0dG9uQ2xhc3N9XG4gICAgICAgIHRpdGxlPXtyZXNvbHZlZFRpdGxlfVxuICAgICAgICBocmVmPXtkaXNhYmxlZCA/IHVuZGVmaW5lZCA6IHByb3BzLmhyZWZ9XG4gICAgICAgIHRhcmdldD17XCJ0YXJnZXRcIiBpbiBwcm9wcyA/IHByb3BzLnRhcmdldCA6IHVuZGVmaW5lZH1cbiAgICAgICAgcmVsPXtcInJlbFwiIGluIHByb3BzID8gcHJvcHMucmVsIDogdW5kZWZpbmVkfVxuICAgICAgICBkb3dubG9hZD17XCJkb3dubG9hZFwiIGluIHByb3BzID8gcHJvcHMuZG93bmxvYWQgOiB1bmRlZmluZWR9XG4gICAgICAgIGFyaWEtZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgZGF0YS1wb2xseS1idXR0b249e3RpZXJ9XG4gICAgICAgIGRhdGEtYWN0aW9uPXtkYXRhQWN0aW9ufVxuICAgICAgICB7Li4uYWN0aW9uRGF0YUF0dHJzfVxuICAgICAgPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvYT5cbiAgICApO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWRUeXBlOiBcImJ1dHRvblwiIHwgXCJzdWJtaXRcIiB8IFwicmVzZXRcIiA9XG4gICAgXCJ0eXBlXCIgaW4gcHJvcHMgJiYgcHJvcHMudHlwZSA/IHByb3BzLnR5cGUgOiBcImJ1dHRvblwiO1xuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e2J1dHRvbkNsYXNzfVxuICAgICAgdGl0bGU9e3Jlc29sdmVkVGl0bGV9XG4gICAgICB0eXBlPXtyZXNvbHZlZFR5cGV9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWJ1dHRvbj17dGllcn1cbiAgICAgIGRhdGEtYWN0aW9uPXtkYXRhQWN0aW9ufVxuICAgICAgey4uLmFjdGlvbkRhdGFBdHRyc31cbiAgICA+XG4gICAgICB7Y29udGVudH1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBTdXJmYWNlIOKAlCB0aGUgb25lIHByaW1pdGl2ZSB0aGF0IG93bnMgdmlzdWFsLXN1cmZhY2UgY29uY2VybnMuXG4gKlxuICogV2hlcmUgTGF5b3V0IGdvdmVybnMgc3BhdGlhbCBjb25jZXJucyAoZ3JpZCwgZmxleCwgZ2FwLCBhbGlnbm1lbnQpLFxuICogU3VyZmFjZSBnb3Zlcm5zIHRoZSBjaHJvbWUgdGhhdCBzaXRzIG9uIHRvcCBvZiBsYXlvdXQ6IHBhZGRpbmcsXG4gKiBiYWNrZ3JvdW5kLCBib3JkZXIsIHJhZGl1cywgc2hhZG93LCBhbmQgdGhlIG5hcnJvdyBwb3NpdGlvbmluZyBpZGlvbXNcbiAqIChzdGlja3kgc3RyaXBzLCBmaXhlZCBmbG9hdGluZyBwYW5lcykgdGhhdCBjb25zdW1lcnMgcmVhY2ggZm9yIGlubGluZVxuICogc3R5bGVzIHRvIGV4cHJlc3MuIEV2ZXJ5IHByb3AgbWFwcyB0byBhIGAtLXBvbGx5LSpgIHRva2VuIHRocm91Z2ggYVxuICogbG9jYWwgYC0tcy0qYCBjdXN0b20gcHJvcGVydHksIHNvIGNvbnN1bWVycyBjYW4gcmV0aGVtZSBhbiBpbmRpdmlkdWFsXG4gKiBTdXJmYWNlIGJ5IG92ZXJyaWRpbmcgdGhlIHBvbGx5IHRva2VuIGluIGBzdHlsZWAgd2l0aG91dCB0b3VjaGluZyB0aGVcbiAqIHByaW1pdGl2ZSdzIENTUy5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIENvbXBvbmVudENoaWxkcmVuLCBjcmVhdGVFbGVtZW50LCB0eXBlIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1N1cmZhY2UubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBTdXJmYWNlVmFyaWFudCA9XG4gIHwgXCJwbGFpblwiXG4gIHwgXCJyYWlzZWRcIlxuICB8IFwic3Vua2VuXCJcbiAgfCBcImJ1YmJsZVwiXG4gIHwgXCJjaGlwXCJcbiAgfCBcImNhbGxvdXRcIlxuICB8IFwiZmxvYXRpbmdcIlxuICB8IFwic3RpY2t5LWJhclwiO1xuXG50eXBlIEJhY2tncm91bmQgPSBcInJhaXNlZFwiIHwgXCJzdW5rZW5cIiB8IFwidHJhbnNwYXJlbnRcIiB8IChzdHJpbmcgJiB7fSk7XG50eXBlIFJhZGl1cyA9IFwibm9uZVwiIHwgXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiIHwgXCJmdWxsXCI7XG50eXBlIEJvcmRlciA9IFwibm9uZVwiIHwgXCJkZWZhdWx0XCIgfCBcInN0cm9uZ1wiO1xudHlwZSBCb3JkZXJXaWR0aCA9IFwibm9uZVwiIHwgXCJkZWZhdWx0XCIgfCBcIm1lZGl1bVwiIHwgXCJ0aGlja1wiO1xudHlwZSBCb3JkZXJTaWRlcyA9XG4gIHwgXCJhbGxcIlxuICB8IFwiYmxvY2stc3RhcnRcIlxuICB8IFwiYmxvY2stZW5kXCJcbiAgfCBcImlubGluZS1zdGFydFwiXG4gIHwgXCJpbmxpbmUtZW5kXCJcbiAgfCBcImJsb2NrXCJcbiAgfCBcImlubGluZVwiO1xudHlwZSBTaGFkb3cgPSBcIm5vbmVcIiB8IFwic21cIiB8IFwibWRcIiB8IFwibGdcIjtcbnR5cGUgUG9zaXRpb24gPSBcInN0YXRpY1wiIHwgXCJyZWxhdGl2ZVwiIHwgXCJhYnNvbHV0ZVwiIHwgXCJzdGlja3lcIiB8IFwiZml4ZWRcIjtcbnR5cGUgQm9yZGVyU3R5bGUgPSBcInNvbGlkXCIgfCBcImRhc2hlZFwiO1xudHlwZSBPdmVyZmxvdyA9IFwidmlzaWJsZVwiIHwgXCJoaWRkZW5cIiB8IFwiYXV0b1wiIHwgXCJzY3JvbGxcIjtcbnR5cGUgU2NoZW1lID0gXCJkYXJrXCIgfCBcImxpZ2h0XCI7XG5cbi8qKlxuICogQXJiaXRyYXJ5IGBkYXRhLSpgLCBgYXJpYS0qYCwgYW5kIGB0aXRsZWAgYXR0cmlidXRlcyBmb3J3YXJkZWQgdG8gdGhlXG4gKiByZW5kZXJlZCBlbGVtZW50IHNvIGNvbnN1bWVycyAoTW9kYWwsIFRvYXN0LCBDYXJkLCBldGMuKSBjYW4gY29tcG9zZVxuICogU3VyZmFjZSB3aXRob3V0IGxvc2luZyBET00gaG9va3MsIEFSSUEgc2VtYW50aWNzLCBvciBhIG5hdGl2ZSB0b29sdGlwLlxuICovXG5leHBvcnQgdHlwZSBTdXJmYWNlRGF0YUF0dHJzID0ge1xuICBbZGF0YUF0dHI6IGBkYXRhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBbYXJpYUF0dHI6IGBhcmlhLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuICB0aXRsZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFN1cmZhY2VQcm9wcyA9IFN1cmZhY2VEYXRhQXR0cnMgJiB7XG4gIGNoaWxkcmVuPzogQ29tcG9uZW50Q2hpbGRyZW47XG5cbiAgLyoqIFBvbHltb3JwaGljIGVsZW1lbnQgKGRpdiwgc2VjdGlvbiwgYXJ0aWNsZSwgYXNpZGUsIGhlYWRlciwg4oCmKS4gRGVmYXVsdHMgdG8gJ2RpdicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuXG4gIC8qKiBOYW1lZCBwcmVzZXQgdGhhdCByZXNvbHZlcyB0byBhIGRlZmF1bHQgYnVuZGxlIG9mIHRoZSBwcm9wcyBiZWxvdy4gRXhwbGljaXQgcHJvcHMgb3ZlcnJpZGUuICovXG4gIHZhcmlhbnQ/OiBTdXJmYWNlVmFyaWFudDtcblxuICAvKiogQW55IENTUyBsZW5ndGgsIHR5cGljYWxseSBgdmFyKC0tcG9sbHktc3BhY2UtKilgLiAqL1xuICBwYWRkaW5nPzogc3RyaW5nO1xuXG4gIC8qKiBOYW1lZCB2YWx1ZXMgbWFwIHRvIGB2YXIoLS1wb2xseS1zdXJmYWNlLSopYDsgcmF3IHN0cmluZ3MgcGFzcyB0aHJvdWdoIGZvciBvbmUtb2ZmIGNvbG91cnMuICovXG4gIGJhY2tncm91bmQ/OiBCYWNrZ3JvdW5kO1xuXG4gIHJhZGl1cz86IFJhZGl1cztcbiAgYm9yZGVyPzogQm9yZGVyO1xuICBib3JkZXJXaWR0aD86IEJvcmRlcldpZHRoO1xuICBib3JkZXJTaWRlcz86IEJvcmRlclNpZGVzO1xuICAvKiogQm9yZGVyIGxpbmUgc3R5bGUuIERlZmF1bHQ6IGAnc29saWQnYC4gKi9cbiAgYm9yZGVyU3R5bGU/OiBCb3JkZXJTdHlsZTtcbiAgLyoqIEFueSBDU1MgY29sb3VyLCBvdmVycmlkaW5nIHRoZSB0b2tlbiB0aGUgYGJvcmRlcmAgcHJvcCB3b3VsZCBwaWNrLlxuICAgKiBGb3Igb25lLW9mZiByaW5ncyAoYSBjdXRvdXQgcmluZywgYSBmb2N1cyBoYWxvKSB0aGF0IG5vIHNlbWFudGljXG4gICAqIGJvcmRlciB0b2tlbiBleHByZXNzZXMuIEltcGxpZXMgYSBib3JkZXIgd2lkdGggd2hlbiBub25lIGlzIHNldC4gKi9cbiAgYm9yZGVyQ29sb3I/OiBzdHJpbmc7XG4gIHNoYWRvdz86IFNoYWRvdztcblxuICAvKipcbiAgICogUmV0aW50IHRoZSB0b2tlbiBzdWJ0cmVlIHNvIGRlc2NlbmRhbnQgYFRleHRgL2BCdXR0b25gIHJlYWQgdGhlXG4gICAqIHJpZ2h0IGNvbnRyYXN0IG9uIGEgZGFyayAob3IgZm9yY2VkLWxpZ2h0KSBTdXJmYWNlIOKAlCBlcnJvclxuICAgKiBiYW5uZXJzLCBjYW1lcmEgb3ZlcmxheXMsIGNoYXQgYnViYmxlcy4gU2V0cyBgZGF0YS1wb2xseS10aGVtZWAsXG4gICAqIHNvIGV2ZXJ5IGAtLXBvbGx5LSpgIGNvbG91ciB0b2tlbiBmbGlwcyBmb3IgdGhlIHN1YnRyZWU7IG5vIGlubGluZVxuICAgKiBgLS1wb2xseS10ZXh0YCBvdmVycmlkZSBuZWVkZWQgKHBvbGx5IzEzNSkuXG4gICAqL1xuICBzY2hlbWU/OiBTY2hlbWU7XG5cbiAgLyoqIGAnbm9uZSdgIG1ha2VzIGEgZGVjb3JhdGl2ZSBTdXJmYWNlIChhIHNjYW4tZnJhbWUgb3ZlcmxheSkgaWdub3JlXG4gICAqIHRoZSBwb2ludGVyIHNvIGNsaWNrcyBmYWxsIHRocm91Z2ggdG8gd2hhdCBpcyBiZWhpbmQgaXQuICovXG4gIHBvaW50ZXJFdmVudHM/OiBcIm5vbmVcIiB8IFwiYXV0b1wiO1xuXG4gIC8qKiBkaXNwbGF5OiBpbmxpbmUtYmxvY2sg4oCUIFN1cmZhY2UgZmxvd3MgaW5saW5lIHdpdGggc3Vycm91bmRpbmcgdGV4dC4gKi9cbiAgaW5saW5lPzogYm9vbGVhbjtcbiAgd2lkdGg/OiBzdHJpbmc7XG4gIGhlaWdodD86IHN0cmluZztcbiAgbWluSGVpZ2h0Pzogc3RyaW5nO1xuICAvKiogTWF4aW11bSBibG9jayBzaXplIOKAlCBhIFN1cmZhY2UgdGhhdCBzaHJpbmtzIHRvIGNvbnRlbnQgYnV0IGlzIGNhcHBlZC4gKi9cbiAgbWF4SGVpZ2h0Pzogc3RyaW5nO1xuICBtYXhJbmxpbmVTaXplPzogc3RyaW5nO1xuXG4gIC8qKiBPdmVyZmxvdyBiZWhhdmlvdXIuIGAnYXV0bydgIG1ha2VzIGEgaGVpZ2h0LWNhcHBlZCBTdXJmYWNlIHNjcm9sbC4gKi9cbiAgb3ZlcmZsb3c/OiBPdmVyZmxvdztcblxuICBwb3NpdGlvbj86IFBvc2l0aW9uO1xuICAvKiogQW55IENTUyBpbnNldCB2YWx1ZSAoYCcwJ2AsIGAnYXV0byBhdXRvIDFyZW0gMXJlbSdgLCBgJzFyZW0nYCwg4oCmKS4gKi9cbiAgaW5zZXQ/OiBzdHJpbmc7XG4gIC8qKiBDU1MgdHJhbnNmb3JtIOKAlCBlLmcuIGAndHJhbnNsYXRlWCgtNTAlKSdgIHRvIGNlbnRyZSBhIGZpeGVkIGJhbm5lclxuICAgKiBwYWlyZWQgd2l0aCBgaW5zZXQ6ICfigKYgYXV0byDigKYgNTAlJ2AuIFRoZSBzYW5jdGlvbmVkIHRyYW5zZm9ybSBlc2NhcGUuICovXG4gIHRyYW5zZm9ybT86IHN0cmluZztcbiAgekluZGV4PzogbnVtYmVyO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFBlci1pbnN0YW5jZSBvdmVycmlkZXMuIFRoZSBzdXBwb3J0ZWQgcmV0aW50IHBhdGggaXMgdG8gc2V0IHBvbGx5IHRva2Vuc1xuICAgKiBoZXJlLCBlLmcuIGBzdHlsZT17eyBcIi0tcG9sbHktc3VyZmFjZS1yYWlzZWRcIjogXCIjZmVmM2M3XCIgfX1gLiBTdXJmYWNlXG4gICAqIG1lcmdlcyB0aGlzIGludG8gaXRzIG93biBjb21wdXRlZCBzdHlsZS5cbiAgICovXG4gIHN0eWxlPzogSlNYLkNTU1Byb3BlcnRpZXM7XG5cbiAgaWQ/OiBzdHJpbmc7XG4gIHJvbGU/OiBKU1guQXJpYVJvbGU7XG4gIHRhYkluZGV4PzogbnVtYmVyO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIj86IHN0cmluZztcbiAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI/OiBzdHJpbmc7XG4gIG9uQ2xpY2s/OiBKU1guTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICBvbktleURvd24/OiBKU1guS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xufTtcblxudHlwZSBWYXJpYW50RGVmYXVsdHMgPSBQYXJ0aWFsPFxuICBQaWNrPFxuICAgIFN1cmZhY2VQcm9wcyxcbiAgICB8IFwicGFkZGluZ1wiXG4gICAgfCBcImJhY2tncm91bmRcIlxuICAgIHwgXCJyYWRpdXNcIlxuICAgIHwgXCJib3JkZXJcIlxuICAgIHwgXCJib3JkZXJXaWR0aFwiXG4gICAgfCBcImJvcmRlclNpZGVzXCJcbiAgICB8IFwic2hhZG93XCJcbiAgICB8IFwiaW5saW5lXCJcbiAgICB8IFwid2lkdGhcIlxuICAgIHwgXCJoZWlnaHRcIlxuICAgIHwgXCJtaW5IZWlnaHRcIlxuICAgIHwgXCJtYXhJbmxpbmVTaXplXCJcbiAgICB8IFwicG9zaXRpb25cIlxuICAgIHwgXCJpbnNldFwiXG4gICAgfCBcInpJbmRleFwiXG4gID5cbj47XG5cbmNvbnN0IHZhcmlhbnREZWZhdWx0czogUmVjb3JkPFN1cmZhY2VWYXJpYW50LCBWYXJpYW50RGVmYXVsdHM+ID0ge1xuICBwbGFpbjoge30sXG4gIHJhaXNlZDoge1xuICAgIGJhY2tncm91bmQ6IFwicmFpc2VkXCIsXG4gICAgcmFkaXVzOiBcIm1kXCIsXG4gICAgc2hhZG93OiBcIm1kXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgfSxcbiAgc3Vua2VuOiB7XG4gICAgYmFja2dyb3VuZDogXCJzdW5rZW5cIixcbiAgICByYWRpdXM6IFwibWRcIixcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICB9LFxuICBidWJibGU6IHtcbiAgICBiYWNrZ3JvdW5kOiBcInZhcigtLXBvbGx5LXN1cmZhY2UtYnViYmxlKVwiLFxuICAgIHJhZGl1czogXCJtZFwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gICAgcGFkZGluZzogXCJ2YXIoLS1wb2xseS1zcGFjZS1zbSkgdmFyKC0tcG9sbHktc3BhY2UtbWQpXCIsXG4gIH0sXG4gIGNoaXA6IHtcbiAgICBpbmxpbmU6IHRydWUsXG4gICAgcmFkaXVzOiBcImZ1bGxcIixcbiAgICBwYWRkaW5nOiBcInZhcigtLXBvbGx5LXNwYWNlLXhzKSB2YXIoLS1wb2xseS1zcGFjZS1zbSlcIixcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICB9LFxuICBjYWxsb3V0OiB7XG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgICByYWRpdXM6IFwic21cIixcbiAgICBwYWRkaW5nOiBcInZhcigtLXBvbGx5LXNwYWNlLXNtKSB2YXIoLS1wb2xseS1zcGFjZS1tZClcIixcbiAgfSxcbiAgZmxvYXRpbmc6IHtcbiAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgIHJhZGl1czogXCJsZ1wiLFxuICAgIHNoYWRvdzogXCJsZ1wiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gICAgYmFja2dyb3VuZDogXCJyYWlzZWRcIixcbiAgICB6SW5kZXg6IDk5OTksXG4gIH0sXG4gIFwic3RpY2t5LWJhclwiOiB7XG4gICAgcG9zaXRpb246IFwic3RpY2t5XCIsXG4gICAgaW5zZXQ6IFwiMCAwIGF1dG8gMFwiLFxuICAgIGJvcmRlclNpZGVzOiBcImJsb2NrLWVuZFwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gIH0sXG59O1xuXG5mdW5jdGlvbiBiZ1ZhbHVlKGI6IEJhY2tncm91bmQpOiBzdHJpbmcge1xuICBpZiAoYiA9PT0gXCJyYWlzZWRcIikgcmV0dXJuIFwidmFyKC0tcG9sbHktc3VyZmFjZS1yYWlzZWQpXCI7XG4gIGlmIChiID09PSBcInN1bmtlblwiKSByZXR1cm4gXCJ2YXIoLS1wb2xseS1zdXJmYWNlLXN1bmtlbilcIjtcbiAgaWYgKGIgPT09IFwidHJhbnNwYXJlbnRcIikgcmV0dXJuIFwidHJhbnNwYXJlbnRcIjtcbiAgcmV0dXJuIGI7XG59XG5cbmZ1bmN0aW9uIHJhZGl1c1ZhbHVlKHI6IFJhZGl1cyk6IHN0cmluZyB7XG4gIGlmIChyID09PSBcIm5vbmVcIikgcmV0dXJuIFwiMFwiO1xuICByZXR1cm4gYHZhcigtLXBvbGx5LXJhZGl1cy0ke3J9KWA7XG59XG5cbmZ1bmN0aW9uIGJvcmRlckNvbG9yVmFsdWUoYjogQm9yZGVyKTogc3RyaW5nIHtcbiAgaWYgKGIgPT09IFwibm9uZVwiKSByZXR1cm4gXCJ0cmFuc3BhcmVudFwiO1xuICBpZiAoYiA9PT0gXCJzdHJvbmdcIikgcmV0dXJuIFwidmFyKC0tcG9sbHktYm9yZGVyLXN0cm9uZylcIjtcbiAgcmV0dXJuIFwidmFyKC0tcG9sbHktYm9yZGVyKVwiO1xufVxuXG5mdW5jdGlvbiBib3JkZXJXaWR0aFZhbHVlKHc6IEJvcmRlcldpZHRoKTogc3RyaW5nIHtcbiAgaWYgKHcgPT09IFwibm9uZVwiKSByZXR1cm4gXCIwXCI7XG4gIHJldHVybiBgdmFyKC0tcG9sbHktYm9yZGVyLXdpZHRoLSR7d30pYDtcbn1cblxuZnVuY3Rpb24gc2hhZG93VmFsdWUoczogU2hhZG93KTogc3RyaW5nIHtcbiAgaWYgKHMgPT09IFwibm9uZVwiKSByZXR1cm4gXCJub25lXCI7XG4gIHJldHVybiBgdmFyKC0tcG9sbHktc2hhZG93LSR7c30pYDtcbn1cblxuZnVuY3Rpb24gYm9yZGVyU2lkZXNDbGFzcyhzaWRlczogQm9yZGVyU2lkZXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoc2lkZXMgPT09IFwiYWxsXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChzaWRlcyA9PT0gXCJibG9jay1zdGFydFwiKSByZXR1cm4gY2xhc3Nlc1tcInNpZGVzLWJsb2NrLXN0YXJ0XCJdO1xuICBpZiAoc2lkZXMgPT09IFwiYmxvY2stZW5kXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtYmxvY2stZW5kXCJdO1xuICBpZiAoc2lkZXMgPT09IFwiaW5saW5lLXN0YXJ0XCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtaW5saW5lLXN0YXJ0XCJdO1xuICBpZiAoc2lkZXMgPT09IFwiaW5saW5lLWVuZFwiKSByZXR1cm4gY2xhc3Nlc1tcInNpZGVzLWlubGluZS1lbmRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJibG9ja1wiKSByZXR1cm4gY2xhc3Nlc1tcInNpZGVzLWJsb2NrXCJdO1xuICBpZiAoc2lkZXMgPT09IFwiaW5saW5lXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtaW5saW5lXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eTogcHJvcC10by1jdXN0b20tcHJvcGVydHkgbWFwcGluZzsgZmxhdCBhbmQgbGluZWFyLCBtaXJyb3JzIExheW91dC50c3guXG5leHBvcnQgZnVuY3Rpb24gU3VyZmFjZShwcm9wczogU3VyZmFjZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHZhcmlhbnQgPSBcInBsYWluXCIgfSA9IHByb3BzO1xuICBjb25zdCB2ID0gdmFyaWFudERlZmF1bHRzW3ZhcmlhbnRdO1xuXG4gIGNvbnN0IGFzID0gcHJvcHMuYXMgPz8gXCJkaXZcIjtcbiAgY29uc3QgcGFkZGluZyA9IHByb3BzLnBhZGRpbmcgPz8gdi5wYWRkaW5nO1xuICBjb25zdCBiYWNrZ3JvdW5kID0gcHJvcHMuYmFja2dyb3VuZCA/PyB2LmJhY2tncm91bmQ7XG4gIGNvbnN0IHJhZGl1cyA9IHByb3BzLnJhZGl1cyA/PyB2LnJhZGl1cztcbiAgY29uc3QgYm9yZGVyID0gcHJvcHMuYm9yZGVyID8/IHYuYm9yZGVyO1xuICBjb25zdCBib3JkZXJTaWRlcyA9IHByb3BzLmJvcmRlclNpZGVzID8/IHYuYm9yZGVyU2lkZXMgPz8gXCJhbGxcIjtcbiAgY29uc3Qgc2hhZG93ID0gcHJvcHMuc2hhZG93ID8/IHYuc2hhZG93O1xuICBjb25zdCBpbmxpbmUgPSBwcm9wcy5pbmxpbmUgPz8gdi5pbmxpbmU7XG4gIGNvbnN0IHdpZHRoID0gcHJvcHMud2lkdGggPz8gdi53aWR0aDtcbiAgY29uc3QgaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0ID8/IHYuaGVpZ2h0O1xuICBjb25zdCBtaW5IZWlnaHQgPSBwcm9wcy5taW5IZWlnaHQgPz8gdi5taW5IZWlnaHQ7XG4gIGNvbnN0IG1heElubGluZVNpemUgPSBwcm9wcy5tYXhJbmxpbmVTaXplID8/IHYubWF4SW5saW5lU2l6ZTtcbiAgY29uc3QgcG9zaXRpb24gPSBwcm9wcy5wb3NpdGlvbiA/PyB2LnBvc2l0aW9uO1xuICBjb25zdCBpbnNldCA9IHByb3BzLmluc2V0ID8/IHYuaW5zZXQ7XG4gIGNvbnN0IHpJbmRleCA9IHByb3BzLnpJbmRleCA/PyB2LnpJbmRleDtcbiAgLy8gcG9sbHkjMTI2LyMxMzU6IG5vIHZhcmlhbnQgc2V0cyB0aGVzZSwgc28gdGhleSByZXNvbHZlIHN0cmFpZ2h0IGZyb20gcHJvcHMuXG4gIGNvbnN0IHsgbWF4SGVpZ2h0LCBvdmVyZmxvdywgYm9yZGVyU3R5bGUsIHRyYW5zZm9ybSwgYm9yZGVyQ29sb3IsIHNjaGVtZSwgcG9pbnRlckV2ZW50cyB9ID0gcHJvcHM7XG5cbiAgLy8gQSBib3JkZXJlZCBzdXJmYWNlIG5lZWRzIGEgd2lkdGguIElmIHRoZSBjb25zdW1lciBhc2tlZCBmb3IgYSBib3JkZXIg4oCUXG4gIC8vIGJ5IG5hbWUgb3IgYnkgcmF3IGNvbG91ciDigJQgYnV0IGRpZG4ndCBwaWNrIGEgd2lkdGgsIGluZmVyICdkZWZhdWx0J1xuICAvLyBzbyB0aGUgYm9yZGVyIHJlbmRlcnMuXG4gIGNvbnN0IHdhbnRzQm9yZGVyID0gKGJvcmRlciAhPT0gdW5kZWZpbmVkICYmIGJvcmRlciAhPT0gXCJub25lXCIpIHx8IGJvcmRlckNvbG9yICE9PSB1bmRlZmluZWQ7XG4gIGNvbnN0IGJvcmRlcldpZHRoID0gcHJvcHMuYm9yZGVyV2lkdGggPz8gdi5ib3JkZXJXaWR0aCA/PyAod2FudHNCb3JkZXIgPyBcImRlZmF1bHRcIiA6IHVuZGVmaW5lZCk7XG5cbiAgY29uc3Qgc3R5bGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgaWYgKHBhZGRpbmcpIHN0eWxlW1wiLS1zLXBcIl0gPSBwYWRkaW5nO1xuICBpZiAoYmFja2dyb3VuZCkgc3R5bGVbXCItLXMtYmdcIl0gPSBiZ1ZhbHVlKGJhY2tncm91bmQpO1xuICBpZiAocmFkaXVzKSBzdHlsZVtcIi0tcy1yYWRpdXNcIl0gPSByYWRpdXNWYWx1ZShyYWRpdXMpO1xuICBpZiAoYm9yZGVyKSBzdHlsZVtcIi0tcy1ib3JkZXItY29sb3JcIl0gPSBib3JkZXJDb2xvclZhbHVlKGJvcmRlcik7XG4gIC8vIEEgcmF3IGJvcmRlckNvbG9yIHdpbnMgb3ZlciB3aGF0ZXZlciB0b2tlbiBgYm9yZGVyYCByZXNvbHZlZCB0by5cbiAgaWYgKGJvcmRlckNvbG9yKSBzdHlsZVtcIi0tcy1ib3JkZXItY29sb3JcIl0gPSBib3JkZXJDb2xvcjtcbiAgaWYgKGJvcmRlcldpZHRoKSBzdHlsZVtcIi0tcy1ib3JkZXItd2lkdGhcIl0gPSBib3JkZXJXaWR0aFZhbHVlKGJvcmRlcldpZHRoKTtcbiAgaWYgKHNoYWRvdykgc3R5bGVbXCItLXMtc2hhZG93XCJdID0gc2hhZG93VmFsdWUoc2hhZG93KTtcbiAgaWYgKGJvcmRlclN0eWxlKSBzdHlsZVtcIi0tcy1ib3JkZXItc3R5bGVcIl0gPSBib3JkZXJTdHlsZTtcbiAgaWYgKHBvaW50ZXJFdmVudHMpIHN0eWxlW1wiLS1zLXBlXCJdID0gcG9pbnRlckV2ZW50cztcbiAgaWYgKHdpZHRoKSBzdHlsZVtcIi0tcy13XCJdID0gd2lkdGg7XG4gIGlmIChoZWlnaHQpIHN0eWxlW1wiLS1zLWhcIl0gPSBoZWlnaHQ7XG4gIGlmIChtaW5IZWlnaHQpIHN0eWxlW1wiLS1zLW1oXCJdID0gbWluSGVpZ2h0O1xuICBpZiAobWF4SGVpZ2h0KSBzdHlsZVtcIi0tcy1tYXhoXCJdID0gbWF4SGVpZ2h0O1xuICBpZiAobWF4SW5saW5lU2l6ZSkgc3R5bGVbXCItLXMtbWlzXCJdID0gbWF4SW5saW5lU2l6ZTtcbiAgaWYgKG92ZXJmbG93KSBzdHlsZVtcIi0tcy1vdmVyZmxvd1wiXSA9IG92ZXJmbG93O1xuICBpZiAocG9zaXRpb24pIHN0eWxlW1wiLS1zLXBvc2l0aW9uXCJdID0gcG9zaXRpb247XG4gIGlmIChpbnNldCkgc3R5bGVbXCItLXMtaW5zZXRcIl0gPSBpbnNldDtcbiAgaWYgKHRyYW5zZm9ybSkgc3R5bGVbXCItLXMtdHJhbnNmb3JtXCJdID0gdHJhbnNmb3JtO1xuICBpZiAoekluZGV4ICE9PSB1bmRlZmluZWQpIHN0eWxlW1wiLS1zLXpcIl0gPSBTdHJpbmcoekluZGV4KTtcblxuICBpZiAocHJvcHMuc3R5bGUpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0eWxlLCBwcm9wcy5zdHlsZSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pO1xuICB9XG5cbiAgY29uc3QgcGFydHM6IChzdHJpbmcgfCB1bmRlZmluZWQpW10gPSBbY2xhc3Nlc1tcInN1cmZhY2VcIl1dO1xuICBpZiAoaW5saW5lKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJpbmxpbmVcIl0pO1xuICBwYXJ0cy5wdXNoKGJvcmRlclNpZGVzQ2xhc3MoYm9yZGVyU2lkZXMpKTtcbiAgaWYgKHByb3BzLmNsYXNzTmFtZSkgcGFydHMucHVzaChwcm9wcy5jbGFzc05hbWUpO1xuICBjb25zdCBjbGFzc05hbWUgPSBwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG5cbiAgY29uc3QgcGFzc3Rocm91Z2g6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+ID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BzKSkge1xuICAgIGNvbnN0IGlzRGF0YSA9IGtleS5zdGFydHNXaXRoKFwiZGF0YS1cIik7XG4gICAgY29uc3QgaXNBcmlhID0ga2V5LnN0YXJ0c1dpdGgoXCJhcmlhLVwiKTtcbiAgICBpZiAoIWlzRGF0YSAmJiAhaXNBcmlhICYmIGtleSAhPT0gXCJ0aXRsZVwiKSBjb250aW51ZTtcbiAgICBpZiAoa2V5ID09PSBcImRhdGEtcG9sbHktc3VyZmFjZVwiKSBjb250aW51ZTtcbiAgICBpZiAoa2V5ID09PSBcImFyaWEtbGFiZWxcIiB8fCBrZXkgPT09IFwiYXJpYS1sYWJlbGxlZGJ5XCIgfHwga2V5ID09PSBcImFyaWEtZGVzY3JpYmVkYnlcIikgY29udGludWU7XG4gICAgY29uc3QgdmFsdWUgPSAocHJvcHMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcGFzc3Rocm91Z2hba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgIGFzLFxuICAgIHtcbiAgICAgIGlkOiBwcm9wcy5pZCxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIHN0eWxlLFxuICAgICAgb25DbGljazogcHJvcHMub25DbGljayxcbiAgICAgIG9uS2V5RG93bjogcHJvcHMub25LZXlEb3duLFxuICAgICAgcm9sZTogcHJvcHMucm9sZSxcbiAgICAgIHRhYkluZGV4OiBwcm9wcy50YWJJbmRleCxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBwcm9wc1tcImFyaWEtbGFiZWxcIl0sXG4gICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBwcm9wc1tcImFyaWEtbGFiZWxsZWRieVwiXSxcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBwcm9wc1tcImFyaWEtZGVzY3JpYmVkYnlcIl0sXG4gICAgICBcImRhdGEtcG9sbHktc3VyZmFjZVwiOiB2YXJpYW50LFxuICAgICAgXCJkYXRhLXBvbGx5LXRoZW1lXCI6IHNjaGVtZSxcbiAgICAgIC4uLnBhc3N0aHJvdWdoLFxuICAgIH0sXG4gICAgcHJvcHMuY2hpbGRyZW5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDYXJkIOKAlCBjb21wb3VuZCBwcmltaXRpdmUgdGhhdCBjb21wb3NlcyBTdXJmYWNlIGZvciBlYWNoIG5hbWVkIHNsb3QuXG4gKlxuICogQ2FyZCBpcyB0aGUgZmlyc3QgY29tcG91bmQgdGhhdCBpcyBwdXJlbHkgYSByZS1za2luIG9mIFN1cmZhY2Ug4oCUIG5vXG4gKiBiZWhhdmlvdXJhbCBsYXllci4gSGVhZGVyLCBCb2R5LCBhbmQgRm9vdGVyIGFyZSBlYWNoIFN1cmZhY2VzIHdpdGhcbiAqIHNlbnNpYmxlIGRlZmF1bHRzOyBSb290IGlzIGEgcmFpc2VkIFN1cmZhY2UgdGhhdCB3cmFwcyB0aGVtLiBFdmVyeVxuICogc2xvdCBhY2NlcHRzIHRoZSBmdWxsIFN1cmZhY2VQcm9wcywgc28gY29uc3VtZXJzIHJldGludCwgb3ZlcnJpZGUsIG9yXG4gKiByZWFjaCBmb3IgcmF3IHBhZGRpbmcgd2l0aG91dCByZWFjaGluZyBwYXN0IHRoZSBwcmltaXRpdmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBTdXJmYWNlLCB0eXBlIFN1cmZhY2VQcm9wcyB9IGZyb20gXCIuL1N1cmZhY2UudHN4XCI7XG5cbmV4cG9ydCB0eXBlIENhcmRQcm9wcyA9IFN1cmZhY2VQcm9wcztcbmV4cG9ydCB0eXBlIENhcmRTbG90UHJvcHMgPSBTdXJmYWNlUHJvcHM7XG5cbmZ1bmN0aW9uIFJvb3QocHJvcHM6IENhcmRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyB2YXJpYW50ID0gXCJyYWlzZWRcIiwgcmFkaXVzID0gXCJtZFwiLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZSB2YXJpYW50PXt2YXJpYW50fSByYWRpdXM9e3JhZGl1c30gZGF0YS1wb2xseS1jYXJkIHsuLi5yZXN0fT5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEhlYWRlcihwcm9wczogQ2FyZFNsb3RQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIHBhZGRpbmcgPSBcInZhcigtLXBvbGx5LXNwYWNlLW1kKSB2YXIoLS1wb2xseS1zcGFjZS1sZylcIixcbiAgICBib3JkZXIgPSBcImRlZmF1bHRcIixcbiAgICBib3JkZXJTaWRlcyA9IFwiYmxvY2stZW5kXCIsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIHBhZGRpbmc9e3BhZGRpbmd9XG4gICAgICBib3JkZXI9e2JvcmRlcn1cbiAgICAgIGJvcmRlclNpZGVzPXtib3JkZXJTaWRlc31cbiAgICAgIGRhdGEtcG9sbHktY2FyZC1oZWFkZXJcbiAgICAgIHsuLi5yZXN0fVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEJvZHkocHJvcHM6IENhcmRTbG90UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgcGFkZGluZyA9IFwidmFyKC0tcG9sbHktc3BhY2UtbGcpXCIsIC4uLnJlc3QgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlIHBhZGRpbmc9e3BhZGRpbmd9IGRhdGEtcG9sbHktY2FyZC1ib2R5IHsuLi5yZXN0fT5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEZvb3Rlcihwcm9wczogQ2FyZFNsb3RQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIHBhZGRpbmcgPSBcInZhcigtLXBvbGx5LXNwYWNlLW1kKSB2YXIoLS1wb2xseS1zcGFjZS1sZylcIixcbiAgICBib3JkZXIgPSBcImRlZmF1bHRcIixcbiAgICBib3JkZXJTaWRlcyA9IFwiYmxvY2stc3RhcnRcIixcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgcGFkZGluZz17cGFkZGluZ31cbiAgICAgIGJvcmRlcj17Ym9yZGVyfVxuICAgICAgYm9yZGVyU2lkZXM9e2JvcmRlclNpZGVzfVxuICAgICAgZGF0YS1wb2xseS1jYXJkLWZvb3RlclxuICAgICAgey4uLnJlc3R9XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IENhcmQgPSB7IFJvb3QsIEhlYWRlciwgQm9keSwgRm9vdGVyIH07XG4iLAogICAgIi8qKlxuICogQ2hlY2tib3gg4oCUIG5hdGl2ZSBjaGVja2JveCB3cmFwcGVkIGluIGEgbGFiZWwuXG4gKlxuICogUGFzcyBhIHBsYWluIGJvb2xlYW4gZm9yIGNvbnRyb2xsZWQgdXNlIChjYWxsZXIgbGlzdGVucyBlbHNld2hlcmUpLFxuICogb3IgYSBTaWduYWw8Ym9vbGVhbj4gdG8gaGF2ZSB0aGUgcHJpbWl0aXZlIGJpbmQgaXRzIG93biBjaGFuZ2VcbiAqIGxpc3RlbmVyIGFuZCBtdXRhdGUgdGhlIHNpZ25hbCBkaXJlY3RseS4gVGhlIGxhYmVsIHdyYXBzIHRoZSBpbnB1dFxuICogc28gY2xpY2tzIGFueXdoZXJlIGluIHRoZSB0YXJnZXQgYXJlYSB0b2dnbGUgaXQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0NoZWNrYm94Lm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQ2hlY2tib3hQcm9wcyA9IHtcbiAgY2hlY2tlZD86IGJvb2xlYW4gfCBTaWduYWw8Ym9vbGVhbj47XG4gIGRlZmF1bHRDaGVja2VkPzogYm9vbGVhbjtcbiAgbmFtZT86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBsYWJlbD86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIGlzU2lnbmFsKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU2lnbmFsPGJvb2xlYW4+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiBcInZhbHVlXCIgaW4gdmFsdWUgJiYgXCJwZWVrXCIgaW4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDaGVja2JveChwcm9wczogQ2hlY2tib3hQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGVja2VkLCBkZWZhdWx0Q2hlY2tlZCwgbmFtZSwgZGlzYWJsZWQgPSBmYWxzZSwgbGFiZWwsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChlOiBKU1guVGFyZ2V0ZWRFdmVudDxIVE1MSW5wdXRFbGVtZW50Pik6IHZvaWQgPT4ge1xuICAgIGlmIChpc1NpZ25hbChjaGVja2VkKSkge1xuICAgICAgY2hlY2tlZC52YWx1ZSA9IGUuY3VycmVudFRhcmdldC5jaGVja2VkO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjaGVja2VkVmFsdWUgPSBpc1NpZ25hbChjaGVja2VkKSA/IGNoZWNrZWQudmFsdWUgOiBjaGVja2VkO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJjaGVja2JveFwiXV07XG4gIGlmIChkaXNhYmxlZCkgcGFydHMucHVzaChjbGFzc2VzW1wiZGlzYWJsZWRcIl0gPz8gXCJcIik7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gKFxuICAgIDxMYXlvdXRcbiAgICAgIGFzPVwibGFiZWxcIlxuICAgICAgaW5saW5lXG4gICAgICBjb2x1bW5zPVwiYXV0byBhdXRvXCJcbiAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgIGNsYXNzTmFtZT17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1jaGVja2JveFxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD17aWR9XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiaW5wdXRcIl19XG4gICAgICAgIGNoZWNrZWQ9e2NoZWNrZWRWYWx1ZX1cbiAgICAgICAgZGVmYXVsdENoZWNrZWQ9e2RlZmF1bHRDaGVja2VkfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAvPlxuICAgICAge2xhYmVsICE9PSB1bmRlZmluZWQgJiYgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJsYWJlbFwiXX0+e2xhYmVsfTwvc3Bhbj59XG4gICAgPC9MYXlvdXQ+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogQ2x1c3RlciDigJQgd3JhcHBpbmcgcm93IG9mIHZhcmlhYmxlLXdpZHRoIGl0ZW1zLlxuICpcbiAqIFRoZSBmbGV4LXdyYXAgY291bnRlcnBhcnQgdG8gPExheW91dD4uIFdoZXJlIExheW91dCBvd25zIENTUyBncmlkXG4gKiB0cmFja3MsIENsdXN0ZXIgb3ducyBhIHJvdyBvZiBpdGVtcyB0aGF0IGRpZmZlciBpbiB3aWR0aCBhbmQgbXVzdFxuICogcmVmbG93IGFzIHNwYWNlIHJ1bnMgb3V0IOKAlCBmaWx0ZXIgY2hpcHMsIHRhZyBhbmQgYmFkZ2UgbGlzdHMsIGdyb3Vwc1xuICogb2Ygc21hbGwgYnV0dG9ucy4gSXRlbXMga2VlcCBldmVuIHNwYWNpbmcgb24gYm90aCBheGVzIHZpYSBgZ2FwYDsgdGhlXG4gKiByb3cgd3JhcHMgYXV0b21hdGljYWxseSBhdCBuYXJyb3cgd2lkdGhzLiBMaWtlIExheW91dCwgcHJvcHMgbWFwIHRvXG4gKiBDU1MgY3VzdG9tIHByb3BlcnRpZXMgc28gY29uc3VtZXJzIGNhbiBvdmVycmlkZSBhbnkgb2YgdGhlbSBpbiBhXG4gKiBtZWRpYSBxdWVyeSB3aXRob3V0IHRvdWNoaW5nIHNwZWNpZmljaXR5LlxuICpcbiAqIFRoaXMgaXMgdGhlIHNlY29uZCAoYW5kIGZpbmFsKSBsYXlvdXQgcHJpbWl0aXZlOiBhIGNvbnN1bWVyIG5ldmVyXG4gKiB3cml0ZXMgYGRpc3BsYXk6IGZsZXhgIG9yIGBkaXNwbGF5OiBncmlkYCB0aGVtc2VsdmVzIOKAlCBncmlkIGdvZXNcbiAqIHRocm91Z2ggPExheW91dD4sIGEgd3JhcHBpbmcgY2x1c3RlciBnb2VzIHRocm91Z2ggPENsdXN0ZXI+LlxuICovXG5cbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ2x1c3Rlci5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5cbmV4cG9ydCB0eXBlIENsdXN0ZXJQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoZGl2LCBuYXYsIHVsLCDigKYpLiBEZWZhdWx0cyB0byAnZGl2Jy4gKi9cbiAgYXM/OiBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG5cbiAgLyoqIFNwYWNlIGJldHdlZW4gaXRlbXMsIGJvdGggYXhlcy4gVHlwaWNhbGx5IGEgYC0tcG9sbHktc3BhY2UtKmAgdG9rZW4uICovXG4gIGdhcD86IHN0cmluZztcbiAgcGFkZGluZz86IHN0cmluZztcblxuICAvKiogTWFpbi1heGlzIGRpc3RyaWJ1dGlvbiDigJQgbWFwcyB0byBqdXN0aWZ5LWNvbnRlbnQuIERlZmF1bHQ6IHN0YXJ0LiAqL1xuICBqdXN0aWZ5Pzogc3RyaW5nO1xuICAvKiogQ3Jvc3MtYXhpcyBhbGlnbm1lbnQgd2l0aGluIGEgd3JhcHBlZCByb3cg4oCUIG1hcHMgdG8gYWxpZ24taXRlbXMuIERlZmF1bHQ6IGNlbnRlci4gKi9cbiAgYWxpZ24/OiBzdHJpbmc7XG5cbiAgLyoqIFJlbmRlciBhcyBpbmxpbmUtZmxleCBzbyB0aGUgY2x1c3RlciBmbG93cyBpbmxpbmUgd2l0aCBzdXJyb3VuZGluZyB0ZXh0LiAqL1xuICBpbmxpbmU/OiBib29sZWFuO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIHJvbGU/OiBKU1guQXJpYVJvbGU7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIENsdXN0ZXIocHJvcHM6IENsdXN0ZXJQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgYXMgPSBcImRpdlwiLCBnYXAsIHBhZGRpbmcsIGp1c3RpZnksIGFsaWduLCBpbmxpbmUsIGNsYXNzTmFtZSwgaWQsIHJvbGUgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGlmIChnYXApIHN0eWxlW1wiLS1jLWdhcFwiXSA9IGdhcDtcbiAgaWYgKHBhZGRpbmcpIHN0eWxlW1wiLS1jLXBcIl0gPSBwYWRkaW5nO1xuICBpZiAoanVzdGlmeSkgc3R5bGVbXCItLWMtamNcIl0gPSBqdXN0aWZ5O1xuICBpZiAoYWxpZ24pIHN0eWxlW1wiLS1jLWFpXCJdID0gYWxpZ247XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImNsdXN0ZXJcIl1dO1xuICBpZiAoaW5saW5lKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJpbmxpbmVcIl0pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKiBmaXJzdDsgdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzIHdpbi5cbiAgICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgICBpZCxcbiAgICAgIGNsYXNzOiBwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIiksXG4gICAgICBzdHlsZSxcbiAgICAgIHJvbGUsXG4gICAgICBcImFyaWEtbGFiZWxcIjogcHJvcHNbXCJhcmlhLWxhYmVsXCJdLFxuICAgICAgXCJkYXRhLXBvbGx5LXVpXCI6IHRydWUsXG4gICAgICBcImRhdGEtcG9sbHktY2x1c3RlclwiOiB0cnVlLFxuICAgIH0sXG4gICAgY2hpbGRyZW5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDb2RlIOKAlCBpbmxpbmUgbW9ub3NwYWNlIGNvZGUgc3Bhbi5cbiAqXG4gKiBSZW5kZXJzIGEgYDxjb2RlPmAgd2l0aCB0aGUgYC0tcG9sbHktZm9udC1tb25vYCBzdGFjaywgYSBmYWludCBzdW5rZW5cbiAqIHRpbnQsIGFuZCBzbnVnIHBhZGRpbmcgc28gYSBjb25zdW1lciBuZXZlciBoYW5kLXJvbGxzIGEgYC5tb25vYCBjbGFzc1xuICogZm9yIGlubGluZSBjb2RlLCBpZGVudGlmaWVycywgb3Iga2V5Ym9hcmQgaGludHMuIEZvciBtdWx0aS1saW5lIGNvZGVcbiAqIGJsb2NrcywgcGFzcyBgYmxvY2tgLCB3aGljaCBzd2l0Y2hlcyB0byBhIHByZS13cmFwcGVkIDxwcmU+PGNvZGU+LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0NvZGUubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuXG5leHBvcnQgdHlwZSBDb2RlUHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIC8qKiBSZW5kZXIgYXMgYSBibG9jayAoPHByZT48Y29kZT4pIGluc3RlYWQgb2YgYW4gaW5saW5lIHNwYW4uICovXG4gIGJsb2NrPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBDb2RlKHByb3BzOiBDb2RlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIGJsb2NrLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIHNwcmVhZCBmaXJzdDsgdGhlIGV4cGxpY2l0IGF0dHJpYnV0ZXMgYWZ0ZXJcbiAgLy8gd2luIG9uIGFueSBjb2xsaXNpb24uXG4gIGNvbnN0IHBhc3N0aHJvdWdoID0gY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKTtcblxuICBpZiAoYmxvY2spIHtcbiAgICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiYmxvY2tcIl1dO1xuICAgIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgICByZXR1cm4gKFxuICAgICAgPHByZVxuICAgICAgICB7Li4ucGFzc3Rocm91Z2h9XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LWNvZGU9XCJibG9ja1wiXG4gICAgICA+XG4gICAgICAgIDxjb2RlPntjaGlsZHJlbn08L2NvZGU+XG4gICAgICA8L3ByZT5cbiAgICApO1xuICB9XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImNvZGVcIl1dO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG4gIHJldHVybiAoXG4gICAgPGNvZGVcbiAgICAgIHsuLi5wYXNzdGhyb3VnaH1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWNvZGU9XCJpbmxpbmVcIlxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2NvZGU+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogQ29sbGFwc2libGUg4oCUIG5hdGl2ZSA8ZGV0YWlscz4vPHN1bW1hcnk+IHdyYXBwZXIuXG4gKlxuICogVXNlcyB0aGUgYnJvd3NlcidzIGJ1aWx0LWluIGRpc2Nsb3N1cmUgc2VtYW50aWNzIHNvIGtleWJvYXJkIGFuZFxuICogc2NyZWVuLXJlYWRlciBiZWhhdmlvdXIgY29tZSBmcmVlLiBUaGUgYXJyb3cgaXMgYSByZWFsIGVsZW1lbnQsIG5vdCBhXG4gKiA6OmJlZm9yZTogdGhlIHN1bW1hcnkgaXMgYSB0d28tdHJhY2sgPExheW91dD4sIGFuZCBubyBsYXlvdXQgY29udGFpbmVyIGNhblxuICogYXJyYW5nZSBhIHBzZXVkby1lbGVtZW50LiBJdCByb3RhdGVzIG9uIG9wZW4uXG4gKiBDb2xvcnMsIHNwYWNpbmcsIGFuZCBtb3Rpb24gY29tZSBmcm9tIHRva2VuczsgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gXG4gKiB6ZXJvZXMgdGhlIHJvdGF0aW9uIHZpYSB0aGUgbW90aW9uIHRva2VuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0NvbGxhcHNpYmxlLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQ29sbGFwc2libGVQcm9wcyA9IHtcbiAgLyoqIERpc2Nsb3N1cmUgaGVhZGVyLiBBIHN0cmluZyBmb3IgdGhlIGNvbW1vbiBjYXNlLCBvciBhbnkgbm9kZSDigJRcbiAgICogZS5nLiBhIG11dGVkLCBzbWFsbCA8VGV4dD4g4oCUIHdoZW4gdGhlIGhlYWRlciBuZWVkcyBzdHlsaW5nLiAqL1xuICBzdW1tYXJ5OiBDb21wb25lbnRDaGlsZHJlbjtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBkZWZhdWx0T3Blbj86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG4vKiogSW5wdXQgdHlwZXMgd2hvc2UgU3BhY2UvRW50ZXIgaXMgYW4gYWN0aXZhdGlvbiwgbm90IHRleHQgZW50cnkg4oCUIHRoZXNlXG4gKiBrZWVwIHRoZWlyIG93biBrZXlib2FyZCBiZWhhdmlvdXIgYW5kIG11c3Qgbm90IGJlIGd1YXJkZWQuICovXG5jb25zdCBOT05fVEVYVF9JTlBVVF9UWVBFUyA9IG5ldyBTZXQoW1xuICBcImNoZWNrYm94XCIsXG4gIFwicmFkaW9cIixcbiAgXCJidXR0b25cIixcbiAgXCJzdWJtaXRcIixcbiAgXCJyZXNldFwiLFxuICBcImZpbGVcIixcbiAgXCJpbWFnZVwiLFxuICBcInJhbmdlXCIsXG4gIFwiY29sb3JcIixcbl0pO1xuXG4vKiogSXMgdGhlIGV2ZW50IHRhcmdldCBhIGZpZWxkIHdoZXJlIFNwYWNlL0VudGVyIGluc2VydHMvZWRpdHMgdGV4dD8gKi9cbmZ1bmN0aW9uIGlzVGV4dEVudHJ5VGFyZ2V0KHRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsKTogYm9vbGVhbiB7XG4gIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkgcmV0dXJuIHRydWU7XG4gIGlmICh0YXJnZXQuaXNDb250ZW50RWRpdGFibGUpIHJldHVybiB0cnVlO1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuICAgIHJldHVybiAhTk9OX1RFWFRfSU5QVVRfVFlQRVMuaGFzKHRhcmdldC50eXBlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hyb21pdW0gdG9nZ2xlcyBhIDxkZXRhaWxzPiBvbiB0aGUgU3BhY2UvRW50ZXIgKmtleXVwKiBvZiBpdHMgPHN1bW1hcnk+LFxuICogZXZlbiB3aGVuIGZvY3VzIHNpdHMgaW4gYSBuZXN0ZWQgdGV4dCBmaWVsZCDigJQgc28gZXZlcnkgc3BhY2UgdHlwZWQgaW4gYW5cbiAqIGVkaXRhYmxlIGhlYWRlciB3b3VsZCBjb2xsYXBzZSB0aGUgZGlzY2xvc3VyZS4gc3RvcFByb3BhZ2F0aW9uIGNhbid0IHN0b3BcbiAqIGl0ICh0aGUgdG9nZ2xlIGlzIHRoZSBzdW1tYXJ5J3Mgb3duIGFjdGl2YXRpb24gYmVoYXZpb3VyLCBub3QgYSBidWJibGluZ1xuICogbGlzdGVuZXIpIGFuZCBwcmV2ZW50RGVmYXVsdCBvbiAqa2V5ZG93biogd291bGQgc3dhbGxvdyB0aGUgY2hhcmFjdGVyLiBUaGVcbiAqIGNoYXJhY3RlciBpcyBhbHJlYWR5IGluc2VydGVkIGJ5IHRoZSB0aW1lIGtleXVwIGZpcmVzLCBzbyBjYW5jZWxsaW5nIHRoZVxuICoga2V5dXAgZGVmYXVsdCBmb3IgdGV4dC1lbnRyeSBmaWVsZHMga2lsbHMgdGhlIHRvZ2dsZSB3aGlsZSBsZWF2aW5nIHR5cGluZ1xuICogdW50b3VjaGVkLiBCdXR0b25zL2NoZWNrYm94L3JhZGlvIGZhbGwgdGhyb3VnaCBhbmQga2VlcCB0aGVpciBvd25cbiAqIGFjdGl2YXRpb247IHRoZSBzdW1tYXJ5IGl0c2VsZiAobm8gbmVzdGVkIGZpZWxkKSBrZWVwcyBub3JtYWwga2V5Ym9hcmRcbiAqIGRpc2Nsb3N1cmUuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVN1bW1hcnlLZXlVcChldmVudDogSlNYLlRhcmdldGVkS2V5Ym9hcmRFdmVudDxIVE1MRWxlbWVudD4pOiB2b2lkIHtcbiAgaWYgKGV2ZW50LmtleSAhPT0gXCIgXCIgJiYgZXZlbnQua2V5ICE9PSBcIkVudGVyXCIpIHJldHVybjtcbiAgaWYgKCFpc1RleHRFbnRyeVRhcmdldChldmVudC50YXJnZXQpKSByZXR1cm47XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb2xsYXBzaWJsZShwcm9wczogQ29sbGFwc2libGVQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBzdW1tYXJ5LCBjaGlsZHJlbiwgZGVmYXVsdE9wZW4gPSBmYWxzZSwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJjb2xsYXBzaWJsZVwiXV07XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8ZGV0YWlsc1xuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmpvaW4oXCIgXCIpfVxuICAgICAgb3Blbj17ZGVmYXVsdE9wZW59XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWNvbGxhcHNpYmxlXG4gICAgPlxuICAgICAgPExheW91dFxuICAgICAgICBhcz1cInN1bW1hcnlcIlxuICAgICAgICBjb2x1bW5zPVwiYXV0byAxZnJcIlxuICAgICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIlxuICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzW1wic3VtbWFyeVwiXX1cbiAgICAgICAgb25LZXlVcD17aGFuZGxlU3VtbWFyeUtleVVwfVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcIm1hcmtlclwiXX0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJzdW1tYXJ5Q29udGVudFwiXX0+e3N1bW1hcnl9PC9zcGFuPlxuICAgICAgPC9MYXlvdXQ+XG4gICAgICA8ZGl2IGNsYXNzPXtjbGFzc2VzW1wiY29udGVudFwiXX0+e2NoaWxkcmVufTwvZGl2PlxuICAgIDwvZGV0YWlscz5cbiAgKTtcbn1cbiIsCiAgICAiaW1wb3J0e0NvbXBvbmVudCBhcyBuLGNyZWF0ZUVsZW1lbnQgYXMgdCxvcHRpb25zIGFzIGUsdG9DaGlsZEFycmF5IGFzIHIsRnJhZ21lbnQgYXMgdSxyZW5kZXIgYXMgbyxoeWRyYXRlIGFzIGksY3JlYXRlQ29udGV4dCBhcyBsLGNyZWF0ZVJlZiBhcyBmLGNsb25lRWxlbWVudCBhcyBhfWZyb21cInByZWFjdFwiO2V4cG9ydHtDb21wb25lbnQsRnJhZ21lbnQsRnJhZ21lbnQgYXMgU3RyaWN0TW9kZSxjcmVhdGVDb250ZXh0LGNyZWF0ZUVsZW1lbnQsY3JlYXRlUmVmfWZyb21cInByZWFjdFwiO2ltcG9ydHt1c2VTdGF0ZSBhcyBjLHVzZUxheW91dEVmZmVjdCBhcyBzLHVzZUVmZmVjdCBhcyBoLHVzZUNhbGxiYWNrIGFzIHYsdXNlQ29udGV4dCBhcyBkLHVzZURlYnVnVmFsdWUgYXMgbSx1c2VJZCBhcyBwLHVzZUltcGVyYXRpdmVIYW5kbGUgYXMgeSx1c2VNZW1vIGFzIF8sdXNlUmVkdWNlciBhcyBiLHVzZVJlZiBhcyBTfWZyb21cInByZWFjdC9ob29rc1wiO2V4cG9ydCpmcm9tXCJwcmVhY3QvaG9va3NcIjtmdW5jdGlvbiBnKG4sdCl7Zm9yKHZhciBlIGluIHQpbltlXT10W2VdO3JldHVybiBufWZ1bmN0aW9uIEUobix0KXtmb3IodmFyIGUgaW4gbilpZihcIl9fc291cmNlXCIhPT1lJiYhKGUgaW4gdCkpcmV0dXJuITA7Zm9yKHZhciByIGluIHQpaWYoXCJfX3NvdXJjZVwiIT09ciYmbltyXSE9PXRbcl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gQyhuLHQpe3ZhciBlPXQoKSxyPWMoe3Q6e19fOmUsdTp0fX0pLHU9clswXS50LG89clsxXTtyZXR1cm4gcyhmdW5jdGlvbigpe3UuX189ZSx1LnU9dCxSKHUpJiZvKHt0OnV9KX0sW24sZSx0XSksaChmdW5jdGlvbigpe3JldHVybiBSKHUpJiZvKHt0OnV9KSxuKGZ1bmN0aW9uKCl7Uih1KSYmbyh7dDp1fSl9KX0sW25dKSxlfWZ1bmN0aW9uIFIobil7dHJ5e3JldHVybiEoKHQ9bi5fXyk9PT0oZT1uLnUoKSkmJigwIT09dHx8MS90PT0xL2UpfHx0IT10JiZlIT1lKX1jYXRjaChuKXtyZXR1cm4hMH12YXIgdCxlfWZ1bmN0aW9uIHgobil7bigpfWZ1bmN0aW9uIHcobil7cmV0dXJuIG59ZnVuY3Rpb24gaygpe3JldHVyblshMSx4XX12YXIgST1zO2Z1bmN0aW9uIE0obix0KXt0aGlzLnByb3BzPW4sdGhpcy5jb250ZXh0PXR9ZnVuY3Rpb24gTihuLGUpe2Z1bmN0aW9uIHIobil7dmFyIHQ9dGhpcy5wcm9wcy5yZWY7cmV0dXJuIHQhPW4ucmVmJiZ0JiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KG51bGwpOnQuY3VycmVudD1udWxsKSxlPyFlKHRoaXMucHJvcHMsbil8fHQhPW4ucmVmOkUodGhpcy5wcm9wcyxuKX1mdW5jdGlvbiB1KGUpe3JldHVybiB0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1yLHQobixlKX1yZXR1cm4gdS5kaXNwbGF5TmFtZT1cIk1lbW8oXCIrKG4uZGlzcGxheU5hbWV8fG4ubmFtZSkrXCIpXCIsdS5fX2Y9dS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCx1LnR5cGU9bix1fShNLnByb3RvdHlwZT1uZXcgbikuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsTS5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEUodGhpcy5wcm9wcyxuKXx8RSh0aGlzLnN0YXRlLHQpfTt2YXIgVD1lLl9fYjtlLl9fYj1mdW5jdGlvbihuKXtuLnR5cGUmJm4udHlwZS5fX2YmJm4ucmVmJiYobi5wcm9wcy5yZWY9bi5yZWYsbi5yZWY9bnVsbCksVCYmVChuKX07dmFyIEE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpfHwzOTExO2Z1bmN0aW9uIEQobil7ZnVuY3Rpb24gdCh0KXt2YXIgZT1nKHt9LHQpO3JldHVybiBkZWxldGUgZS5yZWYsbihlLHQucmVmfHxudWxsKX1yZXR1cm4gdC4kJHR5cGVvZj1BLHQucmVuZGVyPW4sdC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD10Ll9fZj0hMCx0LmRpc3BsYXlOYW1lPVwiRm9yd2FyZFJlZihcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix0fXZhciBGPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGw9PW4/bnVsbDpyKHIobikubWFwKHQpKX0sTD17bWFwOkYsZm9yRWFjaDpGLGNvdW50OmZ1bmN0aW9uKG4pe3JldHVybiBuP3IobikubGVuZ3RoOjB9LG9ubHk6ZnVuY3Rpb24obil7dmFyIHQ9cihuKTtpZigxIT09dC5sZW5ndGgpdGhyb3dcIkNoaWxkcmVuLm9ubHlcIjtyZXR1cm4gdFswXX0sdG9BcnJheTpyfSxPPWUuX19lO2UuX19lPWZ1bmN0aW9uKG4sdCxlLHIpe2lmKG4udGhlbilmb3IodmFyIHUsbz10O289by5fXzspaWYoKHU9by5fX2MpJiZ1Ll9fYylyZXR1cm4gbnVsbD09dC5fX2UmJih0Ll9fZT1lLl9fZSx0Ll9faz1lLl9fa3x8W10pLHUuX19jKG4sdCk7TyhuLHQsZSxyKX07dmFyIFU9ZS51bm1vdW50O2Z1bmN0aW9uIFYobix0LGUpe3JldHVybiBuJiYobi5fX2MmJm4uX19jLl9fSCYmKG4uX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe1wiZnVuY3Rpb25cIj09dHlwZW9mIG4uX19jJiZuLl9fYygpfSksbi5fX2MuX19IPW51bGwpLG51bGwhPShuPWcoe30sbikpLl9fYyYmKG4uX19jLl9fUD09PWUmJihuLl9fYy5fX1A9dCksbi5fX2MuX19lPSEwLG4uX19jPW51bGwpLG4uX19rPW4uX19rJiZuLl9fay5tYXAoZnVuY3Rpb24obil7cmV0dXJuIFYobix0LGUpfSkpLG59ZnVuY3Rpb24gVyhuLHQsZSl7cmV0dXJuIG4mJmUmJihuLl9fdj1udWxsLG4uX19rPW4uX19rJiZuLl9fay5tYXAoZnVuY3Rpb24obil7cmV0dXJuIFcobix0LGUpfSksbi5fX2MmJm4uX19jLl9fUD09PXQmJihuLl9fZSYmZS5hcHBlbmRDaGlsZChuLl9fZSksbi5fX2MuX19lPSEwLG4uX19jLl9fUD1lKSksbn1mdW5jdGlvbiBQKCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIGoobil7dmFyIHQ9bi5fXyYmbi5fXy5fX2M7cmV0dXJuIHQmJnQuX19hJiZ0Ll9fYShuKX1mdW5jdGlvbiB6KG4pe3ZhciBlLHIsdSxvPW51bGw7ZnVuY3Rpb24gaShpKXtpZihlfHwoZT1uKCkpLnRoZW4oZnVuY3Rpb24obil7biYmKG89bi5kZWZhdWx0fHxuKSx1PSEwfSxmdW5jdGlvbihuKXtyPW4sdT0hMH0pLHIpdGhyb3cgcjtpZighdSl0aHJvdyBlO3JldHVybiBvP3QobyxpKTpudWxsfXJldHVybiBpLmRpc3BsYXlOYW1lPVwiTGF6eVwiLGkuX19mPSEwLGl9ZnVuY3Rpb24gQigpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfWUudW5tb3VudD1mdW5jdGlvbihuKXt2YXIgdD1uLl9fYzt0JiYodC5fX3o9ITApLHQmJnQuX19SJiZ0Ll9fUigpLHQmJjMyJm4uX191JiYobi50eXBlPW51bGwpLFUmJlUobil9LChQLnByb3RvdHlwZT1uZXcgbikuX19jPWZ1bmN0aW9uKG4sdCl7dmFyIGU9dC5fX2Mscj10aGlzO251bGw9PXIubyYmKHIubz1bXSksci5vLnB1c2goZSk7dmFyIHU9aihyLl9fdiksbz0hMSxpPWZ1bmN0aW9uKCl7b3x8ci5fX3p8fChvPSEwLGUuX19SPW51bGwsdT91KGYpOmYoKSl9O2UuX19SPWk7dmFyIGw9ZS5fX1A7ZS5fX1A9bnVsbDt2YXIgZj1mdW5jdGlvbigpe2lmKCEtLXIuX191KXtpZihyLnN0YXRlLl9fYSl7dmFyIG49ci5zdGF0ZS5fX2E7ci5fX3YuX19rWzBdPVcobixuLl9fYy5fX1Asbi5fX2MuX19PKX12YXIgdDtmb3Ioci5zZXRTdGF0ZSh7X19hOnIuX19iPW51bGx9KTt0PXIuby5wb3AoKTspdC5fX1A9bCx0LmZvcmNlVXBkYXRlKCl9fTtyLl9fdSsrfHwzMiZ0Ll9fdXx8ci5zZXRTdGF0ZSh7X19hOnIuX19iPXIuX192Ll9fa1swXX0pLG4udGhlbihpLGkpfSxQLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sUC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4sZSl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxvPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPVYodGhpcy5fX2IscixvLl9fTz1vLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgaT1lLl9fYSYmdCh1LG51bGwsbi5mYWxsYmFjayk7cmV0dXJuIGkmJihpLl9fdSY9LTMzKSxbdCh1LG51bGwsZS5fX2E/bnVsbDpuLmNoaWxkcmVuKSxpXX07dmFyIEg9ZnVuY3Rpb24obix0LGUpe2lmKCsrZVsxXT09PWVbMF0mJm4ubC5kZWxldGUodCksbi5wcm9wcy5yZXZlYWxPcmRlciYmKFwidFwiIT09bi5wcm9wcy5yZXZlYWxPcmRlclswXXx8IW4ubC5zaXplKSlmb3IoZT1uLmk7ZTspe2Zvcig7ZS5sZW5ndGg+MzspZS5wb3AoKSgpO2lmKGVbMV08ZVswXSlicmVhaztuLmk9ZT1lWzJdfX07ZnVuY3Rpb24gWihuKXtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbi5jb250ZXh0fSxuLmNoaWxkcmVufWZ1bmN0aW9uIFkobil7dmFyIGU9dGhpcyxyPW4uaDtpZihlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7byhudWxsLGUudiksZS52PW51bGwsZS5oPW51bGx9LGUuaCYmZS5oIT09ciYmZS5jb21wb25lbnRXaWxsVW5tb3VudCgpLCFlLnYpe2Zvcih2YXIgdT1lLl9fdjtudWxsIT09dSYmIXUuX19tJiZudWxsIT09dS5fXzspdT11Ll9fO2UuaD1yLGUudj17bm9kZVR5cGU6MSxwYXJlbnROb2RlOnIsY2hpbGROb2RlczpbXSxfX2s6e19fbTp1Ll9fbX0sY29udGFpbnM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbmFtZXNwYWNlVVJJOnIubmFtZXNwYWNlVVJJLGluc2VydEJlZm9yZTpmdW5jdGlvbihuLHQpe3RoaXMuY2hpbGROb2Rlcy5wdXNoKG4pLGUuaC5pbnNlcnRCZWZvcmUobix0KX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24obil7dGhpcy5jaGlsZE5vZGVzLnNwbGljZSh0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihuKT4+PjEsMSksZS5oLnJlbW92ZUNoaWxkKG4pfX19byh0KFose2NvbnRleHQ6ZS5jb250ZXh0fSxuLl9fdiksZS52KX1mdW5jdGlvbiAkKG4sZSl7dmFyIHI9dChZLHtfX3Y6bixoOmV9KTtyZXR1cm4gci5jb250YWluZXJJbmZvPWUscn0oQi5wcm90b3R5cGU9bmV3IG4pLl9fYT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLGU9aih0Ll9fdikscj10LmwuZ2V0KG4pO3JldHVybiByWzBdKyssZnVuY3Rpb24odSl7dmFyIG89ZnVuY3Rpb24oKXt0LnByb3BzLnJldmVhbE9yZGVyPyhyLnB1c2godSksSCh0LG4scikpOnUoKX07ZT9lKG8pOm8oKX19LEIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihuKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgdD1yKG4uY2hpbGRyZW4pO24ucmV2ZWFsT3JkZXImJlwiYlwiPT09bi5yZXZlYWxPcmRlclswXSYmdC5yZXZlcnNlKCk7Zm9yKHZhciBlPXQubGVuZ3RoO2UtLTspdGhpcy5sLnNldCh0W2VdLHRoaXMuaT1bMSwwLHRoaXMuaV0pO3JldHVybiBuLmNoaWxkcmVufSxCLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9Qi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgbj10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7SChuLGUsdCl9KX07dmFyIHE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIil8fDYwMTAzLEc9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLEo9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxLPS9bQS1aMC05XS9nLFE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50LFg9ZnVuY3Rpb24obil7cmV0dXJuKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2woKT8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdChuKX07ZnVuY3Rpb24gbm4obix0LGUpe3JldHVybiBudWxsPT10Ll9fayYmKHQudGV4dENvbnRlbnQ9XCJcIiksbyhuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9ZnVuY3Rpb24gdG4obix0LGUpe3JldHVybiBpKG4sdCksXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSgpLG4/bi5fX2M6bnVsbH1uLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFtcImNvbXBvbmVudFdpbGxNb3VudFwiLFwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1wiLFwiY29tcG9uZW50V2lsbFVwZGF0ZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbXCJVTlNBRkVfXCIrdF19LHNldDpmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bn0pfX0pfSk7dmFyIGVuPWUuZXZlbnQ7ZS5ldmVudD1mdW5jdGlvbihuKXtyZXR1cm4gZW4mJihuPWVuKG4pKSxuLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LG4uaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LG4uaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sbi5uYXRpdmVFdmVudD1ufTt2YXIgcm4sdW49e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LG9uPWUudm5vZGU7ZS52bm9kZT1mdW5jdGlvbihuKXtcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlJiZmdW5jdGlvbihuKXt2YXIgdD1uLnByb3BzLGU9bi50eXBlLHU9e30sbz0tMT09ZS5pbmRleE9mKFwiLVwiKTtmb3IodmFyIGkgaW4gdCl7dmFyIGw9dFtpXTtpZighKFwidmFsdWVcIj09PWkmJlwiZGVmYXVsdFZhbHVlXCJpbiB0JiZudWxsPT1sfHxRJiZcImNoaWxkcmVuXCI9PT1pJiZcIm5vc2NyaXB0XCI9PT1lfHxcImNsYXNzXCI9PT1pfHxcImNsYXNzTmFtZVwiPT09aSkpe3ZhciBmPWkudG9Mb3dlckNhc2UoKTtcImRlZmF1bHRWYWx1ZVwiPT09aSYmXCJ2YWx1ZVwiaW4gdCYmbnVsbD09dC52YWx1ZT9pPVwidmFsdWVcIjpcImRvd25sb2FkXCI9PT1pJiYhMD09PWw/bD1cIlwiOlwidHJhbnNsYXRlXCI9PT1mJiZcIm5vXCI9PT1sP2w9ITE6XCJvXCI9PT1mWzBdJiZcIm5cIj09PWZbMV0/XCJvbmRvdWJsZWNsaWNrXCI9PT1mP2k9XCJvbmRibGNsaWNrXCI6XCJvbmNoYW5nZVwiIT09Znx8XCJpbnB1dFwiIT09ZSYmXCJ0ZXh0YXJlYVwiIT09ZXx8WCh0LnR5cGUpP1wib25mb2N1c1wiPT09Zj9pPVwib25mb2N1c2luXCI6XCJvbmJsdXJcIj09PWY/aT1cIm9uZm9jdXNvdXRcIjpKLnRlc3QoaSkmJihpPWYpOmY9aT1cIm9uaW5wdXRcIjpvJiZHLnRlc3QoaSk/aT1pLnJlcGxhY2UoSyxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpOm51bGw9PT1sJiYobD12b2lkIDApLFwib25pbnB1dFwiPT09ZiYmdVtpPWZdJiYoaT1cIm9uaW5wdXRDYXB0dXJlXCIpLHVbaV09bH19XCJzZWxlY3RcIj09ZSYmKHUubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodS52YWx1ZSkmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPS0xIT11LnZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSl9KSksbnVsbCE9dS5kZWZhdWx0VmFsdWUmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPXUubXVsdGlwbGU/LTEhPXUuZGVmYXVsdFZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSk6dS5kZWZhdWx0VmFsdWU9PW4ucHJvcHMudmFsdWV9KSkpLHQuY2xhc3MmJiF0LmNsYXNzTmFtZT8odS5jbGFzcz10LmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LFwiY2xhc3NOYW1lXCIsdW4pKTp0LmNsYXNzTmFtZSYmKHUuY2xhc3M9dS5jbGFzc05hbWU9dC5jbGFzc05hbWUpLG4ucHJvcHM9dX0obiksbi4kJHR5cGVvZj1xLG9uJiZvbihuKX07dmFyIGxuPWUuX19yO2UuX19yPWZ1bmN0aW9uKG4pe2xuJiZsbihuKSxybj1uLl9fY307dmFyIGZuPWUuZGlmZmVkO2UuZGlmZmVkPWZ1bmN0aW9uKG4pe2ZuJiZmbihuKTt2YXIgdD1uLnByb3BzLGU9bi5fX2U7bnVsbCE9ZSYmXCJ0ZXh0YXJlYVwiPT09bi50eXBlJiZcInZhbHVlXCJpbiB0JiZ0LnZhbHVlIT09ZS52YWx1ZSYmKGUudmFsdWU9bnVsbD09dC52YWx1ZT9cIlwiOnQudmFsdWUpLHJuPW51bGx9O3ZhciBhbj17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjp7Y3VycmVudDp7cmVhZENvbnRleHQ6ZnVuY3Rpb24obil7cmV0dXJuIHJuLl9fbltuLl9fY10ucHJvcHMudmFsdWV9LHVzZUNhbGxiYWNrOnYsdXNlQ29udGV4dDpkLHVzZURlYnVnVmFsdWU6bSx1c2VEZWZlcnJlZFZhbHVlOncsdXNlRWZmZWN0OmgsdXNlSWQ6cCx1c2VJbXBlcmF0aXZlSGFuZGxlOnksdXNlSW5zZXJ0aW9uRWZmZWN0OkksdXNlTGF5b3V0RWZmZWN0OnMsdXNlTWVtbzpfLHVzZVJlZHVjZXI6Yix1c2VSZWY6Uyx1c2VTdGF0ZTpjLHVzZVN5bmNFeHRlcm5hbFN0b3JlOkMsdXNlVHJhbnNpdGlvbjprfX19LGNuPVwiMTguMy4xXCI7ZnVuY3Rpb24gc24obil7cmV0dXJuIHQuYmluZChudWxsLG4pfWZ1bmN0aW9uIGhuKG4pe3JldHVybiEhbiYmbi4kJHR5cGVvZj09PXF9ZnVuY3Rpb24gdm4obil7cmV0dXJuIGhuKG4pJiZuLnR5cGU9PT11fWZ1bmN0aW9uIGRuKG4pe3JldHVybiEhbiYmXCJzdHJpbmdcIj09dHlwZW9mIG4uZGlzcGxheU5hbWUmJjA9PW4uZGlzcGxheU5hbWUuaW5kZXhPZihcIk1lbW8oXCIpfWZ1bmN0aW9uIG1uKG4pe3JldHVybiBobihuKT9hLmFwcGx5KG51bGwsYXJndW1lbnRzKTpufWZ1bmN0aW9uIHBuKG4pe3JldHVybiEhbi5fX2smJihvKG51bGwsbiksITApfWZ1bmN0aW9uIHluKG4pe3JldHVybiBuJiYobi5iYXNlfHwxPT09bi5ub2RlVHlwZSYmbil8fG51bGx9dmFyIF9uPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4odCl9LGJuPWZ1bmN0aW9uKG4sdCl7dmFyIHIsdT1lLmRlYm91bmNlUmVuZGVyaW5nO2UuZGVib3VuY2VSZW5kZXJpbmc9ZnVuY3Rpb24obil7cj1ufTt0cnl7dmFyIG89bih0KTtyZXR1cm4gciYmcigpLG99ZmluYWxseXtlLmRlYm91bmNlUmVuZGVyaW5nPXV9fSxTbj1obixnbj17dXNlU3RhdGU6Yyx1c2VJZDpwLHVzZVJlZHVjZXI6Yix1c2VFZmZlY3Q6aCx1c2VMYXlvdXRFZmZlY3Q6cyx1c2VJbnNlcnRpb25FZmZlY3Q6SSx1c2VUcmFuc2l0aW9uOmssdXNlRGVmZXJyZWRWYWx1ZTp3LHVzZVN5bmNFeHRlcm5hbFN0b3JlOkMsc3RhcnRUcmFuc2l0aW9uOngsdXNlUmVmOlMsdXNlSW1wZXJhdGl2ZUhhbmRsZTp5LHVzZU1lbW86Xyx1c2VDYWxsYmFjazp2LHVzZUNvbnRleHQ6ZCx1c2VEZWJ1Z1ZhbHVlOm0sdmVyc2lvbjpcIjE4LjMuMVwiLENoaWxkcmVuOkwscmVuZGVyOm5uLGh5ZHJhdGU6dG4sdW5tb3VudENvbXBvbmVudEF0Tm9kZTpwbixjcmVhdGVQb3J0YWw6JCxjcmVhdGVFbGVtZW50OnQsY3JlYXRlQ29udGV4dDpsLGNyZWF0ZUZhY3Rvcnk6c24sY2xvbmVFbGVtZW50Om1uLGNyZWF0ZVJlZjpmLEZyYWdtZW50OnUsaXNWYWxpZEVsZW1lbnQ6aG4saXNFbGVtZW50OlNuLGlzRnJhZ21lbnQ6dm4saXNNZW1vOmRuLGZpbmRET01Ob2RlOnluLENvbXBvbmVudDpuLFB1cmVDb21wb25lbnQ6TSxtZW1vOk4sZm9yd2FyZFJlZjpELGZsdXNoU3luYzpibix1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpfbixTdHJpY3RNb2RlOnUsU3VzcGVuc2U6UCxTdXNwZW5zZUxpc3Q6QixsYXp5OnosX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6YW59O2V4cG9ydHtMIGFzIENoaWxkcmVuLE0gYXMgUHVyZUNvbXBvbmVudCxQIGFzIFN1c3BlbnNlLEIgYXMgU3VzcGVuc2VMaXN0LGFuIGFzIF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELG1uIGFzIGNsb25lRWxlbWVudCxzbiBhcyBjcmVhdGVGYWN0b3J5LCQgYXMgY3JlYXRlUG9ydGFsLGduIGFzIGRlZmF1bHQseW4gYXMgZmluZERPTU5vZGUsYm4gYXMgZmx1c2hTeW5jLEQgYXMgZm9yd2FyZFJlZix0biBhcyBoeWRyYXRlLFNuIGFzIGlzRWxlbWVudCx2biBhcyBpc0ZyYWdtZW50LGRuIGFzIGlzTWVtbyxobiBhcyBpc1ZhbGlkRWxlbWVudCx6IGFzIGxhenksTiBhcyBtZW1vLG5uIGFzIHJlbmRlcix4IGFzIHN0YXJ0VHJhbnNpdGlvbixwbiBhcyB1bm1vdW50Q29tcG9uZW50QXROb2RlLF9uIGFzIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLHcgYXMgdXNlRGVmZXJyZWRWYWx1ZSxJIGFzIHVzZUluc2VydGlvbkVmZmVjdCxDIGFzIHVzZVN5bmNFeHRlcm5hbFN0b3JlLGsgYXMgdXNlVHJhbnNpdGlvbixjbiBhcyB2ZXJzaW9ufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXBhdC5tb2R1bGUuanMubWFwXG4iLAogICAgIi8qKlxuICogRm9jdXMgdHJhcC5cbiAqXG4gKiBLZWVwcyBUYWIgLyBTaGlmdCtUYWIgaW5zaWRlIGEgcm9vdCBlbGVtZW50LiBSZXR1cm5zIGEgY2xlYW51cCB0aGF0XG4gKiByZXN0b3JlcyBmb2N1cyB0byB0aGUgZWxlbWVudCB0aGF0IHdhcyBhY3RpdmUgYmVmb3JlIHRoZSB0cmFwIG1vdW50ZWQuXG4gKiBTaW1wbGUgYW5kIHN5bmNocm9ub3VzIOKAlCBhc3N1bWVzIGEgc2luZ2xlIGFjdGl2ZSB0cmFwIHBlciBPdmVybGF5Um9vdFxuICogYW5kIGxldHMgdGhlIG92ZXJsYXkgcmVnaXN0cnkgaW4gYEBmYWlyZm94L3BvbGx5L2FjdGlvbnNgIGVuZm9yY2UgdGhhdFxuICogYXQgdGhlIHN0YWNrIGxldmVsLlxuICovXG5cbmNvbnN0IEZPQ1VTQUJMRV9TRUxFQ1RPUiA9IFtcbiAgXCJhW2hyZWZdXCIsXG4gIFwiYXJlYVtocmVmXVwiLFxuICBcImJ1dHRvbjpub3QoW2Rpc2FibGVkXSlcIixcbiAgXCJpbnB1dDpub3QoW2Rpc2FibGVkXSk6bm90KFt0eXBlPWhpZGRlbl0pXCIsXG4gIFwic2VsZWN0Om5vdChbZGlzYWJsZWRdKVwiLFxuICBcInRleHRhcmVhOm5vdChbZGlzYWJsZWRdKVwiLFxuICBcImlmcmFtZVwiLFxuICBcIm9iamVjdFwiLFxuICBcImVtYmVkXCIsXG4gICdbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknLFxuICBcIltjb250ZW50ZWRpdGFibGVdXCIsXG5dLmpvaW4oXCIsXCIpO1xuXG5mdW5jdGlvbiBnZXRGb2N1c2FibGUocm9vdDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFtdIHtcbiAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKHJvb3QucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oRk9DVVNBQkxFX1NFTEVDVE9SKSk7XG4gIHJldHVybiBub2Rlcy5maWx0ZXIoXG4gICAgKGVsKSA9PiAhZWwuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikgJiYgZWwuZ2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIikgIT09IFwidHJ1ZVwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsRm9jdXNUcmFwKHJvb3Q6IEhUTUxFbGVtZW50KTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IHByZXZpb3VzQWN0aXZlID0gKFxuICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgOiBudWxsXG4gICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gIC8vIE1vdmUgZm9jdXMgaW50byB0aGUgcm9vdCBpZiBpdCdzIG5vdCBhbHJlYWR5LlxuICBjb25zdCBmb2N1c2FibGUgPSBnZXRGb2N1c2FibGUocm9vdCk7XG4gIGNvbnN0IGZpcnN0ID0gZm9jdXNhYmxlWzBdID8/IHJvb3Q7XG4gIGlmICghcm9vdC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgIGZpcnN0LmZvY3VzKCk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSAhPT0gXCJUYWJcIikgcmV0dXJuO1xuICAgIGNvbnN0IGl0ZW1zID0gZ2V0Rm9jdXNhYmxlKHJvb3QpO1xuICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0SXRlbSA9IGl0ZW1zWzBdO1xuICAgIGNvbnN0IGxhc3RJdGVtID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgaWYgKCFmaXJzdEl0ZW0gfHwgIWxhc3RJdGVtKSByZXR1cm47XG4gICAgY29uc3QgYWN0aXZlID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIGlmIChhY3RpdmUgPT09IGZpcnN0SXRlbSB8fCAhcm9vdC5jb250YWlucyhhY3RpdmUpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxhc3RJdGVtLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhY3RpdmUgPT09IGxhc3RJdGVtKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZmlyc3RJdGVtLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duKTtcbiAgICBpZiAocHJldmlvdXNBY3RpdmUgJiYgZG9jdW1lbnQuY29udGFpbnMocHJldmlvdXNBY3RpdmUpKSB7XG4gICAgICBwcmV2aW91c0FjdGl2ZS5mb2N1cygpO1xuICAgIH1cbiAgfTtcbn1cbiIsCiAgICAiLyoqXG4gKiBTY3JvbGwgbG9jay5cbiAqXG4gKiBSZWZlcmVuY2UtY291bnRlZC4gTXVsdGlwbGUgb3ZlcmxheXMgY2FuIHJlcXVlc3QgYSBsb2NrOyB0aGUgYm9keVxuICogc3RheXMgbG9ja2VkIHVudGlsIGV2ZXJ5IHJlcXVlc3QgcmVsZWFzZXMuIEEgc2Nyb2xsYmFyLWd1dHRlciB0b2tlblxuICogaXMgd3JpdHRlbiBhdCBhY3F1aXJlIHRpbWUgc28gY29udGVudCBiZWhpbmQgdGhlIG92ZXJsYXkgZG9lc24ndFxuICogcmVmbG93IHdoZW4gdGhlIGJhciBkaXNhcHBlYXJzLlxuICovXG5cbmxldCBjb3VudCA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBhY3F1aXJlU2Nyb2xsTG9jaygpOiAoKSA9PiB2b2lkIHtcbiAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgY29uc3QgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICBjb25zdCBndXR0ZXIgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIGh0bWwuY2xpZW50V2lkdGg7XG4gICAgaHRtbC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9sbHktc2Nyb2xsYmFyLWd1dHRlclwiLCBgJHtndXR0ZXJ9cHhgKTtcbiAgICBodG1sLnNldEF0dHJpYnV0ZShcImRhdGEtcG9sbHktc2Nyb2xsLWxvY2tlZFwiLCBcInRydWVcIik7XG4gIH1cbiAgY291bnQgKz0gMTtcbiAgbGV0IHJlbGVhc2VkID0gZmFsc2U7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKHJlbGVhc2VkKSByZXR1cm47XG4gICAgcmVsZWFzZWQgPSB0cnVlO1xuICAgIGNvdW50IC09IDE7XG4gICAgaWYgKGNvdW50IDw9IDApIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICAgIGNvbnN0IGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICBodG1sLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtcG9sbHktc2Nyb2xsLWxvY2tlZFwiKTtcbiAgICAgIGh0bWwuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCItLXBvbGx5LXNjcm9sbGJhci1ndXR0ZXJcIik7XG4gICAgfVxuICB9O1xufVxuIiwKICAgICIvKipcbiAqIE92ZXJsYXlSb290IOKAlCBwb3J0YWwgdGFyZ2V0IGZvciBzdGFja2VkIG92ZXJsYXlzLlxuICpcbiAqIEFwcHMgcmVuZGVyIDxPdmVybGF5Um9vdCAvPiBvbmNlLCB0eXBpY2FsbHkgYXMgdGhlIGxhc3QgY2hpbGQgb2YgdGhlXG4gKiBhcHAgcm9vdC4gTW9kYWwsIENvbmZpcm1EaWFsb2csIGFuZCBUb2FzdCBwb3J0YWwgaW50byB0aGlzIGVsZW1lbnQ7XG4gKiB0aGUgc2Nyb2xsIGxvY2sgdG9nZ2xlcyBiYXNlZCBvbiB0aGUgb3ZlcmxheSByZWdpc3RyeSBjb3VudC5cbiAqL1xuXG5pbXBvcnQgeyBlZmZlY3QgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IGhhc09wZW5PdmVybGF5IH0gZnJvbSBcIi4uL2FjdGlvbnMvb3ZlcmxheS50c1wiO1xuaW1wb3J0IHsgYWNxdWlyZVNjcm9sbExvY2sgfSBmcm9tIFwiLi9pbnRlcm5hbC9zY3JvbGwtbG9jay50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vT3ZlcmxheVJvb3QubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gT3ZlcmxheVJvb3QoKSB7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgcmVsZWFzZTogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgZGlzcG9zZSA9IGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoaGFzT3Blbk92ZXJsYXkoKSkge1xuICAgICAgICBpZiAoIXJlbGVhc2UpIHJlbGVhc2UgPSBhY3F1aXJlU2Nyb2xsTG9jaygpO1xuICAgICAgfSBlbHNlIGlmIChyZWxlYXNlKSB7XG4gICAgICAgIHJlbGVhc2UoKTtcbiAgICAgICAgcmVsZWFzZSA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRpc3Bvc2UoKTtcbiAgICAgIHJlbGVhc2U/LigpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICByZXR1cm4gPGRpdiByZWY9e3JlZn0gY2xhc3M9e2NsYXNzZXNbXCJyb290XCJdfSBkYXRhLXBvbGx5LXVpIGRhdGEtcG9sbHktb3ZlcmxheS1yb290IC8+O1xufVxuXG4vKiogR2V0IHRoZSBtb3VudCBub2RlIGZvciBwb3J0YWxlZCBvdmVybGF5cy4gUmV0dXJucyBudWxsIGJlZm9yZSBtb3VudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPdmVybGF5Um9vdE5vZGUoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFwiW2RhdGEtcG9sbHktb3ZlcmxheS1yb290XVwiKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBNb2RhbCDigJQgY29tcG91bmQgZGlhbG9nIHdpdGggZm9jdXMgdHJhcCwgRXNjYXBlIGhhbmRsaW5nLCBwb3J0YWwsXG4gKiBhbmQgb3ZlcmxheS1zdGFjayBpbnRlZ3JhdGlvbi5cbiAqXG4gKiBSb290IHRha2VzIGEgYHdoZW5gIHNpZ25hbCAob3IgYm9vbGVhbikuIFdoZW4gdHJ1dGh5IHRoZSBjb250ZW50IG1vdW50c1xuICogaW50byB0aGUgT3ZlcmxheVJvb3QgcG9ydGFsLCBmb2N1cyBtb3ZlcyBpbnNpZGUsIFRhYiBpcyB0cmFwcGVkLCBFc2NhcGVcbiAqIGZpcmVzIGBkYXRhLWFjdGlvbj1cIm1vZGFsOmNsb3NlXCJgIChvciB0aGUgb3ZlcmxheSByZWdpc3RyeSdzIG9uQ2xvc2VcbiAqIGNhbGxiYWNrKSwgYW5kIHRoZSBib2R5IHNjcm9sbCBsb2Nrcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlYWRvbmx5U2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlQ29udGV4dCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VJZCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IHBvcE92ZXJsYXksIHB1c2hPdmVybGF5IH0gZnJvbSBcIi4uL2FjdGlvbnMvb3ZlcmxheS50c1wiO1xuaW1wb3J0IHsgaW5zdGFsbEZvY3VzVHJhcCB9IGZyb20gXCIuL2ludGVybmFsL2ZvY3VzLXRyYXAudHNcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL01vZGFsLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGdldE92ZXJsYXlSb290Tm9kZSB9IGZyb20gXCIuL092ZXJsYXlSb290LnRzeFwiO1xuaW1wb3J0IHsgU3VyZmFjZSB9IGZyb20gXCIuL1N1cmZhY2UudHN4XCI7XG5cbnR5cGUgTW9kYWxDb250ZXh0ID0ge1xuICBpZDogc3RyaW5nO1xuICB0aXRsZUlkOiBzdHJpbmc7XG4gIGRlc2NJZDogc3RyaW5nO1xuICBjbG9zZTogKCkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IEN0eCA9IGNyZWF0ZUNvbnRleHQ8TW9kYWxDb250ZXh0IHwgbnVsbD4obnVsbCk7XG5cbmZ1bmN0aW9uIHVzZU1vZGFsKCk6IE1vZGFsQ29udGV4dCB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoQ3R4KTtcbiAgaWYgKCFjdHgpIHRocm93IG5ldyBFcnJvcihcIk1vZGFsIHN1Yi1jb21wb25lbnRzIG11c3QgcmVuZGVyIGluc2lkZSA8TW9kYWwuUm9vdD5cIik7XG4gIHJldHVybiBjdHg7XG59XG5cbnR5cGUgUm9vdFByb3BzID0ge1xuICB3aGVuOiBSZWFkb25seVNpZ25hbDxib29sZWFuPiB8IGJvb2xlYW47XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIC8qKiBBY2Nlc3NpYmxlIGxhYmVsIHNvdXJjZTogXCJ0aXRsZVwiIHVzZXMgdGhlIDxNb2RhbC5UaXRsZT4gaWQsIG9yIHBhc3MgYW4gZXhwbGljaXQgbGFiZWwuICovXG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gUm9vdCh7IHdoZW4sIG9uQ2xvc2UsIGNoaWxkcmVuLCBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsIH06IFJvb3RQcm9wcykge1xuICBjb25zdCBpZCA9IHVzZUlkKCk7XG4gIGNvbnN0IHRpdGxlSWQgPSBgJHtpZH0tdGl0bGVgO1xuICBjb25zdCBkZXNjSWQgPSBgJHtpZH0tZGVzY2A7XG4gIGNvbnN0IG1vdW50UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtwb3J0YWxOb2RlLCBzZXRQb3J0YWxOb2RlXSA9IHVzZVN0YXRlPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgaXNPcGVuID0gdHlwZW9mIHdoZW4gPT09IFwiYm9vbGVhblwiID8gd2hlbiA6IHdoZW4udmFsdWU7XG5cbiAgLy8gQ29uc3VtZXJzIGFsbW9zdCBhbHdheXMgcGFzcyBhbiBpbmxpbmUgY2xvc3VyZSBmb3IgYG9uQ2xvc2VgLCBzbyB0aGUgcHJvcFxuICAvLyBoYXMgYSBuZXcgaWRlbnRpdHkgb24gZXZlcnkgcmVuZGVyLiBLZWVwaW5nIGl0IGluIHRoZSBvdmVybGF5IGVmZmVjdCdzXG4gIC8vIGRlcGVuZGVuY3kgYXJyYXkgbWFkZSB0aGF0IGVmZmVjdCB0ZWFyIGRvd24gYW5kIHJlLWluc3RhbGwgcGVyIHJlbmRlcjpcbiAgLy8gZWFjaCBydW4gd3JvdGUgdGhlIGBzdGFja2Agc2lnbmFsIHR3aWNlIGFuZCBtb3ZlZCBmb2N1cyB0d2ljZSwgYW5kIHRoZVxuICAvLyBzaWduYWwgd3JpdGUgcmUtcmVuZGVyZWQgdGhlIHN1YnNjcmliZXIgdGhhdCBwcm9kdWNlZCB0aGUgbmV4dCBjbG9zdXJlLlxuICAvLyBUaGUgcmVzdWx0IHdhcyBhbiB1bmJvdW5kZWQgcmVuZGVyIGxvb3AgdGhhdCBwaW5uZWQgdGhlIG1haW4gdGhyZWFkXG4gIC8vIChwb2xseSMxNzcpLiBUaGUgZWZmZWN0IG5vdyByZWFkcyB0aGUgbGF0ZXN0IGNhbGxiYWNrIHRocm91Z2ggYSByZWYsIHNvXG4gIC8vIGl0cyBkZXBlbmRlbmNpZXMgYXJlIG9ubHkgdGhlIHZhbHVlcyB0aGF0IGdlbnVpbmVseSByZS1vcGVuIHRoZSBvdmVybGF5LlxuICBjb25zdCBvbkNsb3NlUmVmID0gdXNlUmVmKG9uQ2xvc2UpO1xuICBvbkNsb3NlUmVmLmN1cnJlbnQgPSBvbkNsb3NlO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4pIHtcbiAgICAgIHNldFBvcnRhbE5vZGUobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFBvcnRhbE5vZGUoZ2V0T3ZlcmxheVJvb3ROb2RlKCkpO1xuICB9LCBbaXNPcGVuXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3BlbiB8fCAhcG9ydGFsTm9kZSkgcmV0dXJuO1xuICAgIGNvbnN0IGVudHJ5ID0geyBpZCwgb25DbG9zZTogKCkgPT4gb25DbG9zZVJlZi5jdXJyZW50Py4oKSB9O1xuICAgIHB1c2hPdmVybGF5KGVudHJ5KTtcbiAgICBjb25zdCBlbCA9IG1vdW50UmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgY2xlYW51cCA9IGVsXG4gICAgICA/IGluc3RhbGxGb2N1c1RyYXAoZWwpXG4gICAgICA6ICgpID0+IHtcbiAgICAgICAgICAvKiBubyByZWYgeWV0ICovXG4gICAgICAgIH07XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHBvcE92ZXJsYXkoaWQpO1xuICAgIH07XG4gIH0sIFtpc09wZW4sIHBvcnRhbE5vZGUsIGlkXSk7XG5cbiAgaWYgKCFpc09wZW4gfHwgIXBvcnRhbE5vZGUpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgIG9uQ2xvc2U/LigpO1xuICB9O1xuXG4gIGNvbnN0IGN0eDogTW9kYWxDb250ZXh0ID0geyBpZCwgdGl0bGVJZCwgZGVzY0lkLCBjbG9zZSB9O1xuXG4gIGNvbnN0IGNvbnRlbnQgPSAoXG4gICAgPEN0eC5Qcm92aWRlciB2YWx1ZT17Y3R4fT5cbiAgICAgIDxMYXlvdXRcbiAgICAgICAgZWxlbWVudFJlZj17bW91bnRSZWZ9XG4gICAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgICBqdXN0aWZ5SXRlbXM9XCJjZW50ZXJcIlxuICAgICAgICBoZWlnaHQ9XCIxMDAlXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzW1wiY29udGFpbmVyXCJdfVxuICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgIGRhdGEtcG9sbHktbW9kYWwtY29udGVudFxuICAgICAgICBkYXRhLW92ZXJsYXktaWQ9e2lkfVxuICAgICAgICBkYXRhLXN0YXRlPVwib3BlblwiXG4gICAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtbGFiZWxsZWRieT17YXJpYUxhYmVsID8gdW5kZWZpbmVkIDogdGl0bGVJZH1cbiAgICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXtkZXNjSWR9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvQ3R4LlByb3ZpZGVyPlxuICApO1xuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoY29udGVudCwgcG9ydGFsTm9kZSk7XG59XG5cbmZ1bmN0aW9uIEJhY2tkcm9wKCkge1xuICBjb25zdCB7IGNsb3NlIH0gPSB1c2VNb2RhbCgpO1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3M9e2NsYXNzZXNbXCJiYWNrZHJvcFwiXX0gZGF0YS1wb2xseS1tb2RhbC1iYWNrZHJvcCBvbkNsaWNrPXtjbG9zZX0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgKTtcbn1cblxudHlwZSBDb250ZW50UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBzdHlsZT86IEpTWC5DU1NQcm9wZXJ0aWVzO1xufTtcblxuZnVuY3Rpb24gQ29udGVudCh7IGNoaWxkcmVuLCBjbGFzc05hbWUsIHN0eWxlIH06IENvbnRlbnRQcm9wcykge1xuICBjb25zdCBjbHMgPSBjbGFzc05hbWUgPyBgJHtjbGFzc2VzW1wic3VyZmFjZVwiXX0gJHtjbGFzc05hbWV9YCA6IGNsYXNzZXNbXCJzdXJmYWNlXCJdO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICB2YXJpYW50PVwicmFpc2VkXCJcbiAgICAgIHJhZGl1cz1cImxnXCJcbiAgICAgIHNoYWRvdz1cImxnXCJcbiAgICAgIHBvc2l0aW9uPVwicmVsYXRpdmVcIlxuICAgICAgY2xhc3NOYW1lPXtjbHN9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBkYXRhLXBvbGx5LW1vZGFsLXN1cmZhY2VcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5mdW5jdGlvbiBIZWFkZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPGhlYWRlciBjbGFzcz17Y2xhc3Nlc1tcImhlYWRlclwiXX0gZGF0YS1wb2xseS1tb2RhbC1oZWFkZXI+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9oZWFkZXI+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFRpdGxlKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICBjb25zdCB7IHRpdGxlSWQgfSA9IHVzZU1vZGFsKCk7XG4gIHJldHVybiAoXG4gICAgPGgyIGlkPXt0aXRsZUlkfSBjbGFzcz17Y2xhc3Nlc1tcInRpdGxlXCJdfSBkYXRhLXBvbGx5LW1vZGFsLXRpdGxlPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvaDI+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEJvZHkoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIGNvbnN0IHsgZGVzY0lkIH0gPSB1c2VNb2RhbCgpO1xuICByZXR1cm4gKFxuICAgIDxkaXYgaWQ9e2Rlc2NJZH0gY2xhc3M9e2NsYXNzZXNbXCJib2R5XCJdfSBkYXRhLXBvbGx5LW1vZGFsLWJvZHk+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEZvb3Rlcih7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Zm9vdGVyIGNsYXNzPXtjbGFzc2VzW1wiZm9vdGVyXCJdfSBkYXRhLXBvbGx5LW1vZGFsLWZvb3Rlcj5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Zvb3Rlcj5cbiAgKTtcbn1cblxudHlwZSBDbG9zZVByb3BzID0ge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIC8qKiBGaXJlIGEgcmVnaXN0ZXJlZCBkYXRhLWFjdGlvbiBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhlIG9uQ2xvc2UgY2FsbGJhY2suICovXG4gIGFjdGlvbj86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIENsb3NlKHsgY2hpbGRyZW4sIGFjdGlvbiB9OiBDbG9zZVByb3BzKSB7XG4gIGNvbnN0IHsgY2xvc2UgfSA9IHVzZU1vZGFsKCk7XG4gIGlmIChhY3Rpb24pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJjbG9zZVwiXX1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgIGRhdGEtcG9sbHktbW9kYWwtY2xvc2VcbiAgICAgICAgZGF0YS1hY3Rpb249e2FjdGlvbn1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9e2NsYXNzZXNbXCJjbG9zZVwiXX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgIGRhdGEtcG9sbHktbW9kYWwtY2xvc2VcbiAgICAgIG9uQ2xpY2s9e2Nsb3NlfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IE1vZGFsID0ge1xuICBSb290LFxuICBCYWNrZHJvcCxcbiAgQ29udGVudCxcbiAgSGVhZGVyLFxuICBUaXRsZSxcbiAgQm9keSxcbiAgRm9vdGVyLFxuICBDbG9zZSxcbn07XG4iLAogICAgIi8qKlxuICogQ29uZmlybURpYWxvZyDigJQgUHJvbWlzZS1yZXR1cm5pbmcgY29uZmlybWF0aW9uIHByaW1pdGl2ZS5cbiAqXG4gKiBgY29uZmlybSh7IHRpdGxlLCBib2R5LCBkYW5nZXIgfSlgIHJldHVybnMgUHJvbWlzZTxib29sZWFuPi4gT3BlbnMgdGhlXG4gKiByZW5kZXJlZCBgPENvbmZpcm1EaWFsb2cuSG9zdCAvPmAgbW9kYWwgKHdoaWNoIG11c3QgYmUgbW91bnRlZCBvbmNlIGF0XG4gKiB0aGUgYXBwIHJvb3QpLiBVc2VyIHBpY2tpbmcgY29uZmlybSBvciBjYW5jZWwgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBFc2NhcGUsIGJhY2tkcm9wIGNsaWNrLCBhbmQgZXhwbGljaXQgYC5kaXNtaXNzKClgIHJlc29sdmUgZmFsc2UuXG4gKi9cblxuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Db25maXJtRGlhbG9nLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCB7IE1vZGFsIH0gZnJvbSBcIi4vTW9kYWwudHN4XCI7XG5cbnR5cGUgQ29uZmlybVJlcXVlc3QgPSB7XG4gIGlkOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGJvZHk/OiBzdHJpbmc7XG4gIGRhbmdlcj86IGJvb2xlYW47XG4gIGNvbmZpcm1MYWJlbD86IHN0cmluZztcbiAgY2FuY2VsTGFiZWw/OiBzdHJpbmc7XG4gIHJlc29sdmU6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbn07XG5cbmNvbnN0IHBlbmRpbmcgPSBzaWduYWw8Q29uZmlybVJlcXVlc3QgfCBudWxsPihudWxsKTtcbmNvbnN0IGlzT3BlbiA9IHNpZ25hbChmYWxzZSk7XG5sZXQgbmV4dElkID0gMDtcblxuZXhwb3J0IHR5cGUgQ29uZmlybU9wdGlvbnMgPSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGJvZHk/OiBzdHJpbmc7XG4gIGRhbmdlcj86IGJvb2xlYW47XG4gIGNvbmZpcm1MYWJlbD86IHN0cmluZztcbiAgY2FuY2VsTGFiZWw/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY29uZmlybShvcHRpb25zOiBDb25maXJtT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUpID0+IHtcbiAgICBuZXh0SWQgKz0gMTtcbiAgICBwZW5kaW5nLnZhbHVlID0ge1xuICAgICAgaWQ6IG5leHRJZCxcbiAgICAgIHRpdGxlOiBvcHRpb25zLnRpdGxlLFxuICAgICAgYm9keTogb3B0aW9ucy5ib2R5LFxuICAgICAgZGFuZ2VyOiBvcHRpb25zLmRhbmdlcixcbiAgICAgIGNvbmZpcm1MYWJlbDogb3B0aW9ucy5jb25maXJtTGFiZWwsXG4gICAgICBjYW5jZWxMYWJlbDogb3B0aW9ucy5jYW5jZWxMYWJlbCxcbiAgICAgIHJlc29sdmUsXG4gICAgfTtcbiAgICBpc09wZW4udmFsdWUgPSB0cnVlO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xvc2UocmVzdWx0OiBib29sZWFuKTogdm9pZCB7XG4gIGNvbnN0IGN1cnJlbnQgPSBwZW5kaW5nLnZhbHVlO1xuICBpZiAoIWN1cnJlbnQpIHJldHVybjtcbiAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gIHBlbmRpbmcudmFsdWUgPSBudWxsO1xuICBjdXJyZW50LnJlc29sdmUocmVzdWx0KTtcbn1cblxuLyoqIFJlbmRlcnMgdGhlIGFjdGl2ZSBjb25maXJtIGRpYWxvZy4gTW91bnQgb25jZSBuZWFyIHRoZSBhcHAgcm9vdC4gKi9cbmZ1bmN0aW9uIEhvc3QoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgY29uc3QgY3VycmVudCA9IHBlbmRpbmcudmFsdWU7XG4gIGlmICghY3VycmVudCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiAoXG4gICAgPE1vZGFsLlJvb3Qgd2hlbj17aXNPcGVufSBvbkNsb3NlPXsoKSA9PiBjbG9zZShmYWxzZSl9PlxuICAgICAgPE1vZGFsLkJhY2tkcm9wIC8+XG4gICAgICA8TW9kYWwuQ29udGVudD5cbiAgICAgICAgPE1vZGFsLkhlYWRlcj5cbiAgICAgICAgICA8TW9kYWwuVGl0bGU+e2N1cnJlbnQudGl0bGV9PC9Nb2RhbC5UaXRsZT5cbiAgICAgICAgPC9Nb2RhbC5IZWFkZXI+XG4gICAgICAgIHtjdXJyZW50LmJvZHkgPyA8TW9kYWwuQm9keT57Y3VycmVudC5ib2R5fTwvTW9kYWwuQm9keT4gOiBudWxsfVxuICAgICAgICA8TW9kYWwuRm9vdGVyPlxuICAgICAgICAgIDxMYXlvdXRcbiAgICAgICAgICAgIGNvbHVtbnM9XCJhdXRvIGF1dG9cIlxuICAgICAgICAgICAgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCJcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50PVwiZW5kXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc1tcImFjdGlvbnNcIl19XG4gICAgICAgICAgICBkYXRhLXBvbGx5LWNvbmZpcm0tYWN0aW9uc1xuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiY2FuY2VsXCJdfVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgICAgICAgICAgZGF0YS1wb2xseS1jb25maXJtLWNhbmNlbFxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjbG9zZShmYWxzZSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtjdXJyZW50LmNhbmNlbExhYmVsID8/IFwiQ2FuY2VsXCJ9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPXtjdXJyZW50LmRhbmdlciA/IGNsYXNzZXNbXCJjb25maXJtRGFuZ2VyXCJdIDogY2xhc3Nlc1tcImNvbmZpcm1cIl19XG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgICAgICAgZGF0YS1wb2xseS1pbnRlcmFjdGl2ZVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LWNvbmZpcm0tb2tcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2xvc2UodHJ1ZSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtjdXJyZW50LmNvbmZpcm1MYWJlbCA/PyBcIk9LXCJ9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9Nb2RhbC5Gb290ZXI+XG4gICAgICA8L01vZGFsLkNvbnRlbnQ+XG4gICAgPC9Nb2RhbC5Sb290PlxuICApO1xufVxuXG5leHBvcnQgY29uc3QgQ29uZmlybURpYWxvZyA9IHsgSG9zdCwgY29uZmlybSB9O1xuIiwKICAgICIvKipcbiAqIEZpbGVJbnB1dCDigJQgYSBzdHlsZWQgdHJpZ2dlciBmb3IgdGhlIG5hdGl2ZSBmaWxlIHBpY2tlci5cbiAqXG4gKiBBIGZpbGUgaXMgYSBiaW5hcnkgb2JqZWN0OiBpdCBjYW5ub3QgcmlkZSBhIGBkYXRhLWFjdGlvbmAgYXR0cmlidXRlXG4gKiB0aGUgd2F5IGEgc3RyaW5nIHZhbHVlIGRvZXMsIHNvIEZpbGVJbnB1dCBpcyB0aGUgb25lIGlucHV0IHByaW1pdGl2ZVxuICogdGhhdCB0YWtlcyBhIGNhbGxiYWNrLiBgb25GaWxlc2AgZmlyZXMgd2l0aCB0aGUgY2hvc2VuIEZpbGVMaXN0LiBUaGVcbiAqIG5hdGl2ZSA8aW5wdXQgdHlwZT1cImZpbGVcIj4gc3RheXMgaW4gdGhlIERPTSDigJQgdmlzdWFsbHkgaGlkZGVuIGluc2lkZVxuICogdGhlIDxsYWJlbD4g4oCUIHNvIHRoZSB3aG9sZSBjb250cm9sIG9wZW5zIHRoZSBwaWNrZXIgYW5kIHJlbWFpbnNcbiAqIGtleWJvYXJkLWFjY2Vzc2libGUgKHBvbGx5IzEzNSkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9GaWxlSW5wdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRQcm9wcyA9IHtcbiAgLyoqIEZpcmVkIHdpdGggdGhlIGNob3NlbiBmaWxlcyB3aGVuZXZlciB0aGUgc2VsZWN0aW9uIGNoYW5nZXMuICovXG4gIG9uRmlsZXM6IChmaWxlczogRmlsZUxpc3QpID0+IHZvaWQ7XG4gIC8qKiBWaXNpYmxlIHRyaWdnZXIgdGV4dC4gRGVmYXVsdDogJ0Nob29zZSBmaWxlJy4gKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBgYWNjZXB0YCBmaWx0ZXIgZm9yd2FyZGVkIHRvIHRoZSBuYXRpdmUgaW5wdXQgKGUuZy4gJ2ltYWdlLyonKS4gKi9cbiAgYWNjZXB0Pzogc3RyaW5nO1xuICAvKiogQWxsb3cgc2VsZWN0aW5nIG1vcmUgdGhhbiBvbmUgZmlsZS4gKi9cbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gRmlsZUlucHV0KHByb3BzOiBGaWxlSW5wdXRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBvbkZpbGVzLCBsYWJlbCA9IFwiQ2hvb3NlIGZpbGVcIiwgYWNjZXB0LCBtdWx0aXBsZSwgZGlzYWJsZWQsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChlOiBKU1guVGFyZ2V0ZWRFdmVudDxIVE1MSW5wdXRFbGVtZW50Pik6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHsgZmlsZXMgfSA9IGUuY3VycmVudFRhcmdldDtcbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkgb25GaWxlcyhmaWxlcyk7XG4gIH07XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImZpbGVJbnB1dFwiXV07XG4gIGlmIChkaXNhYmxlZCkgcGFydHMucHVzaChjbGFzc2VzW1wiZGlzYWJsZWRcIl0pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8bGFiZWwgaWQ9e2lkfSBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfSBkYXRhLXBvbGx5LXVpIGRhdGEtcG9sbHktZmlsZS1pbnB1dD5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wibmF0aXZlXCJdfVxuICAgICAgICBhY2NlcHQ9e2FjY2VwdH1cbiAgICAgICAgbXVsdGlwbGU9e211bHRpcGxlfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAvPlxuICAgICAgPHNwYW4+e2xhYmVsfTwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEh0bWwg4oCUIHJlbmRlciB0cnVzdGVkLCBhbHJlYWR5LXNhbml0aXNlZCByYXcgbWFya3VwLlxuICpcbiAqIFRoZSBkZWxpYmVyYXRlIGVzY2FwZSBoYXRjaCBmb3IgdGhlIHJhcmUgdGhpbmcgcG9sbHktdWkgY2Fubm90XG4gKiBleHByZXNzOiBhIGxvY2FsbHkgZ2VuZXJhdGVkLCBhbHJlYWR5LXNhZmUgU1ZHIChhIFFSIGNvZGUpLCBhXG4gKiBwcmUtcmVuZGVyZWQgZGlhZ3JhbS4gVGhlIGNhbGxlciBvd25zIHNhZmV0eSDigJQgYGh0bWxgIGdvZXMgc3RyYWlnaHRcbiAqIGludG8gYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCwgc28gaXQgTVVTVCBiZSB0cnVzdGVkIG9yIHNhbml0aXNlZFxuICogZmlyc3QuIEZvciB1bnRydXN0ZWQgbWFya2Rvd24gdXNlIGByZW5kZXJNYXJrZG93bmAsIHdoaWNoIHNhbml0aXNlcztcbiAqIGZvciBhbnl0aGluZyBhIHByaW1pdGl2ZSBhbHJlYWR5IGNvdmVycywgdXNlIHRoZSBwcmltaXRpdmUuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5cbmV4cG9ydCB0eXBlIEh0bWxQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIC8qKiBUcnVzdGVkLCBhbHJlYWR5LXNhbml0aXNlZCBIVE1MLiBUaGUgY2FsbGVyIG93bnMgaXRzIHNhZmV0eS4gKi9cbiAgaHRtbDogc3RyaW5nO1xuICAvKiogUG9seW1vcnBoaWMgd3JhcHBlciBlbGVtZW50IChkaXYsIHNwYW4sIGZpZ3VyZSwg4oCmKS4gRGVmYXVsdHMgdG8gJ2RpdicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEh0bWwocHJvcHM6IEh0bWxQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBodG1sLCBhcyA9IFwiZGl2XCIsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KGFzLCB7XG4gICAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKi90aXRsZSBmaXJzdDsgdGhlIHByaW1pdGl2ZSdzIG93blxuICAgIC8vIGF0dHJpYnV0ZXMgYmVsb3cgd2luIG9uIGFueSBjb2xsaXNpb24uXG4gICAgLi4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKSxcbiAgICBpZCxcbiAgICBjbGFzczogY2xhc3NOYW1lLFxuICAgIFwiZGF0YS1wb2xseS11aVwiOiB0cnVlLFxuICAgIFwiZGF0YS1wb2xseS1odG1sXCI6IHRydWUsXG4gICAgLy8gbm9zZW1ncmVwOiB0eXBlc2NyaXB0LnJlYWN0LnNlY3VyaXR5LmF1ZGl0LnJlYWN0LWRhbmdlcm91c2x5c2V0aW5uZXJodG1sLnJlYWN0LWRhbmdlcm91c2x5c2V0aW5uZXJodG1sIOKAlCB0aGlzIHByaW1pdGl2ZSBJUyB0aGUgZG9jdW1lbnRlZCB0cnVzdGVkLW1hcmt1cCBlc2NhcGUgaGF0Y2g7IHRoZSBjYWxsZXIgb3ducyBzYW5pdGlzYXRpb24gKHNlZSBtb2R1bGUgZG9jcykuXG4gICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBodG1sIH0sXG4gIH0pO1xufVxuIiwKICAgICIvKipcbiAqIExpbmsg4oCUIHRva2VuLXN0eWxlZCBuYXZpZ2F0aW9uYWwgYW5jaG9yLlxuICpcbiAqIFRoZSBwcmltaXRpdmUgZm9yIHBsYWluIGh5cGVybGlua3M6IGh1YiBhcHAtZ3JpZCBjYXJkcywgYSBmaWxlXG4gKiBkb3dubG9hZCwgYW4gZXh0ZXJuYWwgcmVmZXJlbmNlLiA8QnV0dG9uIGhyZWY+IGlzIGZvciBsaW5rLXNoYXBlZFxuICogQlVUVE9OUyDigJQgYSBjYWxsIHRvIGFjdGlvbiB3ZWFyaW5nIGJ1dHRvbiBjaHJvbWU7IDxMaW5rPiBpcyBmb3JcbiAqIGlubGluZSwgdGV4dHVhbCBsaW5rcyB0aGF0IHJlYWQgYXMgbGlua3MuIGBleHRlcm5hbGAgb3BlbnMgYSBuZXcgdGFiXG4gKiB3aXRoIGByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJgOyBgZG93bmxvYWRgIG9mZmVycyB0aGUgdGFyZ2V0IGFzIGFcbiAqIGZpbGUgKGFuIGVtcHR5IHN0cmluZyBrZWVwcyB0aGUgcmVzb3VyY2UncyBvd24gZmlsZW5hbWUpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0xpbmsubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBMaW5rUHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGhyZWY6IHN0cmluZztcbiAgLyoqIE9wZW4gaW4gYSBuZXcgdGFiIHdpdGggcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiLiAqL1xuICBleHRlcm5hbD86IGJvb2xlYW47XG4gIC8qKiBPZmZlciB0aGUgaHJlZiBhcyBhIGRvd25sb2FkOyBhbiBlbXB0eSBzdHJpbmcga2VlcHMgaXRzIGZpbGVuYW1lLiAqL1xuICBkb3dubG9hZD86IHN0cmluZztcbiAgLyoqIERyb3AgdGhlIHVuZGVybGluZSB1bnRpbCBob3ZlciDigJQgZm9yIGxpbmsgZ3JpZHMgYW5kIGNhcmQgbGlua3MuICovXG4gIHN1YnRsZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gTGluayhwcm9wczogTGlua1Byb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCBocmVmLCBleHRlcm5hbCwgZG93bmxvYWQsIHN1YnRsZSwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImxpbmtcIl1dO1xuICBpZiAoc3VidGxlKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJzdWJ0bGVcIl0pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgey4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyl9XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgaHJlZj17aHJlZn1cbiAgICAgIHRhcmdldD17ZXh0ZXJuYWwgPyBcIl9ibGFua1wiIDogdW5kZWZpbmVkfVxuICAgICAgcmVsPXtleHRlcm5hbCA/IFwibm9vcGVuZXIgbm9yZWZlcnJlclwiIDogdW5kZWZpbmVkfVxuICAgICAgZG93bmxvYWQ9e2Rvd25sb2FkfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1saW5rXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBPdXRwdXQg4oCUIHJlYWQtb25seSwgbXVsdGktbGluZSBkaWFnbm9zdGljIHRleHQuXG4gKlxuICogRm9yIHByb2dyYW0gb3V0cHV0IGEgY29uc3VtZXIgbXVzdCBTSE9XIGJ1dCBub3QgZWRpdDogYSBtZXNoLXN0YXRlXG4gKiBzbmFwc2hvdCwgYSBwZXItcGVlciBzeW5jIHRhYmxlLCBhIHJlY292ZXJ5IGJsb2IuIDxUZXh0SW5wdXQ+IGFuZFxuICogPEFjdGlvbklucHV0PiBhcmUgc2luZ2xlLWxpbmUgYW5kIGVkaXRhYmxlOyA8Q29kZT4gaXMgZm9yIGNvZGVcbiAqIHNhbXBsZXMgYW5kIG5ldmVyIHdyYXBzLiA8T3V0cHV0PiByZW5kZXJzIGEgbW9ub3NwYWNlIDxwcmU+IHRoYXRcbiAqIHdyYXBzIGxvbmcgbGluZXMgYnkgZGVmYXVsdCDigJQgYSBkaWFnbm9zdGljIGR1bXAgc2hvdWxkIHN0YXkgb25cbiAqIHNjcmVlbiDigJQgd2l0aCBgc2Nyb2xsYCB0byBzd2l0Y2ggdG8gYSBob3Jpem9udGFsIHNjcm9sbGJhciBpbnN0ZWFkLlxuICpcbiAqIEl0IGNhcnJpZXMgdGhlIHBvbGx5IzEyNSBwYXNzdGhyb3VnaCBzdXJmYWNlLCBzbyBhIGBkYXRhLWFjdGlvbmBcbiAqIGZvciBhIHRhcC10by1zZWxlY3QtYWxsIGdlc3R1cmUgcmlkZXMgc3RyYWlnaHQgb250byB0aGUgPHByZT5cbiAqIChwb2xseSMxMzUpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL091dHB1dC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIE91dHB1dFByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICAvKiogU2Nyb2xsIGxvbmcgdW5icmVha2FibGUgbGluZXMgaG9yaXpvbnRhbGx5IGluc3RlYWQgb2Ygd3JhcHBpbmcuICovXG4gIHNjcm9sbD86IGJvb2xlYW47XG4gIC8qKiBNYWtlIHRoZSBibG9jayBmb2N1c2FibGUg4oCUIHBhaXIgd2l0aCBhIGBkYXRhLWFjdGlvbmAgdGFwIGdlc3R1cmUuICovXG4gIHRhYkluZGV4PzogbnVtYmVyO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIE91dHB1dChwcm9wczogT3V0cHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIHNjcm9sbCwgdGFiSW5kZXgsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJvdXRwdXRcIl1dO1xuICBpZiAoc2Nyb2xsKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJzY3JvbGxcIl0pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8cHJlXG4gICAgICB7Li4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKX1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICB0YWJJbmRleD17dGFiSW5kZXh9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LW91dHB1dFxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L3ByZT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBTZWxlY3Qg4oCUIGRyb3Bkb3duIG9mIG9wdGlvbnMgd2l0aCBzaW5nbGUtIG9yIG11bHRpLXNlbGVjdCBzZW1hbnRpY3MuXG4gKlxuICogQ29tcG9zZXMgRHJvcGRvd24gZm9yIHRoZSBtZW51IGFuZCBhIG5hdGl2ZSBjaGVja2JveCBpbiBlYWNoIG9wdGlvblxuICogcm93IGZvciBtdWx0aS1zZWxlY3QuIFRoZSBgc2VsZWN0ZWRgIHN0YXRlIGlzIGEgU2lnbmFsPFNldDxUPj47XG4gKiBzaW5nbGUtc2VsZWN0IHJlcGxhY2VzIHRoZSBzZXQsIG11bHRpLXNlbGVjdCB0b2dnbGVzIG1lbWJlcnNoaXAuXG4gKiBNdWx0aS1zZWxlY3QgbW9kZSBhbHNvIHNob3dzIFNlbGVjdCBBbGwgLyBDbGVhciBhY3Rpb24gYnV0dG9ucyBhdFxuICogdGhlIHRvcCBvZiB0aGUgbWVudS4gU2luZ2xlLXNlbGVjdCBtb2RlIGNhbiBvcHQgaW50byBgY2xlYXJhYmxlYCxcbiAqIHdoaWNoIHByZXBlbmRzIGEgcGxhY2Vob2xkZXItbGFiZWxsZWQgb3B0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAqIHNlbGVjdGlvbiB0byBlbXB0eSDigJQgZm9yIFwiQW55IOKAplwiIGZpbHRlciBzZW1hbnRpY3MuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBTaWduYWwsIHVzZUNvbXB1dGVkLCB1c2VTaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IERyb3Bkb3duIH0gZnJvbSBcIi4vRHJvcGRvd24udHN4XCI7XG5pbXBvcnQgeyBTZWxlY3RUcmlnZ2VyIH0gZnJvbSBcIi4vaW50ZXJuYWwvc2VsZWN0LXRyaWdnZXIudHN4XCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9TZWxlY3QubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBTZWxlY3RPcHRpb248VCA9IHN0cmluZz4gPSB7IHZhbHVlOiBUOyBsYWJlbDogc3RyaW5nIH07XG5cbmV4cG9ydCB0eXBlIFNlbGVjdFByb3BzPFQgPSBzdHJpbmc+ID0ge1xuICBvcHRpb25zOiBTZWxlY3RPcHRpb248VD5bXTtcbiAgc2VsZWN0ZWQ6IFNpZ25hbDxTZXQ8VD4+O1xuICBsYWJlbD86IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIG11bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNpbmdsZS1zZWxlY3Qgb25seTogcHJlcGVuZCBhbiBvcHRpb24gbGFiZWxsZWQgd2l0aCB0aGUgcGxhY2Vob2xkZXJcbiAgICogdGhhdCByZXR1cm5zIHRoZSBzZWxlY3Rpb24gdG8gZW1wdHkuIFdpdGhvdXQgaXQsIHBpY2tpbmcgYW4gb3B0aW9uXG4gICAqIGlzIGEgdHJhcCDigJQgbm90aGluZyBpbiB0aGUgbGlzdCBsZWFkcyBiYWNrIHRvIFwiYW55XCIuIFVzZSBpdCBmb3JcbiAgICogb3B0aW9uYWwgZmlsdGVycyAoXCJBbnkgc3RhZ2VcIiksIG5vdCByZXF1aXJlZCBmb3JtIGZpZWxkc1xuICAgKiAoXCJTZWxlY3QgYSB0ZWFtXCIpLiBJZ25vcmVkIGluIG11bHRpLXNlbGVjdCwgd2hpY2ggaGFzIENsZWFyLlxuICAgKi9cbiAgY2xlYXJhYmxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogQXBwbHkgYSBjb21mb3J0YWJsZSBtaW5pbXVtIHdpZHRoIHRvIHRoZSB0cmlnZ2VyLiBEZWZhdWx0OiBzaXplcyB0byBjb250ZW50LiAqL1xuICB3aWRlPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmNvbnN0IE1VTFRJX1NFTEVDVF9MQUJFTF9USFJFU0hPTEQgPSAyO1xuXG5mdW5jdGlvbiBmb3JtYXRTZWxlY3RlZDxUPihcbiAgb3B0aW9uczogU2VsZWN0T3B0aW9uPFQ+W10sXG4gIHNlbGVjdGVkOiBTZXQ8VD4sXG4gIG11bHRpU2VsZWN0OiBib29sZWFuXG4pOiBzdHJpbmcge1xuICBpZiAoc2VsZWN0ZWQuc2l6ZSA9PT0gMCkgcmV0dXJuIFwiXCI7XG4gIGlmIChtdWx0aVNlbGVjdCAmJiBzZWxlY3RlZC5zaXplID4gTVVMVElfU0VMRUNUX0xBQkVMX1RIUkVTSE9MRCkge1xuICAgIHJldHVybiBgJHtzZWxlY3RlZC5zaXplfSBzZWxlY3RlZGA7XG4gIH1cbiAgY29uc3QgbGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSB7XG4gICAgaWYgKHNlbGVjdGVkLmhhcyhvcHQudmFsdWUpKSBsYWJlbHMucHVzaChvcHQubGFiZWwpO1xuICB9XG4gIHJldHVybiBsYWJlbHMuam9pbihcIiwgXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0PFQgPSBzdHJpbmc+KHByb3BzOiBTZWxlY3RQcm9wczxUPik6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIG9wdGlvbnMsXG4gICAgc2VsZWN0ZWQsXG4gICAgbGFiZWwsXG4gICAgcGxhY2Vob2xkZXIgPSBcIlNlbGVjdFxcdTIwMjZcIixcbiAgICBtdWx0aVNlbGVjdCA9IGZhbHNlLFxuICAgIGNsZWFyYWJsZSA9IGZhbHNlLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgd2lkZSA9IGZhbHNlLFxuICAgIGNsYXNzTmFtZSxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGlzT3BlbiA9IHVzZVNpZ25hbChmYWxzZSk7XG5cbiAgY29uc3QgZGlzcGxheVRleHQgPSB1c2VDb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdGV4dCA9IGZvcm1hdFNlbGVjdGVkKG9wdGlvbnMsIHNlbGVjdGVkLnZhbHVlLCBtdWx0aVNlbGVjdCk7XG4gICAgcmV0dXJuIHRleHQubGVuZ3RoID4gMCA/IHRleHQgOiBwbGFjZWhvbGRlcjtcbiAgfSk7XG5cbiAgY29uc3QgaXNFbXB0eSA9IHVzZUNvbXB1dGVkKCgpID0+IHNlbGVjdGVkLnZhbHVlLnNpemUgPT09IDApO1xuXG4gIGNvbnN0IGhhbmRsZU9wdGlvbkNsaWNrID0gKHZhbHVlOiBUKTogdm9pZCA9PiB7XG4gICAgaWYgKG11bHRpU2VsZWN0KSB7XG4gICAgICBjb25zdCBuZXh0ID0gbmV3IFNldChzZWxlY3RlZC52YWx1ZSk7XG4gICAgICBpZiAobmV4dC5oYXModmFsdWUpKSBuZXh0LmRlbGV0ZSh2YWx1ZSk7XG4gICAgICBlbHNlIG5leHQuYWRkKHZhbHVlKTtcbiAgICAgIHNlbGVjdGVkLnZhbHVlID0gbmV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KFt2YWx1ZV0pO1xuICAgICAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdEFsbCA9ICgpOiB2b2lkID0+IHtcbiAgICBzZWxlY3RlZC52YWx1ZSA9IG5ldyBTZXQob3B0aW9ucy5tYXAoKG8pID0+IG8udmFsdWUpKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDbGVhciA9ICgpOiB2b2lkID0+IHtcbiAgICBzZWxlY3RlZC52YWx1ZSA9IG5ldyBTZXQoKTtcbiAgfTtcblxuICAvLyBUaGUgY2xlYXIgb3B0aW9uIGJlaGF2ZXMgbGlrZSBhIG5vcm1hbCBzZWxlY3Rpb246IHBpY2sgaXQsIG1lbnUgY2xvc2VzLlxuICBjb25zdCBoYW5kbGVDbGVhck9wdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICBzZWxlY3RlZC52YWx1ZSA9IG5ldyBTZXQoKTtcbiAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgfTtcblxuICBjb25zdCB0cmlnZ2VyUGFydHMgPSBbY2xhc3Nlc1tcInRyaWdnZXJcIl0gPz8gXCJcIl07XG4gIGlmIChpc0VtcHR5LnZhbHVlKSB0cmlnZ2VyUGFydHMucHVzaChjbGFzc2VzW1wicGxhY2Vob2xkZXJcIl0gPz8gXCJcIik7XG4gIGlmICh3aWRlKSB0cmlnZ2VyUGFydHMucHVzaChjbGFzc2VzW1widHJpZ2dlcldpZGVcIl0gPz8gXCJcIik7XG4gIGNvbnN0IHRyaWdnZXJDbGFzcyA9IHRyaWdnZXJQYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG4gIGNvbnN0IHRyaWdnZXJDb250ZW50ID0gPFNlbGVjdFRyaWdnZXIgbGFiZWw9e2Rpc3BsYXlUZXh0LnZhbHVlfSAvPjtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wic2VsZWN0XCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGlkPXtpZH0gY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LXNlbGVjdD5cbiAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibGFiZWxcIl19PntsYWJlbH08L3NwYW4+fVxuICAgICAgPERyb3Bkb3duXG4gICAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgICB0cmlnZ2VyPXt0cmlnZ2VyQ29udGVudH1cbiAgICAgICAgdHJpZ2dlckNsYXNzTmFtZT17dHJpZ2dlckNsYXNzfVxuICAgICAgICB0cmlnZ2VyRGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICB0cmlnZ2VyVGl0bGU9e2Rpc3BsYXlUZXh0LnZhbHVlfVxuICAgICAgICBtdWx0aVNlbGVjdD17bXVsdGlTZWxlY3R9XG4gICAgICA+XG4gICAgICAgIHttdWx0aVNlbGVjdCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzcz17Y2xhc3Nlc1tcImFjdGlvbnNcIl19PlxuICAgICAgICAgICAgPExheW91dCBjb2x1bW5zPVwiMWZyIDFmclwiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz17Y2xhc3Nlc1tcImFjdGlvbkJ0blwiXX0gb25DbGljaz17aGFuZGxlU2VsZWN0QWxsfT5cbiAgICAgICAgICAgICAgICBTZWxlY3QgQWxsXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz17Y2xhc3Nlc1tcImFjdGlvbkJ0blwiXX0gb25DbGljaz17aGFuZGxlQ2xlYXJ9PlxuICAgICAgICAgICAgICAgIENsZWFyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHshbXVsdGlTZWxlY3QgJiYgY2xlYXJhYmxlICYmIChcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD17aXNFbXB0eS52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgICAgICAgY2xhc3M9e1xuICAgICAgICAgICAgICBpc0VtcHR5LnZhbHVlXG4gICAgICAgICAgICAgICAgPyBgJHtjbGFzc2VzW1wib3B0aW9uXCJdfSAke2NsYXNzZXNbXCJvcHRpb25TZWxlY3RlZFwiXX1gXG4gICAgICAgICAgICAgICAgOiBjbGFzc2VzW1wib3B0aW9uXCJdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhLXBvbGx5LXNlbGVjdC1jbGVhclxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xlYXJPcHRpb259XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3BsYWNlaG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgKX1cbiAgICAgICAge29wdGlvbnMubWFwKChvcHQpID0+IHtcbiAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gc2VsZWN0ZWQudmFsdWUuaGFzKG9wdC52YWx1ZSk7XG4gICAgICAgICAgY29uc3Qgb3B0Q2xhc3MgPSBpc1NlbGVjdGVkXG4gICAgICAgICAgICA/IGAke2NsYXNzZXNbXCJvcHRpb25cIl19ICR7Y2xhc3Nlc1tcIm9wdGlvblNlbGVjdGVkXCJdfWBcbiAgICAgICAgICAgIDogY2xhc3Nlc1tcIm9wdGlvblwiXTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e1N0cmluZyhvcHQudmFsdWUpfVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzU2VsZWN0ZWQgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICAgICAgY2xhc3M9e29wdENsYXNzfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVPcHRpb25DbGljayhvcHQudmFsdWUpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bXVsdGlTZWxlY3QgJiYgKFxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPXtjbGFzc2VzW1wib3B0aW9uQ2hlY2tcIl19XG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc1NlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICAgICAgICAgICAgcmVhZE9ubHk9e3RydWV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPHNwYW4+e29wdC5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvRHJvcGRvd24+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogU2tlbGV0b24g4oCUIHNoaW1tZXJpbmcgcGxhY2Vob2xkZXIgZm9yIGxvYWRpbmcgc3RhdGVzLlxuICpcbiAqIFRocmVlIHZhcmlhbnRzOiB0ZXh0IChmdWxsLXdpZHRoLCAxZW0gdGFsbCksIHJlY3QgKGZ1bGwtd2lkdGgsIDEwMHB4XG4gKiB0YWxsKSwgY2lyY2xlICg0MHg0MCkuIEEgQ1NTIGdyYWRpZW50IGFuaW1hdGVzIGxlZnQtdG8tcmlnaHQgb3ZlclxuICogMS41cy4gYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gIHplcm9lcyB0aGUgYW5pbWF0aW9uIHZpYSB0aGUgdG9rZW5cbiAqIHN5c3RlbS4gQ29uc3VtZXJzIHNpemUgdmlhIHdpZHRoL2hlaWdodCBwcm9wcyAocHggbnVtYmVycyBvciBDU1NcbiAqIHN0cmluZ3MpOyBkZWZhdWx0IHNpemluZyBjb21lcyBmcm9tIHRoZSB2YXJpYW50LlxuICovXG5cbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vU2tlbGV0b24ubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBTa2VsZXRvblZhcmlhbnQgPSBcInRleHRcIiB8IFwicmVjdFwiIHwgXCJjaXJjbGVcIjtcblxuZXhwb3J0IHR5cGUgU2tlbGV0b25Qcm9wcyA9IHtcbiAgdmFyaWFudD86IFNrZWxldG9uVmFyaWFudDtcbiAgd2lkdGg/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGhlaWdodD86IHN0cmluZyB8IG51bWJlcjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gcmVzb2x2ZVNpemUodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSByZXR1cm4gYCR7dmFsdWV9cHhgO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHZhcmlhbnRDbGFzcyh2YXJpYW50OiBTa2VsZXRvblZhcmlhbnQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFyaWFudCA9PT0gXCJjaXJjbGVcIikgcmV0dXJuIGNsYXNzZXNbXCJjaXJjbGVcIl07XG4gIGlmICh2YXJpYW50ID09PSBcInJlY3RcIikgcmV0dXJuIGNsYXNzZXNbXCJyZWN0XCJdO1xuICByZXR1cm4gY2xhc3Nlc1tcInRleHRcIl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTa2VsZXRvbihwcm9wczogU2tlbGV0b25Qcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyB2YXJpYW50ID0gXCJ0ZXh0XCIsIHdpZHRoLCBoZWlnaHQsIGNsYXNzTmFtZSB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc3R5bGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgY29uc3QgdyA9IHJlc29sdmVTaXplKHdpZHRoKTtcbiAgY29uc3QgaCA9IHJlc29sdmVTaXplKGhlaWdodCk7XG4gIGlmICh3ICE9PSB1bmRlZmluZWQpIHN0eWxlW1wid2lkdGhcIl0gPSB3O1xuICBpZiAoaCAhPT0gdW5kZWZpbmVkKSBzdHlsZVtcImhlaWdodFwiXSA9IGg7XG5cbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGJhc2UgPSBjbGFzc2VzW1wic2tlbGV0b25cIl07XG4gIGlmIChiYXNlKSBwYXJ0cy5wdXNoKGJhc2UpO1xuICBjb25zdCB2Q2xhc3MgPSB2YXJpYW50Q2xhc3ModmFyaWFudCk7XG4gIGlmICh2Q2xhc3MpIHBhcnRzLnB1c2godkNsYXNzKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPXtwYXJ0cy5qb2luKFwiIFwiKX1cbiAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktc2tlbGV0b249e3ZhcmlhbnR9XG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgIC8+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogVGFicyDigJQgaG9yaXpvbnRhbCBuYXYgd2l0aCBhY3RpdmUtdGFiIGFjY2VudC5cbiAqXG4gKiBFYWNoIGJ1dHRvbiBjYXJyaWVzIGBkYXRhLWFjdGlvbmAgKHRoZSBjb25zdW1lci1wcm92aWRlZCBhY3Rpb24gbmFtZSlcbiAqIGFuZCBgZGF0YS1hY3Rpb24taWQ9e3RhYi5pZH1gIHNvIHRoZSBldmVudCBkZWxlZ2F0b3IgcmVzb2x2ZXMgdGhlXG4gKiBhY3RpdmF0ZWQgdGFiLiBUaGUgYWN0aXZlIHRhYiBnZXRzIGBhcmlhLWN1cnJlbnQ9XCJwYWdlXCJgIGFuZCBhXG4gKiBib3R0b20tYm9yZGVyIGFjY2VudC4gVGhlIG5hdiBzY3JvbGxzIGhvcml6b250YWxseSB3aXRoIGEgaGlkZGVuXG4gKiBzY3JvbGxiYXIgZm9yIG92ZXJmbG93LiBJbnRlcm5hbCBhcnJhbmdlbWVudCB1c2VzIDxMYXlvdXQ+LCBwYWNrZWQgdG9cbiAqIHRoZSBpbmxpbmUgc3RhcnQ6IHRoZSBncmlkIGlzIDEwMCUgd2lkZSwgc28gd2l0aG91dCBqdXN0aWZ5Q29udGVudCB0aGVcbiAqIGBhdXRvYCB0cmFja3Mgc3RyZXRjaCBhbmQgZm91ciB0YWJzIHNwcmVhZCBhY3Jvc3MgdGhlIHdob2xlIGNvbnRhaW5lci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1RhYnMubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBUYWIgPSB7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IGRpc2FibGVkPzogYm9vbGVhbiB9O1xuXG5leHBvcnQgdHlwZSBUYWJzUHJvcHMgPSB7XG4gIHRhYnM6IFRhYltdO1xuICBhY3RpdmVUYWI6IHN0cmluZztcbiAgYWN0aW9uPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBUYWJzKHByb3BzOiBUYWJzUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgdGFicywgYWN0aXZlVGFiLCBhY3Rpb24sIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1widGFic1wiXSA/PyBcIlwiXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxuYXZcbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBhcmlhLWxhYmVsPXtwcm9wc1tcImFyaWEtbGFiZWxcIl19XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXRhYnNcbiAgICA+XG4gICAgICA8TGF5b3V0XG4gICAgICAgIGNvbHVtbnM9e2ByZXBlYXQoJHt0YWJzLmxlbmd0aH0sIGF1dG8pYH1cbiAgICAgICAgZ2FwPVwiMFwiXG4gICAgICAgIGFsaWduSXRlbXM9XCJlbmRcIlxuICAgICAgICBqdXN0aWZ5Q29udGVudD1cInN0YXJ0XCJcbiAgICAgID5cbiAgICAgICAge3RhYnMubWFwKCh0YWIpID0+IHtcbiAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVRhYiA9PT0gdGFiLmlkO1xuICAgICAgICAgIGNvbnN0IHRhYkNsYXNzID0gaXNBY3RpdmUgPyBgJHtjbGFzc2VzW1widGFiXCJdfSAke2NsYXNzZXNbXCJhY3RpdmVcIl19YCA6IGNsYXNzZXNbXCJ0YWJcIl07XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAga2V5PXt0YWIuaWR9XG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz17dGFiQ2xhc3N9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXt0YWIuZGlzYWJsZWR9XG4gICAgICAgICAgICAgIGFyaWEtY3VycmVudD17aXNBY3RpdmUgPyBcInBhZ2VcIiA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgZGF0YS1hY3Rpb249e2FjdGlvbn1cbiAgICAgICAgICAgICAgZGF0YS1hY3Rpb24taWQ9e3RhYi5pZH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3RhYi5sYWJlbH1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pfVxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9uYXY+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogVGV4dCDigJQgdHlwb2dyYXBoaWMgcHJpbWl0aXZlIGZvciBzZWNvbmRhcnksIHNpemVkLCBhbmQgc3RhdHVzIGNvcHkuXG4gKlxuICogUmVuZGVycyBzdWJ0aXRsZXMsIGNhcHRpb25zLCBmaWVsZCBsYWJlbHMsIGVtcHR5LXN0YXRlIGNvcHksIGFuZFxuICogZXJyb3Ivd2FybmluZyBtZXNzYWdlcyB3aXRob3V0IHRoZSBjb25zdW1lciByZWFjaGluZyBmb3IgYSBgc3R5bGVgXG4gKiBhdHRyaWJ1dGUgb3IgYSBoYW5kLXJvbGxlZCBjbGFzcy4gYHRvbmVgIG1hcHMgdG8gdGhlIHNlbWFudGljXG4gKiBgLS1wb2xseS10ZXh0LSpgIGFuZCBgLS1wb2xseS1zdGF0dXMtKmAgdG9rZW4gZmFtaWxpZXM7IGBzaXplYCxcbiAqIGB3ZWlnaHRgLCBgaXRhbGljYCwgYW5kIGBsZWFkaW5nYCBjb3ZlciB0aGUgcmVtYWluaW5nIHR5cG9ncmFwaGljXG4gKiBheGVzLiBgYXNgIGtlZXBzIHRoZSBlbGVtZW50IHBvbHltb3JwaGljIHNvIHRoZSBzYW1lIHByaW1pdGl2ZSBiYWNrcyBhXG4gKiA8c3Bhbj4sIDxwPiwgPGxhYmVsPiwgb3IgPGZpZ2NhcHRpb24+LiBBIG5vLXByb3AgPFRleHQ+IGlzIGFuIG9yZGluYXJ5XG4gKiA8c3Bhbj4gYXQgYm9keSBzaXplIGFuZCBkZWZhdWx0IGNvbG91ci5cbiAqXG4gKiBwb2xseSMxMjU6IGFyYml0cmFyeSBgZGF0YS0qYCAvIGBhcmlhLSpgIGF0dHJpYnV0ZXMgYXJlIGZvcndhcmRlZCB0b1xuICogdGhlIHJlbmRlcmVkIGVsZW1lbnQsIHNvIGEgVGV4dCB0aGF0IGFsc28gbmVlZHMgYSB0ZXN0IGhvb2sgb3IgYW5cbiAqIGExMXkgYXR0cmlidXRlIHN0YXlzIGEgc2luZ2xlIGVsZW1lbnQuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9UZXh0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgVGV4dFRvbmUgPSBcImRlZmF1bHRcIiB8IFwibXV0ZWRcIiB8IFwiZGFuZ2VyXCIgfCBcIndhcm5pbmdcIiB8IFwic3VjY2Vzc1wiO1xuZXhwb3J0IHR5cGUgVGV4dFNpemUgPSBcInhzXCIgfCBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgfCBcInhsXCI7XG5leHBvcnQgdHlwZSBUZXh0V2VpZ2h0ID0gXCJub3JtYWxcIiB8IFwibWVkaXVtXCIgfCBcImJvbGRcIjtcbmV4cG9ydCB0eXBlIFRleHRMZWFkaW5nID0gXCJ0aWdodFwiIHwgXCJiYXNlXCIgfCBcImxvb3NlXCI7XG5cbmV4cG9ydCB0eXBlIFRleHRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoc3BhbiwgcCwgbGFiZWwsIGZpZ2NhcHRpb24sIOKApikuIERlZmF1bHRzIHRvICdzcGFuJy4gKi9cbiAgYXM/OiBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG5cbiAgLyoqIENvbG91ciByb2xlLiAnbXV0ZWQnIGRlLWVtcGhhc2lzZXM7ICdkYW5nZXInLyd3YXJuaW5nJy8nc3VjY2VzcydcbiAgICogcmVuZGVyIHN0YXR1cyBjb3B5IGZyb20gdGhlIGAtLXBvbGx5LXN0YXR1cy0qYCB0b2tlbnMuIERlZmF1bHQ6ICdkZWZhdWx0Jy4gKi9cbiAgdG9uZT86IFRleHRUb25lO1xuXG4gIC8qKiBUb2tlbi1iYWNrZWQgZm9udCBzaXplLiBEZWZhdWx0OiBpbmhlcml0IGZyb20gY29udGV4dC4gKi9cbiAgc2l6ZT86IFRleHRTaXplO1xuXG4gIC8qKiBUb2tlbi1iYWNrZWQgZm9udCB3ZWlnaHQuIERlZmF1bHQ6IGluaGVyaXQgZnJvbSBjb250ZXh0LiAqL1xuICB3ZWlnaHQ/OiBUZXh0V2VpZ2h0O1xuXG4gIC8qKiBJdGFsaWMgZW1waGFzaXMg4oCUIGZvciBoaW50cyBhbmQgYXNpZGVzIOKAlCB3aXRob3V0IGFuIGlubGluZSBzdHlsZS4gKi9cbiAgaXRhbGljPzogYm9vbGVhbjtcblxuICAvKiogTGluZS10aHJvdWdoIOKAlCBmb3IgY29tcGxldGVkIHRvZG8gaXRlbXMgYW5kIHN1cGVyc2VkZWQgY29weS4gKi9cbiAgc3RyaWtldGhyb3VnaD86IGJvb2xlYW47XG5cbiAgLyoqIFRva2VuLWJhY2tlZCBsaW5lIGhlaWdodC4gJ2xvb3NlJyBzdWl0cyBtdWx0aS1saW5lIGJvZHkgY29weS4gKi9cbiAgbGVhZGluZz86IFRleHRMZWFkaW5nO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBGb3J3YXJkZWQgc28gPFRleHQgYXM9XCJsYWJlbFwiPiBjYW4gcG9pbnQgYXQgYSBjb250cm9sLiAqL1xuICBodG1sRm9yPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIFRleHQocHJvcHM6IFRleHRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGFzID0gXCJzcGFuXCIsXG4gICAgdG9uZSA9IFwiZGVmYXVsdFwiLFxuICAgIHNpemUsXG4gICAgd2VpZ2h0LFxuICAgIGl0YWxpYyxcbiAgICBzdHJpa2V0aHJvdWdoLFxuICAgIGxlYWRpbmcsXG4gICAgY2xhc3NOYW1lLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInRleHRcIl1dO1xuICBpZiAodG9uZSAhPT0gXCJkZWZhdWx0XCIpIHBhcnRzLnB1c2goY2xhc3Nlc1t0b25lXSk7XG4gIGlmIChzaXplKSBwYXJ0cy5wdXNoKGNsYXNzZXNbc2l6ZV0pO1xuICBpZiAod2VpZ2h0KSBwYXJ0cy5wdXNoKGNsYXNzZXNbd2VpZ2h0XSk7XG4gIGlmIChpdGFsaWMpIHBhcnRzLnB1c2goY2xhc3Nlc1tcIml0YWxpY1wiXSk7XG4gIGlmIChzdHJpa2V0aHJvdWdoKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJzdHJpa2V0aHJvdWdoXCJdKTtcbiAgaWYgKGxlYWRpbmcpIHBhcnRzLnB1c2goY2xhc3Nlc1tsZWFkaW5nXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICBhcyxcbiAgICB7XG4gICAgICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIGZpcnN0OyB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXNcbiAgICAgIC8vIGJlbG93IHdpbiBvbiBhbnkgY29sbGlzaW9uLlxuICAgICAgLi4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKSxcbiAgICAgIGlkLFxuICAgICAgY2xhc3M6IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSxcbiAgICAgIGZvcjogcHJvcHMuaHRtbEZvcixcbiAgICAgIFwiZGF0YS1wb2xseS11aVwiOiB0cnVlLFxuICAgICAgXCJkYXRhLXBvbGx5LXRleHRcIjogdG9uZSxcbiAgICB9LFxuICAgIGNoaWxkcmVuXG4gICk7XG59XG4iLAogICAgIi8qKlxuICogU2hhcmVkIGlucHV0IGExMXkgd2lyaW5nLlxuICpcbiAqIFJldHVybnMgYSBjb21tb24gc2V0IG9mIGF0dHJpYnV0ZXMgdGhhdCBUZXh0SW5wdXQsIEFjdGlvbklucHV0LCBhbmRcbiAqIGFueSBjb25zdW1lci1idWlsdCBpbnB1dCBjYW4gc3BsYXQgb250byBpdHMgbmF0aXZlIGVsZW1lbnQuIEtlZXBzXG4gKiBhcmlhLSogYW5kIGRhdGEtcG9sbHktKiBuYW1lcyBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZmFtaWx5LlxuICovXG5cbmV4cG9ydCB0eXBlIElucHV0QTExeVByb3BzID0ge1xuICBuYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBpbnZhbGlkPzogYm9vbGVhbjtcbiAgZGVzY3JpYmVkQnk/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZElucHV0QTExeShwcm9wczogSW5wdXRBMTF5UHJvcHMpIHtcbiAgY29uc3QgYXR0cnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIFwiZGF0YS1wb2xseS11aVwiOiB0cnVlLFxuICAgIFwiZGF0YS1wb2xseS1pbnB1dFwiOiB0cnVlLFxuICAgIFwiYXJpYS1pbnZhbGlkXCI6IHByb3BzLmludmFsaWQgPyBcInRydWVcIiA6IHVuZGVmaW5lZCxcbiAgICBcImFyaWEtcmVxdWlyZWRcIjogcHJvcHMucmVxdWlyZWQgPyBcInRydWVcIiA6IHVuZGVmaW5lZCxcbiAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogcHJvcHMuZGVzY3JpYmVkQnksXG4gICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICBpZDogcHJvcHMuaWQsXG4gICAgcGxhY2Vob2xkZXI6IHByb3BzLnBsYWNlaG9sZGVyLFxuICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCxcbiAgICByZWFkT25seTogcHJvcHMucmVhZE9ubHksXG4gIH07XG4gIGlmIChwcm9wcy5pbnZhbGlkKSBhdHRyc1tcImRhdGEtc3RhdGVcIl0gPSBcImludmFsaWRcIjtcbiAgcmV0dXJuIGF0dHJzO1xufVxuIiwKICAgICIvKipcbiAqIFRleHRJbnB1dCDigJQgcGFzc2l2ZSwgc2lnbmFsLWZyaWVuZGx5IG5hdGl2ZSBpbnB1dCB3cmFwcGVyLlxuICpcbiAqIERlc2lnbmVkIHRvIGxpdmUgaW5zaWRlIDxBY3Rpb25Gb3JtPi4gUGFzcyBhIHBsYWluIHN0cmluZyBmb3JcbiAqIHVuY29udHJvbGxlZCBtb2RlIChGb3JtRGF0YS1vbi1zdWJtaXQgcGlja3MgdXAgdGhlIHZhbHVlKSBvciBhXG4gKiBTaWduYWw8c3RyaW5nPiBmb3IgY29udHJvbGxlZCBtb2RlLiBFaXRoZXIgd2F5LCBhMTF5IGF0dHJpYnV0ZXMgYXJlXG4gKiB3aXJlZCBieSB0aGUgc2hhcmVkIGlucHV0LWJhc2UsIHRoZSBzdGFibGUgYFtkYXRhLXBvbGx5LWlucHV0XWAgaG9va1xuICogaXMgYXBwbGllZCBmb3Igc3R5bGluZywgYW5kIGBpbnZhbGlkYCBmbGlwcyBgYXJpYS1pbnZhbGlkYCBhbmRcbiAqIGBkYXRhLXN0YXRlPVwiaW52YWxpZFwiYCBmb3IgY29uc3VtZXIgc2VsZWN0b3JzLlxuICpcbiAqIGBpbnB1dFR5cGVgIHNldHMgdGhlIG5hdGl2ZSBzaW5nbGUtbGluZSBpbnB1dCB0eXBlIOKAlCBcInRleHRcIiAoZGVmYXVsdCksXG4gKiBcImVtYWlsXCIsIFwibnVtYmVyXCIsIFwiZGF0ZVwiLCBhbmQgZnJpZW5kcyDigJQgc28gdGhlIGJyb3dzZXIgc3VwcGxpZXMgdGhlXG4gKiByaWdodCBrZXlib2FyZCBhbmQgdmFsaWRhdGlvbi4gYG1pbmAvYG1heGAvYHN0ZXBgIGFwcGx5IHRvIHRoZVxuICogc2luZ2xlLWxpbmUgdmFyaWFudCAoZS5nLiBudW1lcmljIG9yIGRhdGUgYm91bmRzKSBhbmQga2VlcCBmaWx0ZXJcbiAqIGZpZWxkcyBmcm9tIGJlaW5nIHVudmFsaWRhdGVkIGZyZWUgdGV4dC5cbiAqXG4gKiBgZXJyb3JgLCB3aGVuIHN1cHBsaWVkLCByZW5kZXJzIGEgbWVzc2FnZSBiZW5lYXRoIHRoZSBmaWVsZCwgd3JhcHMgdGhlXG4gKiBjb250cm9sIGluIGEgbGFiZWxsZWQgZ3JvdXAsIGFuZCBhdXRvLXdpcmVzIGBhcmlhLWRlc2NyaWJlZGJ5YCBwbHVzIHRoZVxuICogaW52YWxpZCBzdGF0ZSDigJQgbm8gbWFudWFsIGlkIGp1Z2dsaW5nLiBXaXRob3V0IGBlcnJvcmAgdGhlIHByaW1pdGl2ZVxuICogc3RheXMgYSBiYXJlIG5hdGl2ZSBlbGVtZW50LCBleGFjdGx5IGFzIGJlZm9yZSwgc28gY29uc3VtZXJzIHRoYXQgb3duXG4gKiB0aGVpciBvd24gc3Vycm91bmRpbmcgc3RydWN0dXJlIGFyZSB1bmFmZmVjdGVkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VJZCB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IGJ1aWxkSW5wdXRBMTF5IH0gZnJvbSBcIi4vaW50ZXJuYWwvaW5wdXQtYmFzZS50c1wiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVGV4dElucHV0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBWYXJpYW50ID0gXCJzaW5nbGVcIiB8IFwibXVsdGlcIjtcblxuLyoqIE5hdGl2ZSBzaW5nbGUtbGluZSBpbnB1dCB0eXBlcyBwb2xseSdzIGZpbHRlci9mb3JtIGZpZWxkcyB1c2UuICovXG5leHBvcnQgdHlwZSBUZXh0SW5wdXRUeXBlID1cbiAgfCBcInRleHRcIlxuICB8IFwiZW1haWxcIlxuICB8IFwidXJsXCJcbiAgfCBcInRlbFwiXG4gIHwgXCJzZWFyY2hcIlxuICB8IFwicGFzc3dvcmRcIlxuICB8IFwibnVtYmVyXCJcbiAgfCBcImRhdGVcIlxuICB8IFwiZGF0ZXRpbWUtbG9jYWxcIlxuICB8IFwidGltZVwiXG4gIHwgXCJtb250aFwiXG4gIHwgXCJ3ZWVrXCI7XG5cbmV4cG9ydCB0eXBlIFRleHRJbnB1dFByb3BzID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTaWduYWw8c3RyaW5nPiBmb3IgY29udHJvbGxlZCwgc3RyaW5nIGZvciB1bmNvbnRyb2xsZWQgZGVmYXVsdC4gKi9cbiAgdmFsdWU/OiBTaWduYWw8c3RyaW5nPiB8IHN0cmluZztcbiAgdmFyaWFudD86IFZhcmlhbnQ7XG4gIC8qKiBOYXRpdmUgaW5wdXQgdHlwZSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQuIERlZmF1bHQ6IFwidGV4dFwiLiAqL1xuICBpbnB1dFR5cGU/OiBUZXh0SW5wdXRUeXBlO1xuICAvKiogTG93ZXIgYm91bmQgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50IChudW1iZXIvZGF0ZSB0eXBlcykuICovXG4gIG1pbj86IG51bWJlciB8IHN0cmluZztcbiAgLyoqIFVwcGVyIGJvdW5kIGZvciB0aGUgc2luZ2xlLWxpbmUgdmFyaWFudCAobnVtYmVyL2RhdGUgdHlwZXMpLiAqL1xuICBtYXg/OiBudW1iZXIgfCBzdHJpbmc7XG4gIC8qKiBTdGVwIGdyYW51bGFyaXR5IGZvciB0aGUgc2luZ2xlLWxpbmUgdmFyaWFudCAobnVtYmVyL2RhdGUgdHlwZXMpLiAqL1xuICBzdGVwPzogbnVtYmVyIHwgc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgLyoqIE5hdGl2ZSBob3ZlciB0b29sdGlwIOKAlCBhIGhpbnQgYmV5b25kIHRoZSBwbGFjZWhvbGRlci9sYWJlbC4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGludmFsaWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogVmFsaWRhdGlvbiBtZXNzYWdlIHJlbmRlcmVkIGJlbmVhdGggdGhlIGZpZWxkLiBXaGVuIHByZXNlbnQgdGhlXG4gICAqIHByaW1pdGl2ZSB3cmFwcyB0aGUgY29udHJvbCwgbGlua3MgdGhlIG1lc3NhZ2UgdmlhIGFyaWEtZGVzY3JpYmVkYnksXG4gICAqIGFuZCBtYXJrcyB0aGUgZmllbGQgaW52YWxpZC4gT21pdCBpdCB0byBrZWVwIGEgYmFyZSBuYXRpdmUgZWxlbWVudC5cbiAgICovXG4gIGVycm9yPzogc3RyaW5nO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xuICBpZD86IHN0cmluZztcbiAgZGVzY3JpYmVkQnk/OiBzdHJpbmc7XG4gIHJvd3M/OiBudW1iZXI7XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIGlzU2lnbmFsPFQ+KHY6IFNpZ25hbDxUPiB8IFQgfCB1bmRlZmluZWQpOiB2IGlzIFNpZ25hbDxUPiB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmIFwidmFsdWVcIiBpbiB2ICYmIFwicGVla1wiIGluICh2IGFzIHVua25vd24gYXMgb2JqZWN0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRleHRJbnB1dChwcm9wczogVGV4dElucHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHZhcmlhbnQgPSBwcm9wcy52YXJpYW50ID8/IFwic2luZ2xlXCI7XG4gIC8vIEFsd2F5cyBjYWxsZWQgc28gaG9vayBvcmRlciBpcyBzdGFibGU7IG9ubHkgdXNlZCB3aGVuIGBlcnJvcmAgaXMgc2V0LlxuICBjb25zdCBlcnJvcklkID0gdXNlSWQoKTtcbiAgY29uc3QgaGFzRXJyb3IgPSBwcm9wcy5lcnJvciAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmVycm9yICE9PSBcIlwiO1xuXG4gIGNvbnN0IGRlc2NyaWJlZEJ5ID1cbiAgICBbcHJvcHMuZGVzY3JpYmVkQnksIGhhc0Vycm9yID8gZXJyb3JJZCA6IHVuZGVmaW5lZF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpIHx8IHVuZGVmaW5lZDtcblxuICBjb25zdCBhMTF5ID0gYnVpbGRJbnB1dEExMXkoe1xuICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgaWQ6IHByb3BzLmlkLFxuICAgIHJlcXVpcmVkOiBwcm9wcy5yZXF1aXJlZCxcbiAgICAvLyBBbiBlcnJvciBtZXNzYWdlIGltcGxpZXMgdGhlIGZpZWxkIGlzIGludmFsaWQuXG4gICAgaW52YWxpZDogcHJvcHMuaW52YWxpZCB8fCBoYXNFcnJvcixcbiAgICBkZXNjcmliZWRCeSxcbiAgICBwbGFjZWhvbGRlcjogcHJvcHMucGxhY2Vob2xkZXIsXG4gICAgZGlzYWJsZWQ6IHByb3BzLmRpc2FibGVkLFxuICAgIHJlYWRPbmx5OiBwcm9wcy5yZWFkT25seSxcbiAgfSk7XG5cbiAgY29uc3QgY29udHJvbGxlZCA9IGlzU2lnbmFsKHByb3BzLnZhbHVlKTtcbiAgY29uc3Qgc3RyaW5nVmFsdWUgPSBjb250cm9sbGVkID8gKHByb3BzLnZhbHVlIGFzIHVua25vd24gYXMgU2lnbmFsPHN0cmluZz4pLnZhbHVlIDogdW5kZWZpbmVkO1xuICBjb25zdCBkZWZhdWx0VmFsdWUgPSBjb250cm9sbGVkXG4gICAgPyB1bmRlZmluZWRcbiAgICA6ICgocHJvcHMudmFsdWUgYXMgdW5rbm93biBhcyBzdHJpbmcgfCB1bmRlZmluZWQpID8/IFwiXCIpO1xuXG4gIGNvbnN0IGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSA/IGAke2NsYXNzZXNbXCJpbnB1dFwiXX0gJHtwcm9wcy5jbGFzc05hbWV9YCA6IGNsYXNzZXNbXCJpbnB1dFwiXTtcblxuICBjb25zdCBvbklucHV0ID0gKGU6IEpTWC5UYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50Pik6IHZvaWQgPT4ge1xuICAgIGlmIChjb250cm9sbGVkKSB7XG4gICAgICAocHJvcHMudmFsdWUgYXMgdW5rbm93biBhcyBTaWduYWw8c3RyaW5nPikudmFsdWUgPSBlLmN1cnJlbnRUYXJnZXQudmFsdWU7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNvbnRyb2wgPVxuICAgIHZhcmlhbnQgPT09IFwibXVsdGlcIiA/IChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICB7Li4uKGExMXkgYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTFRleHRBcmVhRWxlbWVudD4pfVxuICAgICAgICBjbGFzcz17Y2xhc3NOYW1lfVxuICAgICAgICB0aXRsZT17cHJvcHMudGl0bGV9XG4gICAgICAgIGRhdGEtcG9sbHktaW5wdXQtdmFyaWFudD1cIm11bHRpXCJcbiAgICAgICAgcm93cz17cHJvcHMucm93c31cbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub0F1dG9mb2N1czogb3B0LWluIHByb3Ag4oCUIGNhbGxlciByZXF1ZXN0cyBhdXRvZm9jdXMgZXhwbGljaXRseSAoZS5nLiBmb3JtIG9wZW5zIHRvIHRoaXMgZmllbGQpLlxuICAgICAgICBhdXRvRm9jdXM9e3Byb3BzLmF1dG9Gb2N1c31cbiAgICAgICAgdmFsdWU9e3N0cmluZ1ZhbHVlfVxuICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cbiAgICAgICAgb25JbnB1dD17b25JbnB1dH1cbiAgICAgIC8+XG4gICAgKSA6IChcbiAgICAgIDxpbnB1dFxuICAgICAgICB7Li4uKGExMXkgYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTElucHV0RWxlbWVudD4pfVxuICAgICAgICB0eXBlPXtwcm9wcy5pbnB1dFR5cGUgPz8gXCJ0ZXh0XCJ9XG4gICAgICAgIGNsYXNzPXtjbGFzc05hbWV9XG4gICAgICAgIHRpdGxlPXtwcm9wcy50aXRsZX1cbiAgICAgICAgZGF0YS1wb2xseS1pbnB1dC12YXJpYW50PVwic2luZ2xlXCJcbiAgICAgICAgbWluPXtwcm9wcy5taW59XG4gICAgICAgIG1heD17cHJvcHMubWF4fVxuICAgICAgICBzdGVwPXtwcm9wcy5zdGVwfVxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vQXV0b2ZvY3VzOiBvcHQtaW4gcHJvcCDigJQgY2FsbGVyIHJlcXVlc3RzIGF1dG9mb2N1cyBleHBsaWNpdGx5IChlLmcuIGZvcm0gb3BlbnMgdG8gdGhpcyBmaWVsZCkuXG4gICAgICAgIGF1dG9Gb2N1cz17cHJvcHMuYXV0b0ZvY3VzfVxuICAgICAgICB2YWx1ZT17c3RyaW5nVmFsdWV9XG4gICAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxuICAgICAgICBvbklucHV0PXtvbklucHV0fVxuICAgICAgLz5cbiAgICApO1xuXG4gIGlmICghaGFzRXJyb3IpIHJldHVybiBjb250cm9sO1xuXG4gIHJldHVybiAoXG4gICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIiBjbGFzc05hbWU9e2NsYXNzZXNbXCJmaWVsZFwiXX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LWZpZWxkPlxuICAgICAge2NvbnRyb2x9XG4gICAgICA8c3BhbiBpZD17ZXJyb3JJZH0gcm9sZT1cImFsZXJ0XCIgY2xhc3M9e2NsYXNzZXNbXCJlcnJvclwiXX0+XG4gICAgICAgIHtwcm9wcy5lcnJvcn1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L0xheW91dD5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBUb2FzdCDigJQgY29uc3VtZXItZmFjaW5nIHN1cmZhY2UgZm9yIHRoZSBnbG9iYWwgZXJyb3JTdGF0ZS5cbiAqXG4gKiBSZW5kZXJzIGV2ZXJ5IGVudHJ5IG9mIHRoZSBgZXJyb3JTdGF0ZWAgc2lnbmFsIGludG8gYSB2aWV3cG9ydCBtb3VudGVkXG4gKiBpbnNpZGUgT3ZlcmxheVJvb3QuIGBhcmlhLWxpdmVgIGlzIHBvbGl0ZSBmb3IgaW5mby93YXJuaW5nIGFuZFxuICogYXNzZXJ0aXZlIGZvciBlcnJvciBzZXZlcml0eS4gRWFjaCBpdGVtIGF1dG8tZGlzbWlzc2VzIGFmdGVyXG4gKiBgYXV0b0Rpc21pc3NNc2AgdW5sZXNzIHRoZSB1c2VyIGhvdmVycyB0aGUgdmlld3BvcnQuIENsaWNraW5nIGFcbiAqIHRvYXN0IG9yIGl0cyBjbG9zZSBidXR0b24gcmVtb3ZlcyB0aGF0IHNpbmdsZSBlbnRyeS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9ob29rc1wiO1xuaW1wb3J0IHsgY2xlYXJFcnJvciwgdHlwZSBFcnJvckVudHJ5LCBlcnJvclN0YXRlIH0gZnJvbSBcIi4uL2FjdGlvbnMvZXJyb3IudHNcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCB7IGdldE92ZXJsYXlSb290Tm9kZSB9IGZyb20gXCIuL092ZXJsYXlSb290LnRzeFwiO1xuaW1wb3J0IHsgU3VyZmFjZSB9IGZyb20gXCIuL1N1cmZhY2UudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Ub2FzdC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFRvYXN0Vmlld3BvcnRQcm9wcyA9IHtcbiAgYXV0b0Rpc21pc3NNcz86IG51bWJlcjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVmlld3BvcnQocHJvcHM6IFRvYXN0Vmlld3BvcnRQcm9wcyk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IGF1dG9EaXNtaXNzTXMgPSBwcm9wcy5hdXRvRGlzbWlzc01zID8/IDUwMDA7XG4gIGNvbnN0IFtwb3J0YWxOb2RlLCBzZXRQb3J0YWxOb2RlXSA9IHVzZVN0YXRlPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtwYXVzZWQsIHNldFBhdXNlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGVudHJpZXMgPSBlcnJvclN0YXRlLnZhbHVlO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0UG9ydGFsTm9kZShnZXRPdmVybGF5Um9vdE5vZGUoKSk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChwYXVzZWQgfHwgZW50cmllcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBoZWFkID0gZW50cmllc1swXTtcbiAgICBpZiAoIWhlYWQpIHJldHVybjtcbiAgICBjb25zdCB0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsZWFyRXJyb3IoaGVhZC5pZCk7XG4gICAgfSwgYXV0b0Rpc21pc3NNcyk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXIpO1xuICB9LCBbcGF1c2VkLCBlbnRyaWVzLCBhdXRvRGlzbWlzc01zXSk7XG5cbiAgaWYgKCFwb3J0YWxOb2RlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjb250ZW50ID0gKFxuICAgIDxMYXlvdXRcbiAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICBjbGFzc05hbWU9e2Ake2NsYXNzZXNbXCJ2aWV3cG9ydFwiXX0gJHtwcm9wcy5jbGFzc05hbWUgPz8gXCJcIn1gLnRyaW0oKX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktdG9hc3Qtdmlld3BvcnRcbiAgICAgIG9uTW91c2VFbnRlcj17KCkgPT4gc2V0UGF1c2VkKHRydWUpfVxuICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRQYXVzZWQoZmFsc2UpfVxuICAgID5cbiAgICAgIHtlbnRyaWVzLm1hcCgoZW50cnkpID0+IChcbiAgICAgICAgPFRvYXN0SXRlbSBrZXk9e2VudHJ5LmlkfSBlbnRyeT17ZW50cnl9IC8+XG4gICAgICApKX1cbiAgICA8L0xheW91dD5cbiAgKTtcbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbChjb250ZW50LCBwb3J0YWxOb2RlKTtcbn1cblxuZnVuY3Rpb24gVG9hc3RJdGVtKHsgZW50cnkgfTogeyBlbnRyeTogRXJyb3JFbnRyeSB9KTogSlNYLkVsZW1lbnQge1xuICBjb25zdCBsaXZlbmVzcyA9IGVudHJ5LnNldmVyaXR5ID09PSBcImVycm9yXCIgPyBcImFzc2VydGl2ZVwiIDogXCJwb2xpdGVcIjtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgdmFyaWFudD1cInJhaXNlZFwiXG4gICAgICBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpIHZhcigtLXBvbGx5LXNwYWNlLWxnKVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzZXNbXCJpdGVtXCJdfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS10b2FzdC1pdGVtXG4gICAgICBkYXRhLXNldmVyaXR5PXtlbnRyeS5zZXZlcml0eX1cbiAgICAgIHJvbGU9e2VudHJ5LnNldmVyaXR5ID09PSBcImVycm9yXCIgPyBcImFsZXJ0XCIgOiBcInN0YXR1c1wifVxuICAgICAgYXJpYS1saXZlPXtsaXZlbmVzc31cbiAgICA+XG4gICAgICA8TGF5b3V0IGNvbHVtbnM9XCIxZnIgYXV0b1wiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJtZXNzYWdlXCJdfT57ZW50cnkubWVzc2FnZX08L3NwYW4+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcImNsb3NlXCJdfVxuICAgICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgICAgZGF0YS1wb2xseS10b2FzdC1jbG9zZVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNsZWFyRXJyb3IoZW50cnkuaWQpfVxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJEaXNtaXNzXCJcbiAgICAgICAgPlxuICAgICAgICAgIMOXXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5leHBvcnQgY29uc3QgVG9hc3QgPSB7IFZpZXdwb3J0IH07XG4iLAogICAgIi8qKlxuICogVG9nZ2xlIOKAlCBzd2l0Y2gtcm9sZSBjaGVja2JveC5cbiAqXG4gKiBBIHZpc3VhbGx5LWhpZGRlbiA8aW5wdXQgcm9sZT1cInN3aXRjaFwiPiBwYWlyZWQgd2l0aCBhIHN0eWxlZCB0cmFja1xuICogYW5kIHRodW1iIGluc2lkZSBhIDxsYWJlbD4uIFBhc3NpdmU6IHRoZSBjYWxsZXIgZHJpdmVzIGBjaGVja2VkYCBhbmRcbiAqIGhhbmRsZXMgc3RhdGUgY2hhbmdlcyB2aWEgdGhlIGFjdGlvbiByZWdpc3RyeSAod3JhcCB0aGUgVG9nZ2xlIGluIGFcbiAqIDxsYWJlbCBkYXRhLWFjdGlvbj1cIi4uLlwiPiBvciBiaW5kIGEgcGFyZW50IGZvcm0ncyBzdWJtaXQpLiBhMTF5XG4gKiBhdHRyaWJ1dGVzIGNvbWUgZnJvbSB0aGUgbmF0aXZlIGlucHV0OyB0aGUgbGFiZWwgd3JhcHMgc28gY2xpY2tzXG4gKiBhbnl3aGVyZSBpbiB0aGUgY29udHJvbCB0b2dnbGUgdGhlIGlucHV0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVG9nZ2xlLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgVG9nZ2xlUHJvcHMgPSB7XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGxhYmVsPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIFRvZ2dsZShwcm9wczogVG9nZ2xlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hlY2tlZCA9IGZhbHNlLCBkaXNhYmxlZCA9IGZhbHNlLCBsYWJlbCwgbmFtZSwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJ0b2dnbGVcIl1dO1xuICBpZiAoZGlzYWJsZWQpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImRpc2FibGVkXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxMYXlvdXRcbiAgICAgIGFzPVwibGFiZWxcIlxuICAgICAgaW5saW5lXG4gICAgICBjb2x1bW5zPVwiYXV0byBhdXRvXCJcbiAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgIGNsYXNzTmFtZT17cGFydHMuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXRvZ2dsZVxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD17aWR9XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIHJvbGU9XCJzd2l0Y2hcIlxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICBhcmlhLWNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiaW5wdXRcIl19XG4gICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIC8+XG4gICAgICA8c3BhbiBjbGFzcz17Y2hlY2tlZCA/IGAke2NsYXNzZXNbXCJ0cmFja1wiXX0gJHtjbGFzc2VzW1widHJhY2tDaGVja2VkXCJdfWAgOiBjbGFzc2VzW1widHJhY2tcIl19PlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPXtjaGVja2VkID8gYCR7Y2xhc3Nlc1tcInRodW1iXCJdfSAke2NsYXNzZXNbXCJ0aHVtYkNoZWNrZWRcIl19YCA6IGNsYXNzZXNbXCJ0aHVtYlwiXX1cbiAgICAgICAgLz5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibGFiZWxcIl19PntsYWJlbH08L3NwYW4+fVxuICAgIDwvTGF5b3V0PlxuICApO1xufVxuIiwKICAgICIvLyBTdGF0ZSBwcmltaXRpdmVzIHdpdGggb3B0aW9uYWwgc3luYyBhbmQgcGVyc2lzdGVuY2VcblxuaW1wb3J0IHsgZWZmZWN0LCB0eXBlIFNpZ25hbCwgc2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlQnVzIH0gZnJvbSBcIi4vbWVzc2FnZS1idXNcIjtcbmltcG9ydCB7IGNyZWF0ZVN0b3JhZ2VBZGFwdGVyLCB0eXBlIFN0b3JhZ2VBZGFwdGVyIH0gZnJvbSBcIi4vc3RvcmFnZS1hZGFwdGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVTeW5jQWRhcHRlciwgdHlwZSBTdGF0ZVN5bmNNZXNzYWdlLCB0eXBlIFN5bmNBZGFwdGVyIH0gZnJvbSBcIi4vc3luYy1hZGFwdGVyXCI7XG5cbi8qKlxuICogU2lnbmFsIGV4dGVuZGVkIHdpdGggLmxvYWRlZCBwcm9taXNlIGZvciBoeWRyYXRpb24gY29udHJvbFxuICovXG50eXBlIFNpZ25hbFdpdGhMb2FkZWQ8VD4gPSBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPiB9O1xuXG4vKipcbiAqIFNpZ25hbCBleHRlbmRlZCB3aXRoIC5sb2FkZWQgYW5kIC52ZXJpZnkgcHJvcGVydGllcyBmb3IgdmVyaWZpY2F0aW9uIHRyYWNraW5nXG4gKi9cbnR5cGUgU2lnbmFsV2l0aFZlcmlmeTxUPiA9IFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+OyB2ZXJpZnk6IFQgfTtcblxudHlwZSBTdGF0ZUVudHJ5PFQ+ID0ge1xuICBzaWduYWw6IFNpZ25hbDxUPjtcbiAgY2xvY2s6IG51bWJlcjsgLy8gTGFtcG9ydCBjbG9jayBmb3IgY2F1c2FsIG9yZGVyaW5nXG4gIGxvYWRlZDogUHJvbWlzZTx2b2lkPjtcbiAgdXBkYXRpbmc6IGJvb2xlYW47XG59O1xuXG50eXBlIFN0YXRlT3B0aW9uczxUID0gdW5rbm93bj4gPSB7XG4gIC8vIExlZ2FjeSBNZXNzYWdlQnVzIHN1cHBvcnQgKGRlcHJlY2F0ZWQsIHdpbGwgYmUgcmVtb3ZlZCBpbiB2Mi4wKVxuICBidXM/OiBNZXNzYWdlQnVzO1xuXG4gIC8vIE5ldyBhZGFwdGVyIHN5c3RlbSAocmVjb21tZW5kZWQpXG4gIHN0b3JhZ2U/OiBTdG9yYWdlQWRhcHRlcjsgLy8gQ3VzdG9tIHN0b3JhZ2UgYWRhcHRlclxuICBzeW5jPzogU3luY0FkYXB0ZXI7IC8vIEN1c3RvbSBzeW5jIGFkYXB0ZXJcblxuICAvLyBCZWhhdmlvciBvcHRpb25zXG4gIGRlYm91bmNlTXM/OiBudW1iZXI7IC8vIERlYm91bmNlIHN0b3JhZ2Ugd3JpdGVzXG4gIHZhbGlkYXRvcj86ICh2YWx1ZTogdW5rbm93bikgPT4gdmFsdWUgaXMgVDsgLy8gUnVudGltZSB0eXBlIHZhbGlkYXRpb25cbiAgdmVyaWZ5PzogYm9vbGVhbjsgLy8gRW5hYmxlIHZlcmlmaWNhdGlvbiB0cmFja2luZyAoY3JlYXRlcyBwbGFpbiBvYmplY3QgbWlycm9yKVxufTtcblxuY29uc3Qgc3RhdGVSZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBTdGF0ZUVudHJ5PHVua25vd24+PigpO1xuXG4vKipcbiAqIFNoYXJlZCBzdGF0ZTogc3luY2VkIGFjcm9zcyBhbGwgY29udGV4dHMgQU5EIHBlcnNpc3RlZCB0byBzdG9yYWdlXG4gKlxuICogVXNlcyBMYW1wb3J0IGNsb2NrIGZvciBjb25mbGljdCByZXNvbHV0aW9uLiBTdGF0ZSBpcyBhdXRvbWF0aWNhbGx5OlxuICogLSBMb2FkZWQgZnJvbSBjaHJvbWUuc3RvcmFnZSBvbiBpbml0aWFsaXphdGlvblxuICogLSBTeW5jZWQgdG8gb3RoZXIgY29udGV4dHMgdmlhIGJyb2FkY2FzdCBtZXNzYWdlc1xuICogLSBQZXJzaXN0ZWQgdG8gY2hyb21lLnN0b3JhZ2Ugb24gZXZlcnkgY2hhbmdlXG4gKlxuICogQXZhaWxhYmxlIGluOiBiYWNrZ3JvdW5kLCBwb3B1cCwgb3B0aW9ucywgZGV2dG9vbHMsIGNvbnRlbnQgc2NyaXB0c1xuICog4pqg77iPIE5PVCBhdmFpbGFibGUgaW4gcGFnZSBzY3JpcHRzICh1c2UgY29udGVudCBzY3JpcHQgc3RhdGUgaW5zdGVhZClcbiAqXG4gKiBAcGFyYW0ga2V5IC0gVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgc3RhdGUgKGUuZy4sIFwiYXBwLXNldHRpbmdzXCIpXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gRGVmYXVsdCB2YWx1ZSBpZiBub3RoaW5nIGlzIGluIHN0b3JhZ2VcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiAoYnVzLCBkZWJvdW5jZU1zKVxuICogQHJldHVybnMgUmVhY3RpdmUgc2lnbmFsIHRoYXQgc3RheXMgaW4gc3luYyBhY3Jvc3MgYWxsIGNvbnRleHRzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIERlZmluZSBvbmNlLCB1c2UgZXZlcnl3aGVyZVxuICogY29uc3Qgc2V0dGluZ3MgPSAkc2hhcmVkU3RhdGUoXCJzZXR0aW5nc1wiLCB7IHRoZW1lOiBcImRhcmtcIiB9KVxuICpcbiAqIC8vIENoYW5nZXMgYXV0b21hdGljYWxseSBzeW5jXG4gKiBzZXR0aW5ncy52YWx1ZSA9IHsgdGhlbWU6IFwibGlnaHRcIiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uICRzaGFyZWRTdGF0ZTxUPihcbiAga2V5OiBzdHJpbmcsXG4gIGluaXRpYWxWYWx1ZTogVCxcbiAgb3B0aW9uczogU3RhdGVPcHRpb25zPFQ+ID0ge31cbik6IFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+OyB2ZXJpZnk/OiBUIH0ge1xuICBjb25zdCBzaWcgPSBjcmVhdGVTdGF0ZShrZXksIGluaXRpYWxWYWx1ZSwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZW5hYmxlU3luYzogdHJ1ZSxcbiAgICBlbmFibGVQZXJzaXN0OiB0cnVlLFxuICB9KTtcblxuICAvLyBFeHBvc2UgbG9hZGVkIHByb21pc2UgZm9yIGF3YWl0aW5nIGh5ZHJhdGlvblxuICBjb25zdCBlbnRyeSA9IHN0YXRlUmVnaXN0cnkuZ2V0KGtleSk7XG4gIGlmIChlbnRyeSkge1xuICAgIChzaWcgYXMgdW5rbm93biBhcyBTaWduYWxXaXRoTG9hZGVkPFQ+KS5sb2FkZWQgPSBlbnRyeS5sb2FkZWQ7XG4gIH1cblxuICByZXR1cm4gc2lnIGFzIHVua25vd24gYXMgU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD4gfTtcbn1cblxuLyoqXG4gKiBTeW5jZWQgc3RhdGU6IHN5bmNlZCBhY3Jvc3MgYWxsIGNvbnRleHRzIGJ1dCBOT1QgcGVyc2lzdGVkXG4gKlxuICogU3RhdGUgaXMgYnJvYWRjYXN0IHRvIGFsbCBjb250ZXh0cyBpbiByZWFsLXRpbWUgYnV0IHJlc2V0cyBvbiBleHRlbnNpb24gcmVsb2FkLlxuICpcbiAqIEF2YWlsYWJsZSBpbjogYmFja2dyb3VuZCwgcG9wdXAsIG9wdGlvbnMsIGRldnRvb2xzLCBjb250ZW50IHNjcmlwdHNcbiAqIOKaoO+4jyBOT1QgYXZhaWxhYmxlIGluIHBhZ2Ugc2NyaXB0c1xuICpcbiAqIEBwYXJhbSBrZXkgLSBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBzdGF0ZVxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgUmVhY3RpdmUgc2lnbmFsIHN5bmNlZCBhY3Jvc3MgY29udGV4dHMgKGJ1dCBub3QgcGVyc2lzdGVkKVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBUZW1wb3Jhcnkgc2hhcmVkIHN0YXRlXG4gKiBjb25zdCBhY3RpdmVUYWJJZCA9ICRzeW5jZWRTdGF0ZShcImFjdGl2ZS10YWJcIiwgbnVsbClcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gJHN5bmNlZFN0YXRlPFQ+KFxuICBrZXk6IHN0cmluZyxcbiAgaW5pdGlhbFZhbHVlOiBULFxuICBvcHRpb25zOiBTdGF0ZU9wdGlvbnM8VD4gPSB7fVxuKTogU2lnbmFsPFQ+IHtcbiAgcmV0dXJuIGNyZWF0ZVN0YXRlKGtleSwgaW5pdGlhbFZhbHVlLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbmFibGVTeW5jOiB0cnVlLFxuICAgIGVuYWJsZVBlcnNpc3Q6IGZhbHNlLFxuICB9KTtcbn1cblxuLyoqXG4gKiBQZXJzaXN0ZWQgc3RhdGU6IHBlcnNpc3RlZCB0byBzdG9yYWdlIGJ1dCBOT1Qgc3luY2VkIGFjcm9zcyBjb250ZXh0c1xuICpcbiAqIEVhY2ggY29udGV4dCBoYXMgaXRzIG93biBjb3B5IG9mIHRoZSBzdGF0ZSwgcGVyc2lzdGVkIGluZGVwZW5kZW50bHkuXG4gKlxuICogQXZhaWxhYmxlIGluOiBiYWNrZ3JvdW5kLCBwb3B1cCwgb3B0aW9ucywgZGV2dG9vbHMsIGNvbnRlbnQgc2NyaXB0c1xuICog4pqg77iPIE5PVCBhdmFpbGFibGUgaW4gcGFnZSBzY3JpcHRzXG4gKlxuICogQHBhcmFtIGtleSAtIFVuaXF1ZSBpZGVudGlmaWVyICh1c2UgcHJlZml4IGxpa2UgXCJwb3B1cDpzdGF0ZVwiIHRvIGF2b2lkIGNvbGxpc2lvbnMpXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBSZWFjdGl2ZSBzaWduYWwgcGVyc2lzdGVkIHRvIHN0b3JhZ2UgKGJ1dCBub3Qgc3luY2VkKVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBFYWNoIGNvbnRleHQgaGFzIGl0cyBvd24gcGVyc2lzdGVkIHN0YXRlXG4gKiBjb25zdCBwb3B1cFN0YXRlID0gJHBlcnNpc3RlZFN0YXRlKFwicG9wdXA6bGFzdC1wYW5lbFwiLCBcImhvbWVcIilcbiAqIGNvbnN0IGRldnRvb2xzU3RhdGUgPSAkcGVyc2lzdGVkU3RhdGUoXCJkZXZ0b29sczpleHBhbmRlZFwiLCB0cnVlKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiAkcGVyc2lzdGVkU3RhdGU8VD4oXG4gIGtleTogc3RyaW5nLFxuICBpbml0aWFsVmFsdWU6IFQsXG4gIG9wdGlvbnM6IFN0YXRlT3B0aW9uczxUPiA9IHt9XG4pOiBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPiB9IHtcbiAgY29uc3Qgc2lnID0gY3JlYXRlU3RhdGUoa2V5LCBpbml0aWFsVmFsdWUsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGVuYWJsZVN5bmM6IGZhbHNlLFxuICAgIGVuYWJsZVBlcnNpc3Q6IHRydWUsXG4gIH0pO1xuXG4gIC8vIEV4cG9zZSBsb2FkZWQgcHJvbWlzZSBmb3IgYXdhaXRpbmcgaHlkcmF0aW9uXG4gIGNvbnN0IGVudHJ5ID0gc3RhdGVSZWdpc3RyeS5nZXQoa2V5KTtcbiAgaWYgKGVudHJ5KSB7XG4gICAgKHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbFdpdGhMb2FkZWQ8VD4pLmxvYWRlZCA9IGVudHJ5LmxvYWRlZDtcbiAgfVxuXG4gIHJldHVybiBzaWcgYXMgdW5rbm93biBhcyBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPiB9O1xufVxuXG4vKipcbiAqIExvY2FsIHN0YXRlOiBub3Qgc3luY2VkLCBub3QgcGVyc2lzdGVkIChsaWtlIHJlZ3VsYXIgUHJlYWN0IHNpZ25hbClcbiAqXG4gKiBTaW1wbGUgcmVhY3RpdmUgc3RhdGUgdGhhdCBsaXZlcyBvbmx5IGluIHRoZSBjdXJyZW50IGNvbnRleHQuXG4gKiBSZXNldHMgb24gcmVsb2FkIG9yIGNvbnRleHQgcmVzdGFydC5cbiAqXG4gKiBBdmFpbGFibGUgaW46IGFsbCBjb250ZXh0cyAoaW5jbHVkaW5nIHBhZ2Ugc2NyaXB0cylcbiAqXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gRGVmYXVsdCB2YWx1ZVxuICogQHJldHVybnMgUmVhY3RpdmUgc2lnbmFsIChsb2NhbCBvbmx5KVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBMb2NhbCBVSSBzdGF0ZVxuICogY29uc3QgaXNMb2FkaW5nID0gJHN0YXRlKGZhbHNlKVxuICogY29uc3QgZXJyb3IgPSAkc3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gJHN0YXRlPFQ+KGluaXRpYWxWYWx1ZTogVCk6IFNpZ25hbDxUPiB7XG4gIHJldHVybiBzaWduYWwoaW5pdGlhbFZhbHVlKTtcbn1cblxuLyoqIFNlcnZlci1zaWRlIGF1dGhvcml0YXRpdmUgc3RhdGUsIGtleWVkIGZvciBzdGFibGUgaWRlbnRpdHkgYWNyb3NzIHRoZVxuICogIHByb2Nlc3MuIFVubGlrZSB0aGUgYnJvd3NlciBwcmltaXRpdmVzIGl0IGRvZXMgTk9UIHN5bmMgYWNyb3NzIGNvbnRleHRzIG9yXG4gKiAgcGVyc2lzdCB0byBjaHJvbWUuc3RvcmFnZSDigJQgdGhlIHNlcnZlciBob2xkcyB0aGUgY2Fub25pY2FsIHJlcGxpY2EgYW5kIGlzXG4gKiAgdGhlIGFsd2F5cy1vbiBwZWVyOyBjb25uZWN0ZWQgY2xpZW50cyByZWNlaXZlIGRlcml2ZWQgdXBkYXRlcyB0aHJvdWdoIHRoZVxuICogIEVseXNpYSBgcG9sbHkoKWAgcGx1Z2luJ3MgZWZmZWN0L2Jyb2FkY2FzdCBsYXllciByYXRoZXIgdGhhbiB0aHJvdWdoIHRoaXNcbiAqICBzaWduYWwgZGlyZWN0bHkuIFVzZWQgaW5zaWRlIGBwb2xseSh7IHN0YXRlOiB7IHNlcnZlcjogeyAuLi4gfSB9IH0pYCBhbmRcbiAqICByZWFkIG9uIHRoZSByZXF1ZXN0IGNvbnRleHQgYXMgYHBvbGx5U3RhdGUuc2VydmVyLjxrZXk+LnZhbHVlYC4gKi9cbmNvbnN0IHNlcnZlclN0YXRlUmVnaXN0cnkgPSBuZXcgTWFwPHN0cmluZywgU2lnbmFsPHVua25vd24+PigpO1xuXG4vKipcbiAqIFJlYWN0aXZlIHNlcnZlci1vbmx5IHN0YXRlLiBUaGUgZmlyc3QgY2FsbCBmb3IgYSBga2V5YCBjcmVhdGVzIHRoZSBzaWduYWw7XG4gKiBsYXRlciBjYWxscyB3aXRoIHRoZSBzYW1lIGBrZXlgIHJldHVybiB0aGF0IHNhbWUgc2lnbmFsLCBzbyBhIG1vZHVsZSB0aGF0XG4gKiBkZWNsYXJlcyBpdHMgc2VydmVyIHN0YXRlIG9uY2UgZ2V0cyBhIHN0YWJsZSByZWZlcmVuY2UgZXZlcnl3aGVyZSBpdCBpc1xuICogcmVhZC5cbiAqXG4gKiBAcGFyYW0ga2V5IC0gU3RhYmxlIGlkZW50aWZpZXIgZm9yIHRoaXMgc2VydmVyIHN0YXRlIChlLmcuIFwiZGJcIilcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBWYWx1ZSBoZWxkIHVudGlsIHRoZSBzZXJ2ZXIgbXV0YXRlcyBpdFxuICogQHJldHVybnMgQSByZWFjdGl2ZSBzaWduYWwgaG9sZGluZyB0aGUgYXV0aG9yaXRhdGl2ZSBzZXJ2ZXIgdmFsdWVcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgJHNlcnZlclN0YXRlIH0gZnJvbSBcIkBmYWlyZm94L3BvbGx5XCI7XG4gKlxuICogY29uc3QgZGIgPSB7IHRvZG9zOiBzaWduYWwoW10pLCBuZXh0SWQ6IDEgfTtcbiAqIHBvbGx5KHsgc3RhdGU6IHsgc2VydmVyOiB7IGRiOiAkc2VydmVyU3RhdGUoXCJkYlwiLCBkYikgfSB9IH0pO1xuICogLy8gaW4gYSBoYW5kbGVyOiBjdHgucG9sbHlTdGF0ZS5zZXJ2ZXIuZGIudmFsdWUudG9kb3MudmFsdWUgPSBbLi4uXVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiAkc2VydmVyU3RhdGU8VD4oa2V5OiBzdHJpbmcsIGluaXRpYWxWYWx1ZTogVCk6IFNpZ25hbDxUPiB7XG4gIGNvbnN0IGV4aXN0aW5nID0gc2VydmVyU3RhdGVSZWdpc3RyeS5nZXQoa2V5KTtcbiAgLy8gVGhlIHJlZ2lzdHJ5IGVyYXNlcyBUIChpdCBzdG9yZXMgU2lnbmFsPHVua25vd24+KTsgdGhlIGtleSBpcyB0aGVcbiAgLy8gY2FsbGVyJ3MgY29udHJhY3QgdGhhdCB0aGUgc3RvcmVkIHNpZ25hbCBjYXJyaWVzIHRoZWlyIFQuXG4gIGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nIGFzIHVua25vd24gYXMgU2lnbmFsPFQ+O1xuICBjb25zdCBzaWcgPSBzaWduYWwoaW5pdGlhbFZhbHVlKTtcbiAgc2VydmVyU3RhdGVSZWdpc3RyeS5zZXQoa2V5LCBzaWcgYXMgdW5rbm93biBhcyBTaWduYWw8dW5rbm93bj4pO1xuICByZXR1cm4gc2lnO1xufVxuXG50eXBlIEludGVybmFsU3RhdGVPcHRpb25zPFQgPSB1bmtub3duPiA9IFN0YXRlT3B0aW9uczxUPiAmIHtcbiAgZW5hYmxlU3luYzogYm9vbGVhbjsgLy8gV2hldGhlciB0byBlbmFibGUgc3luYyAoYXZvaWQgY29sbGlzaW9uIHdpdGggc3luYz86IFN5bmNBZGFwdGVyKVxuICBlbmFibGVQZXJzaXN0OiBib29sZWFuOyAvLyBXaGV0aGVyIHRvIGVuYWJsZSBwZXJzaXN0ZW5jZVxufTtcblxuLy8gRGVlcCBlcXVhbGl0eSBjaGVjayB0byBwcmV2ZW50IHJlZHVuZGFudCB1cGRhdGVzXG5leHBvcnQgZnVuY3Rpb24gZGVlcEVxdWFsKGE6IHVua25vd24sIGI6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIGEgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGIgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICBjb25zdCBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXNBKSB7XG4gICAgaWYgKCFrZXlzQi5pbmNsdWRlcyhrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgIWRlZXBFcXVhbChcbiAgICAgICAgKGEgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSxcbiAgICAgICAgKGIgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XVxuICAgICAgKVxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFJlc29sdmUgc3RvcmFnZSBhbmQgc3luYyBhZGFwdGVycyB3aXRoIHRocmVlLXRpZXIgcHJpb3JpdHk6XG4gKiAxLiBFeHBsaWNpdCBhZGFwdGVycyBmcm9tIG9wdGlvbnMgKGhpZ2hlc3QgcHJpb3JpdHkpXG4gKiAyLiBNZXNzYWdlQnVzIGFkYXB0ZXJzIChsZWdhY3ksIGRlcHJlY2F0ZWQpXG4gKiAzLiBBdXRvLWRldGVjdGVkIGFkYXB0ZXJzIChkZWZhdWx0IGJlaGF2aW9yKVxuICovXG5mdW5jdGlvbiByZXNvbHZlQWRhcHRlcnMob3B0aW9uczogSW50ZXJuYWxTdGF0ZU9wdGlvbnMpOiB7XG4gIHN0b3JhZ2U6IFN0b3JhZ2VBZGFwdGVyIHwgbnVsbDtcbiAgc3luYzogU3luY0FkYXB0ZXIgfCBudWxsO1xufSB7XG4gIC8vIFByaW9yaXR5IDE6IEV4cGxpY2l0IGFkYXB0ZXJzIChwYXJ0aWFsIG9yIGZ1bGwpXG4gIGlmIChvcHRpb25zLnN0b3JhZ2UgfHwgb3B0aW9ucy5zeW5jKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0b3JhZ2U6IG9wdGlvbnMuc3RvcmFnZSB8fCAob3B0aW9ucy5lbmFibGVQZXJzaXN0ID8gY3JlYXRlU3RvcmFnZUFkYXB0ZXIoKSA6IG51bGwpLFxuICAgICAgc3luYzogb3B0aW9ucy5zeW5jIHx8IChvcHRpb25zLmVuYWJsZVN5bmMgPyBjcmVhdGVTeW5jQWRhcHRlcigpIDogbnVsbCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIFByaW9yaXR5IDI6IE1lc3NhZ2VCdXMgKGxlZ2FjeSBzdXBwb3J0KVxuICAvLyBNZXNzYWdlQnVzIGRvZXNuJ3QgcHJvdmlkZSBzeW5jIGFkYXB0ZXIsIG9ubHkgQ2hyb21lIHN0b3JhZ2VcbiAgaWYgKG9wdGlvbnMuYnVzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0b3JhZ2U6IG9wdGlvbnMuYnVzLmFkYXB0ZXJzLnN0b3JhZ2UsXG4gICAgICBzeW5jOiBvcHRpb25zLmVuYWJsZVN5bmMgPyBjcmVhdGVTeW5jQWRhcHRlcigpIDogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLy8gUHJpb3JpdHkgMzogQXV0by1kZXRlY3QgYmFzZWQgb24gZW5hYmxlU3luYyBhbmQgZW5hYmxlUGVyc2lzdCBmbGFnc1xuICByZXR1cm4ge1xuICAgIHN0b3JhZ2U6IG9wdGlvbnMuZW5hYmxlUGVyc2lzdCA/IGNyZWF0ZVN0b3JhZ2VBZGFwdGVyKCkgOiBudWxsLFxuICAgIHN5bmM6IG9wdGlvbnMuZW5hYmxlU3luYyA/IGNyZWF0ZVN5bmNBZGFwdGVyKCkgOiBudWxsLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdGF0ZTxUPihrZXk6IHN0cmluZywgaW5pdGlhbFZhbHVlOiBULCBvcHRpb25zOiBJbnRlcm5hbFN0YXRlT3B0aW9uczxUPik6IFNpZ25hbDxUPiB7XG4gIC8vIFJldHVybiBleGlzdGluZyBzaWduYWwgaWYgYWxyZWFkeSByZWdpc3RlcmVkXG4gIGlmIChzdGF0ZVJlZ2lzdHJ5LmhhcyhrZXkpKSB7XG4gICAgcmV0dXJuIHN0YXRlUmVnaXN0cnkuZ2V0KGtleSk/LnNpZ25hbCBhcyB1bmtub3duIGFzIFNpZ25hbDxUPjtcbiAgfVxuXG4gIGNvbnN0IHNpZyA9IHNpZ25hbChpbml0aWFsVmFsdWUpO1xuXG4gIC8vIENyZWF0ZSB2ZXJpZmljYXRpb24gbWlycm9yIGlmIHJlcXVlc3RlZFxuICBpZiAob3B0aW9ucy52ZXJpZnkpIHtcbiAgICAvLyBDcmVhdGUgcGxhaW4gb2JqZWN0IG1pcnJvciBmb3IgdmVyaWZpY2F0aW9uXG4gICAgY29uc3QgbWlycm9yID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbml0aWFsVmFsdWUpKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgKHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbFdpdGhWZXJpZnk8VD4pLnZlcmlmeSA9IG1pcnJvcjtcbiAgfVxuXG4gIGNvbnN0IGVudHJ5OiBTdGF0ZUVudHJ5PFQ+ID0ge1xuICAgIHNpZ25hbDogc2lnLFxuICAgIGNsb2NrOiAwLFxuICAgIGxvYWRlZDogUHJvbWlzZS5yZXNvbHZlKCksXG4gICAgdXBkYXRpbmc6IGZhbHNlLFxuICB9O1xuXG4gIC8vIFJlc29sdmUgYWRhcHRlcnMgKGV4cGxpY2l0LCBNZXNzYWdlQnVzLCBvciBhdXRvLWRldGVjdClcbiAgY29uc3QgYWRhcHRlcnMgPSByZXNvbHZlQWRhcHRlcnMob3B0aW9ucyk7XG5cbiAgLy8gTG9hZCBmcm9tIHN0b3JhZ2UgaWYgcGVyc2lzdCBpcyBlbmFibGVkXG4gIGlmIChvcHRpb25zLmVuYWJsZVBlcnNpc3QgJiYgYWRhcHRlcnMuc3RvcmFnZSkge1xuICAgIGVudHJ5LmxvYWRlZCA9IGxvYWRGcm9tU3RvcmFnZShrZXksIHNpZywgZW50cnksIGFkYXB0ZXJzLnN0b3JhZ2UsIG9wdGlvbnMudmFsaWRhdG9yKTtcbiAgfVxuXG4gIC8vIHBvbGx5IzE2NzogdGhlIHBlbmRpbmcgZGVib3VuY2UgdGltZXIgbGl2ZXMgaW4gY3JlYXRlU3RhdGUgc2NvcGUsIG5vdFxuICAvLyBpbnNpZGUgdGhlIGBsb2FkZWRgIGNhbGxiYWNrLCBiZWNhdXNlIHRoZSBpbmNvbWluZy1tZXNzYWdlIGhhbmRsZXIgYmVsb3dcbiAgLy8gaGFzIHRvIGJlIGFibGUgdG8gY2FuY2VsIGEgd3JpdGUgdGhlIG1lc3NhZ2Ugc3VwZXJzZWRlcy5cbiAgbGV0IGRlYm91bmNlVGltZXI6IE5vZGVKUy5UaW1lb3V0IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gV2F0Y2ggZm9yIGNoYW5nZXMgYWZ0ZXIgaW5pdGlhbCBsb2FkXG4gIGVudHJ5LmxvYWRlZC50aGVuKCgpID0+IHtcbiAgICBsZXQgcHJldmlvdXNWYWx1ZSA9IHNpZy52YWx1ZTtcbiAgICBsZXQgaXNGaXJzdFJ1biA9IHRydWU7XG5cbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eTogU3luYyBlZmZlY3QgcmVxdWlyZXMgY29vcmRpbmF0aW9uIG9mIG11bHRpcGxlIHN0YXRlIGNoYW5nZSBzY2VuYXJpb3NcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gUmVhZCB0aGUgc2lnbmFsIEZJUlNULCBiZWZvcmUgYW55IGVhcmx5IHJldHVybiBjYW4gaGFwcGVuLlxuICAgICAgLy9cbiAgICAgIC8vIFByZWFjdCByZS1jb2xsZWN0cyBhbiBlZmZlY3QncyBkZXBlbmRlbmNpZXMgb24gZXZlcnkgcnVuLCBzbyBhIHJ1biB0aGF0XG4gICAgICAvLyByZXR1cm5zIHdpdGhvdXQgdG91Y2hpbmcgYHNpZy52YWx1ZWAgdW5zdWJzY3JpYmVzIHRoZSBlZmZlY3QgZm9yIGdvb2QuXG4gICAgICAvLyBUaGUgcnVuIGFuIGluY29taW5nIHN5bmMgbWVzc2FnZSB0cmlnZ2VycyBpcyBleGFjdGx5IHN1Y2ggYSBydW4uXG4gICAgICBjb25zdCB2YWx1ZSA9IHNpZy52YWx1ZTtcblxuICAgICAgLy8gU2tpcCBmaXJzdCBydW4gKGVmZmVjdCBmaXJlcyBpbW1lZGlhdGVseSBvbiByZWdpc3RyYXRpb24pXG4gICAgICBpZiAoaXNGaXJzdFJ1bikge1xuICAgICAgICBpc0ZpcnN0UnVuID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQW4gaW5jb21pbmcgbWVzc2FnZSBpcyBiZWluZyBhcHBsaWVkLiBBZG9wdCBpdCBhcyB0aGUgYmFzZWxpbmUg4oCUIHRoaXNcbiAgICAgIC8vIGNvbnRleHQgbm93IGhvbGRzIGl0LCBzbyB0aGUgbmV4dCBsb2NhbCBjaGFuZ2UgaXMgYSBjaGFuZ2UgYWdhaW5zdCBpdCDigJRcbiAgICAgIC8vIGFuZCBkbyBub3QgYnJvYWRjYXN0LCB3aGljaCB3b3VsZCBlY2hvIGl0IGJhY2sgdG8gdGhlIHNlbmRlci5cbiAgICAgIGlmIChlbnRyeS51cGRhdGluZykge1xuICAgICAgICBwcmV2aW91c1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2tpcCBpZiB2YWx1ZSBoYXNuJ3QgY2hhbmdlZCAoZGVlcCBlcXVhbGl0eSBjaGVjaylcbiAgICAgIGlmIChkZWVwRXF1YWwodmFsdWUsIHByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAvLyBVcGRhdGUgdmVyaWZpY2F0aW9uIG1pcnJvciBpZiBlbmFibGVkXG4gICAgICBpZiAob3B0aW9ucy52ZXJpZnkpIHtcbiAgICAgICAgY29uc3QgdmVyaWZ5U2lnbmFsID0gc2lnIGFzIHVua25vd24gYXMgU2lnbmFsV2l0aFZlcmlmeTxUPjtcbiAgICAgICAgaWYgKHZlcmlmeVNpZ25hbC52ZXJpZnkpIHtcbiAgICAgICAgICAvLyBub3NlbWdyZXA6IGphdmFzY3JpcHQubGFuZy5zZWN1cml0eS5pbnNlY3VyZS1vYmplY3QtYXNzaWduLmluc2VjdXJlLW9iamVjdC1hc3NpZ24g4oCUIGludGVybmFsIG1pcnJvcjsgdmFsdWUgaXMgYSBkZWVwIEpTT04gY2xvbmUsIG5vdCBhcmJpdHJhcnkgZXh0ZXJuYWwgaW5wdXQuXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih2ZXJpZnlTaWduYWwudmVyaWZ5LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEluY3JlbWVudCBjbG9jayBtb25vdG9uaWNhbGx5XG4gICAgICBlbnRyeS5jbG9jaysrO1xuXG4gICAgICAvLyBwb2xseSMxNjc6IGJpbmQgdGhlIGNsb2NrIHRvIHRoZSB2YWx1ZSBIRVJFLCB3aGVyZSB0aGUgdHdvIGFncmVlLlxuICAgICAgLy9cbiAgICAgIC8vIGBkb1VwZGF0ZWAgdXNlZCB0byByZWFkIGBlbnRyeS5jbG9ja2Agd2hlbiBpdCBmaXJlZC4gVW5kZXJcbiAgICAgIC8vIGBkZWJvdW5jZU1zYCB0aGF0IGlzIGEgbGF0ZXIgbW9tZW50LCBhbmQgdGhlIGluY29taW5nLW1lc3NhZ2UgaGFuZGxlclxuICAgICAgLy8gYmVsb3cgcmFpc2VzIGBlbnRyeS5jbG9ja2AgdG8gYW55IG1lc3NhZ2UncyBjbG9jayDigJQgaW5jbHVkaW5nIGFcbiAgICAgIC8vIG1lc3NhZ2Ugd2hvc2UgdmFsdWUgaXQgcmVqZWN0cy4gU28gdGhlIGRlZmVycmVkIHdyaXRlIHBhaXJlZCB0aGlzXG4gICAgICAvLyB2YWx1ZSB3aXRoIHNvbWVib2R5IGVsc2UncyBjbG9jaywgcGVyc2lzdGVkIHRoZSBwYWlyLCBhbmQgYnJvYWRjYXN0XG4gICAgICAvLyBpdC4gVGhlIHBlcnNpc3RlZCBjbG9jayBpcyByZXN0b3JlZCBvbiB0aGUgbmV4dCBsb2FkLCBzbyBhIHBlZXJcbiAgICAgIC8vIHJlLXNlbmRpbmcgdGhlIHJlYWwgdmFsdWUgYXQgdGhhdCBjbG9jayB3YXMgdGhlbiByZWZ1c2VkIGJ5IHRoZVxuICAgICAgLy8gc3RyaWN0bHktZ3JlYXRlciBydWxlIGFuZCB0aGUgZGl2ZXJnZW5jZSBiZWNhbWUgZHVyYWJsZS5cbiAgICAgIGNvbnN0IGNsb2NrQXRXcml0ZSA9IGVudHJ5LmNsb2NrO1xuXG4gICAgICBjb25zdCBkb1VwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgZGVib3VuY2VUaW1lciA9IG51bGw7XG5cbiAgICAgICAgLy8gUGVyc2lzdCB0byBzdG9yYWdlXG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZVBlcnNpc3QgJiYgYWRhcHRlcnMuc3RvcmFnZSkge1xuICAgICAgICAgIHBlcnNpc3RUb1N0b3JhZ2Uoa2V5LCB2YWx1ZSwgY2xvY2tBdFdyaXRlLCBhZGFwdGVycy5zdG9yYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJyb2FkY2FzdCB0byBvdGhlciBjb250ZXh0c1xuICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVTeW5jICYmIGFkYXB0ZXJzLnN5bmMpIHtcbiAgICAgICAgICBicm9hZGNhc3RVcGRhdGUoa2V5LCB2YWx1ZSwgY2xvY2tBdFdyaXRlLCBhZGFwdGVycy5zeW5jKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gRGVib3VuY2UgaWYgc3BlY2lmaWVkXG4gICAgICBpZiAob3B0aW9ucy5kZWJvdW5jZU1zKSB7XG4gICAgICAgIGlmIChkZWJvdW5jZVRpbWVyKSBjbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lcik7XG4gICAgICAgIGRlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KGRvVXBkYXRlLCBvcHRpb25zLmRlYm91bmNlTXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9VcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gTGlzdGVuIGZvciB1cGRhdGVzIGZyb20gb3RoZXIgY29udGV4dHMgKG9ubHkgaWYgc3luYyBlbmFibGVkKVxuICBpZiAob3B0aW9ucy5lbmFibGVTeW5jICYmIGFkYXB0ZXJzLnN5bmMpIHtcbiAgICAvLyBDb25uZWN0IGlmIG5lZWRlZCAoc29tZSBhZGFwdGVycyByZXF1aXJlIGV4cGxpY2l0IGNvbm5lY3Rpb24pXG4gICAgaWYgKGFkYXB0ZXJzLnN5bmMuY29ubmVjdCkge1xuICAgICAgYWRhcHRlcnMuc3luYy5jb25uZWN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFrZSBhbiBpbmNvbWluZyB2YWx1ZSB0aGlzIGNvbnRleHQgaGFzIGRlY2lkZWQgdG8gYWNjZXB0LlxuICAgICAqXG4gICAgICogcG9sbHkjMTY3IHB1dCB0d28gc3RlcHMgaW4gZnJvbnQgb2YgdGhlIGFwcGx5LiBCb3RoIGFyZSBhYm91dCBhIHBlbmRpbmdcbiAgICAgKiBkZWJvdW5jZSB0aW1lciB0aGF0IHRoZSBtZXNzYWdlIGhhcyBqdXN0IG1hZGUgd3JvbmcuXG4gICAgICovXG4gICAgY29uc3QgYWNjZXB0SW5jb21pbmcgPSAodmFsdWU6IFQsIGNsb2NrOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgIC8vIFRoZSBsb2NhbCB2YWx1ZSBpcyBjYXVzYWxseSBvbGRlciB0aGFuIHRoaXMgb25lLCBzbyB0aGUgZGVmZXJyZWQgd3JpdGVcbiAgICAgIC8vIGhhcyBub3RoaW5nIGxlZnQgdG8gc2F5LiBEcm9wcGluZyBpdCBzdG9wcyBhIHN0YWxlIGJyb2FkY2FzdCB0aGF0IGFcbiAgICAgIC8vIHRoaXJkIGNvbnRleHQgc3RpbGwgYmVsb3cgdGhpcyBjbG9jayB3b3VsZCBhY2NlcHQuXG4gICAgICAvL1xuICAgICAgLy8gUmVhY2hlZCBvbmx5IGZvciBhIHZhbHVlIHRoaXMgY29udGV4dCBkb2VzIG5vdCBhbHJlYWR5IGhvbGQ6IHRoZVxuICAgICAgLy8gZGVlcC1lcXVhbGl0eSBza2lwIGJlbG93IHJldHVybnMgZmlyc3QsIHdoaWNoIGxlYXZlcyBhIHBlbmRpbmcgdGltZXJcbiAgICAgIC8vIGhvbGRpbmcgdGhhdCBzYW1lIHZhbHVlIGFybWVkLCBhcyBpdCBzaG91bGQgYmUuXG4gICAgICBpZiAoZGVib3VuY2VUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lcik7XG4gICAgICAgIGRlYm91bmNlVGltZXIgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBhcHBseVVwZGF0ZShlbnRyeSwgdmFsdWUsIGNsb2NrKTtcblxuICAgICAgLy8gYGFwcGx5VXBkYXRlYCBzZXRzIGBlbnRyeS51cGRhdGluZ2AsIHNvIHRoZSBsb2NhbCBlZmZlY3QgcmV0dXJuc1xuICAgICAgLy8gd2l0aG91dCB3cml0aW5nLiBQZXJzaXN0IHRoZSBpbmNvbWluZyBwYWlyIGhlcmUsIG9yIHN0b3JhZ2Uga2VlcHNcbiAgICAgIC8vIHdoYXRldmVyIGl0IGxhc3QgaGVsZCB3aGlsZSB0aGUgc2lnbmFsIGhvbGRzIHRoaXMgdmFsdWUg4oCUIGFuZCBvbiB0aGVcbiAgICAgIC8vIG5leHQgbG9hZCB0aGUgdHdvIGRpc2FncmVlLlxuICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlUGVyc2lzdCAmJiBhZGFwdGVycy5zdG9yYWdlKSB7XG4gICAgICAgIHBlcnNpc3RUb1N0b3JhZ2Uoa2V5LCB2YWx1ZSwgY2xvY2ssIGFkYXB0ZXJzLnN0b3JhZ2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKiogV2hldGhlciBhbiBpbmNvbWluZyB2YWx1ZSBpcyBvbmUgdGhpcyBjb250ZXh0IHNob3VsZCB0YWtlLiAqL1xuICAgIGNvbnN0IHNob3VsZEFjY2VwdCA9IChtZXNzYWdlOiBTdGF0ZVN5bmNNZXNzYWdlPFQ+KTogYm9vbGVhbiA9PiB7XG4gICAgICAvLyBWYWxpZGF0ZSBpbmNvbWluZyB2YWx1ZSBpZiB2YWxpZGF0b3IgcHJvdmlkZWRcbiAgICAgIGlmIChvcHRpb25zLnZhbGlkYXRvciAmJiAhb3B0aW9ucy52YWxpZGF0b3IobWVzc2FnZS52YWx1ZSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbUG9sbHldIFN0YXRlIFwiJHtrZXl9XCI6IFJlY2VpdmVkIGludmFsaWQgdmFsdWUgZnJvbSBzeW5jIChjbG9jazogJHttZXNzYWdlLmNsb2NrfSlgLFxuICAgICAgICAgIG1lc3NhZ2UudmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIHJlZHVuZGFudCB1cGRhdGVzIChkZWVwIGVxdWFsaXR5IGNoZWNrKVxuICAgICAgcmV0dXJuICFkZWVwRXF1YWwoZW50cnkuc2lnbmFsLnZhbHVlLCBtZXNzYWdlLnZhbHVlKTtcbiAgICB9O1xuXG4gICAgLy8gUmVnaXN0ZXIgc3luYyBtZXNzYWdlIGxpc3RlbmVyXG4gICAgYWRhcHRlcnMuc3luYy5vbk1lc3NhZ2U8VD4oKG1lc3NhZ2UpID0+IHtcbiAgICAgIGlmIChtZXNzYWdlLmtleSAhPT0ga2V5KSByZXR1cm47XG5cbiAgICAgIGNvbnN0IG9sZENsb2NrID0gZW50cnkuY2xvY2s7XG5cbiAgICAgIC8vIExhbXBvcnQgY2xvY2sgcnVsZTogQWx3YXlzIHVwZGF0ZSB0byBtYXgobG9jYWwsIHJlY2VpdmVkKVxuICAgICAgLy8gVGhpcyBtYWludGFpbnMgY2F1c2FsIG9yZGVyaW5nIGV2ZW4gd2hlbiByZWplY3RpbmcgdXBkYXRlc1xuICAgICAgZW50cnkuY2xvY2sgPSBNYXRoLm1heChlbnRyeS5jbG9jaywgbWVzc2FnZS5jbG9jayk7XG5cbiAgICAgIC8vIE9ubHkgYWNjZXB0IHZhbHVlIHVwZGF0ZXMgaWYgcmVjZWl2ZWQgY2xvY2sgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIG9sZCBsb2NhbCBjbG9ja1xuICAgICAgLy8gVGhpcyBlbnN1cmVzIHdlIG9ubHkgYXBwbHkgY2F1c2FsbHkgbmV3ZXIgdXBkYXRlc1xuICAgICAgaWYgKG1lc3NhZ2UuY2xvY2sgPiBvbGRDbG9jayAmJiBzaG91bGRBY2NlcHQobWVzc2FnZSkpIHtcbiAgICAgICAgYWNjZXB0SW5jb21pbmcobWVzc2FnZS52YWx1ZSBhcyB1bmtub3duIGFzIFQsIG1lc3NhZ2UuY2xvY2spO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGVSZWdpc3RyeS5zZXQoa2V5LCBlbnRyeSBhcyB1bmtub3duIGFzIFN0YXRlRW50cnk8dW5rbm93bj4pO1xuICByZXR1cm4gc2lnO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuLyoqXG4gKiBCYWNrZmlsbCBrZXlzIGFkZGVkIHRvIHRoZSBzdGF0ZSBzaGFwZSBzaW5jZSBhIHZhbHVlIHdhcyBwZXJzaXN0ZWQuXG4gKlxuICogU3RvcmVkIHBsYWluIG9iamVjdHMgYXJlIHNoYWxsb3ctbWVyZ2VkIG92ZXIgdGhlIGN1cnJlbnQgZGVmYXVsdHMgc28gdGhhdCBhXG4gKiBmaWVsZCBhZGRlZCBpbiBhIGxhdGVyIHJlbGVhc2UgcmVoeWRyYXRlcyB0byBpdHMgZGVmYXVsdCByYXRoZXIgdGhhblxuICogYHVuZGVmaW5lZGAuIFByaW1pdGl2ZXMgYW5kIGFycmF5cyBhcmUgcmVwbGFjZWQgd2hvbGVzYWxlIOKAlCBtZXJnaW5nIHRob3NlXG4gKiB3b3VsZCBjb3JydXB0IHRoZW0uXG4gKi9cbmZ1bmN0aW9uIHJlY29uY2lsZVdpdGhEZWZhdWx0czxUPihkZWZhdWx0czogVCwgc3RvcmVkOiB1bmtub3duKTogVCB7XG4gIC8vIFBlcnNpc3RlZCB2YWx1ZXMgYXJlIHRydXN0ZWQgdG8gYmUgdGhlIFQgdGhpcyBrZXkgd2FzIHJlZ2lzdGVyZWQgd2l0aDtcbiAgLy8gc2NoZW1hIGRyaWZ0IGlzIGhhbmRsZWQgYnkgdGhlIG1lcmdlLCBub3QgYnkgcnVudGltZSB2YWxpZGF0aW9uLlxuICBpZiAoaXNQbGFpbk9iamVjdChkZWZhdWx0cykgJiYgaXNQbGFpbk9iamVjdChzdG9yZWQpKSB7XG4gICAgcmV0dXJuIHsgLi4uZGVmYXVsdHMsIC4uLnN0b3JlZCB9IGFzIHVua25vd24gYXMgVDtcbiAgfVxuICByZXR1cm4gc3RvcmVkIGFzIHVua25vd24gYXMgVDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZEZyb21TdG9yYWdlPFQ+KFxuICBrZXk6IHN0cmluZyxcbiAgc2lnOiBTaWduYWw8VD4sXG4gIGVudHJ5OiBTdGF0ZUVudHJ5PFQ+LFxuICBzdG9yYWdlOiBTdG9yYWdlQWRhcHRlcixcbiAgdmFsaWRhdG9yPzogKHZhbHVlOiB1bmtub3duKSA9PiB2YWx1ZSBpcyBUXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdG9yYWdlLmdldChba2V5LCBgJHtrZXl9OmNsb2NrYF0pO1xuXG4gICAgaWYgKHJlc3VsdFtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHNpZyBzdGlsbCBob2xkcyB0aGUgaW5pdGlhbCB2YWx1ZSBoZXJlLCBzbyBpdCBpcyB0aGUgZGVmYXVsdCBiYXNlXG4gICAgICAvLyBmb3IgYmFja2ZpbGxpbmcga2V5cyB0aGUgcGVyc2lzdGVkIGJsb2IgcHJlZGF0ZXMuXG4gICAgICBjb25zdCBzdG9yZWRWYWx1ZSA9IHJlY29uY2lsZVdpdGhEZWZhdWx0cyhzaWcucGVlaygpLCByZXN1bHRba2V5XSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHN0b3JlZCB2YWx1ZSBpZiB2YWxpZGF0b3IgcHJvdmlkZWRcbiAgICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgICAgaWYgKHZhbGlkYXRvcihzdG9yZWRWYWx1ZSkpIHtcbiAgICAgICAgICBzaWcudmFsdWUgPSBzdG9yZWRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgW1BvbGx5XSBTdGF0ZSBcIiR7a2V5fVwiOiBTdG9yZWQgdmFsdWUgZmFpbGVkIHZhbGlkYXRpb24sIHVzaW5nIGluaXRpYWwgdmFsdWVgLFxuICAgICAgICAgICAgc3RvcmVkVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaWcudmFsdWUgPSBzdG9yZWRWYWx1ZSBhcyB1bmtub3duIGFzIFQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdFtgJHtrZXl9OmNsb2NrYF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW50cnkuY2xvY2sgPSByZXN1bHRbYCR7a2V5fTpjbG9ja2BdIGFzIHVua25vd24gYXMgbnVtYmVyO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oYFtQb2xseV0gRmFpbGVkIHRvIGxvYWQgc3RhdGUgZnJvbSBzdG9yYWdlOiAke2tleX1gLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGVyc2lzdFRvU3RvcmFnZTxUPihrZXk6IHN0cmluZywgdmFsdWU6IFQsIGNsb2NrOiBudW1iZXIsIHN0b3JhZ2U6IFN0b3JhZ2VBZGFwdGVyKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgc3RvcmFnZS5zZXQoe1xuICAgICAgW2tleV06IHZhbHVlLFxuICAgICAgW2Ake2tleX06Y2xvY2tgXTogY2xvY2ssXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKGBbUG9sbHldIEZhaWxlZCB0byBwZXJzaXN0IHN0YXRlIHRvIHN0b3JhZ2U6ICR7a2V5fWAsIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBicm9hZGNhc3RVcGRhdGU8VD4oa2V5OiBzdHJpbmcsIHZhbHVlOiBULCBjbG9jazogbnVtYmVyLCBzeW5jOiBTeW5jQWRhcHRlcik6IHZvaWQge1xuICB0cnkge1xuICAgIHN5bmMuYnJvYWRjYXN0KHtcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlLFxuICAgICAgY2xvY2ssXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKGBbUG9sbHldIEZhaWxlZCB0byBicm9hZGNhc3Qgc3RhdGUgdXBkYXRlOiAke2tleX1gLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlVcGRhdGU8VD4oZW50cnk6IFN0YXRlRW50cnk8VD4sIHZhbHVlOiBULCBjbG9jazogbnVtYmVyKTogdm9pZCB7XG4gIGVudHJ5LnVwZGF0aW5nID0gdHJ1ZTtcbiAgZW50cnkuc2lnbmFsLnZhbHVlID0gdmFsdWU7XG4gIGVudHJ5LmNsb2NrID0gY2xvY2s7XG4gIGVudHJ5LnVwZGF0aW5nID0gZmFsc2U7XG59XG5cbi8qKlxuICogR2V0IHN0YXRlIGJ5IGtleSAodXNlZnVsIGZvciByZXRyaWV2aW5nIHN0YXRlIHdpdGhvdXQgcmUtY3JlYXRpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0ZUJ5S2V5PFQ+KGtleTogc3RyaW5nKTogU2lnbmFsPFQ+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZW50cnkgPSBzdGF0ZVJlZ2lzdHJ5LmdldChrZXkpO1xuICByZXR1cm4gZW50cnk/LnNpZ25hbCBhcyB1bmtub3duIGFzIFNpZ25hbDxUPiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDbGVhciBzdGF0ZSByZWdpc3RyeSAodXNlZnVsIGZvciB0ZXN0aW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJTdGF0ZVJlZ2lzdHJ5KCk6IHZvaWQge1xuICBzdGF0ZVJlZ2lzdHJ5LmNsZWFyKCk7XG59XG4iLAogICAgIi8qKlxuICogU3RhdGUgb3duZWQgYnkgdGhlIGNvbXBvbmVudCBnYWxsZXJ5LlxuICpcbiAqIFRoZSBnYWxsZXJ5IGlzIGEgc3RhbmRhbG9uZSBkZXYgc3VyZmFjZSB3aXRoIG5vIHNlcnZlciBzdGF0ZSwgc28gdGhlc2VcbiAqIHNpZ25hbHMgc3RheSBtb2R1bGUtbG9jYWwg4oCUIHRoZXkgbmV2ZXIgam9pbiBhIHN5bmNlZCBzdG9yZSBidW5kbGUuIEFjdGlvblxuICogaGFuZGxlcnMgKGFjdGlvbnMudHMpIHJlYWNoIHRoZW0gYnkgaW1wb3J0LCB0aGUgd2F5IGVhbCdzIHNob3djYXNlIGRvZXMuXG4gKiBgcmVzZXRHYWxsZXJ5U3RvcmVzKClgIGV4aXN0cyBzbyB0aGUgYnJvd3Nlci92aXN1YWwgdGVzdCBjYW4gaXNvbGF0ZSBydW5zLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUZvcm0sIHNldEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9hY3Rpb25zXCI7XG5pbXBvcnQgeyAkc3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vc3JjL3NoYXJlZC9saWIvc3RhdGUudHNcIjtcblxuZXhwb3J0IHR5cGUgR2FsbGVyeVRoZW1lID0gXCJzeXN0ZW1cIiB8IFwibGlnaHRcIiB8IFwiZGFya1wiO1xuXG4vKiogVGhlIGdhbGxlcnkncyBBY3Rpb25Gb3JtIGJpbmRzIHRvIGFuIGVtcHR5IGJ1bmRsZSDigJQgbm8gc3RvcmUgaXMgdG91Y2hlZC4gKi9cbmV4cG9ydCB0eXBlIEdhbGxlcnlTdG9yZXMgPSBSZWNvcmQ8c3RyaW5nLCBuZXZlcj47XG5cbi8qKiBUaGVtZSBvdmVycmlkZSwgYXBwbGllZCB0byB0aGUgcGFuZWwgYXMgYGRhdGEtcG9sbHktdGhlbWVgLiBgc3lzdGVtYCBvbWl0c1xuICogIHRoZSBhdHRyaWJ1dGUgYW5kIGxldHMgYHByZWZlcnMtY29sb3Itc2NoZW1lYCBkZWNpZGUuICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlUaGVtZSA9ICRzdGF0ZTxHYWxsZXJ5VGhlbWU+KFwic3lzdGVtXCIpO1xuLyoqIERyaXZlcyB0aGUgbGl2ZSA8TW9kYWw+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5TW9kYWxPcGVuID0gJHN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbi8qKiBEcml2ZXMgdGhlIGxpdmUgPERyb3Bkb3duPiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeURyb3Bkb3duT3BlbiA9ICRzdGF0ZTxib29sZWFuPihmYWxzZSk7XG4vKiogU2VsZWN0aW9uIGZvciB0aGUgc2luZ2xlLXNlbGVjdCA8U2VsZWN0PiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVNlbGVjdFNpbmdsZSA9ICRzdGF0ZTxTZXQ8c3RyaW5nPj4obmV3IFNldChbXCJjb21ldFwiXSkpO1xuLyoqIFNlbGVjdGlvbiBmb3IgdGhlIG11bHRpLXNlbGVjdCA8U2VsZWN0PiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVNlbGVjdE11bHRpID0gJHN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KFtcImNvbWV0XCIsIFwibmVidWxhXCJdKSk7XG4vKiogU2VsZWN0aW9uIGZvciB0aGUgY2xlYXJhYmxlIHNpbmdsZS1zZWxlY3QgPFNlbGVjdD4gc3BlY2ltZW4uIFN0YXJ0cyBlbXB0eVxuICogIHNvIHRoZSBcIkFueSDigKZcIiBjbGVhciBvcHRpb24gaXMgdGhlIGFjdGl2ZSByb3cuICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlTZWxlY3RDbGVhcmFibGUgPSAkc3RhdGU8U2V0PHN0cmluZz4+KG5ldyBTZXQoKSk7XG4vKiogU2VsZWN0aW9uIGZvciB0aGUgbG9uZy1sYWJlbCA8U2VsZWN0PiBzcGVjaW1lbiAocG9sbHkjMTgwKS4gVGhlIGxhYmVsIGlzXG4gKiAgd2lkZXIgdGhhbiBgLS1wb2xseS1jb250cm9sLW1heC13aWR0aGAsIHNvIHRoZSB0cmlnZ2VyIG11c3QgdHJ1bmNhdGUgaXRcbiAqICByYXRoZXIgdGhhbiB3cmFwIHRoZSBjYXJldCBvbnRvIGEgc2Vjb25kIGxpbmUuIEV2ZXJ5IHNob3J0LWxhYmVsIHNwZWNpbWVuXG4gKiAgcGFzc2VkIHRocm91Z2hvdXQgdGhhdCByZWdyZXNzaW9uLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5U2VsZWN0TG9uZyA9ICRzdGF0ZTxTZXQ8c3RyaW5nPj4obmV3IFNldChbXCJsb25nXCJdKSk7XG4vKiogVGhlIGxpdmUsIHNpZ25hbC1ib3VuZCA8Q2hlY2tib3g+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5Q2hlY2tlZCA9ICRzdGF0ZTxib29sZWFuPih0cnVlKTtcbi8qKiBUaGUgY29udHJvbGxlZCA8VGV4dElucHV0PiBzcGVjaW1lbiB2YWx1ZS4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVRleHQgPSAkc3RhdGU8c3RyaW5nPihcIkNvbnRyb2xsZWQgdmFsdWVcIik7XG4vKiogTGFzdCB2YWx1ZSBjb21taXR0ZWQgYnkgdGhlIDxBY3Rpb25JbnB1dD4gLyA8QWN0aW9uU2VsZWN0PiBzcGVjaW1lbnMuICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlDb21taXR0ZWQgPSAkc3RhdGU8c3RyaW5nPihcIuKAlFwiKTtcbi8qKiBBY3RpdmUgdGFiIGlkIGZvciB0aGUgPFRhYnM+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5VGFiID0gJHN0YXRlPHN0cmluZz4oXCJvdmVydmlld1wiKTtcbi8qKiBOYW1lIG9mIHRoZSBsYXN0IGZpbGUgcGlja2VkIGJ5IHRoZSA8RmlsZUlucHV0PiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeUZpbGVOYW1lID0gJHN0YXRlPHN0cmluZz4oXCLigJRcIik7XG5cbi8qKlxuICogVGhlIGZvcm0gYmVoaW5kIHRoZSA8QWN0aW9uRm9ybT4gc3BlY2ltZW4uIGBjcmVhdGVGb3JtYCByZXF1aXJlcyBgYmluZFN0b3Jlc2BcbiAqIGJlZm9yZSBhIHN1Ym1pdCBjYW4gcnVuOyBjbGllbnQudHN4IGJpbmRzIGl0IHRvIHRoZSBlbXB0eSBnYWxsZXJ5IGJ1bmRsZSBhdFxuICogYm9vdC4gSXRzIGAuYWN0aW9uc2AgYXJlIHNwcmVhZCBpbnRvIHRoZSByZWdpc3RyeSAoc2VlIGFjdGlvbnMudHMpLlxuICovXG5leHBvcnQgY29uc3QgZ2FsbGVyeUZvcm0gPSBjcmVhdGVGb3JtPHsgZnVsbE5hbWU6IHN0cmluZzsgZW1haWw6IHN0cmluZyB9LCBHYWxsZXJ5U3RvcmVzPih7XG4gIG5hbWU6IFwiZ2FsbGVyeS1mb3JtXCIsXG4gIGluaXRpYWxWYWx1ZXM6IHsgZnVsbE5hbWU6IFwiXCIsIGVtYWlsOiBcIlwiIH0sXG4gIG9uU3VibWl0OiAoeyB2YWx1ZXMgfSkgPT4ge1xuICAgIHNldEVycm9yKFxuICAgICAgYEFjdGlvbkZvcm0gc3VibWl0dGVkIOKAlCBuYW1lIFwiJHt2YWx1ZXMuZnVsbE5hbWUgfHwgXCIoZW1wdHkpXCJ9XCIsIGAgK1xuICAgICAgICBgZW1haWwgXCIke3ZhbHVlcy5lbWFpbCB8fCBcIihlbXB0eSlcIn1cIi5gLFxuICAgICAgeyBzZXZlcml0eTogXCJpbmZvXCIgfVxuICAgICk7XG4gIH0sXG59KTtcblxuLyoqIFJlc2V0IGV2ZXJ5IGdhbGxlcnkgc2lnbmFsIHRvIGl0cyBpbml0aWFsIHZhbHVlIOKAlCBmb3IgdGVzdCBpc29sYXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRHYWxsZXJ5U3RvcmVzKCk6IHZvaWQge1xuICAkZ2FsbGVyeVRoZW1lLnZhbHVlID0gXCJzeXN0ZW1cIjtcbiAgJGdhbGxlcnlNb2RhbE9wZW4udmFsdWUgPSBmYWxzZTtcbiAgJGdhbGxlcnlEcm9wZG93bk9wZW4udmFsdWUgPSBmYWxzZTtcbiAgJGdhbGxlcnlTZWxlY3RTaW5nbGUudmFsdWUgPSBuZXcgU2V0KFtcImNvbWV0XCJdKTtcbiAgJGdhbGxlcnlTZWxlY3RNdWx0aS52YWx1ZSA9IG5ldyBTZXQoW1wiY29tZXRcIiwgXCJuZWJ1bGFcIl0pO1xuICAkZ2FsbGVyeVNlbGVjdENsZWFyYWJsZS52YWx1ZSA9IG5ldyBTZXQoKTtcbiAgJGdhbGxlcnlTZWxlY3RMb25nLnZhbHVlID0gbmV3IFNldChbXCJsb25nXCJdKTtcbiAgJGdhbGxlcnlDaGVja2VkLnZhbHVlID0gdHJ1ZTtcbiAgJGdhbGxlcnlUZXh0LnZhbHVlID0gXCJDb250cm9sbGVkIHZhbHVlXCI7XG4gICRnYWxsZXJ5Q29tbWl0dGVkLnZhbHVlID0gXCLigJRcIjtcbiAgJGdhbGxlcnlUYWIudmFsdWUgPSBcIm92ZXJ2aWV3XCI7XG4gICRnYWxsZXJ5RmlsZU5hbWUudmFsdWUgPSBcIuKAlFwiO1xuICBnYWxsZXJ5Rm9ybS5jbG9zZSgpO1xufVxuIiwKICAgICIvKipcbiAqIEFjdGlvbnMgZm9yIHRoZSBnYWxsZXJ5J3MgaW50ZXJhY3RpdmUgc3BlY2ltZW5zLiBFdmVyeSBoYW5kbGVyIGRyaXZlcyBhXG4gKiBtb2R1bGUtbG9jYWwgc2lnbmFsIChzdG9yZXMudHMpIG9yIGEgcG9sbHkgb3ZlcmxheSBwcmltaXRpdmUg4oCUIG5vbmUgdG91Y2hlcyBhXG4gKiBzdG9yZSBidW5kbGUsIHNvIHRoZSBnYWxsZXJ5IHN0YXlzIGEgc2VsZi1jb250YWluZWQgZGV2IHN1cmZhY2UuIFNwcmVhZGluZ1xuICogYGdhbGxlcnlGb3JtLmFjdGlvbnNgIGFkZHMgdGhlIGF1dG8tcmVnaXN0ZXJlZCBgZ2FsbGVyeS1mb3JtOntvcGVuLGNsb3NlLFxuICogc3VibWl0fWAgaGFuZGxlcnMuIGNsaWVudC50c3ggd2lyZXMgdGhpcyByZWdpc3RyeSBpbnRvIHRoZSBkb2N1bWVudCB2aWFcbiAqIGBpbnN0YWxsRXZlbnREZWxlZ2F0aW9uYCwgZXhhY3RseSBhcyBhIHJlYWwgY29uc3VtZXIgYXBwIHdvdWxkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQWN0aW9uUmVnaXN0cnksIEVycm9yU2V2ZXJpdHkgfSBmcm9tIFwiLi4vLi4vLi4vc3JjL2FjdGlvbnNcIjtcbmltcG9ydCB7IHNldEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9hY3Rpb25zXCI7XG5pbXBvcnQgeyBjb25maXJtIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9wb2xseS11aVwiO1xuaW1wb3J0IHtcbiAgJGdhbGxlcnlDb21taXR0ZWQsXG4gICRnYWxsZXJ5TW9kYWxPcGVuLFxuICAkZ2FsbGVyeVRhYixcbiAgJGdhbGxlcnlUaGVtZSxcbiAgdHlwZSBHYWxsZXJ5U3RvcmVzLFxuICB0eXBlIEdhbGxlcnlUaGVtZSxcbiAgZ2FsbGVyeUZvcm0sXG59IGZyb20gXCIuL3N0b3Jlcy50c1wiO1xuXG5jb25zdCBUSEVNRVM6IHJlYWRvbmx5IEdhbGxlcnlUaGVtZVtdID0gW1wic3lzdGVtXCIsIFwibGlnaHRcIiwgXCJkYXJrXCJdO1xuY29uc3QgU0VWRVJJVElFUzogcmVhZG9ubHkgRXJyb3JTZXZlcml0eVtdID0gW1wiaW5mb1wiLCBcIndhcm5pbmdcIiwgXCJlcnJvclwiXTtcblxuZXhwb3J0IGNvbnN0IEdBTExFUllfQUNUSU9OUzogQWN0aW9uUmVnaXN0cnk8R2FsbGVyeVN0b3Jlcz4gPSB7XG4gIC4uLmdhbGxlcnlGb3JtLmFjdGlvbnMsXG5cbiAgXCJnYWxsZXJ5OnNldC10aGVtZVwiOiAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCB0aGVtZSA9IGRhdGFbXCJ0aGVtZVwiXTtcbiAgICBpZiAodGhlbWUgPT09IFwic3lzdGVtXCIgfHwgdGhlbWUgPT09IFwibGlnaHRcIiB8fCB0aGVtZSA9PT0gXCJkYXJrXCIpIHtcbiAgICAgICRnYWxsZXJ5VGhlbWUudmFsdWUgPSB0aGVtZTtcbiAgICB9XG4gIH0sXG5cbiAgXCJnYWxsZXJ5OnNldC10YWJcIjogKHsgZGF0YSB9KSA9PiB7XG4gICAgY29uc3QgaWQgPSBkYXRhW1wiaWRcIl07XG4gICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIikgJGdhbGxlcnlUYWIudmFsdWUgPSBpZDtcbiAgfSxcblxuICBcImdhbGxlcnk6bW9kYWwtb3BlblwiOiAoKSA9PiB7XG4gICAgJGdhbGxlcnlNb2RhbE9wZW4udmFsdWUgPSB0cnVlO1xuICB9LFxuXG4gIFwiZ2FsbGVyeTpjb21taXRcIjogKHsgZGF0YSB9KSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBkYXRhW1widmFsdWVcIl07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgJGdhbGxlcnlDb21taXR0ZWQudmFsdWUgPSB2YWx1ZTtcbiAgfSxcblxuICBcImdhbGxlcnk6dG9hc3RcIjogKHsgZGF0YSB9KSA9PiB7XG4gICAgY29uc3Qgc2V2ZXJpdHkgPSBTRVZFUklUSUVTLmZpbmQoKHMpID0+IHMgPT09IGRhdGFbXCJzZXZlcml0eVwiXSkgPz8gXCJpbmZvXCI7XG4gICAgc2V0RXJyb3IoYFRoaXMgaXMgYSAke3NldmVyaXR5fSB0b2FzdCDigJQgY2xpY2sgaXQgb3Igd2FpdCBmb3IgaXQgdG8gZGlzbWlzcy5gLCB7XG4gICAgICBzZXZlcml0eSxcbiAgICB9KTtcbiAgfSxcblxuICBcImdhbGxlcnk6Y29uZmlybVwiOiBhc3luYyAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCBkYW5nZXIgPSBkYXRhW1wiZGFuZ2VyXCJdID09PSBcInRydWVcIjtcbiAgICBjb25zdCBvayA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgdGl0bGU6IGRhbmdlciA/IFwiRGVsZXRlIHRoaXMgaXRlbT9cIiA6IFwiU2F2ZSB5b3VyIGNoYW5nZXM/XCIsXG4gICAgICBib2R5OiBkYW5nZXJcbiAgICAgICAgPyBcIlRoaXMgY2Fubm90IGJlIHVuZG9uZS4gVGhlIGl0ZW0gd2lsbCBiZSBwZXJtYW5lbnRseSByZW1vdmVkLlwiXG4gICAgICAgIDogXCJZb3VyIGNoYW5nZXMgd2lsbCBiZSBhcHBsaWVkIGltbWVkaWF0ZWx5LlwiLFxuICAgICAgZGFuZ2VyLFxuICAgICAgY29uZmlybUxhYmVsOiBkYW5nZXIgPyBcIkRlbGV0ZVwiIDogXCJTYXZlXCIsXG4gICAgfSk7XG4gICAgc2V0RXJyb3IoYENvbmZpcm1EaWFsb2cgcmVzb2x2ZWQgJHtTdHJpbmcob2spfS5gLCB7IHNldmVyaXR5OiBvayA/IFwiaW5mb1wiIDogXCJ3YXJuaW5nXCIgfSk7XG4gIH0sXG59O1xuXG4vKiogVGhlIHRoZW1lIGN5Y2xlLCBleHBvc2VkIHNvIHRoZSBwYW5lbCBjYW4gcmVuZGVyIG9uZSBidXR0b24gcGVyIG9wdGlvbi4gKi9cbmV4cG9ydCB7IFRIRU1FUyB9O1xuIiwKICAgICIvKipcbiAqIFRoZSBnYWxsZXJ5IGNhdGFsb2d1ZSDigJQgb25lIHNlY3Rpb24gcGVyIHBvbGx5LXVpIHByaW1pdGl2ZSwgZWFjaCByZW5kZXJpbmdcbiAqIHRoZSBjb25maWd1cmF0aW9ucyB3b3J0aCBzZWVpbmcuIEFkYXB0ZWQgZnJvbSBlYWwncyBzaG93Y2FzZSAod2hpY2ggY29uc3VtZXNcbiAqIHRoaXMgdmVyeSBsaWJyYXJ5KSwgcmVwb2ludGVkIGF0IHRoZSBsb2NhbCBzb3VyY2Ugc28gdGhlIGdhbGxlcnkgcmVuZGVycyB0aGVcbiAqIHByaW1pdGl2ZXMgZXhhY3RseSBhcyB0aGV5IHNoaXAuXG4gKlxuICogRXZlcnkgc2VjdGlvbiBjYXJyaWVzIGEgYGNvbXBvbmVudGAgbmFtaW5nIHRoZSBwb2xseS11aSBleHBvcnQgaXQgY292ZXJzO1xuICogcmVnaXN0cnktY292ZXJhZ2UudHMgYXNzZXJ0cyB0aGF0IGV2ZXJ5IGNvbXBvbmVudCBpbiByZWdpc3RyeS5nZW5lcmF0ZWQudHNcbiAqIGhhcyBhIHNlY3Rpb24gaGVyZSwgc28gYSBuZXcgcHJpbWl0aXZlIGNhbid0IGxhbmQgd2l0aG91dCBhIHNwZWNpbWVuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4sIEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7XG4gIEFjdGlvbkZvcm0sXG4gIEFjdGlvbklucHV0LFxuICBBY3Rpb25TZWxlY3QsXG4gIEJhZGdlLFxuICBCdXR0b24sXG4gIENhcmQsXG4gIENoZWNrYm94LFxuICBDbHVzdGVyLFxuICBDb2RlLFxuICBDb2xsYXBzaWJsZSxcbiAgRHJvcGRvd24sXG4gIEZpbGVJbnB1dCxcbiAgSHRtbCxcbiAgTGF5b3V0LFxuICBMaW5rLFxuICBNb2RhbCxcbiAgT3V0cHV0LFxuICBTZWxlY3QsXG4gIFNrZWxldG9uLFxuICBTdXJmYWNlLFxuICBUYWJzLFxuICBUZXh0LFxuICBUZXh0SW5wdXQsXG4gIFRvZ2dsZSxcbn0gZnJvbSBcIi4uLy4uLy4uL3NyYy9wb2xseS11aVwiO1xuaW1wb3J0IHtcbiAgJGdhbGxlcnlDaGVja2VkLFxuICAkZ2FsbGVyeUNvbW1pdHRlZCxcbiAgJGdhbGxlcnlEcm9wZG93bk9wZW4sXG4gICRnYWxsZXJ5RmlsZU5hbWUsXG4gICRnYWxsZXJ5TW9kYWxPcGVuLFxuICAkZ2FsbGVyeVNlbGVjdENsZWFyYWJsZSxcbiAgJGdhbGxlcnlTZWxlY3RMb25nLFxuICAkZ2FsbGVyeVNlbGVjdE11bHRpLFxuICAkZ2FsbGVyeVNlbGVjdFNpbmdsZSxcbiAgJGdhbGxlcnlUYWIsXG4gICRnYWxsZXJ5VGV4dCxcbiAgZ2FsbGVyeUZvcm0sXG59IGZyb20gXCIuL3N0b3Jlcy50c1wiO1xuXG4vKipcbiAqIE9uZSBjYXRhbG9ndWVkIGV4YW1wbGU6IGEgc3RhZ2UgaG9sZGluZyBsaXZlIGNvbXBvbmVudChzKSBhbmQgYSBjYXB0aW9uXG4gKiBuYW1pbmcgdGhlIGNvbmZpZ3VyYXRpb24gb24gc2hvdy4gYHdpZGVgIHNwYW5zIGV2ZXJ5IGdyaWQgY29sdW1uIGZvclxuICogc3BlY2ltZW5zIHRoYXQgbmVlZCB0aGUgcm9vbSAobGF5b3V0cywgZm9ybXMsIGNhcmRzKS5cbiAqL1xuZnVuY3Rpb24gU3BlY2ltZW4ocHJvcHM6IHsgY2FwdGlvbjogc3RyaW5nOyB3aWRlPzogYm9vbGVhbjsgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgdmFyaWFudD1cInN1bmtlblwiXG4gICAgICByYWRpdXM9XCJtZFwiXG4gICAgICBib3JkZXI9XCJkZWZhdWx0XCJcbiAgICAgIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIlxuICAgICAgY2xhc3NOYW1lPXtwcm9wcy53aWRlID8gXCJnYWxsZXJ5LXNwZWNpbWVuIGdhbGxlcnktc3BlY2ltZW4tLXdpZGVcIiA6IFwiZ2FsbGVyeS1zcGVjaW1lblwifVxuICAgID5cbiAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnYWxsZXJ5LXN0YWdlXCI+e3Byb3BzLmNoaWxkcmVufTwvZGl2PlxuICAgICAgICA8VGV4dCBzaXplPVwieHNcIiB0b25lPVwibXV0ZWRcIiBjbGFzc05hbWU9XCJnYWxsZXJ5LWNvZGVcIj5cbiAgICAgICAgICB7cHJvcHMuY2FwdGlvbn1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG4vKiogQSBuZXV0cmFsIGZpbGxlciBibG9jayBmb3IgdGhlIGxheW91dCBzcGVjaW1lbnMuICovXG5mdW5jdGlvbiBCb3gocHJvcHM6IHsgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZSB2YXJpYW50PVwicmFpc2VkXCIgcmFkaXVzPVwic21cIiBib3JkZXI9XCJkZWZhdWx0XCIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgPFRleHQgc2l6ZT1cInNtXCI+e3Byb3BzLmNoaWxkcmVufTwvVGV4dD5cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmNvbnN0IFNUQVI6IEpTWC5FbGVtZW50ID0gKFxuICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImdhbGxlcnktaWNvblwiPlxuICAgIOKYhVxuICA8L3NwYW4+XG4pO1xuXG4vKipcbiAqIHBvbGx5IzE4MDogYSBsYWJlbCB3aWRlciB0aGFuIGAtLXBvbGx5LWNvbnRyb2wtbWF4LXdpZHRoYCwgc2hhcmVkIGJ5IHRoZVxuICogPFNlbGVjdD4gYW5kIDxBY3Rpb25TZWxlY3Q+IGxvbmctbGFiZWwgc3BlY2ltZW5zIHNvIHRoZSB0d28gdHJpZ2dlcnMgbXVzdFxuICogbWVhc3VyZSB0aGUgc2FtZSBib3guIEV2ZXJ5IGNhdGFsb2d1ZWQgU2VsZWN0IHVzZWQgYSBzaG9ydCBsYWJlbCwgd2hpY2ggaXNcbiAqIHdoeSBhIHRyaWdnZXIgdGhhdCBoYWQgbG9zdCBpdHMgbGF5b3V0IHJvdyBzdGlsbCBtZWFzdXJlZCA0MHB4IGFuZCB0aGVcbiAqIGNhcmV0IG9ubHkgd3JhcHBlZCBpbiBhIGNvbnN1bWVyIGFwcC5cbiAqL1xuY29uc3QgTE9OR19TRUxFQ1RfTEFCRUwgPSBcIkEgZGVsaWJlcmF0ZWx5IGxvbmcgb3B0aW9uIGxhYmVsIHRoYXQgb3ZlcmZsb3dzIHRoZSBjb250cm9sIG1heCB3aWR0aFwiO1xuXG5jb25zdCBMT05HX1NFTEVDVF9PUFRJT05TID0gW1xuICB7IHZhbHVlOiBcImxvbmdcIiwgbGFiZWw6IExPTkdfU0VMRUNUX0xBQkVMIH0sXG4gIHsgdmFsdWU6IFwic2hvcnRcIiwgbGFiZWw6IFwiU2hvcnRcIiB9LFxuXTtcblxuZXhwb3J0IGludGVyZmFjZSBHYWxsZXJ5U2VjdGlvbiB7XG4gIC8qKiBBbmNob3IgaWQgZm9yIHRoZSBpbi1wYWdlIG5hdi4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIERpc3BsYXkgaGVhZGluZy4gKi9cbiAgdGl0bGU6IHN0cmluZztcbiAgLyoqIFRoZSBwb2xseS11aSBleHBvcnQgdGhpcyBzZWN0aW9uIGNvdmVycyAobWF0Y2hlZCBhZ2FpbnN0IHRoZSByZWdpc3RyeSkuICovXG4gIGNvbXBvbmVudDogc3RyaW5nO1xuICAvKiogT25lLWxpbmUgZGVzY3JpcHRpb24uICovXG4gIHN1bW1hcnk6IHN0cmluZztcbiAgcmVuZGVyOiAoKSA9PiBKU1guRWxlbWVudDtcbn1cblxuZXhwb3J0IGNvbnN0IEdBTExFUllfU0VDVElPTlM6IHJlYWRvbmx5IEdhbGxlcnlTZWN0aW9uW10gPSBbXG4gIHtcbiAgICBpZDogXCJiYWRnZVwiLFxuICAgIHRpdGxlOiBcIkJhZGdlXCIsXG4gICAgY29tcG9uZW50OiBcIkJhZGdlXCIsXG4gICAgc3VtbWFyeTogXCJTbWFsbCBpbmxpbmUgc3RhdHVzIGNoaXAuIE9uZSB2YXJpYW50IHBlciBzZW1hbnRpYyB0b25lLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgeyhbXCJkZWZhdWx0XCIsIFwiaW5mb1wiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCJdIGFzIGNvbnN0KS5tYXAoKHYpID0+IChcbiAgICAgICAgICA8U3BlY2ltZW4ga2V5PXt2fSBjYXB0aW9uPXtgdmFyaWFudD1cIiR7dn1cImB9PlxuICAgICAgICAgICAgPEJhZGdlIHZhcmlhbnQ9e3Z9Pnt2fTwvQmFkZ2U+XG4gICAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgKSl9XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYnV0dG9uXCIsXG4gICAgdGl0bGU6IFwiQnV0dG9uXCIsXG4gICAgY29tcG9uZW50OiBcIkJ1dHRvblwiLFxuICAgIHN1bW1hcnk6IFwiSW50ZXJhY3RpdmUgY29udHJvbC4gVGllciBzZXRzIGltcG9ydGFuY2UsIGNvbG9yIG92ZXJsYXlzIG1lYW5pbmcsIHNpemUgc2V0cyBzY2FsZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidGllcjogcHJpbWFyeSAvIHNlY29uZGFyeSAvIHRlcnRpYXJ5XCI+XG4gICAgICAgICAgPEJ1dHRvbiB0aWVyPVwicHJpbWFyeVwiIGxhYmVsPVwiUHJpbWFyeVwiIC8+XG4gICAgICAgICAgPEJ1dHRvbiB0aWVyPVwic2Vjb25kYXJ5XCIgbGFiZWw9XCJTZWNvbmRhcnlcIiAvPlxuICAgICAgICAgIDxCdXR0b24gdGllcj1cInRlcnRpYXJ5XCIgbGFiZWw9XCJUZXJ0aWFyeVwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY29sb3I6IGRlZmF1bHQgLyBpbmZvIC8gc3VjY2VzcyAvIHdhcm5pbmcgLyBkYW5nZXJcIj5cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwiZGVmYXVsdFwiIGxhYmVsPVwiRGVmYXVsdFwiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cImluZm9cIiBsYWJlbD1cIkluZm9cIiAvPlxuICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJzdWNjZXNzXCIgbGFiZWw9XCJTdWNjZXNzXCIgLz5cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwid2FybmluZ1wiIGxhYmVsPVwiV2FybmluZ1wiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cImRhbmdlclwiIGxhYmVsPVwiRGFuZ2VyXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzaXplOiBzbWFsbCAvIG5vcm1hbCAvIGxhcmdlXCI+XG4gICAgICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiBsYWJlbD1cIlNtYWxsXCIgLz5cbiAgICAgICAgICA8QnV0dG9uIHNpemU9XCJub3JtYWxcIiBsYWJlbD1cIk5vcm1hbFwiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBzaXplPVwibGFyZ2VcIiBsYWJlbD1cIkxhcmdlXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZFwiPlxuICAgICAgICAgIDxCdXR0b24gbGFiZWw9XCJEaXNhYmxlZFwiIGRpc2FibGVkIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaWNvbiArIGxhYmVsXCI+XG4gICAgICAgICAgPEJ1dHRvbiBpY29uPXtTVEFSfSBsYWJlbD1cIldpdGggaWNvblwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY2lyY2xlIChpY29uLW9ubHkgbmVlZHMgYXJpYS1sYWJlbClcIj5cbiAgICAgICAgICA8QnV0dG9uIGNpcmNsZSBhcmlhLWxhYmVsPVwiU3RhclwiIGxhYmVsPXtTVEFSfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImhyZWYg4oCUIHJlbmRlcnMgYW4gPGE+XCI+XG4gICAgICAgICAgPEJ1dHRvbiBocmVmPVwiI2J1dHRvblwiIHRpZXI9XCJzZWNvbmRhcnlcIiBsYWJlbD1cIkxpbmsgYnV0dG9uXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJmdWxsV2lkdGhcIiB3aWRlPlxuICAgICAgICAgIDxCdXR0b24gZnVsbFdpZHRoIHRpZXI9XCJwcmltYXJ5XCIgbGFiZWw9XCJGdWxsLXdpZHRoIGJ1dHRvblwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIHsvKiBUaGUgdHdvIHJvd3Mgc2hhcmUgYSBsZWZ0IGVkZ2UsIHNvIHRoZSBvZmZzZXQgaXMgdGhlIHdob2xlIHBvaW50OlxuICAgICAgICAgICAgdGhlIGRlZmF1bHQgYnV0dG9uIGFsaWducyBpdHMgQk9YIHRvIHRoYXQgZWRnZSBhbmQgaXRzIGxhYmVsIHNpdHNcbiAgICAgICAgICAgIGFuIGlubGluZS1wYWRkaW5nIGZ1cnRoZXIgaW47IHRoZSBmbHVzaCBvbmUgcHV0cyB0aGUgTEFCRUwgdGhlcmUuICovfVxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImZsdXNoIOKAlCBsYWJlbCBvbiB0aGUgdGV4dCBlZGdlLCBmb3IgYSB0ZXJ0aWFyeSBidXR0b24gYmVzaWRlIGNvcHlcIiB3aWRlPlxuICAgICAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCI+XG4gICAgICAgICAgICA8VGV4dCBzaXplPVwic21cIiB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICAgICAgQSBsaW5lIG9mIGJvZHkgY29weSBmb3IgdGhlIGxlZnQgZWRnZS5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxDbHVzdGVyPlxuICAgICAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJ0ZXJ0aWFyeVwiIGxhYmVsPVwiRGVmYXVsdCDigJQgYm94IGFsaWduc1wiIC8+XG4gICAgICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICAgICAgICA8Q2x1c3Rlcj5cbiAgICAgICAgICAgICAgPEJ1dHRvbiB0aWVyPVwidGVydGlhcnlcIiBmbHVzaCBsYWJlbD1cIkZsdXNoIOKAlCBsYWJlbCBhbGlnbnNcIiAvPlxuICAgICAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInRleHRcIixcbiAgICB0aXRsZTogXCJUZXh0XCIsXG4gICAgY29tcG9uZW50OiBcIlRleHRcIixcbiAgICBzdW1tYXJ5OiBcIlR5cG9ncmFwaGljIHByaW1pdGl2ZSDigJQgdG9uZSwgc2l6ZSwgd2VpZ2h0LCBpdGFsaWMsIHN0cmlrZXRocm91Z2gsIGFuZCBsZWFkaW5nLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ0b25lOiBkZWZhdWx0IC8gbXV0ZWQgLyBkYW5nZXIgLyB3YXJuaW5nIC8gc3VjY2Vzc1wiPlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJkZWZhdWx0XCI+RGVmYXVsdDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB0b25lPVwibXV0ZWRcIj5NdXRlZDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB0b25lPVwiZGFuZ2VyXCI+RGFuZ2VyPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJ3YXJuaW5nXCI+V2FybmluZzwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB0b25lPVwic3VjY2Vzc1wiPlN1Y2Nlc3M8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic2l6ZTogeHMgLyBzbSAvIG1kIC8gbGcgLyB4bFwiPlxuICAgICAgICAgIHsoW1wieHNcIiwgXCJzbVwiLCBcIm1kXCIsIFwibGdcIiwgXCJ4bFwiXSBhcyBjb25zdCkubWFwKChzKSA9PiAoXG4gICAgICAgICAgICA8VGV4dCBrZXk9e3N9IHNpemU9e3N9PlxuICAgICAgICAgICAgICB7c31cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ3ZWlnaHQ6IG5vcm1hbCAvIG1lZGl1bSAvIGJvbGRcIj5cbiAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJub3JtYWxcIj5Ob3JtYWw8L1RleHQ+XG4gICAgICAgICAgPFRleHQgd2VpZ2h0PVwibWVkaXVtXCI+TWVkaXVtPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHdlaWdodD1cImJvbGRcIj5Cb2xkPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIml0YWxpYyAvIHN0cmlrZXRocm91Z2hcIj5cbiAgICAgICAgICA8VGV4dCBpdGFsaWM+SXRhbGljIGVtcGhhc2lzPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHN0cmlrZXRocm91Z2g+U3RydWNrIHRocm91Z2g8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdsZWFkaW5nPVwibG9vc2VcIiDigJQgbXVsdGktbGluZSBib2R5IGNvcHknIHdpZGU+XG4gICAgICAgICAgPFRleHQgYXM9XCJwXCIgbGVhZGluZz1cImxvb3NlXCI+XG4gICAgICAgICAgICBBIHBhcmFncmFwaCByZW5kZXJlZCB3aXRoIGxvb3NlIGxlYWRpbmcuIFBvbGx5J3MgVGV4dCBwcmltaXRpdmUgYmFja3MgZXZlcnkgc3BhbixcbiAgICAgICAgICAgIHBhcmFncmFwaCwgbGFiZWwsIGFuZCBjYXB0aW9uIHNvIGNvbnN1bWVycyBuZXZlciByZWFjaCBmb3IgYSByYXcgc3R5bGUgYXR0cmlidXRlIHRvIHNldFxuICAgICAgICAgICAgdG9uZSwgc2l6ZSwgd2VpZ2h0LCBvciBsaW5lIGhlaWdodC5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY29kZVwiLFxuICAgIHRpdGxlOiBcIkNvZGVcIixcbiAgICBjb21wb25lbnQ6IFwiQ29kZVwiLFxuICAgIHN1bW1hcnk6IFwiTW9ub3NwYWNlIGNvZGUg4oCUIGlubGluZSBieSBkZWZhdWx0LCBvciBhIHdyYXBwZWQgYmxvY2suXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImlubGluZVwiPlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgUnVuIDxDb2RlPnBvbGx5IGdhbGxlcnk8L0NvZGU+IHRvIG9wZW4gdGhpcyBwYWdlLlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJibG9ja1wiIHdpZGU+XG4gICAgICAgICAgPENvZGUgYmxvY2s+eydjb25zdCBnYWxsZXJ5ID0ge1xcbiAgc2VydmVkOiBcImJ5IHBvbGx5XCIsXFxufTsnfTwvQ29kZT5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJsaW5rXCIsXG4gICAgdGl0bGU6IFwiTGlua1wiLFxuICAgIGNvbXBvbmVudDogXCJMaW5rXCIsXG4gICAgc3VtbWFyeTogXCJBbmNob3IgcHJpbWl0aXZlIOKAlCB1bmRlcmxpbmUgYnkgZGVmYXVsdCwgd2l0aCBleHRlcm5hbCwgc3VidGxlLCBhbmQgZG93bmxvYWQgbW9kZXMuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRlZmF1bHRcIj5cbiAgICAgICAgICA8TGluayBocmVmPVwiI2xpbmtcIj5Jbi1wYWdlIGxpbms8L0xpbms+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZXh0ZXJuYWwg4oCUIG5ldyB0YWIsIHJlbD1ub29wZW5lclwiPlxuICAgICAgICAgIDxMaW5rIGhyZWY9XCJodHRwczovL2V4YW1wbGUuY29tXCIgZXh0ZXJuYWw+XG4gICAgICAgICAgICBFeHRlcm5hbCBsaW5rXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInN1YnRsZSDigJQgdW5kZXJsaW5lIG9uIGhvdmVyIG9ubHlcIj5cbiAgICAgICAgICA8TGluayBocmVmPVwiI2xpbmtcIiBzdWJ0bGU+XG4gICAgICAgICAgICBTdWJ0bGUgbGlua1xuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkb3dubG9hZFwiPlxuICAgICAgICAgIDxMaW5rIGhyZWY9XCJkYXRhOnRleHQvcGxhaW4sZ2FsbGVyeVwiIGRvd25sb2FkPVwiZ2FsbGVyeS50eHRcIj5cbiAgICAgICAgICAgIERvd25sb2FkIGxpbmtcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwic3VyZmFjZVwiLFxuICAgIHRpdGxlOiBcIlN1cmZhY2VcIixcbiAgICBjb21wb25lbnQ6IFwiU3VyZmFjZVwiLFxuICAgIHN1bW1hcnk6IFwiT3ducyB2aXN1YWwgY2hyb21lIOKAlCBiYWNrZ3JvdW5kLCBib3JkZXIsIHJhZGl1cywgc2hhZG93LCBwb3NpdGlvbmluZy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIHsoW1wicGxhaW5cIiwgXCJyYWlzZWRcIiwgXCJzdW5rZW5cIiwgXCJidWJibGVcIiwgXCJjaGlwXCIsIFwiY2FsbG91dFwiXSBhcyBjb25zdCkubWFwKCh2KSA9PiAoXG4gICAgICAgICAgPFNwZWNpbWVuIGtleT17dn0gY2FwdGlvbj17YHZhcmlhbnQ9XCIke3Z9XCJgfT5cbiAgICAgICAgICAgIDxTdXJmYWNlIHZhcmlhbnQ9e3Z9IHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIj5cbiAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtXCI+e3Z9PC9UZXh0PlxuICAgICAgICAgICAgPC9TdXJmYWNlPlxuICAgICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgICkpfVxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0ndmFyaWFudDogXCJmbG9hdGluZ1wiIC8gXCJzdGlja3ktYmFyXCIgcGluIHRvIHRoZSB2aWV3cG9ydCDigJQgb21pdHRlZCBoZXJlJz5cbiAgICAgICAgICA8VGV4dCBzaXplPVwieHNcIiB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICAgIFBvc2l0aW9uYWwgdmFyaWFudHMgYXJlIHByZXZpZXdlZCBpbiBjb250ZXh0LCBub3QgaW4gYSBncmlkIGNlbGwuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICB7LyogRXF1YWwgc3F1YXJlIGJveGVzLiBUaGUgbGFiZWwgdXNlZCB0byBzaXplIGVhY2ggb25lLCBzbyB0aGUgbGFkZGVyXG4gICAgICAgICAgICB3YXMgY29tcGFyZWQgYWNyb3NzIGZpdmUgZGlmZmVyZW50IHdpZHRocyAoNDYvMzUvMzYvMjgvMzUgcHgpIGFuZFxuICAgICAgICAgICAgYGZ1bGxgIHJlbmRlcmVkIGFzIGEgc3RhZGl1bSB0YWxsZXIgdGhhbiBpdCB3YXMgd2lkZSByYXRoZXIgdGhhbiBhXG4gICAgICAgICAgICBjaXJjbGUuIEEgc3F1YXJlIGJveCBtYWtlcyA5OTk5cHggcmVhZCBhcyB0aGUgY2lyY2xlIGl0IGlzLiAqL31cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJyYWRpdXM6IG5vbmUgLyBzbSAvIG1kIC8gbGcgLyBmdWxsXCI+XG4gICAgICAgICAgeyhbXCJub25lXCIsIFwic21cIiwgXCJtZFwiLCBcImxnXCIsIFwiZnVsbFwiXSBhcyBjb25zdCkubWFwKChyKSA9PiAoXG4gICAgICAgICAgICA8U3VyZmFjZVxuICAgICAgICAgICAgICBrZXk9e3J9XG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJyYWlzZWRcIlxuICAgICAgICAgICAgICBib3JkZXI9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgcmFkaXVzPXtyfVxuICAgICAgICAgICAgICB3aWR0aD1cIjU2cHhcIlxuICAgICAgICAgICAgICBoZWlnaHQ9XCI1NnB4XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExheW91dCBoZWlnaHQ9XCIxMDAlXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiIGp1c3RpZnlJdGVtcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiPntyfTwvVGV4dD5cbiAgICAgICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgICAgICA8L1N1cmZhY2U+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiYm9yZGVyOiBub25lIC8gZGVmYXVsdCAvIHN0cm9uZ1wiPlxuICAgICAgICAgIHsoW1wibm9uZVwiLCBcImRlZmF1bHRcIiwgXCJzdHJvbmdcIl0gYXMgY29uc3QpLm1hcCgoYikgPT4gKFxuICAgICAgICAgICAgPFN1cmZhY2Uga2V5PXtifSBib3JkZXI9e2J9IHJhZGl1cz1cIm1kXCIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICAgICAgICA8VGV4dCBzaXplPVwieHNcIj57Yn08L1RleHQ+XG4gICAgICAgICAgICA8L1N1cmZhY2U+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIHsvKiBPbiB0aGUgc3Vua2VuIGNhcmQgZXZlcnkgc3BlY2ltZW4gc2l0cyBvbiwgYSBzb2Z0IHNoYWRvdyBsYW5kcyBncmV5XG4gICAgICAgICAgICBvbiBncmV5IGFuZCBub25lIG9mIHRoZSB0aHJlZSBzdGVwcyByZWFkLiBUaGV5IGFyZSBjYXN0IG9uIGEgcGxhaW5cbiAgICAgICAgICAgIHN1cmZhY2UgaGVyZSwgYW5kIGVhY2ggYm94IGlzIHNxdWFyZSBhbmQgZXF1YWwgc28gdGhlIG9ubHkgdGhpbmdcbiAgICAgICAgICAgIHRoYXQgZGlmZmVycyBiZXR3ZWVuIHRoZW0gaXMgdGhlIHNoYWRvdy4gKi99XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic2hhZG93OiBzbSAvIG1kIC8gbGdcIj5cbiAgICAgICAgICA8U3VyZmFjZSBiYWNrZ3JvdW5kPVwidmFyKC0tcG9sbHktc3VyZmFjZSlcIiByYWRpdXM9XCJtZFwiIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1sZylcIj5cbiAgICAgICAgICAgIDxDbHVzdGVyIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhsKVwiPlxuICAgICAgICAgICAgICB7KFtcInNtXCIsIFwibWRcIiwgXCJsZ1wiXSBhcyBjb25zdCkubWFwKChzKSA9PiAoXG4gICAgICAgICAgICAgICAgPFN1cmZhY2Uga2V5PXtzfSB2YXJpYW50PVwicmFpc2VkXCIgc2hhZG93PXtzfSByYWRpdXM9XCJtZFwiIHdpZHRoPVwiNTZweFwiIGhlaWdodD1cIjU2cHhcIj5cbiAgICAgICAgICAgICAgICAgIDxMYXlvdXQgaGVpZ2h0PVwiMTAwJVwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIiBqdXN0aWZ5SXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInhzXCI+e3N9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgICAgICAgICAgPC9TdXJmYWNlPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgICAgICA8L1N1cmZhY2U+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY2FyZFwiLFxuICAgIHRpdGxlOiBcIkNhcmRcIixcbiAgICBjb21wb25lbnQ6IFwiQ2FyZFwiLFxuICAgIHN1bW1hcnk6IFwiQ29tcG91bmQgb2YgU3VyZmFjZXMg4oCUIGEgcmFpc2VkIFJvb3Qgd3JhcHBpbmcgSGVhZGVyLCBCb2R5LCBhbmQgRm9vdGVyIHNsb3RzLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJDYXJkLlJvb3QgPiBIZWFkZXIgLyBCb2R5IC8gRm9vdGVyXCIgd2lkZT5cbiAgICAgICAgPENhcmQuUm9vdCBwYWRkaW5nPVwiMFwiPlxuICAgICAgICAgIDxDYXJkLkhlYWRlciBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJib2xkXCI+Q2FyZCBoZWFkZXI8L1RleHQ+XG4gICAgICAgICAgPC9DYXJkLkhlYWRlcj5cbiAgICAgICAgICA8Q2FyZC5Cb2R5IHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIj5cbiAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICBUaGUgYm9keSBzbG90IGNhcnJpZXMgdGhlIG1haW4gY29udGVudC4gRWFjaCBzbG90IGFjY2VwdHMgdGhlIGZ1bGwgU3VyZmFjZVByb3BzLCBzbyBpdFxuICAgICAgICAgICAgICBjYW4gYmUgcmV0aW50ZWQgb3IgcmVwYWRkZWQgd2l0aG91dCByZWFjaGluZyBwYXN0IHRoZSBwcmltaXRpdmUuXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9DYXJkLkJvZHk+XG4gICAgICAgICAgPENhcmQuRm9vdGVyIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIj5cbiAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgdGllcj1cInByaW1hcnlcIiBsYWJlbD1cIkZvb3RlciBhY3Rpb25cIiAvPlxuICAgICAgICAgIDwvQ2FyZC5Gb290ZXI+XG4gICAgICAgIDwvQ2FyZC5Sb290PlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwic2tlbGV0b25cIixcbiAgICB0aXRsZTogXCJTa2VsZXRvblwiLFxuICAgIGNvbXBvbmVudDogXCJTa2VsZXRvblwiLFxuICAgIHN1bW1hcnk6IFwiU2hpbW1lcmluZyBwbGFjZWhvbGRlciBmb3IgbG9hZGluZyBzdGF0ZXMuIEFuaW1hdGlvbiBob25vdXJzIHJlZHVjZWQtbW90aW9uLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgeyhbXCJ0ZXh0XCIsIFwicmVjdFwiLCBcImNpcmNsZVwiXSBhcyBjb25zdCkubWFwKCh2KSA9PiAoXG4gICAgICAgICAgPFNwZWNpbWVuIGtleT17dn0gY2FwdGlvbj17YHZhcmlhbnQ9XCIke3Z9XCJgfT5cbiAgICAgICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PXt2fSAvPlxuICAgICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgICkpfVxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImN1c3RvbSB3aWR0aCArIGhlaWdodFwiPlxuICAgICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PVwicmVjdFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD17NjR9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwib3V0cHV0XCIsXG4gICAgdGl0bGU6IFwiT3V0cHV0XCIsXG4gICAgY29tcG9uZW50OiBcIk91dHB1dFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIk1vbm9zcGFjZSBvdXRwdXQgcmVnaW9uIGZvciBjb21tYW5kIHJlc3VsdHMgb3IgbG9ncyDigJQgd3JhcHMsIG9yIHNjcm9sbHMgaG9yaXpvbnRhbGx5LlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkZWZhdWx0IOKAlCB3cmFwc1wiIHdpZGU+XG4gICAgICAgICAgPE91dHB1dD5wb2xseSBnYWxsZXJ5IOKGkiBzZXJ2aW5nIGF0IGh0dHA6Ly9sb2NhbGhvc3Q6NDMyMTwvT3V0cHV0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNjcm9sbCDigJQgc2luZ2xlIGxvbmcgbGluZSBzY3JvbGxzIGluc3RlYWQgb2Ygd3JhcHBpbmdcIiB3aWRlPlxuICAgICAgICAgIDxPdXRwdXQgc2Nyb2xsPlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiQgcG9sbHkgZ2FsbGVyeSAtLWJ1aWxkIC4vZGlzdC9nYWxsZXJ5ICAgIyBvbmUgbG9uZyBsaW5lIHRoYXQgc2Nyb2xscyBob3Jpem9udGFsbHkgcmF0aGVyIHRoYW4gd3JhcHBpbmcgb250byB0aGUgbmV4dCByb3dcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvT3V0cHV0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImh0bWxcIixcbiAgICB0aXRsZTogXCJIdG1sXCIsXG4gICAgY29tcG9uZW50OiBcIkh0bWxcIixcbiAgICBzdW1tYXJ5OiBcIlJlbmRlcnMgYSB0cnVzdGVkIEhUTUwgc3RyaW5nLiBUaGUgY2FsbGVyIG93bnMgc2FuaXRpc2F0aW9uIOKAlCBuZXZlciBwYXNzIHVzZXIgaW5wdXQuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImh0bWw9e3RydXN0ZWQgc3RyaW5nfVwiIHdpZGU+XG4gICAgICAgIDxIdG1sIGh0bWw9XCI8c3Ryb25nPkJvbGQ8L3N0cm9uZz4sIDxlbT5pdGFsaWM8L2VtPiwgYW5kIGEgPGNvZGU+Y29kZSBzcGFuPC9jb2RlPiBmcm9tIGEgdHJ1c3RlZCBtYXJrdXAgc3RyaW5nLlwiIC8+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjb2xsYXBzaWJsZVwiLFxuICAgIHRpdGxlOiBcIkNvbGxhcHNpYmxlXCIsXG4gICAgY29tcG9uZW50OiBcIkNvbGxhcHNpYmxlXCIsXG4gICAgc3VtbWFyeTogXCJOYXRpdmUgPGRldGFpbHM+LzxzdW1tYXJ5PiBkaXNjbG9zdXJlIOKAlCBrZXlib2FyZCBhbmQgc2NyZWVuLXJlYWRlciBiZWhhdmlvdXIgZnJlZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY2xvc2VkIGJ5IGRlZmF1bHRcIiB3aWRlPlxuICAgICAgICAgIDxDb2xsYXBzaWJsZSBzdW1tYXJ5PVwiU2hvdyBtb3JlIGRldGFpbFwiPlxuICAgICAgICAgICAgPFRleHQ+VGhpcyBjb250ZW50IGlzIHJldmVhbGVkIHdoZW4gdGhlIGRpc2Nsb3N1cmUgaXMgb3BlbmVkLjwvVGV4dD5cbiAgICAgICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRlZmF1bHRPcGVuXCIgd2lkZT5cbiAgICAgICAgICA8Q29sbGFwc2libGUgc3VtbWFyeT1cIk9wZW4gZnJvbSB0aGUgc3RhcnRcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICAgIDxUZXh0PlRoaXMgY29sbGFwc2libGUgcmVuZGVycyBleHBhbmRlZCBvbiBmaXJzdCBwYWludC48L1RleHQ+XG4gICAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJlZGl0YWJsZSBmaWVsZCBpbiB0aGUgc3VtbWFyeSDigJQgU3BhY2UvRW50ZXIgbm8gbG9uZ2VyIGNvbGxhcHNlIGl0XCIgd2lkZT5cbiAgICAgICAgICA8Q29sbGFwc2libGVcbiAgICAgICAgICAgIHN1bW1hcnk9e1xuICAgICAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJnYWxsZXJ5LWNvbGxhcHNpYmxlLXN1bW1hcnlcIiBwbGFjZWhvbGRlcj1cIlR5cGUgYSBzcGFjZSBoZXJl4oCmXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VGV4dD5UaGUgaGVhZGVyIGd1YXJkIGNhbmNlbHMgdGhlIGRpc2Nsb3N1cmUgdG9nZ2xlIGZvciB0ZXh0LWVudHJ5IGZpZWxkcy48L1RleHQ+XG4gICAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJsYXlvdXRcIixcbiAgICB0aXRsZTogXCJMYXlvdXRcIixcbiAgICBjb21wb25lbnQ6IFwiTGF5b3V0XCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiVGhlIGdyaWQgcHJpbWl0aXZlLiBQcm9wcyBtYXAgdG8gQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzIOKAlCBubyBoYW5kLXdyaXR0ZW4gZmxleCBvciBncmlkLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2NvbHVtbnM9XCIxZnIgMWZyIDFmclwiJyB3aWRlPlxuICAgICAgICAgIDxMYXlvdXQgY29sdW1ucz1cIjFmciAxZnIgMWZyXCIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgICAgICA8Qm94PjFmcjwvQm94PlxuICAgICAgICAgICAgPEJveD4xZnI8L0JveD5cbiAgICAgICAgICAgIDxCb3g+MWZyPC9Cb3g+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdjb2x1bW5zPVwiYXV0byAxZnIgYXV0b1wiJyB3aWRlPlxuICAgICAgICAgIDxMYXlvdXQgY29sdW1ucz1cImF1dG8gMWZyIGF1dG9cIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIiBhbGlnbkl0ZW1zPVwiY2VudGVyXCI+XG4gICAgICAgICAgICA8Qm94PmF1dG88L0JveD5cbiAgICAgICAgICAgIDxCb3g+MWZyPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PmF1dG88L0JveD5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzdGFja09uTW9iaWxlIOKAlCBjb2xsYXBzZXMgdG8gb25lIGNvbHVtbiDiiaQ2NDBweFwiIHdpZGU+XG4gICAgICAgICAgPExheW91dCBjb2x1bW5zPVwiMWZyIDFmclwiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiIHN0YWNrT25Nb2JpbGU+XG4gICAgICAgICAgICA8Qm94PlNpZGUgYnkgc2lkZSwgdGhlbiBzdGFja2VkPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PlNpZGUgYnkgc2lkZSwgdGhlbiBzdGFja2VkPC9Cb3g+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY2x1c3RlclwiLFxuICAgIHRpdGxlOiBcIkNsdXN0ZXJcIixcbiAgICBjb21wb25lbnQ6IFwiQ2x1c3RlclwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIldyYXBwaW5nIHJvdyBvZiB2YXJpYWJsZS13aWR0aCBpdGVtcyDigJQgY2hpcHMsIHRhZ3MsIGJ1dHRvbiBncm91cHMuIFJlZmxvd3MgYXMgc3BhY2UgcnVucyBvdXQuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImdhcCDigJQgaXRlbXMgd3JhcCBvbnRvIG5ldyByb3dzXCIgd2lkZT5cbiAgICAgICAgPENsdXN0ZXIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCI+XG4gICAgICAgICAge1tcIkdyb2Nlcmllc1wiLCBcIkVycmFuZHNcIiwgXCJIb21lXCIsIFwiR2FyZGVuXCIsIFwiRmluYW5jZVwiLCBcIlRyYXZlbFwiLCBcIkhlYWx0aFwiLCBcIkFkbWluXCJdLm1hcChcbiAgICAgICAgICAgICh0YWcpID0+IChcbiAgICAgICAgICAgICAgPEJhZGdlIGtleT17dGFnfSB2YXJpYW50PVwiaW5mb1wiPlxuICAgICAgICAgICAgICAgIHt0YWd9XG4gICAgICAgICAgICAgIDwvQmFkZ2U+XG4gICAgICAgICAgICApXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidGFic1wiLFxuICAgIHRpdGxlOiBcIlRhYnNcIixcbiAgICBjb21wb25lbnQ6IFwiVGFic1wiLFxuICAgIHN1bW1hcnk6IFwiSG9yaXpvbnRhbCBuYXYgd2l0aCBhbiBhY3RpdmUtdGFiIGFjY2VudC4gRGlzcGF0Y2hlcyBhbiBhY3Rpb24gcGVyIHRhYi5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaW50ZXJhY3RpdmUg4oCUIG9uZSB0YWIgZGlzYWJsZWRcIiB3aWRlPlxuICAgICAgICA8VGFic1xuICAgICAgICAgIHRhYnM9e1tcbiAgICAgICAgICAgIHsgaWQ6IFwib3ZlcnZpZXdcIiwgbGFiZWw6IFwiT3ZlcnZpZXdcIiB9LFxuICAgICAgICAgICAgeyBpZDogXCJhY3Rpdml0eVwiLCBsYWJlbDogXCJBY3Rpdml0eVwiIH0sXG4gICAgICAgICAgICB7IGlkOiBcInNldHRpbmdzXCIsIGxhYmVsOiBcIlNldHRpbmdzXCIgfSxcbiAgICAgICAgICAgIHsgaWQ6IFwiYXJjaGl2ZWRcIiwgbGFiZWw6IFwiQXJjaGl2ZWRcIiwgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICBdfVxuICAgICAgICAgIGFjdGl2ZVRhYj17JGdhbGxlcnlUYWIudmFsdWV9XG4gICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpzZXQtdGFiXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiR2FsbGVyeSB0YWJzXCJcbiAgICAgICAgLz5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNoZWNrYm94XCIsXG4gICAgdGl0bGU6IFwiQ2hlY2tib3hcIixcbiAgICBjb21wb25lbnQ6IFwiQ2hlY2tib3hcIixcbiAgICBzdW1tYXJ5OiBcIk5hdGl2ZSBjaGVja2JveCBpbiBhIGxhYmVsLiBBIHBsYWluIGJvb2xlYW4gaXMgY29udHJvbGxlZDsgYSBTaWduYWwgYmluZHMgaXRzZWxmLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ1bmNoZWNrZWRcIj5cbiAgICAgICAgICA8Q2hlY2tib3ggbGFiZWw9XCJVbmNoZWNrZWRcIiBjaGVja2VkPXtmYWxzZX0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjaGVja2VkXCI+XG4gICAgICAgICAgPENoZWNrYm94IGxhYmVsPVwiQ2hlY2tlZFwiIGNoZWNrZWQ9e3RydWV9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICA8Q2hlY2tib3ggbGFiZWw9XCJEaXNhYmxlZFwiIGNoZWNrZWQ9e3RydWV9IGRpc2FibGVkIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY2hlY2tlZD17c2lnbmFsfSDigJQgY2xpY2sgdG8gdG9nZ2xlXCI+XG4gICAgICAgICAgPENoZWNrYm94IGxhYmVsPVwiQm91bmQgdG8gYSBzaWduYWxcIiBjaGVja2VkPXskZ2FsbGVyeUNoZWNrZWR9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidG9nZ2xlXCIsXG4gICAgdGl0bGU6IFwiVG9nZ2xlXCIsXG4gICAgY29tcG9uZW50OiBcIlRvZ2dsZVwiLFxuICAgIHN1bW1hcnk6IFwiU3dpdGNoLXJvbGUgY2hlY2tib3guIFBhc3NpdmUg4oCUIHRoZSBjYWxsZXIgZHJpdmVzIHRoZSBjaGVja2VkIHN0YXRlLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJvZmZcIj5cbiAgICAgICAgICA8VG9nZ2xlIGxhYmVsPVwiT2ZmXCIgY2hlY2tlZD17ZmFsc2V9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwib25cIj5cbiAgICAgICAgICA8VG9nZ2xlIGxhYmVsPVwiT25cIiBjaGVja2VkPXt0cnVlfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPFRvZ2dsZSBsYWJlbD1cIkRpc2FibGVkXCIgY2hlY2tlZD17dHJ1ZX0gZGlzYWJsZWQgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0ZXh0LWlucHV0XCIsXG4gICAgdGl0bGU6IFwiVGV4dElucHV0XCIsXG4gICAgY29tcG9uZW50OiBcIlRleHRJbnB1dFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIlNpZ25hbC1mcmllbmRseSBuYXRpdmUgaW5wdXQuIEEgcGxhaW4gc3RyaW5nIGlzIHVuY29udHJvbGxlZDsgYSBTaWduYWwgaXMgY29udHJvbGxlZC4gXCIgK1xuICAgICAgXCJpbnB1dFR5cGUgcGlja3MgdGhlIG5hdGl2ZSBrZXlib2FyZCBhbmQgdmFsaWRhdGlvbjsgZXJyb3IgcmVuZGVycyBhIGxpbmtlZCBtZXNzYWdlLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3ZhcmlhbnQ9XCJzaW5nbGVcIiB3aXRoIHBsYWNlaG9sZGVyJz5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLXNpbmdsZVwiIHBsYWNlaG9sZGVyPVwiVHlwZSBoZXJl4oCmXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3ZhcmlhbnQ9XCJtdWx0aVwiJz5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLW11bHRpXCIgdmFyaWFudD1cIm11bHRpXCIgcm93cz17M30gcGxhY2Vob2xkZXI9XCJNdWx0aXBsZSBsaW5lc+KAplwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdpbnB1dFR5cGU9XCJlbWFpbFwiJz5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLWVtYWlsXCIgaW5wdXRUeXBlPVwiZW1haWxcIiBwbGFjZWhvbGRlcj1cImFkYUBleGFtcGxlLmNvbVwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdpbnB1dFR5cGU9XCJudW1iZXJcIiB3aXRoIG1pbi9tYXgvc3RlcCc+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1udW1iZXJcIiBpbnB1dFR5cGU9XCJudW1iZXJcIiBtaW49ezB9IG1heD17MTB9IHN0ZXA9ezF9IHZhbHVlPVwiNVwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZXJyb3Ig4oCUIGxpbmtlZCBtZXNzYWdlLCBtYXJrcyBpbnZhbGlkXCI+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1lcnJvclwiIHZhbHVlPVwibm90LWFuLWVtYWlsXCIgZXJyb3I9XCJFbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpbnZhbGlkXCI+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1pbnZhbGlkXCIgdmFsdWU9XCJub3QtYW4tZW1haWxcIiBpbnZhbGlkIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLWRpc2FibGVkXCIgdmFsdWU9XCJEaXNhYmxlZFwiIGRpc2FibGVkIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwicmVhZE9ubHlcIj5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLXJlYWRvbmx5XCIgdmFsdWU9XCJSZWFkIG9ubHlcIiByZWFkT25seSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInZhbHVlPXtzaWduYWx9IOKAlCBjb250cm9sbGVkXCI+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1jb250cm9sbGVkXCIgdmFsdWU9eyRnYWxsZXJ5VGV4dH0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJzZWxlY3RcIixcbiAgICB0aXRsZTogXCJTZWxlY3RcIixcbiAgICBjb21wb25lbnQ6IFwiU2VsZWN0XCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiRHJvcGRvd24gb2Ygb3B0aW9ucyBib3VuZCB0byBhIFNpZ25hbDxTZXQ+LiBTaW5nbGUgcmVwbGFjZXMsIG11bHRpIHRvZ2dsZXMuIFwiICtcbiAgICAgICdjbGVhcmFibGUgcHJlcGVuZHMgYW4gXCJBbnkg4oCmXCIgcm93IHNvIGFuIG9wdGlvbmFsIGZpbHRlciBoYXMgYSBwYXRoIGJhY2sgdG8gdW5zZXQuJyxcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic2luZ2xlLXNlbGVjdFwiPlxuICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGxhYmVsPVwiUGljayBvbmVcIlxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IHZhbHVlOiBcImNvbWV0XCIsIGxhYmVsOiBcIkNvbWV0XCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJuZWJ1bGFcIiwgbGFiZWw6IFwiTmVidWxhXCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJxdWFzYXJcIiwgbGFiZWw6IFwiUXVhc2FyXCIgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBzZWxlY3RlZD17JGdhbGxlcnlTZWxlY3RTaW5nbGV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjbGVhcmFibGUg4oCUIHNpbmdsZS1zZWxlY3Qgd2l0aCBhbiDigJxBbnkg4oCm4oCdIHJvd1wiPlxuICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGxhYmVsPVwiRmlsdGVyIGJ5XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQW55IG9iamVjdFwiXG4gICAgICAgICAgICBjbGVhcmFibGVcbiAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJjb21ldFwiLCBsYWJlbDogXCJDb21ldFwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibmVidWxhXCIsIGxhYmVsOiBcIk5lYnVsYVwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwicXVhc2FyXCIsIGxhYmVsOiBcIlF1YXNhclwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9eyRnYWxsZXJ5U2VsZWN0Q2xlYXJhYmxlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibXVsdGlTZWxlY3RcIj5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIlBpY2sgc2V2ZXJhbFwiXG4gICAgICAgICAgICBtdWx0aVNlbGVjdFxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IHZhbHVlOiBcImNvbWV0XCIsIGxhYmVsOiBcIkNvbWV0XCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJuZWJ1bGFcIiwgbGFiZWw6IFwiTmVidWxhXCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJxdWFzYXJcIiwgbGFiZWw6IFwiUXVhc2FyXCIgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBzZWxlY3RlZD17JGdhbGxlcnlTZWxlY3RNdWx0aX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImxvbmcgbGFiZWwg4oCUIHRydW5jYXRlcywgY2FyZXQgc3RheXMgb24gdGhlIHJvdyAocG9sbHkjMTgwKVwiPlxuICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGlkPVwiZ2FsbGVyeS1zZWxlY3QtbG9uZ1wiXG4gICAgICAgICAgICBsYWJlbD1cIkxvbmcgbGFiZWxcIlxuICAgICAgICAgICAgb3B0aW9ucz17TE9OR19TRUxFQ1RfT1BUSU9OU31cbiAgICAgICAgICAgIHNlbGVjdGVkPXskZ2FsbGVyeVNlbGVjdExvbmd9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJmaWxlLWlucHV0XCIsXG4gICAgdGl0bGU6IFwiRmlsZUlucHV0XCIsXG4gICAgY29tcG9uZW50OiBcIkZpbGVJbnB1dFwiLFxuICAgIHN1bW1hcnk6IFwiU3R5bGVkIHdyYXBwZXIgb3ZlciBhIG5hdGl2ZSBmaWxlIHBpY2tlci4gSGFuZHMgdGhlIGNob3NlbiBGaWxlTGlzdCB0byBvbkZpbGVzLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJvbkZpbGVzIOKAlCBwaWNrIGEgZmlsZVwiPlxuICAgICAgICAgIDxGaWxlSW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiQ2hvb3NlIGZpbGVcIlxuICAgICAgICAgICAgb25GaWxlcz17KGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICRnYWxsZXJ5RmlsZU5hbWUudmFsdWUgPSBmaWxlc1swXT8ubmFtZSA/PyBcIuKAlFwiO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImFjY2VwdCArIG11bHRpcGxlXCI+XG4gICAgICAgICAgPEZpbGVJbnB1dFxuICAgICAgICAgICAgbGFiZWw9XCJDaG9vc2UgaW1hZ2VzXCJcbiAgICAgICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgIG9uRmlsZXM9eyhmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAkZ2FsbGVyeUZpbGVOYW1lLnZhbHVlID0gZmlsZXNbMF0/Lm5hbWUgPz8gXCLigJRcIjtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZFwiPlxuICAgICAgICAgIDxGaWxlSW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiRGlzYWJsZWRcIlxuICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAgIG9uRmlsZXM9eygpID0+IHtcbiAgICAgICAgICAgICAgLyogZGlzYWJsZWQg4oCUIG5ldmVyIGludm9rZWQgKi9cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJsYXN0IHBpY2tlZCBmaWxlXCIgd2lkZT5cbiAgICAgICAgICA8VGV4dCB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICAgIExhc3QgcGlja2VkOiA8Q29kZT57JGdhbGxlcnlGaWxlTmFtZS52YWx1ZX08L0NvZGU+XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImRyb3Bkb3duXCIsXG4gICAgdGl0bGU6IFwiRHJvcGRvd25cIixcbiAgICBjb21wb25lbnQ6IFwiRHJvcGRvd25cIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJMb3ctbGV2ZWwgdHJpZ2dlciArIHBvcG92ZXIgcGx1bWJpbmcuIFRoZSBwcmltaXRpdmUgaXRzZWxmIGhhcyBubyBjaHJvbWUg4oCUIFwiICtcbiAgICAgIFwiY29uc3VtZXJzIChTZWxlY3QsIEFjdGlvblNlbGVjdCkgd3JhcCBpdCB3aXRoIHRoZSBzdHlsZWQgdHJpZ2dlciBhbmQgY2FyZXQuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInRyaWdnZXIgZHJlc3NlZCB2aWEgdHJpZ2dlckNsYXNzTmFtZSArIGRhdGEtb3BlblwiPlxuICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICBpc09wZW49eyRnYWxsZXJ5RHJvcGRvd25PcGVufVxuICAgICAgICAgIHRyaWdnZXJDbGFzc05hbWU9XCJnYWxsZXJ5LWRyb3Bkb3duLXRyaWdnZXJcIlxuICAgICAgICAgIHRyaWdnZXI9e1xuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPHNwYW4+T3BlbiBtZW51PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdhbGxlcnktZHJvcGRvd24tY2FyZXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCI+XG4gICAgICAgICAgICA8VGV4dD5GaXJzdCBpdGVtPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQ+U2Vjb25kIGl0ZW08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD5UaGlyZCBpdGVtPC9UZXh0PlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L0Ryb3Bkb3duPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYWN0aW9uLWlucHV0XCIsXG4gICAgdGl0bGU6IFwiQWN0aW9uSW5wdXRcIixcbiAgICBjb21wb25lbnQ6IFwiQWN0aW9uSW5wdXRcIixcbiAgICBzdW1tYXJ5OiBcIkR1YWwtbW9kZSB2aWV3L2VkaXQgZmllbGQuIENsaWNrIHRvIGVkaXQ7IGNvbW1pdCBkaXNwYXRjaGVzIGFuIGFjdGlvbi5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdzYXZlT249XCJibHVyXCInPlxuICAgICAgICAgIDxBY3Rpb25JbnB1dFxuICAgICAgICAgICAgdmFsdWU9XCJDbGljayB0byBlZGl0LCBjb21taXRzIG9uIGJsdXJcIlxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgc2F2ZU9uPVwiYmx1clwiXG4gICAgICAgICAgICBhcmlhTGFiZWw9XCJCbHVyLWNvbW1pdCBkZW1vXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0nc2F2ZU9uPVwiZW50ZXJcIic+XG4gICAgICAgICAgPEFjdGlvbklucHV0XG4gICAgICAgICAgICB2YWx1ZT1cIkVkaXQgYW5kIHByZXNzIEVudGVyXCJcbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIHNhdmVPbj1cImVudGVyXCJcbiAgICAgICAgICAgIGFyaWFMYWJlbD1cIkVudGVyLWNvbW1pdCBkZW1vXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0naW5wdXRUeXBlPVwiZGF0ZVwiJz5cbiAgICAgICAgICA8QWN0aW9uSW5wdXRcbiAgICAgICAgICAgIHZhbHVlPVwiMjAyNi0wNS0yMlwiXG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICBpbnB1dFR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgIHNhdmVPbj1cImJsdXJcIlxuICAgICAgICAgICAgYXJpYUxhYmVsPVwiRGF0ZSBkZW1vXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0ndmFyaWFudD1cIm11bHRpXCInPlxuICAgICAgICAgIDxBY3Rpb25JbnB1dFxuICAgICAgICAgICAgdmFsdWU9XCJBIGxvbmdlciwgbXVsdGktbGluZSB2YWx1ZVwiXG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICB2YXJpYW50PVwibXVsdGlcIlxuICAgICAgICAgICAgc2F2ZU9uPVwiYmx1clwiXG4gICAgICAgICAgICBhcmlhTGFiZWw9XCJNdWx0aS1saW5lIGRlbW9cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibGFzdCBjb21taXR0ZWQgdmFsdWVcIiB3aWRlPlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgTGFzdCBjb21taXR0ZWQ6IDxDb2RlPnskZ2FsbGVyeUNvbW1pdHRlZC52YWx1ZX08L0NvZGU+XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImFjdGlvbi1zZWxlY3RcIixcbiAgICB0aXRsZTogXCJBY3Rpb25TZWxlY3RcIixcbiAgICBjb21wb25lbnQ6IFwiQWN0aW9uU2VsZWN0XCIsXG4gICAgc3VtbWFyeTogXCJTaW5nbGUtc2VsZWN0IHRoYXQgY29tbWl0cyBhIHBsYWluIHN0cmluZyB2YWx1ZSB0aHJvdWdoIHRoZSBhY3Rpb24gc3lzdGVtLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjb21taXRzIHZpYSBhY3Rpb25cIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIlByaW9yaXR5XCJcbiAgICAgICAgICAgIHZhbHVlPVwibWVkaXVtXCJcbiAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJsb3dcIiwgbGFiZWw6IFwiTG93XCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJtZWRpdW1cIiwgbGFiZWw6IFwiTWVkaXVtXCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJoaWdoXCIsIGxhYmVsOiBcIkhpZ2hcIiB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkIOKAlCByZW5kZXJzIGFzIHN0YXRpYyB0ZXh0XCI+XG4gICAgICAgICAgPEFjdGlvblNlbGVjdFxuICAgICAgICAgICAgbGFiZWw9XCJQcmlvcml0eVwiXG4gICAgICAgICAgICB2YWx1ZT1cImhpZ2hcIlxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IHZhbHVlOiBcImxvd1wiLCBsYWJlbDogXCJMb3dcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm1lZGl1bVwiLCBsYWJlbDogXCJNZWRpdW1cIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcImhpZ2hcIiwgbGFiZWw6IFwiSGlnaFwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImxvbmcgbGFiZWwg4oCUIHRydW5jYXRlcywgY2FyZXQgc3RheXMgb24gdGhlIHJvdyAocG9sbHkjMTgwKVwiPlxuICAgICAgICAgIDxBY3Rpb25TZWxlY3RcbiAgICAgICAgICAgIGlkPVwiZ2FsbGVyeS1hY3Rpb24tc2VsZWN0LWxvbmdcIlxuICAgICAgICAgICAgbGFiZWw9XCJMb25nIGxhYmVsXCJcbiAgICAgICAgICAgIHZhbHVlPVwibG9uZ1wiXG4gICAgICAgICAgICBvcHRpb25zPXtMT05HX1NFTEVDVF9PUFRJT05TfVxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibG9uZyBsYWJlbCwgZGlzYWJsZWQg4oCUIG9uZSByb3cgYXQgdGhlIGNvbnRyb2wgaGVpZ2h0XCI+XG4gICAgICAgICAgPEFjdGlvblNlbGVjdFxuICAgICAgICAgICAgaWQ9XCJnYWxsZXJ5LWFjdGlvbi1zZWxlY3QtbG9uZy1kaXNhYmxlZFwiXG4gICAgICAgICAgICBsYWJlbD1cIkxvbmcgbGFiZWxcIlxuICAgICAgICAgICAgdmFsdWU9XCJsb25nXCJcbiAgICAgICAgICAgIG9wdGlvbnM9e0xPTkdfU0VMRUNUX09QVElPTlN9XG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZW1wdHkg4oCUIHRoZSBwbGFjZWhvbGRlciBpcyB0aGUgc2FtZSBib3ggYXMgYSB2YWx1ZVwiPlxuICAgICAgICAgIDxBY3Rpb25TZWxlY3RcbiAgICAgICAgICAgIGlkPVwiZ2FsbGVyeS1hY3Rpb24tc2VsZWN0LWxvbmctZW1wdHlcIlxuICAgICAgICAgICAgbGFiZWw9XCJMb25nIHBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIHZhbHVlPVwiXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtMT05HX1NFTEVDVF9MQUJFTH1cbiAgICAgICAgICAgIG9wdGlvbnM9e0xPTkdfU0VMRUNUX09QVElPTlN9XG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ3aWRlIOKAlCBzaG9ydCBsYWJlbCwgc3RpbGwgb25lIGNlbnRyZWQgcm93XCI+XG4gICAgICAgICAgPEFjdGlvblNlbGVjdFxuICAgICAgICAgICAgaWQ9XCJnYWxsZXJ5LWFjdGlvbi1zZWxlY3Qtd2lkZVwiXG4gICAgICAgICAgICBsYWJlbD1cIldpZGVcIlxuICAgICAgICAgICAgdmFsdWU9XCJzaG9ydFwiXG4gICAgICAgICAgICBvcHRpb25zPXtMT05HX1NFTEVDVF9PUFRJT05TfVxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgd2lkZVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYWN0aW9uLWZvcm1cIixcbiAgICB0aXRsZTogXCJBY3Rpb25Gb3JtXCIsXG4gICAgY29tcG9uZW50OiBcIkFjdGlvbkZvcm1cIixcbiAgICBzdW1tYXJ5OiBcIldyYXBzIGEgbmF0aXZlIGZvcm0gd2l0aCB0aGUgYWN0aW9uIHBhdHRlcm4g4oCUIHN1Ym1pdCBkaXNwYXRjaGVzIHRoZSBmb3JtIGhhbmRsZXIuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImZvcm0gd2l0aCBUZXh0SW5wdXQgZmllbGRzICsgYSBzdWJtaXQgQnV0dG9uXCIgd2lkZT5cbiAgICAgICAgPEFjdGlvbkZvcm0gZm9ybT17Z2FsbGVyeUZvcm19IGFyaWEtbGFiZWw9XCJHYWxsZXJ5IGRlbW8gZm9ybVwiPlxuICAgICAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgICAgICA8VGV4dCBhcz1cImxhYmVsXCIgc2l6ZT1cInNtXCIgdG9uZT1cIm11dGVkXCIgaHRtbEZvcj1cImdhbGxlcnktZm9ybS1uYW1lXCI+XG4gICAgICAgICAgICAgIEZ1bGwgbmFtZVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPFRleHRJbnB1dCBpZD1cImdhbGxlcnktZm9ybS1uYW1lXCIgbmFtZT1cImZ1bGxOYW1lXCIgcGxhY2Vob2xkZXI9XCJBZGEgTG92ZWxhY2VcIiAvPlxuICAgICAgICAgICAgPFRleHQgYXM9XCJsYWJlbFwiIHNpemU9XCJzbVwiIHRvbmU9XCJtdXRlZFwiIGh0bWxGb3I9XCJnYWxsZXJ5LWZvcm0tZW1haWxcIj5cbiAgICAgICAgICAgICAgRW1haWxcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgaWQ9XCJnYWxsZXJ5LWZvcm0tZW1haWxcIiBuYW1lPVwiZW1haWxcIiBwbGFjZWhvbGRlcj1cImFkYUBleGFtcGxlLmNvbVwiIC8+XG4gICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJzdWJtaXRcIiB0aWVyPVwicHJpbWFyeVwiIGNvbG9yPVwiaW5mb1wiIGxhYmVsPVwiU3VibWl0XCIgLz5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9BY3Rpb25Gb3JtPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwibW9kYWxcIixcbiAgICB0aXRsZTogXCJNb2RhbFwiLFxuICAgIGNvbXBvbmVudDogXCJNb2RhbFwiLFxuICAgIHN1bW1hcnk6IFwiQ29tcG91bmQgZGlhbG9nIOKAlCBmb2N1cyB0cmFwLCBFc2NhcGUgaGFuZGxpbmcsIHBvcnRhbCwgc2Nyb2xsIGxvY2suXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm9wZW5zIGEgcG9ydGFsbGVkIGRpYWxvZ1wiPlxuICAgICAgICA8QnV0dG9uIHRpZXI9XCJwcmltYXJ5XCIgZGF0YS1hY3Rpb249XCJnYWxsZXJ5Om1vZGFsLW9wZW5cIiBsYWJlbD1cIk9wZW4gbW9kYWxcIiAvPlxuICAgICAgICA8TW9kYWwuUm9vdFxuICAgICAgICAgIHdoZW49eyRnYWxsZXJ5TW9kYWxPcGVufVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgICRnYWxsZXJ5TW9kYWxPcGVuLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgfX1cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiRGVtbyBtb2RhbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8TW9kYWwuQmFja2Ryb3AgLz5cbiAgICAgICAgICA8TW9kYWwuQ29udGVudD5cbiAgICAgICAgICAgIDxNb2RhbC5IZWFkZXI+XG4gICAgICAgICAgICAgIDxNb2RhbC5UaXRsZT5Nb2RhbCB0aXRsZTwvTW9kYWwuVGl0bGU+XG4gICAgICAgICAgICA8L01vZGFsLkhlYWRlcj5cbiAgICAgICAgICAgIDxNb2RhbC5Cb2R5PlxuICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICBGb2N1cyBpcyB0cmFwcGVkIGluc2lkZSB0aGUgZGlhbG9nLCBFc2NhcGUgY2xvc2VzIGl0LCB0aGUgYmFja2Ryb3AgY2xpY2sgY2xvc2VzIGl0LFxuICAgICAgICAgICAgICAgIGFuZCB0aGUgYm9keSBzY3JvbGwgaXMgbG9ja2VkIHdoaWxlIGl0IGlzIG9wZW4uXG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvTW9kYWwuQm9keT5cbiAgICAgICAgICAgIDxNb2RhbC5Gb290ZXI+XG4gICAgICAgICAgICAgIDxNb2RhbC5DbG9zZT5cbiAgICAgICAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJwcmltYXJ5XCIgbGFiZWw9XCJEb25lXCIgLz5cbiAgICAgICAgICAgICAgPC9Nb2RhbC5DbG9zZT5cbiAgICAgICAgICAgIDwvTW9kYWwuRm9vdGVyPlxuICAgICAgICAgIDwvTW9kYWwuQ29udGVudD5cbiAgICAgICAgPC9Nb2RhbC5Sb290PlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY29uZmlybS1kaWFsb2dcIixcbiAgICB0aXRsZTogXCJDb25maXJtRGlhbG9nXCIsXG4gICAgY29tcG9uZW50OiBcIkNvbmZpcm1EaWFsb2dcIixcbiAgICBzdW1tYXJ5OiBcIlByb21pc2UtcmV0dXJuaW5nIGNvbmZpcm1hdGlvbi4gY29uZmlybSgpIHJlc29sdmVzIHRydWUgb3IgZmFsc2UuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNvbmZpcm0oKSDigJQgc3RhbmRhcmRcIj5cbiAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJzZWNvbmRhcnlcIiBkYXRhLWFjdGlvbj1cImdhbGxlcnk6Y29uZmlybVwiIGxhYmVsPVwiQ29uZmlybSBhbiBhY3Rpb25cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNvbmZpcm0oeyBkYW5nZXI6IHRydWUgfSlcIj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0aWVyPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTpjb25maXJtXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uLWRhbmdlcj1cInRydWVcIlxuICAgICAgICAgICAgbGFiZWw9XCJDb25maXJtIGEgZGVsZXRpb25cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidG9hc3RcIixcbiAgICB0aXRsZTogXCJUb2FzdFwiLFxuICAgIGNvbXBvbmVudDogXCJUb2FzdFwiLFxuICAgIHN1bW1hcnk6IFwiUmVuZGVycyB0aGUgZ2xvYmFsIGVycm9yU3RhdGUgc2lnbmFsLiBTZXZlcml0eSBzZXRzIHRoZSBhcmlhLWxpdmUgcG9saXRlbmVzcy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwicHVzaCBhIHRvYXN0IGF0IGVhY2ggc2V2ZXJpdHlcIiB3aWRlPlxuICAgICAgICA8Q2x1c3RlciBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0aWVyPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIGNvbG9yPVwiaW5mb1wiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbj1cImdhbGxlcnk6dG9hc3RcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb24tc2V2ZXJpdHk9XCJpbmZvXCJcbiAgICAgICAgICAgIGxhYmVsPVwiSW5mbyB0b2FzdFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0aWVyPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIGNvbG9yPVwid2FybmluZ1wiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbj1cImdhbGxlcnk6dG9hc3RcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb24tc2V2ZXJpdHk9XCJ3YXJuaW5nXCJcbiAgICAgICAgICAgIGxhYmVsPVwiV2FybmluZyB0b2FzdFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0aWVyPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTp0b2FzdFwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbi1zZXZlcml0eT1cImVycm9yXCJcbiAgICAgICAgICAgIGxhYmVsPVwiRXJyb3IgdG9hc3RcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcIm92ZXJsYXktcm9vdFwiLFxuICAgIHRpdGxlOiBcIk92ZXJsYXlSb290XCIsXG4gICAgY29tcG9uZW50OiBcIk92ZXJsYXlSb290XCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiSW5mcmFzdHJ1Y3R1cmUsIG5vdCBhIHZpc3VhbCBjb250cm9sLiBNb3VudCBpdCBvbmNlIG5lYXIgdGhlIGFwcCByb290OyBNb2RhbCwgVG9hc3QsIGFuZCBcIiArXG4gICAgICBcIkNvbmZpcm1EaWFsb2cgcG9ydGFsIGludG8gaXQuIFRoZSBnYWxsZXJ5IHNoZWxsIGFscmVhZHkgbW91bnRzIG9uZSDigJQgdGhpcyBzZWN0aW9uIGRvY3VtZW50cyBpdC5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibW91bnRlZCBvbmNlIGF0IHRoZSBhcHAgcm9vdFwiIHdpZGU+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIDxDb2RlPntcIjxPdmVybGF5Um9vdCAvPlwifTwvQ29kZT4gcmVuZGVycyB0aGUgcG9ydGFsIHRhcmdldCB0aGUgb3ZlcmxheSBwcmltaXRpdmVzIG5lZWQuXG4gICAgICAgICAgV2l0aG91dCBpdCwgdGhlIE1vZGFsIC8gVG9hc3QgLyBDb25maXJtRGlhbG9nIHNwZWNpbWVucyBhYm92ZSB3b3VsZCBoYXZlIG5vd2hlcmUgdG9cbiAgICAgICAgICByZW5kZXIuIEl0IGRyYXdzIG5vdGhpbmcgaXRzZWxmOyB0aGUgZ2FsbGVyeSBzaGVsbCBtb3VudHMgdGhlIHNpbmdsZSBsaXZlIGluc3RhbmNlLlxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG5dO1xuIiwKICAgICIvKipcbiAqIFRoZSBnYWxsZXJ5IGFwcCByb290IOKAlCBhIHNpbmdsZSBzY3JvbGxhYmxlIHBhZ2UgY2F0YWxvZ3VpbmcgZXZlcnkgcG9sbHktdWlcbiAqIHByaW1pdGl2ZSBpbiBpdHMgY29uZmlndXJhdGlvbnMuIEFuIGluLXBhZ2UgbmF2IGp1bXBzIGJldHdlZW4gc2VjdGlvbnM7IGFcbiAqIHRoZW1lIHRvZ2dsZSBmb3JjZXMgbGlnaHQvZGFyayBvbiB0aGUgcGFuZWwgc3VidHJlZSB2aWEgYGRhdGEtcG9sbHktdGhlbWVgXG4gKiBzbyBib3RoIHBhbGV0dGVzIGNhbiBiZSBpbnNwZWN0ZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgT1Mgc2V0dGluZy5cbiAqXG4gKiBUaGUgb3ZlcmxheSBob3N0cyAoT3ZlcmxheVJvb3QgLyBUb2FzdC5WaWV3cG9ydCAvIENvbmZpcm1EaWFsb2cuSG9zdCkgYXJlXG4gKiBtb3VudGVkIGhlcmUgb25jZSwgc28gdGhlIE1vZGFsLCBUb2FzdCwgYW5kIENvbmZpcm1EaWFsb2cgc3BlY2ltZW5zIGhhdmUgYVxuICogcG9ydGFsIHRhcmdldCDigJQgdGhlIHNhbWUgd2lyaW5nIGEgcmVhbCBjb25zdW1lciBhcHAgZG9lcyBhdCBpdHMgcm9vdC5cbiAqL1xuXG5pbXBvcnQge1xuICBCdXR0b24sXG4gIENsdXN0ZXIsXG4gIENvbmZpcm1EaWFsb2csXG4gIExheW91dCxcbiAgT3ZlcmxheVJvb3QsXG4gIFN1cmZhY2UsXG4gIFRleHQsXG4gIFRvYXN0LFxufSBmcm9tIFwiLi4vLi4vLi4vc3JjL3BvbGx5LXVpXCI7XG5pbXBvcnQgeyBUSEVNRVMgfSBmcm9tIFwiLi9hY3Rpb25zLnRzXCI7XG5pbXBvcnQgeyBHQUxMRVJZX1NFQ1RJT05TLCB0eXBlIEdhbGxlcnlTZWN0aW9uIH0gZnJvbSBcIi4vc3BlY2ltZW5zLnRzeFwiO1xuaW1wb3J0IHsgJGdhbGxlcnlUaGVtZSB9IGZyb20gXCIuL3N0b3Jlcy50c1wiO1xuXG4vKiogQSBjYXBpdGFsaXNlZCBsYWJlbCBmb3IgYSB0aGVtZSBvcHRpb24uICovXG5mdW5jdGlvbiB0aGVtZUxhYmVsKHRoZW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGhlbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGVtZS5zbGljZSgxKTtcbn1cblxuLyoqIE9uZSBjYXRhbG9ndWVkIGNvbXBvbmVudDogYSBsYWJlbGxlZCBsYW5kbWFyayB3aXRoIGEgZ3JpZCBvZiBzcGVjaW1lbnMuICovXG5mdW5jdGlvbiBTZWN0aW9uKHByb3BzOiB7IHNlY3Rpb246IEdhbGxlcnlTZWN0aW9uIH0pIHtcbiAgY29uc3QgeyBzZWN0aW9uIH0gPSBwcm9wcztcbiAgY29uc3QgaGVhZGluZ0lkID0gYCR7c2VjdGlvbi5pZH0taGVhZGluZ2A7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIGFzPVwic2VjdGlvblwiXG4gICAgICBpZD17c2VjdGlvbi5pZH1cbiAgICAgIHZhcmlhbnQ9XCJwbGFpblwiXG4gICAgICBjbGFzc05hbWU9XCJnYWxsZXJ5LXNlY3Rpb25cIlxuICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtoZWFkaW5nSWR9XG4gICAgPlxuICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgPGgyIGlkPXtoZWFkaW5nSWR9IGNsYXNzPVwiZ2FsbGVyeS1zZWN0aW9uLXRpdGxlXCI+XG4gICAgICAgICAge3NlY3Rpb24udGl0bGV9XG4gICAgICAgIDwvaDI+XG4gICAgICAgIDxUZXh0IGFzPVwicFwiIHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgIHtzZWN0aW9uLnN1bW1hcnl9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPExheW91dFxuICAgICAgICAgIGNvbHVtbnM9XCJyZXBlYXQoYXV0by1maWxsLCBtaW5tYXgobWluKDEwMCUsIDE0cmVtKSwgMWZyKSlcIlxuICAgICAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7c2VjdGlvbi5yZW5kZXIoKX1cbiAgICAgICAgPC9MYXlvdXQ+XG4gICAgICA8L0xheW91dD5cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBHYWxsZXJ5QXBwKCkge1xuICBjb25zdCB0aGVtZSA9ICRnYWxsZXJ5VGhlbWUudmFsdWU7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIHZhcmlhbnQ9XCJyYWlzZWRcIlxuICAgICAgcGFkZGluZz1cImNsYW1wKHZhcigtLXBvbGx5LXNwYWNlLXNtKSwgM3Z3LCB2YXIoLS1wb2xseS1zcGFjZS14bCkpXCJcbiAgICAgIGRhdGEtZ2FsbGVyeS1wYW5lbD1cInRydWVcIlxuICAgICAgZGF0YS1wb2xseS10aGVtZT17dGhlbWUgPT09IFwic3lzdGVtXCIgPyB1bmRlZmluZWQgOiB0aGVtZX1cbiAgICA+XG4gICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLWxnKVwiPlxuICAgICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICAgIDxoMSBjbGFzcz1cImdhbGxlcnktdGl0bGVcIj5Qb2xseSBVSSBnYWxsZXJ5PC9oMT5cbiAgICAgICAgICA8VGV4dCBhcz1cInBcIiB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICAgIEV2ZXJ5IDxUZXh0IHdlaWdodD1cIm1lZGl1bVwiPkBmYWlyZm94L3BvbGx5L3VpPC9UZXh0PiBwcmltaXRpdmUsIGluIGl0cyBjb25maWd1cmF0aW9ucyDigJRcbiAgICAgICAgICAgIGEgcmVmZXJlbmNlIGZvciBidWlsZGluZyBwb2xseSBhcHBzLCBhbmQgYSBzaW5nbGUgc3VyZmFjZSBmb3IgYWNjZXNzaWJpbGl0eSBhbmRcbiAgICAgICAgICAgIHZpc3VhbC1yZWdyZXNzaW9uIGNoZWNrcy5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvTGF5b3V0PlxuXG4gICAgICAgIDxTdXJmYWNlIHZhcmlhbnQ9XCJjYWxsb3V0XCIgcmFkaXVzPVwibWRcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgPENsdXN0ZXIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCIgYWxpZ249XCJjZW50ZXJcIj5cbiAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbVwiIHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgICBUaGVtZVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAge1RIRU1FUy5tYXAoKHQpID0+IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT17dH1cbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIHRpZXI9e3QgPT09IHRoZW1lID8gXCJwcmltYXJ5XCIgOiBcInRlcnRpYXJ5XCJ9XG4gICAgICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OnNldC10aGVtZVwiXG4gICAgICAgICAgICAgICAgZGF0YS1hY3Rpb24tdGhlbWU9e3R9XG4gICAgICAgICAgICAgICAgbGFiZWw9e3RoZW1lTGFiZWwodCl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICAgIDwvU3VyZmFjZT5cblxuICAgICAgICA8bmF2IGFyaWEtbGFiZWw9XCJDb21wb25lbnRzXCI+XG4gICAgICAgICAgPENsdXN0ZXIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCI+XG4gICAgICAgICAgICB7R0FMTEVSWV9TRUNUSU9OUy5tYXAoKHNlY3Rpb24pID0+IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT17c2VjdGlvbi5pZH1cbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIHRpZXI9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgICAgICAgaHJlZj17YCMke3NlY3Rpb24uaWR9YH1cbiAgICAgICAgICAgICAgICBsYWJlbD17c2VjdGlvbi50aXRsZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgICAgPC9uYXY+XG5cbiAgICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14bClcIj5cbiAgICAgICAgICB7R0FMTEVSWV9TRUNUSU9OUy5tYXAoKHNlY3Rpb24pID0+IChcbiAgICAgICAgICAgIDxTZWN0aW9uIGtleT17c2VjdGlvbi5pZH0gc2VjdGlvbj17c2VjdGlvbn0gLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9MYXlvdXQ+XG4gICAgICA8L0xheW91dD5cblxuICAgICAgey8qIE1vdW50ZWQgb25jZSBzbyB0aGUgb3ZlcmxheSBzcGVjaW1lbnMgaGF2ZSBhIHBvcnRhbCB0YXJnZXQuICovfVxuICAgICAgPE92ZXJsYXlSb290IC8+XG4gICAgICA8VG9hc3QuVmlld3BvcnQgLz5cbiAgICAgIDxDb25maXJtRGlhbG9nLkhvc3QgLz5cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogVGhlIGdhbGxlcnkncyBicm93c2VyIGVudHJ5IHBvaW50LiBCdW5kbGVkIGJ5IHNlcnZlci50cyAob25lIEJ1bi5idWlsZCBwYXNzKVxuICog4oCUIGl0cyB0cmFuc2l0aXZlIGAubW9kdWxlLmNzc2AgaW1wb3J0cyBwbHVzIHRoZSBnbG9iYWwgc3R5bGVzaGVldHMgYmVsb3cgY29tZVxuICogb3V0IGFzIGEgc2luZ2xlIENTUyBhcnRpZmFjdCB0aGUgc2VydmVyIHNlcnZlcyBhbG9uZ3NpZGUgdGhpcyBzY3JpcHQuXG4gKlxuICogQm9vdCBtaXJyb3JzIGEgcmVhbCBjb25zdW1lciBhcHA6IGJpbmQgdGhlIGRlbW8gZm9ybSwgaW5zdGFsbCB0aGUgZG9jdW1lbnRcbiAqIGV2ZW50IGRlbGVnYXRpb24gdGhhdCByb3V0ZXMgYGRhdGEtYWN0aW9uYCBjbGlja3Mvc3VibWl0cyBpbnRvIHRoZSBnYWxsZXJ5J3NcbiAqIGFjdGlvbiByZWdpc3RyeSwgdGhlbiByZW5kZXIuIFRoZSBvdmVybGF5IGhvc3RzIGxpdmUgaW5zaWRlIDxHYWxsZXJ5QXBwIC8+LlxuICovXG5cbmltcG9ydCB7IHJlbmRlciB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGluc3RhbGxFdmVudERlbGVnYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vc3JjL2FjdGlvbnNcIjtcbmltcG9ydCB7IEdBTExFUllfQUNUSU9OUyB9IGZyb20gXCIuL2FjdGlvbnMudHNcIjtcbmltcG9ydCB7IEdhbGxlcnlBcHAgfSBmcm9tIFwiLi9nYWxsZXJ5LWFwcC50c3hcIjtcbmltcG9ydCB7IHR5cGUgR2FsbGVyeVN0b3JlcywgZ2FsbGVyeUZvcm0gfSBmcm9tIFwiLi9zdG9yZXMudHNcIjtcbmltcG9ydCBcIi4uLy4uLy4uL3NyYy9wb2xseS11aS90aGVtZS5jc3NcIjtcbmltcG9ydCBcIi4uLy4uLy4uL3NyYy9wb2xseS11aS9zdHlsZXMuY3NzXCI7XG5pbXBvcnQgXCIuL2dhbGxlcnkuY3NzXCI7XG5cbmNvbnN0IHN0b3JlczogR2FsbGVyeVN0b3JlcyA9IHt9O1xuZ2FsbGVyeUZvcm0uYmluZFN0b3JlcygoKSA9PiBzdG9yZXMpO1xuXG5pbnN0YWxsRXZlbnREZWxlZ2F0aW9uKGFzeW5jIChkaXNwYXRjaCkgPT4ge1xuICBjb25zdCBoYW5kbGVyID0gR0FMTEVSWV9BQ1RJT05TW2Rpc3BhdGNoLmFjdGlvbl07XG4gIGlmIChoYW5kbGVyKSB7XG4gICAgYXdhaXQgaGFuZGxlcih7XG4gICAgICBzdG9yZXMsXG4gICAgICBldmVudDogZGlzcGF0Y2guZXZlbnQsXG4gICAgICBlbGVtZW50OiBkaXNwYXRjaC5lbGVtZW50LFxuICAgICAgZGF0YTogZGlzcGF0Y2guZGF0YSxcbiAgICB9KTtcbiAgfVxufSk7XG5cbmNvbnN0IHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFwcFwiKSA/PyBkb2N1bWVudC5ib2R5O1xucmVuZGVyKDxHYWxsZXJ5QXBwIC8+LCByb290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RUFBRSxLQUFJLEVBQUUsSUFBSSxjQUFhLEtBQUcsRUFBRSxNQUFJLENBQUMsQ0FBQyxJQUFFLE1BQUssR0FBUSxLQUFOLE9BQVEsRUFBRSxDQUFDLElBQUUsR0FBRSxDQUFDLEVBQUUsS0FBRyxFQUFFLE1BQUssQ0FBQyxHQUFFLEVBQUUsTUFBSSxFQUFFLEtBQUksRUFBRSxHQUFHLElBQUksRUFBRSxPQUFLLEdBQUUsRUFBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEVBQUUsTUFBSSxFQUFFLEtBQUcsTUFBSyxFQUFFLE9BQUssS0FBRyxFQUFFLENBQUM7QUFBQSxFQUFDO0FBQUE7QUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxLQUFVLElBQUUsRUFBRSxPQUFYLFFBQXNCLEVBQUUsT0FBUjtBQUFBLElBQVksT0FBTyxFQUFFLE1BQUksRUFBRSxJQUFJLE9BQUssTUFBSyxFQUFFLElBQUksS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLE1BQUMsSUFBUyxLQUFOLFFBQWUsRUFBRSxPQUFSO0FBQUEsUUFBWSxPQUFPLEVBQUUsTUFBSSxFQUFFLElBQUksT0FBSyxFQUFFO0FBQUEsS0FBSSxHQUFFLEVBQUUsQ0FBQztBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRTtBQUFBLEdBQUUsQ0FBQyxFQUFFLFFBQU0sRUFBRSxNQUFJLFNBQUssRUFBRSxLQUFLLENBQUMsS0FBRyxDQUFDLEVBQUUsU0FBTyxLQUFHLEVBQUUsd0JBQXNCLElBQUUsRUFBRSxzQkFBb0IsR0FBRyxDQUFDO0FBQUE7QUFBRSxTQUFTLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBRztBQUFBLElBQUMsU0FBUSxHQUFFLElBQUUsRUFBRSxFQUFFO0FBQUEsTUFBUSxFQUFFLFNBQU8sS0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFFLElBQUUsRUFBRSxNQUFNLEdBQUUsSUFBRSxFQUFFLFFBQU8sRUFBRSxDQUFDO0FBQUEsWUFBRTtBQUFBLElBQVEsRUFBRSxTQUFPLEVBQUUsTUFBSTtBQUFBO0FBQUE7QUFBRyxTQUFTLENBQUMs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QUFHLEVBQUUsS0FBRyxFQUFFO0FBQUEsUUFBRztBQUFBLE1BQU8sT0FBTyxFQUFFLEVBQUUsUUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFFLENBQUM7QUFBQSxJQUFDO0FBQUE7QUFBQTtBQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxJQUFFLEVBQUU7QUFBQSxFQUFLLElBQVksRUFBRSxnQkFBTjtBQUFBLElBQWtCLE9BQU87QUFBQSxFQUFLLE1BQUksRUFBRSxRQUFNLElBQUUsQ0FBQyxFQUFFLEtBQUcsRUFBRSxNQUFLLElBQUUsQ0FBQyxJQUFFLEVBQUUsTUFBSSxFQUFFLEdBQUcsS0FBSSxJQUFFLEVBQUUsUUFBTSxFQUFFLENBQUM7QUFBQSxFQUFFO0FBQUEsSUFBRSxJQUFlLE9BQU8sS0FBbkIsWUFBcUI7QUFBQSxNQUFDLElBQUUsRUFBRTtBQUFBLE1BQU8sSUFBRztBQUFBLFFBQUMsSUFBRyxJQUFFLEVBQUUsT0FBTSxJQUFFLEVBQUUsYUFBVyxFQUFFLFVBQVUsUUFBTyxLQUFHLElBQUUsRUFBRSxnQkFBYyxFQUFFLEVBQUUsTUFBSyxJQUFFLElBQUUsSUFBRSxFQUFFLE1BQU0sUUFBTSxFQUFFLEtBQUcsR0FBRSxFQUFFLE1BQUksS0FBRyxJQUFFLEVBQUUsTUFBSSxFQUFFLEtBQUssS0FBRyxFQUFFLE9BQUssSUFBRSxFQUFFLE1BQUksSUFBRSxJQUFJLEVBQUUsR0FBRSxDQUFDLEtBQUcsRUFBRSxNQUFJLElBQUUsSUFBSSxFQUFFLEdBQUUsQ0FBQyxHQUFFLEVBQUUsY0FBWSxHQUFFLEVBQUUsU0FBTyxJQUFHLEtBQUcsRUFBRSxJQUFJLENBQUMsR0FBRSxFQUFFLFVBQVEsRUFBRSxRQUFNLENBQUMsSUFBRyxFQUFFLE1BQUksR0FBRSxJ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LEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsRUFBRSxPQUFLLEVBQUUsS0FBSSxFQUFFLE9BQUssTUFBSyxFQUFFLElBQUksVUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFFLE1BQUksRUFBRSxNQUFJLEVBQUUsS0FBRztBQUFBLFFBQU0sT0FBTSxHQUFFO0FBQUEsUUFBQyxJQUFHLEVBQUUsU0FBTyxHQUFFLEVBQUUsTUFBSSxNQUFLLEtBQVMsS0FBTixNQUFRO0FBQUEsVUFBQyxJQUFHLEVBQUUsTUFBSztBQUFBLFlBQUMsS0FBSSxFQUFFLE9BQUssSUFBRSxNQUFJLElBQUksS0FBTSxFQUFFLFlBQUwsS0FBZSxFQUFFO0FBQUEsY0FBYSxJQUFFLEVBQUU7QUFBQSxZQUFrQixLQUFOLFNBQVUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxLQUFHLE9BQU0sRUFBRSxNQUFJO0FBQUEsVUFBQyxFQUFNLFNBQVMsS0FBTjtBQUFBLFlBQVEsS0FBSSxJQUFFLEVBQUUsT0FBTztBQUFBLGNBQUssRUFBRSxFQUFFLEVBQUU7QUFBQSxRQUFDLEVBQU07QUFBQSxZQUFFLE1BQUksRUFBRTtBQUFBLFFBQVUsRUFBRSxPQUFSLFNBQWMsRUFBRSxNQUFJLEVBQUUsT0FBSyxDQUFDLElBQUcsRUFBRSxRQUFNLEVBQUUsQ0FBQyxHQUFFLEVBQUUsSUFBSSxHQUFFLEdBQUUsQ0FBQztBQUFBO0FBQUEsSUFBRSxFQUFNO0FBQUEsTUFBTSxLQUFOLFFBQVMsRUFBRSxPQUFLLEVBQUUsT0FBSyxFQUFFLE1BQUksRUFBRSxLQUFJLEVBQUUsTUFBSSxFQUFFLE9BQUssSUFBRSxFQUFFLE1BQUksRUFBRSxFQUFFLEtBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsRUFBRSxRQUFPLElBQUUsRUFBRSxXQUFTLEVBQUUsQ0FBQyxHQUFFLE1BQUksRUFBRSxNQUFTLFlBQUU7QUFBQTtBQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLE1BQUksRUFB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RyxFQUFFLElBQUksR0FBRSxLQUFTLEtBQU4sU0FBVSxFQUFFLE1BQUksRUFBRSxDQUFDO0FBQUEsSUFBRSxFQUFNO0FBQUEsUUFBRSxVQUFRO0FBQUEsSUFBRSxPQUFNLEdBQUU7QUFBQSxJQUFDLEVBQUUsSUFBSSxHQUFFLENBQUM7QUFBQTtBQUFBO0FBQUcsU0FBUyxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUksR0FBRTtBQUFBLEVBQUUsSUFBRyxFQUFFLFdBQVMsRUFBRSxRQUFRLENBQUMsSUFBRyxJQUFFLEVBQUUsU0FBTyxFQUFFLFdBQVMsRUFBRSxXQUFTLEVBQUUsT0FBSyxFQUFFLEdBQUUsTUFBSyxDQUFDLEtBQVUsSUFBRSxFQUFFLFFBQVgsTUFBZ0I7QUFBQSxJQUFDLElBQUcsRUFBRTtBQUFBLE1BQXFCLElBQUc7QUFBQSxRQUFDLEVBQUUscUJBQXFCO0FBQUEsUUFBRSxPQUFNLEdBQUU7QUFBQSxRQUFDLEVBQUUsSUFBSSxHQUFFLENBQUM7QUFBQTtBQUFBLElBQUUsRUFBRSxPQUFLLEVBQUUsTUFBSSxFQUFFLE1BQUk7QUFBQSxFQUFJO0FBQUEsRUFBQyxJQUFHLElBQUUsRUFBRTtBQUFBLElBQUksS0FBSSxJQUFFLEVBQUUsSUFBRSxFQUFFLFFBQU87QUFBQSxNQUFJLEVBQUUsTUFBSSxFQUFFLEVBQUUsSUFBRyxHQUFFLEtBQWUsT0FBTyxFQUFFLFFBQXJCLFVBQXlCO0FBQUEsRUFBRSxLQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUUsRUFBRSxNQUFJLEVBQUUsS0FBRyxFQUFFLE1BQVM7QUFBQTtBQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUssWUFBWSxHQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBRSxLQUFHLGFBQVcsSUFBRSxTQUFTLGtCQUFpQixFQUFFLE1BQUksRUFBRSxHQUFHLEdBQUUs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QUksSUFBRSxHQUFFLFFBQU0sR0FBRSxNQUFJLEVBQUMsSUFBRyxDQUFDLEdBQUUsS0FBSSxDQUFDLEVBQUM7QUFBQSxFQUFHLE9BQU8sS0FBRyxFQUFFLEdBQUcsVUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRSxFQUFFLEdBQUc7QUFBQTtBQUFHLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBRSxHQUFFLEdBQUUsSUFBRSxDQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsTUFBSSxDQUFDO0FBQUEsRUFBRSxJQUFHLEVBQUUsSUFBRSxHQUFFLENBQUMsRUFBRSxRQUFNLEVBQUUsS0FBRyxDQUFDLElBQUUsRUFBRSxDQUFDLElBQUUsR0FBTyxXQUFFLENBQUMsR0FBRSxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLEVBQUUsTUFBSSxFQUFFLElBQUksS0FBRyxFQUFFLEdBQUcsSUFBRyxJQUFFLEVBQUUsRUFBRSxHQUFFLENBQUM7QUFBQSxJQUFFLE1BQUksTUFBSSxFQUFFLE1BQUksQ0FBQyxHQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUUsRUFBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDO0FBQUEsR0FBRyxHQUFFLEVBQUUsTUFBSSxJQUFFLENBQUMsR0FBRSxNQUFLO0FBQUEsSUFBQyxJQUFJLElBQUUsUUFBUSxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsTUFBQyxJQUFHLENBQUMsRUFBRSxJQUFJO0FBQUEsUUFBSSxPQUFNO0FBQUEsTUFBRyxJQUFJLElBQUUsT0FBRyxJQUFFLEVBQUUsSUFBSSxVQUFRO0FBQUEsTUFBRSxJQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLFFBQUMsSUFBRyxFQUFFLEtBQUk7QUFBQSxVQUFDLElBQUU7QUFBQSxVQUFHLElBQUksSUFBRSxFQUFFLEdBQUc7QUFBQSxVQUFHLEVBQUUsS0FBRyxFQUFFLEtBQUksRUFBRSxNQUFTLFdBQUUsTUFBSSxFQUFFLEdBQUcsT0FBSyxJQUFFO0FBQUEsUUFBRztBQUFBLE9BQUUsR0FBRSxHQUFFO0FBQUEsUUFBQyxJQUFJLElBQUUsRUFBRSxLQUFLLE1BQUssR0FBRSxHQUFFLENBQUM7QUFBQSxRQUFFLE9BQU8sSUFBRSxLQUFHLElBQUU7QUFBQSxNQUFDO0FBQUEsTUFBQyxPQUFNLENBQUMsS0FBRztBQUFBO0FBQUEsSUFBRyxHQUFFLE1BQUk7QUFBQSxJQUFHLElBQUksSUFBRSxHQUFFLHVCQUFzQixJQUFFLEdBQUU7QUFBQSxJQUFvQixHQUFFLHNCQUFvQixRQUFRLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxNQUFDLElBQUcsS0FBSyxLQUFJO0FBQUEsUUFBQyxJQUFJLElBQUU7QUFBQSxRQUFFLElBQU8sV0FBRSxFQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsSUFBRTtBQUFBLE1BQUM7QUFBQSxNQUFDLEtBQUcsRUFBRSxLQUFLLE1BQUssR0FBRSxHQUFFLENBQUM7QUFBQSxPQUFHLEdBQUUsd0JBQXNCO0FBQUEsRUFBQztBQUFBLEVBQUMsT0FBTyxFQUFFLE9BQUssRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxNQUFJLENBQUM7QUFBQSxFQUFFLENBQUMsR0FBRSxPQUFLLEdBQUUsRUFBRSxLQUFJLENBQUMsTUFBSSxFQUFFLEtBQUcsR0FBRSxFQUFFLElBQUUsR0FBRSxHQUFFLElBQUksSUFBSSxLQUFLLENBQUM7QUFBQTtBQUFtRixTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUUsR0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTSxFQUFDLFNBQVEsRUFBQztBQUFBLEtBQUcsQ0FBQyxDQUFDO0FBQUE7QUFBdU4sU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxNQUFJLENBQUM7QUFBQSxFQUFFLE9BQU8sR0FBRSxFQUFFLEtBQUksQ0FBQyxNQUFJLEVBQUUsS0FBRyxFQUFFLEdBQUUsRUFBRSxNQUFJLEdBQUUsRUFBRSxNQUFJLElBQUcsRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUUsR0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTztBQUFBLEtBQUcsQ0FBQztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsUUFBUSxFQUFFLE1BQUssSUFBRSxHQUFFLE1BQUksQ0FBQztBQUFBLEVBQUUsT0FBTyxFQUFFLElBQUUsR0FBRSxLQUFTLEVBQUUsTUFBUixTQUFhLEVBQUUsS0FBRyxNQUFHLEVBQUUsSUFBSSxFQUFDLElBQUcsRUFBRSxNQUFNLFNBQU8sRUFBRTtBQUFBO0FBQWtPLFNBQVMsRUFBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxNQUFJLEVBQUU7QUFBQSxFQUFFLElBQUcsQ0FBQyxFQUFFLElBQUc7QUFBQSxJQUFDLFNBQVEsSUFBRSxHQUFFLElBQVcsTUFBUCxRQUFVLENBQUMsRUFBRSxPQUFZLEVBQUUsT0FBVDtBQUFBLE1BQWEsSUFBRSxFQUFFO0FBQUEsSUFBRyxJQUFJLElBQUUsRUFBRSxRQUFNLEVBQUUsTUFBSSxDQUFDLEdBQUUsQ0FBQztBQUFBLElBQUcsRUFBRSxLQUFHLE1BQUksRUFBRSxLQUFHLE1BQUksRUFBRTtBQUFBLEVBQUk7QUFBQSxFQUFDLE9BQU8sRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLEdBQUU7QUFBQSxFQUFDLFNBQVEsRUFBRSxJQUFFLEdBQUUsTUFBTSxLQUFHO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLElBQUksSUFBRyxFQUFFLE9BQUs7QUFBQSxNQUFFLElBQUc7QUFBQSxRQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUMsR0FBRSxFQUFFLElBQUksS0FBSyxFQUFDLEdBQUUsRUFBRSxNQUFJLENBQUM7QUFBQSxRQUFFLE9BQU0sR0FBRTtBQUFBLFFBQUMsRUFBRSxNQUFJLENBQUMsR0FBRSxHQUFFLElBQUksR0FBRSxFQUFFLEdBQUc7QUFBQTtBQUFBLEVBQUU7QUFBQTtBQUFFLEdBQUUsTUFBSSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsS0FBRSxNQUFLLE1BQUcsR0FBRSxDQUFDO0FBQUEsR0FBRyxHQUFFLEtBQUcsUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsS0FBRyxFQUFFLE9BQUssRUFBRSxJQUFJLFFBQU0sRUFBRSxNQUFJLEVBQUUsSUFBSSxNQUFLLE1BQUcsR0FBRSxHQUFFLENBQUM7QUFBQSxHQUFHLEdBQUUsTUFBSSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLENBQUMsR0FBRSxLQUFFO0FBQUEsRUFBRSxJQUFJLEtBQUcsS0FBRSxFQUFFLEtBQUs7QUFBQSxFQUFJLE1BQUksT0FBSSxNQUFHLEVBQUUsTUFBSSxDQUFDLEdBQUUsR0FBRSxNQUFJLENBQUMsR0FBRSxFQUFFLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsRUFBRSxRQUFNLEVBQUUsS0FBRyxFQUFFLE1BQUssRUFBRSxJQUFFLEVBQUUsTUFBUztBQUFBLEdBQUUsTUFBSSxFQUFFLElBQUksS0FBSyxFQUFDLEdBQUUsRUFBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEVBQUUsTUFBSSxDQUFDLEdBQUUsS0FBRSxLQUFJLEtBQUU7QUFBQSxHQUFHLEdBQUUsU0FBTyxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLENBQUM7QUFBQSxFQUFFLElBQUksSUFBRSxFQUFFO0FBQUEsRUFBSSxLQUFHLEVBQUUsUUFBTSxFQUFFLElBQUksSUFBSSxXQUFhLEdBQUUsS0FBSyxDQUFDLE1BQVosS0FBZSxPQUFJLEdBQUUsMkJBQXlCLEtBQUUsR0FBRSwwQkFBd0IsSUFBRyxFQUFDLElBQUcsRUFBRSxJQUFJLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsRUFBRSxNQUFJLEVBQUUsTUFBSSxFQUFFLEdBQUUsRUFBRSxJQUFPO0FBQUEsR0FBRyxJQUFHLEtBQUUsS0FBRTtBQUFBLEdBQU0sR0FBRSxNQUFJLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBRztBQUFBLE1BQUMsRUFBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEVBQUUsTUFBSSxFQUFFLElBQUksT0FBTyxRQUFRLENBQUMsR0FBRTtBQUFBLFFBQUMsT0FBTSxDQUFDLEVBQUUsTUFBSSxHQUFFLENBQUM7QUFBQSxPQUFFO0FBQUEsTUFBRSxPQUFNLEdBQUU7QUFBQSxNQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLFFBQUMsRUFBRSxRQUFNLEVBQUUsTUFBSSxDQUFDO0FBQUEsT0FBRyxHQUFFLElBQUUsQ0FBQyxHQUFFLEdBQUUsSUFBSSxHQUFFLEVBQUUsR0FBRztBQUFBO0FBQUEsR0FBRyxHQUFFLE1BQUcsR0FBRSxHQUFFLENBQUM7QUFBQSxHQUFHLEdBQUUsVUFBUSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLENBQUM7QUFBQSxFQUFFLElBQUksR0FBRSxJQUFFLEVBQUU7QUFBQSxFQUFJLEtBQUcsRUFBRSxRQUFNLEVBQUUsSUFBSSxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUc7QUFBQSxNQUFDLEdBQUUsQ0FBQztBQUFBLE1BQUUsT0FBTSxHQUFFO0FBQUEsTUFBQyxJQUFFO0FBQUE7QUFBQSxHQUFHLEdBQUUsRUFBRSxNQUFTLFdBQUUsS0FBRyxHQUFFLElBQUksR0FBRSxFQUFFLEdBQUc7QUFBQTtBQUFJLElBQUksS0FBYyxPQUFPLHlCQUFuQjtBQUF5QyxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLEdBQUUsSUFBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLGFBQWEsQ0FBQyxHQUFFLE1BQUcscUJBQXFCLENBQUMsR0FBRSxXQUFXLENBQUM7QUFBQSxLQUFHLElBQUUsV0FB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QUFBQSxFQUFVLEtBQUssT0FBVyxLQUFOLE9BQWEsWUFBRSxFQUFFO0FBQUE7QUFBSyxHQUFFLFVBQVUsUUFBTTtBQUFFLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsT0FBTTtBQUFBO0FBQUksR0FBRSxVQUFVLElBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxNQUFLLElBQUUsS0FBSztBQUFBLEVBQUUsSUFBRyxNQUFJLEtBQVksRUFBRSxNQUFOLFdBQVE7QUFBQSxJQUFDLEVBQUUsSUFBRTtBQUFBLElBQUUsS0FBSyxJQUFFO0FBQUEsSUFBRSxJQUFZLE1BQUo7QUFBQSxNQUFNLEVBQUUsSUFBRTtBQUFBLElBQU87QUFBQSxTQUFFLFFBQVEsR0FBRTtBQUFBLFFBQUMsSUFBSTtBQUFBLFNBQVMsSUFBRSxFQUFFLE1BQVgsUUFBZSxFQUFFLEtBQUssQ0FBQztBQUFBLE9BQUU7QUFBQSxFQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFO0FBQUEsRUFBSyxJQUFZLEtBQUssTUFBVCxXQUFXO0FBQUEsSUFBQyxNQUFRLEdBQUosR0FBVSxHQUFKLE1BQUU7QUFBQSxJQUFJLElBQVksTUFBSixXQUFNO0FBQUEsTUFBQyxFQUFFLElBQUU7QUFBQSxNQUFFLEVBQUUsSUFBTztBQUFBLElBQUM7QUFBQSxJQUFDLElBQVksTUFBSixXQUFNO0FBQUEsTUFBQyxFQUFFLElBQUU7QUFBQSxNQUFFLEVBQUUsSUFBTztBQUFBLElBQUM7QUFBQSxJQUFDLElBQUcsTUFBSSxLQUFLLEdBQUU7QUFBQSxNQUFDLEtBQUssSUFBRTtBQUFBLE1BQUUsSUFBWSxNQUFKO0FBQUEsUUFBTSxHQUFFLFFBQVEsR0FBRTtBQUFBLFVBQUMsSUFBSTtBQUFBLFdBQVMsSUFBRSxFQUFFLE1BQVgsUUFBZSxFQUFFLEtBQUssQ0FBQztBQUFBLFNBQUU7QUFBQSxJQUFDO0FBQUEsRUFBQztBQUFBO0FBQUcsR0FBRSxVQUFVLFlBQVUsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRTtBQUFBLEVBQUssT0FBTyxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxJQUFNLEdBQUUsUUFBUSxHQUFFO0FBQUEsTUFBQyxPQUFPLEVBQUUsQ0FBQztBQUFBLEtBQUU7QUFBQSxLQUFHLEVBQUMsTUFBSyxNQUFLLENBQUM7QUFBQTtBQUFHLEdBQUUsVUFBVSxVQUFRLFFBQVEsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFLO0FBQUE7QUFBTyxHQUFFLFVBQVUsV0FBUyxRQUFRLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBSyxRQUFNO0FBQUE7QUFBSSxHQUFFLFVBQVUsU0FBTyxRQUFRLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBSztBQUFBO0FBQU8sR0FBRSxVQUFVLE9BQUssUUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUU7QUFBQSxFQUFLLE9BQU8sR0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLE9BQU8sRUFBRTtBQUFBLEdBQU07QUFBQTtBQUFHLE9BQU8sZUFBZSxHQUFFLFdBQVUsU0FBUSxFQUFDLEtBQUksUUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxJQUFJO0FBQUEsRUFBRSxJQUFZLE1BQUo7QUFBQSxJQUFNLEVBQUUsSUFBRSxLQUFLO0FBQUEsRUFBRSxPQUFPLEtBQUs7QUFBQSxHQUFHLEtBQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUcsTUFBSSxLQUFLLEdBQUU7QUFBQSxJQUFDLElBQUcsS0FBRTtBQUFBLE1BQUksTUFBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBQUEsS0FBRyxRQUFRLENBQUMsR0FBRTtBQUFBLE1BQUMsSUFBTyxPQUFKLEtBQVcsT0FBSjtBQUFBLFFBQU0sSUFBRyxFQUFFLE1BQUksSUFBRTtBQUFBLFVBQUMsRUFBRSxJQUFFO0FBQUEsVUFBRSxLQUFFLEVBQUMsR0FBRSxHQUFFLEdBQUUsRUFBRSxHQUFFLEdBQUUsRUFBRSxHQUFFLEdBQUUsR0FBQztBQUFBLFFBQUM7QUFBQTtBQUFBLE9BQUcsSUFBSTtBQUFBLElBQUUsS0FBSyxJQUFFO0FBQUEsSUFBRSxLQUFLO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJLElBQUc7QUFBQSxNQUFDLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLFFBQUUsRUFBRSxFQUFFLEVBQUU7QUFBQSxjQUFFO0FBQUEsTUFBUSxHQUFFO0FBQUE7QUFBQSxFQUFFO0FBQUEsRUFBRSxDQUFDO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLElBQUksR0FBRSxHQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLFNBQVEsSUFBRSxFQUFFLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLElBQUUsSUFBRyxFQUFFLEVBQUUsTUFBSSxFQUFFLEtBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFHLEVBQUUsRUFBRSxNQUFJLEVBQUU7QUFBQSxNQUFFLE9BQU07QUFBQSxFQUFHLE9BQU07QUFBQTtBQUFHLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLFNBQVEsSUFBRSxFQUFFLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRSxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRSxFQUFFO0FBQUEsSUFBRSxJQUFZLE1BQUo7QUFBQSxNQUFNLEVBQUUsSUFBRTtBQUFBLElBQUUsRUFBRSxFQUFFLElBQUU7QUFBQSxJQUFFLEVBQUUsSUFBRTtBQUFBLElBQUcsSUFBWSxFQUFFLE1BQU4sV0FBUTtBQUFBLE1BQUMsRUFBRSxJQUFFO0FBQUEsTUFBRTtBQUFBLElBQUs7QUFBQSxFQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRSxHQUFFLElBQU87QUFBQSxFQUFFLE9BQWUsTUFBSixXQUFNO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLElBQUUsSUFBUSxFQUFFLE1BQVAsSUFBUztBQUFBLE1BQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUFBLE1BQUUsSUFBWSxNQUFKO0FBQUEsUUFBTSxFQUFFLElBQUUsRUFBRTtBQUFBLE1BQUUsSUFBWSxFQUFFLE1BQU47QUFBQSxRQUFRLEVBQUUsRUFBRSxJQUFFO0FBQUEsSUFBQyxFQUFNO0FBQUEsVUFBRTtBQUFBLElBQUUsRUFBRSxFQUFFLElBQUUsRUFBRTtBQUFBLElBQUUsSUFBWSxFQUFFLE1BQU47QUFBQSxNQUFRLEVBQUUsSUFBTztBQUFBLElBQUUsSUFBRTtBQUFBLEVBQUM7QUFBQSxFQUFDLEVBQUUsSUFBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxHQUFFLEtBQUssTUFBVSxXQUFFLENBQUM7QUFBQSxFQUFFLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxJQUFPO0FBQUEsRUFBRSxLQUFLLElBQUUsS0FBRTtBQUFBLEVBQUUsS0FBSyxJQUFFO0FBQUE7QUFBRSxHQUFFLFlBQVUsSUFBSTtBQUFFLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsS0FBSyxLQUFHO0FBQUEsRUFBRyxJQUFHLElBQUUsS0FBSztBQUFBLElBQUUsT0FBTTtBQUFBLEVBQUcsS0FBUSxLQUFHLEtBQUssTUFBYjtBQUFBLElBQWdCLE9BQU07QUFBQSxFQUFHLEtBQUssS0FBRztBQUFBLEVBQUcsSUFBRyxLQUFLLE1BQUk7QUFBQSxJQUFFLE9BQU07QUFBQSxFQUFHLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxLQUFHO0FBQUEsRUFBRSxJQUFHLEtBQUssSUFBRSxLQUFHLENBQUMsR0FBRSxJQUFJLEdBQUU7QUFBQSxJQUFDLEtBQUssS0FBRztBQUFBLElBQUcsT0FBTTtBQUFBLEVBQUU7QUFBQSxFQUFDLElBQUksSUFBRTtBQUFBLEVBQUUsSUFBRztBQUFBLElBQUMsR0FBRSxJQUFJO0FBQUEsSUFBRSxLQUFFO0FBQUEsSUFBSyxJQUFJLElBQUUsS0FBSyxFQUFFO0FBQUEsSUFBRSxJQUFHLEtBQUcsS0FBSyxLQUFHLEtBQUssTUFBSSxLQUFPLEtBQUssTUFBVCxHQUFXO0FBQUEsTUFBQyxLQUFLLElBQUU7QUFBQSxNQUFFLEtBQUssS0FBRztBQUFBLE1BQUksS0FBSztBQUFBLElBQUc7QUFBQSxJQUFFLE9BQU0sR0FBRTtBQUFBLElBQUMsS0FBSyxJQUFFO0FBQUEsSUFBRSxLQUFLLEtBQUc7QUFBQSxJQUFHLEtBQUs7QUFBQTtBQUFBLEVBQUksS0FBRTtBQUFBLEVBQUUsR0FBRSxJQUFJO0FBQUEsRUFBRSxLQUFLLEtBQUc7QUFBQSxFQUFHLE9BQU07QUFBQTtBQUFJLEdBQUUsVUFBVSxJQUFFLFFBQVEsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFZLEtBQUssTUFBVCxXQUFXO0FBQUEsSUFBQyxLQUFLLEtBQUc7QUFBQSxJQUFHLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLE1BQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUFBLEVBQUM7QUFBQSxFQUFDLEdBQUUsVUFBVSxFQUFFLEtBQUssTUFBSyxDQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBWSxLQUFLLE1BQVQsV0FBVztBQUFBLElBQUMsR0FBRSxVQUFVLEVBQUUsS0FBSyxNQUFLLENBQUM7QUFBQSxJQUFFLElBQVksS0FBSyxNQUFULFdBQVc7QUFBQSxNQUFDLEtBQUssS0FBRztBQUFBLE1BQUksU0FBUSxJQUFFLEtBQUssRUFBVyxNQUFKLFdBQU0sSUFBRSxFQUFFO0FBQUEsUUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQUEsSUFBQztBQUFBLEVBQUM7QUFBQTtBQUFHLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsSUFBRyxFQUFFLElBQUUsS0FBSyxJQUFHO0FBQUEsSUFBQyxLQUFLLEtBQUc7QUFBQSxJQUFFLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLE1B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QUUsS0FBTztBQUFBLElBQUUsRUFBRTtBQUFBLEVBQUM7QUFBQSxFQUFDLEtBQUUsS0FBRyxFQUFFLEVBQUU7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxNQUFLLEtBQUUsRUFBRSxNQUFLLElBQUUsVUFBVSxFQUFDO0FBQUEsRUFBRSxFQUFFLE9BQUs7QUFBQSxFQUFjLEVBQUUsUUFBTTtBQUFBLEVBQUUsSUFBSSxJQUFFLEdBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsR0FBRSxLQUFFLEVBQUU7QUFBQSxJQUFJLE9BQU0sS0FBRSxHQUFFO0FBQUEsTUFBRyxJQUFHLEdBQUUsS0FBSTtBQUFBLFFBQUMsR0FBRSxJQUFJLFFBQU07QUFBQSxRQUFFO0FBQUEsTUFBSztBQUFBLElBQUMsSUFBSSxJQUFFLEdBQUUsUUFBUSxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsRUFBRSxNQUFNO0FBQUEsTUFBTSxPQUFXLE1BQUosSUFBTSxJQUFPLE1BQUwsT0FBTyxLQUFHLEtBQUc7QUFBQSxLQUFHLEdBQUUsSUFBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLE1BQUMsT0FBTSxDQUFDLE1BQU0sUUFBUSxFQUFFLEtBQUssS0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLO0FBQUEsS0FBRSxHQUFFLElBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxNQUFDLEtBQUssSUFBRTtBQUFBLE1BQUUsSUFBRyxFQUFFLE9BQU07QUFBQSxRQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsUUFBTSxJQUFHLEVBQUUsT0FBSyxFQUFFLElBQUksT0FBUyxFQUFFLElBQUksSUFBSSxhQUFkO0FBQUEsVUFBdUIsRUFBRSxJQUFJLElBQUksT0FBSztBQUFBLE1BQUM7QUFBQSxLQUFFLEdBQUUsSUFBRSxFQUFFLEtBQUs7QUFBQSxJQUFFLEVBQUUsS0FBSyxJQUFFLFFBQVEsR0FBRTtBQUFBLE1BQUMsRUFBRTtBQUFBLE1BQUUsRUFBRSxLQUFLLElBQUk7QUFBQTtBQUFBLElBQUcsT0FBTSxD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LE1BQUssRUFBRSxNQUFJLEVBQUUsT0FBSyxFQUFFLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsT0FBTyxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsR0FBRSxHQUFFLEVBQUUsT0FBSyxFQUFFLElBQUksUUFBTSxNQUFJLEVBQUUsT0FBSyxFQUFFLFlBQVksRUFBRSxHQUFHLEdBQUUsRUFBRSxJQUFJLE1BQUksTUFBRyxFQUFFLElBQUksTUFBSSxLQUFJO0FBQUE7QUFBRSxTQUFTLEVBQUMsR0FBRTtBQUFBLEVBQUMsS0FBSyxNQUFJLEdBQUUsS0FBSyxJQUFFLE1BQUssS0FBSyxNQUFJO0FBQUE7QUFBSyxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRSxNQUFJLEVBQUUsR0FBRztBQUFBLEVBQUksT0FBTyxLQUFHLEVBQUUsT0FBSyxFQUFFLElBQUksQ0FBQztBQUFBO0FBQW1OLFNBQVMsRUFBQyxHQUFFO0FBQUEsRUFBQyxLQUFLLElBQUUsTUFBSyxLQUFLLElBQUU7QUFBQTtBQUFLLEVBQUUsVUFBUSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxFQUFJLE1BQUksRUFBRSxNQUFJLE9BQUksS0FBRyxFQUFFLE9BQUssRUFBRSxJQUFJLEdBQUUsS0FBRyxLQUFHLEVBQUUsUUFBTSxFQUFFLE9BQUssT0FBTSxNQUFHLEdBQUUsQ0FBQztBQUFBLElBQUksR0FBRSxZQUFVLElBQUksR0FBRyxNQUFJLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFLEtBQUksSUFBRTtBQUFBLEVBQVcsRUFBRSxLQUFSLFNBQVksRUFBRSxJQUFFLENBQUMsSUFBRyxFQUFFLEVBQUUsS0FBSyxDQUFDO0FBQUEsRUFBRSxJQUFJLElBQUUsR0FBRSxFQUFFLEdBQUcsR0FBRSxJQUFFLE9BQUcsSUFBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLEtBQUcsRUFBRSxRQUFNLElBQUUsTUFBRyxFQUFFLE1BQUksTUFBSyxJQUFFLEVBQUUsQ0FBQyxJQUFFLEVBQUU7QUFBQTtBQUFBLEVBQUksRUFBRSxNQUFJO0FBQUEsRUFBRSxJQUFJLEtBQUUsRUFBRTtBQUFBLEVBQUksRUFBRSxNQUFJO0FBQUEsRUFBSyxJQUFJLElBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxJQUFHLENBQUMsRUFBRSxFQUFFLEtBQUk7QUFBQSxNQUFDLElBQUcsRUFBRSxNQUFNLEtBQUk7QUFBQSxRQUFDLElBQUksSUFBRSxFQUFFLE1BQU07QUFBQSxRQUFJLEVBQUUsSUFBSSxJQUFJLEtBQUcsR0FBRSxHQUFFLEVBQUUsSUFBSSxLQUFJLEVBQUUsSUFBSSxHQUFHO0FBQUEsTUFBQztBQUFBLE1BQUMsSUFBSTtBQUFBLE1BQUUsS0FBSSxFQUFFLFNBQVMsRUFBQyxLQUFJLEVBQUUsTUFBSSxLQUFJLENBQUMsRUFBRSxJQUFFLEVBQUUsRUFBRSxJQUFJO0FBQUEsUUFBRyxFQUFFLE1BQUksSUFBRSxFQUFFLFlBQVk7QUFBQSxJQUFDO0FBQUE7QUFBQSxFQUFHLEVBQUUsU0FBTyxLQUFHLEVBQUUsT0FBSyxFQUFFLFNBQVMsRUFBQyxLQUFJLEVBQUUsTUFBSSxFQUFFLElBQUksSUFBSSxHQUFFLENBQUMsR0FBRSxFQUFFLEtBQUssR0FBRSxDQUFDO0FBQUEsR0FBRyxHQUFFLFVBQVUsdUJBQXFCLFFBQVEsR0FBRTtBQUFBLEVBQUMsS0FBSyxJQUFFLENBQUM7QUFBQSxHQUFHLEdBQUUsVUFBVSxTQUFPLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUcsS0FBSyxLQUFJO0FBQUEsSUFBQyxJQUFHLEtBQUssSUFBSSxLQUFJO0FBQUEsTUFBQyxJQUFJLElBQUUsU0FBUyxjQUFjLEtBQUssR0FBRSxJQUFFLEtBQUssSUFBSSxJQUFJLEdBQUc7QUFBQSxNQUFJLEtBQUssSUFBSSxJQUFJLEtBQUcsR0FBRSxLQUFLLEtBQUksR0FBRSxFQUFFLE1BQUksRUFBRSxHQUFHO0FBQUEsSUFBQztBQUFBLElBQUMsS0FBSyxNQUFJO0FBQUEsRUFBSTtBQUFBLEVBQUMsSUFBSSxJQUFFLEVBQUUsT0FBSyxFQUFFLEdBQUUsTUFBSyxFQUFFLFFBQVE7QUFBQSxFQUFFLE9BQU8sTUFBSSxFQUFFLE9BQUssTUFBSyxDQUFDLEVBQUUsR0FBRSxNQUFLLEVBQUUsTUFBSSxPQUFLLEVBQUUsUUFBUSxHQUFFLENBQUM7QUFBQTtBQUFHLElBQUksS0FBRSxRQUFRLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUcsRUFBRSxFQUFFLE9BQUssRUFBRSxNQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRSxFQUFFLE1BQU0sZ0JBQW9CLEVBQUUsTUFBTSxZQUFZLE9BQTFCLE9BQThCLENBQUMsRUFBRSxFQUFFO0FBQUEsSUFBTSxLQUFJLElBQUUsRUFBRSxFQUFFLEtBQUc7QUFBQSxNQUFDLE1BQUssRUFBRSxTQUFPO0FBQUEsUUFBRyxFQUFFLElBQUksRUFBRTtBQUFBLE1BQUUsSUFBRyxFQUFFLEtBQUcsRUFBRTtBQUFBLFFBQUc7QUFBQSxNQUFNLEVBQUUsSUFBRSxJQUFFLEVBQUU7QUFBQSxJQUFFO0FBQUE7QUFBRyxTQUFTLENBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUssa0JBQWdCLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTyxFQUFFO0FBQUEsS0FBUyxFQUFFO0FBQUE7QUFBUyxTQUFTLENBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsTUFBSyxJQUFFLEVBQUU7QUFBQSxFQUFFLElBQUcsRUFBRSx1QkFBcUIsUUFBUSxHQUFFO0FBQUEsSUFBQyxFQUFFLE1BQUssRUFBRSxDQUFDLEdBQUUsRUFBRSxJQUFFLE1BQUssRUFBRSxJQUFFO0FBQUEsS0FBTSxFQUFFLEtBQUcsRUFBRSxNQUFJLEtBQUcsRUFBRSxxQkFBcUIsR0FBRSxDQUFDLEVBQUUsR0FBRTtBQUFBLElBQUMsU0FBUSxJQUFFLEVBQUUsSUFBVyxNQUFQLFFBQVUsQ0FBQyxFQUFFLE9BQVksRUFBRSxPQUFUO0FBQUEsTUFBYSxJQUFFLEVBQUU7QUFBQSxJQUFHLEVBQUUsSUFBRSxHQUFFLEVBQUUsSUFBRSxFQUFDLFVBQVMsR0FBRSxZQUFXLEdBQUUsWUFBVyxDQUFDLEdBQUUsS0FBSSxFQUFDLEtBQUksRUFBRSxJQUFHLEdBQUUsVUFBUyxRQUFRLEdBQUU7QUFBQSxNQUFDLE9BQU07QUFBQSxPQUFJLGNBQWEsRUFBRSxjQUFhLGNBQWEsUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLE1BQUMsS0FBSyxXQUFXLEtBQUssQ0FBQyxHQUFFLEVBQUUsRUFBRSxhQUFhLEdBQUUsQ0FBQztBQUFBLE9BQUcsYUFBWSxRQUFRLENBQUMsR0FBRTtBQUFBLE1BQUMsS0FBSyxXQUFXLE9BQU8sS0FBSyxXQUFXLFFBQVEsQ0FBQyxNQUFJLEdBQUUsQ0FBQyxHQUFFLEVBQUUsRUFBRSxZQUFZLENBQUM7QUFBQSxNQUFFO0FBQUEsRUFBQztBQUFBLEVBQUMsRUFBRSxFQUFFLEdBQUUsRUFBQyxTQUFRLEVBQUUsUUFBTyxHQUFFLEVBQUUsR0FBRyxHQUFFLEVBQUUsQ0FBQztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRSxHQUFFLEVBQUMsS0FBSSxHQUFFLEdBQUUsRUFBQyxDQUFDO0FBQUEsRUFBRSxPQUFPLEVBQUUsZ0JBQWMsR0FBRTtBQUFBO0FBQUEsQ0FBRyxHQUFFLFlBQVUsSUFBSSxHQUFHLE1BQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxNQUFLLElBQUUsR0FBRSxFQUFFLEdBQUcsR0FBRSxJQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7QUFBQSxFQUFFLE9BQU8sRUFBRSxNQUFLLFFBQVEsQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsUUFBUSxHQUFFO0FBQUEsTUFBQyxFQUFFLE1BQU0sZUFBYSxFQUFFLEtBQUssQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsS0FBRyxFQUFFO0FBQUE7QUFBQSxJQUFHLElBQUUsRUFBRSxDQUFDLElBQUUsRUFBRTtBQUFBO0FBQUEs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QUksQ0FBQyxzQkFDWCxHQUFDLFFBQUQ7QUFBQSxrQkFFRSxNQUFLO0FBQUEsa0JBQ0wsTUFBTSxNQUFNLFFBQVEsWUFBWTtBQUFBLGtCQUNoQyxlQUFZO0FBQUEsa0JBQ1oscUJBQW1CO0FBQUEsa0JBQ25CLE9BQU8sV0FBVyxDQUFDO0FBQUEsbUJBTGQsR0FEUCxzQkFPQSxDQUNEO0FBQUE7QUFBQSxlQWJILGdDQWNFO0FBQUEsYUFmSixpQ0FnQkU7QUFBQSwwQkFFRixHQVlFLE9BWkY7QUFBQSxZQUFLLGNBQVc7QUFBQSxZQUFoQiwwQkFDRSxHQVVFLFNBVkY7QUFBQSxjQUFTLEtBQUk7QUFBQSxjQUFiLFVBQ0csaUJBQWlCLElBQUksQ0FBQyw0QkFDckIsR0FBQyxRQUFEO0FBQUEsZ0JBRUUsTUFBSztBQUFBLGdCQUNMLE1BQUs7QUFBQSxnQkFDTCxNQUFNLElBQUksUUFBUTtBQUFBLGdCQUNsQixPQUFPLFFBQVE7QUFBQSxpQkFKVixRQUFRLElBRGYsc0JBTUEsQ0FDRDtBQUFBLGVBVEgsaUNBVUU7QUFBQSxhQVhKLGlDQVlFO0FBQUEsMEJBRUYsR0FJRSxRQUpGO0FBQUEsWUFBUSxLQUFJO0FBQUEsWUFBWixVQUNHLGlCQUFpQixJQUFJLENBQUMsNEJBQ3JCLEdBQUMsU0FBRDtBQUFBLGNBQTBCO0FBQUEsZUFBWixRQUFRLElBQXRCLHNCQUE0QyxDQUM3QztBQUFBLGFBSEgsaUNBSUU7QUFBQTtBQUFBLFNBOUNKLGdDQStDRTtBQUFBLHNCQUdGLEdBQUMsYUFBRCxxQ0FBYTtBQUFBLHNCQUNiLEdBQUMsTUFBTSxVQUFQLHFDQUFnQjtBQUFBLHNCQUNoQixHQUFDLGNBQWMsTUFBZixxQ0FBb0I7QUFBQTtBQUFBLEtBMUR0QixnQ0EyREU7QUFBQTs7O0FDdkdOLElBQU0sU0FBd0IsQ0FBQztBQUMvQixZQUFZLFdBQVcsTUFBTSxNQUFNO0FBRW5DLHVCQUF1QixPQUFPLGFBQWE7QUFBQSxFQUN6QyxNQUFNLFVBQVUsZ0JBQWdCLFNBQVM7QUFBQSxFQUN6QyxJQUFJLFNBQVM7QUFBQSxJQUNYLE1BQU0sUUFBUTtBQUFBLE1BQ1o7QUFBQSxNQUNBLE9BQU8sU0FBUztBQUFBLE1BQ2hCLFNBQVMsU0FBUztBQUFBLE1BQ2xCLE1BQU0sU0FBUztBQUFBLElBQ2pCLENBQUM7QUFBQSxFQUNIO0FBQUEsQ0FDRDtBQUVELElBQU0sT0FBTyxTQUFTLGVBQWUsS0FBSyxLQUFLLFNBQVM7QUFDeEQsa0JBQU8sR0FBQyxZQUFELHFDQUFZLEdBQUksSUFBSTsiLAogICJkZWJ1Z0lkIjogIjdDRkNBRTQ4Mzk2OTMxMUI2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|