@adstore/templates 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/CHANGELOG.md +18 -2
  2. package/dist/style.css +1613 -0
  3. package/dist/templates.es.js +2707 -0
  4. package/dist/templates.umd.js +2710 -0
  5. package/package.json +10 -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,2710 @@
1
+ (function(global2, factory) {
2
+ typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("preact")) : typeof define === "function" && define.amd ? define(["exports", "preact"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2["@adstore/templates"] = {}, global2.preact));
3
+ })(this, function(exports2, preact) {
4
+ "use strict";
5
+ var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
6
+ var classnamesExports = {};
7
+ var classnames = {
8
+ get exports() {
9
+ return classnamesExports;
10
+ },
11
+ set exports(v2) {
12
+ classnamesExports = v2;
13
+ }
14
+ };
15
+ /*!
16
+ Copyright (c) 2018 Jed Watson.
17
+ Licensed under the MIT License (MIT), see
18
+ http://jedwatson.github.io/classnames
19
+ */
20
+ (function(module2) {
21
+ (function() {
22
+ var hasOwn = {}.hasOwnProperty;
23
+ function classNames2() {
24
+ var classes = [];
25
+ for (var i2 = 0; i2 < arguments.length; i2++) {
26
+ var arg = arguments[i2];
27
+ if (!arg)
28
+ continue;
29
+ var argType = typeof arg;
30
+ if (argType === "string" || argType === "number") {
31
+ classes.push(arg);
32
+ } else if (Array.isArray(arg)) {
33
+ if (arg.length) {
34
+ var inner2 = classNames2.apply(null, arg);
35
+ if (inner2) {
36
+ classes.push(inner2);
37
+ }
38
+ }
39
+ } else if (argType === "object") {
40
+ if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) {
41
+ classes.push(arg.toString());
42
+ continue;
43
+ }
44
+ for (var key in arg) {
45
+ if (hasOwn.call(arg, key) && arg[key]) {
46
+ classes.push(key);
47
+ }
48
+ }
49
+ }
50
+ }
51
+ return classes.join(" ");
52
+ }
53
+ if (module2.exports) {
54
+ classNames2.default = classNames2;
55
+ module2.exports = classNames2;
56
+ } else {
57
+ window.classNames = classNames2;
58
+ }
59
+ })();
60
+ })(classnames);
61
+ const classNames = classnamesExports;
62
+ var t, r, u, i, o$1 = 0, f = [], c = [], e = preact.options.__b, a = preact.options.__r, v = preact.options.diffed, l = preact.options.__c, m = preact.options.unmount;
63
+ function d(t2, u2) {
64
+ preact.options.__h && preact.options.__h(r, t2, o$1 || u2), o$1 = 0;
65
+ var i2 = r.__H || (r.__H = { __: [], __h: [] });
66
+ return t2 >= i2.__.length && i2.__.push({ __V: c }), i2.__[t2];
67
+ }
68
+ function h(n) {
69
+ return o$1 = 1, s(B$1, n);
70
+ }
71
+ function s(n, u2, i2) {
72
+ var o2 = d(t++, 2);
73
+ if (o2.t = n, !o2.__c && (o2.__ = [i2 ? i2(u2) : B$1(void 0, u2), function(n2) {
74
+ var t2 = o2.__N ? o2.__N[0] : o2.__[0], r2 = o2.t(t2, n2);
75
+ t2 !== r2 && (o2.__N = [r2, o2.__[1]], o2.__c.setState({}));
76
+ }], o2.__c = r, !r.u)) {
77
+ var f2 = function(n2, t2, r2) {
78
+ if (!o2.__c.__H)
79
+ return true;
80
+ var u3 = o2.__c.__H.__.filter(function(n3) {
81
+ return n3.__c;
82
+ });
83
+ if (u3.every(function(n3) {
84
+ return !n3.__N;
85
+ }))
86
+ return !c2 || c2.call(this, n2, t2, r2);
87
+ var i3 = false;
88
+ return u3.forEach(function(n3) {
89
+ if (n3.__N) {
90
+ var t3 = n3.__[0];
91
+ n3.__ = n3.__N, n3.__N = void 0, t3 !== n3.__[0] && (i3 = true);
92
+ }
93
+ }), !(!i3 && o2.__c.props === n2) && (!c2 || c2.call(this, n2, t2, r2));
94
+ };
95
+ r.u = true;
96
+ var c2 = r.shouldComponentUpdate, e2 = r.componentWillUpdate;
97
+ r.componentWillUpdate = function(n2, t2, r2) {
98
+ if (this.__e) {
99
+ var u3 = c2;
100
+ c2 = void 0, f2(n2, t2, r2), c2 = u3;
101
+ }
102
+ e2 && e2.call(this, n2, t2, r2);
103
+ }, r.shouldComponentUpdate = f2;
104
+ }
105
+ return o2.__N || o2.__;
106
+ }
107
+ function p(u2, i2) {
108
+ var o2 = d(t++, 3);
109
+ !preact.options.__s && z(o2.__H, i2) && (o2.__ = u2, o2.i = i2, r.__H.__h.push(o2));
110
+ }
111
+ function y(u2, i2) {
112
+ var o2 = d(t++, 4);
113
+ !preact.options.__s && z(o2.__H, i2) && (o2.__ = u2, o2.i = i2, r.__h.push(o2));
114
+ }
115
+ function _$1(n) {
116
+ return o$1 = 5, F$1(function() {
117
+ return { current: n };
118
+ }, []);
119
+ }
120
+ function F$1(n, r2) {
121
+ var u2 = d(t++, 7);
122
+ return z(u2.__H, r2) ? (u2.__V = n(), u2.i = r2, u2.__h = n, u2.__V) : u2.__;
123
+ }
124
+ function q$1(n) {
125
+ var u2 = r.context[n.__c], i2 = d(t++, 9);
126
+ return i2.c = n, u2 ? (null == i2.__ && (i2.__ = true, u2.sub(r)), u2.props.value) : n.__;
127
+ }
128
+ function b() {
129
+ for (var t2; t2 = f.shift(); )
130
+ if (t2.__P && t2.__H)
131
+ try {
132
+ t2.__H.__h.forEach(k), t2.__H.__h.forEach(w$1), t2.__H.__h = [];
133
+ } catch (r2) {
134
+ t2.__H.__h = [], preact.options.__e(r2, t2.__v);
135
+ }
136
+ }
137
+ preact.options.__b = function(n) {
138
+ r = null, e && e(n);
139
+ }, preact.options.__r = function(n) {
140
+ a && a(n), t = 0;
141
+ var i2 = (r = n.__c).__H;
142
+ i2 && (u === r ? (i2.__h = [], r.__h = [], i2.__.forEach(function(n2) {
143
+ n2.__N && (n2.__ = n2.__N), n2.__V = c, n2.__N = n2.i = void 0;
144
+ })) : (i2.__h.forEach(k), i2.__h.forEach(w$1), i2.__h = [])), u = r;
145
+ }, preact.options.diffed = function(t2) {
146
+ v && v(t2);
147
+ var o2 = t2.__c;
148
+ o2 && o2.__H && (o2.__H.__h.length && (1 !== f.push(o2) && i === preact.options.requestAnimationFrame || ((i = preact.options.requestAnimationFrame) || j)(b)), o2.__H.__.forEach(function(n) {
149
+ n.i && (n.__H = n.i), n.__V !== c && (n.__ = n.__V), n.i = void 0, n.__V = c;
150
+ })), u = r = null;
151
+ }, preact.options.__c = function(t2, r2) {
152
+ r2.some(function(t3) {
153
+ try {
154
+ t3.__h.forEach(k), t3.__h = t3.__h.filter(function(n) {
155
+ return !n.__ || w$1(n);
156
+ });
157
+ } catch (u2) {
158
+ r2.some(function(n) {
159
+ n.__h && (n.__h = []);
160
+ }), r2 = [], preact.options.__e(u2, t3.__v);
161
+ }
162
+ }), l && l(t2, r2);
163
+ }, preact.options.unmount = function(t2) {
164
+ m && m(t2);
165
+ var r2, u2 = t2.__c;
166
+ u2 && u2.__H && (u2.__H.__.forEach(function(n) {
167
+ try {
168
+ k(n);
169
+ } catch (n2) {
170
+ r2 = n2;
171
+ }
172
+ }), u2.__H = void 0, r2 && preact.options.__e(r2, u2.__v));
173
+ };
174
+ var g$1 = "function" == typeof requestAnimationFrame;
175
+ function j(n) {
176
+ var t2, r2 = function() {
177
+ clearTimeout(u2), g$1 && cancelAnimationFrame(t2), setTimeout(n);
178
+ }, u2 = setTimeout(r2, 100);
179
+ g$1 && (t2 = requestAnimationFrame(r2));
180
+ }
181
+ function k(n) {
182
+ var t2 = r, u2 = n.__c;
183
+ "function" == typeof u2 && (n.__c = void 0, u2()), r = t2;
184
+ }
185
+ function w$1(n) {
186
+ var t2 = r;
187
+ n.__c = n.__(), r = t2;
188
+ }
189
+ function z(n, t2) {
190
+ return !n || n.length !== t2.length || t2.some(function(t3, r2) {
191
+ return t3 !== n[r2];
192
+ });
193
+ }
194
+ function B$1(n, t2) {
195
+ return "function" == typeof t2 ? t2(n) : t2;
196
+ }
197
+ function g(n, t2) {
198
+ for (var e2 in t2)
199
+ n[e2] = t2[e2];
200
+ return n;
201
+ }
202
+ function C(n, t2) {
203
+ for (var e2 in n)
204
+ if ("__source" !== e2 && !(e2 in t2))
205
+ return true;
206
+ for (var r2 in t2)
207
+ if ("__source" !== r2 && n[r2] !== t2[r2])
208
+ return true;
209
+ return false;
210
+ }
211
+ function w(n) {
212
+ this.props = n;
213
+ }
214
+ (w.prototype = new preact.Component()).isPureReactComponent = true, w.prototype.shouldComponentUpdate = function(n, t2) {
215
+ return C(this.props, n) || C(this.state, t2);
216
+ };
217
+ var R = preact.options.__b;
218
+ preact.options.__b = function(n) {
219
+ n.type && n.type.__f && n.ref && (n.props.ref = n.ref, n.ref = null), R && R(n);
220
+ };
221
+ var T = preact.options.__e;
222
+ preact.options.__e = function(n, t2, e2, r2) {
223
+ if (n.then) {
224
+ for (var u2, o2 = t2; o2 = o2.__; )
225
+ if ((u2 = o2.__c) && u2.__c)
226
+ return null == t2.__e && (t2.__e = e2.__e, t2.__k = e2.__k), u2.__c(n, t2);
227
+ }
228
+ T(n, t2, e2, r2);
229
+ };
230
+ var I = preact.options.unmount;
231
+ function L(n, t2, e2) {
232
+ return n && (n.__c && n.__c.__H && (n.__c.__H.__.forEach(function(n2) {
233
+ "function" == typeof n2.__c && n2.__c();
234
+ }), 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) {
235
+ return L(n2, t2, e2);
236
+ })), n;
237
+ }
238
+ function U(n, t2, e2) {
239
+ return n && (n.__v = null, n.__k = n.__k && n.__k.map(function(n2) {
240
+ return U(n2, t2, e2);
241
+ }), n.__c && n.__c.__P === t2 && (n.__e && e2.insertBefore(n.__e, n.__d), n.__c.__e = true, n.__c.__P = e2)), n;
242
+ }
243
+ function D() {
244
+ this.__u = 0, this.t = null, this.__b = null;
245
+ }
246
+ function F(n) {
247
+ var t2 = n.__.__c;
248
+ return t2 && t2.__a && t2.__a(n);
249
+ }
250
+ function V() {
251
+ this.u = null, this.o = null;
252
+ }
253
+ preact.options.unmount = function(n) {
254
+ var t2 = n.__c;
255
+ t2 && t2.__R && t2.__R(), t2 && true === n.__h && (n.type = null), I && I(n);
256
+ }, (D.prototype = new preact.Component()).__c = function(n, t2) {
257
+ var e2 = t2.__c, r2 = this;
258
+ null == r2.t && (r2.t = []), r2.t.push(e2);
259
+ var u2 = F(r2.__v), o2 = false, i2 = function() {
260
+ o2 || (o2 = true, e2.__R = null, u2 ? u2(l2) : l2());
261
+ };
262
+ e2.__R = i2;
263
+ var l2 = function() {
264
+ if (!--r2.__u) {
265
+ if (r2.state.__a) {
266
+ var n2 = r2.state.__a;
267
+ r2.__v.__k[0] = U(n2, n2.__c.__P, n2.__c.__O);
268
+ }
269
+ var t3;
270
+ for (r2.setState({ __a: r2.__b = null }); t3 = r2.t.pop(); )
271
+ t3.forceUpdate();
272
+ }
273
+ }, c2 = true === t2.__h;
274
+ r2.__u++ || c2 || r2.setState({ __a: r2.__b = r2.__v.__k[0] }), n.then(i2, i2);
275
+ }, D.prototype.componentWillUnmount = function() {
276
+ this.t = [];
277
+ }, D.prototype.render = function(n, e2) {
278
+ if (this.__b) {
279
+ if (this.__v.__k) {
280
+ var r2 = document.createElement("div"), o2 = this.__v.__k[0].__c;
281
+ this.__v.__k[0] = L(this.__b, r2, o2.__O = o2.__P);
282
+ }
283
+ this.__b = null;
284
+ }
285
+ var i2 = e2.__a && preact.createElement(preact.Fragment, null, n.fallback);
286
+ return i2 && (i2.__h = null), [preact.createElement(preact.Fragment, null, e2.__a ? null : n.children), i2];
287
+ };
288
+ var W = function(n, t2, e2) {
289
+ if (++e2[1] === e2[0] && n.o.delete(t2), n.props.revealOrder && ("t" !== n.props.revealOrder[0] || !n.o.size))
290
+ for (e2 = n.u; e2; ) {
291
+ for (; e2.length > 3; )
292
+ e2.pop()();
293
+ if (e2[1] < e2[0])
294
+ break;
295
+ n.u = e2 = e2[2];
296
+ }
297
+ };
298
+ (V.prototype = new preact.Component()).__a = function(n) {
299
+ var t2 = this, e2 = F(t2.__v), r2 = t2.o.get(n);
300
+ return r2[0]++, function(u2) {
301
+ var o2 = function() {
302
+ t2.props.revealOrder ? (r2.push(u2), W(t2, n, r2)) : u2();
303
+ };
304
+ e2 ? e2(o2) : o2();
305
+ };
306
+ }, V.prototype.render = function(n) {
307
+ this.u = null, this.o = /* @__PURE__ */ new Map();
308
+ var t2 = preact.toChildArray(n.children);
309
+ n.revealOrder && "b" === n.revealOrder[0] && t2.reverse();
310
+ for (var e2 = t2.length; e2--; )
311
+ this.o.set(t2[e2], this.u = [1, 0, this.u]);
312
+ return n.children;
313
+ }, V.prototype.componentDidUpdate = V.prototype.componentDidMount = function() {
314
+ var n = this;
315
+ this.o.forEach(function(t2, e2) {
316
+ W(n, e2, t2);
317
+ });
318
+ };
319
+ 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) {
320
+ return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/ : /fil|che|ra/).test(n);
321
+ };
322
+ preact.Component.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t2) {
323
+ Object.defineProperty(preact.Component.prototype, t2, { configurable: true, get: function() {
324
+ return this["UNSAFE_" + t2];
325
+ }, set: function(n) {
326
+ Object.defineProperty(this, t2, { configurable: true, writable: true, value: n });
327
+ } });
328
+ });
329
+ var K = preact.options.event;
330
+ function Q() {
331
+ }
332
+ function X() {
333
+ return this.cancelBubble;
334
+ }
335
+ function nn() {
336
+ return this.defaultPrevented;
337
+ }
338
+ preact.options.event = function(n) {
339
+ return K && (n = K(n)), n.persist = Q, n.isPropagationStopped = X, n.isDefaultPrevented = nn, n.nativeEvent = n;
340
+ };
341
+ var en = { enumerable: false, configurable: true, get: function() {
342
+ return this.class;
343
+ } }, rn = preact.options.vnode;
344
+ preact.options.vnode = function(n) {
345
+ "string" == typeof n.type && function(n2) {
346
+ var t2 = n2.props, e2 = n2.type, u2 = {};
347
+ for (var o2 in t2) {
348
+ var i2 = t2[o2];
349
+ if (!("value" === o2 && "defaultValue" in t2 && null == i2 || $ && "children" === o2 && "noscript" === e2 || "class" === o2 || "className" === o2)) {
350
+ var l2 = o2.toLowerCase();
351
+ "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;
352
+ }
353
+ }
354
+ "select" == e2 && u2.multiple && Array.isArray(u2.value) && (u2.value = preact.toChildArray(t2.children).forEach(function(n3) {
355
+ n3.props.selected = -1 != u2.value.indexOf(n3.props.value);
356
+ })), "select" == e2 && null != u2.defaultValue && (u2.value = preact.toChildArray(t2.children).forEach(function(n3) {
357
+ n3.props.selected = u2.multiple ? -1 != u2.defaultValue.indexOf(n3.props.value) : u2.defaultValue == n3.props.value;
358
+ })), 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;
359
+ }(n), n.$$typeof = B, rn && rn(n);
360
+ };
361
+ var un = preact.options.__r;
362
+ preact.options.__r = function(n) {
363
+ un && un(n), n.__c;
364
+ };
365
+ var on = preact.options.diffed;
366
+ preact.options.diffed = function(n) {
367
+ on && on(n);
368
+ var t2 = n.props, e2 = n.__e;
369
+ null != e2 && "textarea" === n.type && "value" in t2 && t2.value !== e2.value && (e2.value = null == t2.value ? "" : t2.value);
370
+ };
371
+ const reset = "";
372
+ const root$i = "_root_1w7t1_1";
373
+ const icon$1 = "_icon_1w7t1_5";
374
+ const iconTarget$1 = "_iconTarget_1w7t1_17";
375
+ const body$6 = "_body_1w7t1_22";
376
+ const bodyOpen$1 = "_bodyOpen_1w7t1_30";
377
+ const simpleGift_in = "_simpleGift_in_1w7t1_1";
378
+ const close$1 = "_close_1w7t1_43";
379
+ const arrow$1 = "_arrow_1w7t1_57";
380
+ const container$2 = "_container_1w7t1_67";
381
+ const inner$1 = "_inner_1w7t1_73";
382
+ const logo$6 = "_logo_1w7t1_80";
383
+ const text$4 = "_text_1w7t1_86";
384
+ const button$6 = "_button_1w7t1_99";
385
+ const legal$5 = "_legal_1w7t1_108";
386
+ const legalOpen$1 = "_legalOpen_1w7t1_125";
387
+ const legalText$1 = "_legalText_1w7t1_133";
388
+ const legalButton$1 = "_legalButton_1w7t1_148";
389
+ const fadein$1 = "_fadein_1w7t1_1";
390
+ const pulse$1 = "_pulse_1w7t1_1";
391
+ const gradient$1 = "_gradient_1w7t1_1";
392
+ const wiggle$1 = "_wiggle_1w7t1_1";
393
+ const styles$d = {
394
+ root: root$i,
395
+ icon: icon$1,
396
+ iconTarget: iconTarget$1,
397
+ body: body$6,
398
+ bodyOpen: bodyOpen$1,
399
+ simpleGift_in,
400
+ close: close$1,
401
+ arrow: arrow$1,
402
+ container: container$2,
403
+ inner: inner$1,
404
+ logo: logo$6,
405
+ text: text$4,
406
+ button: button$6,
407
+ legal: legal$5,
408
+ legalOpen: legalOpen$1,
409
+ legalText: legalText$1,
410
+ legalButton: legalButton$1,
411
+ fadein: fadein$1,
412
+ pulse: pulse$1,
413
+ gradient: gradient$1,
414
+ wiggle: wiggle$1
415
+ };
416
+ const useGiftOpen = (delay = 1e3) => {
417
+ const [isOpen, setIsOpen] = h(false);
418
+ const timerRef = _$1(null);
419
+ const onToggle = () => {
420
+ clearTimeout(timerRef.current);
421
+ setIsOpen((prev) => !prev);
422
+ };
423
+ p(() => {
424
+ timerRef.current = setTimeout(() => {
425
+ setIsOpen(true);
426
+ }, delay);
427
+ return () => clearTimeout(timerRef.current);
428
+ }, [delay]);
429
+ return {
430
+ isOpen,
431
+ onToggle
432
+ };
433
+ };
434
+ var _ = 0;
435
+ function o(o2, e2, n, t2, f2, l2) {
436
+ var s2, u2, a2 = {};
437
+ for (u2 in e2)
438
+ "ref" == u2 ? s2 = e2[u2] : a2[u2] = e2[u2];
439
+ 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 };
440
+ if ("function" == typeof o2 && (s2 = o2.defaultProps))
441
+ for (u2 in s2)
442
+ void 0 === a2[u2] && (a2[u2] = s2[u2]);
443
+ return preact.options.vnode && preact.options.vnode(i2), i2;
444
+ }
445
+ const State = preact.createContext();
446
+ const StateContext = ({
447
+ children,
448
+ value
449
+ }) => {
450
+ return o(State.Provider, {
451
+ value,
452
+ children
453
+ });
454
+ };
455
+ const render = (vNode) => (target, state) => preact.render(o(StateContext, {
456
+ value: state,
457
+ children: vNode
458
+ }), target);
459
+ const useCurrentState = () => q$1(State);
460
+ function listCacheClear$1() {
461
+ this.__data__ = [];
462
+ this.size = 0;
463
+ }
464
+ var _listCacheClear = listCacheClear$1;
465
+ function eq$4(value, other) {
466
+ return value === other || value !== value && other !== other;
467
+ }
468
+ var eq_1 = eq$4;
469
+ var eq$3 = eq_1;
470
+ function assocIndexOf$4(array, key) {
471
+ var length = array.length;
472
+ while (length--) {
473
+ if (eq$3(array[length][0], key)) {
474
+ return length;
475
+ }
476
+ }
477
+ return -1;
478
+ }
479
+ var _assocIndexOf = assocIndexOf$4;
480
+ var assocIndexOf$3 = _assocIndexOf;
481
+ var arrayProto = Array.prototype;
482
+ var splice = arrayProto.splice;
483
+ function listCacheDelete$1(key) {
484
+ var data = this.__data__, index2 = assocIndexOf$3(data, key);
485
+ if (index2 < 0) {
486
+ return false;
487
+ }
488
+ var lastIndex = data.length - 1;
489
+ if (index2 == lastIndex) {
490
+ data.pop();
491
+ } else {
492
+ splice.call(data, index2, 1);
493
+ }
494
+ --this.size;
495
+ return true;
496
+ }
497
+ var _listCacheDelete = listCacheDelete$1;
498
+ var assocIndexOf$2 = _assocIndexOf;
499
+ function listCacheGet$1(key) {
500
+ var data = this.__data__, index2 = assocIndexOf$2(data, key);
501
+ return index2 < 0 ? void 0 : data[index2][1];
502
+ }
503
+ var _listCacheGet = listCacheGet$1;
504
+ var assocIndexOf$1 = _assocIndexOf;
505
+ function listCacheHas$1(key) {
506
+ return assocIndexOf$1(this.__data__, key) > -1;
507
+ }
508
+ var _listCacheHas = listCacheHas$1;
509
+ var assocIndexOf = _assocIndexOf;
510
+ function listCacheSet$1(key, value) {
511
+ var data = this.__data__, index2 = assocIndexOf(data, key);
512
+ if (index2 < 0) {
513
+ ++this.size;
514
+ data.push([key, value]);
515
+ } else {
516
+ data[index2][1] = value;
517
+ }
518
+ return this;
519
+ }
520
+ var _listCacheSet = listCacheSet$1;
521
+ var listCacheClear = _listCacheClear, listCacheDelete = _listCacheDelete, listCacheGet = _listCacheGet, listCacheHas = _listCacheHas, listCacheSet = _listCacheSet;
522
+ function ListCache$4(entries) {
523
+ var index2 = -1, length = entries == null ? 0 : entries.length;
524
+ this.clear();
525
+ while (++index2 < length) {
526
+ var entry = entries[index2];
527
+ this.set(entry[0], entry[1]);
528
+ }
529
+ }
530
+ ListCache$4.prototype.clear = listCacheClear;
531
+ ListCache$4.prototype["delete"] = listCacheDelete;
532
+ ListCache$4.prototype.get = listCacheGet;
533
+ ListCache$4.prototype.has = listCacheHas;
534
+ ListCache$4.prototype.set = listCacheSet;
535
+ var _ListCache = ListCache$4;
536
+ var ListCache$3 = _ListCache;
537
+ function stackClear$1() {
538
+ this.__data__ = new ListCache$3();
539
+ this.size = 0;
540
+ }
541
+ var _stackClear = stackClear$1;
542
+ function stackDelete$1(key) {
543
+ var data = this.__data__, result = data["delete"](key);
544
+ this.size = data.size;
545
+ return result;
546
+ }
547
+ var _stackDelete = stackDelete$1;
548
+ function stackGet$1(key) {
549
+ return this.__data__.get(key);
550
+ }
551
+ var _stackGet = stackGet$1;
552
+ function stackHas$1(key) {
553
+ return this.__data__.has(key);
554
+ }
555
+ var _stackHas = stackHas$1;
556
+ var freeGlobal$1 = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
557
+ var _freeGlobal = freeGlobal$1;
558
+ var freeGlobal = _freeGlobal;
559
+ var freeSelf = typeof self == "object" && self && self.Object === Object && self;
560
+ var root$h = freeGlobal || freeSelf || Function("return this")();
561
+ var _root = root$h;
562
+ var root$g = _root;
563
+ var Symbol$3 = root$g.Symbol;
564
+ var _Symbol = Symbol$3;
565
+ var Symbol$2 = _Symbol;
566
+ var objectProto$a = Object.prototype;
567
+ var hasOwnProperty$8 = objectProto$a.hasOwnProperty;
568
+ var nativeObjectToString$1 = objectProto$a.toString;
569
+ var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : void 0;
570
+ function getRawTag$1(value) {
571
+ var isOwn = hasOwnProperty$8.call(value, symToStringTag$1), tag = value[symToStringTag$1];
572
+ try {
573
+ value[symToStringTag$1] = void 0;
574
+ var unmasked = true;
575
+ } catch (e2) {
576
+ }
577
+ var result = nativeObjectToString$1.call(value);
578
+ if (unmasked) {
579
+ if (isOwn) {
580
+ value[symToStringTag$1] = tag;
581
+ } else {
582
+ delete value[symToStringTag$1];
583
+ }
584
+ }
585
+ return result;
586
+ }
587
+ var _getRawTag = getRawTag$1;
588
+ var objectProto$9 = Object.prototype;
589
+ var nativeObjectToString = objectProto$9.toString;
590
+ function objectToString$1(value) {
591
+ return nativeObjectToString.call(value);
592
+ }
593
+ var _objectToString = objectToString$1;
594
+ var Symbol$1 = _Symbol, getRawTag = _getRawTag, objectToString = _objectToString;
595
+ var nullTag = "[object Null]", undefinedTag = "[object Undefined]";
596
+ var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : void 0;
597
+ function baseGetTag$4(value) {
598
+ if (value == null) {
599
+ return value === void 0 ? undefinedTag : nullTag;
600
+ }
601
+ return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
602
+ }
603
+ var _baseGetTag = baseGetTag$4;
604
+ function isObject$7(value) {
605
+ var type = typeof value;
606
+ return value != null && (type == "object" || type == "function");
607
+ }
608
+ var isObject_1 = isObject$7;
609
+ var baseGetTag$3 = _baseGetTag, isObject$6 = isObject_1;
610
+ var asyncTag = "[object AsyncFunction]", funcTag$1 = "[object Function]", genTag = "[object GeneratorFunction]", proxyTag = "[object Proxy]";
611
+ function isFunction$3(value) {
612
+ if (!isObject$6(value)) {
613
+ return false;
614
+ }
615
+ var tag = baseGetTag$3(value);
616
+ return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag;
617
+ }
618
+ var isFunction_1 = isFunction$3;
619
+ var root$f = _root;
620
+ var coreJsData$1 = root$f["__core-js_shared__"];
621
+ var _coreJsData = coreJsData$1;
622
+ var coreJsData = _coreJsData;
623
+ var maskSrcKey = function() {
624
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
625
+ return uid ? "Symbol(src)_1." + uid : "";
626
+ }();
627
+ function isMasked$1(func) {
628
+ return !!maskSrcKey && maskSrcKey in func;
629
+ }
630
+ var _isMasked = isMasked$1;
631
+ var funcProto$2 = Function.prototype;
632
+ var funcToString$2 = funcProto$2.toString;
633
+ function toSource$1(func) {
634
+ if (func != null) {
635
+ try {
636
+ return funcToString$2.call(func);
637
+ } catch (e2) {
638
+ }
639
+ try {
640
+ return func + "";
641
+ } catch (e2) {
642
+ }
643
+ }
644
+ return "";
645
+ }
646
+ var _toSource = toSource$1;
647
+ var isFunction$2 = isFunction_1, isMasked = _isMasked, isObject$5 = isObject_1, toSource = _toSource;
648
+ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
649
+ var reIsHostCtor = /^\[object .+?Constructor\]$/;
650
+ var funcProto$1 = Function.prototype, objectProto$8 = Object.prototype;
651
+ var funcToString$1 = funcProto$1.toString;
652
+ var hasOwnProperty$7 = objectProto$8.hasOwnProperty;
653
+ var reIsNative = RegExp(
654
+ "^" + funcToString$1.call(hasOwnProperty$7).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
655
+ );
656
+ function baseIsNative$1(value) {
657
+ if (!isObject$5(value) || isMasked(value)) {
658
+ return false;
659
+ }
660
+ var pattern = isFunction$2(value) ? reIsNative : reIsHostCtor;
661
+ return pattern.test(toSource(value));
662
+ }
663
+ var _baseIsNative = baseIsNative$1;
664
+ function getValue$1(object, key) {
665
+ return object == null ? void 0 : object[key];
666
+ }
667
+ var _getValue = getValue$1;
668
+ var baseIsNative = _baseIsNative, getValue = _getValue;
669
+ function getNative$3(object, key) {
670
+ var value = getValue(object, key);
671
+ return baseIsNative(value) ? value : void 0;
672
+ }
673
+ var _getNative = getNative$3;
674
+ var getNative$2 = _getNative, root$e = _root;
675
+ var Map$3 = getNative$2(root$e, "Map");
676
+ var _Map = Map$3;
677
+ var getNative$1 = _getNative;
678
+ var nativeCreate$4 = getNative$1(Object, "create");
679
+ var _nativeCreate = nativeCreate$4;
680
+ var nativeCreate$3 = _nativeCreate;
681
+ function hashClear$1() {
682
+ this.__data__ = nativeCreate$3 ? nativeCreate$3(null) : {};
683
+ this.size = 0;
684
+ }
685
+ var _hashClear = hashClear$1;
686
+ function hashDelete$1(key) {
687
+ var result = this.has(key) && delete this.__data__[key];
688
+ this.size -= result ? 1 : 0;
689
+ return result;
690
+ }
691
+ var _hashDelete = hashDelete$1;
692
+ var nativeCreate$2 = _nativeCreate;
693
+ var HASH_UNDEFINED$1 = "__lodash_hash_undefined__";
694
+ var objectProto$7 = Object.prototype;
695
+ var hasOwnProperty$6 = objectProto$7.hasOwnProperty;
696
+ function hashGet$1(key) {
697
+ var data = this.__data__;
698
+ if (nativeCreate$2) {
699
+ var result = data[key];
700
+ return result === HASH_UNDEFINED$1 ? void 0 : result;
701
+ }
702
+ return hasOwnProperty$6.call(data, key) ? data[key] : void 0;
703
+ }
704
+ var _hashGet = hashGet$1;
705
+ var nativeCreate$1 = _nativeCreate;
706
+ var objectProto$6 = Object.prototype;
707
+ var hasOwnProperty$5 = objectProto$6.hasOwnProperty;
708
+ function hashHas$1(key) {
709
+ var data = this.__data__;
710
+ return nativeCreate$1 ? data[key] !== void 0 : hasOwnProperty$5.call(data, key);
711
+ }
712
+ var _hashHas = hashHas$1;
713
+ var nativeCreate = _nativeCreate;
714
+ var HASH_UNDEFINED = "__lodash_hash_undefined__";
715
+ function hashSet$1(key, value) {
716
+ var data = this.__data__;
717
+ this.size += this.has(key) ? 0 : 1;
718
+ data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value;
719
+ return this;
720
+ }
721
+ var _hashSet = hashSet$1;
722
+ var hashClear = _hashClear, hashDelete = _hashDelete, hashGet = _hashGet, hashHas = _hashHas, hashSet = _hashSet;
723
+ function Hash$1(entries) {
724
+ var index2 = -1, length = entries == null ? 0 : entries.length;
725
+ this.clear();
726
+ while (++index2 < length) {
727
+ var entry = entries[index2];
728
+ this.set(entry[0], entry[1]);
729
+ }
730
+ }
731
+ Hash$1.prototype.clear = hashClear;
732
+ Hash$1.prototype["delete"] = hashDelete;
733
+ Hash$1.prototype.get = hashGet;
734
+ Hash$1.prototype.has = hashHas;
735
+ Hash$1.prototype.set = hashSet;
736
+ var _Hash = Hash$1;
737
+ var Hash = _Hash, ListCache$2 = _ListCache, Map$2 = _Map;
738
+ function mapCacheClear$1() {
739
+ this.size = 0;
740
+ this.__data__ = {
741
+ "hash": new Hash(),
742
+ "map": new (Map$2 || ListCache$2)(),
743
+ "string": new Hash()
744
+ };
745
+ }
746
+ var _mapCacheClear = mapCacheClear$1;
747
+ function isKeyable$1(value) {
748
+ var type = typeof value;
749
+ return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
750
+ }
751
+ var _isKeyable = isKeyable$1;
752
+ var isKeyable = _isKeyable;
753
+ function getMapData$4(map, key) {
754
+ var data = map.__data__;
755
+ return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
756
+ }
757
+ var _getMapData = getMapData$4;
758
+ var getMapData$3 = _getMapData;
759
+ function mapCacheDelete$1(key) {
760
+ var result = getMapData$3(this, key)["delete"](key);
761
+ this.size -= result ? 1 : 0;
762
+ return result;
763
+ }
764
+ var _mapCacheDelete = mapCacheDelete$1;
765
+ var getMapData$2 = _getMapData;
766
+ function mapCacheGet$1(key) {
767
+ return getMapData$2(this, key).get(key);
768
+ }
769
+ var _mapCacheGet = mapCacheGet$1;
770
+ var getMapData$1 = _getMapData;
771
+ function mapCacheHas$1(key) {
772
+ return getMapData$1(this, key).has(key);
773
+ }
774
+ var _mapCacheHas = mapCacheHas$1;
775
+ var getMapData = _getMapData;
776
+ function mapCacheSet$1(key, value) {
777
+ var data = getMapData(this, key), size = data.size;
778
+ data.set(key, value);
779
+ this.size += data.size == size ? 0 : 1;
780
+ return this;
781
+ }
782
+ var _mapCacheSet = mapCacheSet$1;
783
+ var mapCacheClear = _mapCacheClear, mapCacheDelete = _mapCacheDelete, mapCacheGet = _mapCacheGet, mapCacheHas = _mapCacheHas, mapCacheSet = _mapCacheSet;
784
+ function MapCache$1(entries) {
785
+ var index2 = -1, length = entries == null ? 0 : entries.length;
786
+ this.clear();
787
+ while (++index2 < length) {
788
+ var entry = entries[index2];
789
+ this.set(entry[0], entry[1]);
790
+ }
791
+ }
792
+ MapCache$1.prototype.clear = mapCacheClear;
793
+ MapCache$1.prototype["delete"] = mapCacheDelete;
794
+ MapCache$1.prototype.get = mapCacheGet;
795
+ MapCache$1.prototype.has = mapCacheHas;
796
+ MapCache$1.prototype.set = mapCacheSet;
797
+ var _MapCache = MapCache$1;
798
+ var ListCache$1 = _ListCache, Map$1 = _Map, MapCache = _MapCache;
799
+ var LARGE_ARRAY_SIZE = 200;
800
+ function stackSet$1(key, value) {
801
+ var data = this.__data__;
802
+ if (data instanceof ListCache$1) {
803
+ var pairs = data.__data__;
804
+ if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE - 1) {
805
+ pairs.push([key, value]);
806
+ this.size = ++data.size;
807
+ return this;
808
+ }
809
+ data = this.__data__ = new MapCache(pairs);
810
+ }
811
+ data.set(key, value);
812
+ this.size = data.size;
813
+ return this;
814
+ }
815
+ var _stackSet = stackSet$1;
816
+ var ListCache = _ListCache, stackClear = _stackClear, stackDelete = _stackDelete, stackGet = _stackGet, stackHas = _stackHas, stackSet = _stackSet;
817
+ function Stack$1(entries) {
818
+ var data = this.__data__ = new ListCache(entries);
819
+ this.size = data.size;
820
+ }
821
+ Stack$1.prototype.clear = stackClear;
822
+ Stack$1.prototype["delete"] = stackDelete;
823
+ Stack$1.prototype.get = stackGet;
824
+ Stack$1.prototype.has = stackHas;
825
+ Stack$1.prototype.set = stackSet;
826
+ var _Stack = Stack$1;
827
+ var getNative = _getNative;
828
+ var defineProperty$2 = function() {
829
+ try {
830
+ var func = getNative(Object, "defineProperty");
831
+ func({}, "", {});
832
+ return func;
833
+ } catch (e2) {
834
+ }
835
+ }();
836
+ var _defineProperty = defineProperty$2;
837
+ var defineProperty$1 = _defineProperty;
838
+ function baseAssignValue$3(object, key, value) {
839
+ if (key == "__proto__" && defineProperty$1) {
840
+ defineProperty$1(object, key, {
841
+ "configurable": true,
842
+ "enumerable": true,
843
+ "value": value,
844
+ "writable": true
845
+ });
846
+ } else {
847
+ object[key] = value;
848
+ }
849
+ }
850
+ var _baseAssignValue = baseAssignValue$3;
851
+ var baseAssignValue$2 = _baseAssignValue, eq$2 = eq_1;
852
+ function assignMergeValue$2(object, key, value) {
853
+ if (value !== void 0 && !eq$2(object[key], value) || value === void 0 && !(key in object)) {
854
+ baseAssignValue$2(object, key, value);
855
+ }
856
+ }
857
+ var _assignMergeValue = assignMergeValue$2;
858
+ function createBaseFor$1(fromRight) {
859
+ return function(object, iteratee, keysFunc) {
860
+ var index2 = -1, iterable = Object(object), props = keysFunc(object), length = props.length;
861
+ while (length--) {
862
+ var key = props[fromRight ? length : ++index2];
863
+ if (iteratee(iterable[key], key, iterable) === false) {
864
+ break;
865
+ }
866
+ }
867
+ return object;
868
+ };
869
+ }
870
+ var _createBaseFor = createBaseFor$1;
871
+ var createBaseFor = _createBaseFor;
872
+ var baseFor$1 = createBaseFor();
873
+ var _baseFor = baseFor$1;
874
+ var _cloneBufferExports = {};
875
+ var _cloneBuffer = {
876
+ get exports() {
877
+ return _cloneBufferExports;
878
+ },
879
+ set exports(v2) {
880
+ _cloneBufferExports = v2;
881
+ }
882
+ };
883
+ (function(module2, exports3) {
884
+ var root2 = _root;
885
+ var freeExports = exports3 && !exports3.nodeType && exports3;
886
+ var freeModule = freeExports && true && module2 && !module2.nodeType && module2;
887
+ var moduleExports = freeModule && freeModule.exports === freeExports;
888
+ var Buffer = moduleExports ? root2.Buffer : void 0, allocUnsafe = Buffer ? Buffer.allocUnsafe : void 0;
889
+ function cloneBuffer2(buffer, isDeep) {
890
+ if (isDeep) {
891
+ return buffer.slice();
892
+ }
893
+ var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
894
+ buffer.copy(result);
895
+ return result;
896
+ }
897
+ module2.exports = cloneBuffer2;
898
+ })(_cloneBuffer, _cloneBufferExports);
899
+ var root$d = _root;
900
+ var Uint8Array$1 = root$d.Uint8Array;
901
+ var _Uint8Array = Uint8Array$1;
902
+ var Uint8Array = _Uint8Array;
903
+ function cloneArrayBuffer$1(arrayBuffer) {
904
+ var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
905
+ new Uint8Array(result).set(new Uint8Array(arrayBuffer));
906
+ return result;
907
+ }
908
+ var _cloneArrayBuffer = cloneArrayBuffer$1;
909
+ var cloneArrayBuffer = _cloneArrayBuffer;
910
+ function cloneTypedArray$1(typedArray, isDeep) {
911
+ var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
912
+ return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
913
+ }
914
+ var _cloneTypedArray = cloneTypedArray$1;
915
+ function copyArray$1(source, array) {
916
+ var index2 = -1, length = source.length;
917
+ array || (array = Array(length));
918
+ while (++index2 < length) {
919
+ array[index2] = source[index2];
920
+ }
921
+ return array;
922
+ }
923
+ var _copyArray = copyArray$1;
924
+ var isObject$4 = isObject_1;
925
+ var objectCreate = Object.create;
926
+ var baseCreate$1 = function() {
927
+ function object() {
928
+ }
929
+ return function(proto) {
930
+ if (!isObject$4(proto)) {
931
+ return {};
932
+ }
933
+ if (objectCreate) {
934
+ return objectCreate(proto);
935
+ }
936
+ object.prototype = proto;
937
+ var result = new object();
938
+ object.prototype = void 0;
939
+ return result;
940
+ };
941
+ }();
942
+ var _baseCreate = baseCreate$1;
943
+ function overArg$1(func, transform) {
944
+ return function(arg) {
945
+ return func(transform(arg));
946
+ };
947
+ }
948
+ var _overArg = overArg$1;
949
+ var overArg = _overArg;
950
+ var getPrototype$2 = overArg(Object.getPrototypeOf, Object);
951
+ var _getPrototype = getPrototype$2;
952
+ var objectProto$5 = Object.prototype;
953
+ function isPrototype$2(value) {
954
+ var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto$5;
955
+ return value === proto;
956
+ }
957
+ var _isPrototype = isPrototype$2;
958
+ var baseCreate = _baseCreate, getPrototype$1 = _getPrototype, isPrototype$1 = _isPrototype;
959
+ function initCloneObject$1(object) {
960
+ return typeof object.constructor == "function" && !isPrototype$1(object) ? baseCreate(getPrototype$1(object)) : {};
961
+ }
962
+ var _initCloneObject = initCloneObject$1;
963
+ function isObjectLike$5(value) {
964
+ return value != null && typeof value == "object";
965
+ }
966
+ var isObjectLike_1 = isObjectLike$5;
967
+ var baseGetTag$2 = _baseGetTag, isObjectLike$4 = isObjectLike_1;
968
+ var argsTag$1 = "[object Arguments]";
969
+ function baseIsArguments$1(value) {
970
+ return isObjectLike$4(value) && baseGetTag$2(value) == argsTag$1;
971
+ }
972
+ var _baseIsArguments = baseIsArguments$1;
973
+ var baseIsArguments = _baseIsArguments, isObjectLike$3 = isObjectLike_1;
974
+ var objectProto$4 = Object.prototype;
975
+ var hasOwnProperty$4 = objectProto$4.hasOwnProperty;
976
+ var propertyIsEnumerable = objectProto$4.propertyIsEnumerable;
977
+ var isArguments$2 = baseIsArguments(function() {
978
+ return arguments;
979
+ }()) ? baseIsArguments : function(value) {
980
+ return isObjectLike$3(value) && hasOwnProperty$4.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
981
+ };
982
+ var isArguments_1 = isArguments$2;
983
+ var isArray$2 = Array.isArray;
984
+ var isArray_1 = isArray$2;
985
+ var MAX_SAFE_INTEGER$1 = 9007199254740991;
986
+ function isLength$2(value) {
987
+ return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1;
988
+ }
989
+ var isLength_1 = isLength$2;
990
+ var isFunction$1 = isFunction_1, isLength$1 = isLength_1;
991
+ function isArrayLike$3(value) {
992
+ return value != null && isLength$1(value.length) && !isFunction$1(value);
993
+ }
994
+ var isArrayLike_1 = isArrayLike$3;
995
+ var isArrayLike$2 = isArrayLike_1, isObjectLike$2 = isObjectLike_1;
996
+ function isArrayLikeObject$1(value) {
997
+ return isObjectLike$2(value) && isArrayLike$2(value);
998
+ }
999
+ var isArrayLikeObject_1 = isArrayLikeObject$1;
1000
+ var isBufferExports = {};
1001
+ var isBuffer$2 = {
1002
+ get exports() {
1003
+ return isBufferExports;
1004
+ },
1005
+ set exports(v2) {
1006
+ isBufferExports = v2;
1007
+ }
1008
+ };
1009
+ function stubFalse() {
1010
+ return false;
1011
+ }
1012
+ var stubFalse_1 = stubFalse;
1013
+ (function(module2, exports3) {
1014
+ var root2 = _root, stubFalse2 = stubFalse_1;
1015
+ var freeExports = exports3 && !exports3.nodeType && exports3;
1016
+ var freeModule = freeExports && true && module2 && !module2.nodeType && module2;
1017
+ var moduleExports = freeModule && freeModule.exports === freeExports;
1018
+ var Buffer = moduleExports ? root2.Buffer : void 0;
1019
+ var nativeIsBuffer = Buffer ? Buffer.isBuffer : void 0;
1020
+ var isBuffer2 = nativeIsBuffer || stubFalse2;
1021
+ module2.exports = isBuffer2;
1022
+ })(isBuffer$2, isBufferExports);
1023
+ var baseGetTag$1 = _baseGetTag, getPrototype = _getPrototype, isObjectLike$1 = isObjectLike_1;
1024
+ var objectTag$1 = "[object Object]";
1025
+ var funcProto = Function.prototype, objectProto$3 = Object.prototype;
1026
+ var funcToString = funcProto.toString;
1027
+ var hasOwnProperty$3 = objectProto$3.hasOwnProperty;
1028
+ var objectCtorString = funcToString.call(Object);
1029
+ function isPlainObject$1(value) {
1030
+ if (!isObjectLike$1(value) || baseGetTag$1(value) != objectTag$1) {
1031
+ return false;
1032
+ }
1033
+ var proto = getPrototype(value);
1034
+ if (proto === null) {
1035
+ return true;
1036
+ }
1037
+ var Ctor = hasOwnProperty$3.call(proto, "constructor") && proto.constructor;
1038
+ return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
1039
+ }
1040
+ var isPlainObject_1 = isPlainObject$1;
1041
+ var baseGetTag = _baseGetTag, isLength = isLength_1, isObjectLike = isObjectLike_1;
1042
+ 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]";
1043
+ 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]";
1044
+ var typedArrayTags = {};
1045
+ typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
1046
+ 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;
1047
+ function baseIsTypedArray$1(value) {
1048
+ return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
1049
+ }
1050
+ var _baseIsTypedArray = baseIsTypedArray$1;
1051
+ function baseUnary$1(func) {
1052
+ return function(value) {
1053
+ return func(value);
1054
+ };
1055
+ }
1056
+ var _baseUnary = baseUnary$1;
1057
+ var _nodeUtilExports = {};
1058
+ var _nodeUtil = {
1059
+ get exports() {
1060
+ return _nodeUtilExports;
1061
+ },
1062
+ set exports(v2) {
1063
+ _nodeUtilExports = v2;
1064
+ }
1065
+ };
1066
+ (function(module2, exports3) {
1067
+ var freeGlobal2 = _freeGlobal;
1068
+ var freeExports = exports3 && !exports3.nodeType && exports3;
1069
+ var freeModule = freeExports && true && module2 && !module2.nodeType && module2;
1070
+ var moduleExports = freeModule && freeModule.exports === freeExports;
1071
+ var freeProcess = moduleExports && freeGlobal2.process;
1072
+ var nodeUtil2 = function() {
1073
+ try {
1074
+ var types = freeModule && freeModule.require && freeModule.require("util").types;
1075
+ if (types) {
1076
+ return types;
1077
+ }
1078
+ return freeProcess && freeProcess.binding && freeProcess.binding("util");
1079
+ } catch (e2) {
1080
+ }
1081
+ }();
1082
+ module2.exports = nodeUtil2;
1083
+ })(_nodeUtil, _nodeUtilExports);
1084
+ var baseIsTypedArray = _baseIsTypedArray, baseUnary = _baseUnary, nodeUtil = _nodeUtilExports;
1085
+ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
1086
+ var isTypedArray$2 = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
1087
+ var isTypedArray_1 = isTypedArray$2;
1088
+ function safeGet$2(object, key) {
1089
+ if (key === "constructor" && typeof object[key] === "function") {
1090
+ return;
1091
+ }
1092
+ if (key == "__proto__") {
1093
+ return;
1094
+ }
1095
+ return object[key];
1096
+ }
1097
+ var _safeGet = safeGet$2;
1098
+ var baseAssignValue$1 = _baseAssignValue, eq$1 = eq_1;
1099
+ var objectProto$2 = Object.prototype;
1100
+ var hasOwnProperty$2 = objectProto$2.hasOwnProperty;
1101
+ function assignValue$1(object, key, value) {
1102
+ var objValue = object[key];
1103
+ if (!(hasOwnProperty$2.call(object, key) && eq$1(objValue, value)) || value === void 0 && !(key in object)) {
1104
+ baseAssignValue$1(object, key, value);
1105
+ }
1106
+ }
1107
+ var _assignValue = assignValue$1;
1108
+ var assignValue = _assignValue, baseAssignValue = _baseAssignValue;
1109
+ function copyObject$1(source, props, object, customizer) {
1110
+ var isNew = !object;
1111
+ object || (object = {});
1112
+ var index2 = -1, length = props.length;
1113
+ while (++index2 < length) {
1114
+ var key = props[index2];
1115
+ var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;
1116
+ if (newValue === void 0) {
1117
+ newValue = source[key];
1118
+ }
1119
+ if (isNew) {
1120
+ baseAssignValue(object, key, newValue);
1121
+ } else {
1122
+ assignValue(object, key, newValue);
1123
+ }
1124
+ }
1125
+ return object;
1126
+ }
1127
+ var _copyObject = copyObject$1;
1128
+ function baseTimes$1(n, iteratee) {
1129
+ var index2 = -1, result = Array(n);
1130
+ while (++index2 < n) {
1131
+ result[index2] = iteratee(index2);
1132
+ }
1133
+ return result;
1134
+ }
1135
+ var _baseTimes = baseTimes$1;
1136
+ var MAX_SAFE_INTEGER = 9007199254740991;
1137
+ var reIsUint = /^(?:0|[1-9]\d*)$/;
1138
+ function isIndex$2(value, length) {
1139
+ var type = typeof value;
1140
+ length = length == null ? MAX_SAFE_INTEGER : length;
1141
+ return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);
1142
+ }
1143
+ var _isIndex = isIndex$2;
1144
+ var baseTimes = _baseTimes, isArguments$1 = isArguments_1, isArray$1 = isArray_1, isBuffer$1 = isBufferExports, isIndex$1 = _isIndex, isTypedArray$1 = isTypedArray_1;
1145
+ var objectProto$1 = Object.prototype;
1146
+ var hasOwnProperty$1 = objectProto$1.hasOwnProperty;
1147
+ function arrayLikeKeys$1(value, inherited) {
1148
+ 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;
1149
+ for (var key in value) {
1150
+ if ((inherited || hasOwnProperty$1.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
1151
+ (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
1152
+ isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
1153
+ isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
1154
+ isIndex$1(key, length)))) {
1155
+ result.push(key);
1156
+ }
1157
+ }
1158
+ return result;
1159
+ }
1160
+ var _arrayLikeKeys = arrayLikeKeys$1;
1161
+ function nativeKeysIn$1(object) {
1162
+ var result = [];
1163
+ if (object != null) {
1164
+ for (var key in Object(object)) {
1165
+ result.push(key);
1166
+ }
1167
+ }
1168
+ return result;
1169
+ }
1170
+ var _nativeKeysIn = nativeKeysIn$1;
1171
+ var isObject$3 = isObject_1, isPrototype = _isPrototype, nativeKeysIn = _nativeKeysIn;
1172
+ var objectProto = Object.prototype;
1173
+ var hasOwnProperty = objectProto.hasOwnProperty;
1174
+ function baseKeysIn$1(object) {
1175
+ if (!isObject$3(object)) {
1176
+ return nativeKeysIn(object);
1177
+ }
1178
+ var isProto = isPrototype(object), result = [];
1179
+ for (var key in object) {
1180
+ if (!(key == "constructor" && (isProto || !hasOwnProperty.call(object, key)))) {
1181
+ result.push(key);
1182
+ }
1183
+ }
1184
+ return result;
1185
+ }
1186
+ var _baseKeysIn = baseKeysIn$1;
1187
+ var arrayLikeKeys = _arrayLikeKeys, baseKeysIn = _baseKeysIn, isArrayLike$1 = isArrayLike_1;
1188
+ function keysIn$2(object) {
1189
+ return isArrayLike$1(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
1190
+ }
1191
+ var keysIn_1 = keysIn$2;
1192
+ var copyObject = _copyObject, keysIn$1 = keysIn_1;
1193
+ function toPlainObject$1(value) {
1194
+ return copyObject(value, keysIn$1(value));
1195
+ }
1196
+ var toPlainObject_1 = toPlainObject$1;
1197
+ 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;
1198
+ function baseMergeDeep$1(object, source, key, srcIndex, mergeFunc, customizer, stack) {
1199
+ var objValue = safeGet$1(object, key), srcValue = safeGet$1(source, key), stacked = stack.get(srcValue);
1200
+ if (stacked) {
1201
+ assignMergeValue$1(object, key, stacked);
1202
+ return;
1203
+ }
1204
+ var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : void 0;
1205
+ var isCommon = newValue === void 0;
1206
+ if (isCommon) {
1207
+ var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue);
1208
+ newValue = srcValue;
1209
+ if (isArr || isBuff || isTyped) {
1210
+ if (isArray(objValue)) {
1211
+ newValue = objValue;
1212
+ } else if (isArrayLikeObject(objValue)) {
1213
+ newValue = copyArray(objValue);
1214
+ } else if (isBuff) {
1215
+ isCommon = false;
1216
+ newValue = cloneBuffer(srcValue, true);
1217
+ } else if (isTyped) {
1218
+ isCommon = false;
1219
+ newValue = cloneTypedArray(srcValue, true);
1220
+ } else {
1221
+ newValue = [];
1222
+ }
1223
+ } else if (isPlainObject(srcValue) || isArguments(srcValue)) {
1224
+ newValue = objValue;
1225
+ if (isArguments(objValue)) {
1226
+ newValue = toPlainObject(objValue);
1227
+ } else if (!isObject$2(objValue) || isFunction(objValue)) {
1228
+ newValue = initCloneObject(srcValue);
1229
+ }
1230
+ } else {
1231
+ isCommon = false;
1232
+ }
1233
+ }
1234
+ if (isCommon) {
1235
+ stack.set(srcValue, newValue);
1236
+ mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
1237
+ stack["delete"](srcValue);
1238
+ }
1239
+ assignMergeValue$1(object, key, newValue);
1240
+ }
1241
+ var _baseMergeDeep = baseMergeDeep$1;
1242
+ var Stack = _Stack, assignMergeValue = _assignMergeValue, baseFor = _baseFor, baseMergeDeep = _baseMergeDeep, isObject$1 = isObject_1, keysIn = keysIn_1, safeGet = _safeGet;
1243
+ function baseMerge$1(object, source, srcIndex, customizer, stack) {
1244
+ if (object === source) {
1245
+ return;
1246
+ }
1247
+ baseFor(source, function(srcValue, key) {
1248
+ stack || (stack = new Stack());
1249
+ if (isObject$1(srcValue)) {
1250
+ baseMergeDeep(object, source, key, srcIndex, baseMerge$1, customizer, stack);
1251
+ } else {
1252
+ var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : void 0;
1253
+ if (newValue === void 0) {
1254
+ newValue = srcValue;
1255
+ }
1256
+ assignMergeValue(object, key, newValue);
1257
+ }
1258
+ }, keysIn);
1259
+ }
1260
+ var _baseMerge = baseMerge$1;
1261
+ function identity$2(value) {
1262
+ return value;
1263
+ }
1264
+ var identity_1 = identity$2;
1265
+ function apply$1(func, thisArg, args) {
1266
+ switch (args.length) {
1267
+ case 0:
1268
+ return func.call(thisArg);
1269
+ case 1:
1270
+ return func.call(thisArg, args[0]);
1271
+ case 2:
1272
+ return func.call(thisArg, args[0], args[1]);
1273
+ case 3:
1274
+ return func.call(thisArg, args[0], args[1], args[2]);
1275
+ }
1276
+ return func.apply(thisArg, args);
1277
+ }
1278
+ var _apply = apply$1;
1279
+ var apply = _apply;
1280
+ var nativeMax = Math.max;
1281
+ function overRest$1(func, start, transform) {
1282
+ start = nativeMax(start === void 0 ? func.length - 1 : start, 0);
1283
+ return function() {
1284
+ var args = arguments, index2 = -1, length = nativeMax(args.length - start, 0), array = Array(length);
1285
+ while (++index2 < length) {
1286
+ array[index2] = args[start + index2];
1287
+ }
1288
+ index2 = -1;
1289
+ var otherArgs = Array(start + 1);
1290
+ while (++index2 < start) {
1291
+ otherArgs[index2] = args[index2];
1292
+ }
1293
+ otherArgs[start] = transform(array);
1294
+ return apply(func, this, otherArgs);
1295
+ };
1296
+ }
1297
+ var _overRest = overRest$1;
1298
+ function constant$1(value) {
1299
+ return function() {
1300
+ return value;
1301
+ };
1302
+ }
1303
+ var constant_1 = constant$1;
1304
+ var constant = constant_1, defineProperty = _defineProperty, identity$1 = identity_1;
1305
+ var baseSetToString$1 = !defineProperty ? identity$1 : function(func, string) {
1306
+ return defineProperty(func, "toString", {
1307
+ "configurable": true,
1308
+ "enumerable": false,
1309
+ "value": constant(string),
1310
+ "writable": true
1311
+ });
1312
+ };
1313
+ var _baseSetToString = baseSetToString$1;
1314
+ var HOT_COUNT = 800, HOT_SPAN = 16;
1315
+ var nativeNow = Date.now;
1316
+ function shortOut$1(func) {
1317
+ var count = 0, lastCalled = 0;
1318
+ return function() {
1319
+ var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);
1320
+ lastCalled = stamp;
1321
+ if (remaining > 0) {
1322
+ if (++count >= HOT_COUNT) {
1323
+ return arguments[0];
1324
+ }
1325
+ } else {
1326
+ count = 0;
1327
+ }
1328
+ return func.apply(void 0, arguments);
1329
+ };
1330
+ }
1331
+ var _shortOut = shortOut$1;
1332
+ var baseSetToString = _baseSetToString, shortOut = _shortOut;
1333
+ var setToString$1 = shortOut(baseSetToString);
1334
+ var _setToString = setToString$1;
1335
+ var identity = identity_1, overRest = _overRest, setToString = _setToString;
1336
+ function baseRest$1(func, start) {
1337
+ return setToString(overRest(func, start, identity), func + "");
1338
+ }
1339
+ var _baseRest = baseRest$1;
1340
+ var eq = eq_1, isArrayLike = isArrayLike_1, isIndex = _isIndex, isObject = isObject_1;
1341
+ function isIterateeCall$1(value, index2, object) {
1342
+ if (!isObject(object)) {
1343
+ return false;
1344
+ }
1345
+ var type = typeof index2;
1346
+ if (type == "number" ? isArrayLike(object) && isIndex(index2, object.length) : type == "string" && index2 in object) {
1347
+ return eq(object[index2], value);
1348
+ }
1349
+ return false;
1350
+ }
1351
+ var _isIterateeCall = isIterateeCall$1;
1352
+ var baseRest = _baseRest, isIterateeCall = _isIterateeCall;
1353
+ function createAssigner$1(assigner) {
1354
+ return baseRest(function(object, sources) {
1355
+ var index2 = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;
1356
+ customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0;
1357
+ if (guard && isIterateeCall(sources[0], sources[1], guard)) {
1358
+ customizer = length < 3 ? void 0 : customizer;
1359
+ length = 1;
1360
+ }
1361
+ object = Object(object);
1362
+ while (++index2 < length) {
1363
+ var source = sources[index2];
1364
+ if (source) {
1365
+ assigner(object, source, index2, customizer);
1366
+ }
1367
+ }
1368
+ return object;
1369
+ });
1370
+ }
1371
+ var _createAssigner = createAssigner$1;
1372
+ var baseMerge = _baseMerge, createAssigner = _createAssigner;
1373
+ createAssigner(function(object, source, srcIndex) {
1374
+ baseMerge(object, source, srcIndex);
1375
+ });
1376
+ const iterator = (input, visitor) => {
1377
+ if (Array.isArray(input)) {
1378
+ return input.map((el, index2) => iterator(visitor(index2, el), visitor));
1379
+ }
1380
+ if (typeof input === "object" && input) {
1381
+ return Object.entries(input).reduce((acc, [key, value]) => {
1382
+ acc[key] = iterator(visitor(key, value), visitor);
1383
+ return acc;
1384
+ }, {});
1385
+ }
1386
+ return input;
1387
+ };
1388
+ const isEmptyValue = (value) => !value && (value === null || value === void 0);
1389
+ const isValue = (value) => !isEmptyValue(value);
1390
+ const pick = (obj, ...props) => {
1391
+ return props.reduce((result, prop) => {
1392
+ result[prop] = obj[prop];
1393
+ return result;
1394
+ }, {});
1395
+ };
1396
+ function omit(obj, ...props) {
1397
+ const result = {
1398
+ ...obj
1399
+ };
1400
+ props.forEach((prop) => {
1401
+ delete result[prop];
1402
+ });
1403
+ return result;
1404
+ }
1405
+ const set = (obj, path, value) => {
1406
+ const pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g);
1407
+ return pathArray.reduce((acc, key, i2) => {
1408
+ if (acc[key] === void 0)
1409
+ acc[key] = {};
1410
+ if (i2 === pathArray.length - 1)
1411
+ acc[key] = value;
1412
+ return acc[key];
1413
+ }, obj);
1414
+ };
1415
+ const hexToRgb = (hex) => {
1416
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
1417
+ return result ? {
1418
+ r: parseInt(result[1], 16),
1419
+ g: parseInt(result[2], 16),
1420
+ b: parseInt(result[3], 16)
1421
+ } : void 0;
1422
+ };
1423
+ const rgbToRgba = (rgb, alpha = 1) => rgb.replace(")", `, ${alpha})`).replace("rgb", "rgba");
1424
+ const devices = ["desktop", "laptop", "tablet", "mobile"];
1425
+ const BREAKPOINTS = {
1426
+ mobile: 320,
1427
+ tablet: 768,
1428
+ laptop: 1024,
1429
+ desktop: 1920
1430
+ };
1431
+ const isValidDeviceState = (state = {}) => typeof state === "object" && isValue(state) && devices.every((device) => device in state);
1432
+ const getDeviceState = (state, device = "desktop") => {
1433
+ if (!state)
1434
+ return {};
1435
+ return iterator(state, (_key, value) => {
1436
+ if (isValidDeviceState(value)) {
1437
+ return value[device];
1438
+ }
1439
+ return value;
1440
+ });
1441
+ };
1442
+ const useDeviceState = (state, device) => getDeviceState(state, device);
1443
+ const useContainerDevice = ({
1444
+ watchRef,
1445
+ breakpoints = BREAKPOINTS
1446
+ }) => {
1447
+ const [device, setDevice] = h("desktop");
1448
+ const checkDevice = (parent) => {
1449
+ var _a;
1450
+ const parentWidth = parent.getBoundingClientRect().width || 0;
1451
+ const findDevice = (_a = Object.entries(breakpoints).find(([, value]) => value >= parentWidth)) == null ? void 0 : _a[0];
1452
+ setDevice(findDevice);
1453
+ };
1454
+ y(() => {
1455
+ const parentElement = watchRef.current.parentElement;
1456
+ if (parentElement) {
1457
+ const resizeObserver = new ResizeObserver(() => checkDevice(parentElement));
1458
+ resizeObserver.observe(parentElement);
1459
+ checkDevice(parentElement);
1460
+ }
1461
+ }, []);
1462
+ return device;
1463
+ };
1464
+ const wrapTo = (value, until) => `${value}${until}`;
1465
+ const toPx = (key) => key.startsWith("px_");
1466
+ const toPercent = (key) => key.startsWith("percent_");
1467
+ const formatRule = (key, value) => {
1468
+ let newKey = key;
1469
+ let newValue = value;
1470
+ if (toPx(newKey)) {
1471
+ newKey = newKey.replace("px_", "");
1472
+ newValue = wrapTo(value, "px");
1473
+ }
1474
+ if (toPercent(newKey)) {
1475
+ newKey = newKey.replace("percent_", "");
1476
+ newValue = wrapTo(value, "%");
1477
+ }
1478
+ return {
1479
+ key: newKey,
1480
+ value: newValue
1481
+ };
1482
+ };
1483
+ const DEFAULT_TO_PX = ["borderWidth", "borderLeftWidth", "borderRightWidth", "borderTopWidth", "borderBottomWidth", "minHeight", "minWidth", "maxWidth", "maxHeight", "fontSize", "height", "width", "letterSpacing", "fontSize", "left", "right", "top", "bottom"];
1484
+ const parseRules = (rules, layer) => {
1485
+ const keys = Object.keys(rules);
1486
+ if (keys.includes("innerHTML") || keys.includes("innerText")) {
1487
+ console.warn(`Warning! InnerHTML and innerText is deprecated. Use "children" property.`, layer);
1488
+ }
1489
+ if (typeof rules !== "object") {
1490
+ return rules;
1491
+ }
1492
+ if ("typography" in rules && "accentTypography" in rules) {
1493
+ const typography = rules.typography;
1494
+ const accentTypography = rules.accentTypography;
1495
+ rules = {
1496
+ ...rules,
1497
+ ...typography,
1498
+ "--accent-color": accentTypography.color,
1499
+ "px_--accent-size": accentTypography.fontSize
1500
+ };
1501
+ }
1502
+ return Object.entries(rules).reduce((acc, [propKey, propValue]) => {
1503
+ if (DEFAULT_TO_PX.includes(propKey)) {
1504
+ propValue = wrapTo(propValue, "px");
1505
+ }
1506
+ const {
1507
+ key,
1508
+ value
1509
+ } = formatRule(propKey, propValue);
1510
+ acc[key] = value;
1511
+ if (key === "innerHTML") {
1512
+ acc.innerHTML = isValue(value) ? `${value}` : "";
1513
+ }
1514
+ if (key === "innerText") {
1515
+ acc.innerText = isValue(value) ? `${value}` : "";
1516
+ }
1517
+ if (key === "children") {
1518
+ acc.children = typeof value === "string" ? isValue(value) ? `${value}` : "" : value;
1519
+ }
1520
+ if (key === "innerHTML" || key === "innerText" || key === "children" && typeof value === "string") {
1521
+ if (propValue.length === 0) {
1522
+ acc.display = "none";
1523
+ }
1524
+ }
1525
+ if (key.includes("borderWidth")) {
1526
+ acc.borderStyle = "solid";
1527
+ }
1528
+ if (key === "corner") {
1529
+ acc.borderRadius = wrapTo(value, "px");
1530
+ }
1531
+ if (key === "backgroundFit") {
1532
+ acc.backgroundSize = value;
1533
+ }
1534
+ if (key === "backgroundImage") {
1535
+ acc.backgroundImage = `url(${value})`;
1536
+ acc.backgroundRepeat = "no-repeat";
1537
+ }
1538
+ if (key === "backgroundColorOpacity" && isValue(acc.backgroundColorOpacity) && isValue(acc.backgroundColor)) {
1539
+ const rgb = hexToRgb(acc.backgroundColor);
1540
+ if (rgb) {
1541
+ acc.backgroundColor = rgbToRgba(`rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`, +acc.backgroundColorOpacity / 100);
1542
+ }
1543
+ }
1544
+ if (key === "isBold") {
1545
+ acc.fontWeight = value ? "bold" : "initial";
1546
+ }
1547
+ if (key === "isItalic") {
1548
+ acc.fontStyle = value ? "italic" : "initial";
1549
+ }
1550
+ if (key === "isThrough") {
1551
+ acc.textDecoration = value ? "line-through" : "initial";
1552
+ }
1553
+ return acc;
1554
+ }, rules);
1555
+ };
1556
+ const isValidRule = (rule) => typeof rule === "object" && !Array.isArray(rule) && "parent" in rule;
1557
+ const useParseRules = (state) => Object.entries(state).reduce((acc, [layer, rule]) => {
1558
+ acc[layer] = isValidRule(rule) ? parseRules({
1559
+ ...state[layer]
1560
+ }, layer) : rule;
1561
+ return acc;
1562
+ }, {});
1563
+ const DisplayText = ({
1564
+ children,
1565
+ ...rest
1566
+ }) => {
1567
+ var _a;
1568
+ const formatValue = (_a = children == null ? void 0 : children.replace("script", "")) == null ? void 0 : _a.replace(/{{(.*?)}}/g, `<span>$1</span>`);
1569
+ return o("div", {
1570
+ ...rest,
1571
+ dangerouslySetInnerHTML: {
1572
+ __html: formatValue
1573
+ }
1574
+ });
1575
+ };
1576
+ const useToggle = () => {
1577
+ const [isOpen, setIsOpen] = h(false);
1578
+ return [isOpen, () => setIsOpen((prev) => !prev)];
1579
+ };
1580
+ const CloseIcon = () => o("svg", {
1581
+ xmlns: "http://www.w3.org/2000/svg",
1582
+ width: "20",
1583
+ height: "20",
1584
+ viewBox: "0 0 24 24",
1585
+ children: o("path", {
1586
+ 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",
1587
+ fill: "currentColor"
1588
+ })
1589
+ });
1590
+ const GiftIcon = () => o("svg", {
1591
+ viewBox: "0 0 16 16",
1592
+ children: o("path", {
1593
+ fill: "currentColor",
1594
+ fillRule: "evenodd",
1595
+ 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"
1596
+ })
1597
+ });
1598
+ const SimpleGift = () => {
1599
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
1600
+ const rootRef = _$1(null);
1601
+ const [legalIsOpen, toggleLegalIsOpen] = useToggle();
1602
+ const {
1603
+ isOpen,
1604
+ onToggle
1605
+ } = useGiftOpen();
1606
+ const state = useCurrentState();
1607
+ const device = useContainerDevice({
1608
+ watchRef: rootRef
1609
+ });
1610
+ const deviceState = useDeviceState(state, device);
1611
+ const rules = useParseRules(deviceState);
1612
+ const hasIcon = (_a = rules == null ? void 0 : rules.icon) == null ? void 0 : _a.hasIcon;
1613
+ const arrowRules = {
1614
+ left: `${+(((_b = deviceState == null ? void 0 : deviceState.container) == null ? void 0 : _b.left) || 0) * -1 + 8}px`,
1615
+ backgroundColor: (_c = rules == null ? void 0 : rules.container) == null ? void 0 : _c.backgroundColor,
1616
+ borderTopWidth: (_d = rules == null ? void 0 : rules.container) == null ? void 0 : _d.borderWidth,
1617
+ borderTopColor: (_e = rules == null ? void 0 : rules.container) == null ? void 0 : _e.borderColor,
1618
+ borderTopStyle: "solid",
1619
+ borderLeftWidth: (_f = rules == null ? void 0 : rules.container) == null ? void 0 : _f.borderWidth,
1620
+ borderLeftColor: (_g = rules == null ? void 0 : rules.container) == null ? void 0 : _g.borderColor,
1621
+ borderLeftStyle: "solid"
1622
+ };
1623
+ const bodyRules = {
1624
+ left: (_h = rules == null ? void 0 : rules.container) == null ? void 0 : _h.left
1625
+ };
1626
+ return o("div", {
1627
+ className: styles$d.root,
1628
+ ref: rootRef,
1629
+ children: [o("div", {
1630
+ className: styles$d.icon,
1631
+ style: rules.icon,
1632
+ onClick: onToggle,
1633
+ children: hasIcon && o("div", {
1634
+ className: styles$d.iconTarget,
1635
+ children: o(GiftIcon, {})
1636
+ })
1637
+ }), o("div", {
1638
+ className: classNames(styles$d.body, {
1639
+ [styles$d.bodyOpen]: isOpen
1640
+ }),
1641
+ style: bodyRules,
1642
+ children: [o("div", {
1643
+ className: styles$d.arrow,
1644
+ style: arrowRules
1645
+ }), o("div", {
1646
+ className: styles$d.close,
1647
+ style: rules.close,
1648
+ onClick: onToggle,
1649
+ children: o(CloseIcon, {})
1650
+ }), o("div", {
1651
+ className: styles$d.container,
1652
+ style: rules.container,
1653
+ children: [o("a", {
1654
+ href: (_i = rules.root) == null ? void 0 : _i.offer,
1655
+ target: "_blank",
1656
+ rel: "nofollow noopener noreferrer",
1657
+ className: "simpleGift-body__offer",
1658
+ "data-layer": "offer",
1659
+ children: [o("div", {
1660
+ className: styles$d.inner,
1661
+ children: [o("div", {
1662
+ className: styles$d.logo,
1663
+ style: rules.logo
1664
+ }), o(DisplayText, {
1665
+ className: styles$d.text,
1666
+ style: rules.text,
1667
+ children: (_j = rules == null ? void 0 : rules.text) == null ? void 0 : _j.children
1668
+ })]
1669
+ }), o("div", {
1670
+ className: styles$d.button,
1671
+ style: rules.button,
1672
+ children: (_k = rules.button) == null ? void 0 : _k.children
1673
+ })]
1674
+ }), o("div", {
1675
+ className: classNames(styles$d.legal, {
1676
+ [styles$d.legalOpen]: legalIsOpen
1677
+ }),
1678
+ style: rules.legal,
1679
+ children: o("span", {
1680
+ className: styles$d.legalText,
1681
+ children: [o("span", {
1682
+ children: (_l = rules == null ? void 0 : rules.legal) == null ? void 0 : _l.children
1683
+ }), o("span", {
1684
+ className: styles$d.legalButton,
1685
+ onClick: toggleLegalIsOpen,
1686
+ children: legalIsOpen ? (_m = rules == null ? void 0 : rules.legal) == null ? void 0 : _m.buttonOpenText : (_n = rules == null ? void 0 : rules.legal) == null ? void 0 : _n.buttonHideText
1687
+ })]
1688
+ })
1689
+ })]
1690
+ })]
1691
+ })]
1692
+ });
1693
+ };
1694
+ const index$6 = render(o(SimpleGift, {}));
1695
+ const root$c = "_root_qnzzi_1";
1696
+ const icon = "_icon_qnzzi_5";
1697
+ const iconTarget = "_iconTarget_qnzzi_17";
1698
+ const body$5 = "_body_qnzzi_22";
1699
+ const bodyOpen = "_bodyOpen_qnzzi_30";
1700
+ const complexGift_in = "_complexGift_in_qnzzi_1";
1701
+ const arrow = "_arrow_qnzzi_43";
1702
+ const container$1 = "_container_qnzzi_53";
1703
+ const promotion$1 = "_promotion_qnzzi_58";
1704
+ const close = "_close_qnzzi_66";
1705
+ const head$1 = "_head_qnzzi_80";
1706
+ const headIcon = "_headIcon_qnzzi_87";
1707
+ const headTitle = "_headTitle_qnzzi_93";
1708
+ const inner = "_inner_qnzzi_100";
1709
+ const fadein = "_fadein_qnzzi_1";
1710
+ const pulse = "_pulse_qnzzi_1";
1711
+ const gradient = "_gradient_qnzzi_1";
1712
+ const wiggle = "_wiggle_qnzzi_1";
1713
+ const styles$c = {
1714
+ root: root$c,
1715
+ icon,
1716
+ iconTarget,
1717
+ body: body$5,
1718
+ bodyOpen,
1719
+ complexGift_in,
1720
+ arrow,
1721
+ container: container$1,
1722
+ promotion: promotion$1,
1723
+ close,
1724
+ head: head$1,
1725
+ headIcon,
1726
+ headTitle,
1727
+ inner,
1728
+ fadein,
1729
+ pulse,
1730
+ gradient,
1731
+ wiggle
1732
+ };
1733
+ const root$b = "_root_rwvas_1";
1734
+ const body$4 = "_body_rwvas_30";
1735
+ const line = "_line_rwvas_37";
1736
+ const text$3 = "_text_rwvas_47";
1737
+ const button$5 = "_button_rwvas_61";
1738
+ const logo$5 = "_logo_rwvas_73";
1739
+ const variant2$1 = "_variant2_rwvas_79";
1740
+ const buttonText = "_buttonText_rwvas_83";
1741
+ const legal$4 = "_legal_rwvas_99";
1742
+ const styles$b = {
1743
+ root: root$b,
1744
+ body: body$4,
1745
+ line,
1746
+ text: text$3,
1747
+ button: button$5,
1748
+ logo: logo$5,
1749
+ variant2: variant2$1,
1750
+ buttonText,
1751
+ legal: legal$4
1752
+ };
1753
+ const BonusCard$1 = () => {
1754
+ var _a, _b, _c, _d, _e;
1755
+ const state = useCurrentState();
1756
+ const rules = useParseRules(state);
1757
+ return o("a", {
1758
+ href: (_a = rules.root) == null ? void 0 : _a.offer,
1759
+ target: "_blank",
1760
+ rel: "nofollow noopener noreferrer",
1761
+ className: classNames(styles$b.root, {
1762
+ [styles$b.variant2]: ((_b = rules.root) == null ? void 0 : _b.variant) === "variant2"
1763
+ }),
1764
+ style: rules.root,
1765
+ children: [o("div", {
1766
+ className: styles$b.body,
1767
+ children: [o("div", {
1768
+ className: styles$b.logo,
1769
+ style: rules.logo
1770
+ }), o("div", {
1771
+ className: styles$b.line,
1772
+ style: rules.line
1773
+ }), o("div", {
1774
+ className: styles$b.text,
1775
+ style: rules.text,
1776
+ children: o(DisplayText, {
1777
+ children: (_c = rules.text) == null ? void 0 : _c.children
1778
+ })
1779
+ }), o("div", {
1780
+ className: styles$b.button,
1781
+ style: rules.button,
1782
+ children: [o("div", {
1783
+ className: styles$b.logo,
1784
+ style: rules.logo
1785
+ }), o("div", {
1786
+ className: styles$b.buttonText,
1787
+ children: (_d = rules.button) == null ? void 0 : _d.children
1788
+ })]
1789
+ })]
1790
+ }), o("div", {
1791
+ className: styles$b.legal,
1792
+ style: rules.legal,
1793
+ children: (_e = rules.legal) == null ? void 0 : _e.children
1794
+ })]
1795
+ });
1796
+ };
1797
+ const ComplexGift = () => {
1798
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
1799
+ const rootRef = _$1(null);
1800
+ const {
1801
+ isOpen,
1802
+ onToggle
1803
+ } = useGiftOpen();
1804
+ const state = useCurrentState();
1805
+ const device = useContainerDevice({
1806
+ watchRef: rootRef
1807
+ });
1808
+ const deviceState = useDeviceState(state, device);
1809
+ const rules = useParseRules(deviceState);
1810
+ const hasIcon = (_a = rules == null ? void 0 : rules.icon) == null ? void 0 : _a.hasIcon;
1811
+ const arrowRules = {
1812
+ left: `${+(((_b = deviceState == null ? void 0 : deviceState.container) == null ? void 0 : _b.left) || 0) * -1 + 8}px`,
1813
+ backgroundColor: (_c = rules == null ? void 0 : rules.container) == null ? void 0 : _c.backgroundColor,
1814
+ borderTopWidth: (_d = rules == null ? void 0 : rules.container) == null ? void 0 : _d.borderWidth,
1815
+ borderTopColor: (_e = rules == null ? void 0 : rules.container) == null ? void 0 : _e.borderColor,
1816
+ borderTopStyle: "solid",
1817
+ borderLeftWidth: (_f = rules == null ? void 0 : rules.container) == null ? void 0 : _f.borderWidth,
1818
+ borderLeftColor: (_g = rules == null ? void 0 : rules.container) == null ? void 0 : _g.borderColor,
1819
+ borderLeftStyle: "solid"
1820
+ };
1821
+ const bodyRules = {
1822
+ left: (_h = rules == null ? void 0 : rules.container) == null ? void 0 : _h.left
1823
+ };
1824
+ return o("div", {
1825
+ ref: rootRef,
1826
+ className: styles$c.root,
1827
+ children: [o("div", {
1828
+ className: styles$c.icon,
1829
+ style: rules.icon,
1830
+ onClick: onToggle,
1831
+ children: hasIcon && o("div", {
1832
+ className: styles$c.iconTarget,
1833
+ children: o(GiftIcon, {})
1834
+ })
1835
+ }), o("div", {
1836
+ className: classNames(styles$c.body, {
1837
+ [styles$c.bodyOpen]: isOpen
1838
+ }),
1839
+ style: bodyRules,
1840
+ children: [o("div", {
1841
+ className: styles$c.arrow,
1842
+ style: arrowRules
1843
+ }), o("div", {
1844
+ className: styles$c.container,
1845
+ style: rules.container,
1846
+ children: [o("div", {
1847
+ className: styles$c.close,
1848
+ style: rules.close,
1849
+ onClick: onToggle,
1850
+ children: o(CloseIcon, {})
1851
+ }), o("div", {
1852
+ className: styles$c.promotion,
1853
+ style: rules.promotion,
1854
+ children: (_i = rules.promotion) == null ? void 0 : _i.children
1855
+ }), o("div", {
1856
+ className: styles$c.head,
1857
+ children: [o("div", {
1858
+ className: styles$c.headIcon,
1859
+ children: o(GiftIcon, {})
1860
+ }), o("div", {
1861
+ className: styles$c.headTitle,
1862
+ style: rules.title,
1863
+ children: (_j = rules.title) == null ? void 0 : _j.children
1864
+ })]
1865
+ }), o("div", {
1866
+ className: styles$c.inner,
1867
+ children: (rules.children || []).map((child) => o(StateContext, {
1868
+ value: child,
1869
+ children: o(BonusCard$1, {})
1870
+ }))
1871
+ })]
1872
+ })]
1873
+ })]
1874
+ });
1875
+ };
1876
+ const index$5 = render(o(ComplexGift, {}));
1877
+ const root$a = "_root_15ve9_1";
1878
+ const laptop$3 = "_laptop_15ve9_10";
1879
+ const tablet$2 = "_tablet_15ve9_10";
1880
+ const desktop$7 = "_desktop_15ve9_15";
1881
+ const body$3 = "_body_15ve9_20";
1882
+ const logo$4 = "_logo_15ve9_32";
1883
+ const text$2 = "_text_15ve9_38";
1884
+ const button$4 = "_button_15ve9_42";
1885
+ const legal$3 = "_legal_15ve9_58";
1886
+ const styles$a = {
1887
+ root: root$a,
1888
+ laptop: laptop$3,
1889
+ tablet: tablet$2,
1890
+ desktop: desktop$7,
1891
+ body: body$3,
1892
+ logo: logo$4,
1893
+ text: text$2,
1894
+ button: button$4,
1895
+ legal: legal$3
1896
+ };
1897
+ const switchTextAlignToFlex = (textAlign) => textAlign ? {
1898
+ left: "flex-start",
1899
+ center: "center",
1900
+ right: "flex-end"
1901
+ }[textAlign] : textAlign;
1902
+ const root$9 = "_root_otuq1_1";
1903
+ const styles$9 = {
1904
+ root: root$9
1905
+ };
1906
+ const Line = () => {
1907
+ var _a;
1908
+ const state = useCurrentState();
1909
+ const rules = useParseRules(state);
1910
+ return o("div", {
1911
+ className: styles$9.root,
1912
+ style: rules.root,
1913
+ children: o(DisplayText, {
1914
+ children: (_a = rules == null ? void 0 : rules.root) == null ? void 0 : _a.children
1915
+ })
1916
+ });
1917
+ };
1918
+ const SimplePopup$2 = () => {
1919
+ var _a, _b, _c, _d, _e, _f;
1920
+ const rootRef = _$1(null);
1921
+ const device = useContainerDevice({
1922
+ watchRef: rootRef
1923
+ });
1924
+ const state = useCurrentState();
1925
+ const deviceState = useDeviceState(state, device);
1926
+ set(deviceState, "button.percent_width", (_a = deviceState == null ? void 0 : deviceState.button) == null ? void 0 : _a.width);
1927
+ set(deviceState, "legal.percent_width", (_b = deviceState == null ? void 0 : deviceState.legal) == null ? void 0 : _b.width);
1928
+ const rules = useParseRules(deviceState);
1929
+ const bodyRules = {
1930
+ alignItems: switchTextAlignToFlex((_c = rules.root) == null ? void 0 : _c.align)
1931
+ };
1932
+ const buttonRules = {
1933
+ ...rules == null ? void 0 : rules.button,
1934
+ justifyContent: switchTextAlignToFlex((_d = rules.root) == null ? void 0 : _d.textAlign)
1935
+ };
1936
+ const legalRules = {
1937
+ ...rules == null ? void 0 : rules.legal,
1938
+ justifyContent: switchTextAlignToFlex((_e = rules.root) == null ? void 0 : _e.textAlign)
1939
+ };
1940
+ return o("a", {
1941
+ ref: rootRef,
1942
+ href: (_f = rules.root) == null ? void 0 : _f.offer,
1943
+ target: "_blank",
1944
+ rel: "nofollow noopener noreferrer",
1945
+ className: classNames(styles$a.root, {
1946
+ [styles$a.desktop]: device === "desktop",
1947
+ [styles$a.tablet]: device === "tablet",
1948
+ [styles$a.laptop]: device === "laptop"
1949
+ }),
1950
+ style: rules.root,
1951
+ children: o("div", {
1952
+ className: styles$a.body,
1953
+ style: bodyRules,
1954
+ children: [o("div", {
1955
+ className: styles$a.logo,
1956
+ style: rules.logo
1957
+ }), o("div", {
1958
+ className: styles$a.text,
1959
+ children: ((rules == null ? void 0 : rules.content) || []).map((el) => o(StateContext, {
1960
+ value: el,
1961
+ children: o(Line, {})
1962
+ }))
1963
+ }), o("div", {
1964
+ className: styles$a.button,
1965
+ style: buttonRules,
1966
+ children: buttonRules == null ? void 0 : buttonRules.children
1967
+ }), o("div", {
1968
+ className: styles$a.legal,
1969
+ style: legalRules,
1970
+ children: legalRules == null ? void 0 : legalRules.children
1971
+ })]
1972
+ })
1973
+ });
1974
+ };
1975
+ const index$4 = render(o(SimplePopup$2, {}));
1976
+ const root$8 = "_root_1q3m6_1";
1977
+ const desktop$6 = "_desktop_1q3m6_9";
1978
+ const content$1 = "_content_1q3m6_13";
1979
+ const title$2 = "_title_1q3m6_24";
1980
+ const wrapper$1 = "_wrapper_1q3m6_39";
1981
+ const styles$8 = {
1982
+ root: root$8,
1983
+ desktop: desktop$6,
1984
+ content: content$1,
1985
+ title: title$2,
1986
+ wrapper: wrapper$1
1987
+ };
1988
+ const root$7 = "_root_6a4bh_1";
1989
+ const desktop$5 = "_desktop_6a4bh_10";
1990
+ const header = "_header_6a4bh_14";
1991
+ const logo$3 = "_logo_6a4bh_25";
1992
+ const container = "_container_6a4bh_31";
1993
+ const body$2 = "_body_6a4bh_42";
1994
+ const text$1 = "_text_6a4bh_59";
1995
+ const button$3 = "_button_6a4bh_80";
1996
+ const legal$2 = "_legal_6a4bh_100";
1997
+ const styles$7 = {
1998
+ root: root$7,
1999
+ desktop: desktop$5,
2000
+ header,
2001
+ logo: logo$3,
2002
+ container,
2003
+ body: body$2,
2004
+ text: text$1,
2005
+ button: button$3,
2006
+ legal: legal$2
2007
+ };
2008
+ const Bonus$1 = () => {
2009
+ var _a, _b, _c, _d;
2010
+ const state = useCurrentState();
2011
+ const rules = useParseRules(state);
2012
+ const device = (state == null ? void 0 : state.device) || "desktop";
2013
+ return o("a", {
2014
+ href: (_a = rules.root) == null ? void 0 : _a.offer,
2015
+ target: "_blank",
2016
+ rel: "nofollow noopener noreferrer",
2017
+ className: classNames(styles$7.root, {
2018
+ [styles$7.desktop]: device === "desktop"
2019
+ }),
2020
+ style: rules.root,
2021
+ children: [o("div", {
2022
+ className: styles$7.header,
2023
+ style: rules.header,
2024
+ children: o("div", {
2025
+ className: styles$7.logo,
2026
+ style: rules.logo
2027
+ })
2028
+ }), o("div", {
2029
+ className: styles$7.container,
2030
+ children: [o("div", {
2031
+ className: styles$7.body,
2032
+ children: [o("div", {
2033
+ className: styles$7.logo
2034
+ }), o(DisplayText, {
2035
+ className: styles$7.text,
2036
+ style: rules.text,
2037
+ children: (_b = rules.text) == null ? void 0 : _b.children
2038
+ })]
2039
+ }), o("div", {
2040
+ children: [o("div", {
2041
+ className: styles$7.button,
2042
+ style: rules.button,
2043
+ children: (_c = rules.button) == null ? void 0 : _c.children
2044
+ }), o("div", {
2045
+ className: styles$7.legal,
2046
+ style: rules.legal,
2047
+ children: (_d = rules.legal) == null ? void 0 : _d.children
2048
+ })]
2049
+ })]
2050
+ })]
2051
+ });
2052
+ };
2053
+ const SimplePopup$1 = () => {
2054
+ var _a;
2055
+ const rootRef = _$1(null);
2056
+ const device = useContainerDevice({
2057
+ watchRef: rootRef
2058
+ });
2059
+ const state = useCurrentState();
2060
+ const deviceState = useDeviceState(state, device);
2061
+ const rules = useParseRules(deviceState);
2062
+ return o("div", {
2063
+ ref: rootRef,
2064
+ className: classNames(styles$8.root, {
2065
+ [styles$8.desktop]: device === "desktop"
2066
+ }),
2067
+ style: rules.root,
2068
+ children: o("div", {
2069
+ className: styles$8.content,
2070
+ children: [o("div", {
2071
+ className: styles$8.title,
2072
+ style: rules.title,
2073
+ children: (_a = rules.title) == null ? void 0 : _a.children
2074
+ }), o("div", {
2075
+ className: styles$8.wrapper,
2076
+ children: (rules.children || []).map((child) => o(StateContext, {
2077
+ value: {
2078
+ ...child,
2079
+ device
2080
+ },
2081
+ children: o(Bonus$1, {})
2082
+ }))
2083
+ })]
2084
+ })
2085
+ });
2086
+ };
2087
+ const index$3 = render(o(SimplePopup$1, {}));
2088
+ const root$6 = "_root_q9549_1";
2089
+ const laptop$2 = "_laptop_q9549_11";
2090
+ const tablet$1 = "_tablet_q9549_12";
2091
+ const desktop$4 = "_desktop_q9549_17";
2092
+ const body$1 = "_body_q9549_22";
2093
+ const head = "_head_q9549_34";
2094
+ const title$1 = "_title_q9549_44";
2095
+ const logo$2 = "_logo_q9549_57";
2096
+ const wrapper = "_wrapper_q9549_63";
2097
+ const text = "_text_q9549_70";
2098
+ const button$2 = "_button_q9549_83";
2099
+ const buttonHead = "_buttonHead_q9549_98";
2100
+ const buttonTarget = "_buttonTarget_q9549_117";
2101
+ const legal$1 = "_legal_q9549_133";
2102
+ const styles$6 = {
2103
+ root: root$6,
2104
+ laptop: laptop$2,
2105
+ tablet: tablet$1,
2106
+ desktop: desktop$4,
2107
+ body: body$1,
2108
+ head,
2109
+ title: title$1,
2110
+ logo: logo$2,
2111
+ wrapper,
2112
+ text,
2113
+ button: button$2,
2114
+ buttonHead,
2115
+ buttonTarget,
2116
+ legal: legal$1
2117
+ };
2118
+ const root$5 = "_root_1ew5t_1";
2119
+ const left$1 = "_left_1ew5t_8";
2120
+ const desktop$3 = "_desktop_1ew5t_15";
2121
+ const teams = "_teams_1ew5t_19";
2122
+ const logo$1 = "_logo_1ew5t_25";
2123
+ const league = "_league_1ew5t_31";
2124
+ const name = "_name_1ew5t_36";
2125
+ const right$1 = "_right_1ew5t_42";
2126
+ const odd$1 = "_odd_1ew5t_53";
2127
+ const oddLabel$1 = "_oddLabel_1ew5t_64";
2128
+ const oddValue = "_oddValue_1ew5t_73";
2129
+ const team$1 = "_team_1ew5t_19";
2130
+ const teamLogo$1 = "_teamLogo_1ew5t_96";
2131
+ const teamName$1 = "_teamName_1ew5t_102";
2132
+ const styles$5 = {
2133
+ root: root$5,
2134
+ left: left$1,
2135
+ desktop: desktop$3,
2136
+ teams,
2137
+ logo: logo$1,
2138
+ league,
2139
+ name,
2140
+ right: right$1,
2141
+ odd: odd$1,
2142
+ oddLabel: oddLabel$1,
2143
+ oddValue,
2144
+ team: team$1,
2145
+ teamLogo: teamLogo$1,
2146
+ teamName: teamName$1
2147
+ };
2148
+ const Match = () => {
2149
+ var _a, _b, _c, _d;
2150
+ const state = useCurrentState();
2151
+ const rules = useParseRules(state);
2152
+ const device = (state == null ? void 0 : state.device) || "desktop";
2153
+ return o("div", {
2154
+ className: classNames(styles$5.root, {
2155
+ [styles$5.desktop]: device === "desktop"
2156
+ }),
2157
+ children: [o("div", {
2158
+ className: styles$5.left,
2159
+ children: [o("div", {
2160
+ className: styles$5.teams,
2161
+ children: [o("div", {
2162
+ className: styles$5.logo
2163
+ }), o("div", {
2164
+ className: styles$5.logo
2165
+ })]
2166
+ }), o("div", {
2167
+ className: styles$5.body,
2168
+ children: [o("div", {
2169
+ className: styles$5.league,
2170
+ style: rules.league,
2171
+ children: (_a = rules.league) == null ? void 0 : _a.children
2172
+ }), o("div", {
2173
+ className: styles$5.name,
2174
+ style: rules.teams,
2175
+ children: (_b = rules.teams) == null ? void 0 : _b.children
2176
+ })]
2177
+ })]
2178
+ }), o("div", {
2179
+ className: styles$5.right,
2180
+ children: [o("div", {
2181
+ className: styles$5.team,
2182
+ children: [o("div", {
2183
+ className: styles$5.teamLogo
2184
+ }), o("div", {
2185
+ className: styles$5.teamName,
2186
+ style: rules.teams,
2187
+ children: "НЬЮКАСЛ"
2188
+ })]
2189
+ }), o("div", {
2190
+ className: styles$5.odd,
2191
+ children: [o("div", {
2192
+ className: styles$5.oddLabel,
2193
+ style: rules.oddLabel,
2194
+ children: (_c = rules.oddLabel) == null ? void 0 : _c.children
2195
+ }), o("div", {
2196
+ className: styles$5.oddValue,
2197
+ style: rules.oddValue,
2198
+ children: (_d = rules.oddValue) == null ? void 0 : _d.children
2199
+ })]
2200
+ }), o("div", {
2201
+ className: styles$5.team,
2202
+ children: [o("div", {
2203
+ className: styles$5.teamLogo
2204
+ }), o("div", {
2205
+ className: styles$5.teamName,
2206
+ style: rules.teams,
2207
+ children: "ЛИДС"
2208
+ })]
2209
+ })]
2210
+ })]
2211
+ });
2212
+ };
2213
+ const SimplePopup = () => {
2214
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
2215
+ const rootRef = _$1(null);
2216
+ const device = useContainerDevice({
2217
+ watchRef: rootRef
2218
+ });
2219
+ const state = useCurrentState();
2220
+ const deviceState = useDeviceState(state, device);
2221
+ set(deviceState, "buttonWrapper.percent_width", (_a = deviceState == null ? void 0 : deviceState.buttonWrapper) == null ? void 0 : _a.width);
2222
+ set(deviceState, "legal.percent_width", (_b = deviceState == null ? void 0 : deviceState.legal) == null ? void 0 : _b.width);
2223
+ const rules = useParseRules(deviceState);
2224
+ const bodyRules = {
2225
+ ...rules.root,
2226
+ alignItems: switchTextAlignToFlex((_c = rules.root) == null ? void 0 : _c.align)
2227
+ };
2228
+ const contentRules = {
2229
+ ...rules.content,
2230
+ alignItems: switchTextAlignToFlex((_d = rules.root) == null ? void 0 : _d.align)
2231
+ };
2232
+ const textRules = {
2233
+ ...rules.text,
2234
+ textAlign: (_e = rules.root) == null ? void 0 : _e.align
2235
+ };
2236
+ const buttonRules = {
2237
+ ...rules == null ? void 0 : rules.button,
2238
+ justifyContent: switchTextAlignToFlex((_f = rules.root) == null ? void 0 : _f.textAlign)
2239
+ };
2240
+ const legalRules = {
2241
+ ...rules == null ? void 0 : rules.legal,
2242
+ justifyContent: switchTextAlignToFlex((_g = rules.root) == null ? void 0 : _g.textAlign)
2243
+ };
2244
+ return o("a", {
2245
+ ref: rootRef,
2246
+ href: (_h = rules.root) == null ? void 0 : _h.offer,
2247
+ target: "_blank",
2248
+ rel: "nofollow noopener noreferrer",
2249
+ className: classNames(styles$6.root, {
2250
+ [styles$6.desktop]: device === "desktop",
2251
+ [styles$6.laptop]: device === "laptop",
2252
+ [styles$6.tablet]: device === "tablet"
2253
+ }),
2254
+ children: o("div", {
2255
+ className: styles$6.body,
2256
+ style: bodyRules,
2257
+ children: [o("div", {
2258
+ className: styles$6.head,
2259
+ children: [o("div", {
2260
+ className: styles$6.title,
2261
+ style: rules.title,
2262
+ children: (_i = rules.title) == null ? void 0 : _i.children
2263
+ }), o("div", {
2264
+ className: styles$6.logo,
2265
+ style: rules.logo
2266
+ })]
2267
+ }), o("div", {
2268
+ className: styles$6.wrapper,
2269
+ style: contentRules,
2270
+ children: (rules.children || []).map((child) => o(StateContext, {
2271
+ value: {
2272
+ ...child,
2273
+ device
2274
+ },
2275
+ children: o(Match, {})
2276
+ }))
2277
+ }), o(DisplayText, {
2278
+ className: styles$6.text,
2279
+ style: textRules,
2280
+ children: (_j = rules.text) == null ? void 0 : _j.children
2281
+ }), o("div", {
2282
+ className: styles$6.button,
2283
+ style: rules.buttonWrapper,
2284
+ children: [o("div", {
2285
+ className: styles$6.buttonHead,
2286
+ style: rules.buttonHead,
2287
+ children: (_k = rules.buttonHead) == null ? void 0 : _k.children
2288
+ }), o("div", {
2289
+ className: styles$6.buttonTarget,
2290
+ style: buttonRules,
2291
+ children: (_l = rules.button) == null ? void 0 : _l.children
2292
+ })]
2293
+ }), o("div", {
2294
+ className: styles$6.legal,
2295
+ style: legalRules,
2296
+ children: (_m = rules.legal) == null ? void 0 : _m.children
2297
+ })]
2298
+ })
2299
+ });
2300
+ };
2301
+ const index$2 = render(o(SimplePopup, {}));
2302
+ const root$4 = "_root_1slvw_1";
2303
+ const background$1 = "_background_1slvw_20";
2304
+ const body = "_body_1slvw_29";
2305
+ const bookmaker = "_bookmaker_1slvw_39";
2306
+ const button$1 = "_button_1slvw_46";
2307
+ const rowFirst = "_rowFirst_1slvw_60";
2308
+ const rowSecond = "_rowSecond_1slvw_66";
2309
+ const legal = "_legal_1slvw_72";
2310
+ const legalText = "_legalText_1slvw_88";
2311
+ const legalOpen = "_legalOpen_1slvw_98";
2312
+ const legalButton = "_legalButton_1slvw_103";
2313
+ const styles$4 = {
2314
+ root: root$4,
2315
+ background: background$1,
2316
+ body,
2317
+ bookmaker,
2318
+ button: button$1,
2319
+ rowFirst,
2320
+ rowSecond,
2321
+ legal,
2322
+ legalText,
2323
+ legalOpen,
2324
+ legalButton
2325
+ };
2326
+ const Bonus = () => {
2327
+ var _a, _b, _c, _d, _e, _f, _g;
2328
+ const state = useCurrentState();
2329
+ const rules = useParseRules(state);
2330
+ const [isOpen, toggleIsOpen] = useToggle();
2331
+ return o("div", {
2332
+ className: styles$4.root,
2333
+ style: rules.root,
2334
+ children: [o("div", {
2335
+ className: styles$4.background,
2336
+ style: rules.background
2337
+ }), o("a", {
2338
+ href: (_a = rules.root) == null ? void 0 : _a.offer,
2339
+ target: "_blank",
2340
+ rel: "nofollow noopener noreferrer",
2341
+ className: styles$4.body,
2342
+ children: [o("div", {
2343
+ children: [o("div", {
2344
+ className: styles$4.rowFirst,
2345
+ style: rules.rowFirst,
2346
+ children: (_b = rules.rowFirst) == null ? void 0 : _b.children
2347
+ }), o("div", {
2348
+ className: styles$4.rowSecond,
2349
+ style: rules.rowSecond,
2350
+ children: (_c = rules.rowSecond) == null ? void 0 : _c.children
2351
+ }), o("div", {
2352
+ className: styles$4.bookmaker,
2353
+ children: "winline"
2354
+ })]
2355
+ }), o("div", {
2356
+ className: styles$4.button,
2357
+ style: rules.button,
2358
+ children: (_d = rules.button) == null ? void 0 : _d.children
2359
+ })]
2360
+ }), o("div", {
2361
+ className: classNames(styles$4.legal, {
2362
+ [styles$4.legalOpen]: isOpen
2363
+ }),
2364
+ style: rules.legalInfo,
2365
+ children: o("span", {
2366
+ className: styles$4.legalText,
2367
+ children: [o("span", {
2368
+ children: (_e = rules.legalInfo) == null ? void 0 : _e.children
2369
+ }), o("span", {
2370
+ className: styles$4.legalButton,
2371
+ style: rules.legalInfoButton,
2372
+ onClick: toggleIsOpen,
2373
+ children: isOpen ? (_f = rules.legalInfoButton) == null ? void 0 : _f.openText : (_g = rules.legalInfoButton) == null ? void 0 : _g.closeText
2374
+ })]
2375
+ })
2376
+ })]
2377
+ });
2378
+ };
2379
+ const BonusCard = () => {
2380
+ const rootRef = _$1(null);
2381
+ const state = useCurrentState();
2382
+ const device = "desktop";
2383
+ const deviceState = useDeviceState(state, device);
2384
+ const rules = useParseRules(deviceState);
2385
+ return o("div", {
2386
+ ref: rootRef,
2387
+ children: ((rules == null ? void 0 : rules.children) || []).map((child) => o(StateContext, {
2388
+ value: child,
2389
+ children: o(Bonus, {})
2390
+ }))
2391
+ });
2392
+ };
2393
+ const index$1 = render(o(BonusCard, {}));
2394
+ const root$3 = "_root_1i5vb_1";
2395
+ const desktop$2 = "_desktop_1i5vb_13";
2396
+ const laptop$1 = "_laptop_1i5vb_14";
2397
+ const promotion = "_promotion_1i5vb_18";
2398
+ const background = "_background_1i5vb_29";
2399
+ const content = "_content_1i5vb_38";
2400
+ const variant2 = "_variant2_1i5vb_51";
2401
+ const logo = "_logo_1i5vb_55";
2402
+ const left = "_left_1i5vb_67";
2403
+ const center = "_center_1i5vb_81";
2404
+ const slide = "_slide_1i5vb_87";
2405
+ const slide_animated_default = "_slide_animated_default_1i5vb_101";
2406
+ const right = "_right_1i5vb_111";
2407
+ const buttonWrapper = "_buttonWrapper_1i5vb_126";
2408
+ const button = "_button_1i5vb_126";
2409
+ const button_animated = "_button_animated_1i5vb_157";
2410
+ const increase = "_increase_1i5vb_1";
2411
+ const styles$3 = {
2412
+ root: root$3,
2413
+ desktop: desktop$2,
2414
+ laptop: laptop$1,
2415
+ promotion,
2416
+ background,
2417
+ content,
2418
+ variant2,
2419
+ logo,
2420
+ left,
2421
+ center,
2422
+ slide,
2423
+ slide_animated_default,
2424
+ "fade-in-out": "_fade-in-out_1i5vb_1",
2425
+ "slide_animated_bottom-top": "_slide_animated_bottom-top_1i5vb_104",
2426
+ "fade-in-bottom-out-top": "_fade-in-bottom-out-top_1i5vb_1",
2427
+ "slide_animated_top-bottom": "_slide_animated_top-bottom_1i5vb_107",
2428
+ right,
2429
+ buttonWrapper,
2430
+ button,
2431
+ button_animated,
2432
+ increase,
2433
+ "fade-in-top-out-bottom": "_fade-in-top-out-bottom_1i5vb_1"
2434
+ };
2435
+ const root$2 = "_root_1o6so_1";
2436
+ const desktop$1 = "_desktop_1o6so_17";
2437
+ const styles$2 = {
2438
+ root: root$2,
2439
+ desktop: desktop$1
2440
+ };
2441
+ const Text = () => {
2442
+ var _a;
2443
+ const state = useCurrentState();
2444
+ const rules = useParseRules(state);
2445
+ return o("div", {
2446
+ className: classNames(styles$2.root, {
2447
+ [styles$2.desktop]: (state == null ? void 0 : state.device) === "desktop"
2448
+ }),
2449
+ style: omit(rules.root, ...backgroundOptions),
2450
+ children: (_a = rules.root) == null ? void 0 : _a.children
2451
+ });
2452
+ };
2453
+ const root$1 = "_root_vjs41_1";
2454
+ const odd = "_odd_vjs41_7";
2455
+ const oddReverse = "_oddReverse_vjs41_14";
2456
+ const oddLabel = "_oddLabel_vjs41_18";
2457
+ const oddLogo = "_oddLogo_vjs41_30";
2458
+ const coef = "_coef_vjs41_36";
2459
+ const coefHead = "_coefHead_vjs41_42";
2460
+ const coefValue = "_coefValue_vjs41_47";
2461
+ const styles$1 = {
2462
+ root: root$1,
2463
+ odd,
2464
+ oddReverse,
2465
+ oddLabel,
2466
+ oddLogo,
2467
+ coef,
2468
+ coefHead,
2469
+ coefValue
2470
+ };
2471
+ const Matches = () => {
2472
+ const state = useCurrentState();
2473
+ const rules = useParseRules(state);
2474
+ const rootRules = omit(rules.root, ...backgroundOptions);
2475
+ return o("div", {
2476
+ className: styles$1.root,
2477
+ children: [o("div", {
2478
+ className: styles$1.odd,
2479
+ children: [o("div", {
2480
+ className: styles$1.oddLogo,
2481
+ style: rootRules
2482
+ }), o("div", {
2483
+ className: styles$1.oddLabel,
2484
+ style: rootRules,
2485
+ children: "3"
2486
+ })]
2487
+ }), o("div", {
2488
+ className: styles$1.coef,
2489
+ children: [o("div", {
2490
+ className: styles$1.coefHead,
2491
+ style: rules.coef,
2492
+ children: "X"
2493
+ }), o("div", {
2494
+ className: styles$1.coefValue,
2495
+ style: rootRules,
2496
+ children: "3.92"
2497
+ })]
2498
+ }), o("div", {
2499
+ className: classNames(styles$1.odd, styles$1.oddReverse),
2500
+ children: [o("div", {
2501
+ className: styles$1.oddLogo,
2502
+ style: rootRules
2503
+ }), o("div", {
2504
+ className: styles$1.oddLabel,
2505
+ style: rootRules,
2506
+ children: "2.8"
2507
+ })]
2508
+ })]
2509
+ });
2510
+ };
2511
+ const root = "_root_1va5h_1";
2512
+ const title = "_title_1va5h_8";
2513
+ const titleLabel = "_titleLabel_1va5h_12";
2514
+ const tablet = "_tablet_1va5h_16";
2515
+ const desktop = "_desktop_1va5h_19";
2516
+ const laptop = "_laptop_1va5h_19";
2517
+ const titleValue = "_titleValue_1va5h_23";
2518
+ const team = "_team_1va5h_34";
2519
+ const teamLogo = "_teamLogo_1va5h_44";
2520
+ const teamName = "_teamName_1va5h_72";
2521
+ const teamValue = "_teamValue_1va5h_84";
2522
+ const styles = {
2523
+ root,
2524
+ title,
2525
+ titleLabel,
2526
+ tablet,
2527
+ desktop,
2528
+ laptop,
2529
+ titleValue,
2530
+ team,
2531
+ teamLogo,
2532
+ teamName,
2533
+ teamValue
2534
+ };
2535
+ const MatchesOneTwo = () => {
2536
+ const state = useCurrentState();
2537
+ const rules = useParseRules(state);
2538
+ return o("div", {
2539
+ className: classNames(styles.root, {
2540
+ [styles.desktop]: (state == null ? void 0 : state.device) === "desktop",
2541
+ [styles.laptop]: (state == null ? void 0 : state.device) === "laptop",
2542
+ [styles.tablet]: (state == null ? void 0 : state.device) === "tablet"
2543
+ }),
2544
+ style: omit(rules.root, ...backgroundOptions),
2545
+ children: [o("div", {
2546
+ className: styles.title,
2547
+ children: [o("div", {
2548
+ className: styles.titleLabel,
2549
+ style: rules.titleLabel,
2550
+ children: rules.titleLabel.children
2551
+ }), o("div", {
2552
+ className: styles.titleValue,
2553
+ style: rules.titleValue,
2554
+ children: rules.titleValue.children
2555
+ })]
2556
+ }), o("div", {
2557
+ children: [o("div", {
2558
+ className: styles.team,
2559
+ children: [o("div", {
2560
+ className: styles.teamLogo,
2561
+ style: rules.logo
2562
+ }), o("div", {
2563
+ className: styles.teamName,
2564
+ style: rules.teamName,
2565
+ children: rules.team1Name.children
2566
+ }), o("div", {
2567
+ className: styles.teamValue,
2568
+ style: rules.value,
2569
+ children: rules.value1.children
2570
+ })]
2571
+ }), o("div", {
2572
+ className: styles.team,
2573
+ children: [o("div", {
2574
+ className: styles.teamLogo,
2575
+ style: rules.logo
2576
+ }), o("div", {
2577
+ className: styles.teamName,
2578
+ style: rules.teamName,
2579
+ children: rules.team2Name.children
2580
+ }), o("div", {
2581
+ className: styles.teamValue,
2582
+ style: rules.value,
2583
+ children: rules.value2.children
2584
+ })]
2585
+ })]
2586
+ })]
2587
+ });
2588
+ };
2589
+ const useAnimatedList = (slides = []) => {
2590
+ var _a;
2591
+ const itemsCount = slides.length;
2592
+ const [animatedIdx, setAnimatedIdx] = h(0);
2593
+ const animationDuration = (_a = slides[animatedIdx || 0]) == null ? void 0 : _a.animationDuration;
2594
+ p(() => {
2595
+ const goNext = () => {
2596
+ setAnimatedIdx((index2) => {
2597
+ if (index2 + 1 < itemsCount)
2598
+ return index2 + 1;
2599
+ return 0;
2600
+ });
2601
+ };
2602
+ const timeout = setTimeout(goNext, animationDuration);
2603
+ return () => clearTimeout(timeout);
2604
+ }, [setAnimatedIdx, itemsCount, animationDuration, animatedIdx]);
2605
+ return animatedIdx;
2606
+ };
2607
+ const DEFAULT_ANIMATION_SPEED = 3700;
2608
+ const backgroundOptions = ["backgroundColor", "backgroundColorOpacity", "backgroundImage", "backgroundFit"];
2609
+ const WideCard = () => {
2610
+ var _a, _b, _c, _d, _e;
2611
+ const rootRef = _$1(null);
2612
+ const state = useCurrentState();
2613
+ const device = useContainerDevice({
2614
+ watchRef: rootRef
2615
+ });
2616
+ const deviceState = useDeviceState(state, device);
2617
+ const rules = useParseRules(deviceState);
2618
+ const getChild = (name2) => ({
2619
+ text: o(Text, {}),
2620
+ matches: o(Matches, {}),
2621
+ matchesOneTwo: o(MatchesOneTwo, {})
2622
+ })[name2];
2623
+ const slidesList = (rules.children || []).filter(Boolean).map((slide2) => {
2624
+ var _a2, _b2;
2625
+ return {
2626
+ ...slide2,
2627
+ animationName: (_a2 = slide2 == null ? void 0 : slide2.root) == null ? void 0 : _a2.animationName,
2628
+ animationDuration: ((_b2 = slide2 == null ? void 0 : slide2.root) == null ? void 0 : _b2.animationDuration) || DEFAULT_ANIMATION_SPEED
2629
+ };
2630
+ });
2631
+ const currentSlide = useAnimatedList(slidesList);
2632
+ const slideRules = useParseRules(slidesList[currentSlide] || {});
2633
+ 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);
2634
+ return o("a", {
2635
+ ref: rootRef,
2636
+ href: (_b = rules.root) == null ? void 0 : _b.offer,
2637
+ target: "_blank",
2638
+ rel: "nofollow noopener noreferrer",
2639
+ className: classNames(styles$3.root, {
2640
+ [styles$3.desktop]: device === "desktop",
2641
+ [styles$3.laptop]: device === "laptop",
2642
+ [styles$3.tablet]: device === "tablet",
2643
+ [styles$3.variant2]: ((_c = rules.root) == null ? void 0 : _c.variant) === "variant2"
2644
+ }),
2645
+ style: rules.root,
2646
+ children: [o("div", {
2647
+ className: styles$3.background,
2648
+ style: backgroundRules
2649
+ }), o("div", {
2650
+ className: styles$3.promotion,
2651
+ style: rules.promotion,
2652
+ children: (_d = rules.promotion) == null ? void 0 : _d.children
2653
+ }), o("div", {
2654
+ className: styles$3.content,
2655
+ children: [o("div", {
2656
+ className: styles$3.left,
2657
+ children: o("div", {
2658
+ className: styles$3.logo,
2659
+ style: rules.logo
2660
+ })
2661
+ }), o("div", {
2662
+ className: styles$3.center,
2663
+ children: (rules.children || []).map((child, index2) => {
2664
+ var _a2, _b2;
2665
+ return o("div", {
2666
+ className: styles$3.slide,
2667
+ style: {
2668
+ animationName: currentSlide === index2 ? styles$3[((_a2 = child.root) == null ? void 0 : _a2.animationName) || "fade-in-out"] : "none",
2669
+ animationDuration: `${(_b2 = child.root) == null ? void 0 : _b2.animationDuration}ms`
2670
+ },
2671
+ children: o(StateContext, {
2672
+ value: {
2673
+ ...child,
2674
+ device
2675
+ },
2676
+ children: getChild(child.name)
2677
+ })
2678
+ });
2679
+ })
2680
+ }), o("div", {
2681
+ className: styles$3.right,
2682
+ children: [o("div", {
2683
+ className: styles$3.logo,
2684
+ style: rules.logo
2685
+ }), o("div", {
2686
+ className: styles$3.buttonWrapper,
2687
+ children: o("div", {
2688
+ className: styles$3.button,
2689
+ style: rules.button,
2690
+ children: [o("div", {
2691
+ className: styles$3.logo,
2692
+ style: rules.logo
2693
+ }), (_e = rules.button) == null ? void 0 : _e.children]
2694
+ })
2695
+ })]
2696
+ })]
2697
+ })]
2698
+ });
2699
+ };
2700
+ const index = render(o(WideCard, {}));
2701
+ exports2.BonusCard = index$1;
2702
+ exports2.ComplexGift = index$5;
2703
+ exports2.ComplexPopup = index$3;
2704
+ exports2.ExpressPopup = index$2;
2705
+ exports2.SimpleGift = index$6;
2706
+ exports2.SimplePopup = index$4;
2707
+ exports2.WideCard = index;
2708
+ Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
2709
+ });
2710
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLnVtZC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2hvb2tzL2Rpc3QvaG9va3MubW9kdWxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9jb21wYXQvZGlzdC9jb21wYXQubW9kdWxlLmpzIiwiLi4vc3JjL2hvb2tzL3VzZUdpZnRPcGVuLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3ByZWFjdC9qc3gtcnVudGltZS9kaXN0L2pzeFJ1bnRpbWUubW9kdWxlLmpzIiwiLi4vc3JjL1N0YXRlQ29udGV4dC50c3giLCIuLi9zcmMvaGVscGVycy9yZW5kZXIudHN4IiwiLi4vc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZS50cyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUhhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldFRhZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3JlSnNEYXRhLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hdGl2ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaENsZWFyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaERlbGV0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaFNldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUNsZWFyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N0YWNrLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZGVmaW5lUHJvcGVydHkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc3NpZ25NZXJnZVZhbHVlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUZvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3IuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1VpbnQ4QXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUNyZWF0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZU9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0J1ZmZlci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNQbGFpbk9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5hcnkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2FmZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnblZhbHVlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlS2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXNJbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1BsYWluT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1lcmdlRGVlcC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNZXJnZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJSZXN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jb25zdGFudC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmVzdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSXRlcmF0ZWVDYWxsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQXNzaWduZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lcmdlLmpzIiwiLi4vLi4vdXRpbHMvaXRlcmF0b3IudHMiLCIuLi8uLi91dGlscy9pbmRleC50cyIsIi4uL3NyYy9oZWxwZXJzL2dldERldmljZVN0YXRlLnRzIiwiLi4vc3JjL2hvb2tzL3VzZURldmljZVN0YXRlLnRzIiwiLi4vc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZS50cyIsIi4uL3NyYy9oZWxwZXJzL3BhcnNlUnVsZXMudHMiLCIuLi9zcmMvaG9va3MvdXNlUGFyc2VSdWxlcy50cyIsIi4uL3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0LnRzeCIsIi4uL3NyYy9ob29rcy91c2VUb2dnbGUudHMiLCIuLi9zcmMvY29tcG9uZW50cy9DbG9zZUljb24udHN4IiwiLi4vc3JjL2NvbXBvbmVudHMvR2lmdEljb24udHN4IiwiLi4vc3JjL3Byb21vcy9TaW1wbGVHaWZ0L2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleEdpZnQvY29tcG9uZW50cy9Cb251c0NhcmQvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Db21wbGV4R2lmdC9pbmRleC50c3giLCIuLi9zcmMvaGVscGVycy9zd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgudHMiLCIuLi9zcmMvcHJvbW9zL1NpbXBsZVBvcHVwL2NvbXBvbmVudHMvbGluZS9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1NpbXBsZVBvcHVwL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleFBvcHVwL2NvbXBvbmVudHMvQm9udXMvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Db21wbGV4UG9wdXAvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9FeHByZXNzUG9wdXAvY29tcG9uZW50cy9NYXRjaC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0V4cHJlc3NQb3B1cC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0JvbnVzQ2FyZC9jb21wb25lbnRzL0JvbnVzL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQm9udXNDYXJkL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvV2lkZUNhcmQvY29tcG9uZW50cy9UZXh0L2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvV2lkZUNhcmQvY29tcG9uZW50cy9NYXRjaGVzL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvV2lkZUNhcmQvY29tcG9uZW50cy9NYXRjaGVzT25lVHdvL2luZGV4LnRzeCIsIi4uL3NyYy9ob29rcy91c2VBbmltYXRlZExpc3QudHMiLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cdHZhciBuYXRpdmVDb2RlU3RyaW5nID0gJ1tuYXRpdmUgY29kZV0nO1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGlmIChhcmcubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dmFyIGlubmVyID0gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdFx0XHRcdGlmIChpbm5lcikge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGlubmVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChhcmcudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiaW1wb3J0e29wdGlvbnMgYXMgbn1mcm9tXCJwcmVhY3RcIjt2YXIgdCxyLHUsaSxvPTAsZj1bXSxjPVtdLGU9bi5fX2IsYT1uLl9fcix2PW4uZGlmZmVkLGw9bi5fX2MsbT1uLnVubW91bnQ7ZnVuY3Rpb24gZCh0LHUpe24uX19oJiZuLl9faChyLHQsb3x8dSksbz0wO3ZhciBpPXIuX19IfHwoci5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiB0Pj1pLl9fLmxlbmd0aCYmaS5fXy5wdXNoKHtfX1Y6Y30pLGkuX19bdF19ZnVuY3Rpb24gaChuKXtyZXR1cm4gbz0xLHMoQixuKX1mdW5jdGlvbiBzKG4sdSxpKXt2YXIgbz1kKHQrKywyKTtpZihvLnQ9biwhby5fX2MmJihvLl9fPVtpP2kodSk6Qih2b2lkIDAsdSksZnVuY3Rpb24obil7dmFyIHQ9by5fX04/by5fX05bMF06by5fX1swXSxyPW8udCh0LG4pO3QhPT1yJiYoby5fX049W3Isby5fX1sxXV0sby5fX2Muc2V0U3RhdGUoe30pKX1dLG8uX19jPXIsIXIudSkpe3ZhciBmPWZ1bmN0aW9uKG4sdCxyKXtpZighby5fX2MuX19IKXJldHVybiEwO3ZhciB1PW8uX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG4uX19jfSk7aWYodS5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4hbi5fX059KSlyZXR1cm4hY3x8Yy5jYWxsKHRoaXMsbix0LHIpO3ZhciBpPSExO3JldHVybiB1LmZvckVhY2goZnVuY3Rpb24obil7aWYobi5fX04pe3ZhciB0PW4uX19bMF07bi5fXz1uLl9fTixuLl9fTj12b2lkIDAsdCE9PW4uX19bMF0mJihpPSEwKX19KSwhKCFpJiZvLl9fYy5wcm9wcz09PW4pJiYoIWN8fGMuY2FsbCh0aGlzLG4sdCxyKSl9O3IudT0hMDt2YXIgYz1yLnNob3VsZENvbXBvbmVudFVwZGF0ZSxlPXIuY29tcG9uZW50V2lsbFVwZGF0ZTtyLmNvbXBvbmVudFdpbGxVcGRhdGU9ZnVuY3Rpb24obix0LHIpe2lmKHRoaXMuX19lKXt2YXIgdT1jO2M9dm9pZCAwLGYobix0LHIpLGM9dX1lJiZlLmNhbGwodGhpcyxuLHQscil9LHIuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ9cmV0dXJuIG8uX19OfHxvLl9ffWZ1bmN0aW9uIHAodSxpKXt2YXIgbz1kKHQrKywzKTshbi5fX3MmJnooby5fX0gsaSkmJihvLl9fPXUsby5pPWksci5fX0guX19oLnB1c2gobykpfWZ1bmN0aW9uIHkodSxpKXt2YXIgbz1kKHQrKyw0KTshbi5fX3MmJnooby5fX0gsaSkmJihvLl9fPXUsby5pPWksci5fX2gucHVzaChvKSl9ZnVuY3Rpb24gXyhuKXtyZXR1cm4gbz01LEYoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpufX0sW10pfWZ1bmN0aW9uIEEobix0LHIpe289Nix5KGZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbj8obih0KCkpLGZ1bmN0aW9uKCl7cmV0dXJuIG4obnVsbCl9KTpuPyhuLmN1cnJlbnQ9dCgpLGZ1bmN0aW9uKCl7cmV0dXJuIG4uY3VycmVudD1udWxsfSk6dm9pZCAwfSxudWxsPT1yP3I6ci5jb25jYXQobikpfWZ1bmN0aW9uIEYobixyKXt2YXIgdT1kKHQrKyw3KTtyZXR1cm4geih1Ll9fSCxyKT8odS5fX1Y9bigpLHUuaT1yLHUuX19oPW4sdS5fX1YpOnUuX199ZnVuY3Rpb24gVChuLHQpe3JldHVybiBvPTgsRihmdW5jdGlvbigpe3JldHVybiBufSx0KX1mdW5jdGlvbiBxKG4pe3ZhciB1PXIuY29udGV4dFtuLl9fY10saT1kKHQrKyw5KTtyZXR1cm4gaS5jPW4sdT8obnVsbD09aS5fXyYmKGkuX189ITAsdS5zdWIocikpLHUucHJvcHMudmFsdWUpOm4uX199ZnVuY3Rpb24geCh0LHIpe24udXNlRGVidWdWYWx1ZSYmbi51c2VEZWJ1Z1ZhbHVlKHI/cih0KTp0KX1mdW5jdGlvbiBQKG4pe3ZhciB1PWQodCsrLDEwKSxpPWgoKTtyZXR1cm4gdS5fXz1uLHIuY29tcG9uZW50RGlkQ2F0Y2h8fChyLmNvbXBvbmVudERpZENhdGNoPWZ1bmN0aW9uKG4sdCl7dS5fXyYmdS5fXyhuLHQpLGlbMV0obil9KSxbaVswXSxmdW5jdGlvbigpe2lbMV0odm9pZCAwKX1dfWZ1bmN0aW9uIFYoKXt2YXIgbj1kKHQrKywxMSk7aWYoIW4uX18pe2Zvcih2YXIgdT1yLl9fdjtudWxsIT09dSYmIXUuX19tJiZudWxsIT09dS5fXzspdT11Ll9fO3ZhciBpPXUuX19tfHwodS5fX209WzAsMF0pO24uX189XCJQXCIraVswXStcIi1cIitpWzFdKyt9cmV0dXJuIG4uX199ZnVuY3Rpb24gYigpe2Zvcih2YXIgdDt0PWYuc2hpZnQoKTspaWYodC5fX1AmJnQuX19IKXRyeXt0Ll9fSC5fX2guZm9yRWFjaChrKSx0Ll9fSC5fX2guZm9yRWFjaCh3KSx0Ll9fSC5fX2g9W119Y2F0Y2gocil7dC5fX0guX19oPVtdLG4uX19lKHIsdC5fX3YpfX1uLl9fYj1mdW5jdGlvbihuKXtyPW51bGwsZSYmZShuKX0sbi5fX3I9ZnVuY3Rpb24obil7YSYmYShuKSx0PTA7dmFyIGk9KHI9bi5fX2MpLl9fSDtpJiYodT09PXI/KGkuX19oPVtdLHIuX19oPVtdLGkuX18uZm9yRWFjaChmdW5jdGlvbihuKXtuLl9fTiYmKG4uX189bi5fX04pLG4uX19WPWMsbi5fX049bi5pPXZvaWQgMH0pKTooaS5fX2guZm9yRWFjaChrKSxpLl9faC5mb3JFYWNoKHcpLGkuX19oPVtdKSksdT1yfSxuLmRpZmZlZD1mdW5jdGlvbih0KXt2JiZ2KHQpO3ZhciBvPXQuX19jO28mJm8uX19IJiYoby5fX0guX19oLmxlbmd0aCYmKDEhPT1mLnB1c2gobykmJmk9PT1uLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChpPW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8aikoYikpLG8uX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7bi5pJiYobi5fX0g9bi5pKSxuLl9fViE9PWMmJihuLl9fPW4uX19WKSxuLmk9dm9pZCAwLG4uX19WPWN9KSksdT1yPW51bGx9LG4uX19jPWZ1bmN0aW9uKHQscil7ci5zb21lKGZ1bmN0aW9uKHQpe3RyeXt0Ll9faC5mb3JFYWNoKGspLHQuX19oPXQuX19oLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4hbi5fX3x8dyhuKX0pfWNhdGNoKHUpe3Iuc29tZShmdW5jdGlvbihuKXtuLl9faCYmKG4uX19oPVtdKX0pLHI9W10sbi5fX2UodSx0Ll9fdil9fSksbCYmbCh0LHIpfSxuLnVubW91bnQ9ZnVuY3Rpb24odCl7bSYmbSh0KTt2YXIgcix1PXQuX19jO3UmJnUuX19IJiYodS5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXt0cnl7ayhuKX1jYXRjaChuKXtyPW59fSksdS5fX0g9dm9pZCAwLHImJm4uX19lKHIsdS5fX3YpKX07dmFyIGc9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lO2Z1bmN0aW9uIGoobil7dmFyIHQscj1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh1KSxnJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0KSxzZXRUaW1lb3V0KG4pfSx1PXNldFRpbWVvdXQociwxMDApO2cmJih0PXJlcXVlc3RBbmltYXRpb25GcmFtZShyKSl9ZnVuY3Rpb24gayhuKXt2YXIgdD1yLHU9bi5fX2M7XCJmdW5jdGlvblwiPT10eXBlb2YgdSYmKG4uX19jPXZvaWQgMCx1KCkpLHI9dH1mdW5jdGlvbiB3KG4pe3ZhciB0PXI7bi5fX2M9bi5fXygpLHI9dH1mdW5jdGlvbiB6KG4sdCl7cmV0dXJuIW58fG4ubGVuZ3RoIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0LHIpe3JldHVybiB0IT09bltyXX0pfWZ1bmN0aW9uIEIobix0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Qobik6dH1leHBvcnR7VCBhcyB1c2VDYWxsYmFjayxxIGFzIHVzZUNvbnRleHQseCBhcyB1c2VEZWJ1Z1ZhbHVlLHAgYXMgdXNlRWZmZWN0LFAgYXMgdXNlRXJyb3JCb3VuZGFyeSxWIGFzIHVzZUlkLEEgYXMgdXNlSW1wZXJhdGl2ZUhhbmRsZSx5IGFzIHVzZUxheW91dEVmZmVjdCxGIGFzIHVzZU1lbW8scyBhcyB1c2VSZWR1Y2VyLF8gYXMgdXNlUmVmLGggYXMgdXNlU3RhdGV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3MubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0e0NvbXBvbmVudCBhcyBuLGNyZWF0ZUVsZW1lbnQgYXMgdCxvcHRpb25zIGFzIGUsdG9DaGlsZEFycmF5IGFzIHIsRnJhZ21lbnQgYXMgdSxyZW5kZXIgYXMgbyxoeWRyYXRlIGFzIGksY3JlYXRlQ29udGV4dCBhcyBsLGNyZWF0ZVJlZiBhcyBjLGNsb25lRWxlbWVudCBhcyBmfWZyb21cInByZWFjdFwiO2V4cG9ydHtDb21wb25lbnQsRnJhZ21lbnQsY3JlYXRlQ29udGV4dCxjcmVhdGVFbGVtZW50LGNyZWF0ZVJlZn1mcm9tXCJwcmVhY3RcIjtpbXBvcnR7dXNlU3RhdGUgYXMgYSx1c2VJZCBhcyBzLHVzZVJlZHVjZXIgYXMgaCx1c2VFZmZlY3QgYXMgdix1c2VMYXlvdXRFZmZlY3QgYXMgZCx1c2VSZWYgYXMgcCx1c2VJbXBlcmF0aXZlSGFuZGxlIGFzIG0sdXNlTWVtbyBhcyB5LHVzZUNhbGxiYWNrIGFzIF8sdXNlQ29udGV4dCBhcyBiLHVzZURlYnVnVmFsdWUgYXMgU31mcm9tXCJwcmVhY3QvaG9va3NcIjtleHBvcnQqZnJvbVwicHJlYWN0L2hvb2tzXCI7ZnVuY3Rpb24gZyhuLHQpe2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXTtyZXR1cm4gbn1mdW5jdGlvbiBDKG4sdCl7Zm9yKHZhciBlIGluIG4paWYoXCJfX3NvdXJjZVwiIT09ZSYmIShlIGluIHQpKXJldHVybiEwO2Zvcih2YXIgciBpbiB0KWlmKFwiX19zb3VyY2VcIiE9PXImJm5bcl0hPT10W3JdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEUobix0KXtyZXR1cm4gbj09PXQmJigwIT09bnx8MS9uPT0xL3QpfHxuIT1uJiZ0IT10fWZ1bmN0aW9uIHcobil7dGhpcy5wcm9wcz1ufWZ1bmN0aW9uIHgobixlKXtmdW5jdGlvbiByKG4pe3ZhciB0PXRoaXMucHJvcHMucmVmLHI9dD09bi5yZWY7cmV0dXJuIXImJnQmJih0LmNhbGw/dChudWxsKTp0LmN1cnJlbnQ9bnVsbCksZT8hZSh0aGlzLnByb3BzLG4pfHwhcjpDKHRoaXMucHJvcHMsbil9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9cix0KG4sZSl9cmV0dXJuIHUuZGlzcGxheU5hbWU9XCJNZW1vKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsdS5fX2Y9ITAsdX0ody5wcm90b3R5cGU9bmV3IG4pLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLHcucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBDKHRoaXMucHJvcHMsbil8fEModGhpcy5zdGF0ZSx0KX07dmFyIFI9ZS5fX2I7ZS5fX2I9ZnVuY3Rpb24obil7bi50eXBlJiZuLnR5cGUuX19mJiZuLnJlZiYmKG4ucHJvcHMucmVmPW4ucmVmLG4ucmVmPW51bGwpLFImJlIobil9O3ZhciBOPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKXx8MzkxMTtmdW5jdGlvbiBrKG4pe2Z1bmN0aW9uIHQodCl7dmFyIGU9Zyh7fSx0KTtyZXR1cm4gZGVsZXRlIGUucmVmLG4oZSx0LnJlZnx8bnVsbCl9cmV0dXJuIHQuJCR0eXBlb2Y9Tix0LnJlbmRlcj10LHQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9dC5fX2Y9ITAsdC5kaXNwbGF5TmFtZT1cIkZvcndhcmRSZWYoXCIrKG4uZGlzcGxheU5hbWV8fG4ubmFtZSkrXCIpXCIsdH12YXIgQT1mdW5jdGlvbihuLHQpe3JldHVybiBudWxsPT1uP251bGw6cihyKG4pLm1hcCh0KSl9LE89e21hcDpBLGZvckVhY2g6QSxjb3VudDpmdW5jdGlvbihuKXtyZXR1cm4gbj9yKG4pLmxlbmd0aDowfSxvbmx5OmZ1bmN0aW9uKG4pe3ZhciB0PXIobik7aWYoMSE9PXQubGVuZ3RoKXRocm93XCJDaGlsZHJlbi5vbmx5XCI7cmV0dXJuIHRbMF19LHRvQXJyYXk6cn0sVD1lLl9fZTtlLl9fZT1mdW5jdGlvbihuLHQsZSxyKXtpZihuLnRoZW4pZm9yKHZhciB1LG89dDtvPW8uX187KWlmKCh1PW8uX19jKSYmdS5fX2MpcmV0dXJuIG51bGw9PXQuX19lJiYodC5fX2U9ZS5fX2UsdC5fX2s9ZS5fX2spLHUuX19jKG4sdCk7VChuLHQsZSxyKX07dmFyIEk9ZS51bm1vdW50O2Z1bmN0aW9uIEwobix0LGUpe3JldHVybiBuJiYobi5fX2MmJm4uX19jLl9fSCYmKG4uX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe1wiZnVuY3Rpb25cIj09dHlwZW9mIG4uX19jJiZuLl9fYygpfSksbi5fX2MuX19IPW51bGwpLG51bGwhPShuPWcoe30sbikpLl9fYyYmKG4uX19jLl9fUD09PWUmJihuLl9fYy5fX1A9dCksbi5fX2M9bnVsbCksbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gTChuLHQsZSl9KSksbn1mdW5jdGlvbiBVKG4sdCxlKXtyZXR1cm4gbiYmKG4uX192PW51bGwsbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gVShuLHQsZSl9KSxuLl9fYyYmbi5fX2MuX19QPT09dCYmKG4uX19lJiZlLmluc2VydEJlZm9yZShuLl9fZSxuLl9fZCksbi5fX2MuX19lPSEwLG4uX19jLl9fUD1lKSksbn1mdW5jdGlvbiBEKCl7dGhpcy5fX3U9MCx0aGlzLnQ9bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIEYobil7dmFyIHQ9bi5fXy5fX2M7cmV0dXJuIHQmJnQuX19hJiZ0Ll9fYShuKX1mdW5jdGlvbiBNKG4pe3ZhciBlLHIsdTtmdW5jdGlvbiBvKG8pe2lmKGV8fChlPW4oKSkudGhlbihmdW5jdGlvbihuKXtyPW4uZGVmYXVsdHx8bn0sZnVuY3Rpb24obil7dT1ufSksdSl0aHJvdyB1O2lmKCFyKXRocm93IGU7cmV0dXJuIHQocixvKX1yZXR1cm4gby5kaXNwbGF5TmFtZT1cIkxhenlcIixvLl9fZj0hMCxvfWZ1bmN0aW9uIFYoKXt0aGlzLnU9bnVsbCx0aGlzLm89bnVsbH1lLnVubW91bnQ9ZnVuY3Rpb24obil7dmFyIHQ9bi5fX2M7dCYmdC5fX1ImJnQuX19SKCksdCYmITA9PT1uLl9faCYmKG4udHlwZT1udWxsKSxJJiZJKG4pfSwoRC5wcm90b3R5cGU9bmV3IG4pLl9fYz1mdW5jdGlvbihuLHQpe3ZhciBlPXQuX19jLHI9dGhpcztudWxsPT1yLnQmJihyLnQ9W10pLHIudC5wdXNoKGUpO3ZhciB1PUYoci5fX3YpLG89ITEsaT1mdW5jdGlvbigpe298fChvPSEwLGUuX19SPW51bGwsdT91KGwpOmwoKSl9O2UuX19SPWk7dmFyIGw9ZnVuY3Rpb24oKXtpZighLS1yLl9fdSl7aWYoci5zdGF0ZS5fX2Epe3ZhciBuPXIuc3RhdGUuX19hO3IuX192Ll9fa1swXT1VKG4sbi5fX2MuX19QLG4uX19jLl9fTyl9dmFyIHQ7Zm9yKHIuc2V0U3RhdGUoe19fYTpyLl9fYj1udWxsfSk7dD1yLnQucG9wKCk7KXQuZm9yY2VVcGRhdGUoKX19LGM9ITA9PT10Ll9faDtyLl9fdSsrfHxjfHxyLnNldFN0YXRlKHtfX2E6ci5fX2I9ci5fX3YuX19rWzBdfSksbi50aGVuKGksaSl9LEQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy50PVtdfSxELnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obixlKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLG89dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09TCh0aGlzLl9fYixyLG8uX19PPW8uX19QKX10aGlzLl9fYj1udWxsfXZhciBpPWUuX19hJiZ0KHUsbnVsbCxuLmZhbGxiYWNrKTtyZXR1cm4gaSYmKGkuX19oPW51bGwpLFt0KHUsbnVsbCxlLl9fYT9udWxsOm4uY2hpbGRyZW4pLGldfTt2YXIgVz1mdW5jdGlvbihuLHQsZSl7aWYoKytlWzFdPT09ZVswXSYmbi5vLmRlbGV0ZSh0KSxuLnByb3BzLnJldmVhbE9yZGVyJiYoXCJ0XCIhPT1uLnByb3BzLnJldmVhbE9yZGVyWzBdfHwhbi5vLnNpemUpKWZvcihlPW4udTtlOyl7Zm9yKDtlLmxlbmd0aD4zOyllLnBvcCgpKCk7aWYoZVsxXTxlWzBdKWJyZWFrO24udT1lPWVbMl19fTtmdW5jdGlvbiBQKG4pe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBuLmNvbnRleHR9LG4uY2hpbGRyZW59ZnVuY3Rpb24gaihuKXt2YXIgZT10aGlzLHI9bi5pO2UuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtvKG51bGwsZS5sKSxlLmw9bnVsbCxlLmk9bnVsbH0sZS5pJiZlLmkhPT1yJiZlLmNvbXBvbmVudFdpbGxVbm1vdW50KCksbi5fX3Y/KGUubHx8KGUuaT1yLGUubD17bm9kZVR5cGU6MSxwYXJlbnROb2RlOnIsY2hpbGROb2RlczpbXSxhcHBlbmRDaGlsZDpmdW5jdGlvbihuKXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmkuYXBwZW5kQ2hpbGQobil9LGluc2VydEJlZm9yZTpmdW5jdGlvbihuLHQpe3RoaXMuY2hpbGROb2Rlcy5wdXNoKG4pLGUuaS5hcHBlbmRDaGlsZChuKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24obil7dGhpcy5jaGlsZE5vZGVzLnNwbGljZSh0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihuKT4+PjEsMSksZS5pLnJlbW92ZUNoaWxkKG4pfX0pLG8odChQLHtjb250ZXh0OmUuY29udGV4dH0sbi5fX3YpLGUubCkpOmUubCYmZS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWZ1bmN0aW9uIHoobixlKXt2YXIgcj10KGose19fdjpuLGk6ZX0pO3JldHVybiByLmNvbnRhaW5lckluZm89ZSxyfShWLnByb3RvdHlwZT1uZXcgbikuX19hPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMsZT1GKHQuX192KSxyPXQuby5nZXQobik7cmV0dXJuIHJbMF0rKyxmdW5jdGlvbih1KXt2YXIgbz1mdW5jdGlvbigpe3QucHJvcHMucmV2ZWFsT3JkZXI/KHIucHVzaCh1KSxXKHQsbixyKSk6dSgpfTtlP2Uobyk6bygpfX0sVi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4pe3RoaXMudT1udWxsLHRoaXMubz1uZXcgTWFwO3ZhciB0PXIobi5jaGlsZHJlbik7bi5yZXZlYWxPcmRlciYmXCJiXCI9PT1uLnJldmVhbE9yZGVyWzBdJiZ0LnJldmVyc2UoKTtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tOyl0aGlzLm8uc2V0KHRbZV0sdGhpcy51PVsxLDAsdGhpcy51XSk7cmV0dXJuIG4uY2hpbGRyZW59LFYucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1WLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBuPXRoaXM7dGhpcy5vLmZvckVhY2goZnVuY3Rpb24odCxlKXtXKG4sZSx0KX0pfTt2YXIgQj1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKXx8NjAxMDMsSD0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxaPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sWT0vW0EtWjAtOV0vZywkPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCxxPWZ1bmN0aW9uKG4pe3JldHVybihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sKCk/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3Qobil9O2Z1bmN0aW9uIEcobix0LGUpe3JldHVybiBudWxsPT10Ll9fayYmKHQudGV4dENvbnRlbnQ9XCJcIiksbyhuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9ZnVuY3Rpb24gSihuLHQsZSl7cmV0dXJuIGkobix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfW4ucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sW1wiY29tcG9uZW50V2lsbE1vdW50XCIsXCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCIsXCJjb21wb25lbnRXaWxsVXBkYXRlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tcIlVOU0FGRV9cIit0XX0sc2V0OmZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpufSl9fSl9KTt2YXIgSz1lLmV2ZW50O2Z1bmN0aW9uIFEoKXt9ZnVuY3Rpb24gWCgpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX1mdW5jdGlvbiBubigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9ZS5ldmVudD1mdW5jdGlvbihuKXtyZXR1cm4gSyYmKG49SyhuKSksbi5wZXJzaXN0PVEsbi5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1YLG4uaXNEZWZhdWx0UHJldmVudGVkPW5uLG4ubmF0aXZlRXZlbnQ9bn07dmFyIHRuLGVuPXtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LHJuPWUudm5vZGU7ZS52bm9kZT1mdW5jdGlvbihuKXtcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlJiZmdW5jdGlvbihuKXt2YXIgdD1uLnByb3BzLGU9bi50eXBlLHU9e307Zm9yKHZhciBvIGluIHQpe3ZhciBpPXRbb107aWYoIShcInZhbHVlXCI9PT1vJiZcImRlZmF1bHRWYWx1ZVwiaW4gdCYmbnVsbD09aXx8JCYmXCJjaGlsZHJlblwiPT09byYmXCJub3NjcmlwdFwiPT09ZXx8XCJjbGFzc1wiPT09b3x8XCJjbGFzc05hbWVcIj09PW8pKXt2YXIgbD1vLnRvTG93ZXJDYXNlKCk7XCJkZWZhdWx0VmFsdWVcIj09PW8mJlwidmFsdWVcImluIHQmJm51bGw9PXQudmFsdWU/bz1cInZhbHVlXCI6XCJkb3dubG9hZFwiPT09byYmITA9PT1pP2k9XCJcIjpcIm9uZG91YmxlY2xpY2tcIj09PWw/bz1cIm9uZGJsY2xpY2tcIjpcIm9uY2hhbmdlXCIhPT1sfHxcImlucHV0XCIhPT1lJiZcInRleHRhcmVhXCIhPT1lfHxxKHQudHlwZSk/XCJvbmZvY3VzXCI9PT1sP289XCJvbmZvY3VzaW5cIjpcIm9uYmx1clwiPT09bD9vPVwib25mb2N1c291dFwiOloudGVzdChvKT9vPWw6LTE9PT1lLmluZGV4T2YoXCItXCIpJiZILnRlc3Qobyk/bz1vLnJlcGxhY2UoWSxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpOm51bGw9PT1pJiYoaT12b2lkIDApOmw9bz1cIm9uaW5wdXRcIixcIm9uaW5wdXRcIj09PWwmJnVbbz1sXSYmKG89XCJvbmlucHV0Q2FwdHVyZVwiKSx1W29dPWl9fVwic2VsZWN0XCI9PWUmJnUubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodS52YWx1ZSkmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPS0xIT11LnZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSl9KSksXCJzZWxlY3RcIj09ZSYmbnVsbCE9dS5kZWZhdWx0VmFsdWUmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPXUubXVsdGlwbGU/LTEhPXUuZGVmYXVsdFZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSk6dS5kZWZhdWx0VmFsdWU9PW4ucHJvcHMudmFsdWV9KSksdC5jbGFzcyYmIXQuY2xhc3NOYW1lPyh1LmNsYXNzPXQuY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsXCJjbGFzc05hbWVcIixlbikpOih0LmNsYXNzTmFtZSYmIXQuY2xhc3N8fHQuY2xhc3MmJnQuY2xhc3NOYW1lKSYmKHUuY2xhc3M9dS5jbGFzc05hbWU9dC5jbGFzc05hbWUpLG4ucHJvcHM9dX0obiksbi4kJHR5cGVvZj1CLHJuJiZybihuKX07dmFyIHVuPWUuX19yO2UuX19yPWZ1bmN0aW9uKG4pe3VuJiZ1bihuKSx0bj1uLl9fY307dmFyIG9uPWUuZGlmZmVkO2UuZGlmZmVkPWZ1bmN0aW9uKG4pe29uJiZvbihuKTt2YXIgdD1uLnByb3BzLGU9bi5fX2U7bnVsbCE9ZSYmXCJ0ZXh0YXJlYVwiPT09bi50eXBlJiZcInZhbHVlXCJpbiB0JiZ0LnZhbHVlIT09ZS52YWx1ZSYmKGUudmFsdWU9bnVsbD09dC52YWx1ZT9cIlwiOnQudmFsdWUpLHRuPW51bGx9O3ZhciBsbj17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjp7Y3VycmVudDp7cmVhZENvbnRleHQ6ZnVuY3Rpb24obil7cmV0dXJuIHRuLl9fbltuLl9fY10ucHJvcHMudmFsdWV9fX19LGNuPVwiMTcuMC4yXCI7ZnVuY3Rpb24gZm4obil7cmV0dXJuIHQuYmluZChudWxsLG4pfWZ1bmN0aW9uIGFuKG4pe3JldHVybiEhbiYmbi4kJHR5cGVvZj09PUJ9ZnVuY3Rpb24gc24obil7cmV0dXJuIGFuKG4pP2YuYXBwbHkobnVsbCxhcmd1bWVudHMpOm59ZnVuY3Rpb24gaG4obil7cmV0dXJuISFuLl9fayYmKG8obnVsbCxuKSwhMCl9ZnVuY3Rpb24gdm4obil7cmV0dXJuIG4mJihuLmJhc2V8fDE9PT1uLm5vZGVUeXBlJiZuKXx8bnVsbH12YXIgZG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0scG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0sbW49dTtmdW5jdGlvbiB5bihuKXtuKCl9ZnVuY3Rpb24gX24obil7cmV0dXJuIG59ZnVuY3Rpb24gYm4oKXtyZXR1cm5bITEseW5dfXZhciBTbj1kO2Z1bmN0aW9uIGduKG4sdCl7dmFyIGU9dCgpLHI9YSh7aDp7X186ZSx2OnR9fSksdT1yWzBdLmgsbz1yWzFdO3JldHVybiBkKGZ1bmN0aW9uKCl7dS5fXz1lLHUudj10LEUodS5fXyx0KCkpfHxvKHtoOnV9KX0sW24sZSx0XSksdihmdW5jdGlvbigpe3JldHVybiBFKHUuX18sdS52KCkpfHxvKHtoOnV9KSxuKGZ1bmN0aW9uKCl7RSh1Ll9fLHUudigpKXx8byh7aDp1fSl9KX0sW25dKSxlfXZhciBDbj17dXNlU3RhdGU6YSx1c2VJZDpzLHVzZVJlZHVjZXI6aCx1c2VFZmZlY3Q6dix1c2VMYXlvdXRFZmZlY3Q6ZCx1c2VJbnNlcnRpb25FZmZlY3Q6U24sdXNlVHJhbnNpdGlvbjpibix1c2VEZWZlcnJlZFZhbHVlOl9uLHVzZVN5bmNFeHRlcm5hbFN0b3JlOmduLHN0YXJ0VHJhbnNpdGlvbjp5bix1c2VSZWY6cCx1c2VJbXBlcmF0aXZlSGFuZGxlOm0sdXNlTWVtbzp5LHVzZUNhbGxiYWNrOl8sdXNlQ29udGV4dDpiLHVzZURlYnVnVmFsdWU6Uyx2ZXJzaW9uOlwiMTcuMC4yXCIsQ2hpbGRyZW46TyxyZW5kZXI6RyxoeWRyYXRlOkosdW5tb3VudENvbXBvbmVudEF0Tm9kZTpobixjcmVhdGVQb3J0YWw6eixjcmVhdGVFbGVtZW50OnQsY3JlYXRlQ29udGV4dDpsLGNyZWF0ZUZhY3Rvcnk6Zm4sY2xvbmVFbGVtZW50OnNuLGNyZWF0ZVJlZjpjLEZyYWdtZW50OnUsaXNWYWxpZEVsZW1lbnQ6YW4sZmluZERPTU5vZGU6dm4sQ29tcG9uZW50Om4sUHVyZUNvbXBvbmVudDp3LG1lbW86eCxmb3J3YXJkUmVmOmssZmx1c2hTeW5jOnBuLHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOmRuLFN0cmljdE1vZGU6bW4sU3VzcGVuc2U6RCxTdXNwZW5zZUxpc3Q6VixsYXp5Ok0sX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6bG59O2V4cG9ydHtPIGFzIENoaWxkcmVuLHcgYXMgUHVyZUNvbXBvbmVudCxtbiBhcyBTdHJpY3RNb2RlLEQgYXMgU3VzcGVuc2UsViBhcyBTdXNwZW5zZUxpc3QsbG4gYXMgX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsc24gYXMgY2xvbmVFbGVtZW50LGZuIGFzIGNyZWF0ZUZhY3RvcnkseiBhcyBjcmVhdGVQb3J0YWwsQ24gYXMgZGVmYXVsdCx2biBhcyBmaW5kRE9NTm9kZSxwbiBhcyBmbHVzaFN5bmMsayBhcyBmb3J3YXJkUmVmLEogYXMgaHlkcmF0ZSxhbiBhcyBpc1ZhbGlkRWxlbWVudCxNIGFzIGxhenkseCBhcyBtZW1vLEcgYXMgcmVuZGVyLHluIGFzIHN0YXJ0VHJhbnNpdGlvbixobiBhcyB1bm1vdW50Q29tcG9uZW50QXROb2RlLGRuIGFzIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLF9uIGFzIHVzZURlZmVycmVkVmFsdWUsU24gYXMgdXNlSW5zZXJ0aW9uRWZmZWN0LGduIGFzIHVzZVN5bmNFeHRlcm5hbFN0b3JlLGJuIGFzIHVzZVRyYW5zaXRpb24sY24gYXMgdmVyc2lvbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wYXQubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUdpZnRPcGVuID0gKGRlbGF5ID0gMTAwMCkgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHRpbWVyUmVmID0gdXNlUmVmKG51bGwpXG5cbiAgY29uc3Qgb25Ub2dnbGUgPSAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyUmVmLmN1cnJlbnQpXG4gICAgc2V0SXNPcGVuKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldElzT3Blbih0cnVlKVxuICAgIH0sIGRlbGF5KVxuXG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KVxuICB9LCBbZGVsYXldKVxuXG4gIHJldHVybiB7XG4gICAgaXNPcGVuLFxuICAgIG9uVG9nZ2xlXG4gIH1cbn1cbiIsImltcG9ydHtvcHRpb25zIGFzIHJ9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0ZyYWdtZW50fWZyb21cInByZWFjdFwiO3ZhciBfPTA7ZnVuY3Rpb24gbyhvLGUsbix0LGYsbCl7dmFyIHMsdSxhPXt9O2Zvcih1IGluIGUpXCJyZWZcIj09dT9zPWVbdV06YVt1XT1lW3VdO3ZhciBpPXt0eXBlOm8scHJvcHM6YSxrZXk6bixyZWY6cyxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fZDp2b2lkIDAsX19jOm51bGwsX19oOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLV8sX19zb3VyY2U6ZixfX3NlbGY6bH07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbyYmKHM9by5kZWZhdWx0UHJvcHMpKWZvcih1IGluIHMpdm9pZCAwPT09YVt1XSYmKGFbdV09c1t1XSk7cmV0dXJuIHIudm5vZGUmJnIudm5vZGUoaSksaX1leHBvcnR7byBhcyBqc3gsbyBhcyBqc3hERVYsbyBhcyBqc3hzfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzeFJ1bnRpbWUubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3ByZWFjdCdcblxuZXhwb3J0IGNvbnN0IFN0YXRlID0gY3JlYXRlQ29udGV4dCgpXG5cbmNvbnN0IFN0YXRlQ29udGV4dCA9ICh7IGNoaWxkcmVuLCB2YWx1ZSB9KSA9PiB7XG4gIHJldHVybiA8U3RhdGUuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9TdGF0ZS5Qcm92aWRlcj5cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RhdGVDb250ZXh0XG4iLCJpbXBvcnQgeyBDb21wb25lbnRDaGlsZCwgQ29udGFpbmVyTm9kZSwgcmVuZGVyIGFzIHByZWFjdFJlbmRlciB9IGZyb20gJ3ByZWFjdCdcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vU3RhdGVDb250ZXh0J1xuXG5leHBvcnQgY29uc3QgcmVuZGVyID0gKHZOb2RlOiBDb21wb25lbnRDaGlsZCkgPT4gKHRhcmdldDogQ29udGFpbmVyTm9kZSwgc3RhdGU/OiBhbnkpID0+XG4gIHByZWFjdFJlbmRlcig8U3RhdGVDb250ZXh0IHZhbHVlPXtzdGF0ZX0+e3ZOb2RlfTwvU3RhdGVDb250ZXh0PiwgdGFyZ2V0IGFzIEhUTUxFbGVtZW50KVxuIiwiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gXCIuLi9TdGF0ZUNvbnRleHRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUN1cnJlbnRTdGF0ZSA9ICgpID0+IHVzZUNvbnRleHQoU3RhdGUpXG4iLCIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+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/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVBc3NpZ25lcjtcbiIsInZhciBiYXNlTWVyZ2UgPSByZXF1aXJlKCcuL19iYXNlTWVyZ2UnKSxcbiAgICBjcmVhdGVBc3NpZ25lciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUFzc2lnbmVyJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXG4gKiBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyBpbnRvIHRoZVxuICogZGVzdGluYXRpb24gb2JqZWN0LiBTb3VyY2UgcHJvcGVydGllcyB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAgYXJlXG4gKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcbiAqIGFyZSBtZXJnZWQgcmVjdXJzaXZlbHkuIE90aGVyIG9iamVjdHMgYW5kIHZhbHVlIHR5cGVzIGFyZSBvdmVycmlkZGVuIGJ5XG4gKiBhc3NpZ25tZW50LiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuIFN1YnNlcXVlbnRcbiAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjUuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0ge1xuICogICAnYSc6IFt7ICdiJzogMiB9LCB7ICdkJzogNCB9XVxuICogfTtcbiAqXG4gKiB2YXIgb3RoZXIgPSB7XG4gKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXG4gKiB9O1xuICpcbiAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiB7ICdhJzogW3sgJ2InOiAyLCAnYyc6IDMgfSwgeyAnZCc6IDQsICdlJzogNSB9XSB9XG4gKi9cbnZhciBtZXJnZSA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCkge1xuICBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlO1xuIiwiaW1wb3J0IHsgQ2FsbGJhY2sgfSBmcm9tICcuL3R5cGVzJ1xuXG50eXBlIFZpc2l0b3IgPSBDYWxsYmFjazxbUHJvcGVydHlLZXksIHVua25vd25dPlxuXG5leHBvcnQgY29uc3QgaXRlcmF0b3IgPSAoaW5wdXQ6IHVua25vd24sIHZpc2l0b3I6IFZpc2l0b3IpOiBhbnkgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICByZXR1cm4gaW5wdXQubWFwKChlbCwgaW5kZXgpID0+IGl0ZXJhdG9yKHZpc2l0b3IoaW5kZXgsIGVsKSwgdmlzaXRvcikpXG4gIH1cblxuICBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhpbnB1dCkucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgYWNjW2tleV0gPSBpdGVyYXRvcih2aXNpdG9yKGtleSwgdmFsdWUpLCB2aXNpdG9yKVxuXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwge30gYXMgYW55KVxuICB9XG5cbiAgcmV0dXJuIGlucHV0XG59XG4iLCJpbXBvcnQgeyBBbnlPYmplY3QgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IGxvZGFzaE1lcmdlIGZyb20gJ2xvZGFzaC9tZXJnZSdcblxuZXhwb3J0IGNvbnN0IGlzRW1wdHlWYWx1ZSA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgPT5cbiAgIXZhbHVlICYmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuZXhwb3J0IGNvbnN0IGlzVmFsdWUgPSA8VD4odmFsdWU6IFQpOiB2YWx1ZSBpcyBFeGNsdWRlPFQsIG51bGwgfCB1bmRlZmluZWQ+ID0+ICFpc0VtcHR5VmFsdWUodmFsdWUpXG5leHBvcnQgY29uc3Qgbm9vcCA9ICgpID0+IHVuZGVmaW5lZFxuXG5leHBvcnQgY29uc3QgY3JlYXRlQ29uc3RhbnRzID0gPEsgZXh0ZW5kcyBzdHJpbmc+KC4uLmNvbnN0YW50czogS1tdKSA9PiB7XG4gIHJldHVybiBjb25zdGFudHMucmVkdWNlPHsgW1AgaW4gS106IFAgfT4oKGFjYywgY29uc3RhbnQpID0+IHtcbiAgICBhY2NbY29uc3RhbnRdID0gY29uc3RhbnRcbiAgICByZXR1cm4gYWNjXG4gIH0sIHt9IGFzIHsgW1AgaW4gS106IFAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IHBpY2sgPSA8VFZhbHVlIGV4dGVuZHMgQW55T2JqZWN0PihvYmo6IFRWYWx1ZSwgLi4ucHJvcHM6IChrZXlvZiBUVmFsdWUpW10pID0+IHtcbiAgcmV0dXJuIHByb3BzLnJlZHVjZSgocmVzdWx0LCBwcm9wKSA9PiB7XG4gICAgcmVzdWx0W3Byb3BdID0gb2JqW3Byb3BdXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9LCB7fSBhcyBhbnkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbWl0PFQgZXh0ZW5kcyBBbnlPYmplY3QsIFAgZXh0ZW5kcyBzdHJpbmdbXT4ob2JqOiBULCAuLi5wcm9wczogUCk6IE9taXQ8VCwgUFtudW1iZXJdPiB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4ub2JqIH1cbiAgcHJvcHMuZm9yRWFjaChwcm9wID0+IHtcbiAgICBkZWxldGUgcmVzdWx0W3Byb3BdXG4gIH0pXG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGNvbnN0IGdldCA9IChvYmo6IEFueU9iamVjdCwgcGF0aDogc3RyaW5nLCBkZWZWYWx1ZT86IHVua25vd24pOiBhbnkgPT4ge1xuICBpZiAoIXBhdGgpIHJldHVybiB1bmRlZmluZWRcbiAgY29uc3QgcGF0aEFycmF5ID0gKEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5tYXRjaCgvKFteWy5cXF1dKSsvZykpIGFzIHN0cmluZ1tdXG4gIGNvbnN0IHJlc3VsdCA9IHBhdGhBcnJheS5yZWR1Y2UoKHByZXZPYmo6IEFueU9iamVjdCwga2V5OiBzdHJpbmcpID0+IHByZXZPYmogJiYgcHJldk9ialtrZXldLCBvYmopXG4gIC8vIElmIGZvdW5kIHZhbHVlIGlzIHVuZGVmaW5lZCByZXR1cm4gZGVmYXVsdCB2YWx1ZTsgb3RoZXJ3aXNlIHJldHVybiB0aGUgdmFsdWVcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmVmFsdWUgOiByZXN1bHRcbn1cblxuZXhwb3J0IGNvbnN0IHNldCA9IChvYmo6IEFueU9iamVjdCwgcGF0aDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4ge1xuICBjb25zdCBwYXRoQXJyYXkgPSAoQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGggOiBwYXRoLm1hdGNoKC8oW15bLlxcXV0pKy9nKSkgYXMgc3RyaW5nW11cblxuICByZXR1cm4gcGF0aEFycmF5LnJlZHVjZSgoYWNjLCBrZXksIGkpID0+IHtcbiAgICBpZiAoYWNjW2tleV0gPT09IHVuZGVmaW5lZCkgYWNjW2tleV0gPSB7fVxuICAgIGlmIChpID09PSBwYXRoQXJyYXkubGVuZ3RoIC0gMSkgYWNjW2tleV0gPSB2YWx1ZVxuICAgIHJldHVybiBhY2Nba2V5XVxuICB9LCBvYmopXG59XG5cbmV4cG9ydCBjb25zdCBoZXhUb1JnYiA9IChoZXg6IHN0cmluZykgPT4ge1xuICBjb25zdCByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KVxuXG4gIHJldHVybiByZXN1bHRcbiAgICA/IHtcbiAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXG4gICAgICAgIGc6IHBhcnNlSW50KHJlc3VsdFsyXSwgMTYpLFxuICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KVxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCByZ2JUb1JnYmEgPSAocmdiOiBzdHJpbmcsIGFscGhhID0gMSk6IHN0cmluZyA9PiByZ2IucmVwbGFjZSgnKScsIGAsICR7YWxwaGF9KWApLnJlcGxhY2UoJ3JnYicsICdyZ2JhJylcblxuZXhwb3J0IGNvbnN0IG1lcmdlID0gbG9kYXNoTWVyZ2VcblxuZXhwb3J0IGNvbnN0IGRldmljZXMgPSBbJ2Rlc2t0b3AnLCAnbGFwdG9wJywgJ3RhYmxldCcsICdtb2JpbGUnXSBhcyBjb25zdFxuXG5leHBvcnQgY29uc3QgQlJFQUtQT0lOVFMgPSB7XG4gIG1vYmlsZTogMzIwLFxuICB0YWJsZXQ6IDc2OCxcbiAgbGFwdG9wOiAxMDI0LFxuICBkZXNrdG9wOiAxOTIwXG59IGFzIGNvbnN0XG5cbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnXG5leHBvcnQgKiBmcm9tICcuL2l0ZXJhdG9yJ1xuIiwiaW1wb3J0IHsgQW55T2JqZWN0LCBEZXZpY2UsIGRldmljZXMsIGlzVmFsdWUsIGl0ZXJhdG9yIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5cbmNvbnN0IGlzVmFsaWREZXZpY2VTdGF0ZSA9IChzdGF0ZTogQW55T2JqZWN0ID0ge30pID0+XG4gIHR5cGVvZiBzdGF0ZSA9PT0gJ29iamVjdCcgJiYgaXNWYWx1ZShzdGF0ZSkgJiYgZGV2aWNlcy5ldmVyeShkZXZpY2UgPT4gZGV2aWNlIGluIHN0YXRlKVxuXG5leHBvcnQgY29uc3QgZ2V0RGV2aWNlU3RhdGUgPSAoc3RhdGU/OiB1bmtub3duLCBkZXZpY2U6IERldmljZSA9ICdkZXNrdG9wJyk6IHVua25vd24gPT4ge1xuICBpZiAoIXN0YXRlKSByZXR1cm4ge31cblxuICByZXR1cm4gaXRlcmF0b3Ioc3RhdGUsIChfa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGlmIChpc1ZhbGlkRGV2aWNlU3RhdGUodmFsdWUpKSB7XG4gICAgICAvLyBjb25zdCBwcm94eVJ1bGVzID0geyAuLi52YWx1ZSB9XG4gICAgICAvL1xuICAgICAgLy8gZGV2aWNlcy5mb3JFYWNoKGRldmljZVByb3AgPT4ge1xuICAgICAgLy8gICBpZiAoZGV2aWNlUHJvcCAhPT0gZGV2aWNlKSB7XG4gICAgICAvLyAgICAgZGVsZXRlIHByb3h5UnVsZXNbZGV2aWNlUHJvcF1cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSlcbiAgICAgIC8vXG4gICAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZSwgcHJveHlSdWxlcyk7XG4gICAgICAvLyByZXR1cm4ge1xuICAgICAgLy8gICAuLi5wcm94eVJ1bGVzW2RldmljZV0sXG4gICAgICAvL1xuICAgICAgLy8gfVxuICAgICAgcmV0dXJuIHZhbHVlW2RldmljZV1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfSlcbn1cbiIsImltcG9ydCB7IERldmljZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGV2aWNlU3RhdGUgfSBmcm9tICcuLi9oZWxwZXJzL2dldERldmljZVN0YXRlJ1xuXG5leHBvcnQgY29uc3QgdXNlRGV2aWNlU3RhdGUgPSAoc3RhdGU6IHVua25vd24sIGRldmljZTogRGV2aWNlKSA9PiBnZXREZXZpY2VTdGF0ZShzdGF0ZSwgZGV2aWNlKVxuIiwiaW1wb3J0IHsgQlJFQUtQT0lOVFMsIERldmljZSB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBNdXRhYmxlUmVmIH0gZnJvbSAncHJlYWN0L2hvb2tzJ1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIHdhdGNoUmVmOiBNdXRhYmxlUmVmPEhUTUxFbGVtZW50PlxuICBicmVha3BvaW50cz86IHR5cGVvZiBCUkVBS1BPSU5UU1xufVxuXG5leHBvcnQgY29uc3QgdXNlQ29udGFpbmVyRGV2aWNlID0gKHsgd2F0Y2hSZWYsIGJyZWFrcG9pbnRzID0gQlJFQUtQT0lOVFMgfTogT3B0aW9ucykgPT4ge1xuICBjb25zdCBbZGV2aWNlLCBzZXREZXZpY2VdID0gdXNlU3RhdGU8RGV2aWNlPignZGVza3RvcCcpXG5cbiAgY29uc3QgY2hlY2tEZXZpY2UgPSAocGFyZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHBhcmVudFdpZHRoID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHx8IDBcbiAgICBjb25zdCBmaW5kRGV2aWNlID0gT2JqZWN0LmVudHJpZXMoYnJlYWtwb2ludHMpLmZpbmQoKFssIHZhbHVlXSkgPT4gdmFsdWUgPj0gcGFyZW50V2lkdGgpPy5bMF0gYXMgRGV2aWNlXG5cbiAgICBzZXREZXZpY2UoZmluZERldmljZSlcbiAgfVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHdhdGNoUmVmLmN1cnJlbnQucGFyZW50RWxlbWVudFxuXG4gICAgaWYgKHBhcmVudEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IGNoZWNrRGV2aWNlKHBhcmVudEVsZW1lbnQpKVxuICAgICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShwYXJlbnRFbGVtZW50KVxuXG4gICAgICBjaGVja0RldmljZShwYXJlbnRFbGVtZW50KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgcmV0dXJuIGRldmljZVxufVxuIiwiaW1wb3J0IHsgQW55T2JqZWN0LCBkZXZpY2VzLCBGaXRPcHRpb24sIGhleFRvUmdiLCBpc0VtcHR5VmFsdWUsIGlzVmFsdWUsIHJnYlRvUmdiYSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgRW1pdHRlclR5cGUgfSBmcm9tICdzcmMvcmVuZGVyRHJpdmVyJ1xuaW1wb3J0IHsgaW5qZWN0U3R5bGVSdWxlcywgU3R5bGVSdWxlcyB9IGZyb20gJ3NyYy91dGlscy9pbmplY3RTdHlsZVJ1bGVzJ1xuaW1wb3J0IHsgaXNWYWxpZFN0eWxlS2V5IH0gZnJvbSAnLi9pc1ZhbGlkU3R5bGVLZXknXG5cbi8qKlxuICog0J/Qu9Cw0LPQuNC9INC/0YDQuNC80LXQvdGP0LXRgiDQv9GA0LDQstC40LvQsDog0YHRgtC40LvQuCwgaW5uZXJUZXh0IC4uLlxuICog0JXRgdC70Lgg0LrQvtC90YLQtdC90YLQsCDQvdC10YIsINGC0L4g0J3QvtC00LAg0YHQutGA0YvQstCw0LXRgtGB0Y9cbiAqL1xuXG50eXBlIEN1c3RvbVN0eWxlcyA9IFBhcnRpYWw8XG4gIE9taXQ8U3R5bGVSdWxlcywgJ2JvcmRlcldpZHRoJyB8ICdtaW5IZWlnaHQnIHwgJ21pbldpZHRoJyB8ICdmb250U2l6ZSc+ICYge1xuICAgIG1pbkhlaWdodDogbnVtYmVyXG4gICAgbWluV2lkdGg6IG51bWJlclxuICAgIGZvbnRTaXplOiBudW1iZXJcbiAgfVxuPlxuXG5kZWNsYXJlIG1vZHVsZSAnc3JjL3JlbmRlckRyaXZlcicge1xuICBpbnRlcmZhY2UgUmVuZGVyRHJpdmVyUnVsZSBleHRlbmRzIEN1c3RvbVN0eWxlcyB7XG4gICAgaW5uZXJIVE1MPzogc3RyaW5nXG4gICAgaW5uZXJUZXh0Pzogc3RyaW5nXG4gICAgY29ybmVyPzogbnVtYmVyXG4gICAgYmFja2dyb3VuZEZpdD86IEZpdE9wdGlvblxuICAgIGJhY2tncm91bmRDb2xvck9wYWNpdHk/OiBudW1iZXJcbiAgICBpc0JvbGQ/OiBib29sZWFuXG4gICAgaXNJdGFsaWM/OiBib29sZWFuXG4gICAgaXNUaHJvdWdoPzogYm9vbGVhblxuICAgICRhdHRycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj5cbiAgfVxufVxuXG5jb25zdCB3cmFwVG8gPSAodmFsdWU6IHN0cmluZyB8IG51bWJlciwgdW50aWw6ICclJyB8ICdweCcpID0+IGAke3ZhbHVlfSR7dW50aWx9YFxuXG5jb25zdCB0b1B4ID0gKGtleTogc3RyaW5nKSA9PiBrZXkuc3RhcnRzV2l0aCgncHhfJylcbmNvbnN0IHRvUGVyY2VudCA9IChrZXk6IHN0cmluZykgPT4ga2V5LnN0YXJ0c1dpdGgoJ3BlcmNlbnRfJylcblxuY29uc3QgZm9ybWF0UnVsZSA9IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICBsZXQgbmV3S2V5ID0ga2V5XG4gIGxldCBuZXdWYWx1ZSA9IHZhbHVlXG5cbiAgaWYgKHRvUHgobmV3S2V5KSkge1xuICAgIG5ld0tleSA9IG5ld0tleS5yZXBsYWNlKCdweF8nLCAnJylcbiAgICBuZXdWYWx1ZSA9IHdyYXBUbyh2YWx1ZSwgJ3B4JylcbiAgfVxuICBpZiAodG9QZXJjZW50KG5ld0tleSkpIHtcbiAgICBuZXdLZXkgPSBuZXdLZXkucmVwbGFjZSgncGVyY2VudF8nLCAnJylcbiAgICBuZXdWYWx1ZSA9IHdyYXBUbyh2YWx1ZSwgJyUnKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBrZXk6IG5ld0tleSxcbiAgICB2YWx1ZTogbmV3VmFsdWVcbiAgfVxufVxuXG5jb25zdCBERUZBVUxUX1RPX1BYID0gW1xuICAnYm9yZGVyV2lkdGgnLFxuICAnYm9yZGVyTGVmdFdpZHRoJyxcbiAgJ2JvcmRlclJpZ2h0V2lkdGgnLFxuICAnYm9yZGVyVG9wV2lkdGgnLFxuICAnYm9yZGVyQm90dG9tV2lkdGgnLFxuICAnbWluSGVpZ2h0JyxcbiAgJ21pbldpZHRoJyxcbiAgJ21heFdpZHRoJyxcbiAgJ21heEhlaWdodCcsXG4gICdmb250U2l6ZScsXG4gICdoZWlnaHQnLFxuICAnd2lkdGgnLFxuICAnbGV0dGVyU3BhY2luZycsXG4gICdmb250U2l6ZScsXG4gICdsZWZ0JyxcbiAgJ3JpZ2h0JyxcbiAgJ3RvcCcsXG4gICdib3R0b20nXG5dXG5cbmV4cG9ydCBjb25zdCBwYXJzZVJ1bGVzID0gKHJ1bGVzOiBBbnlPYmplY3QsIGxheWVyPzogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhydWxlcylcblxuICBpZiAoa2V5cy5pbmNsdWRlcygnaW5uZXJIVE1MJykgfHwga2V5cy5pbmNsdWRlcygnaW5uZXJUZXh0JykpIHtcbiAgICBjb25zb2xlLndhcm4oYFdhcm5pbmchIElubmVySFRNTCBhbmQgaW5uZXJUZXh0IGlzIGRlcHJlY2F0ZWQuIFVzZSBcImNoaWxkcmVuXCIgcHJvcGVydHkuYCwgbGF5ZXIpXG4gIH1cblxuICBpZiAodHlwZW9mIHJ1bGVzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBydWxlc1xuICB9XG5cbiAgaWYgKCd0eXBvZ3JhcGh5JyBpbiBydWxlcyAmJiAnYWNjZW50VHlwb2dyYXBoeScgaW4gcnVsZXMpIHtcbiAgICBjb25zdCB0eXBvZ3JhcGh5ID0gcnVsZXMudHlwb2dyYXBoeVxuICAgIGNvbnN0IGFjY2VudFR5cG9ncmFwaHkgPSBydWxlcy5hY2NlbnRUeXBvZ3JhcGh5XG5cbiAgICBydWxlcyA9IHtcbiAgICAgIC4uLnJ1bGVzLFxuICAgICAgLi4udHlwb2dyYXBoeSxcbiAgICAgICctLWFjY2VudC1jb2xvcic6IGFjY2VudFR5cG9ncmFwaHkuY29sb3IsXG4gICAgICAncHhfLS1hY2NlbnQtc2l6ZSc6IGFjY2VudFR5cG9ncmFwaHkuZm9udFNpemVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocnVsZXMpLnJlZHVjZSgoYWNjLCBbcHJvcEtleSwgcHJvcFZhbHVlXSkgPT4ge1xuICAgIGlmIChERUZBVUxUX1RPX1BYLmluY2x1ZGVzKHByb3BLZXkpKSB7XG4gICAgICBwcm9wVmFsdWUgPSB3cmFwVG8ocHJvcFZhbHVlLCAncHgnKVxuICAgIH1cblxuICAgIGNvbnN0IHsga2V5LCB2YWx1ZSB9ID0gZm9ybWF0UnVsZShwcm9wS2V5LCBwcm9wVmFsdWUpXG4gICAgYWNjW2tleV0gPSB2YWx1ZVxuXG4gICAgaWYgKGtleSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgIGFjYy5pbm5lckhUTUwgPSBpc1ZhbHVlKHZhbHVlKSA/IGAke3ZhbHVlfWAgOiAnJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpbm5lclRleHQnKSB7XG4gICAgICBhY2MuaW5uZXJUZXh0ID0gaXNWYWx1ZSh2YWx1ZSkgPyBgJHt2YWx1ZX1gIDogJydcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnY2hpbGRyZW4nKSB7XG4gICAgICBhY2MuY2hpbGRyZW4gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gKGlzVmFsdWUodmFsdWUpID8gYCR7dmFsdWV9YCA6ICcnKSA6IHZhbHVlXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lubmVySFRNTCcgfHwga2V5ID09PSAnaW5uZXJUZXh0JyB8fCAoa2V5ID09PSAnY2hpbGRyZW4nICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpKSB7XG4gICAgICBpZiAocHJvcFZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBhY2MuZGlzcGxheSA9ICdub25lJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkuaW5jbHVkZXMoJ2JvcmRlcldpZHRoJykpIHtcbiAgICAgIGFjYy5ib3JkZXJTdHlsZSA9ICdzb2xpZCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnY29ybmVyJykge1xuICAgICAgYWNjLmJvcmRlclJhZGl1cyA9IHdyYXBUbyh2YWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYmFja2dyb3VuZEZpdCcpIHtcbiAgICAgIGFjYy5iYWNrZ3JvdW5kU2l6ZSA9IHZhbHVlIGFzIEZpdE9wdGlvblxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdiYWNrZ3JvdW5kSW1hZ2UnKSB7XG4gICAgICBhY2MuYmFja2dyb3VuZEltYWdlID0gYHVybCgke3ZhbHVlfSlgXG4gICAgICBhY2MuYmFja2dyb3VuZFJlcGVhdCA9ICduby1yZXBlYXQnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JhY2tncm91bmRDb2xvck9wYWNpdHknICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvck9wYWNpdHkpICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvcikpIHtcbiAgICAgIGNvbnN0IHJnYiA9IGhleFRvUmdiKGFjYy5iYWNrZ3JvdW5kQ29sb3IpXG4gICAgICBpZiAocmdiKSB7XG4gICAgICAgIGFjYy5iYWNrZ3JvdW5kQ29sb3IgPSByZ2JUb1JnYmEoYHJnYigke3JnYi5yfSwgJHtyZ2IuZ30sICR7cmdiLmJ9KWAsICthY2MuYmFja2dyb3VuZENvbG9yT3BhY2l0eSAvIDEwMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaXNCb2xkJykge1xuICAgICAgYWNjLmZvbnRXZWlnaHQgPSB2YWx1ZSA/ICdib2xkJyA6ICdpbml0aWFsJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpc0l0YWxpYycpIHtcbiAgICAgIGFjYy5mb250U3R5bGUgPSB2YWx1ZSA/ICdpdGFsaWMnIDogJ2luaXRpYWwnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lzVGhyb3VnaCcpIHtcbiAgICAgIGFjYy50ZXh0RGVjb3JhdGlvbiA9IHZhbHVlID8gJ2xpbmUtdGhyb3VnaCcgOiAnaW5pdGlhbCdcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIHJ1bGVzKVxufVxuIiwiaW1wb3J0IHsgcGFyc2VSdWxlcyB9IGZyb20gJy4uL2hlbHBlcnMvcGFyc2VSdWxlcydcbmltcG9ydCB7IEFueU9iamVjdCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG5jb25zdCBpc1ZhbGlkUnVsZSA9IChydWxlOiBBbnlPYmplY3QpID0+IHR5cGVvZiBydWxlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShydWxlKSAmJiAncGFyZW50JyBpbiBydWxlXG5cbmV4cG9ydCBjb25zdCB1c2VQYXJzZVJ1bGVzID0gKHN0YXRlOiB1bmtub3duKSA9PlxuICBPYmplY3QuZW50cmllcyhzdGF0ZSkucmVkdWNlKChhY2MsIFtsYXllciwgcnVsZV0pID0+IHtcbiAgICBhY2NbbGF5ZXJdID0gaXNWYWxpZFJ1bGUocnVsZSkgPyBwYXJzZVJ1bGVzKHsgLi4uc3RhdGVbbGF5ZXJdIH0sIGxheWVyKSA6IHJ1bGVcblxuICAgIHJldHVybiBhY2NcbiAgfSwge30pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGNoaWxkcmVuOiBzdHJpbmdcbn1cblxuY29uc3QgRGlzcGxheVRleHQ6IEZDPFByb3BzPiA9ICh7IGNoaWxkcmVuLCAuLi5yZXN0IH0pID0+IHtcbiAgY29uc3QgZm9ybWF0VmFsdWUgPSBjaGlsZHJlbj8ucmVwbGFjZSgnc2NyaXB0JywgJycpPy5yZXBsYWNlKC97eyguKj8pfX0vZywgYDxzcGFuPiQxPC9zcGFuPmApXG5cbiAgcmV0dXJuIDxkaXYgey4uLnJlc3R9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogZm9ybWF0VmFsdWUgfX0gLz5cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlzcGxheVRleHRcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZVRvZ2dsZSA9ICgpID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIHJldHVybiBbaXNPcGVuLCAoKSA9PiBzZXRJc09wZW4ocHJldiA9PiAhcHJldildXG59XG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmNvbnN0IENsb3NlSWNvbjogRkMgPSAoKSA9PiAoXG4gIDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyNCAyNCc+XG4gICAgPHBhdGhcbiAgICAgIGQ9J00xNy42NTkgNC45MjlhMSAxIDAgMSAxIDEuNDE0IDEuNDE0TDEzLjQxNiAxMmw1LjY1NyA1LjY1N2ExIDEgMCAwIDEtMS40MTUgMS40MTRsLTUuNjU2LTUuNjU3LTUuNjU3IDUuNjU3YTEgMSAwIDAgMS0xLjQxNC0xLjQxNEwxMC41ODcgMTIgNC45MzEgNi4zNDNBMSAxIDAgMSAxIDYuMzQ1IDQuOTNsNS42NTcgNS42NTcgNS42NTYtNS42NTdaJ1xuICAgICAgZmlsbD0nY3VycmVudENvbG9yJ1xuICAgID48L3BhdGg+XG4gIDwvc3ZnPlxuKVxuXG5leHBvcnQgZGVmYXVsdCBDbG9zZUljb25cbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcblxuY29uc3QgR2lmdEljb246IEZDID0gKCkgPT4gKFxuICA8c3ZnIHZpZXdCb3g9JzAgMCAxNiAxNic+XG4gICAgPHBhdGhcbiAgICAgIGZpbGw9J2N1cnJlbnRDb2xvcidcbiAgICAgIGZpbGxSdWxlPSdldmVub2RkJ1xuICAgICAgZD0nTTIuMTMgOEg3djcuMzFIMy4yMmExLjA5IDEuMDkgMCAwMS0xLjA5LTEuMDl6TTkgMTUuMzRoMy44MWExLjA5IDEuMDkgMCAwMDEuMDktMS4wOVY4SDl6bTUuOC05Ljk0djEuMTlhLjQ4LjQ4IDAgMDEtLjQ4LjQ4SDEuNzFhLjQ4LjQ4IDAgMDEtLjQ4LS40OFY1LjRjMC0uNTk2LjQ4NC0xLjA4IDEuMDgtMS4wOEg1YTIuNDggMi40OCAwIDAxLTEuNDctMS42NSAxLjYyIDEuNjIgMCAwMS4yNi0xLjQgMS41NyAxLjU3IDAgMDExLS41OGMuMTEtLjAxLjIyLS4wMS4zMyAwYTIuNSAyLjUgMCAwMTIgMUE5IDkgMCAwMTggMy4yMmExMC4zOCAxMC4zOCAwIDAxLjkxLTEuNTQgMi40OSAyLjQ5IDAgMDExLjkzLTFoLjM2Yy4zNjkuMDY1LjcwMi4yNi45NC41NS4zMS40MDcuNDE0LjkzNi4yOCAxLjQzYTIuNDggMi40OCAwIDAxLTEuNDUgMS42NGgyLjc3YTEuMDggMS4wOCAwIDAxMS4wMyAxLjF6TTguNjYgNGE5LjgxIDkuODEgMCAwMDEuOS0uNTUgMS41MiAxLjUyIDAgMDAuODgtMSAuNjguNjggMCAwMC0uMS0uNTkuNi42IDAgMDAtLjM0LS4yMi41OC41OCAwIDAwLS4xOCAwIDEuNTIgMS41MiAwIDAwLTEuMTcuNjNBOS4wNiA5LjA2IDAgMDA4LjY2IDR6bS0zLjMyLS41OEE5LjYyIDkuNjIgMCAwMDcuMjUgNGE4LjU5IDguNTkgMCAwMC0xLTEuNzIgMS41MSAxLjUxIDAgMDAtMS4xOC0uNjNoLS4xM2EuNjYuNjYgMCAwMC0uMzkuMjIuNjYuNjYgMCAwMC0uMDkuNTdjLjEzLjQ0My40NTMuODA0Ljg4Ljk4eidcbiAgICA+PC9wYXRoPlxuICA8L3N2Zz5cbilcblxuZXhwb3J0IGRlZmF1bHQgR2lmdEljb25cbiIsImltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgJ3NyYy9oZWxwZXJzL3Jlc2V0LnNjc3MnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlR2lmdE9wZW4gfSBmcm9tICdzcmMvaG9va3MvdXNlR2lmdE9wZW4nXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlRGV2aWNlU3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVRvZ2dsZSdcbmltcG9ydCBDbG9zZUljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvQ2xvc2VJY29uJ1xuaW1wb3J0IEdpZnRJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0dpZnRJY29uJ1xuXG5jb25zdCBTaW1wbGVHaWZ0ID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IFtsZWdhbElzT3BlbiwgdG9nZ2xlTGVnYWxJc09wZW5dID0gdXNlVG9nZ2xlKClcbiAgY29uc3QgeyBpc09wZW4sIG9uVG9nZ2xlIH0gPSB1c2VHaWZ0T3BlbigpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgd2F0Y2hSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VEZXZpY2VTdGF0ZShzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cbiAgY29uc3QgaGFzSWNvbiA9IHJ1bGVzPy5pY29uPy5oYXNJY29uXG5cbiAgY29uc3QgYXJyb3dSdWxlcyA9IHtcbiAgICBsZWZ0OiBgJHsrKGRldmljZVN0YXRlPy5jb250YWluZXI/LmxlZnQgfHwgMCkgKiAtMSArIDh9cHhgLFxuICAgIGJhY2tncm91bmRDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJUb3BDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyVG9wU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyTGVmdFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJMZWZ0Q29sb3I6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlckNvbG9yLFxuICAgIGJvcmRlckxlZnRTdHlsZTogJ3NvbGlkJ1xuICB9XG5cbiAgY29uc3QgYm9keVJ1bGVzID0ge1xuICAgIGxlZnQ6IHJ1bGVzPy5jb250YWluZXI/LmxlZnRcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fSByZWY9e3Jvb3RSZWZ9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29ufSBzdHlsZT17cnVsZXMuaWNvbn0gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICB7aGFzSWNvbiAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uVGFyZ2V0fT5cbiAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYm9keSwgeyBbc3R5bGVzLmJvZHlPcGVuXTogaXNPcGVuIH0pfSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5hcnJvd30gc3R5bGU9e2Fycm93UnVsZXN9PjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNsb3NlfSBzdHlsZT17cnVsZXMuY2xvc2V9IG9uQ2xpY2s9e29uVG9nZ2xlfT5cbiAgICAgICAgICA8Q2xvc2VJY29uIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0gc3R5bGU9e3J1bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICAgICAgICByZWw9XCJub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT0nc2ltcGxlR2lmdC1ib2R5X19vZmZlcidcbiAgICAgICAgICAgIGRhdGEtbGF5ZXI9J29mZmVyJ1xuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaW5uZXJ9PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfT48L2Rpdj5cbiAgICAgICAgICAgICAgPERpc3BsYXlUZXh0IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXtydWxlcy50ZXh0fT5cbiAgICAgICAgICAgICAgICB7cnVsZXM/LnRleHQ/LmNoaWxkcmVufVxuICAgICAgICAgICAgICA8L0Rpc3BsYXlUZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMubGVnYWwsIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy5sZWdhbE9wZW5dOiBsZWdhbElzT3BlblxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBzdHlsZT17cnVsZXMubGVnYWx9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGVnYWxUZXh0fT5cbiAgICAgICAgICAgICAgPHNwYW4+e3J1bGVzPy5sZWdhbD8uY2hpbGRyZW59PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbEJ1dHRvbn0gb25DbGljaz17dG9nZ2xlTGVnYWxJc09wZW59PlxuICAgICAgICAgICAgICAgIHtsZWdhbElzT3BlbiA/IHJ1bGVzPy5sZWdhbD8uYnV0dG9uT3BlblRleHQgOiBydWxlcz8ubGVnYWw/LmJ1dHRvbkhpZGVUZXh0fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVHaWZ0IC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuXG5jb25zdCBCb251c0NhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxhIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfSB0YXJnZXQ9J19ibGFuaycgcmVsPVwibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlclwiIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgW3N0eWxlcy52YXJpYW50Ml06IHJ1bGVzLnJvb3Q/LnZhcmlhbnQgPT09ICd2YXJpYW50MidcbiAgICB9KX0gc3R5bGU9e3J1bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5saW5lfSBzdHlsZT17cnVsZXMubGluZX0gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17cnVsZXMudGV4dH0+XG4gICAgICAgICAgPERpc3BsYXlUZXh0PntydWxlcy50ZXh0Py5jaGlsZHJlbn08L0Rpc3BsYXlUZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25UZXh0fT57cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtydWxlcy5sZWdhbH0+XG4gICAgICAgIHtydWxlcy5sZWdhbD8uY2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9udXNDYXJkXG4iLCJpbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCAnc3JjL2hlbHBlcnMvcmVzZXQuc2NzcydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VHaWZ0T3BlbiB9IGZyb20gJ3NyYy9ob29rcy91c2VHaWZ0T3BlbidcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VEZXZpY2VTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgQ2xvc2VJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbidcbmltcG9ydCBHaWZ0SWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9HaWZ0SWNvbidcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBCb251c0NhcmQgZnJvbSAnLi9jb21wb25lbnRzL0JvbnVzQ2FyZCdcblxuY29uc3QgQ29tcGxleEdpZnQgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgeyBpc09wZW4sIG9uVG9nZ2xlIH0gPSB1c2VHaWZ0T3BlbigpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgd2F0Y2hSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VEZXZpY2VTdGF0ZShzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cbiAgY29uc3QgaGFzSWNvbiA9IHJ1bGVzPy5pY29uPy5oYXNJY29uXG5cbiAgY29uc3QgYXJyb3dSdWxlcyA9IHtcbiAgICBsZWZ0OiBgJHsrKGRldmljZVN0YXRlPy5jb250YWluZXI/LmxlZnQgfHwgMCkgKiAtMSArIDh9cHhgLFxuICAgIGJhY2tncm91bmRDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJUb3BDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyVG9wU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyTGVmdFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJMZWZ0Q29sb3I6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlckNvbG9yLFxuICAgIGJvcmRlckxlZnRTdHlsZTogJ3NvbGlkJ1xuICB9XG5cbiAgY29uc3QgYm9keVJ1bGVzID0ge1xuICAgIGxlZnQ6IHJ1bGVzPy5jb250YWluZXI/LmxlZnRcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3Jvb3RSZWZ9IGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29ufSBzdHlsZT17cnVsZXMuaWNvbn0gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICB7aGFzSWNvbiAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uVGFyZ2V0fT5cbiAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYm9keSwge1xuICAgICAgICAgIFtzdHlsZXMuYm9keU9wZW5dOiBpc09wZW5cbiAgICAgICAgfSl9XG4gICAgICAgIHN0eWxlPXtib2R5UnVsZXN9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYXJyb3d9IHN0eWxlPXthcnJvd1J1bGVzfT48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9IHN0eWxlPXtydWxlcy5jb250YWluZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2xvc2V9IHN0eWxlPXtydWxlcy5jbG9zZX0gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICAgICAgPENsb3NlSWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucHJvbW90aW9ufSBzdHlsZT17cnVsZXMucHJvbW90aW9ufT5cbiAgICAgICAgICAgIHtydWxlcy5wcm9tb3Rpb24/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZH0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRJY29ufT5cbiAgICAgICAgICAgICAgPEdpZnRJY29uIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZFRpdGxlfSBzdHlsZT17cnVsZXMudGl0bGV9PlxuICAgICAgICAgICAgICB7cnVsZXMudGl0bGU/LmNoaWxkcmVufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmlubmVyfT5cbiAgICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e2NoaWxkfT5cbiAgICAgICAgICAgICAgICA8Qm9udXNDYXJkIC8+XG4gICAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxDb21wbGV4R2lmdCAvPilcbiIsImV4cG9ydCBjb25zdCBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggPSAodGV4dEFsaWduPzogc3RyaW5nKSA9PlxuICB0ZXh0QWxpZ24gPyB7IGxlZnQ6ICdmbGV4LXN0YXJ0JywgY2VudGVyOiAnY2VudGVyJywgcmlnaHQ6ICdmbGV4LWVuZCcgfVt0ZXh0QWxpZ25dIDogdGV4dEFsaWduXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcblxuY29uc3QgTGluZTogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fSBzdHlsZT17cnVsZXMucm9vdH0+XG4gICAgICA8RGlzcGxheVRleHQ+e3J1bGVzPy5yb290Py5jaGlsZHJlbn08L0Rpc3BsYXlUZXh0PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IExpbmVcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHNldCB9IGZyb20gXCJAYWRzdG9yZS91dGlsc1wiO1xuaW1wb3J0ICdzcmMvaGVscGVycy9yZXNldC5zY3NzJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlRGV2aWNlU3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggfSBmcm9tIFwic3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4XCI7XG5pbXBvcnQgTGluZSBmcm9tICcuL2NvbXBvbmVudHMvbGluZSdcblxuY29uc3QgU2ltcGxlUG9wdXA6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHdhdGNoUmVmOiByb290UmVmIH0pXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VEZXZpY2VTdGF0ZShzdGF0ZSwgZGV2aWNlKVxuXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2J1dHRvbi5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmJ1dHRvbj8ud2lkdGgpXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2xlZ2FsLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8ubGVnYWw/LndpZHRoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgYWxpZ25JdGVtczogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LmFsaWduKVxuICB9XG5cbiAgY29uc3QgYnV0dG9uUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmJ1dHRvbixcbiAgICBqdXN0aWZ5Q29udGVudDogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LnRleHRBbGlnbilcbiAgfVxuXG4gIGNvbnN0IGxlZ2FsUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmxlZ2FsLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD1cIm5vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLnRhYmxldF06IGRldmljZSA9PT0gJ3RhYmxldCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9IHN0eWxlPXtib2R5UnVsZXN9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfS8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0+XG4gICAgICAgICAgeyhydWxlcz8uY29udGVudCB8fCBbXSkubWFwKGVsID0+IChcbiAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e2VsfT5cbiAgICAgICAgICAgICAgPExpbmUgLz5cbiAgICAgICAgICAgIDwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtidXR0b25SdWxlc30+XG4gICAgICAgICAge2J1dHRvblJ1bGVzPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtsZWdhbFJ1bGVzfT5cbiAgICAgICAgICB7bGVnYWxSdWxlcz8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlUG9wdXAgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5cbmNvbnN0IEJvbnVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IGRldmljZSA9IHN0YXRlPy5kZXZpY2UgfHwgJ2Rlc2t0b3AnXG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD1cIm5vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfSBzdHlsZT17cnVsZXMuaGVhZGVyfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30+PC9kaXY+XG4gICAgICAgICAgPERpc3BsYXlUZXh0IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXtydWxlcy50ZXh0fT5cbiAgICAgICAgICAgIHtydWxlcy50ZXh0Py5jaGlsZHJlbn1cbiAgICAgICAgICA8L0Rpc3BsYXlUZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17cnVsZXMubGVnYWx9PlxuICAgICAgICAgICAge3J1bGVzLmxlZ2FsPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9udXNcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IGdldCwgc2V0IH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgJ3NyYy9oZWxwZXJzL3Jlc2V0LnNjc3MnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VEZXZpY2VTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBCb251cyBmcm9tICcuL2NvbXBvbmVudHMvQm9udXMnXG5cbmNvbnN0IFNpbXBsZVBvcHVwOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB3YXRjaFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlRGV2aWNlU3RhdGUoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGV9IHN0eWxlPXtydWxlcy50aXRsZX0+XG4gICAgICAgICAge3J1bGVzLnRpdGxlPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMud3JhcHBlcn0+XG4gICAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT5cbiAgICAgICAgICAgICAgPEJvbnVzIC8+XG4gICAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZVBvcHVwIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuXG5jb25zdCBNYXRjaDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBkZXZpY2UgPSBzdGF0ZT8uZGV2aWNlIHx8ICdkZXNrdG9wJ1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgfSl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWZ0fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtc30+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWFndWV9IHN0eWxlPXtydWxlcy5sZWFndWV9PntydWxlcy5sZWFndWU/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1zfT57cnVsZXMudGVhbXM/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yaWdodH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PtCd0KzQrtCa0JDQodCbPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cnVsZXMub2RkTGFiZWx9PntydWxlcy5vZGRMYWJlbD8uY2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRWYWx1ZX0gc3R5bGU9e3J1bGVzLm9kZFZhbHVlfT57cnVsZXMub2RkVmFsdWU/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299Lz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbXN9PtCb0JjQlNChPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0Y2hcbiIsImltcG9ydCB7IEZDLCB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHNldCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0ICdzcmMvaGVscGVycy9yZXNldC5zY3NzJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlRGV2aWNlU3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXggfSBmcm9tIFwic3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4XCI7XG5pbXBvcnQgTWF0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9NYXRjaFwiO1xuXG5jb25zdCBTaW1wbGVQb3B1cDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgd2F0Y2hSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZURldmljZVN0YXRlKHN0YXRlLCBkZXZpY2UpXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2J1dHRvbldyYXBwZXIucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5idXR0b25XcmFwcGVyPy53aWR0aClcbiAgc2V0KGRldmljZVN0YXRlLCAnbGVnYWwucGVyY2VudF93aWR0aCcsIGRldmljZVN0YXRlPy5sZWdhbD8ud2lkdGgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMucm9vdCxcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCBjb250ZW50UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMuY29udGVudCxcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCB0ZXh0UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMudGV4dCxcbiAgICB0ZXh0QWxpZ246IHJ1bGVzLnJvb3Q/LmFsaWduXG4gIH1cblxuICBjb25zdCBidXR0b25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uYnV0dG9uLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgY29uc3QgbGVnYWxSdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8ubGVnYWwsXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPVwibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJyxcbiAgICAgICAgW3N0eWxlcy50YWJsZXRdOiBkZXZpY2UgPT09ICd0YWJsZXQnXG4gICAgICB9KX1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9IHN0eWxlPXtib2R5UnVsZXN9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGV9IHN0eWxlPXtydWxlcy50aXRsZX0+XG4gICAgICAgICAgICB7cnVsZXMudGl0bGU/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLndyYXBwZXJ9IHN0eWxlPXtjb250ZW50UnVsZXN9PlxuICAgICAgICAgIHsocnVsZXMuY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXt7IC4uLmNoaWxkLCBkZXZpY2UgfX0+XG4gICAgICAgICAgICAgIDxNYXRjaCAvPlxuICAgICAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxEaXNwbGF5VGV4dCBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fSBzdHlsZT17dGV4dFJ1bGVzfT5cbiAgICAgICAgICB7cnVsZXMudGV4dD8uY2hpbGRyZW59XG4gICAgICAgIDwvRGlzcGxheVRleHQ+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9uV3JhcHBlcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25IZWFkfSBzdHlsZT17cnVsZXMuYnV0dG9uSGVhZH0+XG4gICAgICAgICAgICB7cnVsZXMuYnV0dG9uSGVhZD8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25UYXJnZXR9IHN0eWxlPXtidXR0b25SdWxlc30+XG4gICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtsZWdhbFJ1bGVzfT5cbiAgICAgICAgICB7cnVsZXMubGVnYWw/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZVBvcHVwIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVRvZ2dsZSdcblxuXG5jb25zdCBCb251czogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBbaXNPcGVuLCB0b2dnbGVJc09wZW5dID0gdXNlVG9nZ2xlKClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0gc3R5bGU9e3J1bGVzLnJvb3R9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5iYWNrZ3JvdW5kfSBzdHlsZT17cnVsZXMuYmFja2dyb3VuZH0gLz5cbiAgICAgIDxhIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfSB0YXJnZXQ9J19ibGFuaycgcmVsPVwibm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlclwiIGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93Rmlyc3R9IHN0eWxlPXtydWxlcy5yb3dGaXJzdH0+XG4gICAgICAgICAgICB7cnVsZXMucm93Rmlyc3Q/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93U2Vjb25kfSBzdHlsZT17cnVsZXMucm93U2Vjb25kfT5cbiAgICAgICAgICAgIHtydWxlcy5yb3dTZWNvbmQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9va21ha2VyfT53aW5saW5lPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLmxlZ2FsLCB7XG4gICAgICAgICAgW3N0eWxlcy5sZWdhbE9wZW5dOiBpc09wZW5cbiAgICAgICAgfSl9XG4gICAgICAgIHN0eWxlPXtydWxlcy5sZWdhbEluZm99XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsVGV4dH0+XG4gICAgICAgICAgPHNwYW4+e3J1bGVzLmxlZ2FsSW5mbz8uY2hpbGRyZW59PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsQnV0dG9ufSBzdHlsZT17cnVsZXMubGVnYWxJbmZvQnV0dG9ufSBvbkNsaWNrPXt0b2dnbGVJc09wZW59PlxuICAgICAgICAgICAge2lzT3BlbiA/IHJ1bGVzLmxlZ2FsSW5mb0J1dHRvbj8ub3BlblRleHQgOiBydWxlcy5sZWdhbEluZm9CdXR0b24/LmNsb3NlVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJvbnVzXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VEZXZpY2VTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBCb251cyBmcm9tICcuL2NvbXBvbmVudHMvQm9udXMnXG5cbmNvbnN0IEJvbnVzQ2FyZDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2UgPSAnZGVza3RvcCdcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VEZXZpY2VTdGF0ZShzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cm9vdFJlZn0+XG4gICAgICB7KHJ1bGVzPy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17Y2hpbGR9PlxuICAgICAgICAgIDxCb251cyAvPlxuICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8Qm9udXNDYXJkIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL3Byb21vcy9XaWRlQ2FyZC9pbmRleFwiO1xuXG5jb25zdCBUZXh0OiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogc3RhdGU/LmRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtvbWl0KHJ1bGVzLnJvb3QsIC4uLmJhY2tncm91bmRPcHRpb25zKX1cbiAgICA+XG4gICAgICB7cnVsZXMucm9vdD8uY2hpbGRyZW59XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dFxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL3Byb21vcy9XaWRlQ2FyZC9pbmRleFwiO1xuXG5jb25zdCBNYXRjaGVzOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG5cbiAgY29uc3Qgcm9vdFJ1bGVzID0gb21pdChydWxlcy5yb290LCAuLi5iYWNrZ3JvdW5kT3B0aW9ucylcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkTG9nb30gc3R5bGU9e3Jvb3RSdWxlc30gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMYWJlbH0gc3R5bGU9e3Jvb3RSdWxlc30+MzwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvZWZ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvZWZIZWFkfSBzdHlsZT17cnVsZXMuY29lZn0+WDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvZWZWYWx1ZX0gc3R5bGU9e3Jvb3RSdWxlc30+My45MjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMub2RkLCBzdHlsZXMub2RkUmV2ZXJzZSl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExvZ299IHN0eWxlPXtyb290UnVsZXN9Lz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMYWJlbH0gc3R5bGU9e3Jvb3RSdWxlc30+Mi44PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaGVzXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyBvbWl0IH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gXCJzcmMvcHJvbW9zL1dpZGVDYXJkL2luZGV4XCI7XG5cbmNvbnN0IE1hdGNoZXNPbmVUd286IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogc3RhdGU/LmRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogc3RhdGU/LmRldmljZSA9PT0gJ3RhYmxldCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e29taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGV9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlTGFiZWx9IHN0eWxlPXtydWxlcy50aXRsZUxhYmVsfT5cbiAgICAgICAgICB7cnVsZXMudGl0bGVMYWJlbC5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGVWYWx1ZX0gc3R5bGU9e3J1bGVzLnRpdGxlVmFsdWV9PlxuICAgICAgICAgIHtydWxlcy50aXRsZVZhbHVlLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1Mb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbU5hbWV9PlxuICAgICAgICAgICAge3J1bGVzLnRlYW0xTmFtZS5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1WYWx1ZX0gc3R5bGU9e3J1bGVzLnZhbHVlfT5cbiAgICAgICAgICAgIHtydWxlcy52YWx1ZTEuY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtTmFtZX0+XG4gICAgICAgICAgICB7cnVsZXMudGVhbTJOYW1lLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbVZhbHVlfSBzdHlsZT17cnVsZXMudmFsdWV9PlxuICAgICAgICAgICAge3J1bGVzLnZhbHVlMi5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaGVzT25lVHdvXG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuaW50ZXJmYWNlIFNsaWRlIHtcbiAgYW5pbWF0aW9uRHVyYXRpb246IG51bWJlclxufVxuXG5jb25zdCB1c2VBbmltYXRlZExpc3QgPSAoc2xpZGVzOiBTbGlkZVtdID0gW10pID0+IHtcbiAgY29uc3QgaXRlbXNDb3VudCA9IHNsaWRlcy5sZW5ndGhcbiAgY29uc3QgW2FuaW1hdGVkSWR4LCBzZXRBbmltYXRlZElkeF0gPSB1c2VTdGF0ZTxudW1iZXI+KDApXG4gIGNvbnN0IGFuaW1hdGlvbkR1cmF0aW9uID0gc2xpZGVzW2FuaW1hdGVkSWR4IHx8IDBdPy5hbmltYXRpb25EdXJhdGlvblxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZ29OZXh0ID0gKCkgPT4ge1xuICAgICAgc2V0QW5pbWF0ZWRJZHgoaW5kZXggPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxIDwgaXRlbXNDb3VudCkgcmV0dXJuIGluZGV4ICsgMVxuICAgICAgICByZXR1cm4gMFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dChnb05leHQsIGFuaW1hdGlvbkR1cmF0aW9uKVxuXG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICB9LCBbc2V0QW5pbWF0ZWRJZHgsIGl0ZW1zQ291bnQsIGFuaW1hdGlvbkR1cmF0aW9uLCBhbmltYXRlZElkeF0pXG5cbiAgcmV0dXJuIGFuaW1hdGVkSWR4XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZUFuaW1hdGVkTGlzdFxuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZURldmljZVN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBUZXh0IGZyb20gJy4vY29tcG9uZW50cy9UZXh0J1xuaW1wb3J0IE1hdGNoZXMgZnJvbSAnLi9jb21wb25lbnRzL01hdGNoZXMnXG5pbXBvcnQgTWF0Y2hlc09uZVR3byBmcm9tICcuL2NvbXBvbmVudHMvTWF0Y2hlc09uZVR3bydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgdXNlQW5pbWF0ZWRMaXN0IGZyb20gJ3NyYy9ob29rcy91c2VBbmltYXRlZExpc3QnXG5pbXBvcnQgeyBwaWNrIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5cbmNvbnN0IERFRkFVTFRfQU5JTUFUSU9OX1NQRUVEID0gMzcwMFxuXG5leHBvcnQgY29uc3QgYmFja2dyb3VuZE9wdGlvbnMgPSBbJ2JhY2tncm91bmRDb2xvcicsICdiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5JywgJ2JhY2tncm91bmRJbWFnZScsICdiYWNrZ3JvdW5kRml0J11cblxuY29uc3QgV2lkZUNhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgd2F0Y2hSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VEZXZpY2VTdGF0ZShzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cbiAgY29uc3QgZ2V0Q2hpbGQgPSAobmFtZTogc3RyaW5nKSA9PlxuICAgICh7XG4gICAgICB0ZXh0OiA8VGV4dCAvPixcbiAgICAgIG1hdGNoZXM6IDxNYXRjaGVzIC8+LFxuICAgICAgbWF0Y2hlc09uZVR3bzogPE1hdGNoZXNPbmVUd28gLz5cbiAgICB9W25hbWVdKVxuXG4gIGNvbnN0IHNsaWRlc0xpc3QgPSAocnVsZXMuY2hpbGRyZW4gfHwgW10pLmZpbHRlcihCb29sZWFuKS5tYXAoc2xpZGUgPT4gKHtcbiAgICAuLi5zbGlkZSxcbiAgICBhbmltYXRpb25OYW1lOiBzbGlkZT8ucm9vdD8uYW5pbWF0aW9uTmFtZSxcbiAgICBhbmltYXRpb25EdXJhdGlvbjogc2xpZGU/LnJvb3Q/LmFuaW1hdGlvbkR1cmF0aW9uIHx8IERFRkFVTFRfQU5JTUFUSU9OX1NQRUVEXG4gIH0pKVxuXG4gIGNvbnN0IGN1cnJlbnRTbGlkZSA9IHVzZUFuaW1hdGVkTGlzdChzbGlkZXNMaXN0KVxuICBjb25zdCBzbGlkZVJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzbGlkZXNMaXN0W2N1cnJlbnRTbGlkZV0gfHwge30pXG5cblxuICBjb25zdCBiYWNrZ3JvdW5kUnVsZXMgPSBzbGlkZVJ1bGVzPy5yb290Py5oYXNDdXN0b21CYWNrZ3JvdW5kXG4gICAgPyBwaWNrKHNsaWRlUnVsZXM/LnJvb3QgfHwge30sIC4uLmJhY2tncm91bmRPcHRpb25zKVxuICAgIDogcGljayhydWxlcy5iYWNrZ3JvdW5kLCAuLi5iYWNrZ3JvdW5kT3B0aW9ucylcblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLmxhcHRvcF06IGRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0JyxcbiAgICAgICAgW3N0eWxlcy52YXJpYW50Ml06IHJ1bGVzLnJvb3Q/LnZhcmlhbnQgPT09ICd2YXJpYW50MidcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5iYWNrZ3JvdW5kfSBzdHlsZT17YmFja2dyb3VuZFJ1bGVzfSAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5wcm9tb3Rpb259IHN0eWxlPXtydWxlcy5wcm9tb3Rpb259PlxuICAgICAgICB7cnVsZXMucHJvbW90aW9uPy5jaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZnR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNlbnRlcn0+XG4gICAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKChjaGlsZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuc2xpZGV9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uTmFtZTogY3VycmVudFNsaWRlID09PSBpbmRleCA/IHN0eWxlc1tjaGlsZC5yb290Py5hbmltYXRpb25OYW1lIHx8ICdmYWRlLWluLW91dCddIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiBgJHtjaGlsZC5yb290Py5hbmltYXRpb25EdXJhdGlvbn1tc2BcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17eyAuLi5jaGlsZCwgZGV2aWNlIH19PntnZXRDaGlsZChjaGlsZC5uYW1lKX08L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yaWdodH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9uV3JhcHBlcn0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8V2lkZUNhcmQgLz4pXG4iXSwibmFtZXMiOlsiY2xhc3NOYW1lcyIsImkiLCJpbm5lciIsIm1vZHVsZSIsIm8iLCJuIiwidCIsInUiLCJCIiwiciIsImYiLCJjIiwiZSIsIl8iLCJGIiwicSIsInciLCJnIiwibCIsInVzZUdpZnRPcGVuIiwiZGVsYXkiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJ1c2VTdGF0ZSIsInRpbWVyUmVmIiwidXNlUmVmIiwib25Ub2dnbGUiLCJjbGVhclRpbWVvdXQiLCJjdXJyZW50IiwicHJldiIsInVzZUVmZmVjdCIsInNldFRpbWVvdXQiLCJzIiwiYSIsIlN0YXRlIiwiY3JlYXRlQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsImNoaWxkcmVuIiwidmFsdWUiLCJfanN4IiwiUHJvdmlkZXIiLCJyZW5kZXIiLCJ2Tm9kZSIsInRhcmdldCIsInN0YXRlIiwicHJlYWN0UmVuZGVyIiwidXNlQ3VycmVudFN0YXRlIiwidXNlQ29udGV4dCIsImxpc3RDYWNoZUNsZWFyIiwiZXEiLCJyZXF1aXJlJCQwIiwiYXNzb2NJbmRleE9mIiwibGlzdENhY2hlRGVsZXRlIiwiaW5kZXgiLCJsaXN0Q2FjaGVHZXQiLCJsaXN0Q2FjaGVIYXMiLCJsaXN0Q2FjaGVTZXQiLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwiTGlzdENhY2hlIiwic3RhY2tDbGVhciIsInN0YWNrRGVsZXRlIiwic3RhY2tHZXQiLCJzdGFja0hhcyIsImZyZWVHbG9iYWwiLCJnbG9iYWwiLCJyb290IiwiU3ltYm9sIiwib2JqZWN0UHJvdG8iLCJoYXNPd25Qcm9wZXJ0eSIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwic3ltVG9TdHJpbmdUYWciLCJnZXRSYXdUYWciLCJvYmplY3RUb1N0cmluZyIsImJhc2VHZXRUYWciLCJpc09iamVjdCIsImZ1bmNUYWciLCJpc0Z1bmN0aW9uIiwiY29yZUpzRGF0YSIsImlzTWFza2VkIiwiZnVuY1Byb3RvIiwiZnVuY1RvU3RyaW5nIiwidG9Tb3VyY2UiLCJiYXNlSXNOYXRpdmUiLCJnZXRWYWx1ZSIsImdldE5hdGl2ZSIsIk1hcCIsIm5hdGl2ZUNyZWF0ZSIsImhhc2hDbGVhciIsImhhc2hEZWxldGUiLCJIQVNIX1VOREVGSU5FRCIsImhhc2hHZXQiLCJoYXNoSGFzIiwiaGFzaFNldCIsIkhhc2giLCJtYXBDYWNoZUNsZWFyIiwiaXNLZXlhYmxlIiwiZ2V0TWFwRGF0YSIsIm1hcENhY2hlRGVsZXRlIiwibWFwQ2FjaGVHZXQiLCJtYXBDYWNoZUhhcyIsIm1hcENhY2hlU2V0IiwiTWFwQ2FjaGUiLCJzdGFja1NldCIsInJlcXVpcmUkJDUiLCJTdGFjayIsImRlZmluZVByb3BlcnR5IiwiYmFzZUFzc2lnblZhbHVlIiwiYXNzaWduTWVyZ2VWYWx1ZSIsImNyZWF0ZUJhc2VGb3IiLCJiYXNlRm9yIiwiZXhwb3J0cyIsImNsb25lQnVmZmVyIiwiVWludDhBcnJheSIsImNsb25lQXJyYXlCdWZmZXIiLCJjbG9uZVR5cGVkQXJyYXkiLCJjb3B5QXJyYXkiLCJiYXNlQ3JlYXRlIiwib3ZlckFyZyIsImdldFByb3RvdHlwZSIsImlzUHJvdG90eXBlIiwiaW5pdENsb25lT2JqZWN0IiwiaXNPYmplY3RMaWtlIiwiYXJnc1RhZyIsImJhc2VJc0FyZ3VtZW50cyIsImlzQXJndW1lbnRzIiwiaXNBcnJheSIsIk1BWF9TQUZFX0lOVEVHRVIiLCJpc0xlbmd0aCIsImlzQXJyYXlMaWtlIiwiaXNBcnJheUxpa2VPYmplY3QiLCJzdHViRmFsc2UiLCJpc0J1ZmZlciIsIm9iamVjdFRhZyIsImlzUGxhaW5PYmplY3QiLCJiYXNlSXNUeXBlZEFycmF5IiwiYmFzZVVuYXJ5Iiwibm9kZVV0aWwiLCJpc1R5cGVkQXJyYXkiLCJzYWZlR2V0IiwiYXNzaWduVmFsdWUiLCJjb3B5T2JqZWN0IiwiYmFzZVRpbWVzIiwiaXNJbmRleCIsImFycmF5TGlrZUtleXMiLCJuYXRpdmVLZXlzSW4iLCJiYXNlS2V5c0luIiwia2V5c0luIiwidG9QbGFpbk9iamVjdCIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwicmVxdWlyZSQkOCIsInJlcXVpcmUkJDkiLCJyZXF1aXJlJCQxMCIsInJlcXVpcmUkJDExIiwicmVxdWlyZSQkMTIiLCJyZXF1aXJlJCQxMyIsInJlcXVpcmUkJDE0IiwiYmFzZU1lcmdlRGVlcCIsImJhc2VNZXJnZSIsImlkZW50aXR5IiwiYXBwbHkiLCJvdmVyUmVzdCIsImNvbnN0YW50IiwiYmFzZVNldFRvU3RyaW5nIiwic2hvcnRPdXQiLCJzZXRUb1N0cmluZyIsImJhc2VSZXN0IiwiaXNJdGVyYXRlZUNhbGwiLCJjcmVhdGVBc3NpZ25lciIsIml0ZXJhdG9yIiwiaW5wdXQiLCJ2aXNpdG9yIiwiQXJyYXkiLCJtYXAiLCJlbCIsIk9iamVjdCIsImVudHJpZXMiLCJyZWR1Y2UiLCJhY2MiLCJrZXkiLCJpc0VtcHR5VmFsdWUiLCJ1bmRlZmluZWQiLCJpc1ZhbHVlIiwicGljayIsIm9iaiIsInByb3BzIiwicmVzdWx0IiwicHJvcCIsIm9taXQiLCJmb3JFYWNoIiwic2V0IiwicGF0aCIsInBhdGhBcnJheSIsIm1hdGNoIiwibGVuZ3RoIiwiaGV4VG9SZ2IiLCJoZXgiLCJleGVjIiwicGFyc2VJbnQiLCJiIiwicmdiVG9SZ2JhIiwicmdiIiwiYWxwaGEiLCJyZXBsYWNlIiwiZGV2aWNlcyIsIkJSRUFLUE9JTlRTIiwibW9iaWxlIiwidGFibGV0IiwibGFwdG9wIiwiZGVza3RvcCIsImlzVmFsaWREZXZpY2VTdGF0ZSIsImV2ZXJ5IiwiZGV2aWNlIiwiZ2V0RGV2aWNlU3RhdGUiLCJfa2V5IiwidXNlRGV2aWNlU3RhdGUiLCJ1c2VDb250YWluZXJEZXZpY2UiLCJ3YXRjaFJlZiIsImJyZWFrcG9pbnRzIiwic2V0RGV2aWNlIiwiY2hlY2tEZXZpY2UiLCJwYXJlbnQiLCJwYXJlbnRXaWR0aCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwiZmluZERldmljZSIsImZpbmQiLCJ1c2VMYXlvdXRFZmZlY3QiLCJwYXJlbnRFbGVtZW50IiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJ3cmFwVG8iLCJ1bnRpbCIsInRvUHgiLCJzdGFydHNXaXRoIiwidG9QZXJjZW50IiwiZm9ybWF0UnVsZSIsIm5ld0tleSIsIm5ld1ZhbHVlIiwiREVGQVVMVF9UT19QWCIsInBhcnNlUnVsZXMiLCJydWxlcyIsImxheWVyIiwia2V5cyIsImluY2x1ZGVzIiwid2FybiIsInR5cG9ncmFwaHkiLCJhY2NlbnRUeXBvZ3JhcGh5IiwiY29sb3IiLCJmb250U2l6ZSIsInByb3BLZXkiLCJwcm9wVmFsdWUiLCJpbm5lckhUTUwiLCJpbm5lclRleHQiLCJkaXNwbGF5IiwiYm9yZGVyU3R5bGUiLCJib3JkZXJSYWRpdXMiLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRJbWFnZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5IiwiYmFja2dyb3VuZENvbG9yIiwiZm9udFdlaWdodCIsImZvbnRTdHlsZSIsInRleHREZWNvcmF0aW9uIiwiaXNWYWxpZFJ1bGUiLCJydWxlIiwidXNlUGFyc2VSdWxlcyIsIkRpc3BsYXlUZXh0IiwicmVzdCIsImZvcm1hdFZhbHVlIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJfX2h0bWwiLCJ1c2VUb2dnbGUiLCJDbG9zZUljb24iLCJ4bWxucyIsImhlaWdodCIsInZpZXdCb3giLCJkIiwiZmlsbCIsIkdpZnRJY29uIiwiZmlsbFJ1bGUiLCJTaW1wbGVHaWZ0Iiwicm9vdFJlZiIsImxlZ2FsSXNPcGVuIiwidG9nZ2xlTGVnYWxJc09wZW4iLCJkZXZpY2VTdGF0ZSIsImhhc0ljb24iLCJpY29uIiwiYXJyb3dSdWxlcyIsImxlZnQiLCJjb250YWluZXIiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlcldpZHRoIiwiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJDb2xvciIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdENvbG9yIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9keVJ1bGVzIiwiX2pzeHMiLCJjbGFzc05hbWUiLCJzdHlsZXMiLCJyZWYiLCJzdHlsZSIsIm9uQ2xpY2siLCJpY29uVGFyZ2V0IiwiYm9keSIsImJvZHlPcGVuIiwiYXJyb3ciLCJjbG9zZSIsImhyZWYiLCJvZmZlciIsInJlbCIsImxvZ28iLCJ0ZXh0IiwiYnV0dG9uIiwibGVnYWwiLCJsZWdhbE9wZW4iLCJsZWdhbFRleHQiLCJsZWdhbEJ1dHRvbiIsImJ1dHRvbk9wZW5UZXh0IiwiYnV0dG9uSGlkZVRleHQiLCJCb251c0NhcmQiLCJ2YXJpYW50MiIsInZhcmlhbnQiLCJsaW5lIiwiYnV0dG9uVGV4dCIsIkNvbXBsZXhHaWZ0IiwicHJvbW90aW9uIiwiaGVhZCIsImhlYWRJY29uIiwiaGVhZFRpdGxlIiwidGl0bGUiLCJjaGlsZCIsInN3aXRjaFRleHRBbGlnblRvRmxleCIsInRleHRBbGlnbiIsImNlbnRlciIsInJpZ2h0IiwiTGluZSIsIlNpbXBsZVBvcHVwIiwiYWxpZ25JdGVtcyIsImFsaWduIiwiYnV0dG9uUnVsZXMiLCJqdXN0aWZ5Q29udGVudCIsImxlZ2FsUnVsZXMiLCJjb250ZW50IiwiQm9udXMiLCJoZWFkZXIiLCJ3cmFwcGVyIiwiTWF0Y2giLCJ0ZWFtcyIsImxlYWd1ZSIsIm5hbWUiLCJ0ZWFtIiwidGVhbUxvZ28iLCJ0ZWFtTmFtZSIsIm9kZCIsIm9kZExhYmVsIiwib2RkVmFsdWUiLCJidXR0b25XcmFwcGVyIiwiY29udGVudFJ1bGVzIiwidGV4dFJ1bGVzIiwiYnV0dG9uSGVhZCIsImJ1dHRvblRhcmdldCIsInRvZ2dsZUlzT3BlbiIsImJhY2tncm91bmQiLCJyb3dGaXJzdCIsInJvd1NlY29uZCIsImJvb2ttYWtlciIsImxlZ2FsSW5mbyIsImxlZ2FsSW5mb0J1dHRvbiIsIm9wZW5UZXh0IiwiY2xvc2VUZXh0IiwiVGV4dCIsImJhY2tncm91bmRPcHRpb25zIiwiTWF0Y2hlcyIsInJvb3RSdWxlcyIsIm9kZExvZ28iLCJjb2VmIiwiY29lZkhlYWQiLCJjb2VmVmFsdWUiLCJvZGRSZXZlcnNlIiwiTWF0Y2hlc09uZVR3byIsInRpdGxlTGFiZWwiLCJ0aXRsZVZhbHVlIiwidGVhbTFOYW1lIiwidGVhbVZhbHVlIiwidmFsdWUxIiwidGVhbTJOYW1lIiwidmFsdWUyIiwidXNlQW5pbWF0ZWRMaXN0Iiwic2xpZGVzIiwiaXRlbXNDb3VudCIsImFuaW1hdGVkSWR4Iiwic2V0QW5pbWF0ZWRJZHgiLCJhbmltYXRpb25EdXJhdGlvbiIsImdvTmV4dCIsInRpbWVvdXQiLCJERUZBVUxUX0FOSU1BVElPTl9TUEVFRCIsIldpZGVDYXJkIiwiZ2V0Q2hpbGQiLCJtYXRjaGVzIiwibWF0Y2hlc09uZVR3byIsInNsaWRlc0xpc3QiLCJmaWx0ZXIiLCJCb29sZWFuIiwic2xpZGUiLCJhbmltYXRpb25OYW1lIiwiY3VycmVudFNsaWRlIiwic2xpZGVSdWxlcyIsImJhY2tncm91bmRSdWxlcyIsImhhc0N1c3RvbUJhY2tncm91bmQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT0EsS0FBQyxXQUFZO0FBR1osVUFBSSxTQUFTLENBQUUsRUFBQztBQUdoQixlQUFTQSxjQUFhO0FBQ3JCLFlBQUksVUFBVSxDQUFBO0FBRWQsaUJBQVNDLEtBQUksR0FBR0EsS0FBSSxVQUFVLFFBQVFBLE1BQUs7QUFDMUMsY0FBSSxNQUFNLFVBQVVBLEVBQUM7QUFDckIsY0FBSSxDQUFDO0FBQUs7QUFFVixjQUFJLFVBQVUsT0FBTztBQUVyQixjQUFJLFlBQVksWUFBWSxZQUFZLFVBQVU7QUFDakQsb0JBQVEsS0FBSyxHQUFHO0FBQUEsVUFDaEIsV0FBVSxNQUFNLFFBQVEsR0FBRyxHQUFHO0FBQzlCLGdCQUFJLElBQUksUUFBUTtBQUNmLGtCQUFJQyxTQUFRRixZQUFXLE1BQU0sTUFBTSxHQUFHO0FBQ3RDLGtCQUFJRSxRQUFPO0FBQ1Ysd0JBQVEsS0FBS0EsTUFBSztBQUFBLGNBQ2xCO0FBQUEsWUFDRDtBQUFB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TSxFQUFDLFNBQVEsRUFBQztBQUFBLElBQUMsR0FBRSxFQUFFO0FBQUEsRUFBQztBQUFzTCxXQUFTQSxJQUFFLEdBQUVMLElBQUU7QUFBQyxRQUFJRixLQUFFLEVBQUUsS0FBSSxDQUFDO0FBQUUsV0FBTyxFQUFFQSxHQUFFLEtBQUlFLEVBQUMsS0FBR0YsR0FBRSxNQUFJLEVBQUcsR0FBQ0EsR0FBRSxJQUFFRSxJQUFFRixHQUFFLE1BQUksR0FBRUEsR0FBRSxPQUFLQSxHQUFFO0FBQUEsRUFBRTtBQUFzRCxXQUFTUSxJQUFFLEdBQUU7QUFBQyxRQUFJUixLQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRU4sS0FBRSxFQUFFLEtBQUksQ0FBQztBQUFFLFdBQU9BLEdBQUUsSUFBRSxHQUFFTSxNQUFHLFFBQU1OLEdBQUUsT0FBS0EsR0FBRSxLQUFHLE1BQUdNLEdBQUUsSUFBSSxDQUFDLElBQUdBLEdBQUUsTUFBTSxTQUFPLEVBQUU7QUFBQSxFQUFFO0FBQTZYLFdBQVMsSUFBRztBQUFDLGFBQVFELElBQUVBLEtBQUUsRUFBRTtBQUFTLFVBQUdBLEdBQUUsT0FBS0EsR0FBRTtBQUFJLFlBQUc7QUFBQyxVQUFBQSxHQUFFLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRUEsR0FBRSxJQUFJLElBQUksUUFBUVUsR0FBQyxHQUFFVixHQUFFLElBQUksTUFBSSxDQUFBO0FBQUEsUUFBRSxTQUFPRyxJQUFOO0FBQVMsVUFBQUgsR0FBRSxJQUFJLE1BQUksQ0FBQSxHQUFHRCxPQUFDLFFBQUMsSUFBSUksSUFBRUgsR0FBRSxHQUFHO0FBQUEsUUFBQztBQUFBLEVBQUM7QUFBQ0QsU0FBQyxRQUFDLE1BQUksU0FBUyxHQUFFO0FBQUMsUUFBRSxNQUFLLEtBQUcsRUFBRSxDQUFDO0FBQUEsRUFBQyxHQUFFQSxlQUFFLE1BQUksU0FBUyxHQUFFO0FBQUMsU0FBRyxFQUFFLENBQUMsR0FBRSxJQUFFO0FBQUUsUUFBSUosTUFBRyxJQUFFLEVBQUUsS0FBSztBQUFJLElBQUFBLE9BQUksTUFBSSxLQUFHQSxHQUFFLE1B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WUFBTVYsT0FBT2hFLE1BQU0wRTtBQUFBQSxVQUFBQSxDQUFLLEdBRS9DeFIsRUFBQSxPQUFBO0FBQUEsWUFBSzJRLFdBQVdDLFNBQU8wRDtBQUFBQSxZQUFjeFUsVUFDbkM0USxFQUFBLE9BQUE7QUFBQSxjQUFLQyxXQUFXQyxTQUFPYztBQUFBQSxjQUFRWixPQUFPaEUsTUFBTTRFO0FBQUFBLGNBQU81UixXQUNqREUsRUFBQSxPQUFBO0FBQUEsZ0JBQUsyUSxXQUFXQyxTQUFPWTtBQUFBQSxnQkFBTVYsT0FBT2hFLE1BQU0wRTtBQUFBQSxjQUFBQSxDQUFLLElBQzlDMUUsV0FBTTRFLFdBQU41RSxtQkFBY2hOLFFBQVE7QUFBQSxZQUFBLENBQUE7QUFBQSxVQUFBLENBRXJCLENBQUE7QUFBQSxRQUFBLENBQ0YsQ0FBQTtBQUFBLE1BQUEsQ0FDRixDQUFBO0FBQUEsSUFBQSxDQUNKO0FBQUEsRUFFUjtBQUVlSSxRQUFBQSxRQUFBQSxPQUFPRixFQUFDOFcsYUFBVzs7Ozs7Ozs7OzsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsNCw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzXX0=