@adstore/templates 1.0.0 → 2.0.4

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.
Files changed (54) hide show
  1. package/CHANGELOG.md +52 -2
  2. package/dist/style.css +1651 -0
  3. package/dist/templates.es.js +2826 -0
  4. package/dist/templates.umd.js +2829 -0
  5. package/package.json +11 -24
  6. package/dist/adstore/apps/templates/src/cacheDriver.d.ts +0 -7
  7. package/dist/adstore/apps/templates/src/constants/animations.d.ts +0 -5
  8. package/dist/adstore/apps/templates/src/constants/breakpoints.d.ts +0 -6
  9. package/dist/adstore/apps/templates/src/plugins/classNamesPlugin.d.ts +0 -22
  10. package/dist/adstore/apps/templates/src/plugins/giftOpenPlugin.d.ts +0 -10
  11. package/dist/adstore/apps/templates/src/plugins/googleFontsPlugin.d.ts +0 -3
  12. package/dist/adstore/apps/templates/src/plugins/highlightPlugin.d.ts +0 -11
  13. package/dist/adstore/apps/templates/src/plugins/index.d.ts +0 -12
  14. package/dist/adstore/apps/templates/src/plugins/injectNodePlugin.d.ts +0 -23
  15. package/dist/adstore/apps/templates/src/plugins/legalInfoPlugin.d.ts +0 -17
  16. package/dist/adstore/apps/templates/src/plugins/patchStylesPlugin.d.ts +0 -12
  17. package/dist/adstore/apps/templates/src/plugins/statePlugin.d.ts +0 -9
  18. package/dist/adstore/apps/templates/src/promos/BonusCard/index.d.ts +0 -2
  19. package/dist/adstore/apps/templates/src/promos/BonusCard/script.d.ts +0 -3
  20. package/dist/adstore/apps/templates/src/promos/ComplexGift/chunks/cardChunk/index.d.ts +0 -4
  21. package/dist/adstore/apps/templates/src/promos/ComplexGift/chunks/cardChunk/script.d.ts +0 -3
  22. package/dist/adstore/apps/templates/src/promos/ComplexGift/index.d.ts +0 -6
  23. package/dist/adstore/apps/templates/src/promos/ComplexGift/script.d.ts +0 -9
  24. package/dist/adstore/apps/templates/src/promos/ComplexPopup/chunks/popupCardChunk/index.d.ts +0 -4
  25. package/dist/adstore/apps/templates/src/promos/ComplexPopup/chunks/popupCardChunk/script.d.ts +0 -3
  26. package/dist/adstore/apps/templates/src/promos/ComplexPopup/index.d.ts +0 -6
  27. package/dist/adstore/apps/templates/src/promos/ComplexPopup/script.d.ts +0 -2
  28. package/dist/adstore/apps/templates/src/promos/ExpressPopup/chunks/matchChunk/index.d.ts +0 -4
  29. package/dist/adstore/apps/templates/src/promos/ExpressPopup/index.d.ts +0 -6
  30. package/dist/adstore/apps/templates/src/promos/ExpressPopup/script.d.ts +0 -3
  31. package/dist/adstore/apps/templates/src/promos/SimplePopup/chunks/textChunk/index.d.ts +0 -3
  32. package/dist/adstore/apps/templates/src/promos/SimplePopup/index.d.ts +0 -6
  33. package/dist/adstore/apps/templates/src/promos/SimplePopup/script.d.ts +0 -3
  34. package/dist/adstore/apps/templates/src/promos/WideCard/chunks/matchesOneTwoSlideChunk/index.d.ts +0 -3
  35. package/dist/adstore/apps/templates/src/promos/WideCard/chunks/matchesOneTwoSlideChunk/script.d.ts +0 -3
  36. package/dist/adstore/apps/templates/src/promos/WideCard/chunks/matchesSlideChunk/index.d.ts +0 -3
  37. package/dist/adstore/apps/templates/src/promos/WideCard/chunks/matchesSlideChunk/script.d.ts +0 -3
  38. package/dist/adstore/apps/templates/src/promos/WideCard/chunks/textSlideChunk/index.d.ts +0 -3
  39. package/dist/adstore/apps/templates/src/promos/WideCard/chunks/textSlideChunk/script.d.ts +0 -3
  40. package/dist/adstore/apps/templates/src/promos/WideCard/index.d.ts +0 -8
  41. package/dist/adstore/apps/templates/src/promos/WideCard/script.d.ts +0 -3
  42. package/dist/adstore/apps/templates/src/promos/index.d.ts +0 -7
  43. package/dist/adstore/apps/templates/src/renderDriver.d.ts +0 -48
  44. package/dist/adstore/apps/templates/src/utils/htmlToElement.d.ts +0 -1
  45. package/dist/adstore/apps/templates/src/utils/injectLink.d.ts +0 -6
  46. package/dist/adstore/apps/templates/src/utils/injectStyle.d.ts +0 -1
  47. package/dist/adstore/apps/templates/src/utils/injectStyleRules.d.ts +0 -2
  48. package/dist/adstore/apps/templates/src/utils/isRenderDriver.d.ts +0 -2
  49. package/dist/adstore/apps/templates/src/utils/isTemplate.d.ts +0 -1
  50. package/dist/adstore/apps/templates/src/utils/switchTextAlignToFlex.d.ts +0 -1
  51. package/dist/adstore/apps/templates/src/utils/toggleClassName.d.ts +0 -1
  52. package/dist/my-lib.d.ts +0 -1
  53. package/dist/my-lib.es.js +0 -2463
  54. package/dist/my-lib.umd.js +0 -247
@@ -0,0 +1,2826 @@
1
+ import { options, Component, createElement, Fragment, toChildArray, createContext, render as render$1 } from "preact";
2
+ var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
3
+ var classnamesExports = {};
4
+ var classnames = {
5
+ get exports() {
6
+ return classnamesExports;
7
+ },
8
+ set exports(v2) {
9
+ classnamesExports = v2;
10
+ }
11
+ };
12
+ /*!
13
+ Copyright (c) 2018 Jed Watson.
14
+ Licensed under the MIT License (MIT), see
15
+ http://jedwatson.github.io/classnames
16
+ */
17
+ (function(module) {
18
+ (function() {
19
+ var hasOwn = {}.hasOwnProperty;
20
+ function classNames2() {
21
+ var classes = [];
22
+ for (var i2 = 0; i2 < arguments.length; i2++) {
23
+ var arg = arguments[i2];
24
+ if (!arg)
25
+ continue;
26
+ var argType = typeof arg;
27
+ if (argType === "string" || argType === "number") {
28
+ classes.push(arg);
29
+ } else if (Array.isArray(arg)) {
30
+ if (arg.length) {
31
+ var inner2 = classNames2.apply(null, arg);
32
+ if (inner2) {
33
+ classes.push(inner2);
34
+ }
35
+ }
36
+ } else if (argType === "object") {
37
+ if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) {
38
+ classes.push(arg.toString());
39
+ continue;
40
+ }
41
+ for (var key in arg) {
42
+ if (hasOwn.call(arg, key) && arg[key]) {
43
+ classes.push(key);
44
+ }
45
+ }
46
+ }
47
+ }
48
+ return classes.join(" ");
49
+ }
50
+ if (module.exports) {
51
+ classNames2.default = classNames2;
52
+ module.exports = classNames2;
53
+ } else {
54
+ window.classNames = classNames2;
55
+ }
56
+ })();
57
+ })(classnames);
58
+ const classNames = classnamesExports;
59
+ var t, r, u, i, o$1 = 0, f = [], c = [], e = options.__b, a = options.__r, v = options.diffed, l = options.__c, m = options.unmount;
60
+ function d(t2, u2) {
61
+ options.__h && options.__h(r, t2, o$1 || u2), o$1 = 0;
62
+ var i2 = r.__H || (r.__H = { __: [], __h: [] });
63
+ return t2 >= i2.__.length && i2.__.push({ __V: c }), i2.__[t2];
64
+ }
65
+ function h(n) {
66
+ return o$1 = 1, s(B$1, n);
67
+ }
68
+ function s(n, u2, i2) {
69
+ var o2 = d(t++, 2);
70
+ if (o2.t = n, !o2.__c && (o2.__ = [i2 ? i2(u2) : B$1(void 0, u2), function(n2) {
71
+ var t2 = o2.__N ? o2.__N[0] : o2.__[0], r2 = o2.t(t2, n2);
72
+ t2 !== r2 && (o2.__N = [r2, o2.__[1]], o2.__c.setState({}));
73
+ }], o2.__c = r, !r.u)) {
74
+ var f2 = function(n2, t2, r2) {
75
+ if (!o2.__c.__H)
76
+ return true;
77
+ var u3 = o2.__c.__H.__.filter(function(n3) {
78
+ return n3.__c;
79
+ });
80
+ if (u3.every(function(n3) {
81
+ return !n3.__N;
82
+ }))
83
+ return !c2 || c2.call(this, n2, t2, r2);
84
+ var i3 = false;
85
+ return u3.forEach(function(n3) {
86
+ if (n3.__N) {
87
+ var t3 = n3.__[0];
88
+ n3.__ = n3.__N, n3.__N = void 0, t3 !== n3.__[0] && (i3 = true);
89
+ }
90
+ }), !(!i3 && o2.__c.props === n2) && (!c2 || c2.call(this, n2, t2, r2));
91
+ };
92
+ r.u = true;
93
+ var c2 = r.shouldComponentUpdate, e2 = r.componentWillUpdate;
94
+ r.componentWillUpdate = function(n2, t2, r2) {
95
+ if (this.__e) {
96
+ var u3 = c2;
97
+ c2 = void 0, f2(n2, t2, r2), c2 = u3;
98
+ }
99
+ e2 && e2.call(this, n2, t2, r2);
100
+ }, r.shouldComponentUpdate = f2;
101
+ }
102
+ return o2.__N || o2.__;
103
+ }
104
+ function p(u2, i2) {
105
+ var o2 = d(t++, 3);
106
+ !options.__s && z(o2.__H, i2) && (o2.__ = u2, o2.i = i2, r.__H.__h.push(o2));
107
+ }
108
+ function y(u2, i2) {
109
+ var o2 = d(t++, 4);
110
+ !options.__s && z(o2.__H, i2) && (o2.__ = u2, o2.i = i2, r.__h.push(o2));
111
+ }
112
+ function _$1(n) {
113
+ return o$1 = 5, F$1(function() {
114
+ return { current: n };
115
+ }, []);
116
+ }
117
+ function F$1(n, r2) {
118
+ var u2 = d(t++, 7);
119
+ return z(u2.__H, r2) ? (u2.__V = n(), u2.i = r2, u2.__h = n, u2.__V) : u2.__;
120
+ }
121
+ function q$1(n) {
122
+ var u2 = r.context[n.__c], i2 = d(t++, 9);
123
+ return i2.c = n, u2 ? (null == i2.__ && (i2.__ = true, u2.sub(r)), u2.props.value) : n.__;
124
+ }
125
+ function b() {
126
+ for (var t2; t2 = f.shift(); )
127
+ if (t2.__P && t2.__H)
128
+ try {
129
+ t2.__H.__h.forEach(k), t2.__H.__h.forEach(w$1), t2.__H.__h = [];
130
+ } catch (r2) {
131
+ t2.__H.__h = [], options.__e(r2, t2.__v);
132
+ }
133
+ }
134
+ options.__b = function(n) {
135
+ r = null, e && e(n);
136
+ }, options.__r = function(n) {
137
+ a && a(n), t = 0;
138
+ var i2 = (r = n.__c).__H;
139
+ i2 && (u === r ? (i2.__h = [], r.__h = [], i2.__.forEach(function(n2) {
140
+ n2.__N && (n2.__ = n2.__N), n2.__V = c, n2.__N = n2.i = void 0;
141
+ })) : (i2.__h.forEach(k), i2.__h.forEach(w$1), i2.__h = [])), u = r;
142
+ }, options.diffed = function(t2) {
143
+ v && v(t2);
144
+ var o2 = t2.__c;
145
+ o2 && o2.__H && (o2.__H.__h.length && (1 !== f.push(o2) && i === options.requestAnimationFrame || ((i = options.requestAnimationFrame) || j)(b)), o2.__H.__.forEach(function(n) {
146
+ n.i && (n.__H = n.i), n.__V !== c && (n.__ = n.__V), n.i = void 0, n.__V = c;
147
+ })), u = r = null;
148
+ }, options.__c = function(t2, r2) {
149
+ r2.some(function(t3) {
150
+ try {
151
+ t3.__h.forEach(k), t3.__h = t3.__h.filter(function(n) {
152
+ return !n.__ || w$1(n);
153
+ });
154
+ } catch (u2) {
155
+ r2.some(function(n) {
156
+ n.__h && (n.__h = []);
157
+ }), r2 = [], options.__e(u2, t3.__v);
158
+ }
159
+ }), l && l(t2, r2);
160
+ }, options.unmount = function(t2) {
161
+ m && m(t2);
162
+ var r2, u2 = t2.__c;
163
+ u2 && u2.__H && (u2.__H.__.forEach(function(n) {
164
+ try {
165
+ k(n);
166
+ } catch (n2) {
167
+ r2 = n2;
168
+ }
169
+ }), u2.__H = void 0, r2 && options.__e(r2, u2.__v));
170
+ };
171
+ var g$1 = "function" == typeof requestAnimationFrame;
172
+ function j(n) {
173
+ var t2, r2 = function() {
174
+ clearTimeout(u2), g$1 && cancelAnimationFrame(t2), setTimeout(n);
175
+ }, u2 = setTimeout(r2, 100);
176
+ g$1 && (t2 = requestAnimationFrame(r2));
177
+ }
178
+ function k(n) {
179
+ var t2 = r, u2 = n.__c;
180
+ "function" == typeof u2 && (n.__c = void 0, u2()), r = t2;
181
+ }
182
+ function w$1(n) {
183
+ var t2 = r;
184
+ n.__c = n.__(), r = t2;
185
+ }
186
+ function z(n, t2) {
187
+ return !n || n.length !== t2.length || t2.some(function(t3, r2) {
188
+ return t3 !== n[r2];
189
+ });
190
+ }
191
+ function B$1(n, t2) {
192
+ return "function" == typeof t2 ? t2(n) : t2;
193
+ }
194
+ function g(n, t2) {
195
+ for (var e2 in t2)
196
+ n[e2] = t2[e2];
197
+ return n;
198
+ }
199
+ function C(n, t2) {
200
+ for (var e2 in n)
201
+ if ("__source" !== e2 && !(e2 in t2))
202
+ return true;
203
+ for (var r2 in t2)
204
+ if ("__source" !== r2 && n[r2] !== t2[r2])
205
+ return true;
206
+ return false;
207
+ }
208
+ function w(n) {
209
+ this.props = n;
210
+ }
211
+ (w.prototype = new Component()).isPureReactComponent = true, w.prototype.shouldComponentUpdate = function(n, t2) {
212
+ return C(this.props, n) || C(this.state, t2);
213
+ };
214
+ var R = options.__b;
215
+ options.__b = function(n) {
216
+ n.type && n.type.__f && n.ref && (n.props.ref = n.ref, n.ref = null), R && R(n);
217
+ };
218
+ var T = options.__e;
219
+ options.__e = function(n, t2, e2, r2) {
220
+ if (n.then) {
221
+ for (var u2, o2 = t2; o2 = o2.__; )
222
+ if ((u2 = o2.__c) && u2.__c)
223
+ return null == t2.__e && (t2.__e = e2.__e, t2.__k = e2.__k), u2.__c(n, t2);
224
+ }
225
+ T(n, t2, e2, r2);
226
+ };
227
+ var I = options.unmount;
228
+ function L(n, t2, e2) {
229
+ return n && (n.__c && n.__c.__H && (n.__c.__H.__.forEach(function(n2) {
230
+ "function" == typeof n2.__c && n2.__c();
231
+ }), n.__c.__H = null), null != (n = g({}, n)).__c && (n.__c.__P === e2 && (n.__c.__P = t2), n.__c = null), n.__k = n.__k && n.__k.map(function(n2) {
232
+ return L(n2, t2, e2);
233
+ })), n;
234
+ }
235
+ function U(n, t2, e2) {
236
+ return n && (n.__v = null, n.__k = n.__k && n.__k.map(function(n2) {
237
+ return U(n2, t2, e2);
238
+ }), n.__c && n.__c.__P === t2 && (n.__e && e2.insertBefore(n.__e, n.__d), n.__c.__e = true, n.__c.__P = e2)), n;
239
+ }
240
+ function D() {
241
+ this.__u = 0, this.t = null, this.__b = null;
242
+ }
243
+ function F(n) {
244
+ var t2 = n.__.__c;
245
+ return t2 && t2.__a && t2.__a(n);
246
+ }
247
+ function V() {
248
+ this.u = null, this.o = null;
249
+ }
250
+ options.unmount = function(n) {
251
+ var t2 = n.__c;
252
+ t2 && t2.__R && t2.__R(), t2 && true === n.__h && (n.type = null), I && I(n);
253
+ }, (D.prototype = new Component()).__c = function(n, t2) {
254
+ var e2 = t2.__c, r2 = this;
255
+ null == r2.t && (r2.t = []), r2.t.push(e2);
256
+ var u2 = F(r2.__v), o2 = false, i2 = function() {
257
+ o2 || (o2 = true, e2.__R = null, u2 ? u2(l2) : l2());
258
+ };
259
+ e2.__R = i2;
260
+ var l2 = function() {
261
+ if (!--r2.__u) {
262
+ if (r2.state.__a) {
263
+ var n2 = r2.state.__a;
264
+ r2.__v.__k[0] = U(n2, n2.__c.__P, n2.__c.__O);
265
+ }
266
+ var t3;
267
+ for (r2.setState({ __a: r2.__b = null }); t3 = r2.t.pop(); )
268
+ t3.forceUpdate();
269
+ }
270
+ }, c2 = true === t2.__h;
271
+ r2.__u++ || c2 || r2.setState({ __a: r2.__b = r2.__v.__k[0] }), n.then(i2, i2);
272
+ }, D.prototype.componentWillUnmount = function() {
273
+ this.t = [];
274
+ }, D.prototype.render = function(n, e2) {
275
+ if (this.__b) {
276
+ if (this.__v.__k) {
277
+ var r2 = document.createElement("div"), o2 = this.__v.__k[0].__c;
278
+ this.__v.__k[0] = L(this.__b, r2, o2.__O = o2.__P);
279
+ }
280
+ this.__b = null;
281
+ }
282
+ var i2 = e2.__a && createElement(Fragment, null, n.fallback);
283
+ return i2 && (i2.__h = null), [createElement(Fragment, null, e2.__a ? null : n.children), i2];
284
+ };
285
+ var W = function(n, t2, e2) {
286
+ if (++e2[1] === e2[0] && n.o.delete(t2), n.props.revealOrder && ("t" !== n.props.revealOrder[0] || !n.o.size))
287
+ for (e2 = n.u; e2; ) {
288
+ for (; e2.length > 3; )
289
+ e2.pop()();
290
+ if (e2[1] < e2[0])
291
+ break;
292
+ n.u = e2 = e2[2];
293
+ }
294
+ };
295
+ (V.prototype = new Component()).__a = function(n) {
296
+ var t2 = this, e2 = F(t2.__v), r2 = t2.o.get(n);
297
+ return r2[0]++, function(u2) {
298
+ var o2 = function() {
299
+ t2.props.revealOrder ? (r2.push(u2), W(t2, n, r2)) : u2();
300
+ };
301
+ e2 ? e2(o2) : o2();
302
+ };
303
+ }, V.prototype.render = function(n) {
304
+ this.u = null, this.o = /* @__PURE__ */ new Map();
305
+ var t2 = toChildArray(n.children);
306
+ n.revealOrder && "b" === n.revealOrder[0] && t2.reverse();
307
+ for (var e2 = t2.length; e2--; )
308
+ this.o.set(t2[e2], this.u = [1, 0, this.u]);
309
+ return n.children;
310
+ }, V.prototype.componentDidUpdate = V.prototype.componentDidMount = function() {
311
+ var n = this;
312
+ this.o.forEach(function(t2, e2) {
313
+ W(n, e2, t2);
314
+ });
315
+ };
316
+ var B = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103, H = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/, Z = /^on(Ani|Tra|Tou|BeforeInp|Compo)/, Y = /[A-Z0-9]/g, $ = "undefined" != typeof document, q = function(n) {
317
+ return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/ : /fil|che|ra/).test(n);
318
+ };
319
+ Component.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t2) {
320
+ Object.defineProperty(Component.prototype, t2, { configurable: true, get: function() {
321
+ return this["UNSAFE_" + t2];
322
+ }, set: function(n) {
323
+ Object.defineProperty(this, t2, { configurable: true, writable: true, value: n });
324
+ } });
325
+ });
326
+ var K = options.event;
327
+ function Q() {
328
+ }
329
+ function X() {
330
+ return this.cancelBubble;
331
+ }
332
+ function nn() {
333
+ return this.defaultPrevented;
334
+ }
335
+ options.event = function(n) {
336
+ return K && (n = K(n)), n.persist = Q, n.isPropagationStopped = X, n.isDefaultPrevented = nn, n.nativeEvent = n;
337
+ };
338
+ var en = { enumerable: false, configurable: true, get: function() {
339
+ return this.class;
340
+ } }, rn = options.vnode;
341
+ options.vnode = function(n) {
342
+ "string" == typeof n.type && function(n2) {
343
+ var t2 = n2.props, e2 = n2.type, u2 = {};
344
+ for (var o2 in t2) {
345
+ var i2 = t2[o2];
346
+ if (!("value" === o2 && "defaultValue" in t2 && null == i2 || $ && "children" === o2 && "noscript" === e2 || "class" === o2 || "className" === o2)) {
347
+ var l2 = o2.toLowerCase();
348
+ "defaultValue" === o2 && "value" in t2 && null == t2.value ? o2 = "value" : "download" === o2 && true === i2 ? i2 = "" : "ondoubleclick" === l2 ? o2 = "ondblclick" : "onchange" !== l2 || "input" !== e2 && "textarea" !== e2 || q(t2.type) ? "onfocus" === l2 ? o2 = "onfocusin" : "onblur" === l2 ? o2 = "onfocusout" : Z.test(o2) ? o2 = l2 : -1 === e2.indexOf("-") && H.test(o2) ? o2 = o2.replace(Y, "-$&").toLowerCase() : null === i2 && (i2 = void 0) : l2 = o2 = "oninput", "oninput" === l2 && u2[o2 = l2] && (o2 = "oninputCapture"), u2[o2] = i2;
349
+ }
350
+ }
351
+ "select" == e2 && u2.multiple && Array.isArray(u2.value) && (u2.value = toChildArray(t2.children).forEach(function(n3) {
352
+ n3.props.selected = -1 != u2.value.indexOf(n3.props.value);
353
+ })), "select" == e2 && null != u2.defaultValue && (u2.value = toChildArray(t2.children).forEach(function(n3) {
354
+ n3.props.selected = u2.multiple ? -1 != u2.defaultValue.indexOf(n3.props.value) : u2.defaultValue == n3.props.value;
355
+ })), t2.class && !t2.className ? (u2.class = t2.class, Object.defineProperty(u2, "className", en)) : (t2.className && !t2.class || t2.class && t2.className) && (u2.class = u2.className = t2.className), n2.props = u2;
356
+ }(n), n.$$typeof = B, rn && rn(n);
357
+ };
358
+ var un = options.__r;
359
+ options.__r = function(n) {
360
+ un && un(n), n.__c;
361
+ };
362
+ var on = options.diffed;
363
+ options.diffed = function(n) {
364
+ on && on(n);
365
+ var t2 = n.props, e2 = n.__e;
366
+ null != e2 && "textarea" === n.type && "value" in t2 && t2.value !== e2.value && (e2.value = null == t2.value ? "" : t2.value);
367
+ };
368
+ const reset = "";
369
+ const root$i = "_root_10lbg_1";
370
+ const icon$1 = "_icon_10lbg_5";
371
+ const iconTarget$1 = "_iconTarget_10lbg_17";
372
+ const body$6 = "_body_10lbg_22";
373
+ const bodyOpen$1 = "_bodyOpen_10lbg_30";
374
+ const simpleGift_in = "_simpleGift_in_10lbg_1";
375
+ const close$1 = "_close_10lbg_43";
376
+ const arrow$1 = "_arrow_10lbg_57";
377
+ const container$2 = "_container_10lbg_67";
378
+ const inner$1 = "_inner_10lbg_73";
379
+ const logo$6 = "_logo_10lbg_80";
380
+ const text$4 = "_text_10lbg_86";
381
+ const button$6 = "_button_10lbg_101";
382
+ const buttonAnimated = "_buttonAnimated_10lbg_110";
383
+ const increase$1 = "_increase_10lbg_1";
384
+ const legal$5 = "_legal_10lbg_114";
385
+ const legalOpen$1 = "_legalOpen_10lbg_131";
386
+ const legalText$1 = "_legalText_10lbg_139";
387
+ const legalButton$1 = "_legalButton_10lbg_154";
388
+ const fadein$1 = "_fadein_10lbg_1";
389
+ const pulse$1 = "_pulse_10lbg_1";
390
+ const gradient$1 = "_gradient_10lbg_1";
391
+ const wiggle$1 = "_wiggle_10lbg_1";
392
+ const styles$d = {
393
+ root: root$i,
394
+ icon: icon$1,
395
+ iconTarget: iconTarget$1,
396
+ body: body$6,
397
+ bodyOpen: bodyOpen$1,
398
+ simpleGift_in,
399
+ close: close$1,
400
+ arrow: arrow$1,
401
+ container: container$2,
402
+ inner: inner$1,
403
+ logo: logo$6,
404
+ text: text$4,
405
+ button: button$6,
406
+ buttonAnimated,
407
+ increase: increase$1,
408
+ legal: legal$5,
409
+ legalOpen: legalOpen$1,
410
+ legalText: legalText$1,
411
+ legalButton: legalButton$1,
412
+ fadein: fadein$1,
413
+ pulse: pulse$1,
414
+ gradient: gradient$1,
415
+ wiggle: wiggle$1
416
+ };
417
+ const useGiftOpen = (delay = 1e3) => {
418
+ const [isOpen, setIsOpen] = h(false);
419
+ const timerRef = _$1(null);
420
+ const onToggle = () => {
421
+ clearTimeout(timerRef.current);
422
+ setIsOpen((prev) => !prev);
423
+ };
424
+ p(() => {
425
+ timerRef.current = setTimeout(() => {
426
+ setIsOpen(true);
427
+ }, delay);
428
+ return () => clearTimeout(timerRef.current);
429
+ }, [delay]);
430
+ return {
431
+ isOpen,
432
+ onToggle
433
+ };
434
+ };
435
+ var _ = 0;
436
+ function o(o2, e2, n, t2, f2, l2) {
437
+ var s2, u2, a2 = {};
438
+ for (u2 in e2)
439
+ "ref" == u2 ? s2 = e2[u2] : a2[u2] = e2[u2];
440
+ var i2 = { type: o2, props: a2, key: n, ref: s2, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, __h: null, constructor: void 0, __v: --_, __source: f2, __self: l2 };
441
+ if ("function" == typeof o2 && (s2 = o2.defaultProps))
442
+ for (u2 in s2)
443
+ void 0 === a2[u2] && (a2[u2] = s2[u2]);
444
+ return options.vnode && options.vnode(i2), i2;
445
+ }
446
+ const State = createContext();
447
+ const StateContext = ({
448
+ children,
449
+ value
450
+ }) => {
451
+ return o(State.Provider, {
452
+ value,
453
+ children
454
+ });
455
+ };
456
+ const render = (vNode) => (target, state) => render$1(o(StateContext, {
457
+ value: state,
458
+ children: vNode
459
+ }), target);
460
+ const useCurrentState = () => q$1(State);
461
+ function listCacheClear$1() {
462
+ this.__data__ = [];
463
+ this.size = 0;
464
+ }
465
+ var _listCacheClear = listCacheClear$1;
466
+ function eq$4(value, other) {
467
+ return value === other || value !== value && other !== other;
468
+ }
469
+ var eq_1 = eq$4;
470
+ var eq$3 = eq_1;
471
+ function assocIndexOf$4(array, key) {
472
+ var length = array.length;
473
+ while (length--) {
474
+ if (eq$3(array[length][0], key)) {
475
+ return length;
476
+ }
477
+ }
478
+ return -1;
479
+ }
480
+ var _assocIndexOf = assocIndexOf$4;
481
+ var assocIndexOf$3 = _assocIndexOf;
482
+ var arrayProto = Array.prototype;
483
+ var splice = arrayProto.splice;
484
+ function listCacheDelete$1(key) {
485
+ var data = this.__data__, index2 = assocIndexOf$3(data, key);
486
+ if (index2 < 0) {
487
+ return false;
488
+ }
489
+ var lastIndex = data.length - 1;
490
+ if (index2 == lastIndex) {
491
+ data.pop();
492
+ } else {
493
+ splice.call(data, index2, 1);
494
+ }
495
+ --this.size;
496
+ return true;
497
+ }
498
+ var _listCacheDelete = listCacheDelete$1;
499
+ var assocIndexOf$2 = _assocIndexOf;
500
+ function listCacheGet$1(key) {
501
+ var data = this.__data__, index2 = assocIndexOf$2(data, key);
502
+ return index2 < 0 ? void 0 : data[index2][1];
503
+ }
504
+ var _listCacheGet = listCacheGet$1;
505
+ var assocIndexOf$1 = _assocIndexOf;
506
+ function listCacheHas$1(key) {
507
+ return assocIndexOf$1(this.__data__, key) > -1;
508
+ }
509
+ var _listCacheHas = listCacheHas$1;
510
+ var assocIndexOf = _assocIndexOf;
511
+ function listCacheSet$1(key, value) {
512
+ var data = this.__data__, index2 = assocIndexOf(data, key);
513
+ if (index2 < 0) {
514
+ ++this.size;
515
+ data.push([key, value]);
516
+ } else {
517
+ data[index2][1] = value;
518
+ }
519
+ return this;
520
+ }
521
+ var _listCacheSet = listCacheSet$1;
522
+ var listCacheClear = _listCacheClear, listCacheDelete = _listCacheDelete, listCacheGet = _listCacheGet, listCacheHas = _listCacheHas, listCacheSet = _listCacheSet;
523
+ function ListCache$4(entries) {
524
+ var index2 = -1, length = entries == null ? 0 : entries.length;
525
+ this.clear();
526
+ while (++index2 < length) {
527
+ var entry = entries[index2];
528
+ this.set(entry[0], entry[1]);
529
+ }
530
+ }
531
+ ListCache$4.prototype.clear = listCacheClear;
532
+ ListCache$4.prototype["delete"] = listCacheDelete;
533
+ ListCache$4.prototype.get = listCacheGet;
534
+ ListCache$4.prototype.has = listCacheHas;
535
+ ListCache$4.prototype.set = listCacheSet;
536
+ var _ListCache = ListCache$4;
537
+ var ListCache$3 = _ListCache;
538
+ function stackClear$1() {
539
+ this.__data__ = new ListCache$3();
540
+ this.size = 0;
541
+ }
542
+ var _stackClear = stackClear$1;
543
+ function stackDelete$1(key) {
544
+ var data = this.__data__, result = data["delete"](key);
545
+ this.size = data.size;
546
+ return result;
547
+ }
548
+ var _stackDelete = stackDelete$1;
549
+ function stackGet$1(key) {
550
+ return this.__data__.get(key);
551
+ }
552
+ var _stackGet = stackGet$1;
553
+ function stackHas$1(key) {
554
+ return this.__data__.has(key);
555
+ }
556
+ var _stackHas = stackHas$1;
557
+ var freeGlobal$1 = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
558
+ var _freeGlobal = freeGlobal$1;
559
+ var freeGlobal = _freeGlobal;
560
+ var freeSelf = typeof self == "object" && self && self.Object === Object && self;
561
+ var root$h = freeGlobal || freeSelf || Function("return this")();
562
+ var _root = root$h;
563
+ var root$g = _root;
564
+ var Symbol$3 = root$g.Symbol;
565
+ var _Symbol = Symbol$3;
566
+ var Symbol$2 = _Symbol;
567
+ var objectProto$a = Object.prototype;
568
+ var hasOwnProperty$8 = objectProto$a.hasOwnProperty;
569
+ var nativeObjectToString$1 = objectProto$a.toString;
570
+ var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : void 0;
571
+ function getRawTag$1(value) {
572
+ var isOwn = hasOwnProperty$8.call(value, symToStringTag$1), tag = value[symToStringTag$1];
573
+ try {
574
+ value[symToStringTag$1] = void 0;
575
+ var unmasked = true;
576
+ } catch (e2) {
577
+ }
578
+ var result = nativeObjectToString$1.call(value);
579
+ if (unmasked) {
580
+ if (isOwn) {
581
+ value[symToStringTag$1] = tag;
582
+ } else {
583
+ delete value[symToStringTag$1];
584
+ }
585
+ }
586
+ return result;
587
+ }
588
+ var _getRawTag = getRawTag$1;
589
+ var objectProto$9 = Object.prototype;
590
+ var nativeObjectToString = objectProto$9.toString;
591
+ function objectToString$1(value) {
592
+ return nativeObjectToString.call(value);
593
+ }
594
+ var _objectToString = objectToString$1;
595
+ var Symbol$1 = _Symbol, getRawTag = _getRawTag, objectToString = _objectToString;
596
+ var nullTag = "[object Null]", undefinedTag = "[object Undefined]";
597
+ var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : void 0;
598
+ function baseGetTag$4(value) {
599
+ if (value == null) {
600
+ return value === void 0 ? undefinedTag : nullTag;
601
+ }
602
+ return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
603
+ }
604
+ var _baseGetTag = baseGetTag$4;
605
+ function isObject$7(value) {
606
+ var type = typeof value;
607
+ return value != null && (type == "object" || type == "function");
608
+ }
609
+ var isObject_1 = isObject$7;
610
+ var baseGetTag$3 = _baseGetTag, isObject$6 = isObject_1;
611
+ var asyncTag = "[object AsyncFunction]", funcTag$1 = "[object Function]", genTag = "[object GeneratorFunction]", proxyTag = "[object Proxy]";
612
+ function isFunction$3(value) {
613
+ if (!isObject$6(value)) {
614
+ return false;
615
+ }
616
+ var tag = baseGetTag$3(value);
617
+ return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag;
618
+ }
619
+ var isFunction_1 = isFunction$3;
620
+ var root$f = _root;
621
+ var coreJsData$1 = root$f["__core-js_shared__"];
622
+ var _coreJsData = coreJsData$1;
623
+ var coreJsData = _coreJsData;
624
+ var maskSrcKey = function() {
625
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
626
+ return uid ? "Symbol(src)_1." + uid : "";
627
+ }();
628
+ function isMasked$1(func) {
629
+ return !!maskSrcKey && maskSrcKey in func;
630
+ }
631
+ var _isMasked = isMasked$1;
632
+ var funcProto$2 = Function.prototype;
633
+ var funcToString$2 = funcProto$2.toString;
634
+ function toSource$1(func) {
635
+ if (func != null) {
636
+ try {
637
+ return funcToString$2.call(func);
638
+ } catch (e2) {
639
+ }
640
+ try {
641
+ return func + "";
642
+ } catch (e2) {
643
+ }
644
+ }
645
+ return "";
646
+ }
647
+ var _toSource = toSource$1;
648
+ var isFunction$2 = isFunction_1, isMasked = _isMasked, isObject$5 = isObject_1, toSource = _toSource;
649
+ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
650
+ var reIsHostCtor = /^\[object .+?Constructor\]$/;
651
+ var funcProto$1 = Function.prototype, objectProto$8 = Object.prototype;
652
+ var funcToString$1 = funcProto$1.toString;
653
+ var hasOwnProperty$7 = objectProto$8.hasOwnProperty;
654
+ var reIsNative = RegExp(
655
+ "^" + funcToString$1.call(hasOwnProperty$7).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
656
+ );
657
+ function baseIsNative$1(value) {
658
+ if (!isObject$5(value) || isMasked(value)) {
659
+ return false;
660
+ }
661
+ var pattern = isFunction$2(value) ? reIsNative : reIsHostCtor;
662
+ return pattern.test(toSource(value));
663
+ }
664
+ var _baseIsNative = baseIsNative$1;
665
+ function getValue$1(object, key) {
666
+ return object == null ? void 0 : object[key];
667
+ }
668
+ var _getValue = getValue$1;
669
+ var baseIsNative = _baseIsNative, getValue = _getValue;
670
+ function getNative$3(object, key) {
671
+ var value = getValue(object, key);
672
+ return baseIsNative(value) ? value : void 0;
673
+ }
674
+ var _getNative = getNative$3;
675
+ var getNative$2 = _getNative, root$e = _root;
676
+ var Map$3 = getNative$2(root$e, "Map");
677
+ var _Map = Map$3;
678
+ var getNative$1 = _getNative;
679
+ var nativeCreate$4 = getNative$1(Object, "create");
680
+ var _nativeCreate = nativeCreate$4;
681
+ var nativeCreate$3 = _nativeCreate;
682
+ function hashClear$1() {
683
+ this.__data__ = nativeCreate$3 ? nativeCreate$3(null) : {};
684
+ this.size = 0;
685
+ }
686
+ var _hashClear = hashClear$1;
687
+ function hashDelete$1(key) {
688
+ var result = this.has(key) && delete this.__data__[key];
689
+ this.size -= result ? 1 : 0;
690
+ return result;
691
+ }
692
+ var _hashDelete = hashDelete$1;
693
+ var nativeCreate$2 = _nativeCreate;
694
+ var HASH_UNDEFINED$1 = "__lodash_hash_undefined__";
695
+ var objectProto$7 = Object.prototype;
696
+ var hasOwnProperty$6 = objectProto$7.hasOwnProperty;
697
+ function hashGet$1(key) {
698
+ var data = this.__data__;
699
+ if (nativeCreate$2) {
700
+ var result = data[key];
701
+ return result === HASH_UNDEFINED$1 ? void 0 : result;
702
+ }
703
+ return hasOwnProperty$6.call(data, key) ? data[key] : void 0;
704
+ }
705
+ var _hashGet = hashGet$1;
706
+ var nativeCreate$1 = _nativeCreate;
707
+ var objectProto$6 = Object.prototype;
708
+ var hasOwnProperty$5 = objectProto$6.hasOwnProperty;
709
+ function hashHas$1(key) {
710
+ var data = this.__data__;
711
+ return nativeCreate$1 ? data[key] !== void 0 : hasOwnProperty$5.call(data, key);
712
+ }
713
+ var _hashHas = hashHas$1;
714
+ var nativeCreate = _nativeCreate;
715
+ var HASH_UNDEFINED = "__lodash_hash_undefined__";
716
+ function hashSet$1(key, value) {
717
+ var data = this.__data__;
718
+ this.size += this.has(key) ? 0 : 1;
719
+ data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value;
720
+ return this;
721
+ }
722
+ var _hashSet = hashSet$1;
723
+ var hashClear = _hashClear, hashDelete = _hashDelete, hashGet = _hashGet, hashHas = _hashHas, hashSet = _hashSet;
724
+ function Hash$1(entries) {
725
+ var index2 = -1, length = entries == null ? 0 : entries.length;
726
+ this.clear();
727
+ while (++index2 < length) {
728
+ var entry = entries[index2];
729
+ this.set(entry[0], entry[1]);
730
+ }
731
+ }
732
+ Hash$1.prototype.clear = hashClear;
733
+ Hash$1.prototype["delete"] = hashDelete;
734
+ Hash$1.prototype.get = hashGet;
735
+ Hash$1.prototype.has = hashHas;
736
+ Hash$1.prototype.set = hashSet;
737
+ var _Hash = Hash$1;
738
+ var Hash = _Hash, ListCache$2 = _ListCache, Map$2 = _Map;
739
+ function mapCacheClear$1() {
740
+ this.size = 0;
741
+ this.__data__ = {
742
+ "hash": new Hash(),
743
+ "map": new (Map$2 || ListCache$2)(),
744
+ "string": new Hash()
745
+ };
746
+ }
747
+ var _mapCacheClear = mapCacheClear$1;
748
+ function isKeyable$1(value) {
749
+ var type = typeof value;
750
+ return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
751
+ }
752
+ var _isKeyable = isKeyable$1;
753
+ var isKeyable = _isKeyable;
754
+ function getMapData$4(map, key) {
755
+ var data = map.__data__;
756
+ return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
757
+ }
758
+ var _getMapData = getMapData$4;
759
+ var getMapData$3 = _getMapData;
760
+ function mapCacheDelete$1(key) {
761
+ var result = getMapData$3(this, key)["delete"](key);
762
+ this.size -= result ? 1 : 0;
763
+ return result;
764
+ }
765
+ var _mapCacheDelete = mapCacheDelete$1;
766
+ var getMapData$2 = _getMapData;
767
+ function mapCacheGet$1(key) {
768
+ return getMapData$2(this, key).get(key);
769
+ }
770
+ var _mapCacheGet = mapCacheGet$1;
771
+ var getMapData$1 = _getMapData;
772
+ function mapCacheHas$1(key) {
773
+ return getMapData$1(this, key).has(key);
774
+ }
775
+ var _mapCacheHas = mapCacheHas$1;
776
+ var getMapData = _getMapData;
777
+ function mapCacheSet$1(key, value) {
778
+ var data = getMapData(this, key), size = data.size;
779
+ data.set(key, value);
780
+ this.size += data.size == size ? 0 : 1;
781
+ return this;
782
+ }
783
+ var _mapCacheSet = mapCacheSet$1;
784
+ var mapCacheClear = _mapCacheClear, mapCacheDelete = _mapCacheDelete, mapCacheGet = _mapCacheGet, mapCacheHas = _mapCacheHas, mapCacheSet = _mapCacheSet;
785
+ function MapCache$1(entries) {
786
+ var index2 = -1, length = entries == null ? 0 : entries.length;
787
+ this.clear();
788
+ while (++index2 < length) {
789
+ var entry = entries[index2];
790
+ this.set(entry[0], entry[1]);
791
+ }
792
+ }
793
+ MapCache$1.prototype.clear = mapCacheClear;
794
+ MapCache$1.prototype["delete"] = mapCacheDelete;
795
+ MapCache$1.prototype.get = mapCacheGet;
796
+ MapCache$1.prototype.has = mapCacheHas;
797
+ MapCache$1.prototype.set = mapCacheSet;
798
+ var _MapCache = MapCache$1;
799
+ var ListCache$1 = _ListCache, Map$1 = _Map, MapCache = _MapCache;
800
+ var LARGE_ARRAY_SIZE = 200;
801
+ function stackSet$1(key, value) {
802
+ var data = this.__data__;
803
+ if (data instanceof ListCache$1) {
804
+ var pairs = data.__data__;
805
+ if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE - 1) {
806
+ pairs.push([key, value]);
807
+ this.size = ++data.size;
808
+ return this;
809
+ }
810
+ data = this.__data__ = new MapCache(pairs);
811
+ }
812
+ data.set(key, value);
813
+ this.size = data.size;
814
+ return this;
815
+ }
816
+ var _stackSet = stackSet$1;
817
+ var ListCache = _ListCache, stackClear = _stackClear, stackDelete = _stackDelete, stackGet = _stackGet, stackHas = _stackHas, stackSet = _stackSet;
818
+ function Stack$1(entries) {
819
+ var data = this.__data__ = new ListCache(entries);
820
+ this.size = data.size;
821
+ }
822
+ Stack$1.prototype.clear = stackClear;
823
+ Stack$1.prototype["delete"] = stackDelete;
824
+ Stack$1.prototype.get = stackGet;
825
+ Stack$1.prototype.has = stackHas;
826
+ Stack$1.prototype.set = stackSet;
827
+ var _Stack = Stack$1;
828
+ var getNative = _getNative;
829
+ var defineProperty$2 = function() {
830
+ try {
831
+ var func = getNative(Object, "defineProperty");
832
+ func({}, "", {});
833
+ return func;
834
+ } catch (e2) {
835
+ }
836
+ }();
837
+ var _defineProperty = defineProperty$2;
838
+ var defineProperty$1 = _defineProperty;
839
+ function baseAssignValue$3(object, key, value) {
840
+ if (key == "__proto__" && defineProperty$1) {
841
+ defineProperty$1(object, key, {
842
+ "configurable": true,
843
+ "enumerable": true,
844
+ "value": value,
845
+ "writable": true
846
+ });
847
+ } else {
848
+ object[key] = value;
849
+ }
850
+ }
851
+ var _baseAssignValue = baseAssignValue$3;
852
+ var baseAssignValue$2 = _baseAssignValue, eq$2 = eq_1;
853
+ function assignMergeValue$2(object, key, value) {
854
+ if (value !== void 0 && !eq$2(object[key], value) || value === void 0 && !(key in object)) {
855
+ baseAssignValue$2(object, key, value);
856
+ }
857
+ }
858
+ var _assignMergeValue = assignMergeValue$2;
859
+ function createBaseFor$1(fromRight) {
860
+ return function(object, iteratee, keysFunc) {
861
+ var index2 = -1, iterable = Object(object), props = keysFunc(object), length = props.length;
862
+ while (length--) {
863
+ var key = props[fromRight ? length : ++index2];
864
+ if (iteratee(iterable[key], key, iterable) === false) {
865
+ break;
866
+ }
867
+ }
868
+ return object;
869
+ };
870
+ }
871
+ var _createBaseFor = createBaseFor$1;
872
+ var createBaseFor = _createBaseFor;
873
+ var baseFor$1 = createBaseFor();
874
+ var _baseFor = baseFor$1;
875
+ var _cloneBufferExports = {};
876
+ var _cloneBuffer = {
877
+ get exports() {
878
+ return _cloneBufferExports;
879
+ },
880
+ set exports(v2) {
881
+ _cloneBufferExports = v2;
882
+ }
883
+ };
884
+ (function(module, exports) {
885
+ var root2 = _root;
886
+ var freeExports = exports && !exports.nodeType && exports;
887
+ var freeModule = freeExports && true && module && !module.nodeType && module;
888
+ var moduleExports = freeModule && freeModule.exports === freeExports;
889
+ var Buffer = moduleExports ? root2.Buffer : void 0, allocUnsafe = Buffer ? Buffer.allocUnsafe : void 0;
890
+ function cloneBuffer2(buffer, isDeep) {
891
+ if (isDeep) {
892
+ return buffer.slice();
893
+ }
894
+ var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
895
+ buffer.copy(result);
896
+ return result;
897
+ }
898
+ module.exports = cloneBuffer2;
899
+ })(_cloneBuffer, _cloneBufferExports);
900
+ var root$d = _root;
901
+ var Uint8Array$1 = root$d.Uint8Array;
902
+ var _Uint8Array = Uint8Array$1;
903
+ var Uint8Array = _Uint8Array;
904
+ function cloneArrayBuffer$1(arrayBuffer) {
905
+ var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
906
+ new Uint8Array(result).set(new Uint8Array(arrayBuffer));
907
+ return result;
908
+ }
909
+ var _cloneArrayBuffer = cloneArrayBuffer$1;
910
+ var cloneArrayBuffer = _cloneArrayBuffer;
911
+ function cloneTypedArray$1(typedArray, isDeep) {
912
+ var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
913
+ return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
914
+ }
915
+ var _cloneTypedArray = cloneTypedArray$1;
916
+ function copyArray$1(source, array) {
917
+ var index2 = -1, length = source.length;
918
+ array || (array = Array(length));
919
+ while (++index2 < length) {
920
+ array[index2] = source[index2];
921
+ }
922
+ return array;
923
+ }
924
+ var _copyArray = copyArray$1;
925
+ var isObject$4 = isObject_1;
926
+ var objectCreate = Object.create;
927
+ var baseCreate$1 = function() {
928
+ function object() {
929
+ }
930
+ return function(proto) {
931
+ if (!isObject$4(proto)) {
932
+ return {};
933
+ }
934
+ if (objectCreate) {
935
+ return objectCreate(proto);
936
+ }
937
+ object.prototype = proto;
938
+ var result = new object();
939
+ object.prototype = void 0;
940
+ return result;
941
+ };
942
+ }();
943
+ var _baseCreate = baseCreate$1;
944
+ function overArg$1(func, transform) {
945
+ return function(arg) {
946
+ return func(transform(arg));
947
+ };
948
+ }
949
+ var _overArg = overArg$1;
950
+ var overArg = _overArg;
951
+ var getPrototype$2 = overArg(Object.getPrototypeOf, Object);
952
+ var _getPrototype = getPrototype$2;
953
+ var objectProto$5 = Object.prototype;
954
+ function isPrototype$2(value) {
955
+ var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto$5;
956
+ return value === proto;
957
+ }
958
+ var _isPrototype = isPrototype$2;
959
+ var baseCreate = _baseCreate, getPrototype$1 = _getPrototype, isPrototype$1 = _isPrototype;
960
+ function initCloneObject$1(object) {
961
+ return typeof object.constructor == "function" && !isPrototype$1(object) ? baseCreate(getPrototype$1(object)) : {};
962
+ }
963
+ var _initCloneObject = initCloneObject$1;
964
+ function isObjectLike$5(value) {
965
+ return value != null && typeof value == "object";
966
+ }
967
+ var isObjectLike_1 = isObjectLike$5;
968
+ var baseGetTag$2 = _baseGetTag, isObjectLike$4 = isObjectLike_1;
969
+ var argsTag$1 = "[object Arguments]";
970
+ function baseIsArguments$1(value) {
971
+ return isObjectLike$4(value) && baseGetTag$2(value) == argsTag$1;
972
+ }
973
+ var _baseIsArguments = baseIsArguments$1;
974
+ var baseIsArguments = _baseIsArguments, isObjectLike$3 = isObjectLike_1;
975
+ var objectProto$4 = Object.prototype;
976
+ var hasOwnProperty$4 = objectProto$4.hasOwnProperty;
977
+ var propertyIsEnumerable = objectProto$4.propertyIsEnumerable;
978
+ var isArguments$2 = baseIsArguments(function() {
979
+ return arguments;
980
+ }()) ? baseIsArguments : function(value) {
981
+ return isObjectLike$3(value) && hasOwnProperty$4.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
982
+ };
983
+ var isArguments_1 = isArguments$2;
984
+ var isArray$2 = Array.isArray;
985
+ var isArray_1 = isArray$2;
986
+ var MAX_SAFE_INTEGER$1 = 9007199254740991;
987
+ function isLength$2(value) {
988
+ return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1;
989
+ }
990
+ var isLength_1 = isLength$2;
991
+ var isFunction$1 = isFunction_1, isLength$1 = isLength_1;
992
+ function isArrayLike$3(value) {
993
+ return value != null && isLength$1(value.length) && !isFunction$1(value);
994
+ }
995
+ var isArrayLike_1 = isArrayLike$3;
996
+ var isArrayLike$2 = isArrayLike_1, isObjectLike$2 = isObjectLike_1;
997
+ function isArrayLikeObject$1(value) {
998
+ return isObjectLike$2(value) && isArrayLike$2(value);
999
+ }
1000
+ var isArrayLikeObject_1 = isArrayLikeObject$1;
1001
+ var isBufferExports = {};
1002
+ var isBuffer$2 = {
1003
+ get exports() {
1004
+ return isBufferExports;
1005
+ },
1006
+ set exports(v2) {
1007
+ isBufferExports = v2;
1008
+ }
1009
+ };
1010
+ function stubFalse() {
1011
+ return false;
1012
+ }
1013
+ var stubFalse_1 = stubFalse;
1014
+ (function(module, exports) {
1015
+ var root2 = _root, stubFalse2 = stubFalse_1;
1016
+ var freeExports = exports && !exports.nodeType && exports;
1017
+ var freeModule = freeExports && true && module && !module.nodeType && module;
1018
+ var moduleExports = freeModule && freeModule.exports === freeExports;
1019
+ var Buffer = moduleExports ? root2.Buffer : void 0;
1020
+ var nativeIsBuffer = Buffer ? Buffer.isBuffer : void 0;
1021
+ var isBuffer2 = nativeIsBuffer || stubFalse2;
1022
+ module.exports = isBuffer2;
1023
+ })(isBuffer$2, isBufferExports);
1024
+ var baseGetTag$1 = _baseGetTag, getPrototype = _getPrototype, isObjectLike$1 = isObjectLike_1;
1025
+ var objectTag$1 = "[object Object]";
1026
+ var funcProto = Function.prototype, objectProto$3 = Object.prototype;
1027
+ var funcToString = funcProto.toString;
1028
+ var hasOwnProperty$3 = objectProto$3.hasOwnProperty;
1029
+ var objectCtorString = funcToString.call(Object);
1030
+ function isPlainObject$1(value) {
1031
+ if (!isObjectLike$1(value) || baseGetTag$1(value) != objectTag$1) {
1032
+ return false;
1033
+ }
1034
+ var proto = getPrototype(value);
1035
+ if (proto === null) {
1036
+ return true;
1037
+ }
1038
+ var Ctor = hasOwnProperty$3.call(proto, "constructor") && proto.constructor;
1039
+ return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
1040
+ }
1041
+ var isPlainObject_1 = isPlainObject$1;
1042
+ var baseGetTag = _baseGetTag, isLength = isLength_1, isObjectLike = isObjectLike_1;
1043
+ var argsTag = "[object Arguments]", arrayTag = "[object Array]", boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", funcTag = "[object Function]", mapTag = "[object Map]", numberTag = "[object Number]", objectTag = "[object Object]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", weakMapTag = "[object WeakMap]";
1044
+ var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]";
1045
+ var typedArrayTags = {};
1046
+ typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
1047
+ typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
1048
+ function baseIsTypedArray$1(value) {
1049
+ return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
1050
+ }
1051
+ var _baseIsTypedArray = baseIsTypedArray$1;
1052
+ function baseUnary$1(func) {
1053
+ return function(value) {
1054
+ return func(value);
1055
+ };
1056
+ }
1057
+ var _baseUnary = baseUnary$1;
1058
+ var _nodeUtilExports = {};
1059
+ var _nodeUtil = {
1060
+ get exports() {
1061
+ return _nodeUtilExports;
1062
+ },
1063
+ set exports(v2) {
1064
+ _nodeUtilExports = v2;
1065
+ }
1066
+ };
1067
+ (function(module, exports) {
1068
+ var freeGlobal2 = _freeGlobal;
1069
+ var freeExports = exports && !exports.nodeType && exports;
1070
+ var freeModule = freeExports && true && module && !module.nodeType && module;
1071
+ var moduleExports = freeModule && freeModule.exports === freeExports;
1072
+ var freeProcess = moduleExports && freeGlobal2.process;
1073
+ var nodeUtil2 = function() {
1074
+ try {
1075
+ var types = freeModule && freeModule.require && freeModule.require("util").types;
1076
+ if (types) {
1077
+ return types;
1078
+ }
1079
+ return freeProcess && freeProcess.binding && freeProcess.binding("util");
1080
+ } catch (e2) {
1081
+ }
1082
+ }();
1083
+ module.exports = nodeUtil2;
1084
+ })(_nodeUtil, _nodeUtilExports);
1085
+ var baseIsTypedArray = _baseIsTypedArray, baseUnary = _baseUnary, nodeUtil = _nodeUtilExports;
1086
+ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
1087
+ var isTypedArray$2 = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
1088
+ var isTypedArray_1 = isTypedArray$2;
1089
+ function safeGet$2(object, key) {
1090
+ if (key === "constructor" && typeof object[key] === "function") {
1091
+ return;
1092
+ }
1093
+ if (key == "__proto__") {
1094
+ return;
1095
+ }
1096
+ return object[key];
1097
+ }
1098
+ var _safeGet = safeGet$2;
1099
+ var baseAssignValue$1 = _baseAssignValue, eq$1 = eq_1;
1100
+ var objectProto$2 = Object.prototype;
1101
+ var hasOwnProperty$2 = objectProto$2.hasOwnProperty;
1102
+ function assignValue$1(object, key, value) {
1103
+ var objValue = object[key];
1104
+ if (!(hasOwnProperty$2.call(object, key) && eq$1(objValue, value)) || value === void 0 && !(key in object)) {
1105
+ baseAssignValue$1(object, key, value);
1106
+ }
1107
+ }
1108
+ var _assignValue = assignValue$1;
1109
+ var assignValue = _assignValue, baseAssignValue = _baseAssignValue;
1110
+ function copyObject$1(source, props, object, customizer) {
1111
+ var isNew = !object;
1112
+ object || (object = {});
1113
+ var index2 = -1, length = props.length;
1114
+ while (++index2 < length) {
1115
+ var key = props[index2];
1116
+ var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;
1117
+ if (newValue === void 0) {
1118
+ newValue = source[key];
1119
+ }
1120
+ if (isNew) {
1121
+ baseAssignValue(object, key, newValue);
1122
+ } else {
1123
+ assignValue(object, key, newValue);
1124
+ }
1125
+ }
1126
+ return object;
1127
+ }
1128
+ var _copyObject = copyObject$1;
1129
+ function baseTimes$1(n, iteratee) {
1130
+ var index2 = -1, result = Array(n);
1131
+ while (++index2 < n) {
1132
+ result[index2] = iteratee(index2);
1133
+ }
1134
+ return result;
1135
+ }
1136
+ var _baseTimes = baseTimes$1;
1137
+ var MAX_SAFE_INTEGER = 9007199254740991;
1138
+ var reIsUint = /^(?:0|[1-9]\d*)$/;
1139
+ function isIndex$2(value, length) {
1140
+ var type = typeof value;
1141
+ length = length == null ? MAX_SAFE_INTEGER : length;
1142
+ return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);
1143
+ }
1144
+ var _isIndex = isIndex$2;
1145
+ var baseTimes = _baseTimes, isArguments$1 = isArguments_1, isArray$1 = isArray_1, isBuffer$1 = isBufferExports, isIndex$1 = _isIndex, isTypedArray$1 = isTypedArray_1;
1146
+ var objectProto$1 = Object.prototype;
1147
+ var hasOwnProperty$1 = objectProto$1.hasOwnProperty;
1148
+ function arrayLikeKeys$1(value, inherited) {
1149
+ var isArr = isArray$1(value), isArg = !isArr && isArguments$1(value), isBuff = !isArr && !isArg && isBuffer$1(value), isType = !isArr && !isArg && !isBuff && isTypedArray$1(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length;
1150
+ for (var key in value) {
1151
+ if ((inherited || hasOwnProperty$1.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
1152
+ (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
1153
+ isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
1154
+ isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
1155
+ isIndex$1(key, length)))) {
1156
+ result.push(key);
1157
+ }
1158
+ }
1159
+ return result;
1160
+ }
1161
+ var _arrayLikeKeys = arrayLikeKeys$1;
1162
+ function nativeKeysIn$1(object) {
1163
+ var result = [];
1164
+ if (object != null) {
1165
+ for (var key in Object(object)) {
1166
+ result.push(key);
1167
+ }
1168
+ }
1169
+ return result;
1170
+ }
1171
+ var _nativeKeysIn = nativeKeysIn$1;
1172
+ var isObject$3 = isObject_1, isPrototype = _isPrototype, nativeKeysIn = _nativeKeysIn;
1173
+ var objectProto = Object.prototype;
1174
+ var hasOwnProperty = objectProto.hasOwnProperty;
1175
+ function baseKeysIn$1(object) {
1176
+ if (!isObject$3(object)) {
1177
+ return nativeKeysIn(object);
1178
+ }
1179
+ var isProto = isPrototype(object), result = [];
1180
+ for (var key in object) {
1181
+ if (!(key == "constructor" && (isProto || !hasOwnProperty.call(object, key)))) {
1182
+ result.push(key);
1183
+ }
1184
+ }
1185
+ return result;
1186
+ }
1187
+ var _baseKeysIn = baseKeysIn$1;
1188
+ var arrayLikeKeys = _arrayLikeKeys, baseKeysIn = _baseKeysIn, isArrayLike$1 = isArrayLike_1;
1189
+ function keysIn$2(object) {
1190
+ return isArrayLike$1(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
1191
+ }
1192
+ var keysIn_1 = keysIn$2;
1193
+ var copyObject = _copyObject, keysIn$1 = keysIn_1;
1194
+ function toPlainObject$1(value) {
1195
+ return copyObject(value, keysIn$1(value));
1196
+ }
1197
+ var toPlainObject_1 = toPlainObject$1;
1198
+ var assignMergeValue$1 = _assignMergeValue, cloneBuffer = _cloneBufferExports, cloneTypedArray = _cloneTypedArray, copyArray = _copyArray, initCloneObject = _initCloneObject, isArguments = isArguments_1, isArray = isArray_1, isArrayLikeObject = isArrayLikeObject_1, isBuffer = isBufferExports, isFunction = isFunction_1, isObject$2 = isObject_1, isPlainObject = isPlainObject_1, isTypedArray = isTypedArray_1, safeGet$1 = _safeGet, toPlainObject = toPlainObject_1;
1199
+ function baseMergeDeep$1(object, source, key, srcIndex, mergeFunc, customizer, stack) {
1200
+ var objValue = safeGet$1(object, key), srcValue = safeGet$1(source, key), stacked = stack.get(srcValue);
1201
+ if (stacked) {
1202
+ assignMergeValue$1(object, key, stacked);
1203
+ return;
1204
+ }
1205
+ var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : void 0;
1206
+ var isCommon = newValue === void 0;
1207
+ if (isCommon) {
1208
+ var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue);
1209
+ newValue = srcValue;
1210
+ if (isArr || isBuff || isTyped) {
1211
+ if (isArray(objValue)) {
1212
+ newValue = objValue;
1213
+ } else if (isArrayLikeObject(objValue)) {
1214
+ newValue = copyArray(objValue);
1215
+ } else if (isBuff) {
1216
+ isCommon = false;
1217
+ newValue = cloneBuffer(srcValue, true);
1218
+ } else if (isTyped) {
1219
+ isCommon = false;
1220
+ newValue = cloneTypedArray(srcValue, true);
1221
+ } else {
1222
+ newValue = [];
1223
+ }
1224
+ } else if (isPlainObject(srcValue) || isArguments(srcValue)) {
1225
+ newValue = objValue;
1226
+ if (isArguments(objValue)) {
1227
+ newValue = toPlainObject(objValue);
1228
+ } else if (!isObject$2(objValue) || isFunction(objValue)) {
1229
+ newValue = initCloneObject(srcValue);
1230
+ }
1231
+ } else {
1232
+ isCommon = false;
1233
+ }
1234
+ }
1235
+ if (isCommon) {
1236
+ stack.set(srcValue, newValue);
1237
+ mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
1238
+ stack["delete"](srcValue);
1239
+ }
1240
+ assignMergeValue$1(object, key, newValue);
1241
+ }
1242
+ var _baseMergeDeep = baseMergeDeep$1;
1243
+ var Stack = _Stack, assignMergeValue = _assignMergeValue, baseFor = _baseFor, baseMergeDeep = _baseMergeDeep, isObject$1 = isObject_1, keysIn = keysIn_1, safeGet = _safeGet;
1244
+ function baseMerge$1(object, source, srcIndex, customizer, stack) {
1245
+ if (object === source) {
1246
+ return;
1247
+ }
1248
+ baseFor(source, function(srcValue, key) {
1249
+ stack || (stack = new Stack());
1250
+ if (isObject$1(srcValue)) {
1251
+ baseMergeDeep(object, source, key, srcIndex, baseMerge$1, customizer, stack);
1252
+ } else {
1253
+ var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : void 0;
1254
+ if (newValue === void 0) {
1255
+ newValue = srcValue;
1256
+ }
1257
+ assignMergeValue(object, key, newValue);
1258
+ }
1259
+ }, keysIn);
1260
+ }
1261
+ var _baseMerge = baseMerge$1;
1262
+ function identity$2(value) {
1263
+ return value;
1264
+ }
1265
+ var identity_1 = identity$2;
1266
+ function apply$1(func, thisArg, args) {
1267
+ switch (args.length) {
1268
+ case 0:
1269
+ return func.call(thisArg);
1270
+ case 1:
1271
+ return func.call(thisArg, args[0]);
1272
+ case 2:
1273
+ return func.call(thisArg, args[0], args[1]);
1274
+ case 3:
1275
+ return func.call(thisArg, args[0], args[1], args[2]);
1276
+ }
1277
+ return func.apply(thisArg, args);
1278
+ }
1279
+ var _apply = apply$1;
1280
+ var apply = _apply;
1281
+ var nativeMax = Math.max;
1282
+ function overRest$1(func, start, transform) {
1283
+ start = nativeMax(start === void 0 ? func.length - 1 : start, 0);
1284
+ return function() {
1285
+ var args = arguments, index2 = -1, length = nativeMax(args.length - start, 0), array = Array(length);
1286
+ while (++index2 < length) {
1287
+ array[index2] = args[start + index2];
1288
+ }
1289
+ index2 = -1;
1290
+ var otherArgs = Array(start + 1);
1291
+ while (++index2 < start) {
1292
+ otherArgs[index2] = args[index2];
1293
+ }
1294
+ otherArgs[start] = transform(array);
1295
+ return apply(func, this, otherArgs);
1296
+ };
1297
+ }
1298
+ var _overRest = overRest$1;
1299
+ function constant$1(value) {
1300
+ return function() {
1301
+ return value;
1302
+ };
1303
+ }
1304
+ var constant_1 = constant$1;
1305
+ var constant = constant_1, defineProperty = _defineProperty, identity$1 = identity_1;
1306
+ var baseSetToString$1 = !defineProperty ? identity$1 : function(func, string) {
1307
+ return defineProperty(func, "toString", {
1308
+ "configurable": true,
1309
+ "enumerable": false,
1310
+ "value": constant(string),
1311
+ "writable": true
1312
+ });
1313
+ };
1314
+ var _baseSetToString = baseSetToString$1;
1315
+ var HOT_COUNT = 800, HOT_SPAN = 16;
1316
+ var nativeNow = Date.now;
1317
+ function shortOut$1(func) {
1318
+ var count = 0, lastCalled = 0;
1319
+ return function() {
1320
+ var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);
1321
+ lastCalled = stamp;
1322
+ if (remaining > 0) {
1323
+ if (++count >= HOT_COUNT) {
1324
+ return arguments[0];
1325
+ }
1326
+ } else {
1327
+ count = 0;
1328
+ }
1329
+ return func.apply(void 0, arguments);
1330
+ };
1331
+ }
1332
+ var _shortOut = shortOut$1;
1333
+ var baseSetToString = _baseSetToString, shortOut = _shortOut;
1334
+ var setToString$1 = shortOut(baseSetToString);
1335
+ var _setToString = setToString$1;
1336
+ var identity = identity_1, overRest = _overRest, setToString = _setToString;
1337
+ function baseRest$1(func, start) {
1338
+ return setToString(overRest(func, start, identity), func + "");
1339
+ }
1340
+ var _baseRest = baseRest$1;
1341
+ var eq = eq_1, isArrayLike = isArrayLike_1, isIndex = _isIndex, isObject = isObject_1;
1342
+ function isIterateeCall$1(value, index2, object) {
1343
+ if (!isObject(object)) {
1344
+ return false;
1345
+ }
1346
+ var type = typeof index2;
1347
+ if (type == "number" ? isArrayLike(object) && isIndex(index2, object.length) : type == "string" && index2 in object) {
1348
+ return eq(object[index2], value);
1349
+ }
1350
+ return false;
1351
+ }
1352
+ var _isIterateeCall = isIterateeCall$1;
1353
+ var baseRest = _baseRest, isIterateeCall = _isIterateeCall;
1354
+ function createAssigner$1(assigner) {
1355
+ return baseRest(function(object, sources) {
1356
+ var index2 = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;
1357
+ customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0;
1358
+ if (guard && isIterateeCall(sources[0], sources[1], guard)) {
1359
+ customizer = length < 3 ? void 0 : customizer;
1360
+ length = 1;
1361
+ }
1362
+ object = Object(object);
1363
+ while (++index2 < length) {
1364
+ var source = sources[index2];
1365
+ if (source) {
1366
+ assigner(object, source, index2, customizer);
1367
+ }
1368
+ }
1369
+ return object;
1370
+ });
1371
+ }
1372
+ var _createAssigner = createAssigner$1;
1373
+ var baseMerge = _baseMerge, createAssigner = _createAssigner;
1374
+ createAssigner(function(object, source, srcIndex) {
1375
+ baseMerge(object, source, srcIndex);
1376
+ });
1377
+ const injectLink = (options2) => {
1378
+ const head2 = document.getElementsByTagName("head")[0];
1379
+ const link = document.createElement("link");
1380
+ Object.entries(options2).forEach(([key, value]) => link.setAttribute(key, value));
1381
+ head2.appendChild(link);
1382
+ };
1383
+ const iterator = (input, visitor) => {
1384
+ if (Array.isArray(input)) {
1385
+ return input.map((el, index2) => iterator(visitor(index2, el), visitor));
1386
+ }
1387
+ if (typeof input === "object" && input) {
1388
+ return Object.entries(input).reduce((acc, [key, value]) => {
1389
+ acc[key] = iterator(visitor(key, value), visitor);
1390
+ return acc;
1391
+ }, {});
1392
+ }
1393
+ return input;
1394
+ };
1395
+ const isEmptyValue = (value) => !value && (value === null || value === void 0);
1396
+ const isValue = (value) => !isEmptyValue(value);
1397
+ const pick = (obj, ...props) => {
1398
+ return props.reduce((result, prop) => {
1399
+ result[prop] = obj[prop];
1400
+ return result;
1401
+ }, {});
1402
+ };
1403
+ function omit(obj, ...props) {
1404
+ const result = {
1405
+ ...obj
1406
+ };
1407
+ props.forEach((prop) => {
1408
+ delete result[prop];
1409
+ });
1410
+ return result;
1411
+ }
1412
+ const set = (obj, path, value) => {
1413
+ const pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g);
1414
+ return pathArray.reduce((acc, key, i2) => {
1415
+ if (acc[key] === void 0)
1416
+ acc[key] = {};
1417
+ if (i2 === pathArray.length - 1)
1418
+ acc[key] = value;
1419
+ return acc[key];
1420
+ }, obj);
1421
+ };
1422
+ const hexToRgb = (hex) => {
1423
+ const chars = hex.slice(1);
1424
+ if (chars.length === 3) {
1425
+ hex = chars.split("").map((val) => `${val}${val}`).join("");
1426
+ }
1427
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
1428
+ return result ? {
1429
+ r: parseInt(result[1], 16),
1430
+ g: parseInt(result[2], 16),
1431
+ b: parseInt(result[3], 16)
1432
+ } : void 0;
1433
+ };
1434
+ const isJsonSame = (...values) => {
1435
+ return values.map((value) => JSON.stringify(value)).every((val, _2, arr) => val === arr[0]);
1436
+ };
1437
+ const rgbToRgba = (rgb, alpha = 1) => rgb.replace(")", `, ${alpha})`).replace("rgb", "rgba");
1438
+ const devices = ["desktop", "laptop", "tablet", "mobile"];
1439
+ const BREAKPOINTS = {
1440
+ mobile: 320,
1441
+ tablet: 768,
1442
+ laptop: 1024,
1443
+ desktop: 1920
1444
+ };
1445
+ const isValidRule$1 = (state = {}) => typeof state === "object" && isValue(state) && devices.every((device) => device in state);
1446
+ const getRules = (state, device) => {
1447
+ if (!state)
1448
+ return state;
1449
+ return iterator(state, (_key, value) => {
1450
+ if (isValidRule$1(value)) {
1451
+ return value[device];
1452
+ }
1453
+ return value;
1454
+ });
1455
+ };
1456
+ const useGetRules = (state, device) => getRules(state, device);
1457
+ const useContainerDevice = ({
1458
+ targetRef,
1459
+ parentKey = "device-container",
1460
+ breakpoints = BREAKPOINTS
1461
+ }) => {
1462
+ const [device, setDevice] = h("desktop");
1463
+ const checkDevice = (parent) => {
1464
+ var _a;
1465
+ const parentWidth = parent.getBoundingClientRect().width || 0;
1466
+ const findDevice = (_a = Object.entries(breakpoints).find(([, value]) => value >= parentWidth)) == null ? void 0 : _a[0];
1467
+ setDevice(findDevice);
1468
+ };
1469
+ y(() => {
1470
+ const parentElement = targetRef.current.closest(`[data-${parentKey}]`);
1471
+ if (parentElement) {
1472
+ const resizeObserver = new ResizeObserver(() => checkDevice(parentElement));
1473
+ resizeObserver.observe(parentElement);
1474
+ checkDevice(parentElement);
1475
+ }
1476
+ }, []);
1477
+ return device;
1478
+ };
1479
+ const wrapTo = (value, until) => `${value}${until}`;
1480
+ const toPx = (key) => key.startsWith("px_");
1481
+ const toPercent = (key) => key.startsWith("percent_");
1482
+ const formatRule = (key, value) => {
1483
+ let newKey = key;
1484
+ let newValue = value;
1485
+ if (toPx(newKey)) {
1486
+ newKey = newKey.replace("px_", "");
1487
+ newValue = wrapTo(value, "px");
1488
+ }
1489
+ if (toPercent(newKey)) {
1490
+ newKey = newKey.replace("percent_", "");
1491
+ newValue = wrapTo(value, "%");
1492
+ }
1493
+ return {
1494
+ key: newKey,
1495
+ value: newValue
1496
+ };
1497
+ };
1498
+ const DEFAULT_TO_PX = ["borderWidth", "borderLeftWidth", "borderRightWidth", "borderTopWidth", "borderBottomWidth", "minHeight", "minWidth", "maxWidth", "maxHeight", "fontSize", "height", "width", "letterSpacing", "fontSize", "left", "right", "top", "bottom", "marginTop", "marginBottom", "marginLeft", "marginRight", "paddingTop", "paddingBottom", "paddingLeft", "paddingRight"];
1499
+ const parseRules = (rules, layer) => {
1500
+ const keys = Object.keys(rules);
1501
+ if (keys.includes("innerHTML") || keys.includes("innerText")) {
1502
+ console.warn(`Warning! InnerHTML and innerText is deprecated. Use "children" property.`, layer);
1503
+ }
1504
+ if (typeof rules !== "object") {
1505
+ return rules;
1506
+ }
1507
+ if ("typography" in rules && "accentTypography" in rules) {
1508
+ const typography = rules.typography;
1509
+ const accentTypography = rules.accentTypography;
1510
+ rules = {
1511
+ ...rules,
1512
+ ...typography,
1513
+ "--font-family": accentTypography.fontFamily,
1514
+ "--accent-color": accentTypography.color,
1515
+ "px_--accent-size": accentTypography.fontSize
1516
+ };
1517
+ }
1518
+ return Object.entries(rules).reduce((acc, [propKey, propValue]) => {
1519
+ if (DEFAULT_TO_PX.includes(propKey)) {
1520
+ propValue = wrapTo(propValue, "px");
1521
+ }
1522
+ const {
1523
+ key,
1524
+ value
1525
+ } = formatRule(propKey, propValue);
1526
+ acc[key] = value;
1527
+ if (key === "innerHTML") {
1528
+ acc.innerHTML = isValue(value) ? `${value}` : "";
1529
+ }
1530
+ if (key === "innerText") {
1531
+ acc.innerText = isValue(value) ? `${value}` : "";
1532
+ }
1533
+ if (key === "children") {
1534
+ acc.children = typeof value === "string" ? isValue(value) ? `${value}` : "" : value;
1535
+ }
1536
+ if (key === "innerHTML" || key === "innerText" || key === "children") {
1537
+ if (typeof value === "string" && value.length === 0) {
1538
+ acc.display = "none";
1539
+ } else if (isEmptyValue(value)) {
1540
+ acc.display = "none";
1541
+ }
1542
+ }
1543
+ if (key.includes("borderWidth")) {
1544
+ acc.borderStyle = "solid";
1545
+ }
1546
+ if (key === "corner") {
1547
+ acc.borderRadius = wrapTo(value, "px");
1548
+ }
1549
+ if (key === "backgroundFit") {
1550
+ acc.backgroundSize = value;
1551
+ }
1552
+ if (key === "backgroundImage" && isValue(value)) {
1553
+ acc.backgroundImage = `url(${value})`;
1554
+ acc.backgroundRepeat = "no-repeat";
1555
+ }
1556
+ if (key === "backgroundColorOpacity" && isValue(acc.backgroundColorOpacity) && isValue(acc.backgroundColor)) {
1557
+ const rgb = hexToRgb(acc.backgroundColor);
1558
+ if (rgb) {
1559
+ acc.backgroundColor = rgbToRgba(`rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`, +acc.backgroundColorOpacity / 100);
1560
+ }
1561
+ }
1562
+ if (key === "isBold") {
1563
+ acc.fontWeight = value ? "bold" : "initial";
1564
+ }
1565
+ if (key === "isItalic") {
1566
+ acc.fontStyle = value ? "italic" : "initial";
1567
+ }
1568
+ if (key === "isThrough") {
1569
+ acc.textDecoration = value ? "line-through" : "initial";
1570
+ }
1571
+ return acc;
1572
+ }, rules);
1573
+ };
1574
+ const isValidRule = (rule) => typeof rule === "object" && !Array.isArray(rule) && "parent" in rule;
1575
+ const useParseRules = (state) => Object.entries(state).reduce((acc, [layer, rule]) => {
1576
+ acc[layer] = isValidRule(rule) ? parseRules({
1577
+ ...state[layer]
1578
+ }, layer) : rule;
1579
+ return acc;
1580
+ }, {});
1581
+ const DisplayText = ({
1582
+ children,
1583
+ ...rest
1584
+ }) => {
1585
+ var _a;
1586
+ const formatValue = (_a = children == null ? void 0 : children.replace("script", "")) == null ? void 0 : _a.replace(/{{(.*?)}}/g, `<span>$1</span>`);
1587
+ return o("div", {
1588
+ ...rest,
1589
+ dangerouslySetInnerHTML: {
1590
+ __html: formatValue
1591
+ }
1592
+ });
1593
+ };
1594
+ const useToggle = () => {
1595
+ const [isOpen, setIsOpen] = h(false);
1596
+ return [isOpen, () => setIsOpen((prev) => !prev)];
1597
+ };
1598
+ const CloseIcon = () => o("svg", {
1599
+ xmlns: "http://www.w3.org/2000/svg",
1600
+ width: "20",
1601
+ height: "20",
1602
+ viewBox: "0 0 24 24",
1603
+ children: o("path", {
1604
+ d: "M17.659 4.929a1 1 0 1 1 1.414 1.414L13.416 12l5.657 5.657a1 1 0 0 1-1.415 1.414l-5.656-5.657-5.657 5.657a1 1 0 0 1-1.414-1.414L10.587 12 4.931 6.343A1 1 0 1 1 6.345 4.93l5.657 5.657 5.656-5.657Z",
1605
+ fill: "currentColor"
1606
+ })
1607
+ });
1608
+ const GiftIcon = () => o("svg", {
1609
+ viewBox: "0 0 16 16",
1610
+ children: o("path", {
1611
+ fill: "currentColor",
1612
+ fillRule: "evenodd",
1613
+ d: "M2.13 8H7v7.31H3.22a1.09 1.09 0 01-1.09-1.09zM9 15.34h3.81a1.09 1.09 0 001.09-1.09V8H9zm5.8-9.94v1.19a.48.48 0 01-.48.48H1.71a.48.48 0 01-.48-.48V5.4c0-.596.484-1.08 1.08-1.08H5a2.48 2.48 0 01-1.47-1.65 1.62 1.62 0 01.26-1.4 1.57 1.57 0 011-.58c.11-.01.22-.01.33 0a2.5 2.5 0 012 1A9 9 0 018 3.22a10.38 10.38 0 01.91-1.54 2.49 2.49 0 011.93-1h.36c.369.065.702.26.94.55.31.407.414.936.28 1.43a2.48 2.48 0 01-1.45 1.64h2.77a1.08 1.08 0 011.03 1.1zM8.66 4a9.81 9.81 0 001.9-.55 1.52 1.52 0 00.88-1 .68.68 0 00-.1-.59.6.6 0 00-.34-.22.58.58 0 00-.18 0 1.52 1.52 0 00-1.17.63A9.06 9.06 0 008.66 4zm-3.32-.58A9.62 9.62 0 007.25 4a8.59 8.59 0 00-1-1.72 1.51 1.51 0 00-1.18-.63h-.13a.66.66 0 00-.39.22.66.66 0 00-.09.57c.13.443.453.804.88.98z"
1614
+ })
1615
+ });
1616
+ const animationsMap = (animations) => ({
1617
+ fade: `${animations.fade} 2s linear infinite`,
1618
+ pulse: `${animations.pulse} .3s linear 0s infinite alternate forwards`,
1619
+ wiggle: `${animations.wiggle} 2s linear infinite`,
1620
+ gradient: `${animations.gradient} 3s ease infinite`
1621
+ });
1622
+ const useGiftRules = (deviceState, animations) => {
1623
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
1624
+ const fullAnimations = animationsMap(animations);
1625
+ const rules = useParseRules(deviceState);
1626
+ const hasIcon = (_a = rules == null ? void 0 : rules.icon) == null ? void 0 : _a.hasIcon;
1627
+ const arrowRules = {
1628
+ left: `${+(((_b = deviceState == null ? void 0 : deviceState.container) == null ? void 0 : _b.left) || 0) * -1 + 8}px`,
1629
+ backgroundColor: (_c = rules == null ? void 0 : rules.container) == null ? void 0 : _c.backgroundColor,
1630
+ borderTopWidth: (_d = rules == null ? void 0 : rules.container) == null ? void 0 : _d.borderWidth,
1631
+ borderTopColor: (_e = rules == null ? void 0 : rules.container) == null ? void 0 : _e.borderColor,
1632
+ borderTopStyle: "solid",
1633
+ borderLeftWidth: (_f = rules == null ? void 0 : rules.container) == null ? void 0 : _f.borderWidth,
1634
+ borderLeftColor: (_g = rules == null ? void 0 : rules.container) == null ? void 0 : _g.borderColor,
1635
+ borderLeftStyle: "solid"
1636
+ };
1637
+ const bodyRules = {
1638
+ left: (_h = rules == null ? void 0 : rules.container) == null ? void 0 : _h.left
1639
+ };
1640
+ const allAnimations = (((_i = rules == null ? void 0 : rules.icon) == null ? void 0 : _i.animations) || []).map((animation) => fullAnimations[animation]).join(", ");
1641
+ const backgroundStyles = isValue((_j = rules == null ? void 0 : rules.icon) == null ? void 0 : _j.gradientColor) && ((_k = rules == null ? void 0 : rules.icon) == null ? void 0 : _k.animations.includes("gradient")) ? {
1642
+ background: `linear-gradient(-90deg, ${(_l = rules.icon) == null ? void 0 : _l.backgroundColor} 0%, ${(_m = rules == null ? void 0 : rules.icon) == null ? void 0 : _m.gradientColor} 100%) 0% 0% / 400% 400%`,
1643
+ backgroundSize: "400% 400%"
1644
+ } : {};
1645
+ const iconRules = {
1646
+ ...(rules == null ? void 0 : rules.icon) || {},
1647
+ animation: allAnimations,
1648
+ ...backgroundStyles
1649
+ };
1650
+ return {
1651
+ hasIcon,
1652
+ arrowRules,
1653
+ bodyRules,
1654
+ iconRules
1655
+ };
1656
+ };
1657
+ const backgroundOptions = ["backgroundColor", "backgroundColorOpacity", "backgroundImage", "backgroundFit"];
1658
+ const spacingOptions = ["marginTop", "marginBottom", "marginLeft", "marginRight", "paddingTop", "paddingBottom", "paddingLeft", "paddingRight"];
1659
+ const noopYaMetrika = (goal) => console.log(`Noop YaMektika reach goal: ${goal}`);
1660
+ const noopAdFox = (goal) => console.log(`Noop AdFox reach goal: ${goal}`);
1661
+ const useMetrics = (state, layerName = "root") => {
1662
+ const saveMetrics = _$1();
1663
+ const yaReachGoal = state.yaReachGoal || noopYaMetrika;
1664
+ const adfoxReachGoal = state.adfoxReachGoal || noopAdFox;
1665
+ const metrics = pick(state[layerName], "yaShow", "yaClick", "adfoxShow", "adfoxClick");
1666
+ p(() => {
1667
+ if (!isJsonSame(saveMetrics.current, metrics)) {
1668
+ if (metrics.yaShow) {
1669
+ yaReachGoal(metrics.yaShow);
1670
+ }
1671
+ if (metrics.yaShow) {
1672
+ adfoxReachGoal(metrics.adfoxShow);
1673
+ }
1674
+ }
1675
+ saveMetrics.current = metrics;
1676
+ }, [metrics]);
1677
+ return () => {
1678
+ if (metrics.yaClick) {
1679
+ yaReachGoal(metrics.yaClick);
1680
+ }
1681
+ if (metrics.adfoxClick) {
1682
+ adfoxReachGoal(metrics.adfoxClick);
1683
+ }
1684
+ };
1685
+ };
1686
+ const useExtractFonts = (state) => {
1687
+ const fonts = /* @__PURE__ */ new Set([]);
1688
+ iterator(state, (key, value) => {
1689
+ if (key === "fontFamily") {
1690
+ fonts.add(value);
1691
+ }
1692
+ return value;
1693
+ });
1694
+ const fontLinks = F$1(() => Array.from(fonts.values()).map((font) => ({
1695
+ rel: "stylesheet",
1696
+ href: `https://fonts.googleapis.com/css?family=${font}:300,400,500,700&display=swap`
1697
+ })), [fonts]);
1698
+ p(() => {
1699
+ fontLinks.forEach((link) => injectLink(link));
1700
+ }, [fontLinks]);
1701
+ };
1702
+ const SimpleGift = () => {
1703
+ var _a, _b, _c, _d, _e, _f, _g;
1704
+ const rootRef = _$1(null);
1705
+ const [legalIsOpen, toggleLegalIsOpen] = useToggle();
1706
+ const state = useCurrentState();
1707
+ const device = useContainerDevice({
1708
+ targetRef: rootRef
1709
+ });
1710
+ const deviceState = useGetRules(state, device);
1711
+ const rules = useParseRules(deviceState);
1712
+ const onClick = useMetrics(deviceState);
1713
+ const {
1714
+ isOpen,
1715
+ onToggle
1716
+ } = useGiftOpen((_a = deviceState == null ? void 0 : deviceState.container) == null ? void 0 : _a.delay);
1717
+ const {
1718
+ hasIcon,
1719
+ iconRules,
1720
+ bodyRules,
1721
+ arrowRules
1722
+ } = useGiftRules(deviceState, {
1723
+ fade: styles$d.fadein,
1724
+ pulse: styles$d.pulse,
1725
+ wiggle: styles$d.wiggle,
1726
+ gradient: styles$d.gradient
1727
+ });
1728
+ useExtractFonts(deviceState);
1729
+ return o("div", {
1730
+ className: styles$d.root,
1731
+ ref: rootRef,
1732
+ children: [o("div", {
1733
+ className: styles$d.icon,
1734
+ style: iconRules,
1735
+ onClick: onToggle,
1736
+ children: hasIcon && o("div", {
1737
+ className: styles$d.iconTarget,
1738
+ children: o(GiftIcon, {})
1739
+ })
1740
+ }), o("div", {
1741
+ className: classNames(styles$d.body, {
1742
+ [styles$d.bodyOpen]: isOpen
1743
+ }),
1744
+ style: bodyRules,
1745
+ children: [o("div", {
1746
+ className: styles$d.arrow,
1747
+ style: arrowRules
1748
+ }), o("div", {
1749
+ className: styles$d.close,
1750
+ style: rules.close,
1751
+ onClick: onToggle,
1752
+ children: o(CloseIcon, {})
1753
+ }), o("div", {
1754
+ className: styles$d.container,
1755
+ style: rules.container,
1756
+ children: [o("a", {
1757
+ href: (_b = rules.root) == null ? void 0 : _b.offer,
1758
+ target: "_blank",
1759
+ rel: "nofollow noopener noreferrer",
1760
+ onClick,
1761
+ children: [o("div", {
1762
+ className: styles$d.inner,
1763
+ children: [o("div", {
1764
+ className: styles$d.logo,
1765
+ style: rules.logo
1766
+ }), o(DisplayText, {
1767
+ className: styles$d.text,
1768
+ style: rules.text,
1769
+ children: (_c = rules == null ? void 0 : rules.text) == null ? void 0 : _c.children
1770
+ })]
1771
+ }), o("div", {
1772
+ className: classNames(styles$d.button, {
1773
+ [styles$d.buttonAnimated]: rules.button.isAnimated
1774
+ }),
1775
+ style: rules.button,
1776
+ children: (_d = rules.button) == null ? void 0 : _d.children
1777
+ })]
1778
+ }), o("div", {
1779
+ className: classNames(styles$d.legal, {
1780
+ [styles$d.legalOpen]: legalIsOpen
1781
+ }),
1782
+ style: rules.legal,
1783
+ children: o("span", {
1784
+ className: styles$d.legalText,
1785
+ children: [o("span", {
1786
+ children: (_e = rules == null ? void 0 : rules.legal) == null ? void 0 : _e.children
1787
+ }), o("span", {
1788
+ className: styles$d.legalButton,
1789
+ onClick: toggleLegalIsOpen,
1790
+ children: legalIsOpen ? (_f = rules == null ? void 0 : rules.legal) == null ? void 0 : _f.buttonOpenText : (_g = rules == null ? void 0 : rules.legal) == null ? void 0 : _g.buttonHideText
1791
+ })]
1792
+ })
1793
+ })]
1794
+ })]
1795
+ })]
1796
+ });
1797
+ };
1798
+ const index$6 = render(o(SimpleGift, {}));
1799
+ const root$c = "_root_107vu_1";
1800
+ const icon = "_icon_107vu_5";
1801
+ const iconTarget = "_iconTarget_107vu_17";
1802
+ const body$5 = "_body_107vu_22";
1803
+ const bodyOpen = "_bodyOpen_107vu_30";
1804
+ const complexGift_in = "_complexGift_in_107vu_1";
1805
+ const arrow = "_arrow_107vu_43";
1806
+ const container$1 = "_container_107vu_53";
1807
+ const promotion$1 = "_promotion_107vu_58";
1808
+ const close = "_close_107vu_66";
1809
+ const head$1 = "_head_107vu_80";
1810
+ const headIcon = "_headIcon_107vu_87";
1811
+ const headTitle = "_headTitle_107vu_93";
1812
+ const inner = "_inner_107vu_100";
1813
+ const fadein = "_fadein_107vu_1";
1814
+ const pulse = "_pulse_107vu_1";
1815
+ const gradient = "_gradient_107vu_1";
1816
+ const wiggle = "_wiggle_107vu_1";
1817
+ const styles$c = {
1818
+ root: root$c,
1819
+ icon,
1820
+ iconTarget,
1821
+ body: body$5,
1822
+ bodyOpen,
1823
+ complexGift_in,
1824
+ arrow,
1825
+ container: container$1,
1826
+ promotion: promotion$1,
1827
+ close,
1828
+ head: head$1,
1829
+ headIcon,
1830
+ headTitle,
1831
+ inner,
1832
+ fadein,
1833
+ pulse,
1834
+ gradient,
1835
+ wiggle
1836
+ };
1837
+ const root$b = "_root_1p6us_1";
1838
+ const body$4 = "_body_1p6us_30";
1839
+ const bodyInner = "_bodyInner_1p6us_38";
1840
+ const line = "_line_1p6us_43";
1841
+ const text$3 = "_text_1p6us_53";
1842
+ const button$5 = "_button_1p6us_69";
1843
+ const logo$5 = "_logo_1p6us_81";
1844
+ const variant2$1 = "_variant2_1p6us_87";
1845
+ const buttonText = "_buttonText_1p6us_91";
1846
+ const legal$4 = "_legal_1p6us_107";
1847
+ const styles$b = {
1848
+ root: root$b,
1849
+ body: body$4,
1850
+ bodyInner,
1851
+ line,
1852
+ text: text$3,
1853
+ button: button$5,
1854
+ logo: logo$5,
1855
+ variant2: variant2$1,
1856
+ buttonText,
1857
+ legal: legal$4
1858
+ };
1859
+ const BonusCard$1 = () => {
1860
+ var _a, _b, _c, _d, _e;
1861
+ const state = useCurrentState();
1862
+ const rules = useParseRules(state);
1863
+ const onClick = useMetrics(state);
1864
+ return o("a", {
1865
+ href: (_a = rules.root) == null ? void 0 : _a.offer,
1866
+ target: "_blank",
1867
+ rel: "nofollow noopener noreferrer",
1868
+ className: classNames(styles$b.root, {
1869
+ [styles$b.variant2]: ((_b = rules.root) == null ? void 0 : _b.variant) === "variant2"
1870
+ }),
1871
+ style: rules.root,
1872
+ onClick,
1873
+ children: [o("div", {
1874
+ className: styles$b.body,
1875
+ children: [o("div", {
1876
+ className: styles$b.line,
1877
+ style: rules.line
1878
+ }), o("div", {
1879
+ className: styles$b.bodyInner,
1880
+ children: [o("div", {
1881
+ className: styles$b.logo,
1882
+ style: rules.logo
1883
+ }), o("div", {
1884
+ className: styles$b.text,
1885
+ style: rules.text,
1886
+ children: o(DisplayText, {
1887
+ children: (_c = rules.text) == null ? void 0 : _c.children
1888
+ })
1889
+ })]
1890
+ }), o("div", {
1891
+ className: styles$b.button,
1892
+ style: rules.button,
1893
+ children: [o("div", {
1894
+ className: styles$b.logo,
1895
+ style: rules.logo
1896
+ }), o("div", {
1897
+ className: styles$b.buttonText,
1898
+ children: (_d = rules.button) == null ? void 0 : _d.children
1899
+ })]
1900
+ })]
1901
+ }), o("div", {
1902
+ className: styles$b.legal,
1903
+ style: rules.legal,
1904
+ children: (_e = rules.legal) == null ? void 0 : _e.children
1905
+ })]
1906
+ });
1907
+ };
1908
+ const ComplexGift = () => {
1909
+ var _a, _b;
1910
+ const rootRef = _$1(null);
1911
+ const {
1912
+ isOpen,
1913
+ onToggle
1914
+ } = useGiftOpen();
1915
+ const state = useCurrentState();
1916
+ const device = useContainerDevice({
1917
+ targetRef: rootRef
1918
+ });
1919
+ const deviceState = useGetRules(state, device);
1920
+ const rules = useParseRules(deviceState);
1921
+ useExtractFonts(deviceState);
1922
+ const {
1923
+ hasIcon,
1924
+ iconRules,
1925
+ bodyRules,
1926
+ arrowRules
1927
+ } = useGiftRules(deviceState, {
1928
+ fade: styles$c.fadein,
1929
+ pulse: styles$c.pulse,
1930
+ wiggle: styles$c.wiggle,
1931
+ gradient: styles$c.gradient
1932
+ });
1933
+ return o("div", {
1934
+ ref: rootRef,
1935
+ className: styles$c.root,
1936
+ children: [o("div", {
1937
+ className: styles$c.icon,
1938
+ style: iconRules,
1939
+ onClick: onToggle,
1940
+ children: hasIcon && o("div", {
1941
+ className: styles$c.iconTarget,
1942
+ children: o(GiftIcon, {})
1943
+ })
1944
+ }), o("div", {
1945
+ className: classNames(styles$c.body, {
1946
+ [styles$c.bodyOpen]: isOpen
1947
+ }),
1948
+ style: bodyRules,
1949
+ children: [o("div", {
1950
+ className: styles$c.arrow,
1951
+ style: arrowRules
1952
+ }), o("div", {
1953
+ className: styles$c.container,
1954
+ style: rules.container,
1955
+ children: [o("div", {
1956
+ className: styles$c.close,
1957
+ style: rules.close,
1958
+ onClick: onToggle,
1959
+ children: o(CloseIcon, {})
1960
+ }), o("div", {
1961
+ className: styles$c.promotion,
1962
+ style: rules.promotion,
1963
+ children: (_a = rules.promotion) == null ? void 0 : _a.children
1964
+ }), o("div", {
1965
+ className: styles$c.head,
1966
+ style: rules.title,
1967
+ children: [o("div", {
1968
+ className: styles$c.headIcon,
1969
+ children: o(GiftIcon, {})
1970
+ }), o("div", {
1971
+ className: styles$c.headTitle,
1972
+ children: (_b = rules.title) == null ? void 0 : _b.children
1973
+ })]
1974
+ }), o("div", {
1975
+ className: styles$c.inner,
1976
+ children: (rules.children || []).map((child) => o(StateContext, {
1977
+ value: child,
1978
+ children: o(BonusCard$1, {})
1979
+ }))
1980
+ })]
1981
+ })]
1982
+ })]
1983
+ });
1984
+ };
1985
+ const index$5 = render(o(ComplexGift, {}));
1986
+ const root$a = "_root_1bgnc_1";
1987
+ const laptop$3 = "_laptop_1bgnc_11";
1988
+ const tablet$2 = "_tablet_1bgnc_11";
1989
+ const desktop$7 = "_desktop_1bgnc_16";
1990
+ const body$3 = "_body_1bgnc_21";
1991
+ const logo$4 = "_logo_1bgnc_32";
1992
+ const text$2 = "_text_1bgnc_38";
1993
+ const button$4 = "_button_1bgnc_42";
1994
+ const legal$3 = "_legal_1bgnc_57";
1995
+ const styles$a = {
1996
+ root: root$a,
1997
+ laptop: laptop$3,
1998
+ tablet: tablet$2,
1999
+ desktop: desktop$7,
2000
+ body: body$3,
2001
+ logo: logo$4,
2002
+ text: text$2,
2003
+ button: button$4,
2004
+ legal: legal$3
2005
+ };
2006
+ const switchTextAlignToFlex = (textAlign) => textAlign ? {
2007
+ left: "flex-start",
2008
+ center: "center",
2009
+ right: "flex-end"
2010
+ }[textAlign] : textAlign;
2011
+ const root$9 = "_root_2ic16_1";
2012
+ const styles$9 = {
2013
+ root: root$9
2014
+ };
2015
+ const Line = () => {
2016
+ var _a;
2017
+ const state = useCurrentState();
2018
+ const rules = useParseRules(state);
2019
+ return o("div", {
2020
+ className: styles$9.root,
2021
+ style: rules.root,
2022
+ children: o(DisplayText, {
2023
+ children: (_a = rules == null ? void 0 : rules.root) == null ? void 0 : _a.children
2024
+ })
2025
+ });
2026
+ };
2027
+ const SimplePopup$2 = () => {
2028
+ var _a, _b, _c, _d, _e, _f;
2029
+ const rootRef = _$1(null);
2030
+ const device = useContainerDevice({
2031
+ targetRef: rootRef
2032
+ });
2033
+ const state = useCurrentState();
2034
+ const deviceState = useGetRules(state, device);
2035
+ const onClick = useMetrics(deviceState);
2036
+ set(deviceState, "button.percent_width", (_a = deviceState == null ? void 0 : deviceState.button) == null ? void 0 : _a.width);
2037
+ set(deviceState, "legal.percent_width", (_b = deviceState == null ? void 0 : deviceState.legal) == null ? void 0 : _b.width);
2038
+ const rules = useParseRules(deviceState);
2039
+ const bodyRules = {
2040
+ alignItems: switchTextAlignToFlex((_c = rules.root) == null ? void 0 : _c.align)
2041
+ };
2042
+ const buttonRules = {
2043
+ ...rules == null ? void 0 : rules.button,
2044
+ justifyContent: switchTextAlignToFlex((_d = rules.root) == null ? void 0 : _d.textAlign)
2045
+ };
2046
+ const legalRules = {
2047
+ ...rules == null ? void 0 : rules.legal,
2048
+ justifyContent: switchTextAlignToFlex((_e = rules.root) == null ? void 0 : _e.textAlign)
2049
+ };
2050
+ return o("a", {
2051
+ ref: rootRef,
2052
+ href: (_f = rules.root) == null ? void 0 : _f.offer,
2053
+ target: "_blank",
2054
+ rel: "nofollow noopener noreferrer",
2055
+ className: classNames(styles$a.root, {
2056
+ [styles$a.desktop]: device === "desktop",
2057
+ [styles$a.tablet]: device === "tablet",
2058
+ [styles$a.laptop]: device === "laptop"
2059
+ }),
2060
+ style: rules.root,
2061
+ onClick,
2062
+ children: o("div", {
2063
+ className: styles$a.body,
2064
+ style: bodyRules,
2065
+ children: [o("div", {
2066
+ className: styles$a.logo,
2067
+ style: rules.logo
2068
+ }), o("div", {
2069
+ className: styles$a.text,
2070
+ children: ((rules == null ? void 0 : rules.children) || []).map((el) => o(StateContext, {
2071
+ value: el,
2072
+ children: o(Line, {})
2073
+ }))
2074
+ }), o("div", {
2075
+ className: styles$a.button,
2076
+ style: buttonRules,
2077
+ children: buttonRules == null ? void 0 : buttonRules.children
2078
+ }), o("div", {
2079
+ className: styles$a.legal,
2080
+ style: legalRules,
2081
+ children: legalRules == null ? void 0 : legalRules.children
2082
+ })]
2083
+ })
2084
+ });
2085
+ };
2086
+ const index$4 = render(o(SimplePopup$2, {}));
2087
+ const root$8 = "_root_13k8c_1";
2088
+ const desktop$6 = "_desktop_13k8c_13";
2089
+ const title$2 = "_title_13k8c_18";
2090
+ const wrapper$1 = "_wrapper_13k8c_33";
2091
+ const styles$8 = {
2092
+ root: root$8,
2093
+ desktop: desktop$6,
2094
+ title: title$2,
2095
+ wrapper: wrapper$1
2096
+ };
2097
+ const root$7 = "_root_17kc6_1";
2098
+ const desktop$5 = "_desktop_17kc6_10";
2099
+ const header = "_header_17kc6_15";
2100
+ const logo$3 = "_logo_17kc6_26";
2101
+ const container = "_container_17kc6_32";
2102
+ const body$2 = "_body_17kc6_43";
2103
+ const text$1 = "_text_17kc6_60";
2104
+ const button$3 = "_button_17kc6_83";
2105
+ const legal$2 = "_legal_17kc6_101";
2106
+ const styles$7 = {
2107
+ root: root$7,
2108
+ desktop: desktop$5,
2109
+ header,
2110
+ logo: logo$3,
2111
+ container,
2112
+ body: body$2,
2113
+ text: text$1,
2114
+ button: button$3,
2115
+ legal: legal$2
2116
+ };
2117
+ const Bonus$1 = () => {
2118
+ var _a, _b, _c, _d;
2119
+ const state = useCurrentState();
2120
+ const rules = useParseRules(state);
2121
+ const device = (state == null ? void 0 : state.device) || "desktop";
2122
+ const onClick = useMetrics(state);
2123
+ return o("a", {
2124
+ href: (_a = rules.root) == null ? void 0 : _a.offer,
2125
+ target: "_blank",
2126
+ rel: "nofollow noopener noreferrer",
2127
+ className: classNames(styles$7.root, {
2128
+ [styles$7.desktop]: device === "desktop"
2129
+ }),
2130
+ style: omit(rules.root, ...spacingOptions),
2131
+ onClick,
2132
+ children: [o("div", {
2133
+ className: styles$7.header,
2134
+ style: rules.header,
2135
+ children: o("div", {
2136
+ className: styles$7.logo,
2137
+ style: rules.logo
2138
+ })
2139
+ }), o("div", {
2140
+ className: styles$7.container,
2141
+ style: pick(rules.root, ...spacingOptions),
2142
+ children: [o("div", {
2143
+ className: styles$7.body,
2144
+ children: [o("div", {
2145
+ className: styles$7.logo
2146
+ }), o(DisplayText, {
2147
+ className: styles$7.text,
2148
+ style: rules.text,
2149
+ children: (_b = rules.text) == null ? void 0 : _b.children
2150
+ })]
2151
+ }), o("div", {
2152
+ children: [o("div", {
2153
+ className: styles$7.button,
2154
+ style: rules.button,
2155
+ children: (_c = rules.button) == null ? void 0 : _c.children
2156
+ }), o("div", {
2157
+ className: styles$7.legal,
2158
+ style: rules.legal,
2159
+ children: (_d = rules.legal) == null ? void 0 : _d.children
2160
+ })]
2161
+ })]
2162
+ })]
2163
+ });
2164
+ };
2165
+ const SimplePopup$1 = () => {
2166
+ var _a;
2167
+ const rootRef = _$1(null);
2168
+ const device = useContainerDevice({
2169
+ targetRef: rootRef
2170
+ });
2171
+ const state = useCurrentState();
2172
+ const deviceState = useGetRules(state, device);
2173
+ const rules = useParseRules(deviceState);
2174
+ useExtractFonts(deviceState);
2175
+ return o("div", {
2176
+ ref: rootRef,
2177
+ className: classNames(styles$8.root, {
2178
+ [styles$8.desktop]: device === "desktop"
2179
+ }),
2180
+ style: rules.root,
2181
+ children: [o("div", {
2182
+ className: styles$8.title,
2183
+ style: rules.title,
2184
+ children: (_a = rules.title) == null ? void 0 : _a.children
2185
+ }), o("div", {
2186
+ className: styles$8.wrapper,
2187
+ children: (rules.children || []).map((child) => o(StateContext, {
2188
+ value: {
2189
+ ...child,
2190
+ device
2191
+ },
2192
+ children: o(Bonus$1, {})
2193
+ }))
2194
+ })]
2195
+ });
2196
+ };
2197
+ const index$3 = render(o(SimplePopup$1, {}));
2198
+ const root$6 = "_root_i7e17_1";
2199
+ const laptop$2 = "_laptop_i7e17_11";
2200
+ const tablet$1 = "_tablet_i7e17_12";
2201
+ const desktop$4 = "_desktop_i7e17_17";
2202
+ const body$1 = "_body_i7e17_22";
2203
+ const head = "_head_i7e17_34";
2204
+ const title$1 = "_title_i7e17_44";
2205
+ const logo$2 = "_logo_i7e17_57";
2206
+ const wrapper = "_wrapper_i7e17_63";
2207
+ const text = "_text_i7e17_70";
2208
+ const button$2 = "_button_i7e17_85";
2209
+ const buttonHead = "_buttonHead_i7e17_100";
2210
+ const buttonTarget = "_buttonTarget_i7e17_119";
2211
+ const legal$1 = "_legal_i7e17_135";
2212
+ const styles$6 = {
2213
+ root: root$6,
2214
+ laptop: laptop$2,
2215
+ tablet: tablet$1,
2216
+ desktop: desktop$4,
2217
+ body: body$1,
2218
+ head,
2219
+ title: title$1,
2220
+ logo: logo$2,
2221
+ wrapper,
2222
+ text,
2223
+ button: button$2,
2224
+ buttonHead,
2225
+ buttonTarget,
2226
+ legal: legal$1
2227
+ };
2228
+ const root$5 = "_root_10yn9_1";
2229
+ const left$1 = "_left_10yn9_8";
2230
+ const desktop$3 = "_desktop_10yn9_15";
2231
+ const teams = "_teams_10yn9_19";
2232
+ const logo$1 = "_logo_10yn9_25";
2233
+ const league = "_league_10yn9_31";
2234
+ const name = "_name_10yn9_36";
2235
+ const right$1 = "_right_10yn9_42";
2236
+ const odd$1 = "_odd_10yn9_53";
2237
+ const oddLabel$1 = "_oddLabel_10yn9_66";
2238
+ const oddValue = "_oddValue_10yn9_75";
2239
+ const team$1 = "_team_10yn9_19";
2240
+ const teamLogo$1 = "_teamLogo_10yn9_99";
2241
+ const teamName$1 = "_teamName_10yn9_105";
2242
+ const styles$5 = {
2243
+ root: root$5,
2244
+ left: left$1,
2245
+ desktop: desktop$3,
2246
+ teams,
2247
+ logo: logo$1,
2248
+ league,
2249
+ name,
2250
+ right: right$1,
2251
+ odd: odd$1,
2252
+ oddLabel: oddLabel$1,
2253
+ oddValue,
2254
+ team: team$1,
2255
+ teamLogo: teamLogo$1,
2256
+ teamName: teamName$1
2257
+ };
2258
+ const Match = () => {
2259
+ var _a, _b, _c, _d, _e, _f, _g;
2260
+ const state = useCurrentState();
2261
+ const rules = useParseRules(state);
2262
+ const device = (state == null ? void 0 : state.device) || "desktop";
2263
+ return o("div", {
2264
+ className: classNames(styles$5.root, {
2265
+ [styles$5.desktop]: device === "desktop"
2266
+ }),
2267
+ children: [o("div", {
2268
+ className: styles$5.left,
2269
+ children: [o("div", {
2270
+ className: styles$5.teams,
2271
+ children: [o("div", {
2272
+ className: styles$5.logo
2273
+ }), o("div", {
2274
+ className: styles$5.logo
2275
+ })]
2276
+ }), o("div", {
2277
+ className: styles$5.body,
2278
+ children: [o("div", {
2279
+ className: styles$5.league,
2280
+ style: rules.league,
2281
+ children: (_a = rules.league) == null ? void 0 : _a.children
2282
+ }), o("div", {
2283
+ className: styles$5.name,
2284
+ style: rules.teams,
2285
+ children: [(_b = rules.teams) == null ? void 0 : _b.teamA, " — ", (_c = rules.teams) == null ? void 0 : _c.teamB]
2286
+ })]
2287
+ })]
2288
+ }), o("div", {
2289
+ className: styles$5.right,
2290
+ children: [o("div", {
2291
+ className: styles$5.team,
2292
+ children: [o("div", {
2293
+ className: styles$5.teamLogo
2294
+ }), o("div", {
2295
+ className: styles$5.teamName,
2296
+ style: rules.teams,
2297
+ children: (_d = rules.teams) == null ? void 0 : _d.teamA
2298
+ })]
2299
+ }), o("div", {
2300
+ className: styles$5.odd,
2301
+ children: [o("div", {
2302
+ className: styles$5.oddLabel,
2303
+ style: rules.oddLabel,
2304
+ children: (_e = rules.oddLabel) == null ? void 0 : _e.children
2305
+ }), o("div", {
2306
+ className: styles$5.oddValue,
2307
+ style: rules.oddValue,
2308
+ children: (_f = rules.oddValue) == null ? void 0 : _f.children
2309
+ })]
2310
+ }), o("div", {
2311
+ className: styles$5.team,
2312
+ children: [o("div", {
2313
+ className: styles$5.teamLogo
2314
+ }), o("div", {
2315
+ className: styles$5.teamName,
2316
+ style: rules.teams,
2317
+ children: (_g = rules.teams) == null ? void 0 : _g.teamB
2318
+ })]
2319
+ })]
2320
+ })]
2321
+ });
2322
+ };
2323
+ const SimplePopup = () => {
2324
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
2325
+ const rootRef = _$1(null);
2326
+ const device = useContainerDevice({
2327
+ targetRef: rootRef
2328
+ });
2329
+ const state = useCurrentState();
2330
+ const deviceState = useGetRules(state, device);
2331
+ set(deviceState, "buttonWrapper.percent_width", (_a = deviceState == null ? void 0 : deviceState.buttonWrapper) == null ? void 0 : _a.width);
2332
+ set(deviceState, "legal.percent_width", (_b = deviceState == null ? void 0 : deviceState.legal) == null ? void 0 : _b.width);
2333
+ const rules = useParseRules(deviceState);
2334
+ const onClick = useMetrics(deviceState);
2335
+ const bodyRules = {
2336
+ ...rules.root,
2337
+ alignItems: switchTextAlignToFlex((_c = rules.root) == null ? void 0 : _c.align)
2338
+ };
2339
+ const contentRules = {
2340
+ ...rules.content,
2341
+ alignItems: switchTextAlignToFlex((_d = rules.root) == null ? void 0 : _d.align)
2342
+ };
2343
+ const textRules = {
2344
+ ...rules.text,
2345
+ textAlign: (_e = rules.root) == null ? void 0 : _e.align
2346
+ };
2347
+ const buttonRules = {
2348
+ ...rules == null ? void 0 : rules.button,
2349
+ justifyContent: switchTextAlignToFlex((_f = rules.root) == null ? void 0 : _f.textAlign)
2350
+ };
2351
+ const legalRules = {
2352
+ ...rules == null ? void 0 : rules.legal,
2353
+ justifyContent: switchTextAlignToFlex((_g = rules.root) == null ? void 0 : _g.textAlign)
2354
+ };
2355
+ return o("a", {
2356
+ ref: rootRef,
2357
+ href: (_h = rules.root) == null ? void 0 : _h.offer,
2358
+ target: "_blank",
2359
+ rel: "nofollow noopener noreferrer",
2360
+ className: classNames(styles$6.root, {
2361
+ [styles$6.desktop]: device === "desktop",
2362
+ [styles$6.laptop]: device === "laptop",
2363
+ [styles$6.tablet]: device === "tablet"
2364
+ }),
2365
+ onClick,
2366
+ children: o("div", {
2367
+ className: styles$6.body,
2368
+ style: bodyRules,
2369
+ children: [o("div", {
2370
+ className: styles$6.head,
2371
+ children: [o("div", {
2372
+ className: styles$6.title,
2373
+ style: rules.title,
2374
+ children: (_i = rules.title) == null ? void 0 : _i.children
2375
+ }), o("div", {
2376
+ className: styles$6.logo,
2377
+ style: rules.logo
2378
+ })]
2379
+ }), o("div", {
2380
+ className: styles$6.wrapper,
2381
+ style: contentRules,
2382
+ children: (rules.children || []).map((child) => o(StateContext, {
2383
+ value: {
2384
+ ...child,
2385
+ device
2386
+ },
2387
+ children: o(Match, {})
2388
+ }))
2389
+ }), o(DisplayText, {
2390
+ className: styles$6.text,
2391
+ style: textRules,
2392
+ children: (_j = rules.text) == null ? void 0 : _j.children
2393
+ }), o("div", {
2394
+ className: styles$6.button,
2395
+ style: rules.buttonWrapper,
2396
+ children: [o("div", {
2397
+ className: styles$6.buttonHead,
2398
+ style: rules.buttonHead,
2399
+ children: (_k = rules.buttonHead) == null ? void 0 : _k.children
2400
+ }), o("div", {
2401
+ className: styles$6.buttonTarget,
2402
+ style: buttonRules,
2403
+ children: (_l = rules.button) == null ? void 0 : _l.children
2404
+ })]
2405
+ }), o("div", {
2406
+ className: styles$6.legal,
2407
+ style: legalRules,
2408
+ children: (_m = rules.legal) == null ? void 0 : _m.children
2409
+ })]
2410
+ })
2411
+ });
2412
+ };
2413
+ const index$2 = render(o(SimplePopup, {}));
2414
+ const root$4 = "_root_1slvw_1";
2415
+ const background$1 = "_background_1slvw_20";
2416
+ const body = "_body_1slvw_29";
2417
+ const bookmaker = "_bookmaker_1slvw_39";
2418
+ const button$1 = "_button_1slvw_46";
2419
+ const rowFirst = "_rowFirst_1slvw_60";
2420
+ const rowSecond = "_rowSecond_1slvw_66";
2421
+ const legal = "_legal_1slvw_72";
2422
+ const legalText = "_legalText_1slvw_88";
2423
+ const legalOpen = "_legalOpen_1slvw_98";
2424
+ const legalButton = "_legalButton_1slvw_103";
2425
+ const styles$4 = {
2426
+ root: root$4,
2427
+ background: background$1,
2428
+ body,
2429
+ bookmaker,
2430
+ button: button$1,
2431
+ rowFirst,
2432
+ rowSecond,
2433
+ legal,
2434
+ legalText,
2435
+ legalOpen,
2436
+ legalButton
2437
+ };
2438
+ const Bonus = () => {
2439
+ var _a, _b, _c, _d, _e, _f, _g;
2440
+ const state = useCurrentState();
2441
+ const rules = useParseRules(state);
2442
+ const [isOpen, toggleIsOpen] = useToggle();
2443
+ const onClick = useMetrics(state);
2444
+ return o("div", {
2445
+ className: styles$4.root,
2446
+ style: rules.root,
2447
+ children: [o("div", {
2448
+ className: styles$4.background,
2449
+ style: rules.background
2450
+ }), o("a", {
2451
+ href: (_a = rules.root) == null ? void 0 : _a.offer,
2452
+ target: "_blank",
2453
+ rel: "nofollow noopener noreferrer",
2454
+ className: styles$4.body,
2455
+ onClick,
2456
+ children: [o("div", {
2457
+ children: [o("div", {
2458
+ className: styles$4.rowFirst,
2459
+ style: rules.rowFirst,
2460
+ children: (_b = rules.rowFirst) == null ? void 0 : _b.children
2461
+ }), o("div", {
2462
+ className: styles$4.rowSecond,
2463
+ style: rules.rowSecond,
2464
+ children: (_c = rules.rowSecond) == null ? void 0 : _c.children
2465
+ }), o("div", {
2466
+ className: styles$4.bookmaker,
2467
+ children: "winline"
2468
+ })]
2469
+ }), o("div", {
2470
+ className: styles$4.button,
2471
+ style: rules.button,
2472
+ children: (_d = rules.button) == null ? void 0 : _d.children
2473
+ })]
2474
+ }), o("div", {
2475
+ className: classNames(styles$4.legal, {
2476
+ [styles$4.legalOpen]: isOpen
2477
+ }),
2478
+ style: rules.legalInfo,
2479
+ children: o("span", {
2480
+ className: styles$4.legalText,
2481
+ children: [o("span", {
2482
+ children: (_e = rules.legalInfo) == null ? void 0 : _e.children
2483
+ }), o("span", {
2484
+ className: styles$4.legalButton,
2485
+ style: rules.legalInfoButton,
2486
+ onClick: toggleIsOpen,
2487
+ children: isOpen ? (_f = rules.legalInfoButton) == null ? void 0 : _f.openText : (_g = rules.legalInfoButton) == null ? void 0 : _g.closeText
2488
+ })]
2489
+ })
2490
+ })]
2491
+ });
2492
+ };
2493
+ const BonusCard = () => {
2494
+ const rootRef = _$1(null);
2495
+ const state = useCurrentState();
2496
+ const device = "desktop";
2497
+ const deviceState = useGetRules(state, device);
2498
+ const rules = useParseRules(deviceState);
2499
+ return o("div", {
2500
+ ref: rootRef,
2501
+ children: ((rules == null ? void 0 : rules.children) || []).map((child) => o(StateContext, {
2502
+ value: child,
2503
+ children: o(Bonus, {})
2504
+ }))
2505
+ });
2506
+ };
2507
+ const index$1 = render(o(BonusCard, {}));
2508
+ const root$3 = "_root_a3kem_1";
2509
+ const desktop$2 = "_desktop_a3kem_13";
2510
+ const laptop$1 = "_laptop_a3kem_14";
2511
+ const promotion = "_promotion_a3kem_18";
2512
+ const background = "_background_a3kem_34";
2513
+ const content = "_content_a3kem_43";
2514
+ const variant2 = "_variant2_a3kem_56";
2515
+ const logo = "_logo_a3kem_60";
2516
+ const left = "_left_a3kem_72";
2517
+ const center = "_center_a3kem_86";
2518
+ const slide = "_slide_a3kem_92";
2519
+ const slide_animated_default = "_slide_animated_default_a3kem_106";
2520
+ const right = "_right_a3kem_116";
2521
+ const buttonWrapper = "_buttonWrapper_a3kem_131";
2522
+ const button = "_button_a3kem_131";
2523
+ const button_animated = "_button_animated_a3kem_162";
2524
+ const increase = "_increase_a3kem_1";
2525
+ const styles$3 = {
2526
+ root: root$3,
2527
+ desktop: desktop$2,
2528
+ laptop: laptop$1,
2529
+ promotion,
2530
+ background,
2531
+ content,
2532
+ variant2,
2533
+ logo,
2534
+ left,
2535
+ center,
2536
+ slide,
2537
+ slide_animated_default,
2538
+ "fade-in-out": "_fade-in-out_a3kem_1",
2539
+ "slide_animated_bottom-top": "_slide_animated_bottom-top_a3kem_109",
2540
+ "fade-in-bottom-out-top": "_fade-in-bottom-out-top_a3kem_1",
2541
+ "slide_animated_top-bottom": "_slide_animated_top-bottom_a3kem_112",
2542
+ right,
2543
+ buttonWrapper,
2544
+ button,
2545
+ button_animated,
2546
+ increase,
2547
+ "fade-in-top-out-bottom": "_fade-in-top-out-bottom_a3kem_1"
2548
+ };
2549
+ const root$2 = "_root_1cgtj_1";
2550
+ const desktop$1 = "_desktop_1cgtj_19";
2551
+ const styles$2 = {
2552
+ root: root$2,
2553
+ desktop: desktop$1
2554
+ };
2555
+ const Text = () => {
2556
+ var _a;
2557
+ const state = useCurrentState();
2558
+ const rules = useParseRules(state);
2559
+ return o("div", {
2560
+ className: classNames(styles$2.root, {
2561
+ [styles$2.desktop]: (state == null ? void 0 : state.device) === "desktop"
2562
+ }),
2563
+ style: omit(rules.root, ...backgroundOptions),
2564
+ children: (_a = rules.root) == null ? void 0 : _a.children
2565
+ });
2566
+ };
2567
+ const root$1 = "_root_vjs41_1";
2568
+ const odd = "_odd_vjs41_7";
2569
+ const oddReverse = "_oddReverse_vjs41_14";
2570
+ const oddLabel = "_oddLabel_vjs41_18";
2571
+ const oddLogo = "_oddLogo_vjs41_30";
2572
+ const coef = "_coef_vjs41_36";
2573
+ const coefHead = "_coefHead_vjs41_42";
2574
+ const coefValue = "_coefValue_vjs41_47";
2575
+ const styles$1 = {
2576
+ root: root$1,
2577
+ odd,
2578
+ oddReverse,
2579
+ oddLabel,
2580
+ oddLogo,
2581
+ coef,
2582
+ coefHead,
2583
+ coefValue
2584
+ };
2585
+ const Matches = () => {
2586
+ var _a, _b, _c;
2587
+ const state = useCurrentState();
2588
+ const rules = useParseRules(state);
2589
+ const rootRules = omit(rules.root, ...backgroundOptions);
2590
+ return o("div", {
2591
+ className: styles$1.root,
2592
+ children: [o("div", {
2593
+ className: styles$1.odd,
2594
+ children: [o("div", {
2595
+ className: styles$1.oddLogo,
2596
+ style: rootRules
2597
+ }), o("div", {
2598
+ className: styles$1.oddLabel,
2599
+ style: rootRules,
2600
+ children: (_a = rules.root) == null ? void 0 : _a.valueOne
2601
+ })]
2602
+ }), o("div", {
2603
+ className: styles$1.coef,
2604
+ children: [o("div", {
2605
+ className: styles$1.coefHead,
2606
+ style: rules.coef,
2607
+ children: "X"
2608
+ }), o("div", {
2609
+ className: styles$1.coefValue,
2610
+ style: rootRules,
2611
+ children: (_b = rules.root) == null ? void 0 : _b.valueX
2612
+ })]
2613
+ }), o("div", {
2614
+ className: classNames(styles$1.odd, styles$1.oddReverse),
2615
+ children: [o("div", {
2616
+ className: styles$1.oddLogo,
2617
+ style: rootRules
2618
+ }), o("div", {
2619
+ className: styles$1.oddLabel,
2620
+ style: rootRules,
2621
+ children: (_c = rules.root) == null ? void 0 : _c.valueTwo
2622
+ })]
2623
+ })]
2624
+ });
2625
+ };
2626
+ const root = "_root_1va5h_1";
2627
+ const title = "_title_1va5h_8";
2628
+ const titleLabel = "_titleLabel_1va5h_12";
2629
+ const tablet = "_tablet_1va5h_16";
2630
+ const desktop = "_desktop_1va5h_19";
2631
+ const laptop = "_laptop_1va5h_19";
2632
+ const titleValue = "_titleValue_1va5h_23";
2633
+ const team = "_team_1va5h_34";
2634
+ const teamLogo = "_teamLogo_1va5h_44";
2635
+ const teamName = "_teamName_1va5h_72";
2636
+ const teamValue = "_teamValue_1va5h_84";
2637
+ const styles = {
2638
+ root,
2639
+ title,
2640
+ titleLabel,
2641
+ tablet,
2642
+ desktop,
2643
+ laptop,
2644
+ titleValue,
2645
+ team,
2646
+ teamLogo,
2647
+ teamName,
2648
+ teamValue
2649
+ };
2650
+ const MatchesOneTwo = () => {
2651
+ const state = useCurrentState();
2652
+ const rules = useParseRules(state);
2653
+ return o("div", {
2654
+ className: classNames(styles.root, {
2655
+ [styles.desktop]: (state == null ? void 0 : state.device) === "desktop",
2656
+ [styles.laptop]: (state == null ? void 0 : state.device) === "laptop",
2657
+ [styles.tablet]: (state == null ? void 0 : state.device) === "tablet"
2658
+ }),
2659
+ style: omit(rules.root, ...backgroundOptions),
2660
+ children: [o("div", {
2661
+ className: styles.title,
2662
+ children: [o("div", {
2663
+ className: styles.titleLabel,
2664
+ style: rules.titleLabel,
2665
+ children: rules.titleLabel.children
2666
+ }), o("div", {
2667
+ className: styles.titleValue,
2668
+ style: rules.titleValue,
2669
+ children: rules.titleValue.children
2670
+ })]
2671
+ }), o("div", {
2672
+ children: [o("div", {
2673
+ className: styles.team,
2674
+ children: [o("div", {
2675
+ className: styles.teamLogo,
2676
+ style: rules.logo
2677
+ }), o("div", {
2678
+ className: styles.teamName,
2679
+ style: rules.teamName,
2680
+ children: rules.team1Name.children
2681
+ }), o("div", {
2682
+ className: styles.teamValue,
2683
+ style: rules.value,
2684
+ children: rules.value1.children
2685
+ })]
2686
+ }), o("div", {
2687
+ className: styles.team,
2688
+ children: [o("div", {
2689
+ className: styles.teamLogo,
2690
+ style: rules.logo
2691
+ }), o("div", {
2692
+ className: styles.teamName,
2693
+ style: rules.teamName,
2694
+ children: rules.team2Name.children
2695
+ }), o("div", {
2696
+ className: styles.teamValue,
2697
+ style: rules.value,
2698
+ children: rules.value2.children
2699
+ })]
2700
+ })]
2701
+ })]
2702
+ });
2703
+ };
2704
+ const useAnimatedList = (slides = []) => {
2705
+ var _a;
2706
+ const itemsCount = slides.length;
2707
+ const [animatedIdx, setAnimatedIdx] = h(0);
2708
+ const animationDuration = (_a = slides[animatedIdx || 0]) == null ? void 0 : _a.animationDuration;
2709
+ p(() => {
2710
+ const goNext = () => {
2711
+ setAnimatedIdx((index2) => {
2712
+ if (index2 + 1 < itemsCount)
2713
+ return index2 + 1;
2714
+ return 0;
2715
+ });
2716
+ };
2717
+ const timeout = setTimeout(goNext, animationDuration);
2718
+ return () => clearTimeout(timeout);
2719
+ }, [setAnimatedIdx, itemsCount, animationDuration, animatedIdx]);
2720
+ return animatedIdx;
2721
+ };
2722
+ const DEFAULT_ANIMATION_SPEED = 3700;
2723
+ const WideCard = () => {
2724
+ var _a, _b, _c, _d, _e;
2725
+ const rootRef = _$1(null);
2726
+ const state = useCurrentState();
2727
+ const device = useContainerDevice({
2728
+ targetRef: rootRef
2729
+ });
2730
+ const deviceState = useGetRules(state, device);
2731
+ const rules = useParseRules(deviceState);
2732
+ const onClick = useMetrics(deviceState);
2733
+ const getChild = (name2) => ({
2734
+ text: o(Text, {}),
2735
+ matches: o(Matches, {}),
2736
+ matchesOneTwo: o(MatchesOneTwo, {})
2737
+ })[name2];
2738
+ const slidesList = (rules.children || []).filter(Boolean).map((slide2) => {
2739
+ var _a2, _b2;
2740
+ return {
2741
+ ...slide2,
2742
+ animationName: (_a2 = slide2 == null ? void 0 : slide2.root) == null ? void 0 : _a2.animationName,
2743
+ animationDuration: ((_b2 = slide2 == null ? void 0 : slide2.root) == null ? void 0 : _b2.animationDuration) || DEFAULT_ANIMATION_SPEED
2744
+ };
2745
+ });
2746
+ const currentSlide = useAnimatedList(slidesList);
2747
+ const slideRules = useParseRules(slidesList[currentSlide] || {});
2748
+ const backgroundRules = ((_a = slideRules == null ? void 0 : slideRules.root) == null ? void 0 : _a.hasCustomBackground) ? pick((slideRules == null ? void 0 : slideRules.root) || {}, ...backgroundOptions) : pick(rules.background, ...backgroundOptions);
2749
+ return o("a", {
2750
+ ref: rootRef,
2751
+ href: (_b = rules.root) == null ? void 0 : _b.offer,
2752
+ target: "_blank",
2753
+ rel: "nofollow noopener noreferrer",
2754
+ className: classNames(styles$3.root, {
2755
+ [styles$3.desktop]: device === "desktop",
2756
+ [styles$3.laptop]: device === "laptop",
2757
+ [styles$3.tablet]: device === "tablet",
2758
+ [styles$3.variant2]: ((_c = rules.root) == null ? void 0 : _c.variant) === "variant2"
2759
+ }),
2760
+ style: rules.root,
2761
+ onClick,
2762
+ children: [o("div", {
2763
+ className: styles$3.background,
2764
+ style: backgroundRules
2765
+ }), o("div", {
2766
+ className: styles$3.promotion,
2767
+ style: rules.promotion,
2768
+ children: (_d = rules.promotion) == null ? void 0 : _d.children
2769
+ }), o("div", {
2770
+ className: styles$3.content,
2771
+ children: [o("div", {
2772
+ className: styles$3.left,
2773
+ children: o("div", {
2774
+ className: styles$3.logo,
2775
+ style: rules.logo
2776
+ })
2777
+ }), o("div", {
2778
+ className: styles$3.center,
2779
+ children: (rules.children || []).map((child, index2) => {
2780
+ var _a2, _b2;
2781
+ return o("div", {
2782
+ className: styles$3.slide,
2783
+ style: {
2784
+ animationName: currentSlide === index2 ? styles$3[((_a2 = child.root) == null ? void 0 : _a2.animationName) || "fade-in-out"] : "none",
2785
+ animationDuration: `${(_b2 = child.root) == null ? void 0 : _b2.animationDuration}ms`
2786
+ },
2787
+ children: o(StateContext, {
2788
+ value: {
2789
+ ...child,
2790
+ device
2791
+ },
2792
+ children: getChild(child.name)
2793
+ })
2794
+ });
2795
+ })
2796
+ }), o("div", {
2797
+ className: styles$3.right,
2798
+ children: [o("div", {
2799
+ className: styles$3.logo,
2800
+ style: rules.logo
2801
+ }), o("div", {
2802
+ className: styles$3.buttonWrapper,
2803
+ children: o("div", {
2804
+ className: styles$3.button,
2805
+ style: rules.button,
2806
+ children: [o("div", {
2807
+ className: styles$3.logo,
2808
+ style: rules.logo
2809
+ }), (_e = rules.button) == null ? void 0 : _e.children]
2810
+ })
2811
+ })]
2812
+ })]
2813
+ })]
2814
+ });
2815
+ };
2816
+ const index = render(o(WideCard, {}));
2817
+ export {
2818
+ index$1 as BonusCard,
2819
+ index$5 as ComplexGift,
2820
+ index$3 as ComplexPopup,
2821
+ index$2 as ExpressPopup,
2822
+ index$6 as SimpleGift,
2823
+ index$4 as SimplePopup,
2824
+ index as WideCard
2825
+ };
2826
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmVzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvaG9va3MvZGlzdC9ob29rcy5tb2R1bGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9kaXN0L2NvbXBhdC5tb2R1bGUuanMiLCIuLi9zcmMvaG9va3MvdXNlR2lmdE9wZW4udHMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2pzeC1ydW50aW1lL2Rpc3QvanN4UnVudGltZS5tb2R1bGUuanMiLCIuLi9zcmMvU3RhdGVDb250ZXh0LnRzeCIsIi4uL3NyYy9oZWxwZXJzL3JlbmRlci50c3giLCIuLi9zcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXBEYXRhLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnbk1lcmdlVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQXJyYXlCdWZmZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0xlbmd0aC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zYWZlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvUGxhaW5PYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWVyZ2VEZWVwLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1lcmdlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FwcGx5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJdGVyYXRlZUNhbGwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVBc3NpZ25lci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVyZ2UuanMiLCIuLi8uLi91dGlscy9kb20udHMiLCIuLi8uLi91dGlscy9pdGVyYXRvci50cyIsIi4uLy4uL3V0aWxzL2luZGV4LnRzIiwiLi4vc3JjL2hlbHBlcnMvZ2V0RGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlLnRzIiwiLi4vc3JjL2hlbHBlcnMvcGFyc2VSdWxlcy50cyIsIi4uL3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQudHN4IiwiLi4vc3JjL2hvb2tzL3VzZVRvZ2dsZS50cyIsIi4uL3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbi50c3giLCIuLi9zcmMvY29tcG9uZW50cy9HaWZ0SWNvbi50c3giLCIuLi9zcmMvaG9va3MvcHJvbW9zL3VzZUdpZnRSdWxlcy50cyIsIi4uL3NyYy9oZWxwZXJzL2NvbnN0YW50cy50cyIsIi4uL3NyYy9ob29rcy91c2VNZXRyaWNzLnRzIiwiLi4vc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cy50cyIsIi4uL3NyYy9wcm9tb3MvU2ltcGxlR2lmdC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhHaWZ0L2NvbXBvbmVudHMvQm9udXNDYXJkL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleEdpZnQvaW5kZXgudHN4IiwiLi4vc3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4LnRzIiwiLi4vc3JjL3Byb21vcy9TaW1wbGVQb3B1cC9jb21wb25lbnRzL2xpbmUvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9TaW1wbGVQb3B1cC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhQb3B1cC9jb21wb25lbnRzL0JvbnVzL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleFBvcHVwL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvRXhwcmVzc1BvcHVwL2NvbXBvbmVudHMvTWF0Y2gvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9FeHByZXNzUG9wdXAvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Cb251c0NhcmQvY29tcG9uZW50cy9Cb251cy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0JvbnVzQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvVGV4dC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlcy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlc09uZVR3by9pbmRleC50c3giLCIuLi9zcmMvaG9va3MvdXNlQW5pbWF0ZWRMaXN0LnRzIiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG5cdENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuXHRMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuXHRodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXHR2YXIgbmF0aXZlQ29kZVN0cmluZyA9ICdbbmF0aXZlIGNvZGVdJztcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzKCkge1xuXHRcdHZhciBjbGFzc2VzID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmICghYXJnKSBjb250aW51ZTtcblxuXHRcdFx0dmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnO1xuXG5cdFx0XHRpZiAoYXJnVHlwZSA9PT0gJ3N0cmluZycgfHwgYXJnVHlwZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0XHRpZiAoYXJnLmxlbmd0aCkge1xuXHRcdFx0XHRcdHZhciBpbm5lciA9IGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHRcdFx0XHRpZiAoaW5uZXIpIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChpbm5lcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChrZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsImltcG9ydHtvcHRpb25zIGFzIG59ZnJvbVwicHJlYWN0XCI7dmFyIHQscix1LGksbz0wLGY9W10sYz1bXSxlPW4uX19iLGE9bi5fX3Isdj1uLmRpZmZlZCxsPW4uX19jLG09bi51bm1vdW50O2Z1bmN0aW9uIGQodCx1KXtuLl9faCYmbi5fX2gocix0LG98fHUpLG89MDt2YXIgaT1yLl9fSHx8KHIuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gdD49aS5fXy5sZW5ndGgmJmkuX18ucHVzaCh7X19WOmN9KSxpLl9fW3RdfWZ1bmN0aW9uIGgobil7cmV0dXJuIG89MSxzKEIsbil9ZnVuY3Rpb24gcyhuLHUsaSl7dmFyIG89ZCh0KyssMik7aWYoby50PW4sIW8uX19jJiYoby5fXz1baT9pKHUpOkIodm9pZCAwLHUpLGZ1bmN0aW9uKG4pe3ZhciB0PW8uX19OP28uX19OWzBdOm8uX19bMF0scj1vLnQodCxuKTt0IT09ciYmKG8uX19OPVtyLG8uX19bMV1dLG8uX19jLnNldFN0YXRlKHt9KSl9XSxvLl9fYz1yLCFyLnUpKXt2YXIgZj1mdW5jdGlvbihuLHQscil7aWYoIW8uX19jLl9fSClyZXR1cm4hMDt2YXIgdT1vLl9fYy5fX0guX18uZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLl9fY30pO2lmKHUuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIW4uX19OfSkpcmV0dXJuIWN8fGMuY2FsbCh0aGlzLG4sdCxyKTt2YXIgaT0hMTtyZXR1cm4gdS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKG4uX19OKXt2YXIgdD1uLl9fWzBdO24uX189bi5fX04sbi5fX049dm9pZCAwLHQhPT1uLl9fWzBdJiYoaT0hMCl9fSksISghaSYmby5fX2MucHJvcHM9PT1uKSYmKCFjfHxjLmNhbGwodGhpcyxuLHQscikpfTtyLnU9ITA7dmFyIGM9ci5zaG91bGRDb21wb25lbnRVcGRhdGUsZT1yLmNvbXBvbmVudFdpbGxVcGRhdGU7ci5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKG4sdCxyKXtpZih0aGlzLl9fZSl7dmFyIHU9YztjPXZvaWQgMCxmKG4sdCxyKSxjPXV9ZSYmZS5jYWxsKHRoaXMsbix0LHIpfSxyLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mfXJldHVybiBvLl9fTnx8by5fX31mdW5jdGlvbiBwKHUsaSl7dmFyIG89ZCh0KyssMyk7IW4uX19zJiZ6KG8uX19ILGkpJiYoby5fXz11LG8uaT1pLHIuX19ILl9faC5wdXNoKG8pKX1mdW5jdGlvbiB5KHUsaSl7dmFyIG89ZCh0KyssNCk7IW4uX19zJiZ6KG8uX19ILGkpJiYoby5fXz11LG8uaT1pLHIuX19oLnB1c2gobykpfWZ1bmN0aW9uIF8obil7cmV0dXJuIG89NSxGKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bn19LFtdKX1mdW5jdGlvbiBBKG4sdCxyKXtvPTYseShmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4/KG4odCgpKSxmdW5jdGlvbigpe3JldHVybiBuKG51bGwpfSk6bj8obi5jdXJyZW50PXQoKSxmdW5jdGlvbigpe3JldHVybiBuLmN1cnJlbnQ9bnVsbH0pOnZvaWQgMH0sbnVsbD09cj9yOnIuY29uY2F0KG4pKX1mdW5jdGlvbiBGKG4scil7dmFyIHU9ZCh0KyssNyk7cmV0dXJuIHoodS5fX0gscik/KHUuX19WPW4oKSx1Lmk9cix1Ll9faD1uLHUuX19WKTp1Ll9ffWZ1bmN0aW9uIFQobix0KXtyZXR1cm4gbz04LEYoZnVuY3Rpb24oKXtyZXR1cm4gbn0sdCl9ZnVuY3Rpb24gcShuKXt2YXIgdT1yLmNvbnRleHRbbi5fX2NdLGk9ZCh0KyssOSk7cmV0dXJuIGkuYz1uLHU/KG51bGw9PWkuX18mJihpLl9fPSEwLHUuc3ViKHIpKSx1LnByb3BzLnZhbHVlKTpuLl9ffWZ1bmN0aW9uIHgodCxyKXtuLnVzZURlYnVnVmFsdWUmJm4udXNlRGVidWdWYWx1ZShyP3IodCk6dCl9ZnVuY3Rpb24gUChuKXt2YXIgdT1kKHQrKywxMCksaT1oKCk7cmV0dXJuIHUuX189bixyLmNvbXBvbmVudERpZENhdGNofHwoci5jb21wb25lbnREaWRDYXRjaD1mdW5jdGlvbihuLHQpe3UuX18mJnUuX18obix0KSxpWzFdKG4pfSksW2lbMF0sZnVuY3Rpb24oKXtpWzFdKHZvaWQgMCl9XX1mdW5jdGlvbiBWKCl7dmFyIG49ZCh0KyssMTEpO2lmKCFuLl9fKXtmb3IodmFyIHU9ci5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXzt2YXIgaT11Ll9fbXx8KHUuX19tPVswLDBdKTtuLl9fPVwiUFwiK2lbMF0rXCItXCIraVsxXSsrfXJldHVybiBuLl9ffWZ1bmN0aW9uIGIoKXtmb3IodmFyIHQ7dD1mLnNoaWZ0KCk7KWlmKHQuX19QJiZ0Ll9fSCl0cnl7dC5fX0guX19oLmZvckVhY2goayksdC5fX0guX19oLmZvckVhY2godyksdC5fX0guX19oPVtdfWNhdGNoKHIpe3QuX19ILl9faD1bXSxuLl9fZShyLHQuX192KX19bi5fX2I9ZnVuY3Rpb24obil7cj1udWxsLGUmJmUobil9LG4uX19yPWZ1bmN0aW9uKG4pe2EmJmEobiksdD0wO3ZhciBpPShyPW4uX19jKS5fX0g7aSYmKHU9PT1yPyhpLl9faD1bXSxyLl9faD1bXSxpLl9fLmZvckVhY2goZnVuY3Rpb24obil7bi5fX04mJihuLl9fPW4uX19OKSxuLl9fVj1jLG4uX19OPW4uaT12b2lkIDB9KSk6KGkuX19oLmZvckVhY2goayksaS5fX2guZm9yRWFjaCh3KSxpLl9faD1bXSkpLHU9cn0sbi5kaWZmZWQ9ZnVuY3Rpb24odCl7diYmdih0KTt2YXIgbz10Ll9fYztvJiZvLl9fSCYmKG8uX19ILl9faC5sZW5ndGgmJigxIT09Zi5wdXNoKG8pJiZpPT09bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgoaT1uLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fGopKGIpKSxvLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uaSYmKG4uX19IPW4uaSksbi5fX1YhPT1jJiYobi5fXz1uLl9fViksbi5pPXZvaWQgMCxuLl9fVj1jfSkpLHU9cj1udWxsfSxuLl9fYz1mdW5jdGlvbih0LHIpe3Iuc29tZShmdW5jdGlvbih0KXt0cnl7dC5fX2guZm9yRWFjaChrKSx0Ll9faD10Ll9faC5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIW4uX198fHcobil9KX1jYXRjaCh1KXtyLnNvbWUoZnVuY3Rpb24obil7bi5fX2gmJihuLl9faD1bXSl9KSxyPVtdLG4uX19lKHUsdC5fX3YpfX0pLGwmJmwodCxyKX0sbi51bm1vdW50PWZ1bmN0aW9uKHQpe20mJm0odCk7dmFyIHIsdT10Ll9fYzt1JiZ1Ll9fSCYmKHUuX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7dHJ5e2sobil9Y2F0Y2gobil7cj1ufX0pLHUuX19IPXZvaWQgMCxyJiZuLl9fZShyLHUuX192KSl9O3ZhciBnPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTtmdW5jdGlvbiBqKG4pe3ZhciB0LHI9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodSksZyYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodCksc2V0VGltZW91dChuKX0sdT1zZXRUaW1lb3V0KHIsMTAwKTtnJiYodD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocikpfWZ1bmN0aW9uIGsobil7dmFyIHQ9cix1PW4uX19jO1wiZnVuY3Rpb25cIj09dHlwZW9mIHUmJihuLl9fYz12b2lkIDAsdSgpKSxyPXR9ZnVuY3Rpb24gdyhuKXt2YXIgdD1yO24uX19jPW4uX18oKSxyPXR9ZnVuY3Rpb24geihuLHQpe3JldHVybiFufHxuLmxlbmd0aCE9PXQubGVuZ3RofHx0LnNvbWUoZnVuY3Rpb24odCxyKXtyZXR1cm4gdCE9PW5bcl19KX1mdW5jdGlvbiBCKG4sdCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90KG4pOnR9ZXhwb3J0e1QgYXMgdXNlQ2FsbGJhY2sscSBhcyB1c2VDb250ZXh0LHggYXMgdXNlRGVidWdWYWx1ZSxwIGFzIHVzZUVmZmVjdCxQIGFzIHVzZUVycm9yQm91bmRhcnksViBhcyB1c2VJZCxBIGFzIHVzZUltcGVyYXRpdmVIYW5kbGUseSBhcyB1c2VMYXlvdXRFZmZlY3QsRiBhcyB1c2VNZW1vLHMgYXMgdXNlUmVkdWNlcixfIGFzIHVzZVJlZixoIGFzIHVzZVN0YXRlfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhvb2tzLm1vZHVsZS5qcy5tYXBcbiIsImltcG9ydHtDb21wb25lbnQgYXMgbixjcmVhdGVFbGVtZW50IGFzIHQsb3B0aW9ucyBhcyBlLHRvQ2hpbGRBcnJheSBhcyByLEZyYWdtZW50IGFzIHUscmVuZGVyIGFzIG8saHlkcmF0ZSBhcyBpLGNyZWF0ZUNvbnRleHQgYXMgbCxjcmVhdGVSZWYgYXMgYyxjbG9uZUVsZW1lbnQgYXMgZn1mcm9tXCJwcmVhY3RcIjtleHBvcnR7Q29tcG9uZW50LEZyYWdtZW50LGNyZWF0ZUNvbnRleHQsY3JlYXRlRWxlbWVudCxjcmVhdGVSZWZ9ZnJvbVwicHJlYWN0XCI7aW1wb3J0e3VzZVN0YXRlIGFzIGEsdXNlSWQgYXMgcyx1c2VSZWR1Y2VyIGFzIGgsdXNlRWZmZWN0IGFzIHYsdXNlTGF5b3V0RWZmZWN0IGFzIGQsdXNlUmVmIGFzIHAsdXNlSW1wZXJhdGl2ZUhhbmRsZSBhcyBtLHVzZU1lbW8gYXMgeSx1c2VDYWxsYmFjayBhcyBfLHVzZUNvbnRleHQgYXMgYix1c2VEZWJ1Z1ZhbHVlIGFzIFN9ZnJvbVwicHJlYWN0L2hvb2tzXCI7ZXhwb3J0KmZyb21cInByZWFjdC9ob29rc1wiO2Z1bmN0aW9uIGcobix0KXtmb3IodmFyIGUgaW4gdCluW2VdPXRbZV07cmV0dXJuIG59ZnVuY3Rpb24gQyhuLHQpe2Zvcih2YXIgZSBpbiBuKWlmKFwiX19zb3VyY2VcIiE9PWUmJiEoZSBpbiB0KSlyZXR1cm4hMDtmb3IodmFyIHIgaW4gdClpZihcIl9fc291cmNlXCIhPT1yJiZuW3JdIT09dFtyXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBFKG4sdCl7cmV0dXJuIG49PT10JiYoMCE9PW58fDEvbj09MS90KXx8biE9biYmdCE9dH1mdW5jdGlvbiB3KG4pe3RoaXMucHJvcHM9bn1mdW5jdGlvbiB4KG4sZSl7ZnVuY3Rpb24gcihuKXt2YXIgdD10aGlzLnByb3BzLnJlZixyPXQ9PW4ucmVmO3JldHVybiFyJiZ0JiYodC5jYWxsP3QobnVsbCk6dC5jdXJyZW50PW51bGwpLGU/IWUodGhpcy5wcm9wcyxuKXx8IXI6Qyh0aGlzLnByb3BzLG4pfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPXIsdChuLGUpfXJldHVybiB1LmRpc3BsYXlOYW1lPVwiTWVtbyhcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix1LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLHUuX19mPSEwLHV9KHcucHJvdG90eXBlPW5ldyBuKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCx3LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gQyh0aGlzLnByb3BzLG4pfHxDKHRoaXMuc3RhdGUsdCl9O3ZhciBSPWUuX19iO2UuX19iPWZ1bmN0aW9uKG4pe24udHlwZSYmbi50eXBlLl9fZiYmbi5yZWYmJihuLnByb3BzLnJlZj1uLnJlZixuLnJlZj1udWxsKSxSJiZSKG4pfTt2YXIgTj1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIil8fDM5MTE7ZnVuY3Rpb24gayhuKXtmdW5jdGlvbiB0KHQpe3ZhciBlPWcoe30sdCk7cmV0dXJuIGRlbGV0ZSBlLnJlZixuKGUsdC5yZWZ8fG51bGwpfXJldHVybiB0LiQkdHlwZW9mPU4sdC5yZW5kZXI9dCx0LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXQuX19mPSEwLHQuZGlzcGxheU5hbWU9XCJGb3J3YXJkUmVmKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHR9dmFyIEE9ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bj9udWxsOnIocihuKS5tYXAodCkpfSxPPXttYXA6QSxmb3JFYWNoOkEsY291bnQ6ZnVuY3Rpb24obil7cmV0dXJuIG4/cihuKS5sZW5ndGg6MH0sb25seTpmdW5jdGlvbihuKXt2YXIgdD1yKG4pO2lmKDEhPT10Lmxlbmd0aCl0aHJvd1wiQ2hpbGRyZW4ub25seVwiO3JldHVybiB0WzBdfSx0b0FycmF5OnJ9LFQ9ZS5fX2U7ZS5fX2U9ZnVuY3Rpb24obix0LGUscil7aWYobi50aGVuKWZvcih2YXIgdSxvPXQ7bz1vLl9fOylpZigodT1vLl9fYykmJnUuX19jKXJldHVybiBudWxsPT10Ll9fZSYmKHQuX19lPWUuX19lLHQuX19rPWUuX19rKSx1Ll9fYyhuLHQpO1Qobix0LGUscil9O3ZhciBJPWUudW5tb3VudDtmdW5jdGlvbiBMKG4sdCxlKXtyZXR1cm4gbiYmKG4uX19jJiZuLl9fYy5fX0gmJihuLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLl9fYyYmbi5fX2MoKX0pLG4uX19jLl9fSD1udWxsKSxudWxsIT0obj1nKHt9LG4pKS5fX2MmJihuLl9fYy5fX1A9PT1lJiYobi5fX2MuX19QPXQpLG4uX19jPW51bGwpLG4uX19rPW4uX19rJiZuLl9fay5tYXAoZnVuY3Rpb24obil7cmV0dXJuIEwobix0LGUpfSkpLG59ZnVuY3Rpb24gVShuLHQsZSl7cmV0dXJuIG4mJihuLl9fdj1udWxsLG4uX19rPW4uX19rJiZuLl9fay5tYXAoZnVuY3Rpb24obil7cmV0dXJuIFUobix0LGUpfSksbi5fX2MmJm4uX19jLl9fUD09PXQmJihuLl9fZSYmZS5pbnNlcnRCZWZvcmUobi5fX2Usbi5fX2QpLG4uX19jLl9fZT0hMCxuLl9fYy5fX1A9ZSkpLG59ZnVuY3Rpb24gRCgpe3RoaXMuX191PTAsdGhpcy50PW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBGKG4pe3ZhciB0PW4uX18uX19jO3JldHVybiB0JiZ0Ll9fYSYmdC5fX2Eobil9ZnVuY3Rpb24gTShuKXt2YXIgZSxyLHU7ZnVuY3Rpb24gbyhvKXtpZihlfHwoZT1uKCkpLnRoZW4oZnVuY3Rpb24obil7cj1uLmRlZmF1bHR8fG59LGZ1bmN0aW9uKG4pe3U9bn0pLHUpdGhyb3cgdTtpZighcil0aHJvdyBlO3JldHVybiB0KHIsbyl9cmV0dXJuIG8uZGlzcGxheU5hbWU9XCJMYXp5XCIsby5fX2Y9ITAsb31mdW5jdGlvbiBWKCl7dGhpcy51PW51bGwsdGhpcy5vPW51bGx9ZS51bm1vdW50PWZ1bmN0aW9uKG4pe3ZhciB0PW4uX19jO3QmJnQuX19SJiZ0Ll9fUigpLHQmJiEwPT09bi5fX2gmJihuLnR5cGU9bnVsbCksSSYmSShuKX0sKEQucHJvdG90eXBlPW5ldyBuKS5fX2M9ZnVuY3Rpb24obix0KXt2YXIgZT10Ll9fYyxyPXRoaXM7bnVsbD09ci50JiYoci50PVtdKSxyLnQucHVzaChlKTt2YXIgdT1GKHIuX192KSxvPSExLGk9ZnVuY3Rpb24oKXtvfHwobz0hMCxlLl9fUj1udWxsLHU/dShsKTpsKCkpfTtlLl9fUj1pO3ZhciBsPWZ1bmN0aW9uKCl7aWYoIS0tci5fX3Upe2lmKHIuc3RhdGUuX19hKXt2YXIgbj1yLnN0YXRlLl9fYTtyLl9fdi5fX2tbMF09VShuLG4uX19jLl9fUCxuLl9fYy5fX08pfXZhciB0O2ZvcihyLnNldFN0YXRlKHtfX2E6ci5fX2I9bnVsbH0pO3Q9ci50LnBvcCgpOyl0LmZvcmNlVXBkYXRlKCl9fSxjPSEwPT09dC5fX2g7ci5fX3UrK3x8Y3x8ci5zZXRTdGF0ZSh7X19hOnIuX19iPXIuX192Ll9fa1swXX0pLG4udGhlbihpLGkpfSxELnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMudD1bXX0sRC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4sZSl7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxvPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPUwodGhpcy5fX2IscixvLl9fTz1vLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgaT1lLl9fYSYmdCh1LG51bGwsbi5mYWxsYmFjayk7cmV0dXJuIGkmJihpLl9faD1udWxsKSxbdCh1LG51bGwsZS5fX2E/bnVsbDpuLmNoaWxkcmVuKSxpXX07dmFyIFc9ZnVuY3Rpb24obix0LGUpe2lmKCsrZVsxXT09PWVbMF0mJm4uby5kZWxldGUodCksbi5wcm9wcy5yZXZlYWxPcmRlciYmKFwidFwiIT09bi5wcm9wcy5yZXZlYWxPcmRlclswXXx8IW4uby5zaXplKSlmb3IoZT1uLnU7ZTspe2Zvcig7ZS5sZW5ndGg+MzspZS5wb3AoKSgpO2lmKGVbMV08ZVswXSlicmVhaztuLnU9ZT1lWzJdfX07ZnVuY3Rpb24gUChuKXtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbi5jb250ZXh0fSxuLmNoaWxkcmVufWZ1bmN0aW9uIGoobil7dmFyIGU9dGhpcyxyPW4uaTtlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7byhudWxsLGUubCksZS5sPW51bGwsZS5pPW51bGx9LGUuaSYmZS5pIT09ciYmZS5jb21wb25lbnRXaWxsVW5tb3VudCgpLG4uX192PyhlLmx8fChlLmk9cixlLmw9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpyLGNoaWxkTm9kZXM6W10sYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7dGhpcy5jaGlsZE5vZGVzLnB1c2gobiksZS5pLmFwcGVuZENoaWxkKG4pfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24obix0KXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmkuYXBwZW5kQ2hpbGQobil9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKG4pe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2Yobik+Pj4xLDEpLGUuaS5yZW1vdmVDaGlsZChuKX19KSxvKHQoUCx7Y29udGV4dDplLmNvbnRleHR9LG4uX192KSxlLmwpKTplLmwmJmUuY29tcG9uZW50V2lsbFVubW91bnQoKX1mdW5jdGlvbiB6KG4sZSl7dmFyIHI9dChqLHtfX3Y6bixpOmV9KTtyZXR1cm4gci5jb250YWluZXJJbmZvPWUscn0oVi5wcm90b3R5cGU9bmV3IG4pLl9fYT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLGU9Rih0Ll9fdikscj10Lm8uZ2V0KG4pO3JldHVybiByWzBdKyssZnVuY3Rpb24odSl7dmFyIG89ZnVuY3Rpb24oKXt0LnByb3BzLnJldmVhbE9yZGVyPyhyLnB1c2godSksVyh0LG4scikpOnUoKX07ZT9lKG8pOm8oKX19LFYucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihuKXt0aGlzLnU9bnVsbCx0aGlzLm89bmV3IE1hcDt2YXIgdD1yKG4uY2hpbGRyZW4pO24ucmV2ZWFsT3JkZXImJlwiYlwiPT09bi5yZXZlYWxPcmRlclswXSYmdC5yZXZlcnNlKCk7Zm9yKHZhciBlPXQubGVuZ3RoO2UtLTspdGhpcy5vLnNldCh0W2VdLHRoaXMudT1bMSwwLHRoaXMudV0pO3JldHVybiBuLmNoaWxkcmVufSxWLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9Vi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgbj10aGlzO3RoaXMuby5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7VyhuLGUsdCl9KX07dmFyIEI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIil8fDYwMTAzLEg9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sWj0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLFk9L1tBLVowLTldL2csJD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQscT1mdW5jdGlvbihuKXtyZXR1cm4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbCgpPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KG4pfTtmdW5jdGlvbiBHKG4sdCxlKXtyZXR1cm4gbnVsbD09dC5fX2smJih0LnRleHRDb250ZW50PVwiXCIpLG8obix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfWZ1bmN0aW9uIEoobix0LGUpe3JldHVybiBpKG4sdCksXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSgpLG4/bi5fX2M6bnVsbH1uLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LFtcImNvbXBvbmVudFdpbGxNb3VudFwiLFwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1wiLFwiY29tcG9uZW50V2lsbFVwZGF0ZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbXCJVTlNBRkVfXCIrdF19LHNldDpmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bn0pfX0pfSk7dmFyIEs9ZS5ldmVudDtmdW5jdGlvbiBRKCl7fWZ1bmN0aW9uIFgoKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9ZnVuY3Rpb24gbm4oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfWUuZXZlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIEsmJihuPUsobikpLG4ucGVyc2lzdD1RLG4uaXNQcm9wYWdhdGlvblN0b3BwZWQ9WCxuLmlzRGVmYXVsdFByZXZlbnRlZD1ubixuLm5hdGl2ZUV2ZW50PW59O3ZhciB0bixlbj17ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxybj1lLnZub2RlO2Uudm5vZGU9ZnVuY3Rpb24obil7XCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSYmZnVuY3Rpb24obil7dmFyIHQ9bi5wcm9wcyxlPW4udHlwZSx1PXt9O2Zvcih2YXIgbyBpbiB0KXt2YXIgaT10W29dO2lmKCEoXCJ2YWx1ZVwiPT09byYmXCJkZWZhdWx0VmFsdWVcImluIHQmJm51bGw9PWl8fCQmJlwiY2hpbGRyZW5cIj09PW8mJlwibm9zY3JpcHRcIj09PWV8fFwiY2xhc3NcIj09PW98fFwiY2xhc3NOYW1lXCI9PT1vKSl7dmFyIGw9by50b0xvd2VyQ2FzZSgpO1wiZGVmYXVsdFZhbHVlXCI9PT1vJiZcInZhbHVlXCJpbiB0JiZudWxsPT10LnZhbHVlP289XCJ2YWx1ZVwiOlwiZG93bmxvYWRcIj09PW8mJiEwPT09aT9pPVwiXCI6XCJvbmRvdWJsZWNsaWNrXCI9PT1sP289XCJvbmRibGNsaWNrXCI6XCJvbmNoYW5nZVwiIT09bHx8XCJpbnB1dFwiIT09ZSYmXCJ0ZXh0YXJlYVwiIT09ZXx8cSh0LnR5cGUpP1wib25mb2N1c1wiPT09bD9vPVwib25mb2N1c2luXCI6XCJvbmJsdXJcIj09PWw/bz1cIm9uZm9jdXNvdXRcIjpaLnRlc3Qobyk/bz1sOi0xPT09ZS5pbmRleE9mKFwiLVwiKSYmSC50ZXN0KG8pP289by5yZXBsYWNlKFksXCItJCZcIikudG9Mb3dlckNhc2UoKTpudWxsPT09aSYmKGk9dm9pZCAwKTpsPW89XCJvbmlucHV0XCIsXCJvbmlucHV0XCI9PT1sJiZ1W289bF0mJihvPVwib25pbnB1dENhcHR1cmVcIiksdVtvXT1pfX1cInNlbGVjdFwiPT1lJiZ1Lm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHUudmFsdWUpJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD0tMSE9dS52YWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpfSkpLFwic2VsZWN0XCI9PWUmJm51bGwhPXUuZGVmYXVsdFZhbHVlJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD11Lm11bHRpcGxlPy0xIT11LmRlZmF1bHRWYWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpOnUuZGVmYXVsdFZhbHVlPT1uLnByb3BzLnZhbHVlfSkpLHQuY2xhc3MmJiF0LmNsYXNzTmFtZT8odS5jbGFzcz10LmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LFwiY2xhc3NOYW1lXCIsZW4pKToodC5jbGFzc05hbWUmJiF0LmNsYXNzfHx0LmNsYXNzJiZ0LmNsYXNzTmFtZSkmJih1LmNsYXNzPXUuY2xhc3NOYW1lPXQuY2xhc3NOYW1lKSxuLnByb3BzPXV9KG4pLG4uJCR0eXBlb2Y9QixybiYmcm4obil9O3ZhciB1bj1lLl9fcjtlLl9fcj1mdW5jdGlvbihuKXt1biYmdW4obiksdG49bi5fX2N9O3ZhciBvbj1lLmRpZmZlZDtlLmRpZmZlZD1mdW5jdGlvbihuKXtvbiYmb24obik7dmFyIHQ9bi5wcm9wcyxlPW4uX19lO251bGwhPWUmJlwidGV4dGFyZWFcIj09PW4udHlwZSYmXCJ2YWx1ZVwiaW4gdCYmdC52YWx1ZSE9PWUudmFsdWUmJihlLnZhbHVlPW51bGw9PXQudmFsdWU/XCJcIjp0LnZhbHVlKSx0bj1udWxsfTt2YXIgbG49e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiB0bi5fX25bbi5fX2NdLnByb3BzLnZhbHVlfX19fSxjbj1cIjE3LjAuMlwiO2Z1bmN0aW9uIGZuKG4pe3JldHVybiB0LmJpbmQobnVsbCxuKX1mdW5jdGlvbiBhbihuKXtyZXR1cm4hIW4mJm4uJCR0eXBlb2Y9PT1CfWZ1bmN0aW9uIHNuKG4pe3JldHVybiBhbihuKT9mLmFwcGx5KG51bGwsYXJndW1lbnRzKTpufWZ1bmN0aW9uIGhuKG4pe3JldHVybiEhbi5fX2smJihvKG51bGwsbiksITApfWZ1bmN0aW9uIHZuKG4pe3JldHVybiBuJiYobi5iYXNlfHwxPT09bi5ub2RlVHlwZSYmbil8fG51bGx9dmFyIGRuPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4odCl9LHBuPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4odCl9LG1uPXU7ZnVuY3Rpb24geW4obil7bigpfWZ1bmN0aW9uIF9uKG4pe3JldHVybiBufWZ1bmN0aW9uIGJuKCl7cmV0dXJuWyExLHluXX12YXIgU249ZDtmdW5jdGlvbiBnbihuLHQpe3ZhciBlPXQoKSxyPWEoe2g6e19fOmUsdjp0fX0pLHU9clswXS5oLG89clsxXTtyZXR1cm4gZChmdW5jdGlvbigpe3UuX189ZSx1LnY9dCxFKHUuX18sdCgpKXx8byh7aDp1fSl9LFtuLGUsdF0pLHYoZnVuY3Rpb24oKXtyZXR1cm4gRSh1Ll9fLHUudigpKXx8byh7aDp1fSksbihmdW5jdGlvbigpe0UodS5fXyx1LnYoKSl8fG8oe2g6dX0pfSl9LFtuXSksZX12YXIgQ249e3VzZVN0YXRlOmEsdXNlSWQ6cyx1c2VSZWR1Y2VyOmgsdXNlRWZmZWN0OnYsdXNlTGF5b3V0RWZmZWN0OmQsdXNlSW5zZXJ0aW9uRWZmZWN0OlNuLHVzZVRyYW5zaXRpb246Ym4sdXNlRGVmZXJyZWRWYWx1ZTpfbix1c2VTeW5jRXh0ZXJuYWxTdG9yZTpnbixzdGFydFRyYW5zaXRpb246eW4sdXNlUmVmOnAsdXNlSW1wZXJhdGl2ZUhhbmRsZTptLHVzZU1lbW86eSx1c2VDYWxsYmFjazpfLHVzZUNvbnRleHQ6Yix1c2VEZWJ1Z1ZhbHVlOlMsdmVyc2lvbjpcIjE3LjAuMlwiLENoaWxkcmVuOk8scmVuZGVyOkcsaHlkcmF0ZTpKLHVubW91bnRDb21wb25lbnRBdE5vZGU6aG4sY3JlYXRlUG9ydGFsOnosY3JlYXRlRWxlbWVudDp0LGNyZWF0ZUNvbnRleHQ6bCxjcmVhdGVGYWN0b3J5OmZuLGNsb25lRWxlbWVudDpzbixjcmVhdGVSZWY6YyxGcmFnbWVudDp1LGlzVmFsaWRFbGVtZW50OmFuLGZpbmRET01Ob2RlOnZuLENvbXBvbmVudDpuLFB1cmVDb21wb25lbnQ6dyxtZW1vOngsZm9yd2FyZFJlZjprLGZsdXNoU3luYzpwbix1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpkbixTdHJpY3RNb2RlOm1uLFN1c3BlbnNlOkQsU3VzcGVuc2VMaXN0OlYsbGF6eTpNLF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOmxufTtleHBvcnR7TyBhcyBDaGlsZHJlbix3IGFzIFB1cmVDb21wb25lbnQsbW4gYXMgU3RyaWN0TW9kZSxEIGFzIFN1c3BlbnNlLFYgYXMgU3VzcGVuc2VMaXN0LGxuIGFzIF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELHNuIGFzIGNsb25lRWxlbWVudCxmbiBhcyBjcmVhdGVGYWN0b3J5LHogYXMgY3JlYXRlUG9ydGFsLENuIGFzIGRlZmF1bHQsdm4gYXMgZmluZERPTU5vZGUscG4gYXMgZmx1c2hTeW5jLGsgYXMgZm9yd2FyZFJlZixKIGFzIGh5ZHJhdGUsYW4gYXMgaXNWYWxpZEVsZW1lbnQsTSBhcyBsYXp5LHggYXMgbWVtbyxHIGFzIHJlbmRlcix5biBhcyBzdGFydFRyYW5zaXRpb24saG4gYXMgdW5tb3VudENvbXBvbmVudEF0Tm9kZSxkbiBhcyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyxfbiBhcyB1c2VEZWZlcnJlZFZhbHVlLFNuIGFzIHVzZUluc2VydGlvbkVmZmVjdCxnbiBhcyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSxibiBhcyB1c2VUcmFuc2l0aW9uLGNuIGFzIHZlcnNpb259O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tcGF0Lm1vZHVsZS5qcy5tYXBcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5cbmV4cG9ydCBjb25zdCB1c2VHaWZ0T3BlbiA9IChkZWxheSA9IDEwMDApID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB0aW1lclJlZiA9IHVzZVJlZihudWxsKVxuXG4gIGNvbnN0IG9uVG9nZ2xlID0gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KVxuICAgIHNldElzT3BlbihwcmV2ID0+ICFwcmV2KVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB0aW1lclJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRJc09wZW4odHJ1ZSlcbiAgICB9LCBkZWxheSlcblxuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZXJSZWYuY3VycmVudClcbiAgfSwgW2RlbGF5XSlcblxuICByZXR1cm4ge1xuICAgIGlzT3BlbixcbiAgICBvblRvZ2dsZVxuICB9XG59XG4iLCJpbXBvcnR7b3B0aW9ucyBhcyByfWZyb21cInByZWFjdFwiO2V4cG9ydHtGcmFnbWVudH1mcm9tXCJwcmVhY3RcIjt2YXIgXz0wO2Z1bmN0aW9uIG8obyxlLG4sdCxmLGwpe3ZhciBzLHUsYT17fTtmb3IodSBpbiBlKVwicmVmXCI9PXU/cz1lW3VdOmFbdV09ZVt1XTt2YXIgaT17dHlwZTpvLHByb3BzOmEsa2V5Om4scmVmOnMsX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2Q6dm9pZCAwLF9fYzpudWxsLF9faDpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1fLF9fc291cmNlOmYsX19zZWxmOmx9O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG8mJihzPW8uZGVmYXVsdFByb3BzKSlmb3IodSBpbiBzKXZvaWQgMD09PWFbdV0mJihhW3VdPXNbdV0pO3JldHVybiByLnZub2RlJiZyLnZub2RlKGkpLGl9ZXhwb3J0e28gYXMganN4LG8gYXMganN4REVWLG8gYXMganN4c307XG4vLyMgc291cmNlTWFwcGluZ1VSTD1qc3hSdW50aW1lLm1vZHVsZS5qcy5tYXBcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdwcmVhY3QnXG5cbmV4cG9ydCBjb25zdCBTdGF0ZSA9IGNyZWF0ZUNvbnRleHQoKVxuXG5jb25zdCBTdGF0ZUNvbnRleHQgPSAoeyBjaGlsZHJlbiwgdmFsdWUgfSkgPT4ge1xuICByZXR1cm4gPFN0YXRlLlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+e2NoaWxkcmVufTwvU3RhdGUuUHJvdmlkZXI+XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0YXRlQ29udGV4dFxuIiwiaW1wb3J0IHsgQ29tcG9uZW50Q2hpbGQsIENvbnRhaW5lck5vZGUsIHJlbmRlciBhcyBwcmVhY3RSZW5kZXIgfSBmcm9tICdwcmVhY3QnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJy4uL1N0YXRlQ29udGV4dCdcblxuZXhwb3J0IGNvbnN0IHJlbmRlciA9ICh2Tm9kZTogQ29tcG9uZW50Q2hpbGQpID0+ICh0YXJnZXQ6IENvbnRhaW5lck5vZGUsIHN0YXRlPzogYW55KSA9PlxuICBwcmVhY3RSZW5kZXIoPFN0YXRlQ29udGV4dCB2YWx1ZT17c3RhdGV9Pnt2Tm9kZX08L1N0YXRlQ29udGV4dD4sIHRhcmdldCBhcyBIVE1MRWxlbWVudClcbiIsImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgU3RhdGUgfSBmcm9tIFwiLi4vU3RhdGVDb250ZXh0XCI7XG5cbmV4cG9ydCBjb25zdCB1c2VDdXJyZW50U3RhdGUgPSA8VFZhbHVlID0gdW5rbm93bj4oKSA9PiB1c2VDb250ZXh0PFRWYWx1ZT4oU3RhdGUpXG4iLCIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCJ2YXIgbGlzdENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVDbGVhcicpLFxuICAgIGxpc3RDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZURlbGV0ZScpLFxuICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUdldCcpLFxuICAgIGxpc3RDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUhhcycpLFxuICAgIGxpc3RDYWNoZVNldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlzdENhY2hlO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgc3RhY2tDbGVhciA9IHJlcXVpcmUoJy4vX3N0YWNrQ2xlYXInKSxcbiAgICBzdGFja0RlbGV0ZSA9IHJlcXVpcmUoJy4vX3N0YWNrRGVsZXRlJyksXG4gICAgc3RhY2tHZXQgPSByZXF1aXJlKCcuL19zdGFja0dldCcpLFxuICAgIHN0YWNrSGFzID0gcmVxdWlyZSgnLi9fc3RhY2tIYXMnKSxcbiAgICBzdGFja1NldCA9IHJlcXVpcmUoJy4vX3N0YWNrU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGFjaztcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxuICogYHVuZGVmaW5lZGAgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZXEob2JqZWN0W2tleV0sIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25NZXJnZVZhbHVlO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgYmFzZSBmdW5jdGlvbiBmb3IgbWV0aG9kcyBsaWtlIGBfLmZvckluYCBhbmQgYF8uZm9yT3duYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3Qob2JqZWN0KSxcbiAgICAgICAgcHJvcHMgPSBrZXlzRnVuYyhvYmplY3QpLFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcbiAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmFzZUZvcjtcbiIsInZhciBjcmVhdGVCYXNlRm9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUZvcicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9yT3duYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBvYmplY3RgXG4gKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xudmFyIGJhc2VGb3IgPSBjcmVhdGVCYXNlRm9yKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvcjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBhbGxvY1Vuc2FmZSA9IEJ1ZmZlciA/IEJ1ZmZlci5hbGxvY1Vuc2FmZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgIGBidWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIFRoZSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJldHVybiBidWZmZXIuc2xpY2UoKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGFsbG9jVW5zYWZlID8gYWxsb2NVbnNhZmUobGVuZ3RoKSA6IG5ldyBidWZmZXIuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICBidWZmZXIuY29weShyZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQnVmZmVyO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheTtcbiIsInZhciBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XG4gIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVBcnJheUJ1ZmZlcjtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lVHlwZWRBcnJheTtcbiIsIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlBcnJheTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRQcm90b3R5cGU7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsInZhciBiYXNlSXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL19iYXNlSXNBcmd1bWVudHMnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FyZ3VtZW50cztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsInZhciBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAqIGlzIGFuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0FycmF5TGlrZSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2VPYmplY3Q7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUGxhaW5PYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBub2RlVXRpbDtcbiIsInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCwgdW5sZXNzIGBrZXlgIGlzIFwiX19wcm90b19fXCIgb3IgXCJjb25zdHJ1Y3RvclwiLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc2FmZUdldChvYmplY3QsIGtleSkge1xuICBpZiAoa2V5ID09PSAnY29uc3RydWN0b3InICYmIHR5cGVvZiBvYmplY3Rba2V5XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2FmZUdldDtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25WYWx1ZTtcbiIsInZhciBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyk7XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlPYmplY3Q7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcbiAqIFtgT2JqZWN0LmtleXNgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGV4Y2VwdCB0aGF0IGl0IGluY2x1ZGVzIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIG5hdGl2ZUtleXNJbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5c0luO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzSW4gPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5c0luO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzSW4nKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c0luO1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgcGxhaW4gb2JqZWN0IGZsYXR0ZW5pbmcgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nXG4gKiBrZXllZCBwcm9wZXJ0aWVzIG9mIGB2YWx1ZWAgdG8gb3duIHByb3BlcnRpZXMgb2YgdGhlIHBsYWluIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9XG4gKi9cbmZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3QodmFsdWUsIGtleXNJbih2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvUGxhaW5PYmplY3Q7XG4iLCJ2YXIgYXNzaWduTWVyZ2VWYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnbk1lcmdlVmFsdWUnKSxcbiAgICBjbG9uZUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQnVmZmVyJyksXG4gICAgY2xvbmVUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fY2xvbmVUeXBlZEFycmF5JyksXG4gICAgY29weUFycmF5ID0gcmVxdWlyZSgnLi9fY29weUFycmF5JyksXG4gICAgaW5pdENsb25lT2JqZWN0ID0gcmVxdWlyZSgnLi9faW5pdENsb25lT2JqZWN0JyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi9pc1BsYWluT2JqZWN0JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKSxcbiAgICBzYWZlR2V0ID0gcmVxdWlyZSgnLi9fc2FmZUdldCcpLFxuICAgIHRvUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL3RvUGxhaW5PYmplY3QnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VNZXJnZWAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBtZXJnZXMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgbWVyZ2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBtZXJnZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXJnZUZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1lcmdlIHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXG4gKiAgY291bnRlcnBhcnRzLlxuICovXG5mdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBtZXJnZUZ1bmMsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIHZhciBvYmpWYWx1ZSA9IHNhZmVHZXQob2JqZWN0LCBrZXkpLFxuICAgICAgc3JjVmFsdWUgPSBzYWZlR2V0KHNvdXJjZSwga2V5KSxcbiAgICAgIHN0YWNrZWQgPSBzdGFjay5nZXQoc3JjVmFsdWUpO1xuXG4gIGlmIChzdGFja2VkKSB7XG4gICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgc3RhY2tlZCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgdmFyIGlzQ29tbW9uID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcblxuICBpZiAoaXNDb21tb24pIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHNyY1ZhbHVlKSxcbiAgICAgICAgaXNCdWZmID0gIWlzQXJyICYmIGlzQnVmZmVyKHNyY1ZhbHVlKSxcbiAgICAgICAgaXNUeXBlZCA9ICFpc0FyciAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheShzcmNWYWx1ZSk7XG5cbiAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgIGlmIChpc0FyciB8fCBpc0J1ZmYgfHwgaXNUeXBlZCkge1xuICAgICAgaWYgKGlzQXJyYXkob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0FycmF5TGlrZU9iamVjdChvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBjb3B5QXJyYXkob2JqVmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNCdWZmKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVCdWZmZXIoc3JjVmFsdWUsIHRydWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICBuZXdWYWx1ZSA9IGNsb25lVHlwZWRBcnJheShzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWUgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChzcmNWYWx1ZSkgfHwgaXNBcmd1bWVudHMoc3JjVmFsdWUpKSB7XG4gICAgICBuZXdWYWx1ZSA9IG9ialZhbHVlO1xuICAgICAgaWYgKGlzQXJndW1lbnRzKG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IHRvUGxhaW5PYmplY3Qob2JqVmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoIWlzT2JqZWN0KG9ialZhbHVlKSB8fCBpc0Z1bmN0aW9uKG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGluaXRDbG9uZU9iamVjdChzcmNWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzQ29tbW9uKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgc3RhY2suc2V0KHNyY1ZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgbWVyZ2VGdW5jKG5ld1ZhbHVlLCBzcmNWYWx1ZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xuICB9XG4gIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWVyZ2VEZWVwO1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBhc3NpZ25NZXJnZVZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduTWVyZ2VWYWx1ZScpLFxuICAgIGJhc2VGb3IgPSByZXF1aXJlKCcuL19iYXNlRm9yJyksXG4gICAgYmFzZU1lcmdlRGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VNZXJnZURlZXAnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpLFxuICAgIHNhZmVHZXQgPSByZXF1aXJlKCcuL19zYWZlR2V0Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmIChvYmplY3QgPT09IHNvdXJjZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBiYXNlRm9yKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgaWYgKGlzT2JqZWN0KHNyY1ZhbHVlKSkge1xuICAgICAgYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgICA/IGN1c3RvbWl6ZXIoc2FmZUdldChvYmplY3QsIGtleSksIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgICAgfVxuICAgICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfSwga2V5c0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWVyZ2U7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGx5O1xuIiwidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnN0YW50O1xuIiwidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwidmFyIGJhc2VTZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VTZXRUb1N0cmluZycpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb1N0cmluZztcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUmVzdDtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJ2YXIgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzSXRlcmF0ZWVDYWxsID0gcmVxdWlyZSgnLi9faXNJdGVyYXRlZUNhbGwnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVBc3NpZ25lcjtcbiIsInZhciBiYXNlTWVyZ2UgPSByZXF1aXJlKCcuL19iYXNlTWVyZ2UnKSxcbiAgICBjcmVhdGVBc3NpZ25lciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUFzc2lnbmVyJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXG4gKiBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyBpbnRvIHRoZVxuICogZGVzdGluYXRpb24gb2JqZWN0LiBTb3VyY2UgcHJvcGVydGllcyB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAgYXJlXG4gKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcbiAqIGFyZSBtZXJnZWQgcmVjdXJzaXZlbHkuIE90aGVyIG9iamVjdHMgYW5kIHZhbHVlIHR5cGVzIGFyZSBvdmVycmlkZGVuIGJ5XG4gKiBhc3NpZ25tZW50LiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuIFN1YnNlcXVlbnRcbiAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjUuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0ge1xuICogICAnYSc6IFt7ICdiJzogMiB9LCB7ICdkJzogNCB9XVxuICogfTtcbiAqXG4gKiB2YXIgb3RoZXIgPSB7XG4gKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXG4gKiB9O1xuICpcbiAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiB7ICdhJzogW3sgJ2InOiAyLCAnYyc6IDMgfSwgeyAnZCc6IDQsICdlJzogNSB9XSB9XG4gKi9cbnZhciBtZXJnZSA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCkge1xuICBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlO1xuIiwiXG5pbnRlcmZhY2UgSW5qZWN0TGlua09wdGlvbnMge1xuICByZWw6IHN0cmluZ1xuICBocmVmOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IGluamVjdExpbmsgPShvcHRpb25zOiBJbmplY3RMaW5rT3B0aW9ucykgPT4ge1xuICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKVxuXG4gIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gbGluay5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSkpXG5cbiAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbn1cbiIsImltcG9ydCB7IENhbGxiYWNrIH0gZnJvbSAnLi90eXBlcydcblxudHlwZSBWaXNpdG9yID0gQ2FsbGJhY2s8W1Byb3BlcnR5S2V5LCB1bmtub3duXT5cblxuZXhwb3J0IGNvbnN0IGl0ZXJhdG9yID0gKGlucHV0OiB1bmtub3duLCB2aXNpdG9yOiBWaXNpdG9yKTogYW55ID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0Lm1hcCgoZWwsIGluZGV4KSA9PiBpdGVyYXRvcih2aXNpdG9yKGluZGV4LCBlbCksIHZpc2l0b3IpKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaW5wdXQpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGFjY1trZXldID0gaXRlcmF0b3IodmlzaXRvcihrZXksIHZhbHVlKSwgdmlzaXRvcilcblxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIHt9IGFzIGFueSlcbiAgfVxuXG4gIHJldHVybiBpbnB1dFxufVxuIiwiaW1wb3J0IHsgQW55T2JqZWN0IH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCBsb2Rhc2hNZXJnZSBmcm9tICdsb2Rhc2gvbWVyZ2UnXG5cbmV4cG9ydCBjb25zdCBpc0VtcHR5VmFsdWUgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudWxsIHwgdW5kZWZpbmVkID0+XG4gICF2YWx1ZSAmJiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcbmV4cG9ydCBjb25zdCBpc1ZhbHVlID0gPFQ+KHZhbHVlOiBUKTogdmFsdWUgaXMgRXhjbHVkZTxULCBudWxsIHwgdW5kZWZpbmVkPiA9PiAhaXNFbXB0eVZhbHVlKHZhbHVlKVxuZXhwb3J0IGNvbnN0IG5vb3AgPSAoKSA9PiB1bmRlZmluZWRcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnN0YW50cyA9IDxLIGV4dGVuZHMgc3RyaW5nPiguLi5jb25zdGFudHM6IEtbXSkgPT4ge1xuICByZXR1cm4gY29uc3RhbnRzLnJlZHVjZTx7IFtQIGluIEtdOiBQIH0+KChhY2MsIGNvbnN0YW50KSA9PiB7XG4gICAgYWNjW2NvbnN0YW50XSA9IGNvbnN0YW50XG4gICAgcmV0dXJuIGFjY1xuICB9LCB7fSBhcyB7IFtQIGluIEtdOiBQIH0pXG59XG5cbmV4cG9ydCBjb25zdCBwaWNrID0gPFRWYWx1ZSBleHRlbmRzIEFueU9iamVjdD4ob2JqOiBUVmFsdWUsIC4uLnByb3BzOiAoa2V5b2YgVFZhbHVlKVtdKSA9PiB7XG4gIHJldHVybiBwcm9wcy5yZWR1Y2UoKHJlc3VsdCwgcHJvcCkgPT4ge1xuICAgIHJlc3VsdFtwcm9wXSA9IG9ialtwcm9wXVxuICAgIHJldHVybiByZXN1bHRcbiAgfSwge30gYXMgYW55KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb21pdDxUIGV4dGVuZHMgQW55T2JqZWN0LCBQIGV4dGVuZHMgc3RyaW5nW10+KG9iajogVCwgLi4ucHJvcHM6IFApOiBPbWl0PFQsIFBbbnVtYmVyXT4ge1xuICBjb25zdCByZXN1bHQgPSB7IC4uLm9iaiB9XG4gIHByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgZGVsZXRlIHJlc3VsdFtwcm9wXVxuICB9KVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBnZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgZGVmVmFsdWU/OiB1bmtub3duKTogYW55ID0+IHtcbiAgaWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IHBhdGhBcnJheSA9IChBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGgubWF0Y2goLyhbXlsuXFxdXSkrL2cpKSBhcyBzdHJpbmdbXVxuICBjb25zdCByZXN1bHQgPSBwYXRoQXJyYXkucmVkdWNlKChwcmV2T2JqOiBBbnlPYmplY3QsIGtleTogc3RyaW5nKSA9PiBwcmV2T2JqICYmIHByZXZPYmpba2V5XSwgb2JqKVxuICAvLyBJZiBmb3VuZCB2YWx1ZSBpcyB1bmRlZmluZWQgcmV0dXJuIGRlZmF1bHQgdmFsdWU7IG90aGVyd2lzZSByZXR1cm4gdGhlIHZhbHVlXG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZlZhbHVlIDogcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBzZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHtcbiAgY29uc3QgcGF0aEFycmF5ID0gKEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5tYXRjaCgvKFteWy5cXF1dKSsvZykpIGFzIHN0cmluZ1tdXG5cbiAgcmV0dXJuIHBhdGhBcnJheS5yZWR1Y2UoKGFjYywga2V5LCBpKSA9PiB7XG4gICAgaWYgKGFjY1trZXldID09PSB1bmRlZmluZWQpIGFjY1trZXldID0ge31cbiAgICBpZiAoaSA9PT0gcGF0aEFycmF5Lmxlbmd0aCAtIDEpIGFjY1trZXldID0gdmFsdWVcbiAgICByZXR1cm4gYWNjW2tleV1cbiAgfSwgb2JqKVxufVxuXG5leHBvcnQgY29uc3QgaGV4VG9SZ2IgPSAoaGV4OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgY2hhcnMgPSBoZXguc2xpY2UoMSlcblxuICBpZiAoY2hhcnMubGVuZ3RoID09PSAzKSB7XG4gICAgaGV4ID0gY2hhcnNcbiAgICAgIC5zcGxpdCgnJylcbiAgICAgIC5tYXAodmFsID0+IGAke3ZhbH0ke3ZhbH1gKVxuICAgICAgLmpvaW4oJycpXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KVxuXG4gIHJldHVybiByZXN1bHRcbiAgICA/IHtcbiAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXG4gICAgICAgIGc6IHBhcnNlSW50KHJlc3VsdFsyXSwgMTYpLFxuICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KVxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCBpc0pzb25TYW1lID0gKC4uLnZhbHVlczogdW5rbm93bltdKSA9PiB7XG4gIHJldHVybiB2YWx1ZXMubWFwKHZhbHVlID0+IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkuZXZlcnkoKHZhbCwgXywgYXJyKSA9PiB2YWwgPT09IGFyclswXSlcbn1cblxuZXhwb3J0IGNvbnN0IHJnYlRvUmdiYSA9IChyZ2I6IHN0cmluZywgYWxwaGEgPSAxKTogc3RyaW5nID0+IHJnYi5yZXBsYWNlKCcpJywgYCwgJHthbHBoYX0pYCkucmVwbGFjZSgncmdiJywgJ3JnYmEnKVxuXG5leHBvcnQgY29uc3QgbWVyZ2UgPSBsb2Rhc2hNZXJnZVxuXG5leHBvcnQgY29uc3QgZGV2aWNlcyA9IFsnZGVza3RvcCcsICdsYXB0b3AnLCAndGFibGV0JywgJ21vYmlsZSddIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBCUkVBS1BPSU5UUyA9IHtcbiAgbW9iaWxlOiAzMjAsXG4gIHRhYmxldDogNzY4LFxuICBsYXB0b3A6IDEwMjQsXG4gIGRlc2t0b3A6IDE5MjBcbn0gYXMgY29uc3RcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcydcbmV4cG9ydCAqIGZyb20gJy4vZG9tJ1xuZXhwb3J0ICogZnJvbSAnLi9pdGVyYXRvcidcbiIsImltcG9ydCB7IEFueU9iamVjdCwgRGV2aWNlLCBkZXZpY2VzLCBFeHRyYWN0UnVsZXMsIGlzVmFsdWUsIGl0ZXJhdG9yLCBMYXllciwgUnVsZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgQW55U3RhdGUgfSBmcm9tICcuLi9wcm9tb3MvU2ltcGxlR2lmdC90eXBlcydcblxuY29uc3QgaXNWYWxpZFJ1bGUgPSAoc3RhdGU6IEFueU9iamVjdCA9IHt9KTogc3RhdGUgaXMgUnVsZSA9PlxuICB0eXBlb2Ygc3RhdGUgPT09ICdvYmplY3QnICYmIGlzVmFsdWUoc3RhdGUpICYmIGRldmljZXMuZXZlcnkoZGV2aWNlID0+IGRldmljZSBpbiBzdGF0ZSlcblxuZXhwb3J0IGNvbnN0IGdldFJ1bGVzID0gPFRTdGF0ZSBleHRlbmRzIEFueVN0YXRlLCBURGV2aWNlIGV4dGVuZHMgRGV2aWNlID0gJ2Rlc2t0b3AnPihcbiAgc3RhdGU6IFRTdGF0ZSxcbiAgZGV2aWNlOiBURGV2aWNlXG4pOiBFeHRyYWN0UnVsZXM8VFN0YXRlLCBURGV2aWNlPiA9PiB7XG4gIGlmICghc3RhdGUpIHJldHVybiBzdGF0ZVxuXG4gIHJldHVybiBpdGVyYXRvcihzdGF0ZSwgKF9rZXksIHZhbHVlOiBhbnkpID0+IHtcbiAgICBpZiAoaXNWYWxpZFJ1bGUodmFsdWUpKSB7XG4gICAgICAvLyBjb25zdCBwcm94eVJ1bGVzID0geyAuLi52YWx1ZSB9XG4gICAgICAvL1xuICAgICAgLy8gZGV2aWNlcy5mb3JFYWNoKGRldmljZVByb3AgPT4ge1xuICAgICAgLy8gICBpZiAoZGV2aWNlUHJvcCAhPT0gZGV2aWNlKSB7XG4gICAgICAvLyAgICAgZGVsZXRlIHByb3h5UnVsZXNbZGV2aWNlUHJvcF1cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSlcbiAgICAgIC8vXG4gICAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZSwgcHJveHlSdWxlcyk7XG4gICAgICAvLyByZXR1cm4ge1xuICAgICAgLy8gICAuLi5wcm94eVJ1bGVzW2RldmljZV0sXG4gICAgICAvL1xuICAgICAgLy8gfVxuICAgICAgcmV0dXJuIHZhbHVlW2RldmljZV1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfSkgYXMgRXh0cmFjdFJ1bGVzPFRTdGF0ZSwgVERldmljZT5cbn1cbiIsImltcG9ydCB7IERldmljZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0UnVsZXMgfSBmcm9tICcuLi9oZWxwZXJzL2dldERldmljZVN0YXRlJ1xuaW1wb3J0IHsgQW55U3RhdGUgfSBmcm9tICcuLi9wcm9tb3MvU2ltcGxlR2lmdC90eXBlcydcblxuZXhwb3J0IGNvbnN0IHVzZUdldFJ1bGVzID0gPFRTdGF0ZSBleHRlbmRzIEFueVN0YXRlLCBURGV2aWNlIGV4dGVuZHMgRGV2aWNlPihzdGF0ZTogVFN0YXRlLCBkZXZpY2U6IFREZXZpY2UpID0+XG4gIGdldFJ1bGVzPFRTdGF0ZSwgVERldmljZT4oc3RhdGUsIGRldmljZSlcbiIsImltcG9ydCB7IEJSRUFLUE9JTlRTLCBEZXZpY2UgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IHVzZUxheW91dEVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHsgTXV0YWJsZVJlZiB9IGZyb20gJ3ByZWFjdC9ob29rcydcblxuaW50ZXJmYWNlIE9wdGlvbnMge1xuICB0YXJnZXRSZWY6IE11dGFibGVSZWY8SFRNTERpdkVsZW1lbnQ+XG4gIC8qKlxuICAgKiBQcm9tbyDQstGB0YLRgNCw0LjQstCw0LXRgtGB0Y8g0LIg0YDQsNC30L3Ri9C1IERPTSDQuCDQvNGLINC90LUg0LfQvdCw0LXQvCDRgNCw0LfQvNC10YAg0LrQsNC60L7Qs9C+INC60L7QvdGC0LXQudC90LXRgNCwXG4gICAqINGP0LLQu9GP0LXRgtGB0Y8g0L3Rg9C20L3Ri9C8LiDQndCw0L/RgNC40LzQtdGAIEdpZnQqINC30LDQvdC40LzQsNC10YIg0LLRgdC10LPQviAzMHB4LCDQuCDQvdC10L7QsdGF0L7QtNC40LzRi9C5INC60L7QvdGC0LXQudC90LXRgFxuICAgKiDQvNC+0LbQtdGCINC90LDRhdC+0LTQuNGC0YzRgdGPINCz0L7RgNCw0LfQtNC+INCy0YvRiNC1LlxuICAgKi9cbiAgcGFyZW50S2V5Pzogc3RyaW5nXG4gIGJyZWFrcG9pbnRzPzogdHlwZW9mIEJSRUFLUE9JTlRTXG59XG5cbmV4cG9ydCBjb25zdCB1c2VDb250YWluZXJEZXZpY2UgPSAoe1xuICB0YXJnZXRSZWYsXG4gIHBhcmVudEtleSA9ICdkZXZpY2UtY29udGFpbmVyJyxcbiAgYnJlYWtwb2ludHMgPSBCUkVBS1BPSU5UU1xufTogT3B0aW9ucykgPT4ge1xuICBjb25zdCBbZGV2aWNlLCBzZXREZXZpY2VdID0gdXNlU3RhdGU8RGV2aWNlPignZGVza3RvcCcpXG5cbiAgY29uc3QgY2hlY2tEZXZpY2UgPSAocGFyZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHBhcmVudFdpZHRoID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHx8IDBcbiAgICBjb25zdCBmaW5kRGV2aWNlID0gT2JqZWN0LmVudHJpZXMoYnJlYWtwb2ludHMpLmZpbmQoKFssIHZhbHVlXSkgPT4gdmFsdWUgPj0gcGFyZW50V2lkdGgpPy5bMF0gYXMgRGV2aWNlXG5cbiAgICBzZXREZXZpY2UoZmluZERldmljZSlcbiAgfVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRhcmdldFJlZi5jdXJyZW50LmNsb3Nlc3QoYFtkYXRhLSR7cGFyZW50S2V5fV1gKVxuXG4gICAgaWYgKHBhcmVudEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IGNoZWNrRGV2aWNlKHBhcmVudEVsZW1lbnQpKVxuICAgICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShwYXJlbnRFbGVtZW50KVxuXG4gICAgICBjaGVja0RldmljZShwYXJlbnRFbGVtZW50KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgcmV0dXJuIGRldmljZVxufVxuIiwiaW1wb3J0IHsgQW55T2JqZWN0LCBkZXZpY2VzLCBGaXRPcHRpb24sIGhleFRvUmdiLCBpc0VtcHR5VmFsdWUsIGlzVmFsdWUsIHJnYlRvUmdiYSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgRW1pdHRlclR5cGUgfSBmcm9tICdzcmMvcmVuZGVyRHJpdmVyJ1xuaW1wb3J0IHsgaW5qZWN0U3R5bGVSdWxlcywgU3R5bGVSdWxlcyB9IGZyb20gJ3NyYy91dGlscy9pbmplY3RTdHlsZVJ1bGVzJ1xuaW1wb3J0IHsgaXNWYWxpZFN0eWxlS2V5IH0gZnJvbSAnLi9pc1ZhbGlkU3R5bGVLZXknXG5cbi8qKlxuICog0J/Qu9Cw0LPQuNC9INC/0YDQuNC80LXQvdGP0LXRgiDQv9GA0LDQstC40LvQsDog0YHRgtC40LvQuCwgaW5uZXJUZXh0IC4uLlxuICog0JXRgdC70Lgg0LrQvtC90YLQtdC90YLQsCDQvdC10YIsINGC0L4g0J3QvtC00LAg0YHQutGA0YvQstCw0LXRgtGB0Y9cbiAqL1xuXG50eXBlIEN1c3RvbVN0eWxlcyA9IFBhcnRpYWw8XG4gIE9taXQ8U3R5bGVSdWxlcywgJ2JvcmRlcldpZHRoJyB8ICdtaW5IZWlnaHQnIHwgJ21pbldpZHRoJyB8ICdmb250U2l6ZSc+ICYge1xuICAgIG1pbkhlaWdodDogbnVtYmVyXG4gICAgbWluV2lkdGg6IG51bWJlclxuICAgIGZvbnRTaXplOiBudW1iZXJcbiAgfVxuPlxuXG5kZWNsYXJlIG1vZHVsZSAnc3JjL3JlbmRlckRyaXZlcicge1xuICBpbnRlcmZhY2UgUmVuZGVyRHJpdmVyUnVsZSBleHRlbmRzIEN1c3RvbVN0eWxlcyB7XG4gICAgaW5uZXJIVE1MPzogc3RyaW5nXG4gICAgaW5uZXJUZXh0Pzogc3RyaW5nXG4gICAgY29ybmVyPzogbnVtYmVyXG4gICAgYmFja2dyb3VuZEZpdD86IEZpdE9wdGlvblxuICAgIGJhY2tncm91bmRDb2xvck9wYWNpdHk/OiBudW1iZXJcbiAgICBpc0JvbGQ/OiBib29sZWFuXG4gICAgaXNJdGFsaWM/OiBib29sZWFuXG4gICAgaXNUaHJvdWdoPzogYm9vbGVhblxuICAgICRhdHRycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj5cbiAgfVxufVxuXG5jb25zdCB3cmFwVG8gPSAodmFsdWU6IHN0cmluZyB8IG51bWJlciwgdW50aWw6ICclJyB8ICdweCcpID0+IGAke3ZhbHVlfSR7dW50aWx9YFxuXG5jb25zdCB0b1B4ID0gKGtleTogc3RyaW5nKSA9PiBrZXkuc3RhcnRzV2l0aCgncHhfJylcbmNvbnN0IHRvUGVyY2VudCA9IChrZXk6IHN0cmluZykgPT4ga2V5LnN0YXJ0c1dpdGgoJ3BlcmNlbnRfJylcblxuY29uc3QgZm9ybWF0UnVsZSA9IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICBsZXQgbmV3S2V5ID0ga2V5XG4gIGxldCBuZXdWYWx1ZSA9IHZhbHVlXG5cbiAgaWYgKHRvUHgobmV3S2V5KSkge1xuICAgIG5ld0tleSA9IG5ld0tleS5yZXBsYWNlKCdweF8nLCAnJylcbiAgICBuZXdWYWx1ZSA9IHdyYXBUbyh2YWx1ZSwgJ3B4JylcbiAgfVxuICBpZiAodG9QZXJjZW50KG5ld0tleSkpIHtcbiAgICBuZXdLZXkgPSBuZXdLZXkucmVwbGFjZSgncGVyY2VudF8nLCAnJylcbiAgICBuZXdWYWx1ZSA9IHdyYXBUbyh2YWx1ZSwgJyUnKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBrZXk6IG5ld0tleSxcbiAgICB2YWx1ZTogbmV3VmFsdWVcbiAgfVxufVxuXG5jb25zdCBERUZBVUxUX1RPX1BYID0gW1xuICAnYm9yZGVyV2lkdGgnLFxuICAnYm9yZGVyTGVmdFdpZHRoJyxcbiAgJ2JvcmRlclJpZ2h0V2lkdGgnLFxuICAnYm9yZGVyVG9wV2lkdGgnLFxuICAnYm9yZGVyQm90dG9tV2lkdGgnLFxuICAnbWluSGVpZ2h0JyxcbiAgJ21pbldpZHRoJyxcbiAgJ21heFdpZHRoJyxcbiAgJ21heEhlaWdodCcsXG4gICdmb250U2l6ZScsXG4gICdoZWlnaHQnLFxuICAnd2lkdGgnLFxuICAnbGV0dGVyU3BhY2luZycsXG4gICdmb250U2l6ZScsXG4gICdsZWZ0JyxcbiAgJ3JpZ2h0JyxcbiAgJ3RvcCcsXG4gICdib3R0b20nLFxuICAnbWFyZ2luVG9wJyxcbiAgJ21hcmdpbkJvdHRvbScsXG4gICdtYXJnaW5MZWZ0JyxcbiAgJ21hcmdpblJpZ2h0JyxcbiAgJ3BhZGRpbmdUb3AnLFxuICAncGFkZGluZ0JvdHRvbScsXG4gICdwYWRkaW5nTGVmdCcsXG4gICdwYWRkaW5nUmlnaHQnXG5dXG5cbmV4cG9ydCBjb25zdCBwYXJzZVJ1bGVzID0gKHJ1bGVzOiBBbnlPYmplY3QsIGxheWVyPzogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhydWxlcylcblxuICBpZiAoa2V5cy5pbmNsdWRlcygnaW5uZXJIVE1MJykgfHwga2V5cy5pbmNsdWRlcygnaW5uZXJUZXh0JykpIHtcbiAgICBjb25zb2xlLndhcm4oYFdhcm5pbmchIElubmVySFRNTCBhbmQgaW5uZXJUZXh0IGlzIGRlcHJlY2F0ZWQuIFVzZSBcImNoaWxkcmVuXCIgcHJvcGVydHkuYCwgbGF5ZXIpXG4gIH1cblxuICBpZiAodHlwZW9mIHJ1bGVzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBydWxlc1xuICB9XG5cbiAgaWYgKCd0eXBvZ3JhcGh5JyBpbiBydWxlcyAmJiAnYWNjZW50VHlwb2dyYXBoeScgaW4gcnVsZXMpIHtcbiAgICBjb25zdCB0eXBvZ3JhcGh5ID0gcnVsZXMudHlwb2dyYXBoeVxuICAgIGNvbnN0IGFjY2VudFR5cG9ncmFwaHkgPSBydWxlcy5hY2NlbnRUeXBvZ3JhcGh5XG5cbiAgICBydWxlcyA9IHtcbiAgICAgIC4uLnJ1bGVzLFxuICAgICAgLi4udHlwb2dyYXBoeSxcbiAgICAgICctLWZvbnQtZmFtaWx5JzogYWNjZW50VHlwb2dyYXBoeS5mb250RmFtaWx5LFxuICAgICAgJy0tYWNjZW50LWNvbG9yJzogYWNjZW50VHlwb2dyYXBoeS5jb2xvcixcbiAgICAgICdweF8tLWFjY2VudC1zaXplJzogYWNjZW50VHlwb2dyYXBoeS5mb250U2l6ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhydWxlcykucmVkdWNlKChhY2MsIFtwcm9wS2V5LCBwcm9wVmFsdWVdKSA9PiB7XG4gICAgaWYgKERFRkFVTFRfVE9fUFguaW5jbHVkZXMocHJvcEtleSkpIHtcbiAgICAgIHByb3BWYWx1ZSA9IHdyYXBUbyhwcm9wVmFsdWUsICdweCcpXG4gICAgfVxuXG4gICAgY29uc3QgeyBrZXksIHZhbHVlIH0gPSBmb3JtYXRSdWxlKHByb3BLZXksIHByb3BWYWx1ZSlcbiAgICBhY2Nba2V5XSA9IHZhbHVlXG5cbiAgICBpZiAoa2V5ID09PSAnaW5uZXJIVE1MJykge1xuICAgICAgYWNjLmlubmVySFRNTCA9IGlzVmFsdWUodmFsdWUpID8gYCR7dmFsdWV9YCA6ICcnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lubmVyVGV4dCcpIHtcbiAgICAgIGFjYy5pbm5lclRleHQgPSBpc1ZhbHVlKHZhbHVlKSA/IGAke3ZhbHVlfWAgOiAnJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdjaGlsZHJlbicpIHtcbiAgICAgIGFjYy5jaGlsZHJlbiA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyAoaXNWYWx1ZSh2YWx1ZSkgPyBgJHt2YWx1ZX1gIDogJycpIDogdmFsdWVcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaW5uZXJIVE1MJyB8fCBrZXkgPT09ICdpbm5lclRleHQnIHx8IGtleSA9PT0gJ2NoaWxkcmVuJykge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGFjYy5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICB9IGVsc2UgaWYgKGlzRW1wdHlWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgYWNjLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5LmluY2x1ZGVzKCdib3JkZXJXaWR0aCcpKSB7XG4gICAgICBhY2MuYm9yZGVyU3R5bGUgPSAnc29saWQnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2Nvcm5lcicpIHtcbiAgICAgIGFjYy5ib3JkZXJSYWRpdXMgPSB3cmFwVG8odmFsdWUsICdweCcpXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JhY2tncm91bmRGaXQnKSB7XG4gICAgICBhY2MuYmFja2dyb3VuZFNpemUgPSB2YWx1ZSBhcyBGaXRPcHRpb25cbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYmFja2dyb3VuZEltYWdlJyAmJiBpc1ZhbHVlKHZhbHVlKSkge1xuICAgICAgYWNjLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoJHt2YWx1ZX0pYFxuICAgICAgYWNjLmJhY2tncm91bmRSZXBlYXQgPSAnbm8tcmVwZWF0J1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5JyAmJiBpc1ZhbHVlKGFjYy5iYWNrZ3JvdW5kQ29sb3JPcGFjaXR5KSAmJiBpc1ZhbHVlKGFjYy5iYWNrZ3JvdW5kQ29sb3IpKSB7XG4gICAgICBjb25zdCByZ2IgPSBoZXhUb1JnYihhY2MuYmFja2dyb3VuZENvbG9yKVxuICAgICAgaWYgKHJnYikge1xuICAgICAgICBhY2MuYmFja2dyb3VuZENvbG9yID0gcmdiVG9SZ2JhKGByZ2IoJHtyZ2Iucn0sICR7cmdiLmd9LCAke3JnYi5ifSlgLCArYWNjLmJhY2tncm91bmRDb2xvck9wYWNpdHkgLyAxMDApXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lzQm9sZCcpIHtcbiAgICAgIGFjYy5mb250V2VpZ2h0ID0gdmFsdWUgPyAnYm9sZCcgOiAnaW5pdGlhbCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaXNJdGFsaWMnKSB7XG4gICAgICBhY2MuZm9udFN0eWxlID0gdmFsdWUgPyAnaXRhbGljJyA6ICdpbml0aWFsJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpc1Rocm91Z2gnKSB7XG4gICAgICBhY2MudGV4dERlY29yYXRpb24gPSB2YWx1ZSA/ICdsaW5lLXRocm91Z2gnIDogJ2luaXRpYWwnXG4gICAgfVxuXG4gICAgcmV0dXJuIGFjY1xuICB9LCBydWxlcylcbn1cbiIsImltcG9ydCB7IHBhcnNlUnVsZXMgfSBmcm9tICcuLi9oZWxwZXJzL3BhcnNlUnVsZXMnXG5pbXBvcnQgeyBBbnlPYmplY3QgfSBmcm9tICdAYWRzdG9yZS91dGlscydcblxuY29uc3QgaXNWYWxpZFJ1bGUgPSAocnVsZTogQW55T2JqZWN0KSA9PiB0eXBlb2YgcnVsZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkocnVsZSkgJiYgJ3BhcmVudCcgaW4gcnVsZVxuXG5leHBvcnQgY29uc3QgdXNlUGFyc2VSdWxlcyA9IChzdGF0ZTogdW5rbm93bikgPT5cbiAgT2JqZWN0LmVudHJpZXMoc3RhdGUpLnJlZHVjZSgoYWNjLCBbbGF5ZXIsIHJ1bGVdKSA9PiB7XG4gICAgYWNjW2xheWVyXSA9IGlzVmFsaWRSdWxlKHJ1bGUpID8gcGFyc2VSdWxlcyh7IC4uLnN0YXRlW2xheWVyXSB9LCBsYXllcikgOiBydWxlXG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIHt9KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICBjaGlsZHJlbjogc3RyaW5nXG59XG5cbmNvbnN0IERpc3BsYXlUZXh0OiBGQzxQcm9wcz4gPSAoeyBjaGlsZHJlbiwgLi4ucmVzdCB9KSA9PiB7XG4gIGNvbnN0IGZvcm1hdFZhbHVlID0gY2hpbGRyZW4/LnJlcGxhY2UoJ3NjcmlwdCcsICcnKT8ucmVwbGFjZSgve3soLio/KX19L2csIGA8c3Bhbj4kMTwvc3Bhbj5gKVxuXG4gIHJldHVybiA8ZGl2IHsuLi5yZXN0fSBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IGZvcm1hdFZhbHVlIH19IC8+XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpc3BsYXlUZXh0XG4iLCJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5cbmV4cG9ydCBjb25zdCB1c2VUb2dnbGUgPSAoKSA9PiB7XG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICByZXR1cm4gW2lzT3BlbiwgKCkgPT4gc2V0SXNPcGVuKHByZXYgPT4gIXByZXYpXVxufVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuXG5jb25zdCBDbG9zZUljb246IEZDID0gKCkgPT4gKFxuICA8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzIwJyBoZWlnaHQ9JzIwJyB2aWV3Qm94PScwIDAgMjQgMjQnPlxuICAgIDxwYXRoXG4gICAgICBkPSdNMTcuNjU5IDQuOTI5YTEgMSAwIDEgMSAxLjQxNCAxLjQxNEwxMy40MTYgMTJsNS42NTcgNS42NTdhMSAxIDAgMCAxLTEuNDE1IDEuNDE0bC01LjY1Ni01LjY1Ny01LjY1NyA1LjY1N2ExIDEgMCAwIDEtMS40MTQtMS40MTRMMTAuNTg3IDEyIDQuOTMxIDYuMzQzQTEgMSAwIDEgMSA2LjM0NSA0LjkzbDUuNjU3IDUuNjU3IDUuNjU2LTUuNjU3WidcbiAgICAgIGZpbGw9J2N1cnJlbnRDb2xvcidcbiAgICA+PC9wYXRoPlxuICA8L3N2Zz5cbilcblxuZXhwb3J0IGRlZmF1bHQgQ2xvc2VJY29uXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmNvbnN0IEdpZnRJY29uOiBGQyA9ICgpID0+IChcbiAgPHN2ZyB2aWV3Qm94PScwIDAgMTYgMTYnPlxuICAgIDxwYXRoXG4gICAgICBmaWxsPSdjdXJyZW50Q29sb3InXG4gICAgICBmaWxsUnVsZT0nZXZlbm9kZCdcbiAgICAgIGQ9J00yLjEzIDhIN3Y3LjMxSDMuMjJhMS4wOSAxLjA5IDAgMDEtMS4wOS0xLjA5ek05IDE1LjM0aDMuODFhMS4wOSAxLjA5IDAgMDAxLjA5LTEuMDlWOEg5em01LjgtOS45NHYxLjE5YS40OC40OCAwIDAxLS40OC40OEgxLjcxYS40OC40OCAwIDAxLS40OC0uNDhWNS40YzAtLjU5Ni40ODQtMS4wOCAxLjA4LTEuMDhINWEyLjQ4IDIuNDggMCAwMS0xLjQ3LTEuNjUgMS42MiAxLjYyIDAgMDEuMjYtMS40IDEuNTcgMS41NyAwIDAxMS0uNThjLjExLS4wMS4yMi0uMDEuMzMgMGEyLjUgMi41IDAgMDEyIDFBOSA5IDAgMDE4IDMuMjJhMTAuMzggMTAuMzggMCAwMS45MS0xLjU0IDIuNDkgMi40OSAwIDAxMS45My0xaC4zNmMuMzY5LjA2NS43MDIuMjYuOTQuNTUuMzEuNDA3LjQxNC45MzYuMjggMS40M2EyLjQ4IDIuNDggMCAwMS0xLjQ1IDEuNjRoMi43N2ExLjA4IDEuMDggMCAwMTEuMDMgMS4xek04LjY2IDRhOS44MSA5LjgxIDAgMDAxLjktLjU1IDEuNTIgMS41MiAwIDAwLjg4LTEgLjY4LjY4IDAgMDAtLjEtLjU5LjYuNiAwIDAwLS4zNC0uMjIuNTguNTggMCAwMC0uMTggMCAxLjUyIDEuNTIgMCAwMC0xLjE3LjYzQTkuMDYgOS4wNiAwIDAwOC42NiA0em0tMy4zMi0uNThBOS42MiA5LjYyIDAgMDA3LjI1IDRhOC41OSA4LjU5IDAgMDAtMS0xLjcyIDEuNTEgMS41MSAwIDAwLTEuMTgtLjYzaC0uMTNhLjY2LjY2IDAgMDAtLjM5LjIyLjY2LjY2IDAgMDAtLjA5LjU3Yy4xMy40NDMuNDUzLjgwNC44OC45OHonXG4gICAgPjwvcGF0aD5cbiAgPC9zdmc+XG4pXG5cbmV4cG9ydCBkZWZhdWx0IEdpZnRJY29uXG4iLCJpbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnLi4vdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IGlzVmFsdWUgfSBmcm9tICdAYWRzdG9yZS91dGlscydcblxudHlwZSBBbmltYXRpb25OYW1lID0gJ2ZhZGUnIHwgJ3B1bHNlJyB8ICd3aWdnbGUnIHwgJ2dyYWRpZW50J1xuXG5jb25zdCBhbmltYXRpb25zTWFwID0gKGFuaW1hdGlvbnM6IFJlY29yZDxBbmltYXRpb25OYW1lLCBzdHJpbmc+KSA9PiAoe1xuICBmYWRlOiBgJHthbmltYXRpb25zLmZhZGV9IDJzIGxpbmVhciBpbmZpbml0ZWAsXG4gIHB1bHNlOiBgJHthbmltYXRpb25zLnB1bHNlfSAuM3MgbGluZWFyIDBzIGluZmluaXRlIGFsdGVybmF0ZSBmb3J3YXJkc2AsXG4gIHdpZ2dsZTogYCR7YW5pbWF0aW9ucy53aWdnbGV9IDJzIGxpbmVhciBpbmZpbml0ZWAsXG4gIGdyYWRpZW50OiBgJHthbmltYXRpb25zLmdyYWRpZW50fSAzcyBlYXNlIGluZmluaXRlYCxcbn0pXG5cbmV4cG9ydCBjb25zdCB1c2VHaWZ0UnVsZXMgPSAoZGV2aWNlU3RhdGU6IHVua25vd24sIGFuaW1hdGlvbnM6IFJlY29yZDxBbmltYXRpb25OYW1lLCBzdHJpbmc+KSA9PiB7XG4gIGNvbnN0IGZ1bGxBbmltYXRpb25zID0gYW5pbWF0aW9uc01hcChhbmltYXRpb25zKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IGhhc0ljb24gPSBydWxlcz8uaWNvbj8uaGFzSWNvblxuXG4gIGNvbnN0IGFycm93UnVsZXMgPSB7XG4gICAgbGVmdDogYCR7KyhkZXZpY2VTdGF0ZT8uY29udGFpbmVyPy5sZWZ0IHx8IDApICogLTEgKyA4fXB4YCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHJ1bGVzPy5jb250YWluZXI/LmJhY2tncm91bmRDb2xvcixcbiAgICBib3JkZXJUb3BXaWR0aDogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyV2lkdGgsXG4gICAgYm9yZGVyVG9wQ29sb3I6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlckNvbG9yLFxuICAgIGJvcmRlclRvcFN0eWxlOiAnc29saWQnLFxuICAgIGJvcmRlckxlZnRXaWR0aDogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyV2lkdGgsXG4gICAgYm9yZGVyTGVmdENvbG9yOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJDb2xvcixcbiAgICBib3JkZXJMZWZ0U3R5bGU6ICdzb2xpZCdcbiAgfVxuXG4gIGNvbnN0IGJvZHlSdWxlcyA9IHtcbiAgICBsZWZ0OiBydWxlcz8uY29udGFpbmVyPy5sZWZ0XG4gIH1cblxuICBjb25zdCBhbGxBbmltYXRpb25zID0gKHJ1bGVzPy5pY29uPy5hbmltYXRpb25zIHx8IFtdKVxuICAgIC5tYXAoKGFuaW1hdGlvbjogQW5pbWF0aW9uTmFtZSkgPT4gZnVsbEFuaW1hdGlvbnNbYW5pbWF0aW9uXSlcbiAgICAuam9pbignLCAnKVxuXG4gIGNvbnN0IGJhY2tncm91bmRTdHlsZXMgPVxuICAgIGlzVmFsdWUocnVsZXM/Lmljb24/LmdyYWRpZW50Q29sb3IpICYmIHJ1bGVzPy5pY29uPy5hbmltYXRpb25zLmluY2x1ZGVzKCdncmFkaWVudCcpXG4gICAgICA/IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBgbGluZWFyLWdyYWRpZW50KC05MGRlZywgJHtydWxlcy5pY29uPy5iYWNrZ3JvdW5kQ29sb3J9IDAlLCAke3J1bGVzPy5pY29uPy5ncmFkaWVudENvbG9yfSAxMDAlKSAwJSAwJSAvIDQwMCUgNDAwJWAsXG4gICAgICAgICAgYmFja2dyb3VuZFNpemU6ICc0MDAlIDQwMCUnXG4gICAgICAgIH1cbiAgICAgIDoge31cblxuICBjb25zdCBpY29uUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/Lmljb24gfHwge30sXG4gICAgYW5pbWF0aW9uOiBhbGxBbmltYXRpb25zLFxuICAgIC4uLmJhY2tncm91bmRTdHlsZXNcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaGFzSWNvbixcbiAgICBhcnJvd1J1bGVzLFxuICAgIGJvZHlSdWxlcyxcbiAgICBpY29uUnVsZXNcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IGJhY2tncm91bmRPcHRpb25zID0gWydiYWNrZ3JvdW5kQ29sb3InLCAnYmFja2dyb3VuZENvbG9yT3BhY2l0eScsICdiYWNrZ3JvdW5kSW1hZ2UnLCAnYmFja2dyb3VuZEZpdCddXG5cbmV4cG9ydCBjb25zdCBzcGFjaW5nT3B0aW9ucyA9IFtcbiAgJ21hcmdpblRvcCcsXG4gICdtYXJnaW5Cb3R0b20nLFxuICAnbWFyZ2luTGVmdCcsXG4gICdtYXJnaW5SaWdodCcsXG4gICdwYWRkaW5nVG9wJyxcbiAgJ3BhZGRpbmdCb3R0b20nLFxuICAncGFkZGluZ0xlZnQnLFxuICAncGFkZGluZ1JpZ2h0J1xuXVxuXG5cbmV4cG9ydCBjb25zdCBub29wWWFNZXRyaWthID0gKGdvYWw6IHN0cmluZykgPT4gY29uc29sZS5sb2coYE5vb3AgWWFNZWt0aWthIHJlYWNoIGdvYWw6ICR7Z29hbH1gKVxuZXhwb3J0IGNvbnN0IG5vb3BBZEZveCA9IChnb2FsOiBzdHJpbmcpID0+IGNvbnNvbGUubG9nKGBOb29wIEFkRm94IHJlYWNoIGdvYWw6ICR7Z29hbH1gKVxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHsgaXNKc29uU2FtZSwgcGljayB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgbm9vcEFkRm94LCBub29wWWFNZXRyaWthIH0gZnJvbSBcInNyYy9oZWxwZXJzL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgY29uc3QgdXNlTWV0cmljcyA9IChzdGF0ZTogdW5rbm93biwgbGF5ZXJOYW1lID0gJ3Jvb3QnKSA9PiB7XG4gIGNvbnN0IHNhdmVNZXRyaWNzID0gdXNlUmVmKClcbiAgY29uc3QgeWFSZWFjaEdvYWwgPSBzdGF0ZS55YVJlYWNoR29hbCB8fCBub29wWWFNZXRyaWthXG4gIGNvbnN0IGFkZm94UmVhY2hHb2FsID0gc3RhdGUuYWRmb3hSZWFjaEdvYWwgfHwgbm9vcEFkRm94XG4gIGNvbnN0IG1ldHJpY3MgPSBwaWNrKHN0YXRlW2xheWVyTmFtZV0sICd5YVNob3cnLCAneWFDbGljaycsICdhZGZveFNob3cnLCAnYWRmb3hDbGljaycpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzSnNvblNhbWUoc2F2ZU1ldHJpY3MuY3VycmVudCwgbWV0cmljcykpIHtcbiAgICAgIGlmIChtZXRyaWNzLnlhU2hvdykge1xuICAgICAgICB5YVJlYWNoR29hbChtZXRyaWNzLnlhU2hvdylcbiAgICAgIH1cbiAgICAgIGlmIChtZXRyaWNzLnlhU2hvdykge1xuICAgICAgICBhZGZveFJlYWNoR29hbChtZXRyaWNzLmFkZm94U2hvdylcbiAgICAgIH1cbiAgICB9XG4gICAgc2F2ZU1ldHJpY3MuY3VycmVudCA9IG1ldHJpY3NcbiAgfSwgW21ldHJpY3NdKVxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKG1ldHJpY3MueWFDbGljaykge1xuICAgICAgeWFSZWFjaEdvYWwobWV0cmljcy55YUNsaWNrKVxuICAgIH1cbiAgICBpZiAobWV0cmljcy5hZGZveENsaWNrKSB7XG4gICAgICBhZGZveFJlYWNoR29hbChtZXRyaWNzLmFkZm94Q2xpY2spXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpbmplY3RMaW5rLCBpdGVyYXRvciB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjsgLy8gaHR0cHM6Ly9naXRodWIuY29tL0Rvd25sb2FkL3ByZWFjdC1oZWxtZXQvaXNzdWVzLzM0XG5cbmV4cG9ydCBjb25zdCB1c2VFeHRyYWN0Rm9udHMgPSAoc3RhdGU6IHVua25vd24pID0+IHtcbiAgY29uc3QgZm9udHMgPSBuZXcgU2V0KFtdKVxuXG4gIGl0ZXJhdG9yKHN0YXRlLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGlmIChrZXkgPT09ICdmb250RmFtaWx5Jykge1xuICAgICAgZm9udHMuYWRkKHZhbHVlKVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9KVxuXG4gIGNvbnN0IGZvbnRMaW5rcyA9IHVzZU1lbW8oKCkgPT4gQXJyYXkuZnJvbShmb250cy52YWx1ZXMoKSkubWFwKGZvbnQgPT4gKHtcbiAgICByZWw6ICdzdHlsZXNoZWV0JyxcbiAgICBocmVmOiBgaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PSR7Zm9udH06MzAwLDQwMCw1MDAsNzAwJmRpc3BsYXk9c3dhcGBcbiAgfSkpLCBbZm9udHNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZm9udExpbmtzLmZvckVhY2goKGxpbmspID0+IGluamVjdExpbmsobGluaykpXG4gIH0sIFtmb250TGlua3NdKVxufVxuIiwiaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0ICdzcmMvaGVscGVycy9yZXNldC5zY3NzJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUdpZnRPcGVuIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUdpZnRPcGVuJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVRvZ2dsZSB9IGZyb20gJ3NyYy9ob29rcy91c2VUb2dnbGUnXG5pbXBvcnQgQ2xvc2VJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbidcbmltcG9ydCBHaWZ0SWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9HaWZ0SWNvbidcbmltcG9ydCB7IHVzZUdpZnRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy9wcm9tb3MvdXNlR2lmdFJ1bGVzJ1xuaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuaW1wb3J0IHsgdXNlRXh0cmFjdEZvbnRzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cydcblxuY29uc3QgU2ltcGxlR2lmdDogRkM8U3RhdGU+ID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IFtsZWdhbElzT3BlbiwgdG9nZ2xlTGVnYWxJc09wZW5dID0gdXNlVG9nZ2xlKClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGU8U3RhdGU+KClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3QgeyBpc09wZW4sIG9uVG9nZ2xlIH0gPSB1c2VHaWZ0T3BlbihkZXZpY2VTdGF0ZT8uY29udGFpbmVyPy5kZWxheSlcbiAgY29uc3QgeyBoYXNJY29uLCBpY29uUnVsZXMsIGJvZHlSdWxlcywgYXJyb3dSdWxlcyB9ID0gdXNlR2lmdFJ1bGVzKGRldmljZVN0YXRlLCB7XG4gICAgZmFkZTogc3R5bGVzLmZhZGVpbixcbiAgICBwdWxzZTogc3R5bGVzLnB1bHNlLFxuICAgIHdpZ2dsZTogc3R5bGVzLndpZ2dsZSxcbiAgICBncmFkaWVudDogc3R5bGVzLmdyYWRpZW50XG4gIH0pXG4gIHVzZUV4dHJhY3RGb250cyhkZXZpY2VTdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0gcmVmPXtyb290UmVmfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvbn0gc3R5bGU9e2ljb25SdWxlc30gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICB7aGFzSWNvbiAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uVGFyZ2V0fT5cbiAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYm9keSwgeyBbc3R5bGVzLmJvZHlPcGVuXTogaXNPcGVuIH0pfSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5hcnJvd30gc3R5bGU9e2Fycm93UnVsZXN9PjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNsb3NlfSBzdHlsZT17cnVsZXMuY2xvc2V9IG9uQ2xpY2s9e29uVG9nZ2xlfT5cbiAgICAgICAgICA8Q2xvc2VJY29uIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0gc3R5bGU9e3J1bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPGEgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9IHRhcmdldD0nX2JsYW5rJyByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInIG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pbm5lcn0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299PjwvZGl2PlxuICAgICAgICAgICAgICA8RGlzcGxheVRleHQgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3J1bGVzLnRleHR9PlxuICAgICAgICAgICAgICAgIHtydWxlcz8udGV4dD8uY2hpbGRyZW59XG4gICAgICAgICAgICAgIDwvRGlzcGxheVRleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5idXR0b24sIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy5idXR0b25BbmltYXRlZF06IHJ1bGVzLmJ1dHRvbi5pc0FuaW1hdGVkXG4gICAgICAgICAgICB9KX0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMubGVnYWwsIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy5sZWdhbE9wZW5dOiBsZWdhbElzT3BlblxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBzdHlsZT17cnVsZXMubGVnYWx9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGVnYWxUZXh0fT5cbiAgICAgICAgICAgICAgPHNwYW4+e3J1bGVzPy5sZWdhbD8uY2hpbGRyZW59PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbEJ1dHRvbn0gb25DbGljaz17dG9nZ2xlTGVnYWxJc09wZW59PlxuICAgICAgICAgICAgICAgIHtsZWdhbElzT3BlbiA/IHJ1bGVzPy5sZWdhbD8uYnV0dG9uT3BlblRleHQgOiBydWxlcz8ubGVnYWw/LmJ1dHRvbkhpZGVUZXh0fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVHaWZ0IC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuXG5jb25zdCBCb251c0NhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3Moc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLnZhcmlhbnQyXTogcnVsZXMucm9vdD8udmFyaWFudCA9PT0gJ3ZhcmlhbnQyJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5saW5lfSBzdHlsZT17cnVsZXMubGluZX0gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5SW5uZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17cnVsZXMudGV4dH0+XG4gICAgICAgICAgICA8RGlzcGxheVRleHQ+e3J1bGVzLnRleHQ/LmNoaWxkcmVufTwvRGlzcGxheVRleHQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uVGV4dH0+e3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17cnVsZXMubGVnYWx9PlxuICAgICAgICB7cnVsZXMubGVnYWw/LmNoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvbnVzQ2FyZFxuIiwiaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgJ3NyYy9oZWxwZXJzL3Jlc2V0LnNjc3MnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlR2lmdE9wZW4gfSBmcm9tICdzcmMvaG9va3MvdXNlR2lmdE9wZW4nXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IENsb3NlSWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9DbG9zZUljb24nXG5pbXBvcnQgR2lmdEljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvR2lmdEljb24nXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgQm9udXNDYXJkIGZyb20gJy4vY29tcG9uZW50cy9Cb251c0NhcmQnXG5pbXBvcnQgeyB1c2VFeHRyYWN0Rm9udHMgfSBmcm9tICdzcmMvaG9va3MvdXNlRXh0cmFjdEZvbnRzJ1xuaW1wb3J0IHsgdXNlR2lmdFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3Byb21vcy91c2VHaWZ0UnVsZXMnXG5cbmNvbnN0IENvbXBsZXhHaWZ0ID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IHsgaXNPcGVuLCBvblRvZ2dsZSB9ID0gdXNlR2lmdE9wZW4oKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgdXNlRXh0cmFjdEZvbnRzKGRldmljZVN0YXRlKVxuICBjb25zdCB7IGhhc0ljb24sIGljb25SdWxlcywgYm9keVJ1bGVzLCBhcnJvd1J1bGVzIH0gPSB1c2VHaWZ0UnVsZXMoZGV2aWNlU3RhdGUsIHtcbiAgICBmYWRlOiBzdHlsZXMuZmFkZWluLFxuICAgIHB1bHNlOiBzdHlsZXMucHVsc2UsXG4gICAgd2lnZ2xlOiBzdHlsZXMud2lnZ2xlLFxuICAgIGdyYWRpZW50OiBzdHlsZXMuZ3JhZGllbnQsXG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cm9vdFJlZn0gY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb259IHN0eWxlPXtpY29uUnVsZXN9IG9uQ2xpY2s9e29uVG9nZ2xlfT5cbiAgICAgICAge2hhc0ljb24gJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvblRhcmdldH0+XG4gICAgICAgICAgICA8R2lmdEljb24gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmJvZHksIHtcbiAgICAgICAgICBbc3R5bGVzLmJvZHlPcGVuXTogaXNPcGVuXG4gICAgICAgIH0pfVxuICAgICAgICBzdHlsZT17Ym9keVJ1bGVzfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmFycm93fSBzdHlsZT17YXJyb3dSdWxlc30gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9IHN0eWxlPXtydWxlcy5jb250YWluZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2xvc2V9IHN0eWxlPXtydWxlcy5jbG9zZX0gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICAgICAgPENsb3NlSWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucHJvbW90aW9ufSBzdHlsZT17cnVsZXMucHJvbW90aW9ufT5cbiAgICAgICAgICAgIHtydWxlcy5wcm9tb3Rpb24/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZH0gc3R5bGU9e3J1bGVzLnRpdGxlfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZEljb259PlxuICAgICAgICAgICAgICA8R2lmdEljb24gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkVGl0bGV9PlxuICAgICAgICAgICAgICB7cnVsZXMudGl0bGU/LmNoaWxkcmVufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmlubmVyfT5cbiAgICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e2NoaWxkfT5cbiAgICAgICAgICAgICAgICA8Qm9udXNDYXJkIC8+XG4gICAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxDb21wbGV4R2lmdCAvPilcblxuLy8gaW1wb3J0IHsgRW1pdHRlclR5cGUgfSBmcm9tIFwic3JjXCI7XG4vLyBpbXBvcnQgeyBpc0VtcHR5VmFsdWUsIGlzVmFsdWUgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbi8vXG5cbi8vXG4vLyBleHBvcnQgZGVmYXVsdCAoZW1pdHRlcjogRW1pdHRlclR5cGUpID0+IHtcbi8vICAgZW1pdHRlci5vbigncmVuZGVyTm9kZScsICh7IHJ1bGUsIGxheWVyIH0pID0+IHtcbi8vICAgICBpZiAoJyRhbmltYXRpb25zJyBpbiBydWxlKSB7XG4vLyAgICAgICBjb25zdCBhbGxBbmltYXRpb25zID0gcnVsZS4kYW5pbWF0aW9uc1xuLy8gICAgICAgICAubWFwKChhbmltYXRpb246IGtleW9mIHR5cGVvZiBhbmltYXRpb25zTWFwKSA9PiBhbmltYXRpb25zTWFwW2FuaW1hdGlvbl0pXG4vLyAgICAgICAgIC5qb2luKCcsICcpXG4vL1xuLy8gICAgICAgY29uc3QgYmFja2dyb3VuZFN0eWxlcyA9XG4vLyAgICAgICAgIGlzVmFsdWUocnVsZS4kZ3JhZGllbnRDb2xvcikgJiYgcnVsZS4kYW5pbWF0aW9ucy5pbmNsdWRlcygnZ3JhZGllbnQnKVxuLy8gICAgICAgICAgID8ge1xuLy8gICAgICAgICAgICAgYmFja2dyb3VuZDogYGxpbmVhci1ncmFkaWVudCgtOTBkZWcsICR7cnVsZS5iYWNrZ3JvdW5kQ29sb3J9IDAlLCAke3J1bGUuJGdyYWRpZW50Q29sb3J9IDEwMCUpYCxcbi8vICAgICAgICAgICAgIGJhY2tncm91bmRTaXplOiAnNDAwJSA0MDAlJ1xuLy8gICAgICAgICAgIH1cbi8vICAgICAgICAgICA6IHt9XG4vL1xuLy8gICAgICAgZW1pdHRlci5lbWl0KCdydW5SZW5kZXInLCB7XG4vLyAgICAgICAgIGljb246IHtcbi8vICAgICAgICAgICBhbmltYXRpb246IGFsbEFuaW1hdGlvbnMsXG4vLyAgICAgICAgICAgLi4uYmFja2dyb3VuZFN0eWxlc1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9KVxuLy8gICAgIH1cbi8vXG4vLyAgICAgaWYgKGxheWVyLmxheWVyID09PSAnaWNvbicgJiYgIWlzRW1wdHlWYWx1ZShydWxlLmhhc0ljb24pKSB7XG4vLyAgICAgICBlbWl0dGVyLmVtaXQoJ3J1blJlbmRlcicsIHtcbi8vICAgICAgICAgaWNvblRhcmdldDoge1xuLy8gICAgICAgICAgIGRpc3BsYXk6IHJ1bGUuaGFzSWNvbiA/ICdmbGV4JyA6ICdub25lJ1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9KVxuLy8gICAgIH1cbi8vXG4vLyAgICAgaWYgKGxheWVyLmxheWVyID09PSAndGl0bGUnKSB7XG4vLyAgICAgICBlbWl0dGVyLmVtaXQoJ3J1blJlbmRlcicsIHtcbi8vICAgICAgICAgaGVhZGVySWNvbjoge1xuLy8gICAgICAgICAgIGRpc3BsYXk6IHJ1bGUuaGFzSWNvbiA/ICdibG9jaycgOiAnbm9uZSdcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSlcbi8vICAgICB9XG4vL1xuLy8gICAgIGlmIChsYXllci5sYXllciA9PT0gJ2NvbnRhaW5lcicpIHtcbi8vICAgICAgIGVtaXR0ZXIuZW1pdCgncnVuUmVuZGVyJywge1xuLy8gICAgICAgICBib2R5OiB7XG4vLyAgICAgICAgICAgJGRlbGF5OiBydWxlLmRlbGF5LFxuLy8gICAgICAgICAgIGxlZnQ6IHJ1bGUubGVmdFxuLy8gICAgICAgICB9LFxuLy8gICAgICAgICBhcnJvdzoge1xuLy8gICAgICAgICAgIGxlZnQ6IGAkeysocnVsZS5sZWZ0IHx8IDApICogLTEgKyA4fWAsXG4vLyAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBydWxlLmJhY2tncm91bmRDb2xvcixcbi8vICAgICAgICAgICBib3JkZXJUb3BXaWR0aDogcnVsZS5ib3JkZXJXaWR0aCxcbi8vICAgICAgICAgICBib3JkZXJUb3BDb2xvcjogcnVsZS5ib3JkZXJDb2xvcixcbi8vICAgICAgICAgICBib3JkZXJUb3BTdHlsZTogJ3NvbGlkJyxcbi8vICAgICAgICAgICBib3JkZXJMZWZ0V2lkdGg6IHJ1bGUuYm9yZGVyV2lkdGgsXG4vLyAgICAgICAgICAgYm9yZGVyTGVmdENvbG9yOiBydWxlLmJvcmRlckNvbG9yLFxuLy8gICAgICAgICAgIGJvcmRlckxlZnRTdHlsZTogJ3NvbGlkJ1xuLy8gICAgICAgICB9XG4vLyAgICAgICB9KVxuLy8gICAgIH1cbi8vICAgfSlcbi8vIH1cbiIsImV4cG9ydCBjb25zdCBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggPSAodGV4dEFsaWduPzogc3RyaW5nKSA9PlxuICB0ZXh0QWxpZ24gPyB7IGxlZnQ6ICdmbGV4LXN0YXJ0JywgY2VudGVyOiAnY2VudGVyJywgcmlnaHQ6ICdmbGV4LWVuZCcgfVt0ZXh0QWxpZ25dIDogdGV4dEFsaWduXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcblxuY29uc3QgTGluZTogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fSBzdHlsZT17cnVsZXMucm9vdH0+XG4gICAgICA8RGlzcGxheVRleHQ+e3J1bGVzPy5yb290Py5jaGlsZHJlbn08L0Rpc3BsYXlUZXh0PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IExpbmVcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHNldCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0ICdzcmMvaGVscGVycy9yZXNldC5zY3NzJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggfSBmcm9tIFwic3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4XCI7XG5pbXBvcnQgTGluZSBmcm9tICcuL2NvbXBvbmVudHMvbGluZSdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tIFwic3JjL2hvb2tzL3VzZU1ldHJpY3NcIjtcblxuY29uc3QgU2ltcGxlUG9wdXA6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3MoZGV2aWNlU3RhdGUpXG5cbiAgc2V0KGRldmljZVN0YXRlLCAnYnV0dG9uLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8uYnV0dG9uPy53aWR0aClcbiAgc2V0KGRldmljZVN0YXRlLCAnbGVnYWwucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5sZWdhbD8ud2lkdGgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcblxuXG4gIGNvbnN0IGJvZHlSdWxlcyA9IHtcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCBidXR0b25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uYnV0dG9uLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgY29uc3QgbGVnYWxSdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8ubGVnYWwsXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPVwibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0JyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBkZXZpY2UgPT09ICdsYXB0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9IHN0eWxlPXtib2R5UnVsZXN9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfS8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0+XG4gICAgICAgICAgeyhydWxlcz8uY2hpbGRyZW4gfHwgW10pLm1hcChlbCA9PiAoXG4gICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXtlbH0+XG4gICAgICAgICAgICAgIDxMaW5lIC8+XG4gICAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17YnV0dG9uUnVsZXN9PlxuICAgICAgICAgIHtidXR0b25SdWxlcz8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17bGVnYWxSdWxlc30+XG4gICAgICAgICAge2xlZ2FsUnVsZXM/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZVBvcHVwIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQsIHBpY2sgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgc3BhY2luZ09wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSBcInNyYy9ob29rcy91c2VNZXRyaWNzXCI7XG5cbmNvbnN0IEJvbnVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IGRldmljZSA9IHN0YXRlPy5kZXZpY2UgfHwgJ2Rlc2t0b3AnXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKHN0YXRlKVxuXG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD1cIm5vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtvbWl0KHJ1bGVzLnJvb3QsIC4uLnNwYWNpbmdPcHRpb25zKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9IHN0eWxlPXtydWxlcy5oZWFkZXJ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0gc3R5bGU9e3BpY2socnVsZXMucm9vdCwgLi4uc3BhY2luZ09wdGlvbnMpfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299PjwvZGl2PlxuICAgICAgICAgIDxEaXNwbGF5VGV4dCBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17cnVsZXMudGV4dH0+XG4gICAgICAgICAgICB7cnVsZXMudGV4dD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9EaXNwbGF5VGV4dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e3J1bGVzLmxlZ2FsfT5cbiAgICAgICAgICAgIHtydWxlcy5sZWdhbD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvbnVzXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgJ3NyYy9oZWxwZXJzL3Jlc2V0LnNjc3MnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBCb251cyBmcm9tICcuL2NvbXBvbmVudHMvQm9udXMnXG5pbXBvcnQgeyB1c2VFeHRyYWN0Rm9udHMgfSBmcm9tICdzcmMvaG9va3MvdXNlRXh0cmFjdEZvbnRzJ1xuXG5jb25zdCBTaW1wbGVQb3B1cDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIHVzZUV4dHJhY3RGb250cyhkZXZpY2VTdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlfSBzdHlsZT17cnVsZXMudGl0bGV9PlxuICAgICAgICB7cnVsZXMudGl0bGU/LmNoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT5cbiAgICAgICAgICAgIDxCb251cyAvPlxuICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlUG9wdXAgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5cbmNvbnN0IE1hdGNoOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IGRldmljZSA9IHN0YXRlPy5kZXZpY2UgfHwgJ2Rlc2t0b3AnXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICB9KX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZnR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1zfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlYWd1ZX0gc3R5bGU9e3J1bGVzLmxlYWd1ZX0+e3J1bGVzLmxlYWd1ZT8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5uYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PntydWxlcy50ZWFtcz8udGVhbUF9IOKAlCB7cnVsZXMudGVhbXM/LnRlYW1CfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yaWdodH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PntydWxlcy50ZWFtcz8udGVhbUF9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cnVsZXMub2RkTGFiZWx9PntydWxlcy5vZGRMYWJlbD8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRWYWx1ZX0gc3R5bGU9e3J1bGVzLm9kZFZhbHVlfT57cnVsZXMub2RkVmFsdWU/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299Lz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PntydWxlcy50ZWFtcz8udGVhbUJ9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0Y2hcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHNldCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0ICdzcmMvaGVscGVycy9yZXNldC5zY3NzJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggfSBmcm9tICdzcmMvaGVscGVycy9zd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgnXG5pbXBvcnQgTWF0Y2ggZnJvbSAnLi9jb21wb25lbnRzL01hdGNoJ1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuXG5jb25zdCBTaW1wbGVQb3B1cDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBzZXQoZGV2aWNlU3RhdGUsICdidXR0b25XcmFwcGVyLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8uYnV0dG9uV3JhcHBlcj8ud2lkdGgpXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2xlZ2FsLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8ubGVnYWw/LndpZHRoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKGRldmljZVN0YXRlKVxuXG4gIGNvbnN0IGJvZHlSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy5yb290LFxuICAgIGFsaWduSXRlbXM6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py5hbGlnbilcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnRSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy5jb250ZW50LFxuICAgIGFsaWduSXRlbXM6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py5hbGlnbilcbiAgfVxuXG4gIGNvbnN0IHRleHRSdWxlcyA9IHtcbiAgICAuLi5ydWxlcy50ZXh0LFxuICAgIHRleHRBbGlnbjogcnVsZXMucm9vdD8uYWxpZ25cbiAgfVxuXG4gIGNvbnN0IGJ1dHRvblJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5idXR0b24sXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICBjb25zdCBsZWdhbFJ1bGVzID0ge1xuICAgIC4uLnJ1bGVzPy5sZWdhbCxcbiAgICBqdXN0aWZ5Q29udGVudDogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LnRleHRBbGlnbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBkZXZpY2UgPT09ICd0YWJsZXQnXG4gICAgICB9KX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlfSBzdHlsZT17cnVsZXMudGl0bGV9PlxuICAgICAgICAgICAge3J1bGVzLnRpdGxlPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy53cmFwcGVyfSBzdHlsZT17Y29udGVudFJ1bGVzfT5cbiAgICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17eyAuLi5jaGlsZCwgZGV2aWNlIH19PlxuICAgICAgICAgICAgICA8TWF0Y2ggLz5cbiAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8RGlzcGxheVRleHQgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3RleHRSdWxlc30+XG4gICAgICAgICAge3J1bGVzLnRleHQ/LmNoaWxkcmVufVxuICAgICAgICA8L0Rpc3BsYXlUZXh0PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbldyYXBwZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uSGVhZH0gc3R5bGU9e3J1bGVzLmJ1dHRvbkhlYWR9PlxuICAgICAgICAgICAge3J1bGVzLmJ1dHRvbkhlYWQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uVGFyZ2V0fSBzdHlsZT17YnV0dG9uUnVsZXN9PlxuICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17bGVnYWxSdWxlc30+XG4gICAgICAgICAge3J1bGVzLmxlZ2FsPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVQb3B1cCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IHVzZVRvZ2dsZSB9IGZyb20gJ3NyYy9ob29rcy91c2VUb2dnbGUnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5cbmNvbnN0IEJvbnVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IFtpc09wZW4sIHRvZ2dsZUlzT3Blbl0gPSB1c2VUb2dnbGUoKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0gc3R5bGU9e3J1bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5iYWNrZ3JvdW5kfSBzdHlsZT17cnVsZXMuYmFja2dyb3VuZH0gLz5cbiAgICAgIDxhXG4gICAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93Rmlyc3R9IHN0eWxlPXtydWxlcy5yb3dGaXJzdH0+XG4gICAgICAgICAgICB7cnVsZXMucm93Rmlyc3Q/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93U2Vjb25kfSBzdHlsZT17cnVsZXMucm93U2Vjb25kfT5cbiAgICAgICAgICAgIHtydWxlcy5yb3dTZWNvbmQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9va21ha2VyfT53aW5saW5lPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmxlZ2FsLCB7XG4gICAgICAgICAgW3N0eWxlcy5sZWdhbE9wZW5dOiBpc09wZW5cbiAgICAgICAgfSl9XG4gICAgICAgIHN0eWxlPXtydWxlcy5sZWdhbEluZm99XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsVGV4dH0+XG4gICAgICAgICAgPHNwYW4+e3J1bGVzLmxlZ2FsSW5mbz8uY2hpbGRyZW59PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsQnV0dG9ufSBzdHlsZT17cnVsZXMubGVnYWxJbmZvQnV0dG9ufSBvbkNsaWNrPXt0b2dnbGVJc09wZW59PlxuICAgICAgICAgICAge2lzT3BlbiA/IHJ1bGVzLmxlZ2FsSW5mb0J1dHRvbj8ub3BlblRleHQgOiBydWxlcy5sZWdhbEluZm9CdXR0b24/LmNsb3NlVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvbnVzXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBCb251cyBmcm9tICcuL2NvbXBvbmVudHMvQm9udXMnXG5cbmNvbnN0IEJvbnVzQ2FyZDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2UgPSAnZGVza3RvcCdcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cm9vdFJlZn0+XG4gICAgICB7KHJ1bGVzPy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17Y2hpbGR9PlxuICAgICAgICAgIDxCb251cyAvPlxuICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8Qm9udXNDYXJkIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IFRleHQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e29taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpfVxuICAgID5cbiAgICAgIHtydWxlcy5yb290Py5jaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0XG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcblxuY29uc3QgTWF0Y2hlczogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIGNvbnN0IHJvb3RSdWxlcyA9IG9taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExvZ299IHN0eWxlPXtyb290UnVsZXN9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTGFiZWx9IHN0eWxlPXtyb290UnVsZXN9PntydWxlcy5yb290Py52YWx1ZU9uZX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmSGVhZH0gc3R5bGU9e3J1bGVzLmNvZWZ9Plg8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2VmVmFsdWV9IHN0eWxlPXtyb290UnVsZXN9PntydWxlcy5yb290Py52YWx1ZVh9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5vZGQsIHN0eWxlcy5vZGRSZXZlcnNlKX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTG9nb30gc3R5bGU9e3Jvb3RSdWxlc30vPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cm9vdFJ1bGVzfT57cnVsZXMucm9vdD8udmFsdWVUd299PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaGVzXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgb21pdCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvaGVscGVycy9jb25zdGFudHNcIjtcblxuY29uc3QgTWF0Y2hlc09uZVR3bzogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IHN0YXRlPy5kZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBzdGF0ZT8uZGV2aWNlID09PSAndGFibGV0J1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17b21pdChydWxlcy5yb290LCAuLi5iYWNrZ3JvdW5kT3B0aW9ucyl9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGVMYWJlbH0gc3R5bGU9e3J1bGVzLnRpdGxlTGFiZWx9PlxuICAgICAgICAgIHtydWxlcy50aXRsZUxhYmVsLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZVZhbHVlfSBzdHlsZT17cnVsZXMudGl0bGVWYWx1ZX0+XG4gICAgICAgICAge3J1bGVzLnRpdGxlVmFsdWUuY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtTmFtZX0+XG4gICAgICAgICAgICB7cnVsZXMudGVhbTFOYW1lLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbVZhbHVlfSBzdHlsZT17cnVsZXMudmFsdWV9PlxuICAgICAgICAgICAge3J1bGVzLnZhbHVlMS5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1OYW1lfT5cbiAgICAgICAgICAgIHtydWxlcy50ZWFtMk5hbWUuY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtVmFsdWV9IHN0eWxlPXtydWxlcy52YWx1ZX0+XG4gICAgICAgICAgICB7cnVsZXMudmFsdWUyLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGNoZXNPbmVUd29cbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuXG5pbnRlcmZhY2UgU2xpZGUge1xuICBhbmltYXRpb25EdXJhdGlvbjogbnVtYmVyXG59XG5cbmNvbnN0IHVzZUFuaW1hdGVkTGlzdCA9IChzbGlkZXM6IFNsaWRlW10gPSBbXSkgPT4ge1xuICBjb25zdCBpdGVtc0NvdW50ID0gc2xpZGVzLmxlbmd0aFxuICBjb25zdCBbYW5pbWF0ZWRJZHgsIHNldEFuaW1hdGVkSWR4XSA9IHVzZVN0YXRlPG51bWJlcj4oMClcbiAgY29uc3QgYW5pbWF0aW9uRHVyYXRpb24gPSBzbGlkZXNbYW5pbWF0ZWRJZHggfHwgMF0/LmFuaW1hdGlvbkR1cmF0aW9uXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBnb05leHQgPSAoKSA9PiB7XG4gICAgICBzZXRBbmltYXRlZElkeChpbmRleCA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPCBpdGVtc0NvdW50KSByZXR1cm4gaW5kZXggKyAxXG4gICAgICAgIHJldHVybiAwXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KGdvTmV4dCwgYW5pbWF0aW9uRHVyYXRpb24pXG5cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gIH0sIFtzZXRBbmltYXRlZElkeCwgaXRlbXNDb3VudCwgYW5pbWF0aW9uRHVyYXRpb24sIGFuaW1hdGVkSWR4XSlcblxuICByZXR1cm4gYW5pbWF0ZWRJZHhcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlQW5pbWF0ZWRMaXN0XG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBwaWNrIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IFRleHQgZnJvbSAnLi9jb21wb25lbnRzL1RleHQnXG5pbXBvcnQgTWF0Y2hlcyBmcm9tICcuL2NvbXBvbmVudHMvTWF0Y2hlcydcbmltcG9ydCBNYXRjaGVzT25lVHdvIGZyb20gJy4vY29tcG9uZW50cy9NYXRjaGVzT25lVHdvJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB1c2VBbmltYXRlZExpc3QgZnJvbSAnc3JjL2hvb2tzL3VzZUFuaW1hdGVkTGlzdCdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcbmltcG9ydCB7IGJhY2tncm91bmRPcHRpb25zIH0gZnJvbSAnc3JjL2hlbHBlcnMvY29uc3RhbnRzJ1xuXG5jb25zdCBERUZBVUxUX0FOSU1BVElPTl9TUEVFRCA9IDM3MDBcblxuY29uc3QgV2lkZUNhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBnZXRDaGlsZCA9IChuYW1lOiBzdHJpbmcpID0+XG4gICAgKHtcbiAgICAgIHRleHQ6IDxUZXh0IC8+LFxuICAgICAgbWF0Y2hlczogPE1hdGNoZXMgLz4sXG4gICAgICBtYXRjaGVzT25lVHdvOiA8TWF0Y2hlc09uZVR3byAvPlxuICAgIH1bbmFtZV0pXG5cbiAgY29uc3Qgc2xpZGVzTGlzdCA9IChydWxlcy5jaGlsZHJlbiB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLm1hcChzbGlkZSA9PiAoe1xuICAgIC4uLnNsaWRlLFxuICAgIGFuaW1hdGlvbk5hbWU6IHNsaWRlPy5yb290Py5hbmltYXRpb25OYW1lLFxuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiBzbGlkZT8ucm9vdD8uYW5pbWF0aW9uRHVyYXRpb24gfHwgREVGQVVMVF9BTklNQVRJT05fU1BFRURcbiAgfSkpXG5cbiAgY29uc3QgY3VycmVudFNsaWRlID0gdXNlQW5pbWF0ZWRMaXN0KHNsaWRlc0xpc3QpXG4gIGNvbnN0IHNsaWRlUnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHNsaWRlc0xpc3RbY3VycmVudFNsaWRlXSB8fCB7fSlcblxuICBjb25zdCBiYWNrZ3JvdW5kUnVsZXMgPSBzbGlkZVJ1bGVzPy5yb290Py5oYXNDdXN0b21CYWNrZ3JvdW5kXG4gICAgPyBwaWNrKHNsaWRlUnVsZXM/LnJvb3QgfHwge30sIC4uLmJhY2tncm91bmRPcHRpb25zKVxuICAgIDogcGljayhydWxlcy5iYWNrZ3JvdW5kLCAuLi5iYWNrZ3JvdW5kT3B0aW9ucylcblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLmxhcHRvcF06IGRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0JyxcbiAgICAgICAgW3N0eWxlcy52YXJpYW50Ml06IHJ1bGVzLnJvb3Q/LnZhcmlhbnQgPT09ICd2YXJpYW50MidcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYmFja2dyb3VuZH0gc3R5bGU9e2JhY2tncm91bmRSdWxlc30gLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucHJvbW90aW9ufSBzdHlsZT17cnVsZXMucHJvbW90aW9ufT5cbiAgICAgICAge3J1bGVzLnByb21vdGlvbj8uY2hpbGRyZW59XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWZ0fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jZW50ZXJ9PlxuICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcCgoY2hpbGQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnNsaWRlfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbk5hbWU6IGN1cnJlbnRTbGlkZSA9PT0gaW5kZXggPyBzdHlsZXNbY2hpbGQucm9vdD8uYW5pbWF0aW9uTmFtZSB8fCAnZmFkZS1pbi1vdXQnXSA6ICdub25lJyxcbiAgICAgICAgICAgICAgICBhbmltYXRpb25EdXJhdGlvbjogYCR7Y2hpbGQucm9vdD8uYW5pbWF0aW9uRHVyYXRpb259bXNgXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT57Z2V0Q2hpbGQoY2hpbGQubmFtZSl9PC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucmlnaHR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbldyYXBwZXJ9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFdpZGVDYXJkIC8+KVxuIl0sIm5hbWVzIjpbImNsYXNzTmFtZXMiLCJpIiwiaW5uZXIiLCJvIiwibiIsInQiLCJ1IiwiQiIsInIiLCJmIiwiYyIsImUiLCJfIiwiRiIsInEiLCJ3IiwiZyIsImwiLCJ1c2VHaWZ0T3BlbiIsImRlbGF5IiwiaXNPcGVuIiwic2V0SXNPcGVuIiwidXNlU3RhdGUiLCJ0aW1lclJlZiIsInVzZVJlZiIsIm9uVG9nZ2xlIiwiY2xlYXJUaW1lb3V0IiwiY3VycmVudCIsInByZXYiLCJ1c2VFZmZlY3QiLCJzZXRUaW1lb3V0IiwicyIsImEiLCJTdGF0ZSIsImNyZWF0ZUNvbnRleHQiLCJTdGF0ZUNvbnRleHQiLCJjaGlsZHJlbiIsInZhbHVlIiwiX2pzeCIsIlByb3ZpZGVyIiwicmVuZGVyIiwidk5vZGUiLCJ0YXJnZXQiLCJzdGF0ZSIsInByZWFjdFJlbmRlciIsInVzZUN1cnJlbnRTdGF0ZSIsInVzZUNvbnRleHQiLCJsaXN0Q2FjaGVDbGVhciIsImVxIiwicmVxdWlyZSQkMCIsImFzc29jSW5kZXhPZiIsImxpc3RDYWNoZURlbGV0ZSIsImluZGV4IiwibGlzdENhY2hlR2V0IiwibGlzdENhY2hlSGFzIiwibGlzdENhY2hlU2V0IiwicmVxdWlyZSQkMSIsInJlcXVpcmUkJDIiLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsIkxpc3RDYWNoZSIsInN0YWNrQ2xlYXIiLCJzdGFja0RlbGV0ZSIsInN0YWNrR2V0Iiwic3RhY2tIYXMiLCJmcmVlR2xvYmFsIiwiZ2xvYmFsIiwicm9vdCIsIlN5bWJvbCIsIm9iamVjdFByb3RvIiwiaGFzT3duUHJvcGVydHkiLCJuYXRpdmVPYmplY3RUb1N0cmluZyIsInN5bVRvU3RyaW5nVGFnIiwiZ2V0UmF3VGFnIiwib2JqZWN0VG9TdHJpbmciLCJiYXNlR2V0VGFnIiwiaXNPYmplY3QiLCJmdW5jVGFnIiwiaXNGdW5jdGlvbiIsImNvcmVKc0RhdGEiLCJpc01hc2tlZCIsImZ1bmNQcm90byIsImZ1bmNUb1N0cmluZyIsInRvU291cmNlIiwiYmFzZUlzTmF0aXZlIiwiZ2V0VmFsdWUiLCJnZXROYXRpdmUiLCJNYXAiLCJuYXRpdmVDcmVhdGUiLCJoYXNoQ2xlYXIiLCJoYXNoRGVsZXRlIiwiSEFTSF9VTkRFRklORUQiLCJoYXNoR2V0IiwiaGFzaEhhcyIsImhhc2hTZXQiLCJIYXNoIiwibWFwQ2FjaGVDbGVhciIsImlzS2V5YWJsZSIsImdldE1hcERhdGEiLCJtYXBDYWNoZURlbGV0ZSIsIm1hcENhY2hlR2V0IiwibWFwQ2FjaGVIYXMiLCJtYXBDYWNoZVNldCIsIk1hcENhY2hlIiwic3RhY2tTZXQiLCJyZXF1aXJlJCQ1IiwiU3RhY2siLCJkZWZpbmVQcm9wZXJ0eSIsImJhc2VBc3NpZ25WYWx1ZSIsImFzc2lnbk1lcmdlVmFsdWUiLCJjcmVhdGVCYXNlRm9yIiwiYmFzZUZvciIsImNsb25lQnVmZmVyIiwiVWludDhBcnJheSIsImNsb25lQXJyYXlCdWZmZXIiLCJjbG9uZVR5cGVkQXJyYXkiLCJjb3B5QXJyYXkiLCJiYXNlQ3JlYXRlIiwib3ZlckFyZyIsImdldFByb3RvdHlwZSIsImlzUHJvdG90eXBlIiwiaW5pdENsb25lT2JqZWN0IiwiaXNPYmplY3RMaWtlIiwiYXJnc1RhZyIsImJhc2VJc0FyZ3VtZW50cyIsImlzQXJndW1lbnRzIiwiaXNBcnJheSIsIk1BWF9TQUZFX0lOVEVHRVIiLCJpc0xlbmd0aCIsImlzQXJyYXlMaWtlIiwiaXNBcnJheUxpa2VPYmplY3QiLCJzdHViRmFsc2UiLCJpc0J1ZmZlciIsIm9iamVjdFRhZyIsImlzUGxhaW5PYmplY3QiLCJiYXNlSXNUeXBlZEFycmF5IiwiYmFzZVVuYXJ5Iiwibm9kZVV0aWwiLCJpc1R5cGVkQXJyYXkiLCJzYWZlR2V0IiwiYXNzaWduVmFsdWUiLCJjb3B5T2JqZWN0IiwiYmFzZVRpbWVzIiwiaXNJbmRleCIsImFycmF5TGlrZUtleXMiLCJuYXRpdmVLZXlzSW4iLCJiYXNlS2V5c0luIiwia2V5c0luIiwidG9QbGFpbk9iamVjdCIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwicmVxdWlyZSQkOCIsInJlcXVpcmUkJDkiLCJyZXF1aXJlJCQxMCIsInJlcXVpcmUkJDExIiwicmVxdWlyZSQkMTIiLCJyZXF1aXJlJCQxMyIsInJlcXVpcmUkJDE0IiwiYmFzZU1lcmdlRGVlcCIsImJhc2VNZXJnZSIsImlkZW50aXR5IiwiYXBwbHkiLCJvdmVyUmVzdCIsImNvbnN0YW50IiwiYmFzZVNldFRvU3RyaW5nIiwic2hvcnRPdXQiLCJzZXRUb1N0cmluZyIsImJhc2VSZXN0IiwiaXNJdGVyYXRlZUNhbGwiLCJjcmVhdGVBc3NpZ25lciIsImluamVjdExpbmsiLCJvcHRpb25zIiwiaGVhZCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsaW5rIiwiY3JlYXRlRWxlbWVudCIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwia2V5Iiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJpdGVyYXRvciIsImlucHV0IiwidmlzaXRvciIsIkFycmF5IiwibWFwIiwiZWwiLCJyZWR1Y2UiLCJhY2MiLCJpc0VtcHR5VmFsdWUiLCJ1bmRlZmluZWQiLCJpc1ZhbHVlIiwicGljayIsIm9iaiIsInByb3BzIiwicmVzdWx0IiwicHJvcCIsIm9taXQiLCJzZXQiLCJwYXRoIiwicGF0aEFycmF5IiwibWF0Y2giLCJsZW5ndGgiLCJoZXhUb1JnYiIsImhleCIsImNoYXJzIiwic2xpY2UiLCJzcGxpdCIsInZhbCIsImpvaW4iLCJleGVjIiwicGFyc2VJbnQiLCJiIiwiaXNKc29uU2FtZSIsInZhbHVlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVyeSIsImFyciIsInJnYlRvUmdiYSIsInJnYiIsImFscGhhIiwicmVwbGFjZSIsImRldmljZXMiLCJCUkVBS1BPSU5UUyIsIm1vYmlsZSIsInRhYmxldCIsImxhcHRvcCIsImRlc2t0b3AiLCJpc1ZhbGlkUnVsZSIsImRldmljZSIsImdldFJ1bGVzIiwiX2tleSIsInVzZUdldFJ1bGVzIiwidXNlQ29udGFpbmVyRGV2aWNlIiwidGFyZ2V0UmVmIiwicGFyZW50S2V5IiwiYnJlYWtwb2ludHMiLCJzZXREZXZpY2UiLCJjaGVja0RldmljZSIsInBhcmVudCIsInBhcmVudFdpZHRoIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJmaW5kRGV2aWNlIiwiZmluZCIsInVzZUxheW91dEVmZmVjdCIsInBhcmVudEVsZW1lbnQiLCJjbG9zZXN0IiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJ3cmFwVG8iLCJ1bnRpbCIsInRvUHgiLCJzdGFydHNXaXRoIiwidG9QZXJjZW50IiwiZm9ybWF0UnVsZSIsIm5ld0tleSIsIm5ld1ZhbHVlIiwiREVGQVVMVF9UT19QWCIsInBhcnNlUnVsZXMiLCJydWxlcyIsImxheWVyIiwia2V5cyIsImluY2x1ZGVzIiwid2FybiIsInR5cG9ncmFwaHkiLCJhY2NlbnRUeXBvZ3JhcGh5IiwiZm9udEZhbWlseSIsImNvbG9yIiwiZm9udFNpemUiLCJwcm9wS2V5IiwicHJvcFZhbHVlIiwiaW5uZXJIVE1MIiwiaW5uZXJUZXh0IiwiZGlzcGxheSIsImJvcmRlclN0eWxlIiwiYm9yZGVyUmFkaXVzIiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZENvbG9yT3BhY2l0eSIsImJhY2tncm91bmRDb2xvciIsImZvbnRXZWlnaHQiLCJmb250U3R5bGUiLCJ0ZXh0RGVjb3JhdGlvbiIsInJ1bGUiLCJ1c2VQYXJzZVJ1bGVzIiwiRGlzcGxheVRleHQiLCJyZXN0IiwiZm9ybWF0VmFsdWUiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsInVzZVRvZ2dsZSIsIkNsb3NlSWNvbiIsInhtbG5zIiwiaGVpZ2h0Iiwidmlld0JveCIsImQiLCJmaWxsIiwiR2lmdEljb24iLCJmaWxsUnVsZSIsImFuaW1hdGlvbnNNYXAiLCJhbmltYXRpb25zIiwiZmFkZSIsInB1bHNlIiwid2lnZ2xlIiwiZ3JhZGllbnQiLCJ1c2VHaWZ0UnVsZXMiLCJkZXZpY2VTdGF0ZSIsImZ1bGxBbmltYXRpb25zIiwiaGFzSWNvbiIsImljb24iLCJhcnJvd1J1bGVzIiwibGVmdCIsImNvbnRhaW5lciIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlckNvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJMZWZ0Q29sb3IiLCJib3JkZXJMZWZ0U3R5bGUiLCJib2R5UnVsZXMiLCJhbGxBbmltYXRpb25zIiwiYW5pbWF0aW9uIiwiYmFja2dyb3VuZFN0eWxlcyIsImdyYWRpZW50Q29sb3IiLCJiYWNrZ3JvdW5kIiwiaWNvblJ1bGVzIiwiYmFja2dyb3VuZE9wdGlvbnMiLCJzcGFjaW5nT3B0aW9ucyIsIm5vb3BZYU1ldHJpa2EiLCJnb2FsIiwiY29uc29sZSIsImxvZyIsIm5vb3BBZEZveCIsInVzZU1ldHJpY3MiLCJsYXllck5hbWUiLCJzYXZlTWV0cmljcyIsInlhUmVhY2hHb2FsIiwiYWRmb3hSZWFjaEdvYWwiLCJtZXRyaWNzIiwieWFTaG93IiwiYWRmb3hTaG93IiwieWFDbGljayIsImFkZm94Q2xpY2siLCJ1c2VFeHRyYWN0Rm9udHMiLCJmb250cyIsIlNldCIsImFkZCIsImZvbnRMaW5rcyIsInVzZU1lbW8iLCJmcm9tIiwiZm9udCIsInJlbCIsImhyZWYiLCJTaW1wbGVHaWZ0Iiwicm9vdFJlZiIsImxlZ2FsSXNPcGVuIiwidG9nZ2xlTGVnYWxJc09wZW4iLCJvbkNsaWNrIiwic3R5bGVzIiwiZmFkZWluIiwiX2pzeHMiLCJjbGFzc05hbWUiLCJyZWYiLCJzdHlsZSIsImljb25UYXJnZXQiLCJib2R5IiwiYm9keU9wZW4iLCJhcnJvdyIsImNsb3NlIiwib2ZmZXIiLCJsb2dvIiwidGV4dCIsImJ1dHRvbiIsImJ1dHRvbkFuaW1hdGVkIiwiaXNBbmltYXRlZCIsImxlZ2FsIiwibGVnYWxPcGVuIiwibGVnYWxUZXh0IiwibGVnYWxCdXR0b24iLCJidXR0b25PcGVuVGV4dCIsImJ1dHRvbkhpZGVUZXh0IiwiQm9udXNDYXJkIiwidmFyaWFudDIiLCJ2YXJpYW50IiwibGluZSIsImJvZHlJbm5lciIsImJ1dHRvblRleHQiLCJDb21wbGV4R2lmdCIsInByb21vdGlvbiIsInRpdGxlIiwiaGVhZEljb24iLCJoZWFkVGl0bGUiLCJjaGlsZCIsInN3aXRjaFRleHRBbGlnblRvRmxleCIsInRleHRBbGlnbiIsImNlbnRlciIsInJpZ2h0IiwiTGluZSIsIlNpbXBsZVBvcHVwIiwiYWxpZ25JdGVtcyIsImFsaWduIiwiYnV0dG9uUnVsZXMiLCJqdXN0aWZ5Q29udGVudCIsImxlZ2FsUnVsZXMiLCJCb251cyIsImhlYWRlciIsIndyYXBwZXIiLCJNYXRjaCIsInRlYW1zIiwibGVhZ3VlIiwibmFtZSIsInRlYW1BIiwidGVhbUIiLCJ0ZWFtIiwidGVhbUxvZ28iLCJ0ZWFtTmFtZSIsIm9kZCIsIm9kZExhYmVsIiwib2RkVmFsdWUiLCJidXR0b25XcmFwcGVyIiwiY29udGVudFJ1bGVzIiwiY29udGVudCIsInRleHRSdWxlcyIsImJ1dHRvbkhlYWQiLCJidXR0b25UYXJnZXQiLCJ0b2dnbGVJc09wZW4iLCJyb3dGaXJzdCIsInJvd1NlY29uZCIsImJvb2ttYWtlciIsImxlZ2FsSW5mbyIsImxlZ2FsSW5mb0J1dHRvbiIsIm9wZW5UZXh0IiwiY2xvc2VUZXh0IiwiVGV4dCIsIk1hdGNoZXMiLCJyb290UnVsZXMiLCJvZGRMb2dvIiwidmFsdWVPbmUiLCJjb2VmIiwiY29lZkhlYWQiLCJjb2VmVmFsdWUiLCJ2YWx1ZVgiLCJvZGRSZXZlcnNlIiwidmFsdWVUd28iLCJNYXRjaGVzT25lVHdvIiwidGl0bGVMYWJlbCIsInRpdGxlVmFsdWUiLCJ0ZWFtMU5hbWUiLCJ0ZWFtVmFsdWUiLCJ2YWx1ZTEiLCJ0ZWFtMk5hbWUiLCJ2YWx1ZTIiLCJ1c2VBbmltYXRlZExpc3QiLCJzbGlkZXMiLCJpdGVtc0NvdW50IiwiYW5pbWF0ZWRJZHgiLCJzZXRBbmltYXRlZElkeCIsImFuaW1hdGlvbkR1cmF0aW9uIiwiZ29OZXh0IiwidGltZW91dCIsIkRFRkFVTFRfQU5JTUFUSU9OX1NQRUVEIiwiV2lkZUNhcmQiLCJnZXRDaGlsZCIsIm1hdGNoZXMiLCJtYXRjaGVzT25lVHdvIiwic2xpZGVzTGlzdCIsImZpbHRlciIsIkJvb2xlYW4iLCJzbGlkZSIsImFuaW1hdGlvbk5hbWUiLCJjdXJyZW50U2xpZGUiLCJzbGlkZVJ1bGVzIiwiYmFja2dyb3VuZFJ1bGVzIiwiaGFzQ3VzdG9tQmFja2dyb3VuZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxHQUFDLFdBQVk7QUFHWixRQUFJLFNBQVMsQ0FBRSxFQUFDO0FBR2hCLGFBQVNBLGNBQWE7QUFDckIsVUFBSSxVQUFVLENBQUE7QUFFZCxlQUFTQyxLQUFJLEdBQUdBLEtBQUksVUFBVSxRQUFRQSxNQUFLO0FBQzFDLFlBQUksTUFBTSxVQUFVQSxFQUFDO0FBQ3JCLFlBQUksQ0FBQztBQUFLO0FBRVYsWUFBSSxVQUFVLE9BQU87QUFFckIsWUFBSSxZQUFZLFlBQVksWUFBWSxVQUFVO0FBQ2pELGtCQUFRLEtBQUssR0FBRztBQUFBLFFBQ2hCLFdBQVUsTUFBTSxRQUFRLEdBQUcsR0FBRztBQUM5QixjQUFJLElBQUksUUFBUTtBQUNmLGdCQUFJQyxTQUFRRixZQUFXLE1BQU0sTUFBTSxHQUFHO0FBQ3RDLGdCQUFJRSxRQUFPO0FBQ1Ysc0JBQVEsS0FBS0EsTUFBSztBQUFBLFlBQ2xCO0FBQUEsVUFDRDtBQUFBLFFBQ0wsV0FBYyxZQUFZLFVBQVU7QUFDaEMsY0FBSSxJQUFJLGFBQWEsT0FBTyxVQUFVLFlBQVksQ0FBQyxJQUFJLFNBQVMsU0FBUSxFQUFHLFNBQVMsZUFBZSxHQUFHO0FBQ3JHLG9CQUFRLEtBQUssSUFBSSxTQUFVLENBQUE7QUFDM0I7QUFBQSxVQUNBO0FBRUQsbUJBQVMsT0FBTyxLQUFLO0FBQ3BCLGdCQUFJLE9BQU8sS0FBSyxLQUFLLEdBQUcsS0FBSyxJQUFJLEdBQUcsR0FBRztBQUN0QyxzQkFBUSxLQUFLLEdBQUc7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUVELGFBQU8sUUFBUSxLQUFLLEdBQUc7QUFBQSxJQUN2QjtBQUVELFFBQXFDLE9BQU8sU0FBUztBQUNwRCxNQUFBRixZQUFXLFVBQVVBO0FBQ3JCLGFBQUEsVUFBaUJBO0FBQUEsSUFDbkIsT0FLUTtBQUNOLGFBQU8sYUFBYUE7QUFBQSxJQUNwQjtBQUFBLEVBQ0Y7OztBQzNEaUMsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFRyxNQUFFLEdBQUUsSUFBRSxDQUFBLEdBQUcsSUFBRSxJQUFHLElBQUVDLFFBQUUsS0FBSSxJQUFFQSxRQUFFLEtBQUksSUFBRUEsUUFBRSxRQUFPLElBQUVBLFFBQUUsS0FBSSxJQUFFQSxRQUFFO0FBQVEsU0FBUyxFQUFFQyxJQUFFQyxJQUFFO0FBQUNGLFVBQUUsT0FBS0EsUUFBRSxJQUFJLEdBQUVDLElBQUVGLE9BQUdHLEVBQUMsR0FBRUgsTUFBRTtBQUFFLE1BQUlGLEtBQUUsRUFBRSxRQUFNLEVBQUUsTUFBSSxFQUFDLElBQUcsSUFBRyxLQUFJLENBQUUsRUFBQTtBQUFHLFNBQU9JLE1BQUdKLEdBQUUsR0FBRyxVQUFRQSxHQUFFLEdBQUcsS0FBSyxFQUFDLEtBQUksRUFBQyxDQUFDLEdBQUVBLEdBQUUsR0FBR0ksRUFBQztBQUFDO0FBQUMsU0FBUyxFQUFFLEdBQUU7QUFBQyxTQUFPRixNQUFFLEdBQUUsRUFBRUksS0FBRSxDQUFDO0FBQUM7QUFBQyxTQUFTLEVBQUUsR0FBRUQsSUFBRUwsSUFBRTtBQUFDLE1BQUlFLEtBQUUsRUFBRSxLQUFJLENBQUM7QUFBRSxNQUFHQSxHQUFFLElBQUUsR0FBRSxDQUFDQSxHQUFFLFFBQU1BLEdBQUUsS0FBRyxDQUFDRixLQUFFQSxHQUFFSyxFQUFDLElBQUVDLElBQUUsUUFBT0QsRUFBQyxHQUFFLFNBQVNGLElBQUU7QUFBQyxRQUFJQyxLQUFFRixHQUFFLE1BQUlBLEdBQUUsSUFBSSxDQUFDLElBQUVBLEdBQUUsR0FBRyxDQUFDLEdBQUVLLEtBQUVMLEdBQUUsRUFBRUUsSUFBRUQsRUFBQztBQUFFLElBQUFDLE9BQUlHLE9BQUlMLEdBQUUsTUFBSSxDQUFDSyxJQUFFTCxHQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUVBLEdBQUUsSUFBSSxTQUFTLENBQUUsQ0FBQTtBQUFBLEVBQUUsQ0FBQyxHQUFFQSxHQUFFLE1BQUksR0FBRSxDQUFDLEVBQUUsSUFBRztBQUFDLFFBQUlNLEtBQUUsU0FBU0wsSUFBRUMsSUFBRUcsSUFBRTtBQUFDLFVBQUcsQ0FBQ0wsR0FBRSxJQUFJO0FBQUksZUFBTTtBQUFHLFVBQUlHLEtBQUVILEdBQUUsSUFBSSxJQUFJLEdBQUcsT0FBTyxTQUFTQyxJQUFFO0FBQUMs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LENBQUEsR0FBR0QsUUFBRSxJQUFJSSxJQUFFSCxHQUFFLEdBQUc7QUFBQSxNQUFDO0FBQUM7QUFBQ0QsUUFBRSxNQUFJLFNBQVMsR0FBRTtBQUFDLE1BQUUsTUFBSyxLQUFHLEVBQUUsQ0FBQztBQUFDLEdBQUVBLFFBQUUsTUFBSSxTQUFTLEdBQUU7QUFBQyxPQUFHLEVBQUUsQ0FBQyxHQUFFLElBQUU7QUFBRSxNQUFJSCxNQUFHLElBQUUsRUFBRSxLQUFLO0FBQUksRUFBQUEsT0FBSSxNQUFJLEtBQUdBLEdBQUUsTUFBSSxDQUFBLEdBQUcsRUFBRSxNQUFJLENBQUEsR0FBR0EsR0FBRSxHQUFHLFFBQVEsU0FBU0csSUFBRTtBQUFDLElBQUFBLEdBQUUsUUFBTUEsR0FBRSxLQUFHQSxHQUFFLE1BQUtBLEdBQUUsTUFBSSxHQUFFQSxHQUFFLE1BQUlBLEdBQUUsSUFBRTtBQUFBLEVBQU0sQ0FBQyxNQUFJSCxHQUFFLElBQUksUUFBUSxDQUFDLEdBQUVBLEdBQUUsSUFBSSxRQUFRYyxHQUFDLEdBQUVkLEdBQUUsTUFBSSxDQUFBLEtBQUssSUFBRTtBQUFDLEdBQUVHLFFBQUUsU0FBTyxTQUFTQyxJQUFFO0FBQUMsT0FBRyxFQUFFQSxFQUFDO0FBQUUsTUFBSUYsS0FBRUUsR0FBRTtBQUFJLEVBQUFGLE1BQUdBLEdBQUUsUUFBTUEsR0FBRSxJQUFJLElBQUksV0FBUyxNQUFJLEVBQUUsS0FBS0EsRUFBQyxLQUFHLE1BQUlDLFFBQUUsMkJBQXlCLElBQUVBLFFBQUUsMEJBQXdCLEdBQUcsQ0FBQyxJQUFHRCxHQUFFLElBQUksR0FBRyxRQUFRLFNBQVMsR0FBRTtBQUFDLE1BQUUsTUFBSSxFQUFFLE1BQUksRUFBRSxJQUFHLEVBQUUsUUFBTSxNQUFJLEVBQUUsS0FBRyxFQUFFLE1BQUssRUFBRSxJQUFFLFFBQU8sRUFBRSxNQUFJO0FBQUEsRUFBQyxDQUFDLElBQUcsSUFBRSxJQUFFO0FBQUksR0FBRUMsUUFBRSxNQUFJLFNBQVNDLElBQUVHLElBQUU7QUFBQyxFQUFBQSxHQUFFLEtBQUssU0FBU0gsSUFB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QU1OLE9BQUksRUFBRSxPQUFLTSxHQUFFLGFBQWEsRUFBRSxLQUFJLEVBQUUsR0FBRyxHQUFFLEVBQUUsSUFBSSxNQUFJLE1BQUcsRUFBRSxJQUFJLE1BQUlBLE1BQUk7QUFBQztBQUFDLFNBQVMsSUFBRztBQUFDLE9BQUssTUFBSSxHQUFFLEtBQUssSUFBRSxNQUFLLEtBQUssTUFBSTtBQUFJO0FBQUMsU0FBUyxFQUFFLEdBQUU7QUFBQyxNQUFJTixLQUFFLEVBQUUsR0FBRztBQUFJLFNBQU9BLE1BQUdBLEdBQUUsT0FBS0EsR0FBRSxJQUFJLENBQUM7QUFBQztBQUFxTCxTQUFTLElBQUc7QUFBQyxPQUFLLElBQUUsTUFBSyxLQUFLLElBQUU7QUFBSTtBQUFDTSxRQUFFLFVBQVEsU0FBUyxHQUFFO0FBQUMsTUFBSU4sS0FBRSxFQUFFO0FBQUksRUFBQUEsTUFBR0EsR0FBRSxPQUFLQSxHQUFFLElBQUcsR0FBR0EsTUFBRyxTQUFLLEVBQUUsUUFBTSxFQUFFLE9BQUssT0FBTSxLQUFHLEVBQUUsQ0FBQztBQUFDLElBQUcsRUFBRSxZQUFVLElBQUlELGFBQUcsTUFBSSxTQUFTLEdBQUVDLElBQUU7QUFBQyxNQUFJTSxLQUFFTixHQUFFLEtBQUlHLEtBQUU7QUFBSyxVQUFNQSxHQUFFLE1BQUlBLEdBQUUsSUFBRSxDQUFFLElBQUVBLEdBQUUsRUFBRSxLQUFLRyxFQUFDO0FBQUUsTUFBSUwsS0FBRSxFQUFFRSxHQUFFLEdBQUcsR0FBRUwsS0FBRSxPQUFHRixLQUFFLFdBQVU7QUFBQyxJQUFBRSxPQUFJQSxLQUFFLE1BQUdRLEdBQUUsTUFBSSxNQUFLTCxLQUFFQSxHQUFFVyxFQUFDLElBQUVBLEdBQUM7QUFBQSxFQUFHO0FBQUUsRUFBQU4sR0FBRSxNQUFJVjtBQUFFLE1BQUlnQixLQUFFLFdBQVU7QUFBQyxRQUFHLENBQUMsRUFBRVQsR0FBRSxLQUFJO0FBQUMsVUFBR0EsR0FBRSxNQUFNLEtBQUk7QUFBQyxZQUFJSixLQUFFSSxHQUFFLE1BQU07QUFBSSxRQUFBQSxHQUFFLElBQUksSUFBSSxDQUFD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M0csTUFBTW9IO0FBQUFBLFlBQU94VixXQUNqREUsRUFBQSxPQUFBO0FBQUEsY0FBSzJVLFdBQVdILFNBQU9ZO0FBQUFBLGNBQU1QLE9BQU8zRyxNQUFNa0g7QUFBQUEsWUFBQUEsQ0FBSyxJQUM5Q2xILFdBQU1vSCxXQUFOcEgsbUJBQWNwTyxRQUFRO0FBQUEsVUFBQSxDQUFBO0FBQUEsUUFBQSxDQUVyQixDQUFBO0FBQUEsTUFBQSxDQUNGLENBQUE7QUFBQSxJQUFBLENBQ0YsQ0FBQTtBQUFBLEVBQUEsQ0FDSjtBQUVSO0FBRUEsTUFBZUksUUFBQUEsT0FBT0YsRUFBQythLGFBQVc7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDQsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwM119