stoop 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -66
- package/dist/Button.module-h78z3dbd.css +18 -0
- package/dist/components/Button/Button.d.ts +4 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +32 -1429
- package/dist/{globals-h4nepkxv.css → styles/globals.css} +11 -12
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +8 -5
- package/dist/components/ThemeProvider.d.ts +0 -12
package/dist/index.js
CHANGED
|
@@ -1,1436 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
var
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
(function() {
|
|
22
|
-
function defineDeprecationWarning(methodName, info) {
|
|
23
|
-
Object.defineProperty(Component.prototype, methodName, {
|
|
24
|
-
get: function() {
|
|
25
|
-
console.warn("%s(...) is deprecated in plain JavaScript React classes. %s", info[0], info[1]);
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
function getIteratorFn(maybeIterable) {
|
|
30
|
-
if (maybeIterable === null || typeof maybeIterable !== "object")
|
|
31
|
-
return null;
|
|
32
|
-
maybeIterable = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable["@@iterator"];
|
|
33
|
-
return typeof maybeIterable === "function" ? maybeIterable : null;
|
|
34
|
-
}
|
|
35
|
-
function warnNoop(publicInstance, callerName) {
|
|
36
|
-
publicInstance = (publicInstance = publicInstance.constructor) && (publicInstance.displayName || publicInstance.name) || "ReactClass";
|
|
37
|
-
var warningKey = publicInstance + "." + callerName;
|
|
38
|
-
didWarnStateUpdateForUnmountedComponent[warningKey] || (console.error("Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.", callerName, publicInstance), didWarnStateUpdateForUnmountedComponent[warningKey] = true);
|
|
39
|
-
}
|
|
40
|
-
function Component(props, context, updater) {
|
|
41
|
-
this.props = props;
|
|
42
|
-
this.context = context;
|
|
43
|
-
this.refs = emptyObject;
|
|
44
|
-
this.updater = updater || ReactNoopUpdateQueue;
|
|
45
|
-
}
|
|
46
|
-
function ComponentDummy() {
|
|
47
|
-
}
|
|
48
|
-
function PureComponent(props, context, updater) {
|
|
49
|
-
this.props = props;
|
|
50
|
-
this.context = context;
|
|
51
|
-
this.refs = emptyObject;
|
|
52
|
-
this.updater = updater || ReactNoopUpdateQueue;
|
|
53
|
-
}
|
|
54
|
-
function testStringCoercion(value) {
|
|
55
|
-
return "" + value;
|
|
56
|
-
}
|
|
57
|
-
function checkKeyStringCoercion(value) {
|
|
58
|
-
try {
|
|
59
|
-
testStringCoercion(value);
|
|
60
|
-
var JSCompiler_inline_result = false;
|
|
61
|
-
} catch (e) {
|
|
62
|
-
JSCompiler_inline_result = true;
|
|
63
|
-
}
|
|
64
|
-
if (JSCompiler_inline_result) {
|
|
65
|
-
JSCompiler_inline_result = console;
|
|
66
|
-
var JSCompiler_temp_const = JSCompiler_inline_result.error;
|
|
67
|
-
var JSCompiler_inline_result$jscomp$0 = typeof Symbol === "function" && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object";
|
|
68
|
-
JSCompiler_temp_const.call(JSCompiler_inline_result, "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", JSCompiler_inline_result$jscomp$0);
|
|
69
|
-
return testStringCoercion(value);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
function getComponentNameFromType(type) {
|
|
73
|
-
if (type == null)
|
|
74
|
-
return null;
|
|
75
|
-
if (typeof type === "function")
|
|
76
|
-
return type.$$typeof === REACT_CLIENT_REFERENCE$2 ? null : type.displayName || type.name || null;
|
|
77
|
-
if (typeof type === "string")
|
|
78
|
-
return type;
|
|
79
|
-
switch (type) {
|
|
80
|
-
case REACT_FRAGMENT_TYPE:
|
|
81
|
-
return "Fragment";
|
|
82
|
-
case REACT_PORTAL_TYPE:
|
|
83
|
-
return "Portal";
|
|
84
|
-
case REACT_PROFILER_TYPE:
|
|
85
|
-
return "Profiler";
|
|
86
|
-
case REACT_STRICT_MODE_TYPE:
|
|
87
|
-
return "StrictMode";
|
|
88
|
-
case REACT_SUSPENSE_TYPE:
|
|
89
|
-
return "Suspense";
|
|
90
|
-
case REACT_SUSPENSE_LIST_TYPE:
|
|
91
|
-
return "SuspenseList";
|
|
92
|
-
}
|
|
93
|
-
if (typeof type === "object")
|
|
94
|
-
switch (typeof type.tag === "number" && console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), type.$$typeof) {
|
|
95
|
-
case REACT_CONTEXT_TYPE:
|
|
96
|
-
return (type.displayName || "Context") + ".Provider";
|
|
97
|
-
case REACT_CONSUMER_TYPE:
|
|
98
|
-
return (type._context.displayName || "Context") + ".Consumer";
|
|
99
|
-
case REACT_FORWARD_REF_TYPE:
|
|
100
|
-
var innerType = type.render;
|
|
101
|
-
type = type.displayName;
|
|
102
|
-
type || (type = innerType.displayName || innerType.name || "", type = type !== "" ? "ForwardRef(" + type + ")" : "ForwardRef");
|
|
103
|
-
return type;
|
|
104
|
-
case REACT_MEMO_TYPE:
|
|
105
|
-
return innerType = type.displayName || null, innerType !== null ? innerType : getComponentNameFromType(type.type) || "Memo";
|
|
106
|
-
case REACT_LAZY_TYPE:
|
|
107
|
-
innerType = type._payload;
|
|
108
|
-
type = type._init;
|
|
109
|
-
try {
|
|
110
|
-
return getComponentNameFromType(type(innerType));
|
|
111
|
-
} catch (x) {
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
return null;
|
|
115
|
-
}
|
|
116
|
-
function isValidElementType(type) {
|
|
117
|
-
return typeof type === "string" || typeof type === "function" || type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_OFFSCREEN_TYPE || typeof type === "object" && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_CONSUMER_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_CLIENT_REFERENCE$1 || type.getModuleId !== undefined) ? true : false;
|
|
118
|
-
}
|
|
119
|
-
function disabledLog() {
|
|
120
|
-
}
|
|
121
|
-
function disableLogs() {
|
|
122
|
-
if (disabledDepth === 0) {
|
|
123
|
-
prevLog = console.log;
|
|
124
|
-
prevInfo = console.info;
|
|
125
|
-
prevWarn = console.warn;
|
|
126
|
-
prevError = console.error;
|
|
127
|
-
prevGroup = console.group;
|
|
128
|
-
prevGroupCollapsed = console.groupCollapsed;
|
|
129
|
-
prevGroupEnd = console.groupEnd;
|
|
130
|
-
var props = {
|
|
131
|
-
configurable: true,
|
|
132
|
-
enumerable: true,
|
|
133
|
-
value: disabledLog,
|
|
134
|
-
writable: true
|
|
135
|
-
};
|
|
136
|
-
Object.defineProperties(console, {
|
|
137
|
-
info: props,
|
|
138
|
-
log: props,
|
|
139
|
-
warn: props,
|
|
140
|
-
error: props,
|
|
141
|
-
group: props,
|
|
142
|
-
groupCollapsed: props,
|
|
143
|
-
groupEnd: props
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
disabledDepth++;
|
|
147
|
-
}
|
|
148
|
-
function reenableLogs() {
|
|
149
|
-
disabledDepth--;
|
|
150
|
-
if (disabledDepth === 0) {
|
|
151
|
-
var props = { configurable: true, enumerable: true, writable: true };
|
|
152
|
-
Object.defineProperties(console, {
|
|
153
|
-
log: assign({}, props, { value: prevLog }),
|
|
154
|
-
info: assign({}, props, { value: prevInfo }),
|
|
155
|
-
warn: assign({}, props, { value: prevWarn }),
|
|
156
|
-
error: assign({}, props, { value: prevError }),
|
|
157
|
-
group: assign({}, props, { value: prevGroup }),
|
|
158
|
-
groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),
|
|
159
|
-
groupEnd: assign({}, props, { value: prevGroupEnd })
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
0 > disabledDepth && console.error("disabledDepth fell below zero. This is a bug in React. Please file an issue.");
|
|
163
|
-
}
|
|
164
|
-
function describeBuiltInComponentFrame(name) {
|
|
165
|
-
if (prefix === undefined)
|
|
166
|
-
try {
|
|
167
|
-
throw Error();
|
|
168
|
-
} catch (x) {
|
|
169
|
-
var match = x.stack.trim().match(/\n( *(at )?)/);
|
|
170
|
-
prefix = match && match[1] || "";
|
|
171
|
-
suffix = -1 < x.stack.indexOf("\n at") ? " (<anonymous>)" : -1 < x.stack.indexOf("@") ? "@unknown:0:0" : "";
|
|
172
|
-
}
|
|
173
|
-
return "\n" + prefix + name + suffix;
|
|
174
|
-
}
|
|
175
|
-
function describeNativeComponentFrame(fn, construct) {
|
|
176
|
-
if (!fn || reentry)
|
|
177
|
-
return "";
|
|
178
|
-
var frame = componentFrameCache.get(fn);
|
|
179
|
-
if (frame !== undefined)
|
|
180
|
-
return frame;
|
|
181
|
-
reentry = true;
|
|
182
|
-
frame = Error.prepareStackTrace;
|
|
183
|
-
Error.prepareStackTrace = undefined;
|
|
184
|
-
var previousDispatcher = null;
|
|
185
|
-
previousDispatcher = ReactSharedInternals.H;
|
|
186
|
-
ReactSharedInternals.H = null;
|
|
187
|
-
disableLogs();
|
|
188
|
-
try {
|
|
189
|
-
var RunInRootFrame = {
|
|
190
|
-
DetermineComponentFrameRoot: function() {
|
|
191
|
-
try {
|
|
192
|
-
if (construct) {
|
|
193
|
-
var Fake = function() {
|
|
194
|
-
throw Error();
|
|
195
|
-
};
|
|
196
|
-
Object.defineProperty(Fake.prototype, "props", {
|
|
197
|
-
set: function() {
|
|
198
|
-
throw Error();
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
|
-
if (typeof Reflect === "object" && Reflect.construct) {
|
|
202
|
-
try {
|
|
203
|
-
Reflect.construct(Fake, []);
|
|
204
|
-
} catch (x) {
|
|
205
|
-
var control = x;
|
|
206
|
-
}
|
|
207
|
-
Reflect.construct(fn, [], Fake);
|
|
208
|
-
} else {
|
|
209
|
-
try {
|
|
210
|
-
Fake.call();
|
|
211
|
-
} catch (x$0) {
|
|
212
|
-
control = x$0;
|
|
213
|
-
}
|
|
214
|
-
fn.call(Fake.prototype);
|
|
215
|
-
}
|
|
216
|
-
} else {
|
|
217
|
-
try {
|
|
218
|
-
throw Error();
|
|
219
|
-
} catch (x$1) {
|
|
220
|
-
control = x$1;
|
|
221
|
-
}
|
|
222
|
-
(Fake = fn()) && typeof Fake.catch === "function" && Fake.catch(function() {
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
} catch (sample) {
|
|
226
|
-
if (sample && control && typeof sample.stack === "string")
|
|
227
|
-
return [sample.stack, control.stack];
|
|
228
|
-
}
|
|
229
|
-
return [null, null];
|
|
230
|
-
}
|
|
231
|
-
};
|
|
232
|
-
RunInRootFrame.DetermineComponentFrameRoot.displayName = "DetermineComponentFrameRoot";
|
|
233
|
-
var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, "name");
|
|
234
|
-
namePropDescriptor && namePropDescriptor.configurable && Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, "name", { value: "DetermineComponentFrameRoot" });
|
|
235
|
-
var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(), sampleStack = _RunInRootFrame$Deter[0], controlStack = _RunInRootFrame$Deter[1];
|
|
236
|
-
if (sampleStack && controlStack) {
|
|
237
|
-
var sampleLines = sampleStack.split("\n"), controlLines = controlStack.split("\n");
|
|
238
|
-
for (_RunInRootFrame$Deter = namePropDescriptor = 0;namePropDescriptor < sampleLines.length && !sampleLines[namePropDescriptor].includes("DetermineComponentFrameRoot"); )
|
|
239
|
-
namePropDescriptor++;
|
|
240
|
-
for (;_RunInRootFrame$Deter < controlLines.length && !controlLines[_RunInRootFrame$Deter].includes("DetermineComponentFrameRoot"); )
|
|
241
|
-
_RunInRootFrame$Deter++;
|
|
242
|
-
if (namePropDescriptor === sampleLines.length || _RunInRootFrame$Deter === controlLines.length)
|
|
243
|
-
for (namePropDescriptor = sampleLines.length - 1, _RunInRootFrame$Deter = controlLines.length - 1;1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter && sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]; )
|
|
244
|
-
_RunInRootFrame$Deter--;
|
|
245
|
-
for (;1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter; namePropDescriptor--, _RunInRootFrame$Deter--)
|
|
246
|
-
if (sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]) {
|
|
247
|
-
if (namePropDescriptor !== 1 || _RunInRootFrame$Deter !== 1) {
|
|
248
|
-
do
|
|
249
|
-
if (namePropDescriptor--, _RunInRootFrame$Deter--, 0 > _RunInRootFrame$Deter || sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]) {
|
|
250
|
-
var _frame = "\n" + sampleLines[namePropDescriptor].replace(" at new ", " at ");
|
|
251
|
-
fn.displayName && _frame.includes("<anonymous>") && (_frame = _frame.replace("<anonymous>", fn.displayName));
|
|
252
|
-
typeof fn === "function" && componentFrameCache.set(fn, _frame);
|
|
253
|
-
return _frame;
|
|
254
|
-
}
|
|
255
|
-
while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);
|
|
256
|
-
}
|
|
257
|
-
break;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
} finally {
|
|
261
|
-
reentry = false, ReactSharedInternals.H = previousDispatcher, reenableLogs(), Error.prepareStackTrace = frame;
|
|
262
|
-
}
|
|
263
|
-
sampleLines = (sampleLines = fn ? fn.displayName || fn.name : "") ? describeBuiltInComponentFrame(sampleLines) : "";
|
|
264
|
-
typeof fn === "function" && componentFrameCache.set(fn, sampleLines);
|
|
265
|
-
return sampleLines;
|
|
266
|
-
}
|
|
267
|
-
function describeUnknownElementTypeFrameInDEV(type) {
|
|
268
|
-
if (type == null)
|
|
269
|
-
return "";
|
|
270
|
-
if (typeof type === "function") {
|
|
271
|
-
var prototype = type.prototype;
|
|
272
|
-
return describeNativeComponentFrame(type, !(!prototype || !prototype.isReactComponent));
|
|
273
|
-
}
|
|
274
|
-
if (typeof type === "string")
|
|
275
|
-
return describeBuiltInComponentFrame(type);
|
|
276
|
-
switch (type) {
|
|
277
|
-
case REACT_SUSPENSE_TYPE:
|
|
278
|
-
return describeBuiltInComponentFrame("Suspense");
|
|
279
|
-
case REACT_SUSPENSE_LIST_TYPE:
|
|
280
|
-
return describeBuiltInComponentFrame("SuspenseList");
|
|
281
|
-
}
|
|
282
|
-
if (typeof type === "object")
|
|
283
|
-
switch (type.$$typeof) {
|
|
284
|
-
case REACT_FORWARD_REF_TYPE:
|
|
285
|
-
return type = describeNativeComponentFrame(type.render, false), type;
|
|
286
|
-
case REACT_MEMO_TYPE:
|
|
287
|
-
return describeUnknownElementTypeFrameInDEV(type.type);
|
|
288
|
-
case REACT_LAZY_TYPE:
|
|
289
|
-
prototype = type._payload;
|
|
290
|
-
type = type._init;
|
|
291
|
-
try {
|
|
292
|
-
return describeUnknownElementTypeFrameInDEV(type(prototype));
|
|
293
|
-
} catch (x) {
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
return "";
|
|
297
|
-
}
|
|
298
|
-
function getOwner() {
|
|
299
|
-
var dispatcher = ReactSharedInternals.A;
|
|
300
|
-
return dispatcher === null ? null : dispatcher.getOwner();
|
|
301
|
-
}
|
|
302
|
-
function hasValidKey(config) {
|
|
303
|
-
if (hasOwnProperty.call(config, "key")) {
|
|
304
|
-
var getter = Object.getOwnPropertyDescriptor(config, "key").get;
|
|
305
|
-
if (getter && getter.isReactWarning)
|
|
306
|
-
return false;
|
|
307
|
-
}
|
|
308
|
-
return config.key !== undefined;
|
|
309
|
-
}
|
|
310
|
-
function defineKeyPropWarningGetter(props, displayName) {
|
|
311
|
-
function warnAboutAccessingKey() {
|
|
312
|
-
specialPropKeyWarningShown || (specialPropKeyWarningShown = true, console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", displayName));
|
|
313
|
-
}
|
|
314
|
-
warnAboutAccessingKey.isReactWarning = true;
|
|
315
|
-
Object.defineProperty(props, "key", {
|
|
316
|
-
get: warnAboutAccessingKey,
|
|
317
|
-
configurable: true
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
|
-
function elementRefGetterWithDeprecationWarning() {
|
|
321
|
-
var componentName = getComponentNameFromType(this.type);
|
|
322
|
-
didWarnAboutElementRef[componentName] || (didWarnAboutElementRef[componentName] = true, console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."));
|
|
323
|
-
componentName = this.props.ref;
|
|
324
|
-
return componentName !== undefined ? componentName : null;
|
|
325
|
-
}
|
|
326
|
-
function ReactElement(type, key, self, source, owner, props) {
|
|
327
|
-
self = props.ref;
|
|
328
|
-
type = {
|
|
329
|
-
$$typeof: REACT_ELEMENT_TYPE,
|
|
330
|
-
type,
|
|
331
|
-
key,
|
|
332
|
-
props,
|
|
333
|
-
_owner: owner
|
|
334
|
-
};
|
|
335
|
-
(self !== undefined ? self : null) !== null ? Object.defineProperty(type, "ref", {
|
|
336
|
-
enumerable: false,
|
|
337
|
-
get: elementRefGetterWithDeprecationWarning
|
|
338
|
-
}) : Object.defineProperty(type, "ref", { enumerable: false, value: null });
|
|
339
|
-
type._store = {};
|
|
340
|
-
Object.defineProperty(type._store, "validated", {
|
|
341
|
-
configurable: false,
|
|
342
|
-
enumerable: false,
|
|
343
|
-
writable: true,
|
|
344
|
-
value: 0
|
|
345
|
-
});
|
|
346
|
-
Object.defineProperty(type, "_debugInfo", {
|
|
347
|
-
configurable: false,
|
|
348
|
-
enumerable: false,
|
|
349
|
-
writable: true,
|
|
350
|
-
value: null
|
|
351
|
-
});
|
|
352
|
-
Object.freeze && (Object.freeze(type.props), Object.freeze(type));
|
|
353
|
-
return type;
|
|
354
|
-
}
|
|
355
|
-
function cloneAndReplaceKey(oldElement, newKey) {
|
|
356
|
-
newKey = ReactElement(oldElement.type, newKey, undefined, undefined, oldElement._owner, oldElement.props);
|
|
357
|
-
newKey._store.validated = oldElement._store.validated;
|
|
358
|
-
return newKey;
|
|
359
|
-
}
|
|
360
|
-
function validateChildKeys(node, parentType) {
|
|
361
|
-
if (typeof node === "object" && node && node.$$typeof !== REACT_CLIENT_REFERENCE) {
|
|
362
|
-
if (isArrayImpl(node))
|
|
363
|
-
for (var i = 0;i < node.length; i++) {
|
|
364
|
-
var child = node[i];
|
|
365
|
-
isValidElement(child) && validateExplicitKey(child, parentType);
|
|
366
|
-
}
|
|
367
|
-
else if (isValidElement(node))
|
|
368
|
-
node._store && (node._store.validated = 1);
|
|
369
|
-
else if (i = getIteratorFn(node), typeof i === "function" && i !== node.entries && (i = i.call(node), i !== node))
|
|
370
|
-
for (;!(node = i.next()).done; )
|
|
371
|
-
isValidElement(node.value) && validateExplicitKey(node.value, parentType);
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
function isValidElement(object) {
|
|
375
|
-
return typeof object === "object" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
|
|
376
|
-
}
|
|
377
|
-
function validateExplicitKey(element, parentType) {
|
|
378
|
-
if (element._store && !element._store.validated && element.key == null && (element._store.validated = 1, parentType = getCurrentComponentErrorInfo(parentType), !ownerHasKeyUseWarning[parentType])) {
|
|
379
|
-
ownerHasKeyUseWarning[parentType] = true;
|
|
380
|
-
var childOwner = "";
|
|
381
|
-
element && element._owner != null && element._owner !== getOwner() && (childOwner = null, typeof element._owner.tag === "number" ? childOwner = getComponentNameFromType(element._owner.type) : typeof element._owner.name === "string" && (childOwner = element._owner.name), childOwner = " It was passed a child from " + childOwner + ".");
|
|
382
|
-
var prevGetCurrentStack = ReactSharedInternals.getCurrentStack;
|
|
383
|
-
ReactSharedInternals.getCurrentStack = function() {
|
|
384
|
-
var stack = describeUnknownElementTypeFrameInDEV(element.type);
|
|
385
|
-
prevGetCurrentStack && (stack += prevGetCurrentStack() || "");
|
|
386
|
-
return stack;
|
|
387
|
-
};
|
|
388
|
-
console.error('Each child in a list should have a unique "key" prop.%s%s See https://react.dev/link/warning-keys for more information.', parentType, childOwner);
|
|
389
|
-
ReactSharedInternals.getCurrentStack = prevGetCurrentStack;
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
function getCurrentComponentErrorInfo(parentType) {
|
|
393
|
-
var info = "", owner = getOwner();
|
|
394
|
-
owner && (owner = getComponentNameFromType(owner.type)) && (info = "\n\nCheck the render method of `" + owner + "`.");
|
|
395
|
-
info || (parentType = getComponentNameFromType(parentType)) && (info = "\n\nCheck the top-level render call using <" + parentType + ">.");
|
|
396
|
-
return info;
|
|
397
|
-
}
|
|
398
|
-
function escape(key) {
|
|
399
|
-
var escaperLookup = { "=": "=0", ":": "=2" };
|
|
400
|
-
return "$" + key.replace(/[=:]/g, function(match) {
|
|
401
|
-
return escaperLookup[match];
|
|
402
|
-
});
|
|
403
|
-
}
|
|
404
|
-
function getElementKey(element, index) {
|
|
405
|
-
return typeof element === "object" && element !== null && element.key != null ? (checkKeyStringCoercion(element.key), escape("" + element.key)) : index.toString(36);
|
|
406
|
-
}
|
|
407
|
-
function noop$1() {
|
|
408
|
-
}
|
|
409
|
-
function resolveThenable(thenable) {
|
|
410
|
-
switch (thenable.status) {
|
|
411
|
-
case "fulfilled":
|
|
412
|
-
return thenable.value;
|
|
413
|
-
case "rejected":
|
|
414
|
-
throw thenable.reason;
|
|
415
|
-
default:
|
|
416
|
-
switch (typeof thenable.status === "string" ? thenable.then(noop$1, noop$1) : (thenable.status = "pending", thenable.then(function(fulfilledValue) {
|
|
417
|
-
thenable.status === "pending" && (thenable.status = "fulfilled", thenable.value = fulfilledValue);
|
|
418
|
-
}, function(error) {
|
|
419
|
-
thenable.status === "pending" && (thenable.status = "rejected", thenable.reason = error);
|
|
420
|
-
})), thenable.status) {
|
|
421
|
-
case "fulfilled":
|
|
422
|
-
return thenable.value;
|
|
423
|
-
case "rejected":
|
|
424
|
-
throw thenable.reason;
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
throw thenable;
|
|
428
|
-
}
|
|
429
|
-
function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {
|
|
430
|
-
var type = typeof children;
|
|
431
|
-
if (type === "undefined" || type === "boolean")
|
|
432
|
-
children = null;
|
|
433
|
-
var invokeCallback = false;
|
|
434
|
-
if (children === null)
|
|
435
|
-
invokeCallback = true;
|
|
436
|
-
else
|
|
437
|
-
switch (type) {
|
|
438
|
-
case "bigint":
|
|
439
|
-
case "string":
|
|
440
|
-
case "number":
|
|
441
|
-
invokeCallback = true;
|
|
442
|
-
break;
|
|
443
|
-
case "object":
|
|
444
|
-
switch (children.$$typeof) {
|
|
445
|
-
case REACT_ELEMENT_TYPE:
|
|
446
|
-
case REACT_PORTAL_TYPE:
|
|
447
|
-
invokeCallback = true;
|
|
448
|
-
break;
|
|
449
|
-
case REACT_LAZY_TYPE:
|
|
450
|
-
return invokeCallback = children._init, mapIntoArray(invokeCallback(children._payload), array, escapedPrefix, nameSoFar, callback);
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
if (invokeCallback) {
|
|
454
|
-
invokeCallback = children;
|
|
455
|
-
callback = callback(invokeCallback);
|
|
456
|
-
var childKey = nameSoFar === "" ? "." + getElementKey(invokeCallback, 0) : nameSoFar;
|
|
457
|
-
isArrayImpl(callback) ? (escapedPrefix = "", childKey != null && (escapedPrefix = childKey.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), mapIntoArray(callback, array, escapedPrefix, "", function(c) {
|
|
458
|
-
return c;
|
|
459
|
-
})) : callback != null && (isValidElement(callback) && (callback.key != null && (invokeCallback && invokeCallback.key === callback.key || checkKeyStringCoercion(callback.key)), escapedPrefix = cloneAndReplaceKey(callback, escapedPrefix + (callback.key == null || invokeCallback && invokeCallback.key === callback.key ? "" : ("" + callback.key).replace(userProvidedKeyEscapeRegex, "$&/") + "/") + childKey), nameSoFar !== "" && invokeCallback != null && isValidElement(invokeCallback) && invokeCallback.key == null && invokeCallback._store && !invokeCallback._store.validated && (escapedPrefix._store.validated = 2), callback = escapedPrefix), array.push(callback));
|
|
460
|
-
return 1;
|
|
461
|
-
}
|
|
462
|
-
invokeCallback = 0;
|
|
463
|
-
childKey = nameSoFar === "" ? "." : nameSoFar + ":";
|
|
464
|
-
if (isArrayImpl(children))
|
|
465
|
-
for (var i = 0;i < children.length; i++)
|
|
466
|
-
nameSoFar = children[i], type = childKey + getElementKey(nameSoFar, i), invokeCallback += mapIntoArray(nameSoFar, array, escapedPrefix, type, callback);
|
|
467
|
-
else if (i = getIteratorFn(children), typeof i === "function")
|
|
468
|
-
for (i === children.entries && (didWarnAboutMaps || console.warn("Using Maps as children is not supported. Use an array of keyed ReactElements instead."), didWarnAboutMaps = true), children = i.call(children), i = 0;!(nameSoFar = children.next()).done; )
|
|
469
|
-
nameSoFar = nameSoFar.value, type = childKey + getElementKey(nameSoFar, i++), invokeCallback += mapIntoArray(nameSoFar, array, escapedPrefix, type, callback);
|
|
470
|
-
else if (type === "object") {
|
|
471
|
-
if (typeof children.then === "function")
|
|
472
|
-
return mapIntoArray(resolveThenable(children), array, escapedPrefix, nameSoFar, callback);
|
|
473
|
-
array = String(children);
|
|
474
|
-
throw Error("Objects are not valid as a React child (found: " + (array === "[object Object]" ? "object with keys {" + Object.keys(children).join(", ") + "}" : array) + "). If you meant to render a collection of children, use an array instead.");
|
|
475
|
-
}
|
|
476
|
-
return invokeCallback;
|
|
477
|
-
}
|
|
478
|
-
function mapChildren(children, func, context) {
|
|
479
|
-
if (children == null)
|
|
480
|
-
return children;
|
|
481
|
-
var result = [], count = 0;
|
|
482
|
-
mapIntoArray(children, result, "", "", function(child) {
|
|
483
|
-
return func.call(context, child, count++);
|
|
484
|
-
});
|
|
485
|
-
return result;
|
|
486
|
-
}
|
|
487
|
-
function lazyInitializer(payload) {
|
|
488
|
-
if (payload._status === -1) {
|
|
489
|
-
var ctor = payload._result;
|
|
490
|
-
ctor = ctor();
|
|
491
|
-
ctor.then(function(moduleObject) {
|
|
492
|
-
if (payload._status === 0 || payload._status === -1)
|
|
493
|
-
payload._status = 1, payload._result = moduleObject;
|
|
494
|
-
}, function(error) {
|
|
495
|
-
if (payload._status === 0 || payload._status === -1)
|
|
496
|
-
payload._status = 2, payload._result = error;
|
|
497
|
-
});
|
|
498
|
-
payload._status === -1 && (payload._status = 0, payload._result = ctor);
|
|
499
|
-
}
|
|
500
|
-
if (payload._status === 1)
|
|
501
|
-
return ctor = payload._result, ctor === undefined && console.error("lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))\n\nDid you accidentally put curly braces around the import?", ctor), "default" in ctor || console.error("lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))", ctor), ctor.default;
|
|
502
|
-
throw payload._result;
|
|
503
|
-
}
|
|
504
|
-
function resolveDispatcher() {
|
|
505
|
-
var dispatcher = ReactSharedInternals.H;
|
|
506
|
-
dispatcher === null && console.error("Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.");
|
|
507
|
-
return dispatcher;
|
|
508
|
-
}
|
|
509
|
-
function noop() {
|
|
510
|
-
}
|
|
511
|
-
function enqueueTask(task) {
|
|
512
|
-
if (enqueueTaskImpl === null)
|
|
513
|
-
try {
|
|
514
|
-
var requireString = ("require" + Math.random()).slice(0, 7);
|
|
515
|
-
enqueueTaskImpl = (module && module[requireString]).call(module, "timers").setImmediate;
|
|
516
|
-
} catch (_err) {
|
|
517
|
-
enqueueTaskImpl = function(callback) {
|
|
518
|
-
didWarnAboutMessageChannel === false && (didWarnAboutMessageChannel = true, typeof MessageChannel === "undefined" && console.error("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."));
|
|
519
|
-
var channel = new MessageChannel;
|
|
520
|
-
channel.port1.onmessage = callback;
|
|
521
|
-
channel.port2.postMessage(undefined);
|
|
522
|
-
};
|
|
523
|
-
}
|
|
524
|
-
return enqueueTaskImpl(task);
|
|
525
|
-
}
|
|
526
|
-
function aggregateErrors(errors) {
|
|
527
|
-
return 1 < errors.length && typeof AggregateError === "function" ? new AggregateError(errors) : errors[0];
|
|
528
|
-
}
|
|
529
|
-
function popActScope(prevActQueue, prevActScopeDepth) {
|
|
530
|
-
prevActScopeDepth !== actScopeDepth - 1 && console.error("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. ");
|
|
531
|
-
actScopeDepth = prevActScopeDepth;
|
|
532
|
-
}
|
|
533
|
-
function recursivelyFlushAsyncActWork(returnValue, resolve, reject) {
|
|
534
|
-
var queue = ReactSharedInternals.actQueue;
|
|
535
|
-
if (queue !== null)
|
|
536
|
-
if (queue.length !== 0)
|
|
537
|
-
try {
|
|
538
|
-
flushActQueue(queue);
|
|
539
|
-
enqueueTask(function() {
|
|
540
|
-
return recursivelyFlushAsyncActWork(returnValue, resolve, reject);
|
|
541
|
-
});
|
|
542
|
-
return;
|
|
543
|
-
} catch (error) {
|
|
544
|
-
ReactSharedInternals.thrownErrors.push(error);
|
|
545
|
-
}
|
|
546
|
-
else
|
|
547
|
-
ReactSharedInternals.actQueue = null;
|
|
548
|
-
0 < ReactSharedInternals.thrownErrors.length ? (queue = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(queue)) : resolve(returnValue);
|
|
549
|
-
}
|
|
550
|
-
function flushActQueue(queue) {
|
|
551
|
-
if (!isFlushing) {
|
|
552
|
-
isFlushing = true;
|
|
553
|
-
var i = 0;
|
|
554
|
-
try {
|
|
555
|
-
for (;i < queue.length; i++) {
|
|
556
|
-
var callback = queue[i];
|
|
557
|
-
do {
|
|
558
|
-
ReactSharedInternals.didUsePromise = false;
|
|
559
|
-
var continuation = callback(false);
|
|
560
|
-
if (continuation !== null) {
|
|
561
|
-
if (ReactSharedInternals.didUsePromise) {
|
|
562
|
-
queue[i] = callback;
|
|
563
|
-
queue.splice(0, i);
|
|
564
|
-
return;
|
|
565
|
-
}
|
|
566
|
-
callback = continuation;
|
|
567
|
-
} else
|
|
568
|
-
break;
|
|
569
|
-
} while (1);
|
|
570
|
-
}
|
|
571
|
-
queue.length = 0;
|
|
572
|
-
} catch (error) {
|
|
573
|
-
queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error);
|
|
574
|
-
} finally {
|
|
575
|
-
isFlushing = false;
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
}
|
|
579
|
-
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== "undefined" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart === "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
|
|
580
|
-
var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = Symbol.for("react.profiler");
|
|
581
|
-
Symbol.for("react.provider");
|
|
582
|
-
var REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = Symbol.for("react.memo"), REACT_LAZY_TYPE = Symbol.for("react.lazy"), REACT_OFFSCREEN_TYPE = Symbol.for("react.offscreen"), MAYBE_ITERATOR_SYMBOL = Symbol.iterator, didWarnStateUpdateForUnmountedComponent = {}, ReactNoopUpdateQueue = {
|
|
583
|
-
isMounted: function() {
|
|
584
|
-
return false;
|
|
585
|
-
},
|
|
586
|
-
enqueueForceUpdate: function(publicInstance) {
|
|
587
|
-
warnNoop(publicInstance, "forceUpdate");
|
|
588
|
-
},
|
|
589
|
-
enqueueReplaceState: function(publicInstance) {
|
|
590
|
-
warnNoop(publicInstance, "replaceState");
|
|
591
|
-
},
|
|
592
|
-
enqueueSetState: function(publicInstance) {
|
|
593
|
-
warnNoop(publicInstance, "setState");
|
|
594
|
-
}
|
|
595
|
-
}, assign = Object.assign, emptyObject = {};
|
|
596
|
-
Object.freeze(emptyObject);
|
|
597
|
-
Component.prototype.isReactComponent = {};
|
|
598
|
-
Component.prototype.setState = function(partialState, callback) {
|
|
599
|
-
if (typeof partialState !== "object" && typeof partialState !== "function" && partialState != null)
|
|
600
|
-
throw Error("takes an object of state variables to update or a function which returns an object of state variables.");
|
|
601
|
-
this.updater.enqueueSetState(this, partialState, callback, "setState");
|
|
602
|
-
};
|
|
603
|
-
Component.prototype.forceUpdate = function(callback) {
|
|
604
|
-
this.updater.enqueueForceUpdate(this, callback, "forceUpdate");
|
|
605
|
-
};
|
|
606
|
-
var deprecatedAPIs = {
|
|
607
|
-
isMounted: [
|
|
608
|
-
"isMounted",
|
|
609
|
-
"Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks."
|
|
610
|
-
],
|
|
611
|
-
replaceState: [
|
|
612
|
-
"replaceState",
|
|
613
|
-
"Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)."
|
|
614
|
-
]
|
|
615
|
-
}, fnName;
|
|
616
|
-
for (fnName in deprecatedAPIs)
|
|
617
|
-
deprecatedAPIs.hasOwnProperty(fnName) && defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
|
|
618
|
-
ComponentDummy.prototype = Component.prototype;
|
|
619
|
-
deprecatedAPIs = PureComponent.prototype = new ComponentDummy;
|
|
620
|
-
deprecatedAPIs.constructor = PureComponent;
|
|
621
|
-
assign(deprecatedAPIs, Component.prototype);
|
|
622
|
-
deprecatedAPIs.isPureReactComponent = true;
|
|
623
|
-
var isArrayImpl = Array.isArray, REACT_CLIENT_REFERENCE$2 = Symbol.for("react.client.reference"), ReactSharedInternals = {
|
|
624
|
-
H: null,
|
|
625
|
-
A: null,
|
|
626
|
-
T: null,
|
|
627
|
-
S: null,
|
|
628
|
-
actQueue: null,
|
|
629
|
-
isBatchingLegacy: false,
|
|
630
|
-
didScheduleLegacyUpdate: false,
|
|
631
|
-
didUsePromise: false,
|
|
632
|
-
thrownErrors: [],
|
|
633
|
-
getCurrentStack: null
|
|
634
|
-
}, hasOwnProperty = Object.prototype.hasOwnProperty, REACT_CLIENT_REFERENCE$1 = Symbol.for("react.client.reference"), disabledDepth = 0, prevLog, prevInfo, prevWarn, prevError, prevGroup, prevGroupCollapsed, prevGroupEnd;
|
|
635
|
-
disabledLog.__reactDisabledLog = true;
|
|
636
|
-
var prefix, suffix, reentry = false;
|
|
637
|
-
var componentFrameCache = new (typeof WeakMap === "function" ? WeakMap : Map);
|
|
638
|
-
var REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), specialPropKeyWarningShown, didWarnAboutOldJSXRuntime;
|
|
639
|
-
var didWarnAboutElementRef = {};
|
|
640
|
-
var ownerHasKeyUseWarning = {}, didWarnAboutMaps = false, userProvidedKeyEscapeRegex = /\/+/g, reportGlobalError = typeof reportError === "function" ? reportError : function(error) {
|
|
641
|
-
if (typeof window === "object" && typeof window.ErrorEvent === "function") {
|
|
642
|
-
var event = new window.ErrorEvent("error", {
|
|
643
|
-
bubbles: true,
|
|
644
|
-
cancelable: true,
|
|
645
|
-
message: typeof error === "object" && error !== null && typeof error.message === "string" ? String(error.message) : String(error),
|
|
646
|
-
error
|
|
647
|
-
});
|
|
648
|
-
if (!window.dispatchEvent(event))
|
|
649
|
-
return;
|
|
650
|
-
} else if (typeof process === "object" && typeof process.emit === "function") {
|
|
651
|
-
process.emit("uncaughtException", error);
|
|
652
|
-
return;
|
|
653
|
-
}
|
|
654
|
-
console.error(error);
|
|
655
|
-
}, didWarnAboutMessageChannel = false, enqueueTaskImpl = null, actScopeDepth = 0, didWarnNoAwaitAct = false, isFlushing = false, queueSeveralMicrotasks = typeof queueMicrotask === "function" ? function(callback) {
|
|
656
|
-
queueMicrotask(function() {
|
|
657
|
-
return queueMicrotask(callback);
|
|
658
|
-
});
|
|
659
|
-
} : enqueueTask;
|
|
660
|
-
exports.Children = {
|
|
661
|
-
map: mapChildren,
|
|
662
|
-
forEach: function(children, forEachFunc, forEachContext) {
|
|
663
|
-
mapChildren(children, function() {
|
|
664
|
-
forEachFunc.apply(this, arguments);
|
|
665
|
-
}, forEachContext);
|
|
666
|
-
},
|
|
667
|
-
count: function(children) {
|
|
668
|
-
var n = 0;
|
|
669
|
-
mapChildren(children, function() {
|
|
670
|
-
n++;
|
|
671
|
-
});
|
|
672
|
-
return n;
|
|
673
|
-
},
|
|
674
|
-
toArray: function(children) {
|
|
675
|
-
return mapChildren(children, function(child) {
|
|
676
|
-
return child;
|
|
677
|
-
}) || [];
|
|
678
|
-
},
|
|
679
|
-
only: function(children) {
|
|
680
|
-
if (!isValidElement(children))
|
|
681
|
-
throw Error("React.Children.only expected to receive a single React element child.");
|
|
682
|
-
return children;
|
|
683
|
-
}
|
|
684
|
-
};
|
|
685
|
-
exports.Component = Component;
|
|
686
|
-
exports.Fragment = REACT_FRAGMENT_TYPE;
|
|
687
|
-
exports.Profiler = REACT_PROFILER_TYPE;
|
|
688
|
-
exports.PureComponent = PureComponent;
|
|
689
|
-
exports.StrictMode = REACT_STRICT_MODE_TYPE;
|
|
690
|
-
exports.Suspense = REACT_SUSPENSE_TYPE;
|
|
691
|
-
exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = ReactSharedInternals;
|
|
692
|
-
exports.act = function(callback) {
|
|
693
|
-
var prevActQueue = ReactSharedInternals.actQueue, prevActScopeDepth = actScopeDepth;
|
|
694
|
-
actScopeDepth++;
|
|
695
|
-
var queue = ReactSharedInternals.actQueue = prevActQueue !== null ? prevActQueue : [], didAwaitActCall = false;
|
|
696
|
-
try {
|
|
697
|
-
var result = callback();
|
|
698
|
-
} catch (error) {
|
|
699
|
-
ReactSharedInternals.thrownErrors.push(error);
|
|
700
|
-
}
|
|
701
|
-
if (0 < ReactSharedInternals.thrownErrors.length)
|
|
702
|
-
throw popActScope(prevActQueue, prevActScopeDepth), callback = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, callback;
|
|
703
|
-
if (result !== null && typeof result === "object" && typeof result.then === "function") {
|
|
704
|
-
var thenable = result;
|
|
705
|
-
queueSeveralMicrotasks(function() {
|
|
706
|
-
didAwaitActCall || didWarnNoAwaitAct || (didWarnNoAwaitAct = true, console.error("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"));
|
|
707
|
-
});
|
|
708
|
-
return {
|
|
709
|
-
then: function(resolve, reject) {
|
|
710
|
-
didAwaitActCall = true;
|
|
711
|
-
thenable.then(function(returnValue) {
|
|
712
|
-
popActScope(prevActQueue, prevActScopeDepth);
|
|
713
|
-
if (prevActScopeDepth === 0) {
|
|
714
|
-
try {
|
|
715
|
-
flushActQueue(queue), enqueueTask(function() {
|
|
716
|
-
return recursivelyFlushAsyncActWork(returnValue, resolve, reject);
|
|
717
|
-
});
|
|
718
|
-
} catch (error$2) {
|
|
719
|
-
ReactSharedInternals.thrownErrors.push(error$2);
|
|
720
|
-
}
|
|
721
|
-
if (0 < ReactSharedInternals.thrownErrors.length) {
|
|
722
|
-
var _thrownError = aggregateErrors(ReactSharedInternals.thrownErrors);
|
|
723
|
-
ReactSharedInternals.thrownErrors.length = 0;
|
|
724
|
-
reject(_thrownError);
|
|
725
|
-
}
|
|
726
|
-
} else
|
|
727
|
-
resolve(returnValue);
|
|
728
|
-
}, function(error) {
|
|
729
|
-
popActScope(prevActQueue, prevActScopeDepth);
|
|
730
|
-
0 < ReactSharedInternals.thrownErrors.length ? (error = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(error)) : reject(error);
|
|
731
|
-
});
|
|
732
|
-
}
|
|
733
|
-
};
|
|
734
|
-
}
|
|
735
|
-
var returnValue$jscomp$0 = result;
|
|
736
|
-
popActScope(prevActQueue, prevActScopeDepth);
|
|
737
|
-
prevActScopeDepth === 0 && (flushActQueue(queue), queue.length !== 0 && queueSeveralMicrotasks(function() {
|
|
738
|
-
didAwaitActCall || didWarnNoAwaitAct || (didWarnNoAwaitAct = true, console.error("A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\n\nawait act(() => ...)"));
|
|
739
|
-
}), ReactSharedInternals.actQueue = null);
|
|
740
|
-
if (0 < ReactSharedInternals.thrownErrors.length)
|
|
741
|
-
throw callback = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, callback;
|
|
742
|
-
return {
|
|
743
|
-
then: function(resolve, reject) {
|
|
744
|
-
didAwaitActCall = true;
|
|
745
|
-
prevActScopeDepth === 0 ? (ReactSharedInternals.actQueue = queue, enqueueTask(function() {
|
|
746
|
-
return recursivelyFlushAsyncActWork(returnValue$jscomp$0, resolve, reject);
|
|
747
|
-
})) : resolve(returnValue$jscomp$0);
|
|
748
|
-
}
|
|
749
|
-
};
|
|
750
|
-
};
|
|
751
|
-
exports.cache = function(fn) {
|
|
752
|
-
return function() {
|
|
753
|
-
return fn.apply(null, arguments);
|
|
754
|
-
};
|
|
755
|
-
};
|
|
756
|
-
exports.cloneElement = function(element, config, children) {
|
|
757
|
-
if (element === null || element === undefined)
|
|
758
|
-
throw Error("The argument must be a React element, but you passed " + element + ".");
|
|
759
|
-
var props = assign({}, element.props), key = element.key, owner = element._owner;
|
|
760
|
-
if (config != null) {
|
|
761
|
-
var JSCompiler_inline_result;
|
|
762
|
-
a: {
|
|
763
|
-
if (hasOwnProperty.call(config, "ref") && (JSCompiler_inline_result = Object.getOwnPropertyDescriptor(config, "ref").get) && JSCompiler_inline_result.isReactWarning) {
|
|
764
|
-
JSCompiler_inline_result = false;
|
|
765
|
-
break a;
|
|
766
|
-
}
|
|
767
|
-
JSCompiler_inline_result = config.ref !== undefined;
|
|
768
|
-
}
|
|
769
|
-
JSCompiler_inline_result && (owner = getOwner());
|
|
770
|
-
hasValidKey(config) && (checkKeyStringCoercion(config.key), key = "" + config.key);
|
|
771
|
-
for (propName in config)
|
|
772
|
-
!hasOwnProperty.call(config, propName) || propName === "key" || propName === "__self" || propName === "__source" || propName === "ref" && config.ref === undefined || (props[propName] = config[propName]);
|
|
773
|
-
}
|
|
774
|
-
var propName = arguments.length - 2;
|
|
775
|
-
if (propName === 1)
|
|
776
|
-
props.children = children;
|
|
777
|
-
else if (1 < propName) {
|
|
778
|
-
JSCompiler_inline_result = Array(propName);
|
|
779
|
-
for (var i = 0;i < propName; i++)
|
|
780
|
-
JSCompiler_inline_result[i] = arguments[i + 2];
|
|
781
|
-
props.children = JSCompiler_inline_result;
|
|
782
|
-
}
|
|
783
|
-
props = ReactElement(element.type, key, undefined, undefined, owner, props);
|
|
784
|
-
for (key = 2;key < arguments.length; key++)
|
|
785
|
-
validateChildKeys(arguments[key], props.type);
|
|
786
|
-
return props;
|
|
787
|
-
};
|
|
788
|
-
exports.createContext = function(defaultValue) {
|
|
789
|
-
defaultValue = {
|
|
790
|
-
$$typeof: REACT_CONTEXT_TYPE,
|
|
791
|
-
_currentValue: defaultValue,
|
|
792
|
-
_currentValue2: defaultValue,
|
|
793
|
-
_threadCount: 0,
|
|
794
|
-
Provider: null,
|
|
795
|
-
Consumer: null
|
|
796
|
-
};
|
|
797
|
-
defaultValue.Provider = defaultValue;
|
|
798
|
-
defaultValue.Consumer = {
|
|
799
|
-
$$typeof: REACT_CONSUMER_TYPE,
|
|
800
|
-
_context: defaultValue
|
|
801
|
-
};
|
|
802
|
-
defaultValue._currentRenderer = null;
|
|
803
|
-
defaultValue._currentRenderer2 = null;
|
|
804
|
-
return defaultValue;
|
|
805
|
-
};
|
|
806
|
-
exports.createElement = function(type, config, children) {
|
|
807
|
-
if (isValidElementType(type))
|
|
808
|
-
for (var i = 2;i < arguments.length; i++)
|
|
809
|
-
validateChildKeys(arguments[i], type);
|
|
810
|
-
else {
|
|
811
|
-
i = "";
|
|
812
|
-
if (type === undefined || typeof type === "object" && type !== null && Object.keys(type).length === 0)
|
|
813
|
-
i += " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.";
|
|
814
|
-
if (type === null)
|
|
815
|
-
var typeString = "null";
|
|
816
|
-
else
|
|
817
|
-
isArrayImpl(type) ? typeString = "array" : type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE ? (typeString = "<" + (getComponentNameFromType(type.type) || "Unknown") + " />", i = " Did you accidentally export a JSX literal instead of a component?") : typeString = typeof type;
|
|
818
|
-
console.error("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s", typeString, i);
|
|
819
|
-
}
|
|
820
|
-
var propName;
|
|
821
|
-
i = {};
|
|
822
|
-
typeString = null;
|
|
823
|
-
if (config != null)
|
|
824
|
-
for (propName in didWarnAboutOldJSXRuntime || !("__self" in config) || "key" in config || (didWarnAboutOldJSXRuntime = true, console.warn("Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform")), hasValidKey(config) && (checkKeyStringCoercion(config.key), typeString = "" + config.key), config)
|
|
825
|
-
hasOwnProperty.call(config, propName) && propName !== "key" && propName !== "__self" && propName !== "__source" && (i[propName] = config[propName]);
|
|
826
|
-
var childrenLength = arguments.length - 2;
|
|
827
|
-
if (childrenLength === 1)
|
|
828
|
-
i.children = children;
|
|
829
|
-
else if (1 < childrenLength) {
|
|
830
|
-
for (var childArray = Array(childrenLength), _i = 0;_i < childrenLength; _i++)
|
|
831
|
-
childArray[_i] = arguments[_i + 2];
|
|
832
|
-
Object.freeze && Object.freeze(childArray);
|
|
833
|
-
i.children = childArray;
|
|
834
|
-
}
|
|
835
|
-
if (type && type.defaultProps)
|
|
836
|
-
for (propName in childrenLength = type.defaultProps, childrenLength)
|
|
837
|
-
i[propName] === undefined && (i[propName] = childrenLength[propName]);
|
|
838
|
-
typeString && defineKeyPropWarningGetter(i, typeof type === "function" ? type.displayName || type.name || "Unknown" : type);
|
|
839
|
-
return ReactElement(type, typeString, undefined, undefined, getOwner(), i);
|
|
840
|
-
};
|
|
841
|
-
exports.createRef = function() {
|
|
842
|
-
var refObject = { current: null };
|
|
843
|
-
Object.seal(refObject);
|
|
844
|
-
return refObject;
|
|
845
|
-
};
|
|
846
|
-
exports.forwardRef = function(render) {
|
|
847
|
-
render != null && render.$$typeof === REACT_MEMO_TYPE ? console.error("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...)).") : typeof render !== "function" ? console.error("forwardRef requires a render function but was given %s.", render === null ? "null" : typeof render) : render.length !== 0 && render.length !== 2 && console.error("forwardRef render functions accept exactly two parameters: props and ref. %s", render.length === 1 ? "Did you forget to use the ref parameter?" : "Any additional parameter will be undefined.");
|
|
848
|
-
render != null && render.defaultProps != null && console.error("forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?");
|
|
849
|
-
var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render }, ownName;
|
|
850
|
-
Object.defineProperty(elementType, "displayName", {
|
|
851
|
-
enumerable: false,
|
|
852
|
-
configurable: true,
|
|
853
|
-
get: function() {
|
|
854
|
-
return ownName;
|
|
855
|
-
},
|
|
856
|
-
set: function(name) {
|
|
857
|
-
ownName = name;
|
|
858
|
-
render.name || render.displayName || (Object.defineProperty(render, "name", { value: name }), render.displayName = name);
|
|
859
|
-
}
|
|
860
|
-
});
|
|
861
|
-
return elementType;
|
|
862
|
-
};
|
|
863
|
-
exports.isValidElement = isValidElement;
|
|
864
|
-
exports.lazy = function(ctor) {
|
|
865
|
-
return {
|
|
866
|
-
$$typeof: REACT_LAZY_TYPE,
|
|
867
|
-
_payload: { _status: -1, _result: ctor },
|
|
868
|
-
_init: lazyInitializer
|
|
869
|
-
};
|
|
870
|
-
};
|
|
871
|
-
exports.memo = function(type, compare) {
|
|
872
|
-
isValidElementType(type) || console.error("memo: The first argument must be a component. Instead received: %s", type === null ? "null" : typeof type);
|
|
873
|
-
compare = {
|
|
874
|
-
$$typeof: REACT_MEMO_TYPE,
|
|
875
|
-
type,
|
|
876
|
-
compare: compare === undefined ? null : compare
|
|
877
|
-
};
|
|
878
|
-
var ownName;
|
|
879
|
-
Object.defineProperty(compare, "displayName", {
|
|
880
|
-
enumerable: false,
|
|
881
|
-
configurable: true,
|
|
882
|
-
get: function() {
|
|
883
|
-
return ownName;
|
|
884
|
-
},
|
|
885
|
-
set: function(name) {
|
|
886
|
-
ownName = name;
|
|
887
|
-
type.name || type.displayName || (Object.defineProperty(type, "name", { value: name }), type.displayName = name);
|
|
888
|
-
}
|
|
889
|
-
});
|
|
890
|
-
return compare;
|
|
891
|
-
};
|
|
892
|
-
exports.startTransition = function(scope) {
|
|
893
|
-
var prevTransition = ReactSharedInternals.T, currentTransition = {};
|
|
894
|
-
ReactSharedInternals.T = currentTransition;
|
|
895
|
-
currentTransition._updatedFibers = new Set;
|
|
896
|
-
try {
|
|
897
|
-
var returnValue = scope(), onStartTransitionFinish = ReactSharedInternals.S;
|
|
898
|
-
onStartTransitionFinish !== null && onStartTransitionFinish(currentTransition, returnValue);
|
|
899
|
-
typeof returnValue === "object" && returnValue !== null && typeof returnValue.then === "function" && returnValue.then(noop, reportGlobalError);
|
|
900
|
-
} catch (error) {
|
|
901
|
-
reportGlobalError(error);
|
|
902
|
-
} finally {
|
|
903
|
-
prevTransition === null && currentTransition._updatedFibers && (scope = currentTransition._updatedFibers.size, currentTransition._updatedFibers.clear(), 10 < scope && console.warn("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.")), ReactSharedInternals.T = prevTransition;
|
|
904
|
-
}
|
|
905
|
-
};
|
|
906
|
-
exports.unstable_useCacheRefresh = function() {
|
|
907
|
-
return resolveDispatcher().useCacheRefresh();
|
|
908
|
-
};
|
|
909
|
-
exports.use = function(usable) {
|
|
910
|
-
return resolveDispatcher().use(usable);
|
|
911
|
-
};
|
|
912
|
-
exports.useActionState = function(action, initialState, permalink) {
|
|
913
|
-
return resolveDispatcher().useActionState(action, initialState, permalink);
|
|
914
|
-
};
|
|
915
|
-
exports.useCallback = function(callback, deps) {
|
|
916
|
-
return resolveDispatcher().useCallback(callback, deps);
|
|
917
|
-
};
|
|
918
|
-
exports.useContext = function(Context) {
|
|
919
|
-
var dispatcher = resolveDispatcher();
|
|
920
|
-
Context.$$typeof === REACT_CONSUMER_TYPE && console.error("Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?");
|
|
921
|
-
return dispatcher.useContext(Context);
|
|
922
|
-
};
|
|
923
|
-
exports.useDebugValue = function(value, formatterFn) {
|
|
924
|
-
return resolveDispatcher().useDebugValue(value, formatterFn);
|
|
925
|
-
};
|
|
926
|
-
exports.useDeferredValue = function(value, initialValue) {
|
|
927
|
-
return resolveDispatcher().useDeferredValue(value, initialValue);
|
|
928
|
-
};
|
|
929
|
-
exports.useEffect = function(create, deps) {
|
|
930
|
-
return resolveDispatcher().useEffect(create, deps);
|
|
931
|
-
};
|
|
932
|
-
exports.useId = function() {
|
|
933
|
-
return resolveDispatcher().useId();
|
|
934
|
-
};
|
|
935
|
-
exports.useImperativeHandle = function(ref, create, deps) {
|
|
936
|
-
return resolveDispatcher().useImperativeHandle(ref, create, deps);
|
|
937
|
-
};
|
|
938
|
-
exports.useInsertionEffect = function(create, deps) {
|
|
939
|
-
return resolveDispatcher().useInsertionEffect(create, deps);
|
|
940
|
-
};
|
|
941
|
-
exports.useLayoutEffect = function(create, deps) {
|
|
942
|
-
return resolveDispatcher().useLayoutEffect(create, deps);
|
|
943
|
-
};
|
|
944
|
-
exports.useMemo = function(create, deps) {
|
|
945
|
-
return resolveDispatcher().useMemo(create, deps);
|
|
946
|
-
};
|
|
947
|
-
exports.useOptimistic = function(passthrough, reducer) {
|
|
948
|
-
return resolveDispatcher().useOptimistic(passthrough, reducer);
|
|
949
|
-
};
|
|
950
|
-
exports.useReducer = function(reducer, initialArg, init) {
|
|
951
|
-
return resolveDispatcher().useReducer(reducer, initialArg, init);
|
|
952
|
-
};
|
|
953
|
-
exports.useRef = function(initialValue) {
|
|
954
|
-
return resolveDispatcher().useRef(initialValue);
|
|
955
|
-
};
|
|
956
|
-
exports.useState = function(initialState) {
|
|
957
|
-
return resolveDispatcher().useState(initialState);
|
|
958
|
-
};
|
|
959
|
-
exports.useSyncExternalStore = function(subscribe, getSnapshot, getServerSnapshot) {
|
|
960
|
-
return resolveDispatcher().useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
961
|
-
};
|
|
962
|
-
exports.useTransition = function() {
|
|
963
|
-
return resolveDispatcher().useTransition();
|
|
964
|
-
};
|
|
965
|
-
exports.version = "19.0.0";
|
|
966
|
-
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== "undefined" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop === "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
|
|
967
|
-
})();
|
|
968
|
-
});
|
|
969
|
-
|
|
970
|
-
// /Users/dolmios/GitHub/personal/stoop/node_modules/react/index.js
|
|
971
|
-
var require_react = __commonJS((exports, module) => {
|
|
972
|
-
var react_development = __toESM(require_react_development(), 1);
|
|
973
|
-
if (false) {
|
|
974
|
-
} else {
|
|
975
|
-
module.exports = react_development;
|
|
976
|
-
}
|
|
977
|
-
});
|
|
978
|
-
|
|
979
|
-
// node_modules/.pnpm/react@19.0.0/node_modules/react/cjs/react-jsx-dev-runtime.development.js
|
|
980
|
-
var require_react_jsx_dev_runtime_development = __commonJS((exports) => {
|
|
981
|
-
var React = __toESM(require_react(), 1);
|
|
982
|
-
(function() {
|
|
983
|
-
function getComponentNameFromType(type) {
|
|
984
|
-
if (type == null)
|
|
985
|
-
return null;
|
|
986
|
-
if (typeof type === "function")
|
|
987
|
-
return type.$$typeof === REACT_CLIENT_REFERENCE$2 ? null : type.displayName || type.name || null;
|
|
988
|
-
if (typeof type === "string")
|
|
989
|
-
return type;
|
|
990
|
-
switch (type) {
|
|
991
|
-
case REACT_FRAGMENT_TYPE:
|
|
992
|
-
return "Fragment";
|
|
993
|
-
case REACT_PORTAL_TYPE:
|
|
994
|
-
return "Portal";
|
|
995
|
-
case REACT_PROFILER_TYPE:
|
|
996
|
-
return "Profiler";
|
|
997
|
-
case REACT_STRICT_MODE_TYPE:
|
|
998
|
-
return "StrictMode";
|
|
999
|
-
case REACT_SUSPENSE_TYPE:
|
|
1000
|
-
return "Suspense";
|
|
1001
|
-
case REACT_SUSPENSE_LIST_TYPE:
|
|
1002
|
-
return "SuspenseList";
|
|
1003
|
-
}
|
|
1004
|
-
if (typeof type === "object")
|
|
1005
|
-
switch (typeof type.tag === "number" && console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), type.$$typeof) {
|
|
1006
|
-
case REACT_CONTEXT_TYPE:
|
|
1007
|
-
return (type.displayName || "Context") + ".Provider";
|
|
1008
|
-
case REACT_CONSUMER_TYPE:
|
|
1009
|
-
return (type._context.displayName || "Context") + ".Consumer";
|
|
1010
|
-
case REACT_FORWARD_REF_TYPE:
|
|
1011
|
-
var innerType = type.render;
|
|
1012
|
-
type = type.displayName;
|
|
1013
|
-
type || (type = innerType.displayName || innerType.name || "", type = type !== "" ? "ForwardRef(" + type + ")" : "ForwardRef");
|
|
1014
|
-
return type;
|
|
1015
|
-
case REACT_MEMO_TYPE:
|
|
1016
|
-
return innerType = type.displayName || null, innerType !== null ? innerType : getComponentNameFromType(type.type) || "Memo";
|
|
1017
|
-
case REACT_LAZY_TYPE:
|
|
1018
|
-
innerType = type._payload;
|
|
1019
|
-
type = type._init;
|
|
1020
|
-
try {
|
|
1021
|
-
return getComponentNameFromType(type(innerType));
|
|
1022
|
-
} catch (x) {
|
|
1023
|
-
}
|
|
1024
|
-
}
|
|
1025
|
-
return null;
|
|
1026
|
-
}
|
|
1027
|
-
function testStringCoercion(value) {
|
|
1028
|
-
return "" + value;
|
|
1029
|
-
}
|
|
1030
|
-
function checkKeyStringCoercion(value) {
|
|
1031
|
-
try {
|
|
1032
|
-
testStringCoercion(value);
|
|
1033
|
-
var JSCompiler_inline_result = false;
|
|
1034
|
-
} catch (e) {
|
|
1035
|
-
JSCompiler_inline_result = true;
|
|
1036
|
-
}
|
|
1037
|
-
if (JSCompiler_inline_result) {
|
|
1038
|
-
JSCompiler_inline_result = console;
|
|
1039
|
-
var JSCompiler_temp_const = JSCompiler_inline_result.error;
|
|
1040
|
-
var JSCompiler_inline_result$jscomp$0 = typeof Symbol === "function" && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object";
|
|
1041
|
-
JSCompiler_temp_const.call(JSCompiler_inline_result, "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", JSCompiler_inline_result$jscomp$0);
|
|
1042
|
-
return testStringCoercion(value);
|
|
1043
|
-
}
|
|
1044
|
-
}
|
|
1045
|
-
function disabledLog() {
|
|
1046
|
-
}
|
|
1047
|
-
function disableLogs() {
|
|
1048
|
-
if (disabledDepth === 0) {
|
|
1049
|
-
prevLog = console.log;
|
|
1050
|
-
prevInfo = console.info;
|
|
1051
|
-
prevWarn = console.warn;
|
|
1052
|
-
prevError = console.error;
|
|
1053
|
-
prevGroup = console.group;
|
|
1054
|
-
prevGroupCollapsed = console.groupCollapsed;
|
|
1055
|
-
prevGroupEnd = console.groupEnd;
|
|
1056
|
-
var props = {
|
|
1057
|
-
configurable: true,
|
|
1058
|
-
enumerable: true,
|
|
1059
|
-
value: disabledLog,
|
|
1060
|
-
writable: true
|
|
1061
|
-
};
|
|
1062
|
-
Object.defineProperties(console, {
|
|
1063
|
-
info: props,
|
|
1064
|
-
log: props,
|
|
1065
|
-
warn: props,
|
|
1066
|
-
error: props,
|
|
1067
|
-
group: props,
|
|
1068
|
-
groupCollapsed: props,
|
|
1069
|
-
groupEnd: props
|
|
1070
|
-
});
|
|
1071
|
-
}
|
|
1072
|
-
disabledDepth++;
|
|
1073
|
-
}
|
|
1074
|
-
function reenableLogs() {
|
|
1075
|
-
disabledDepth--;
|
|
1076
|
-
if (disabledDepth === 0) {
|
|
1077
|
-
var props = { configurable: true, enumerable: true, writable: true };
|
|
1078
|
-
Object.defineProperties(console, {
|
|
1079
|
-
log: assign({}, props, { value: prevLog }),
|
|
1080
|
-
info: assign({}, props, { value: prevInfo }),
|
|
1081
|
-
warn: assign({}, props, { value: prevWarn }),
|
|
1082
|
-
error: assign({}, props, { value: prevError }),
|
|
1083
|
-
group: assign({}, props, { value: prevGroup }),
|
|
1084
|
-
groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),
|
|
1085
|
-
groupEnd: assign({}, props, { value: prevGroupEnd })
|
|
1086
|
-
});
|
|
1087
|
-
}
|
|
1088
|
-
0 > disabledDepth && console.error("disabledDepth fell below zero. This is a bug in React. Please file an issue.");
|
|
1089
|
-
}
|
|
1090
|
-
function describeBuiltInComponentFrame(name) {
|
|
1091
|
-
if (prefix === undefined)
|
|
1092
|
-
try {
|
|
1093
|
-
throw Error();
|
|
1094
|
-
} catch (x) {
|
|
1095
|
-
var match = x.stack.trim().match(/\n( *(at )?)/);
|
|
1096
|
-
prefix = match && match[1] || "";
|
|
1097
|
-
suffix = -1 < x.stack.indexOf("\n at") ? " (<anonymous>)" : -1 < x.stack.indexOf("@") ? "@unknown:0:0" : "";
|
|
1098
|
-
}
|
|
1099
|
-
return "\n" + prefix + name + suffix;
|
|
1100
|
-
}
|
|
1101
|
-
function describeNativeComponentFrame(fn, construct) {
|
|
1102
|
-
if (!fn || reentry)
|
|
1103
|
-
return "";
|
|
1104
|
-
var frame = componentFrameCache.get(fn);
|
|
1105
|
-
if (frame !== undefined)
|
|
1106
|
-
return frame;
|
|
1107
|
-
reentry = true;
|
|
1108
|
-
frame = Error.prepareStackTrace;
|
|
1109
|
-
Error.prepareStackTrace = undefined;
|
|
1110
|
-
var previousDispatcher = null;
|
|
1111
|
-
previousDispatcher = ReactSharedInternals.H;
|
|
1112
|
-
ReactSharedInternals.H = null;
|
|
1113
|
-
disableLogs();
|
|
1114
|
-
try {
|
|
1115
|
-
var RunInRootFrame = {
|
|
1116
|
-
DetermineComponentFrameRoot: function() {
|
|
1117
|
-
try {
|
|
1118
|
-
if (construct) {
|
|
1119
|
-
var Fake = function() {
|
|
1120
|
-
throw Error();
|
|
1121
|
-
};
|
|
1122
|
-
Object.defineProperty(Fake.prototype, "props", {
|
|
1123
|
-
set: function() {
|
|
1124
|
-
throw Error();
|
|
1125
|
-
}
|
|
1126
|
-
});
|
|
1127
|
-
if (typeof Reflect === "object" && Reflect.construct) {
|
|
1128
|
-
try {
|
|
1129
|
-
Reflect.construct(Fake, []);
|
|
1130
|
-
} catch (x) {
|
|
1131
|
-
var control = x;
|
|
1132
|
-
}
|
|
1133
|
-
Reflect.construct(fn, [], Fake);
|
|
1134
|
-
} else {
|
|
1135
|
-
try {
|
|
1136
|
-
Fake.call();
|
|
1137
|
-
} catch (x$0) {
|
|
1138
|
-
control = x$0;
|
|
1139
|
-
}
|
|
1140
|
-
fn.call(Fake.prototype);
|
|
1141
|
-
}
|
|
1142
|
-
} else {
|
|
1143
|
-
try {
|
|
1144
|
-
throw Error();
|
|
1145
|
-
} catch (x$1) {
|
|
1146
|
-
control = x$1;
|
|
1147
|
-
}
|
|
1148
|
-
(Fake = fn()) && typeof Fake.catch === "function" && Fake.catch(function() {
|
|
1149
|
-
});
|
|
1150
|
-
}
|
|
1151
|
-
} catch (sample) {
|
|
1152
|
-
if (sample && control && typeof sample.stack === "string")
|
|
1153
|
-
return [sample.stack, control.stack];
|
|
1154
|
-
}
|
|
1155
|
-
return [null, null];
|
|
1156
|
-
}
|
|
1157
|
-
};
|
|
1158
|
-
RunInRootFrame.DetermineComponentFrameRoot.displayName = "DetermineComponentFrameRoot";
|
|
1159
|
-
var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, "name");
|
|
1160
|
-
namePropDescriptor && namePropDescriptor.configurable && Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, "name", { value: "DetermineComponentFrameRoot" });
|
|
1161
|
-
var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(), sampleStack = _RunInRootFrame$Deter[0], controlStack = _RunInRootFrame$Deter[1];
|
|
1162
|
-
if (sampleStack && controlStack) {
|
|
1163
|
-
var sampleLines = sampleStack.split("\n"), controlLines = controlStack.split("\n");
|
|
1164
|
-
for (_RunInRootFrame$Deter = namePropDescriptor = 0;namePropDescriptor < sampleLines.length && !sampleLines[namePropDescriptor].includes("DetermineComponentFrameRoot"); )
|
|
1165
|
-
namePropDescriptor++;
|
|
1166
|
-
for (;_RunInRootFrame$Deter < controlLines.length && !controlLines[_RunInRootFrame$Deter].includes("DetermineComponentFrameRoot"); )
|
|
1167
|
-
_RunInRootFrame$Deter++;
|
|
1168
|
-
if (namePropDescriptor === sampleLines.length || _RunInRootFrame$Deter === controlLines.length)
|
|
1169
|
-
for (namePropDescriptor = sampleLines.length - 1, _RunInRootFrame$Deter = controlLines.length - 1;1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter && sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]; )
|
|
1170
|
-
_RunInRootFrame$Deter--;
|
|
1171
|
-
for (;1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter; namePropDescriptor--, _RunInRootFrame$Deter--)
|
|
1172
|
-
if (sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]) {
|
|
1173
|
-
if (namePropDescriptor !== 1 || _RunInRootFrame$Deter !== 1) {
|
|
1174
|
-
do
|
|
1175
|
-
if (namePropDescriptor--, _RunInRootFrame$Deter--, 0 > _RunInRootFrame$Deter || sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]) {
|
|
1176
|
-
var _frame = "\n" + sampleLines[namePropDescriptor].replace(" at new ", " at ");
|
|
1177
|
-
fn.displayName && _frame.includes("<anonymous>") && (_frame = _frame.replace("<anonymous>", fn.displayName));
|
|
1178
|
-
typeof fn === "function" && componentFrameCache.set(fn, _frame);
|
|
1179
|
-
return _frame;
|
|
1180
|
-
}
|
|
1181
|
-
while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);
|
|
1182
|
-
}
|
|
1183
|
-
break;
|
|
1184
|
-
}
|
|
1185
|
-
}
|
|
1186
|
-
} finally {
|
|
1187
|
-
reentry = false, ReactSharedInternals.H = previousDispatcher, reenableLogs(), Error.prepareStackTrace = frame;
|
|
1188
|
-
}
|
|
1189
|
-
sampleLines = (sampleLines = fn ? fn.displayName || fn.name : "") ? describeBuiltInComponentFrame(sampleLines) : "";
|
|
1190
|
-
typeof fn === "function" && componentFrameCache.set(fn, sampleLines);
|
|
1191
|
-
return sampleLines;
|
|
1192
|
-
}
|
|
1193
|
-
function describeUnknownElementTypeFrameInDEV(type) {
|
|
1194
|
-
if (type == null)
|
|
1195
|
-
return "";
|
|
1196
|
-
if (typeof type === "function") {
|
|
1197
|
-
var prototype = type.prototype;
|
|
1198
|
-
return describeNativeComponentFrame(type, !(!prototype || !prototype.isReactComponent));
|
|
1199
|
-
}
|
|
1200
|
-
if (typeof type === "string")
|
|
1201
|
-
return describeBuiltInComponentFrame(type);
|
|
1202
|
-
switch (type) {
|
|
1203
|
-
case REACT_SUSPENSE_TYPE:
|
|
1204
|
-
return describeBuiltInComponentFrame("Suspense");
|
|
1205
|
-
case REACT_SUSPENSE_LIST_TYPE:
|
|
1206
|
-
return describeBuiltInComponentFrame("SuspenseList");
|
|
1207
|
-
}
|
|
1208
|
-
if (typeof type === "object")
|
|
1209
|
-
switch (type.$$typeof) {
|
|
1210
|
-
case REACT_FORWARD_REF_TYPE:
|
|
1211
|
-
return type = describeNativeComponentFrame(type.render, false), type;
|
|
1212
|
-
case REACT_MEMO_TYPE:
|
|
1213
|
-
return describeUnknownElementTypeFrameInDEV(type.type);
|
|
1214
|
-
case REACT_LAZY_TYPE:
|
|
1215
|
-
prototype = type._payload;
|
|
1216
|
-
type = type._init;
|
|
1217
|
-
try {
|
|
1218
|
-
return describeUnknownElementTypeFrameInDEV(type(prototype));
|
|
1219
|
-
} catch (x) {
|
|
1220
|
-
}
|
|
1221
|
-
}
|
|
1222
|
-
return "";
|
|
1223
|
-
}
|
|
1224
|
-
function getOwner() {
|
|
1225
|
-
var dispatcher = ReactSharedInternals.A;
|
|
1226
|
-
return dispatcher === null ? null : dispatcher.getOwner();
|
|
1227
|
-
}
|
|
1228
|
-
function hasValidKey(config) {
|
|
1229
|
-
if (hasOwnProperty.call(config, "key")) {
|
|
1230
|
-
var getter = Object.getOwnPropertyDescriptor(config, "key").get;
|
|
1231
|
-
if (getter && getter.isReactWarning)
|
|
1232
|
-
return false;
|
|
1233
|
-
}
|
|
1234
|
-
return config.key !== undefined;
|
|
1235
|
-
}
|
|
1236
|
-
function defineKeyPropWarningGetter(props, displayName) {
|
|
1237
|
-
function warnAboutAccessingKey() {
|
|
1238
|
-
specialPropKeyWarningShown || (specialPropKeyWarningShown = true, console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", displayName));
|
|
1239
|
-
}
|
|
1240
|
-
warnAboutAccessingKey.isReactWarning = true;
|
|
1241
|
-
Object.defineProperty(props, "key", {
|
|
1242
|
-
get: warnAboutAccessingKey,
|
|
1243
|
-
configurable: true
|
|
1244
|
-
});
|
|
1245
|
-
}
|
|
1246
|
-
function elementRefGetterWithDeprecationWarning() {
|
|
1247
|
-
var componentName = getComponentNameFromType(this.type);
|
|
1248
|
-
didWarnAboutElementRef[componentName] || (didWarnAboutElementRef[componentName] = true, console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."));
|
|
1249
|
-
componentName = this.props.ref;
|
|
1250
|
-
return componentName !== undefined ? componentName : null;
|
|
1251
|
-
}
|
|
1252
|
-
function ReactElement(type, key, self, source, owner, props) {
|
|
1253
|
-
self = props.ref;
|
|
1254
|
-
type = {
|
|
1255
|
-
$$typeof: REACT_ELEMENT_TYPE,
|
|
1256
|
-
type,
|
|
1257
|
-
key,
|
|
1258
|
-
props,
|
|
1259
|
-
_owner: owner
|
|
1260
|
-
};
|
|
1261
|
-
(self !== undefined ? self : null) !== null ? Object.defineProperty(type, "ref", {
|
|
1262
|
-
enumerable: false,
|
|
1263
|
-
get: elementRefGetterWithDeprecationWarning
|
|
1264
|
-
}) : Object.defineProperty(type, "ref", { enumerable: false, value: null });
|
|
1265
|
-
type._store = {};
|
|
1266
|
-
Object.defineProperty(type._store, "validated", {
|
|
1267
|
-
configurable: false,
|
|
1268
|
-
enumerable: false,
|
|
1269
|
-
writable: true,
|
|
1270
|
-
value: 0
|
|
1271
|
-
});
|
|
1272
|
-
Object.defineProperty(type, "_debugInfo", {
|
|
1273
|
-
configurable: false,
|
|
1274
|
-
enumerable: false,
|
|
1275
|
-
writable: true,
|
|
1276
|
-
value: null
|
|
1277
|
-
});
|
|
1278
|
-
Object.freeze && (Object.freeze(type.props), Object.freeze(type));
|
|
1279
|
-
return type;
|
|
1280
|
-
}
|
|
1281
|
-
function jsxDEVImpl(type, config, maybeKey, isStaticChildren, source, self) {
|
|
1282
|
-
if (typeof type === "string" || typeof type === "function" || type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_OFFSCREEN_TYPE || typeof type === "object" && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_CONSUMER_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_CLIENT_REFERENCE$1 || type.getModuleId !== undefined)) {
|
|
1283
|
-
var children = config.children;
|
|
1284
|
-
if (children !== undefined)
|
|
1285
|
-
if (isStaticChildren)
|
|
1286
|
-
if (isArrayImpl(children)) {
|
|
1287
|
-
for (isStaticChildren = 0;isStaticChildren < children.length; isStaticChildren++)
|
|
1288
|
-
validateChildKeys(children[isStaticChildren], type);
|
|
1289
|
-
Object.freeze && Object.freeze(children);
|
|
1290
|
-
} else
|
|
1291
|
-
console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");
|
|
1292
|
-
else
|
|
1293
|
-
validateChildKeys(children, type);
|
|
1294
|
-
} else {
|
|
1295
|
-
children = "";
|
|
1296
|
-
if (type === undefined || typeof type === "object" && type !== null && Object.keys(type).length === 0)
|
|
1297
|
-
children += " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.";
|
|
1298
|
-
type === null ? isStaticChildren = "null" : isArrayImpl(type) ? isStaticChildren = "array" : type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE ? (isStaticChildren = "<" + (getComponentNameFromType(type.type) || "Unknown") + " />", children = " Did you accidentally export a JSX literal instead of a component?") : isStaticChildren = typeof type;
|
|
1299
|
-
console.error("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s", isStaticChildren, children);
|
|
1300
|
-
}
|
|
1301
|
-
if (hasOwnProperty.call(config, "key")) {
|
|
1302
|
-
children = getComponentNameFromType(type);
|
|
1303
|
-
var keys = Object.keys(config).filter(function(k) {
|
|
1304
|
-
return k !== "key";
|
|
1305
|
-
});
|
|
1306
|
-
isStaticChildren = 0 < keys.length ? "{key: someKey, " + keys.join(": ..., ") + ": ...}" : "{key: someKey}";
|
|
1307
|
-
didWarnAboutKeySpread[children + isStaticChildren] || (keys = 0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}", console.error('A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />', isStaticChildren, children, keys, children), didWarnAboutKeySpread[children + isStaticChildren] = true);
|
|
1308
|
-
}
|
|
1309
|
-
children = null;
|
|
1310
|
-
maybeKey !== undefined && (checkKeyStringCoercion(maybeKey), children = "" + maybeKey);
|
|
1311
|
-
hasValidKey(config) && (checkKeyStringCoercion(config.key), children = "" + config.key);
|
|
1312
|
-
if ("key" in config) {
|
|
1313
|
-
maybeKey = {};
|
|
1314
|
-
for (var propName in config)
|
|
1315
|
-
propName !== "key" && (maybeKey[propName] = config[propName]);
|
|
1316
|
-
} else
|
|
1317
|
-
maybeKey = config;
|
|
1318
|
-
children && defineKeyPropWarningGetter(maybeKey, typeof type === "function" ? type.displayName || type.name || "Unknown" : type);
|
|
1319
|
-
return ReactElement(type, children, self, source, getOwner(), maybeKey);
|
|
1320
|
-
}
|
|
1321
|
-
function validateChildKeys(node, parentType) {
|
|
1322
|
-
if (typeof node === "object" && node && node.$$typeof !== REACT_CLIENT_REFERENCE) {
|
|
1323
|
-
if (isArrayImpl(node))
|
|
1324
|
-
for (var i = 0;i < node.length; i++) {
|
|
1325
|
-
var child = node[i];
|
|
1326
|
-
isValidElement(child) && validateExplicitKey(child, parentType);
|
|
1327
|
-
}
|
|
1328
|
-
else if (isValidElement(node))
|
|
1329
|
-
node._store && (node._store.validated = 1);
|
|
1330
|
-
else if (node === null || typeof node !== "object" ? i = null : (i = MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL] || node["@@iterator"], i = typeof i === "function" ? i : null), typeof i === "function" && i !== node.entries && (i = i.call(node), i !== node))
|
|
1331
|
-
for (;!(node = i.next()).done; )
|
|
1332
|
-
isValidElement(node.value) && validateExplicitKey(node.value, parentType);
|
|
1333
|
-
}
|
|
1334
|
-
}
|
|
1335
|
-
function isValidElement(object) {
|
|
1336
|
-
return typeof object === "object" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
|
|
1337
|
-
}
|
|
1338
|
-
function validateExplicitKey(element, parentType) {
|
|
1339
|
-
if (element._store && !element._store.validated && element.key == null && (element._store.validated = 1, parentType = getCurrentComponentErrorInfo(parentType), !ownerHasKeyUseWarning[parentType])) {
|
|
1340
|
-
ownerHasKeyUseWarning[parentType] = true;
|
|
1341
|
-
var childOwner = "";
|
|
1342
|
-
element && element._owner != null && element._owner !== getOwner() && (childOwner = null, typeof element._owner.tag === "number" ? childOwner = getComponentNameFromType(element._owner.type) : typeof element._owner.name === "string" && (childOwner = element._owner.name), childOwner = " It was passed a child from " + childOwner + ".");
|
|
1343
|
-
var prevGetCurrentStack = ReactSharedInternals.getCurrentStack;
|
|
1344
|
-
ReactSharedInternals.getCurrentStack = function() {
|
|
1345
|
-
var stack = describeUnknownElementTypeFrameInDEV(element.type);
|
|
1346
|
-
prevGetCurrentStack && (stack += prevGetCurrentStack() || "");
|
|
1347
|
-
return stack;
|
|
1348
|
-
};
|
|
1349
|
-
console.error('Each child in a list should have a unique "key" prop.%s%s See https://react.dev/link/warning-keys for more information.', parentType, childOwner);
|
|
1350
|
-
ReactSharedInternals.getCurrentStack = prevGetCurrentStack;
|
|
1351
|
-
}
|
|
1352
|
-
}
|
|
1353
|
-
function getCurrentComponentErrorInfo(parentType) {
|
|
1354
|
-
var info = "", owner = getOwner();
|
|
1355
|
-
owner && (owner = getComponentNameFromType(owner.type)) && (info = "\n\nCheck the render method of `" + owner + "`.");
|
|
1356
|
-
info || (parentType = getComponentNameFromType(parentType)) && (info = "\n\nCheck the top-level render call using <" + parentType + ">.");
|
|
1357
|
-
return info;
|
|
1358
|
-
}
|
|
1359
|
-
var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = Symbol.for("react.profiler");
|
|
1360
|
-
Symbol.for("react.provider");
|
|
1361
|
-
var REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = Symbol.for("react.memo"), REACT_LAZY_TYPE = Symbol.for("react.lazy"), REACT_OFFSCREEN_TYPE = Symbol.for("react.offscreen"), MAYBE_ITERATOR_SYMBOL = Symbol.iterator, REACT_CLIENT_REFERENCE$2 = Symbol.for("react.client.reference"), ReactSharedInternals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, hasOwnProperty = Object.prototype.hasOwnProperty, assign = Object.assign, REACT_CLIENT_REFERENCE$1 = Symbol.for("react.client.reference"), isArrayImpl = Array.isArray, disabledDepth = 0, prevLog, prevInfo, prevWarn, prevError, prevGroup, prevGroupCollapsed, prevGroupEnd;
|
|
1362
|
-
disabledLog.__reactDisabledLog = true;
|
|
1363
|
-
var prefix, suffix, reentry = false;
|
|
1364
|
-
var componentFrameCache = new (typeof WeakMap === "function" ? WeakMap : Map);
|
|
1365
|
-
var REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), specialPropKeyWarningShown;
|
|
1366
|
-
var didWarnAboutElementRef = {};
|
|
1367
|
-
var didWarnAboutKeySpread = {}, ownerHasKeyUseWarning = {};
|
|
1368
|
-
exports.Fragment = REACT_FRAGMENT_TYPE;
|
|
1369
|
-
exports.jsxDEV = function(type, config, maybeKey, isStaticChildren, source, self) {
|
|
1370
|
-
return jsxDEVImpl(type, config, maybeKey, isStaticChildren, source, self);
|
|
1371
|
-
};
|
|
1372
|
-
})();
|
|
1373
|
-
});
|
|
1
|
+
// node_modules/clsx/dist/clsx.mjs
|
|
2
|
+
function r(e) {
|
|
3
|
+
var t, f, n = "";
|
|
4
|
+
if (typeof e == "string" || typeof e == "number")
|
|
5
|
+
n += e;
|
|
6
|
+
else if (typeof e == "object")
|
|
7
|
+
if (Array.isArray(e)) {
|
|
8
|
+
var o = e.length;
|
|
9
|
+
for (t = 0;t < o; t++)
|
|
10
|
+
e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
|
|
11
|
+
} else
|
|
12
|
+
for (f in e)
|
|
13
|
+
e[f] && (n && (n += " "), n += f);
|
|
14
|
+
return n;
|
|
15
|
+
}
|
|
16
|
+
function clsx() {
|
|
17
|
+
for (var e, t, f = 0, n = "", o = arguments.length;f < o; f++)
|
|
18
|
+
(e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
|
|
19
|
+
return n;
|
|
20
|
+
}
|
|
1374
21
|
|
|
1375
|
-
// /
|
|
1376
|
-
var
|
|
1377
|
-
var react_jsx_dev_runtime_development = __toESM(require_react_jsx_dev_runtime_development(), 1);
|
|
1378
|
-
if (false) {
|
|
1379
|
-
} else {
|
|
1380
|
-
module.exports = react_jsx_dev_runtime_development;
|
|
1381
|
-
}
|
|
1382
|
-
});
|
|
22
|
+
// src/components/Button/Button.module.css
|
|
23
|
+
var Button_module_default = "./Button.module-h78z3dbd.css";
|
|
1383
24
|
|
|
1384
|
-
// src/components/
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
"
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
const [mode, setMode] = import_react.useState("light");
|
|
1392
|
-
import_react.useEffect(() => {
|
|
1393
|
-
setMounted(true);
|
|
1394
|
-
}, []);
|
|
1395
|
-
import_react.useEffect(() => {
|
|
1396
|
-
if (!mounted)
|
|
1397
|
-
return;
|
|
1398
|
-
const stored = localStorage.getItem("theme");
|
|
1399
|
-
if (stored) {
|
|
1400
|
-
setMode(stored);
|
|
1401
|
-
return;
|
|
1402
|
-
}
|
|
1403
|
-
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
1404
|
-
setMode(prefersDark ? "dark" : "light");
|
|
1405
|
-
}, [mounted]);
|
|
1406
|
-
import_react.useEffect(() => {
|
|
1407
|
-
if (!mounted)
|
|
1408
|
-
return;
|
|
1409
|
-
document.documentElement.setAttribute("data-theme", mode);
|
|
1410
|
-
localStorage.setItem("theme", mode);
|
|
1411
|
-
}, [mode, mounted]);
|
|
1412
|
-
const toggleTheme = () => setMode((prev) => prev === "light" ? "dark" : "light");
|
|
1413
|
-
if (!mounted) {
|
|
1414
|
-
return /* @__PURE__ */ jsx_dev_runtime.jsxDEV(jsx_dev_runtime.Fragment, {
|
|
1415
|
-
children: " "
|
|
1416
|
-
}, undefined, false, undefined, this);
|
|
1417
|
-
}
|
|
1418
|
-
return /* @__PURE__ */ jsx_dev_runtime.jsxDEV(ThemeContext.Provider, {
|
|
1419
|
-
value: { mode, toggleTheme },
|
|
1420
|
-
children
|
|
25
|
+
// src/components/Button/Button.tsx
|
|
26
|
+
import { jsxDEV as jsxDEV_7x81h0kn } from "react/jsx-dev-runtime";
|
|
27
|
+
function Button({ className, ...props }) {
|
|
28
|
+
return /* @__PURE__ */ jsxDEV_7x81h0kn("button", {
|
|
29
|
+
className: clsx(Button_module_default["button"], className),
|
|
30
|
+
type: "button",
|
|
31
|
+
...props
|
|
1421
32
|
}, undefined, false, undefined, this);
|
|
1422
33
|
}
|
|
1423
|
-
function useTheme() {
|
|
1424
|
-
const context = import_react.useContext(ThemeContext);
|
|
1425
|
-
if (!context) {
|
|
1426
|
-
throw new Error("useTheme must be used within ThemeProvider");
|
|
1427
|
-
}
|
|
1428
|
-
return context;
|
|
1429
|
-
}
|
|
1430
34
|
export {
|
|
1431
|
-
|
|
1432
|
-
ThemeProvider
|
|
35
|
+
Button
|
|
1433
36
|
};
|
|
1434
37
|
|
|
1435
|
-
//# debugId=
|
|
1436
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0QDE5LjAuMC9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdEAxOS4wLjAvbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdEAxOS4wLjAvbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0QDE5LjAuMC9ub2RlX21vZHVsZXMvcmVhY3QvanN4LWRldi1ydW50aW1lLmpzIiwgIi4uL3NyYy9jb21wb25lbnRzL1RoZW1lUHJvdmlkZXIudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViAmJlxuICAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyhtZXRob2ROYW1lLCBpbmZvKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIiVzKC4uLikgaXMgZGVwcmVjYXRlZCBpbiBwbGFpbiBKYXZhU2NyaXB0IFJlYWN0IGNsYXNzZXMuICVzXCIsXG4gICAgICAgICAgICBpbmZvWzBdLFxuICAgICAgICAgICAgaW5mb1sxXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgICAgIGlmIChudWxsID09PSBtYXliZUl0ZXJhYmxlIHx8IFwib2JqZWN0XCIgIT09IHR5cGVvZiBtYXliZUl0ZXJhYmxlKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIG1heWJlSXRlcmFibGUgPVxuICAgICAgICAoTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSkgfHxcbiAgICAgICAgbWF5YmVJdGVyYWJsZVtcIkBAaXRlcmF0b3JcIl07XG4gICAgICByZXR1cm4gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbWF5YmVJdGVyYWJsZSA/IG1heWJlSXRlcmFibGUgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICAgICAgcHVibGljSW5zdGFuY2UgPVxuICAgICAgICAoKHB1YmxpY0luc3RhbmNlID0gcHVibGljSW5zdGFuY2UuY29uc3RydWN0b3IpICYmXG4gICAgICAgICAgKHB1YmxpY0luc3RhbmNlLmRpc3BsYXlOYW1lIHx8IHB1YmxpY0luc3RhbmNlLm5hbWUpKSB8fFxuICAgICAgICBcIlJlYWN0Q2xhc3NcIjtcbiAgICAgIHZhciB3YXJuaW5nS2V5ID0gcHVibGljSW5zdGFuY2UgKyBcIi5cIiArIGNhbGxlck5hbWU7XG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0gfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiBJbnN0ZWFkLCBhc3NpZ24gdG8gYHRoaXMuc3RhdGVgIGRpcmVjdGx5IG9yIGRlZmluZSBhIGBzdGF0ZSA9IHt9O2AgY2xhc3MgcHJvcGVydHkgd2l0aCB0aGUgZGVzaXJlZCBzdGF0ZSBpbiB0aGUgJXMgY29tcG9uZW50LlwiLFxuICAgICAgICAgIGNhbGxlck5hbWUsXG4gICAgICAgICAgcHVibGljSW5zdGFuY2VcbiAgICAgICAgKSxcbiAgICAgICAgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSA9ICEwKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIENvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICAgICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICAgICAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fVxuICAgIGZ1bmN0aW9uIFB1cmVDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgICAgIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCIgKyB2YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tLZXlTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICExO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMDtcbiAgICAgIH1cbiAgICAgIGlmIChKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gY29uc29sZTtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfdGVtcF9jb25zdCA9IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5lcnJvcjtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMCA9XG4gICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFN5bWJvbCAmJlxuICAgICAgICAgICAgU3ltYm9sLnRvU3RyaW5nVGFnICYmXG4gICAgICAgICAgICB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddKSB8fFxuICAgICAgICAgIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgfHxcbiAgICAgICAgICBcIk9iamVjdFwiO1xuICAgICAgICBKU0NvbXBpbGVyX3RlbXBfY29uc3QuY2FsbChcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQsXG4gICAgICAgICAgXCJUaGUgcHJvdmlkZWQga2V5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLlwiLFxuICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgICAgIGlmIChudWxsID09IHR5cGUpIHJldHVybiBudWxsO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHJldHVybiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDJcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiB0eXBlO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJGcmFnbWVudFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlBvcnRhbFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN0cmljdE1vZGVcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgfVxuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgIChcIm51bWJlclwiID09PSB0eXBlb2YgdHlwZS50YWcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB0eXBlLiQkdHlwZW9mKVxuICAgICAgICApIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Qcm92aWRlclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OU1VNRVJfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5fY29udGV4dC5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Db25zdW1lclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgIHZhciBpbm5lclR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgdHlwZSB8fFxuICAgICAgICAgICAgICAoKHR5cGUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgXCJcIiksXG4gICAgICAgICAgICAgICh0eXBlID0gXCJcIiAhPT0gdHlwZSA/IFwiRm9yd2FyZFJlZihcIiArIHR5cGUgKyBcIilcIiA6IFwiRm9yd2FyZFJlZlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChpbm5lclR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGwpLFxuICAgICAgICAgICAgICBudWxsICE9PSBpbm5lclR5cGVcbiAgICAgICAgICAgICAgICA/IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgIDogZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgXCJNZW1vXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICBpbm5lclR5cGUgPSB0eXBlLl9wYXlsb2FkO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuX2luaXQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUoaW5uZXJUeXBlKSk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSB8fFxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHxcbiAgICAgICAgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fFxuICAgICAgICB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHxcbiAgICAgICAgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8XG4gICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICAgIG51bGwgIT09IHR5cGUgJiZcbiAgICAgICAgICAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8XG4gICAgICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHxcbiAgICAgICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQxIHx8XG4gICAgICAgICAgICB2b2lkIDAgIT09IHR5cGUuZ2V0TW9kdWxlSWQpKVxuICAgICAgICA/ICEwXG4gICAgICAgIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cbiAgICBmdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAgICAgIGlmICgwID09PSBkaXNhYmxlZERlcHRoKSB7XG4gICAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kO1xuICAgICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgICAgd3JpdGFibGU6ICEwXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGRpc2FibGVkRGVwdGgrKztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICAgICAgZGlzYWJsZWREZXB0aC0tO1xuICAgICAgaWYgKDAgPT09IGRpc2FibGVkRGVwdGgpIHtcbiAgICAgICAgdmFyIHByb3BzID0geyBjb25maWd1cmFibGU6ICEwLCBlbnVtZXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgICBsb2c6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZMb2cgfSksXG4gICAgICAgICAgaW5mbzogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkluZm8gfSksXG4gICAgICAgICAgd2FybjogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldldhcm4gfSksXG4gICAgICAgICAgZXJyb3I6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZFcnJvciB9KSxcbiAgICAgICAgICBncm91cDogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkdyb3VwIH0pLFxuICAgICAgICAgIGdyb3VwQ29sbGFwc2VkOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWQgfSksXG4gICAgICAgICAgZ3JvdXBFbmQ6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZHcm91cEVuZCB9KVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIDAgPiBkaXNhYmxlZERlcHRoICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkge1xuICAgICAgaWYgKHZvaWQgMCA9PT0gcHJlZml4KVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICAgIHByZWZpeCA9IChtYXRjaCAmJiBtYXRjaFsxXSkgfHwgXCJcIjtcbiAgICAgICAgICBzdWZmaXggPVxuICAgICAgICAgICAgLTEgPCB4LnN0YWNrLmluZGV4T2YoXCJcXG4gICAgYXRcIilcbiAgICAgICAgICAgICAgPyBcIiAoPGFub255bW91cz4pXCJcbiAgICAgICAgICAgICAgOiAtMSA8IHguc3RhY2suaW5kZXhPZihcIkBcIilcbiAgICAgICAgICAgICAgICA/IFwiQHVua25vd246MDowXCJcbiAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBcIlxcblwiICsgcHJlZml4ICsgbmFtZSArIHN1ZmZpeDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gICAgICBpZiAoIWZuIHx8IHJlZW50cnkpIHJldHVybiBcIlwiO1xuICAgICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuICAgICAgaWYgKHZvaWQgMCAhPT0gZnJhbWUpIHJldHVybiBmcmFtZTtcbiAgICAgIHJlZW50cnkgPSAhMDtcbiAgICAgIGZyYW1lID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7XG4gICAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHZvaWQgMDtcbiAgICAgIHZhciBwcmV2aW91c0Rpc3BhdGNoZXIgPSBudWxsO1xuICAgICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBudWxsO1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBSdW5JblJvb3RGcmFtZSA9IHtcbiAgICAgICAgICBEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsIFwicHJvcHNcIiwge1xuICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBSZWZsZWN0ICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250cm9sID0geDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoeCQwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgPSB4JDA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoeCQxKSB7XG4gICAgICAgICAgICAgICAgICBjb250cm9sID0geCQxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAoRmFrZSA9IGZuKCkpICYmXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBGYWtlLmNhdGNoICYmXG4gICAgICAgICAgICAgICAgICBGYWtlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgICAgICAgICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiBcInN0cmluZ1wiID09PSB0eXBlb2Ygc2FtcGxlLnN0YWNrKVxuICAgICAgICAgICAgICAgIHJldHVybiBbc2FtcGxlLnN0YWNrLCBjb250cm9sLnN0YWNrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWUgPVxuICAgICAgICAgIFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCI7XG4gICAgICAgIHZhciBuYW1lUHJvcERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCxcbiAgICAgICAgICBcIm5hbWVcIlxuICAgICAgICApO1xuICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgJiZcbiAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IuY29uZmlndXJhYmxlICYmXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LFxuICAgICAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgICAgICB7IHZhbHVlOiBcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiIH1cbiAgICAgICAgICApO1xuICAgICAgICB2YXIgX1J1bkluUm9vdEZyYW1lJERldGVyID1cbiAgICAgICAgICAgIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCgpLFxuICAgICAgICAgIHNhbXBsZVN0YWNrID0gX1J1bkluUm9vdEZyYW1lJERldGVyWzBdLFxuICAgICAgICAgIGNvbnRyb2xTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclsxXTtcbiAgICAgICAgaWYgKHNhbXBsZVN0YWNrICYmIGNvbnRyb2xTdGFjaykge1xuICAgICAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZVN0YWNrLnNwbGl0KFwiXFxuXCIpLFxuICAgICAgICAgICAgY29udHJvbExpbmVzID0gY29udHJvbFN0YWNrLnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBuYW1lUHJvcERlc2NyaXB0b3IgPSAwO1xuICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yIDwgc2FtcGxlTGluZXMubGVuZ3RoICYmXG4gICAgICAgICAgICAhc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIClcbiAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvcisrO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICA7XG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPCBjb250cm9sTGluZXMubGVuZ3RoICYmXG4gICAgICAgICAgICAhY29udHJvbExpbmVzW19SdW5JblJvb3RGcmFtZSREZXRlcl0uaW5jbHVkZXMoXG4gICAgICAgICAgICAgIFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCJcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICApXG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIrKztcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgPT09IHNhbXBsZUxpbmVzLmxlbmd0aCB8fFxuICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyID09PSBjb250cm9sTGluZXMubGVuZ3RoXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgMSA8PSBuYW1lUHJvcERlc2NyaXB0b3IgJiZcbiAgICAgICAgICAgICAgMCA8PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgJiZcbiAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXSAhPT1cbiAgICAgICAgICAgICAgICBjb250cm9sTGluZXNbX1J1bkluUm9vdEZyYW1lJERldGVyXTtcblxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXItLTtcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgO1xuICAgICAgICAgICAgMSA8PSBuYW1lUHJvcERlc2NyaXB0b3IgJiYgMCA8PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXI7XG4gICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3ItLSwgX1J1bkluUm9vdEZyYW1lJERldGVyLS1cbiAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHNhbXBsZUxpbmVzW25hbWVQcm9wRGVzY3JpcHRvcl0gIT09XG4gICAgICAgICAgICAgIGNvbnRyb2xMaW5lc1tfUnVuSW5Sb290RnJhbWUkRGV0ZXJdXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKDEgIT09IG5hbWVQcm9wRGVzY3JpcHRvciB8fCAxICE9PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXIpIHtcbiAgICAgICAgICAgICAgICBkb1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAobmFtZVByb3BEZXNjcmlwdG9yLS0sXG4gICAgICAgICAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlci0tLFxuICAgICAgICAgICAgICAgICAgICAwID4gX1J1bkluUm9vdEZyYW1lJERldGVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xMaW5lc1tfUnVuSW5Sb290RnJhbWUkRGV0ZXJdKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPVxuICAgICAgICAgICAgICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZUxpbmVzW25hbWVQcm9wRGVzY3JpcHRvcl0ucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGF0IG5ldyBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGF0IFwiXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZm4uZGlzcGxheU5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICBfZnJhbWUuaW5jbHVkZXMoXCI8YW5vbnltb3VzPlwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAgIChfZnJhbWUgPSBfZnJhbWUucmVwbGFjZShcIjxhbm9ueW1vdXM+XCIsIGZuLmRpc3BsYXlOYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGZuICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEgPD0gbmFtZVByb3BEZXNjcmlwdG9yICYmIDAgPD0gX1J1bkluUm9vdEZyYW1lJERldGVyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgKHJlZW50cnkgPSAhMSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2aW91c0Rpc3BhdGNoZXIpLFxuICAgICAgICAgIHJlZW5hYmxlTG9ncygpLFxuICAgICAgICAgIChFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IGZyYW1lKTtcbiAgICAgIH1cbiAgICAgIHNhbXBsZUxpbmVzID0gKHNhbXBsZUxpbmVzID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogXCJcIilcbiAgICAgICAgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShzYW1wbGVMaW5lcylcbiAgICAgICAgOiBcIlwiO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZm4gJiYgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHNhbXBsZUxpbmVzKTtcbiAgICAgIHJldHVybiBzYW1wbGVMaW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUpIHtcbiAgICAgIGlmIChudWxsID09IHR5cGUpIHJldHVybiBcIlwiO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUpIHtcbiAgICAgICAgdmFyIHByb3RvdHlwZSA9IHR5cGUucHJvdG90eXBlO1xuICAgICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgICEoIXByb3RvdHlwZSB8fCAhcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiU3VzcGVuc2VcIik7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIlN1c3BlbnNlTGlzdFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuICh0eXBlID0gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLnJlbmRlciwgITEpKSwgdHlwZTtcbiAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgIHByb3RvdHlwZSA9IHR5cGUuX3BheWxvYWQ7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5faW5pdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZShwcm90b3R5cGUpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRPd25lcigpIHtcbiAgICAgIHZhciBkaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuQTtcbiAgICAgIHJldHVybiBudWxsID09PSBkaXNwYXRjaGVyID8gbnVsbCA6IGRpc3BhdGNoZXIuZ2V0T3duZXIoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIFwia2V5XCIpKSB7XG4gICAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgXCJrZXlcIikuZ2V0O1xuICAgICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykgcmV0dXJuICExO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZvaWQgMCAhPT0gY29uZmlnLmtleTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gICAgICBmdW5jdGlvbiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkoKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duIHx8XG4gICAgICAgICAgKChzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9ICEwKSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lIHZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgcHJvcC4gKGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvc3BlY2lhbC1wcm9wcylcIixcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lXG4gICAgICAgICAgKSk7XG4gICAgICB9XG4gICAgICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSAhMDtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgXCJrZXlcIiwge1xuICAgICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVsZW1lbnRSZWZHZXR0ZXJXaXRoRGVwcmVjYXRpb25XYXJuaW5nKCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodGhpcy50eXBlKTtcbiAgICAgIGRpZFdhcm5BYm91dEVsZW1lbnRSZWZbY29tcG9uZW50TmFtZV0gfHxcbiAgICAgICAgKChkaWRXYXJuQWJvdXRFbGVtZW50UmVmW2NvbXBvbmVudE5hbWVdID0gITApLFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQWNjZXNzaW5nIGVsZW1lbnQucmVmIHdhcyByZW1vdmVkIGluIFJlYWN0IDE5LiByZWYgaXMgbm93IGEgcmVndWxhciBwcm9wLiBJdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgSlNYIEVsZW1lbnQgdHlwZSBpbiBhIGZ1dHVyZSByZWxlYXNlLlwiXG4gICAgICAgICkpO1xuICAgICAgY29tcG9uZW50TmFtZSA9IHRoaXMucHJvcHMucmVmO1xuICAgICAgcmV0dXJuIHZvaWQgMCAhPT0gY29tcG9uZW50TmFtZSA/IGNvbXBvbmVudE5hbWUgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykge1xuICAgICAgc2VsZiA9IHByb3BzLnJlZjtcbiAgICAgIHR5cGUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgIF9vd25lcjogb3duZXJcbiAgICAgIH07XG4gICAgICBudWxsICE9PSAodm9pZCAwICE9PSBzZWxmID8gc2VsZiA6IG51bGwpXG4gICAgICAgID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwicmVmXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgICAgZ2V0OiBlbGVtZW50UmVmR2V0dGVyV2l0aERlcHJlY2F0aW9uV2FybmluZ1xuICAgICAgICAgIH0pXG4gICAgICAgIDogT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwicmVmXCIsIHsgZW51bWVyYWJsZTogITEsIHZhbHVlOiBudWxsIH0pO1xuICAgICAgdHlwZS5fc3RvcmUgPSB7fTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLl9zdG9yZSwgXCJ2YWxpZGF0ZWRcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogMFxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJfZGVidWdJbmZvXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmZyZWV6ZSAmJiAoT2JqZWN0LmZyZWV6ZSh0eXBlLnByb3BzKSwgT2JqZWN0LmZyZWV6ZSh0eXBlKSk7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvbmVBbmRSZXBsYWNlS2V5KG9sZEVsZW1lbnQsIG5ld0tleSkge1xuICAgICAgbmV3S2V5ID0gUmVhY3RFbGVtZW50KFxuICAgICAgICBvbGRFbGVtZW50LnR5cGUsXG4gICAgICAgIG5ld0tleSxcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIG9sZEVsZW1lbnQuX293bmVyLFxuICAgICAgICBvbGRFbGVtZW50LnByb3BzXG4gICAgICApO1xuICAgICAgbmV3S2V5Ll9zdG9yZS52YWxpZGF0ZWQgPSBvbGRFbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQ7XG4gICAgICByZXR1cm4gbmV3S2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBub2RlICYmXG4gICAgICAgIG5vZGUgJiZcbiAgICAgICAgbm9kZS4kJHR5cGVvZiAhPT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRVxuICAgICAgKVxuICAgICAgICBpZiAoaXNBcnJheUltcGwobm9kZSkpXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xuICAgICAgICAgICAgaXNWYWxpZEVsZW1lbnQoY2hpbGQpICYmIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNWYWxpZEVsZW1lbnQobm9kZSkpXG4gICAgICAgICAgbm9kZS5fc3RvcmUgJiYgKG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IDEpO1xuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAoKGkgPSBnZXRJdGVyYXRvckZuKG5vZGUpKSxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpICYmXG4gICAgICAgICAgICBpICE9PSBub2RlLmVudHJpZXMgJiZcbiAgICAgICAgICAgICgoaSA9IGkuY2FsbChub2RlKSksIGkgIT09IG5vZGUpKVxuICAgICAgICApXG4gICAgICAgICAgZm9yICg7ICEobm9kZSA9IGkubmV4dCgpKS5kb25lOyApXG4gICAgICAgICAgICBpc1ZhbGlkRWxlbWVudChub2RlLnZhbHVlKSAmJlxuICAgICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KG5vZGUudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBvYmplY3QgJiZcbiAgICAgICAgbnVsbCAhPT0gb2JqZWN0ICYmXG4gICAgICAgIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0S2V5KGVsZW1lbnQsIHBhcmVudFR5cGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZWxlbWVudC5fc3RvcmUgJiZcbiAgICAgICAgIWVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCAmJlxuICAgICAgICBudWxsID09IGVsZW1lbnQua2V5ICYmXG4gICAgICAgICgoZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gMSksXG4gICAgICAgIChwYXJlbnRUeXBlID0gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSksXG4gICAgICAgICFvd25lckhhc0tleVVzZVdhcm5pbmdbcGFyZW50VHlwZV0pXG4gICAgICApIHtcbiAgICAgICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW3BhcmVudFR5cGVdID0gITA7XG4gICAgICAgIHZhciBjaGlsZE93bmVyID0gXCJcIjtcbiAgICAgICAgZWxlbWVudCAmJlxuICAgICAgICAgIG51bGwgIT0gZWxlbWVudC5fb3duZXIgJiZcbiAgICAgICAgICBlbGVtZW50Ll9vd25lciAhPT0gZ2V0T3duZXIoKSAmJlxuICAgICAgICAgICgoY2hpbGRPd25lciA9IG51bGwpLFxuICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBlbGVtZW50Ll9vd25lci50YWdcbiAgICAgICAgICAgID8gKGNoaWxkT3duZXIgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoZWxlbWVudC5fb3duZXIudHlwZSkpXG4gICAgICAgICAgICA6IFwic3RyaW5nXCIgPT09IHR5cGVvZiBlbGVtZW50Ll9vd25lci5uYW1lICYmXG4gICAgICAgICAgICAgIChjaGlsZE93bmVyID0gZWxlbWVudC5fb3duZXIubmFtZSksXG4gICAgICAgICAgKGNoaWxkT3duZXIgPSBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGNoaWxkT3duZXIgKyBcIi5cIikpO1xuICAgICAgICB2YXIgcHJldkdldEN1cnJlbnRTdGFjayA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmdldEN1cnJlbnRTdGFjaztcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUpO1xuICAgICAgICAgIHByZXZHZXRDdXJyZW50U3RhY2sgJiYgKHN0YWNrICs9IHByZXZHZXRDdXJyZW50U3RhY2soKSB8fCBcIlwiKTtcbiAgICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4lcyVzIFNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLFxuICAgICAgICAgIHBhcmVudFR5cGUsXG4gICAgICAgICAgY2hpbGRPd25lclxuICAgICAgICApO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5nZXRDdXJyZW50U3RhY2sgPSBwcmV2R2V0Q3VycmVudFN0YWNrO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpIHtcbiAgICAgIHZhciBpbmZvID0gXCJcIixcbiAgICAgICAgb3duZXIgPSBnZXRPd25lcigpO1xuICAgICAgb3duZXIgJiZcbiAgICAgICAgKG93bmVyID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKG93bmVyLnR5cGUpKSAmJlxuICAgICAgICAoaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYFwiICsgb3duZXIgKyBcImAuXCIpO1xuICAgICAgaW5mbyB8fFxuICAgICAgICAoKHBhcmVudFR5cGUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUocGFyZW50VHlwZSkpICYmXG4gICAgICAgICAgKGluZm8gPVxuICAgICAgICAgICAgXCJcXG5cXG5DaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDxcIiArIHBhcmVudFR5cGUgKyBcIj4uXCIpKTtcbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlc2NhcGUoa2V5KSB7XG4gICAgICB2YXIgZXNjYXBlckxvb2t1cCA9IHsgXCI9XCI6IFwiPTBcIiwgXCI6XCI6IFwiPTJcIiB9O1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgXCIkXCIgK1xuICAgICAgICBrZXkucmVwbGFjZSgvWz06XS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICByZXR1cm4gZXNjYXBlckxvb2t1cFttYXRjaF07XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRFbGVtZW50S2V5KGVsZW1lbnQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gXCJvYmplY3RcIiA9PT0gdHlwZW9mIGVsZW1lbnQgJiZcbiAgICAgICAgbnVsbCAhPT0gZWxlbWVudCAmJlxuICAgICAgICBudWxsICE9IGVsZW1lbnQua2V5XG4gICAgICAgID8gKGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oZWxlbWVudC5rZXkpLCBlc2NhcGUoXCJcIiArIGVsZW1lbnQua2V5KSlcbiAgICAgICAgOiBpbmRleC50b1N0cmluZygzNik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vb3AkMSgpIHt9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVRoZW5hYmxlKHRoZW5hYmxlKSB7XG4gICAgICBzd2l0Y2ggKHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgcmV0dXJuIHRoZW5hYmxlLnZhbHVlO1xuICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgICAgICB0aHJvdyB0aGVuYWJsZS5yZWFzb247XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgdGhlbmFibGUuc3RhdHVzXG4gICAgICAgICAgICAgID8gdGhlbmFibGUudGhlbihub29wJDEsIG5vb3AkMSlcbiAgICAgICAgICAgICAgOiAoKHRoZW5hYmxlLnN0YXR1cyA9IFwicGVuZGluZ1wiKSxcbiAgICAgICAgICAgICAgICB0aGVuYWJsZS50aGVuKFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGZ1bGZpbGxlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKHRoZW5hYmxlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICh0aGVuYWJsZS52YWx1ZSA9IGZ1bGZpbGxlZFZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKHRoZW5hYmxlLnN0YXR1cyA9IFwicmVqZWN0ZWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgKHRoZW5hYmxlLnJlYXNvbiA9IGVycm9yKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICB0aGVuYWJsZS5zdGF0dXMpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgICAgIHJldHVybiB0aGVuYWJsZS52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgICAgICAgICAgICB0aHJvdyB0aGVuYWJsZS5yZWFzb247XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgdGhlbmFibGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcEludG9BcnJheShjaGlsZHJlbiwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5hbWVTb0ZhciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuICAgICAgaWYgKFwidW5kZWZpbmVkXCIgPT09IHR5cGUgfHwgXCJib29sZWFuXCIgPT09IHR5cGUpIGNoaWxkcmVuID0gbnVsbDtcbiAgICAgIHZhciBpbnZva2VDYWxsYmFjayA9ICExO1xuICAgICAgaWYgKG51bGwgPT09IGNoaWxkcmVuKSBpbnZva2VDYWxsYmFjayA9ICEwO1xuICAgICAgZWxzZVxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIGludm9rZUNhbGxiYWNrID0gITA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICBzd2l0Y2ggKGNoaWxkcmVuLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgICAgIGludm9rZUNhbGxiYWNrID0gITA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAoaW52b2tlQ2FsbGJhY2sgPSBjaGlsZHJlbi5faW5pdCksXG4gICAgICAgICAgICAgICAgICBtYXBJbnRvQXJyYXkoXG4gICAgICAgICAgICAgICAgICAgIGludm9rZUNhbGxiYWNrKGNoaWxkcmVuLl9wYXlsb2FkKSxcbiAgICAgICAgICAgICAgICAgICAgYXJyYXksXG4gICAgICAgICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgICAgICAgICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBpZiAoaW52b2tlQ2FsbGJhY2spIHtcbiAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSBjaGlsZHJlbjtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayhpbnZva2VDYWxsYmFjayk7XG4gICAgICAgIHZhciBjaGlsZEtleSA9XG4gICAgICAgICAgXCJcIiA9PT0gbmFtZVNvRmFyID8gXCIuXCIgKyBnZXRFbGVtZW50S2V5KGludm9rZUNhbGxiYWNrLCAwKSA6IG5hbWVTb0ZhcjtcbiAgICAgICAgaXNBcnJheUltcGwoY2FsbGJhY2spXG4gICAgICAgICAgPyAoKGVzY2FwZWRQcmVmaXggPSBcIlwiKSxcbiAgICAgICAgICAgIG51bGwgIT0gY2hpbGRLZXkgJiZcbiAgICAgICAgICAgICAgKGVzY2FwZWRQcmVmaXggPVxuICAgICAgICAgICAgICAgIGNoaWxkS2V5LnJlcGxhY2UodXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsIFwiJCYvXCIpICsgXCIvXCIpLFxuICAgICAgICAgICAgbWFwSW50b0FycmF5KGNhbGxiYWNrLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgXCJcIiwgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICA6IG51bGwgIT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAgIChpc1ZhbGlkRWxlbWVudChjYWxsYmFjaykgJiZcbiAgICAgICAgICAgICAgKG51bGwgIT0gY2FsbGJhY2sua2V5ICYmXG4gICAgICAgICAgICAgICAgKChpbnZva2VDYWxsYmFjayAmJiBpbnZva2VDYWxsYmFjay5rZXkgPT09IGNhbGxiYWNrLmtleSkgfHxcbiAgICAgICAgICAgICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY2FsbGJhY2sua2V5KSksXG4gICAgICAgICAgICAgIChlc2NhcGVkUHJlZml4ID0gY2xvbmVBbmRSZXBsYWNlS2V5KFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXggK1xuICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY2FsbGJhY2sua2V5IHx8XG4gICAgICAgICAgICAgICAgICAoaW52b2tlQ2FsbGJhY2sgJiYgaW52b2tlQ2FsbGJhY2sua2V5ID09PSBjYWxsYmFjay5rZXkpXG4gICAgICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgICAgICA6IChcIlwiICsgY2FsbGJhY2sua2V5KS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiQmL1wiXG4gICAgICAgICAgICAgICAgICAgICAgKSArIFwiL1wiKSArXG4gICAgICAgICAgICAgICAgICBjaGlsZEtleVxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgXCJcIiAhPT0gbmFtZVNvRmFyICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPSBpbnZva2VDYWxsYmFjayAmJlxuICAgICAgICAgICAgICAgIGlzVmFsaWRFbGVtZW50KGludm9rZUNhbGxiYWNrKSAmJlxuICAgICAgICAgICAgICAgIG51bGwgPT0gaW52b2tlQ2FsbGJhY2sua2V5ICYmXG4gICAgICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2suX3N0b3JlICYmXG4gICAgICAgICAgICAgICAgIWludm9rZUNhbGxiYWNrLl9zdG9yZS52YWxpZGF0ZWQgJiZcbiAgICAgICAgICAgICAgICAoZXNjYXBlZFByZWZpeC5fc3RvcmUudmFsaWRhdGVkID0gMiksXG4gICAgICAgICAgICAgIChjYWxsYmFjayA9IGVzY2FwZWRQcmVmaXgpKSxcbiAgICAgICAgICAgIGFycmF5LnB1c2goY2FsbGJhY2spKTtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICBpbnZva2VDYWxsYmFjayA9IDA7XG4gICAgICBjaGlsZEtleSA9IFwiXCIgPT09IG5hbWVTb0ZhciA/IFwiLlwiIDogbmFtZVNvRmFyICsgXCI6XCI7XG4gICAgICBpZiAoaXNBcnJheUltcGwoY2hpbGRyZW4pKVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIChuYW1lU29GYXIgPSBjaGlsZHJlbltpXSksXG4gICAgICAgICAgICAodHlwZSA9IGNoaWxkS2V5ICsgZ2V0RWxlbWVudEtleShuYW1lU29GYXIsIGkpKSxcbiAgICAgICAgICAgIChpbnZva2VDYWxsYmFjayArPSBtYXBJbnRvQXJyYXkoXG4gICAgICAgICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgICAgICAgYXJyYXksXG4gICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICApKTtcbiAgICAgIGVsc2UgaWYgKCgoaSA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pKSwgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaSkpXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgaSA9PT0gY2hpbGRyZW4uZW50cmllcyAmJlxuICAgICAgICAgICAgKGRpZFdhcm5BYm91dE1hcHMgfHxcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgIFwiVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLlwiXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAoZGlkV2FybkFib3V0TWFwcyA9ICEwKSksXG4gICAgICAgICAgICBjaGlsZHJlbiA9IGkuY2FsbChjaGlsZHJlbiksXG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAhKG5hbWVTb0ZhciA9IGNoaWxkcmVuLm5leHQoKSkuZG9uZTtcblxuICAgICAgICApXG4gICAgICAgICAgKG5hbWVTb0ZhciA9IG5hbWVTb0Zhci52YWx1ZSksXG4gICAgICAgICAgICAodHlwZSA9IGNoaWxkS2V5ICsgZ2V0RWxlbWVudEtleShuYW1lU29GYXIsIGkrKykpLFxuICAgICAgICAgICAgKGludm9rZUNhbGxiYWNrICs9IG1hcEludG9BcnJheShcbiAgICAgICAgICAgICAgbmFtZVNvRmFyLFxuICAgICAgICAgICAgICBhcnJheSxcbiAgICAgICAgICAgICAgZXNjYXBlZFByZWZpeCxcbiAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICkpO1xuICAgICAgZWxzZSBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZSkge1xuICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY2hpbGRyZW4udGhlbilcbiAgICAgICAgICByZXR1cm4gbWFwSW50b0FycmF5KFxuICAgICAgICAgICAgcmVzb2x2ZVRoZW5hYmxlKGNoaWxkcmVuKSxcbiAgICAgICAgICAgIGFycmF5LFxuICAgICAgICAgICAgZXNjYXBlZFByZWZpeCxcbiAgICAgICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgKTtcbiAgICAgICAgYXJyYXkgPSBTdHJpbmcoY2hpbGRyZW4pO1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgK1xuICAgICAgICAgICAgKFwiW29iamVjdCBPYmplY3RdXCIgPT09IGFycmF5XG4gICAgICAgICAgICAgID8gXCJvYmplY3Qgd2l0aCBrZXlzIHtcIiArIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5qb2luKFwiLCBcIikgKyBcIn1cIlxuICAgICAgICAgICAgICA6IGFycmF5KSArXG4gICAgICAgICAgICBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuYywgY29udGV4dCkge1xuICAgICAgaWYgKG51bGwgPT0gY2hpbGRyZW4pIHJldHVybiBjaGlsZHJlbjtcbiAgICAgIHZhciByZXN1bHQgPSBbXSxcbiAgICAgICAgY291bnQgPSAwO1xuICAgICAgbWFwSW50b0FycmF5KGNoaWxkcmVuLCByZXN1bHQsIFwiXCIsIFwiXCIsIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBjb3VudCsrKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbGF6eUluaXRpYWxpemVyKHBheWxvYWQpIHtcbiAgICAgIGlmICgtMSA9PT0gcGF5bG9hZC5fc3RhdHVzKSB7XG4gICAgICAgIHZhciBjdG9yID0gcGF5bG9hZC5fcmVzdWx0O1xuICAgICAgICBjdG9yID0gY3RvcigpO1xuICAgICAgICBjdG9yLnRoZW4oXG4gICAgICAgICAgZnVuY3Rpb24gKG1vZHVsZU9iamVjdCkge1xuICAgICAgICAgICAgaWYgKDAgPT09IHBheWxvYWQuX3N0YXR1cyB8fCAtMSA9PT0gcGF5bG9hZC5fc3RhdHVzKVxuICAgICAgICAgICAgICAocGF5bG9hZC5fc3RhdHVzID0gMSksIChwYXlsb2FkLl9yZXN1bHQgPSBtb2R1bGVPYmplY3QpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoMCA9PT0gcGF5bG9hZC5fc3RhdHVzIHx8IC0xID09PSBwYXlsb2FkLl9zdGF0dXMpXG4gICAgICAgICAgICAgIChwYXlsb2FkLl9zdGF0dXMgPSAyKSwgKHBheWxvYWQuX3Jlc3VsdCA9IGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIC0xID09PSBwYXlsb2FkLl9zdGF0dXMgJiZcbiAgICAgICAgICAoKHBheWxvYWQuX3N0YXR1cyA9IDApLCAocGF5bG9hZC5fcmVzdWx0ID0gY3RvcikpO1xuICAgICAgfVxuICAgICAgaWYgKDEgPT09IHBheWxvYWQuX3N0YXR1cylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoY3RvciA9IHBheWxvYWQuX3Jlc3VsdCksXG4gICAgICAgICAgdm9pZCAwID09PSBjdG9yICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcImxhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcG9ydCgpIGNhbGwuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzXFxuXFxuWW91ciBjb2RlIHNob3VsZCBsb29rIGxpa2U6IFxcbiAgY29uc3QgTXlDb21wb25lbnQgPSBsYXp5KCgpID0+IGltcG9ydCgnLi9NeUNvbXBvbmVudCcpKVxcblxcbkRpZCB5b3UgYWNjaWRlbnRhbGx5IHB1dCBjdXJseSBicmFjZXMgYXJvdW5kIHRoZSBpbXBvcnQ/XCIsXG4gICAgICAgICAgICAgIGN0b3JcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXCJkZWZhdWx0XCIgaW4gY3RvciB8fFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJsYXp5OiBFeHBlY3RlZCB0aGUgcmVzdWx0IG9mIGEgZHluYW1pYyBpbXBvcnQoKSBjYWxsLiBJbnN0ZWFkIHJlY2VpdmVkOiAlc1xcblxcbllvdXIgY29kZSBzaG91bGQgbG9vayBsaWtlOiBcXG4gIGNvbnN0IE15Q29tcG9uZW50ID0gbGF6eSgoKSA9PiBpbXBvcnQoJy4vTXlDb21wb25lbnQnKSlcIixcbiAgICAgICAgICAgICAgY3RvclxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBjdG9yLmRlZmF1bHRcbiAgICAgICAgKTtcbiAgICAgIHRocm93IHBheWxvYWQuX3Jlc3VsdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZURpc3BhdGNoZXIoKSB7XG4gICAgICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICBudWxsID09PSBkaXNwYXRjaGVyICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbjMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG5TZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub29wKCkge31cbiAgICBmdW5jdGlvbiBlbnF1ZXVlVGFzayh0YXNrKSB7XG4gICAgICBpZiAobnVsbCA9PT0gZW5xdWV1ZVRhc2tJbXBsKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciByZXF1aXJlU3RyaW5nID0gKFwicmVxdWlyZVwiICsgTWF0aC5yYW5kb20oKSkuc2xpY2UoMCwgNyk7XG4gICAgICAgICAgZW5xdWV1ZVRhc2tJbXBsID0gKG1vZHVsZSAmJiBtb2R1bGVbcmVxdWlyZVN0cmluZ10pLmNhbGwoXG4gICAgICAgICAgICBtb2R1bGUsXG4gICAgICAgICAgICBcInRpbWVyc1wiXG4gICAgICAgICAgKS5zZXRJbW1lZGlhdGU7XG4gICAgICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgICAgICBlbnF1ZXVlVGFza0ltcGwgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICExID09PSBkaWRXYXJuQWJvdXRNZXNzYWdlQ2hhbm5lbCAmJlxuICAgICAgICAgICAgICAoKGRpZFdhcm5BYm91dE1lc3NhZ2VDaGFubmVsID0gITApLFxuICAgICAgICAgICAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgTWVzc2FnZUNoYW5uZWwgJiZcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJUaGlzIGJyb3dzZXIgZG9lcyBub3QgaGF2ZSBhIE1lc3NhZ2VDaGFubmVsIGltcGxlbWVudGF0aW9uLCBzbyBlbnF1ZXVpbmcgdGFza3MgdmlhIGF3YWl0IGFjdChhc3luYyAoKSA9PiAuLi4pIHdpbGwgZmFpbC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3VlcyBpZiB5b3UgZW5jb3VudGVyIHRoaXMgd2FybmluZy5cIlxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gY2FsbGJhY2s7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKHZvaWQgMCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgcmV0dXJuIGVucXVldWVUYXNrSW1wbCh0YXNrKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWdncmVnYXRlRXJyb3JzKGVycm9ycykge1xuICAgICAgcmV0dXJuIDEgPCBlcnJvcnMubGVuZ3RoICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yXG4gICAgICAgID8gbmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycylcbiAgICAgICAgOiBlcnJvcnNbMF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpIHtcbiAgICAgIHByZXZBY3RTY29wZURlcHRoICE9PSBhY3RTY29wZURlcHRoIC0gMSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiWW91IHNlZW0gdG8gaGF2ZSBvdmVybGFwcGluZyBhY3QoKSBjYWxscywgdGhpcyBpcyBub3Qgc3VwcG9ydGVkLiBCZSBzdXJlIHRvIGF3YWl0IHByZXZpb3VzIGFjdCgpIGNhbGxzIGJlZm9yZSBtYWtpbmcgYSBuZXcgb25lLiBcIlxuICAgICAgICApO1xuICAgICAgYWN0U2NvcGVEZXB0aCA9IHByZXZBY3RTY29wZURlcHRoO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrKHJldHVyblZhbHVlLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBxdWV1ZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlO1xuICAgICAgaWYgKG51bGwgIT09IHF1ZXVlKVxuICAgICAgICBpZiAoMCAhPT0gcXVldWUubGVuZ3RoKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmbHVzaEFjdFF1ZXVlKHF1ZXVlKTtcbiAgICAgICAgICAgIGVucXVldWVUYXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsocmV0dXJuVmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgZWxzZSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSA9IG51bGw7XG4gICAgICAwIDwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aFxuICAgICAgICA/ICgocXVldWUgPSBhZ2dyZWdhdGVFcnJvcnMoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzKSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGggPSAwKSxcbiAgICAgICAgICByZWplY3QocXVldWUpKVxuICAgICAgICA6IHJlc29sdmUocmV0dXJuVmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaEFjdFF1ZXVlKHF1ZXVlKSB7XG4gICAgICBpZiAoIWlzRmx1c2hpbmcpIHtcbiAgICAgICAgaXNGbHVzaGluZyA9ICEwO1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICg7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gcXVldWVbaV07XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLmRpZFVzZVByb21pc2UgPSAhMTtcbiAgICAgICAgICAgICAgdmFyIGNvbnRpbnVhdGlvbiA9IGNhbGxiYWNrKCExKTtcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT09IGNvbnRpbnVhdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdFNoYXJlZEludGVybmFscy5kaWRVc2VQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICBxdWV1ZVtpXSA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgcXVldWUuc3BsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGNvbnRpbnVhdGlvbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGJyZWFrO1xuICAgICAgICAgICAgfSB3aGlsZSAoMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcXVldWUuc3BsaWNlKDAsIGkgKyAxKSwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlzRmx1c2hpbmcgPSAhMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0ICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KEVycm9yKCkpO1xuICAgIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnRcIiksXG4gICAgICBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG4gICAgICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLFxuICAgICAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxcbiAgICAgIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik7XG4gICAgU3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpO1xuICAgIHZhciBSRUFDVF9DT05TVU1FUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnN1bWVyXCIpLFxuICAgICAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksXG4gICAgICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLFxuICAgICAgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksXG4gICAgICBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSxcbiAgICAgIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm9mZnNjcmVlblwiKSxcbiAgICAgIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IFN5bWJvbC5pdGVyYXRvcixcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IHt9LFxuICAgICAgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7XG4gICAgICAgIGlzTW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICAgICAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgXCJmb3JjZVVwZGF0ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgICAgICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIFwicmVwbGFjZVN0YXRlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgICAgICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCBcInNldFN0YXRlXCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXNzaWduID0gT2JqZWN0LmFzc2lnbixcbiAgICAgIGVtcHR5T2JqZWN0ID0ge307XG4gICAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG4gICAgQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307XG4gICAgQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgIT09IHR5cGVvZiBwYXJ0aWFsU3RhdGUgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgcGFydGlhbFN0YXRlICYmXG4gICAgICAgIG51bGwgIT0gcGFydGlhbFN0YXRlXG4gICAgICApXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwidGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuXCJcbiAgICAgICAgKTtcbiAgICAgIHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcywgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgXCJzZXRTdGF0ZVwiKTtcbiAgICB9O1xuICAgIENvbXBvbmVudC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcywgY2FsbGJhY2ssIFwiZm9yY2VVcGRhdGVcIik7XG4gICAgfTtcbiAgICB2YXIgZGVwcmVjYXRlZEFQSXMgPSB7XG4gICAgICAgIGlzTW91bnRlZDogW1xuICAgICAgICAgIFwiaXNNb3VudGVkXCIsXG4gICAgICAgICAgXCJJbnN0ZWFkLCBtYWtlIHN1cmUgdG8gY2xlYW4gdXAgc3Vic2NyaXB0aW9ucyBhbmQgcGVuZGluZyByZXF1ZXN0cyBpbiBjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy5cIlxuICAgICAgICBdLFxuICAgICAgICByZXBsYWNlU3RhdGU6IFtcbiAgICAgICAgICBcInJlcGxhY2VTdGF0ZVwiLFxuICAgICAgICAgIFwiUmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBzZXRTdGF0ZSBpbnN0ZWFkIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS5cIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgZm5OYW1lO1xuICAgIGZvciAoZm5OYW1lIGluIGRlcHJlY2F0ZWRBUElzKVxuICAgICAgZGVwcmVjYXRlZEFQSXMuaGFzT3duUHJvcGVydHkoZm5OYW1lKSAmJlxuICAgICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTtcbiAgICBDb21wb25lbnREdW1teS5wcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICAgIGRlcHJlY2F0ZWRBUElzID0gUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXkoKTtcbiAgICBkZXByZWNhdGVkQVBJcy5jb25zdHJ1Y3RvciA9IFB1cmVDb21wb25lbnQ7XG4gICAgYXNzaWduKGRlcHJlY2F0ZWRBUElzLCBDb21wb25lbnQucHJvdG90eXBlKTtcbiAgICBkZXByZWNhdGVkQVBJcy5pc1B1cmVSZWFjdENvbXBvbmVudCA9ICEwO1xuICAgIHZhciBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXksXG4gICAgICBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDIgPSBTeW1ib2wuZm9yKFwicmVhY3QuY2xpZW50LnJlZmVyZW5jZVwiKSxcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0ge1xuICAgICAgICBIOiBudWxsLFxuICAgICAgICBBOiBudWxsLFxuICAgICAgICBUOiBudWxsLFxuICAgICAgICBTOiBudWxsLFxuICAgICAgICBhY3RRdWV1ZTogbnVsbCxcbiAgICAgICAgaXNCYXRjaGluZ0xlZ2FjeTogITEsXG4gICAgICAgIGRpZFNjaGVkdWxlTGVnYWN5VXBkYXRlOiAhMSxcbiAgICAgICAgZGlkVXNlUHJvbWlzZTogITEsXG4gICAgICAgIHRocm93bkVycm9yczogW10sXG4gICAgICAgIGdldEN1cnJlbnRTdGFjazogbnVsbFxuICAgICAgfSxcbiAgICAgIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbiAgICAgIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpLFxuICAgICAgZGlzYWJsZWREZXB0aCA9IDAsXG4gICAgICBwcmV2TG9nLFxuICAgICAgcHJldkluZm8sXG4gICAgICBwcmV2V2FybixcbiAgICAgIHByZXZFcnJvcixcbiAgICAgIHByZXZHcm91cCxcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCxcbiAgICAgIHByZXZHcm91cEVuZDtcbiAgICBkaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSAhMDtcbiAgICB2YXIgcHJlZml4LFxuICAgICAgc3VmZml4LFxuICAgICAgcmVlbnRyeSA9ICExO1xuICAgIHZhciBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IChcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFdlYWtNYXAgPyBXZWFrTWFwIDogTWFwXG4gICAgKSgpO1xuICAgIHZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIiksXG4gICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bixcbiAgICAgIGRpZFdhcm5BYm91dE9sZEpTWFJ1bnRpbWU7XG4gICAgdmFyIGRpZFdhcm5BYm91dEVsZW1lbnRSZWYgPSB7fTtcbiAgICB2YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge30sXG4gICAgICBkaWRXYXJuQWJvdXRNYXBzID0gITEsXG4gICAgICB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCA9IC9cXC8rL2csXG4gICAgICByZXBvcnRHbG9iYWxFcnJvciA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlcG9ydEVycm9yXG4gICAgICAgICAgPyByZXBvcnRFcnJvclxuICAgICAgICAgIDogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygd2luZG93ICYmXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygd2luZG93LkVycm9yRXZlbnRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV2ZW50ID0gbmV3IHdpbmRvdy5FcnJvckV2ZW50KFwiZXJyb3JcIiwge1xuICAgICAgICAgICAgICAgICAgYnViYmxlczogITAsXG4gICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiAhMCxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBlcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBlcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgZXJyb3IubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgID8gU3RyaW5nKGVycm9yLm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCF3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCkpIHJldHVybjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcHJvY2VzcyAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByb2Nlc3MuZW1pdFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVtaXQoXCJ1bmNhdWdodEV4Y2VwdGlvblwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfSxcbiAgICAgIGRpZFdhcm5BYm91dE1lc3NhZ2VDaGFubmVsID0gITEsXG4gICAgICBlbnF1ZXVlVGFza0ltcGwgPSBudWxsLFxuICAgICAgYWN0U2NvcGVEZXB0aCA9IDAsXG4gICAgICBkaWRXYXJuTm9Bd2FpdEFjdCA9ICExLFxuICAgICAgaXNGbHVzaGluZyA9ICExLFxuICAgICAgcXVldWVTZXZlcmFsTWljcm90YXNrcyA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHF1ZXVlTWljcm90YXNrXG4gICAgICAgICAgPyBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxdWV1ZU1pY3JvdGFzayhjYWxsYmFjayk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIDogZW5xdWV1ZVRhc2s7XG4gICAgZXhwb3J0cy5DaGlsZHJlbiA9IHtcbiAgICAgIG1hcDogbWFwQ2hpbGRyZW4sXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiAoY2hpbGRyZW4sIGZvckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCkge1xuICAgICAgICBtYXBDaGlsZHJlbihcbiAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmb3JFYWNoRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZm9yRWFjaENvbnRleHRcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBjb3VudDogZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gICAgICAgIHZhciBuID0gMDtcbiAgICAgICAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBuKys7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH0sXG4gICAgICB0b0FycmF5OiBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgfSkgfHwgW11cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBvbmx5OiBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgfVxuICAgIH07XG4gICAgZXhwb3J0cy5Db21wb25lbnQgPSBDb21wb25lbnQ7XG4gICAgZXhwb3J0cy5GcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG4gICAgZXhwb3J0cy5Qcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gICAgZXhwb3J0cy5QdXJlQ29tcG9uZW50ID0gUHVyZUNvbXBvbmVudDtcbiAgICBleHBvcnRzLlN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xuICAgIGV4cG9ydHMuU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICAgIGV4cG9ydHMuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFID1cbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzO1xuICAgIGV4cG9ydHMuYWN0ID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICB2YXIgcHJldkFjdFF1ZXVlID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUsXG4gICAgICAgIHByZXZBY3RTY29wZURlcHRoID0gYWN0U2NvcGVEZXB0aDtcbiAgICAgIGFjdFNjb3BlRGVwdGgrKztcbiAgICAgIHZhciBxdWV1ZSA9IChSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSA9XG4gICAgICAgICAgbnVsbCAhPT0gcHJldkFjdFF1ZXVlID8gcHJldkFjdFF1ZXVlIDogW10pLFxuICAgICAgICBkaWRBd2FpdEFjdENhbGwgPSAhMTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjYWxsYmFjaygpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgfVxuICAgICAgaWYgKDAgPCBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoKVxuICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgKHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpLFxuICAgICAgICAgIChjYWxsYmFjayA9IGFnZ3JlZ2F0ZUVycm9ycyhSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMpKSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aCA9IDApLFxuICAgICAgICAgIGNhbGxiYWNrKVxuICAgICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9PSByZXN1bHQgJiZcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHJlc3VsdCAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXN1bHQudGhlblxuICAgICAgKSB7XG4gICAgICAgIHZhciB0aGVuYWJsZSA9IHJlc3VsdDtcbiAgICAgICAgcXVldWVTZXZlcmFsTWljcm90YXNrcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZGlkQXdhaXRBY3RDYWxsIHx8XG4gICAgICAgICAgICBkaWRXYXJuTm9Bd2FpdEFjdCB8fFxuICAgICAgICAgICAgKChkaWRXYXJuTm9Bd2FpdEFjdCA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiWW91IGNhbGxlZCBhY3QoYXN5bmMgKCkgPT4gLi4uKSB3aXRob3V0IGF3YWl0LiBUaGlzIGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCB0ZXN0aW5nIGJlaGF2aW91ciwgaW50ZXJsZWF2aW5nIG11bHRpcGxlIGFjdCBjYWxscyBhbmQgbWl4aW5nIHRoZWlyIHNjb3Blcy4gWW91IHNob3VsZCAtIGF3YWl0IGFjdChhc3luYyAoKSA9PiAuLi4pO1wiXG4gICAgICAgICAgICApKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgZGlkQXdhaXRBY3RDYWxsID0gITA7XG4gICAgICAgICAgICB0aGVuYWJsZS50aGVuKFxuICAgICAgICAgICAgICBmdW5jdGlvbiAocmV0dXJuVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBwb3BBY3RTY29wZShwcmV2QWN0UXVldWUsIHByZXZBY3RTY29wZURlcHRoKTtcbiAgICAgICAgICAgICAgICBpZiAoMCA9PT0gcHJldkFjdFNjb3BlRGVwdGgpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZsdXNoQWN0UXVldWUocXVldWUpLFxuICAgICAgICAgICAgICAgICAgICAgIGVucXVldWVUYXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrKFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IkMikge1xuICAgICAgICAgICAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMucHVzaChlcnJvciQyKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmICgwIDwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX3Rocm93bkVycm9yID0gYWdncmVnYXRlRXJyb3JzKFxuICAgICAgICAgICAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9yc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KF90aHJvd25FcnJvcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHJlc29sdmUocmV0dXJuVmFsdWUpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBwb3BBY3RTY29wZShwcmV2QWN0UXVldWUsIHByZXZBY3RTY29wZURlcHRoKTtcbiAgICAgICAgICAgICAgICAwIDwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgPyAoKGVycm9yID0gYWdncmVnYXRlRXJyb3JzKFxuICAgICAgICAgICAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9yc1xuICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGggPSAwKSxcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKSlcbiAgICAgICAgICAgICAgICAgIDogcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgcmV0dXJuVmFsdWUkanNjb21wJDAgPSByZXN1bHQ7XG4gICAgICBwb3BBY3RTY29wZShwcmV2QWN0UXVldWUsIHByZXZBY3RTY29wZURlcHRoKTtcbiAgICAgIDAgPT09IHByZXZBY3RTY29wZURlcHRoICYmXG4gICAgICAgIChmbHVzaEFjdFF1ZXVlKHF1ZXVlKSxcbiAgICAgICAgMCAhPT0gcXVldWUubGVuZ3RoICYmXG4gICAgICAgICAgcXVldWVTZXZlcmFsTWljcm90YXNrcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkaWRBd2FpdEFjdENhbGwgfHxcbiAgICAgICAgICAgICAgZGlkV2Fybk5vQXdhaXRBY3QgfHxcbiAgICAgICAgICAgICAgKChkaWRXYXJuTm9Bd2FpdEFjdCA9ICEwKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIkEgY29tcG9uZW50IHN1c3BlbmRlZCBpbnNpZGUgYW4gYGFjdGAgc2NvcGUsIGJ1dCB0aGUgYGFjdGAgY2FsbCB3YXMgbm90IGF3YWl0ZWQuIFdoZW4gdGVzdGluZyBSZWFjdCBjb21wb25lbnRzIHRoYXQgZGVwZW5kIG9uIGFzeW5jaHJvbm91cyBkYXRhLCB5b3UgbXVzdCBhd2FpdCB0aGUgcmVzdWx0OlxcblxcbmF3YWl0IGFjdCgoKSA9PiAuLi4pXCJcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfSksXG4gICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSA9IG51bGwpKTtcbiAgICAgIGlmICgwIDwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aClcbiAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICgoY2FsbGJhY2sgPSBhZ2dyZWdhdGVFcnJvcnMoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzKSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGggPSAwKSxcbiAgICAgICAgICBjYWxsYmFjaylcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRoZW46IGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBkaWRBd2FpdEFjdENhbGwgPSAhMDtcbiAgICAgICAgICAwID09PSBwcmV2QWN0U2NvcGVEZXB0aFxuICAgICAgICAgICAgPyAoKFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlID0gcXVldWUpLFxuICAgICAgICAgICAgICBlbnF1ZXVlVGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsoXG4gICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSRqc2NvbXAkMCxcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIDogcmVzb2x2ZShyZXR1cm5WYWx1ZSRqc2NvbXAkMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleHBvcnRzLmNhY2hlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBleHBvcnRzLmNsb25lRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gICAgICBpZiAobnVsbCA9PT0gZWxlbWVudCB8fCB2b2lkIDAgPT09IGVsZW1lbnQpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCBcIiArXG4gICAgICAgICAgICBlbGVtZW50ICtcbiAgICAgICAgICAgIFwiLlwiXG4gICAgICAgICk7XG4gICAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIGVsZW1lbnQucHJvcHMpLFxuICAgICAgICBrZXkgPSBlbGVtZW50LmtleSxcbiAgICAgICAgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIGlmIChudWxsICE9IGNvbmZpZykge1xuICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0O1xuICAgICAgICBhOiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIFwicmVmXCIpICYmXG4gICAgICAgICAgICAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICBcInJlZlwiXG4gICAgICAgICAgICApLmdldCkgJiZcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5pc1JlYWN0V2FybmluZ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITE7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIH1cbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSB2b2lkIDAgIT09IGNvbmZpZy5yZWY7XG4gICAgICAgIH1cbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ICYmIChvd25lciA9IGdldE93bmVyKCkpO1xuICAgICAgICBoYXNWYWxpZEtleShjb25maWcpICYmXG4gICAgICAgICAgKGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSksIChrZXkgPSBcIlwiICsgY29uZmlnLmtleSkpO1xuICAgICAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZylcbiAgICAgICAgICAhaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSB8fFxuICAgICAgICAgICAgXCJrZXlcIiA9PT0gcHJvcE5hbWUgfHxcbiAgICAgICAgICAgIFwiX19zZWxmXCIgPT09IHByb3BOYW1lIHx8XG4gICAgICAgICAgICBcIl9fc291cmNlXCIgPT09IHByb3BOYW1lIHx8XG4gICAgICAgICAgICAoXCJyZWZcIiA9PT0gcHJvcE5hbWUgJiYgdm9pZCAwID09PSBjb25maWcucmVmKSB8fFxuICAgICAgICAgICAgKHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV0pO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BOYW1lID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG4gICAgICBpZiAoMSA9PT0gcHJvcE5hbWUpIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICBlbHNlIGlmICgxIDwgcHJvcE5hbWUpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gQXJyYXkocHJvcE5hbWUpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BOYW1lOyBpKyspXG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICAgICAgcHJvcHMuY2hpbGRyZW4gPSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQ7XG4gICAgICB9XG4gICAgICBwcm9wcyA9IFJlYWN0RWxlbWVudChlbGVtZW50LnR5cGUsIGtleSwgdm9pZCAwLCB2b2lkIDAsIG93bmVyLCBwcm9wcyk7XG4gICAgICBmb3IgKGtleSA9IDI7IGtleSA8IGFyZ3VtZW50cy5sZW5ndGg7IGtleSsrKVxuICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNba2V5XSwgcHJvcHMudHlwZSk7XG4gICAgICByZXR1cm4gcHJvcHM7XG4gICAgfTtcbiAgICBleHBvcnRzLmNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgICAgIF9jdXJyZW50VmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgX2N1cnJlbnRWYWx1ZTI6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgX3RocmVhZENvdW50OiAwLFxuICAgICAgICBQcm92aWRlcjogbnVsbCxcbiAgICAgICAgQ29uc3VtZXI6IG51bGxcbiAgICAgIH07XG4gICAgICBkZWZhdWx0VmFsdWUuUHJvdmlkZXIgPSBkZWZhdWx0VmFsdWU7XG4gICAgICBkZWZhdWx0VmFsdWUuQ29uc3VtZXIgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05TVU1FUl9UWVBFLFxuICAgICAgICBfY29udGV4dDogZGVmYXVsdFZhbHVlXG4gICAgICB9O1xuICAgICAgZGVmYXVsdFZhbHVlLl9jdXJyZW50UmVuZGVyZXIgPSBudWxsO1xuICAgICAgZGVmYXVsdFZhbHVlLl9jdXJyZW50UmVuZGVyZXIyID0gbnVsbDtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfTtcbiAgICBleHBvcnRzLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICAgICAgaWYgKGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSlcbiAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCB0eXBlKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpID0gXCJcIjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHZvaWQgMCA9PT0gdHlwZSB8fFxuICAgICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgMCA9PT0gT2JqZWN0LmtleXModHlwZSkubGVuZ3RoKVxuICAgICAgICApXG4gICAgICAgICAgaSArPVxuICAgICAgICAgICAgXCIgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgICAgICBpZiAobnVsbCA9PT0gdHlwZSkgdmFyIHR5cGVTdHJpbmcgPSBcIm51bGxcIjtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGlzQXJyYXlJbXBsKHR5cGUpXG4gICAgICAgICAgICA/ICh0eXBlU3RyaW5nID0gXCJhcnJheVwiKVxuICAgICAgICAgICAgOiB2b2lkIDAgIT09IHR5cGUgJiYgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG4gICAgICAgICAgICAgID8gKCh0eXBlU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgIFwiPFwiICtcbiAgICAgICAgICAgICAgICAgIChnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCBcIlVua25vd25cIikgK1xuICAgICAgICAgICAgICAgICAgXCIgLz5cIiksXG4gICAgICAgICAgICAgICAgKGkgPVxuICAgICAgICAgICAgICAgICAgXCIgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD9cIikpXG4gICAgICAgICAgICAgIDogKHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJSZWFjdC5jcmVhdGVFbGVtZW50OiB0eXBlIGlzIGludmFsaWQgLS0gZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciBidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlIGNvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzXCIsXG4gICAgICAgICAgdHlwZVN0cmluZyxcbiAgICAgICAgICBpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcE5hbWU7XG4gICAgICBpID0ge307XG4gICAgICB0eXBlU3RyaW5nID0gbnVsbDtcbiAgICAgIGlmIChudWxsICE9IGNvbmZpZylcbiAgICAgICAgZm9yIChwcm9wTmFtZSBpbiAoZGlkV2FybkFib3V0T2xkSlNYUnVudGltZSB8fFxuICAgICAgICAgICEoXCJfX3NlbGZcIiBpbiBjb25maWcpIHx8XG4gICAgICAgICAgXCJrZXlcIiBpbiBjb25maWcgfHxcbiAgICAgICAgICAoKGRpZFdhcm5BYm91dE9sZEpTWFJ1bnRpbWUgPSAhMCksXG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgXCJZb3VyIGFwcCAob3Igb25lIG9mIGl0cyBkZXBlbmRlbmNpZXMpIGlzIHVzaW5nIGFuIG91dGRhdGVkIEpTWCB0cmFuc2Zvcm0uIFVwZGF0ZSB0byB0aGUgbW9kZXJuIEpTWCB0cmFuc2Zvcm0gZm9yIGZhc3RlciBwZXJmb3JtYW5jZTogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9uZXctanN4LXRyYW5zZm9ybVwiXG4gICAgICAgICAgKSksXG4gICAgICAgIGhhc1ZhbGlkS2V5KGNvbmZpZykgJiZcbiAgICAgICAgICAoY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KSwgKHR5cGVTdHJpbmcgPSBcIlwiICsgY29uZmlnLmtleSkpLFxuICAgICAgICBjb25maWcpKVxuICAgICAgICAgIGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiZcbiAgICAgICAgICAgIFwia2V5XCIgIT09IHByb3BOYW1lICYmXG4gICAgICAgICAgICBcIl9fc2VsZlwiICE9PSBwcm9wTmFtZSAmJlxuICAgICAgICAgICAgXCJfX3NvdXJjZVwiICE9PSBwcm9wTmFtZSAmJlxuICAgICAgICAgICAgKGlbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXSk7XG4gICAgICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgICAgIGlmICgxID09PSBjaGlsZHJlbkxlbmd0aCkgaS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgZWxzZSBpZiAoMSA8IGNoaWxkcmVuTGVuZ3RoKSB7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCksIF9pID0gMDtcbiAgICAgICAgICBfaSA8IGNoaWxkcmVuTGVuZ3RoO1xuICAgICAgICAgIF9pKytcbiAgICAgICAgKVxuICAgICAgICAgIGNoaWxkQXJyYXlbX2ldID0gYXJndW1lbnRzW19pICsgMl07XG4gICAgICAgIE9iamVjdC5mcmVlemUgJiYgT2JqZWN0LmZyZWV6ZShjaGlsZEFycmF5KTtcbiAgICAgICAgaS5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcylcbiAgICAgICAgZm9yIChwcm9wTmFtZSBpbiAoKGNoaWxkcmVuTGVuZ3RoID0gdHlwZS5kZWZhdWx0UHJvcHMpLCBjaGlsZHJlbkxlbmd0aCkpXG4gICAgICAgICAgdm9pZCAwID09PSBpW3Byb3BOYW1lXSAmJiAoaVtwcm9wTmFtZV0gPSBjaGlsZHJlbkxlbmd0aFtwcm9wTmFtZV0pO1xuICAgICAgdHlwZVN0cmluZyAmJlxuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihcbiAgICAgICAgICBpLFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGVcbiAgICAgICAgICAgID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgXCJVbmtub3duXCJcbiAgICAgICAgICAgIDogdHlwZVxuICAgICAgICApO1xuICAgICAgcmV0dXJuIFJlYWN0RWxlbWVudCh0eXBlLCB0eXBlU3RyaW5nLCB2b2lkIDAsIHZvaWQgMCwgZ2V0T3duZXIoKSwgaSk7XG4gICAgfTtcbiAgICBleHBvcnRzLmNyZWF0ZVJlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZWZPYmplY3QgPSB7IGN1cnJlbnQ6IG51bGwgfTtcbiAgICAgIE9iamVjdC5zZWFsKHJlZk9iamVjdCk7XG4gICAgICByZXR1cm4gcmVmT2JqZWN0O1xuICAgIH07XG4gICAgZXhwb3J0cy5mb3J3YXJkUmVmID0gZnVuY3Rpb24gKHJlbmRlcikge1xuICAgICAgbnVsbCAhPSByZW5kZXIgJiYgcmVuZGVyLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEVcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCByZWNlaXZlZCBhIGBtZW1vYCBjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgbWVtbyhmb3J3YXJkUmVmKC4uLikpLlwiXG4gICAgICAgICAgKVxuICAgICAgICA6IFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHJlbmRlclxuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCB3YXMgZ2l2ZW4gJXMuXCIsXG4gICAgICAgICAgICAgIG51bGwgPT09IHJlbmRlciA/IFwibnVsbFwiIDogdHlwZW9mIHJlbmRlclxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogMCAhPT0gcmVuZGVyLmxlbmd0aCAmJlxuICAgICAgICAgICAgMiAhPT0gcmVuZGVyLmxlbmd0aCAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgYWNjZXB0IGV4YWN0bHkgdHdvIHBhcmFtZXRlcnM6IHByb3BzIGFuZCByZWYuICVzXCIsXG4gICAgICAgICAgICAgIDEgPT09IHJlbmRlci5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IFwiRGlkIHlvdSBmb3JnZXQgdG8gdXNlIHRoZSByZWYgcGFyYW1ldGVyP1wiXG4gICAgICAgICAgICAgICAgOiBcIkFueSBhZGRpdGlvbmFsIHBhcmFtZXRlciB3aWxsIGJlIHVuZGVmaW5lZC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgIG51bGwgIT0gcmVuZGVyICYmXG4gICAgICAgIG51bGwgIT0gcmVuZGVyLmRlZmF1bHRQcm9wcyAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGRvIG5vdCBzdXBwb3J0IGRlZmF1bHRQcm9wcy4gRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyBhIFJlYWN0IGNvbXBvbmVudD9cIlxuICAgICAgICApO1xuICAgICAgdmFyIGVsZW1lbnRUeXBlID0geyAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSwgcmVuZGVyOiByZW5kZXIgfSxcbiAgICAgICAgb3duTmFtZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgXCJkaXNwbGF5TmFtZVwiLCB7XG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIG93bk5hbWUgPSBuYW1lO1xuICAgICAgICAgIHJlbmRlci5uYW1lIHx8XG4gICAgICAgICAgICByZW5kZXIuZGlzcGxheU5hbWUgfHxcbiAgICAgICAgICAgIChPYmplY3QuZGVmaW5lUHJvcGVydHkocmVuZGVyLCBcIm5hbWVcIiwgeyB2YWx1ZTogbmFtZSB9KSxcbiAgICAgICAgICAgIChyZW5kZXIuZGlzcGxheU5hbWUgPSBuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGVsZW1lbnRUeXBlO1xuICAgIH07XG4gICAgZXhwb3J0cy5pc1ZhbGlkRWxlbWVudCA9IGlzVmFsaWRFbGVtZW50O1xuICAgIGV4cG9ydHMubGF6eSA9IGZ1bmN0aW9uIChjdG9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfTEFaWV9UWVBFLFxuICAgICAgICBfcGF5bG9hZDogeyBfc3RhdHVzOiAtMSwgX3Jlc3VsdDogY3RvciB9LFxuICAgICAgICBfaW5pdDogbGF6eUluaXRpYWxpemVyXG4gICAgICB9O1xuICAgIH07XG4gICAgZXhwb3J0cy5tZW1vID0gZnVuY3Rpb24gKHR5cGUsIGNvbXBhcmUpIHtcbiAgICAgIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB8fFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwibWVtbzogVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBjb21wb25lbnQuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzXCIsXG4gICAgICAgICAgbnVsbCA9PT0gdHlwZSA/IFwibnVsbFwiIDogdHlwZW9mIHR5cGVcbiAgICAgICAgKTtcbiAgICAgIGNvbXBhcmUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9NRU1PX1RZUEUsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGNvbXBhcmU6IHZvaWQgMCA9PT0gY29tcGFyZSA/IG51bGwgOiBjb21wYXJlXG4gICAgICB9O1xuICAgICAgdmFyIG93bk5hbWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29tcGFyZSwgXCJkaXNwbGF5TmFtZVwiLCB7XG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIG93bk5hbWUgPSBuYW1lO1xuICAgICAgICAgIHR5cGUubmFtZSB8fFxuICAgICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSB8fFxuICAgICAgICAgICAgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcIm5hbWVcIiwgeyB2YWx1ZTogbmFtZSB9KSxcbiAgICAgICAgICAgICh0eXBlLmRpc3BsYXlOYW1lID0gbmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb21wYXJlO1xuICAgIH07XG4gICAgZXhwb3J0cy5zdGFydFRyYW5zaXRpb24gPSBmdW5jdGlvbiAoc2NvcGUpIHtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQsXG4gICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uID0ge307XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gY3VycmVudFRyYW5zaXRpb247XG4gICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyA9IG5ldyBTZXQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IHNjb3BlKCksXG4gICAgICAgICAgb25TdGFydFRyYW5zaXRpb25GaW5pc2ggPSBSZWFjdFNoYXJlZEludGVybmFscy5TO1xuICAgICAgICBudWxsICE9PSBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCAmJlxuICAgICAgICAgIG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoKGN1cnJlbnRUcmFuc2l0aW9uLCByZXR1cm5WYWx1ZSk7XG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZSAmJlxuICAgICAgICAgIG51bGwgIT09IHJldHVyblZhbHVlICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmV0dXJuVmFsdWUudGhlbiAmJlxuICAgICAgICAgIHJldHVyblZhbHVlLnRoZW4obm9vcCwgcmVwb3J0R2xvYmFsRXJyb3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVwb3J0R2xvYmFsRXJyb3IoZXJyb3IpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgbnVsbCA9PT0gcHJldlRyYW5zaXRpb24gJiZcbiAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyAmJlxuICAgICAgICAgICgoc2NvcGUgPSBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5zaXplKSxcbiAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5jbGVhcigpLFxuICAgICAgICAgIDEwIDwgc2NvcGUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgXCJEZXRlY3RlZCBhIGxhcmdlIG51bWJlciBvZiB1cGRhdGVzIGluc2lkZSBzdGFydFRyYW5zaXRpb24uIElmIHRoaXMgaXMgZHVlIHRvIGEgc3Vic2NyaXB0aW9uIHBsZWFzZSByZS13cml0ZSBpdCB0byB1c2UgUmVhY3QgcHJvdmlkZWQgaG9va3MuIE90aGVyd2lzZSBjb25jdXJyZW50IG1vZGUgZ3VhcmFudGVlcyBhcmUgb2ZmIHRoZSB0YWJsZS5cIlxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2VHJhbnNpdGlvbik7XG4gICAgICB9XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX3VzZUNhY2hlUmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUNhY2hlUmVmcmVzaCgpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2UgPSBmdW5jdGlvbiAodXNhYmxlKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2UodXNhYmxlKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlQWN0aW9uU3RhdGUgPSBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUsIHBlcm1hbGluaykge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlQWN0aW9uU3RhdGUoXG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgICBwZXJtYWxpbmtcbiAgICAgICk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUNhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUNvbnRleHQgPSBmdW5jdGlvbiAoQ29udGV4dCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICAgICAgQ29udGV4dC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuQ29uc3VtZXIpIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgYnVncy4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkP1wiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlci51c2VDb250ZXh0KENvbnRleHQpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlID0gZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VEZWZlcnJlZFZhbHVlID0gZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZURlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUVmZmVjdCA9IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUlkKCk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGUgPSBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VJbnNlcnRpb25FZmZlY3QgPSBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlTGF5b3V0RWZmZWN0ID0gZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZU1lbW8gPSBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZU9wdGltaXN0aWMgPSBmdW5jdGlvbiAocGFzc3Rocm91Z2gsIHJlZHVjZXIpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZU9wdGltaXN0aWMocGFzc3Rocm91Z2gsIHJlZHVjZXIpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VSZWR1Y2VyID0gZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZVJlZiA9IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZVJlZihpbml0aWFsVmFsdWUpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VTdGF0ZSA9IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlID0gZnVuY3Rpb24gKFxuICAgICAgc3Vic2NyaWJlLFxuICAgICAgZ2V0U25hcHNob3QsXG4gICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICkge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICApO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VUcmFuc2l0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlVHJhbnNpdGlvbigpO1xuICAgIH07XG4gICAgZXhwb3J0cy52ZXJzaW9uID0gXCIxOS4wLjBcIjtcbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgJiZcbiAgICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChFcnJvcigpKTtcbiAgfSkoKTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LnByb2R1Y3Rpb24uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtanN4LWRldi1ydW50aW1lLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViAmJlxuICAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKSB7XG4gICAgICBpZiAobnVsbCA9PSB0eXBlKSByZXR1cm4gbnVsbDtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICByZXR1cm4gdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQyXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlKSByZXR1cm4gdHlwZTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiRnJhZ21lbnRcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJQb3J0YWxcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlByb2ZpbGVyXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdHJpY3RNb2RlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZVwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZUxpc3RcIjtcbiAgICAgIH1cbiAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHR5cGUudGFnICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSgpLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgdHlwZS4kJHR5cGVvZilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKHR5cGUuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuUHJvdmlkZXJcIjtcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTlNVTUVSX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKHR5cGUuX2NvbnRleHQuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuQ29uc3VtZXJcIjtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICB2YXIgaW5uZXJUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIHR5cGUgfHxcbiAgICAgICAgICAgICAgKCh0eXBlID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8IFwiXCIpLFxuICAgICAgICAgICAgICAodHlwZSA9IFwiXCIgIT09IHR5cGUgPyBcIkZvcndhcmRSZWYoXCIgKyB0eXBlICsgXCIpXCIgOiBcIkZvcndhcmRSZWZcIikpO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoaW5uZXJUeXBlID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaW5uZXJUeXBlXG4gICAgICAgICAgICAgICAgPyBpbm5lclR5cGVcbiAgICAgICAgICAgICAgICA6IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8IFwiTWVtb1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgaW5uZXJUeXBlID0gdHlwZS5fcGF5bG9hZDtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLl9pbml0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKGlubmVyVHlwZSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCIgKyB2YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tLZXlTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICExO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMDtcbiAgICAgIH1cbiAgICAgIGlmIChKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gY29uc29sZTtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfdGVtcF9jb25zdCA9IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5lcnJvcjtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMCA9XG4gICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFN5bWJvbCAmJlxuICAgICAgICAgICAgU3ltYm9sLnRvU3RyaW5nVGFnICYmXG4gICAgICAgICAgICB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddKSB8fFxuICAgICAgICAgIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgfHxcbiAgICAgICAgICBcIk9iamVjdFwiO1xuICAgICAgICBKU0NvbXBpbGVyX3RlbXBfY29uc3QuY2FsbChcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQsXG4gICAgICAgICAgXCJUaGUgcHJvdmlkZWQga2V5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLlwiLFxuICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuICAgIGZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICAgICAgaWYgKDAgPT09IGRpc2FibGVkRGVwdGgpIHtcbiAgICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7XG4gICAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgICB3cml0YWJsZTogITBcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICAgIGluZm86IHByb3BzLFxuICAgICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgICAgZXJyb3I6IHByb3BzLFxuICAgICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZGlzYWJsZWREZXB0aCsrO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gICAgICBkaXNhYmxlZERlcHRoLS07XG4gICAgICBpZiAoMCA9PT0gZGlzYWJsZWREZXB0aCkge1xuICAgICAgICB2YXIgcHJvcHMgPSB7IGNvbmZpZ3VyYWJsZTogITAsIGVudW1lcmFibGU6ICEwLCB3cml0YWJsZTogITAgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICAgIGxvZzogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkxvZyB9KSxcbiAgICAgICAgICBpbmZvOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2SW5mbyB9KSxcbiAgICAgICAgICB3YXJuOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2V2FybiB9KSxcbiAgICAgICAgICBlcnJvcjogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkVycm9yIH0pLFxuICAgICAgICAgIGdyb3VwOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2R3JvdXAgfSksXG4gICAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZCB9KSxcbiAgICAgICAgICBncm91cEVuZDogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkdyb3VwRW5kIH0pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgMCA+IGRpc2FibGVkRGVwdGggJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcImRpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSB7XG4gICAgICBpZiAodm9pZCAwID09PSBwcmVmaXgpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XG4gICAgICAgICAgcHJlZml4ID0gKG1hdGNoICYmIG1hdGNoWzFdKSB8fCBcIlwiO1xuICAgICAgICAgIHN1ZmZpeCA9XG4gICAgICAgICAgICAtMSA8IHguc3RhY2suaW5kZXhPZihcIlxcbiAgICBhdFwiKVxuICAgICAgICAgICAgICA/IFwiICg8YW5vbnltb3VzPilcIlxuICAgICAgICAgICAgICA6IC0xIDwgeC5zdGFjay5pbmRleE9mKFwiQFwiKVxuICAgICAgICAgICAgICAgID8gXCJAdW5rbm93bjowOjBcIlxuICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgfVxuICAgICAgcmV0dXJuIFwiXFxuXCIgKyBwcmVmaXggKyBuYW1lICsgc3VmZml4O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgICAgIGlmICghZm4gfHwgcmVlbnRyeSkgcmV0dXJuIFwiXCI7XG4gICAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG4gICAgICBpZiAodm9pZCAwICE9PSBmcmFtZSkgcmV0dXJuIGZyYW1lO1xuICAgICAgcmVlbnRyeSA9ICEwO1xuICAgICAgZnJhbWUgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtcbiAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdm9pZCAwO1xuICAgICAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlciA9IG51bGw7XG4gICAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IG51bGw7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIFJ1bkluUm9vdEZyYW1lID0ge1xuICAgICAgICAgIERldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgICAgICAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgXCJwcm9wc1wiLCB7XG4gICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIFJlZmxlY3QgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2wgPSB4O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoICh4JDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbCA9IHgkMDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoICh4JDEpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2wgPSB4JDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIChGYWtlID0gZm4oKSkgJiZcbiAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIEZha2UuY2F0Y2ggJiZcbiAgICAgICAgICAgICAgICAgIEZha2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAgICAgICAgICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIFwic3RyaW5nXCIgPT09IHR5cGVvZiBzYW1wbGUuc3RhY2spXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtzYW1wbGUuc3RhY2ssIGNvbnRyb2wuc3RhY2tdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtudWxsLCBudWxsXTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdC5kaXNwbGF5TmFtZSA9XG4gICAgICAgICAgXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIjtcbiAgICAgICAgdmFyIG5hbWVQcm9wRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LFxuICAgICAgICAgIFwibmFtZVwiXG4gICAgICAgICk7XG4gICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvciAmJlxuICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvci5jb25maWd1cmFibGUgJiZcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QsXG4gICAgICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgICAgIHsgdmFsdWU6IFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCIgfVxuICAgICAgICAgICk7XG4gICAgICAgIHZhciBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPVxuICAgICAgICAgICAgUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290KCksXG4gICAgICAgICAgc2FtcGxlU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMF0sXG4gICAgICAgICAgY29udHJvbFN0YWNrID0gX1J1bkluUm9vdEZyYW1lJERldGVyWzFdO1xuICAgICAgICBpZiAoc2FtcGxlU3RhY2sgJiYgY29udHJvbFN0YWNrKSB7XG4gICAgICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlU3RhY2suc3BsaXQoXCJcXG5cIiksXG4gICAgICAgICAgICBjb250cm9sTGluZXMgPSBjb250cm9sU3RhY2suc3BsaXQoXCJcXG5cIik7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlciA9IG5hbWVQcm9wRGVzY3JpcHRvciA9IDA7XG4gICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgPCBzYW1wbGVMaW5lcy5sZW5ndGggJiZcbiAgICAgICAgICAgICFzYW1wbGVMaW5lc1tuYW1lUHJvcERlc2NyaXB0b3JdLmluY2x1ZGVzKFxuICAgICAgICAgICAgICBcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yKys7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlciA8IGNvbnRyb2xMaW5lcy5sZW5ndGggJiZcbiAgICAgICAgICAgICFjb250cm9sTGluZXNbX1J1bkluUm9vdEZyYW1lJERldGVyXS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIClcbiAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlcisrO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvciA9PT0gc2FtcGxlTGluZXMubGVuZ3RoIHx8XG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPT09IGNvbnRyb2xMaW5lcy5sZW5ndGhcbiAgICAgICAgICApXG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlciA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAxIDw9IG5hbWVQcm9wRGVzY3JpcHRvciAmJlxuICAgICAgICAgICAgICAwIDw9IF9SdW5JblJvb3RGcmFtZSREZXRlciAmJlxuICAgICAgICAgICAgICBzYW1wbGVMaW5lc1tuYW1lUHJvcERlc2NyaXB0b3JdICE9PVxuICAgICAgICAgICAgICAgIGNvbnRyb2xMaW5lc1tfUnVuSW5Sb290RnJhbWUkRGV0ZXJdO1xuXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlci0tO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICA7XG4gICAgICAgICAgICAxIDw9IG5hbWVQcm9wRGVzY3JpcHRvciAmJiAwIDw9IF9SdW5JblJvb3RGcmFtZSREZXRlcjtcbiAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvci0tLCBfUnVuSW5Sb290RnJhbWUkRGV0ZXItLVxuICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXSAhPT1cbiAgICAgICAgICAgICAgY29udHJvbExpbmVzW19SdW5JblJvb3RGcmFtZSREZXRlcl1cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoMSAhPT0gbmFtZVByb3BEZXNjcmlwdG9yIHx8IDEgIT09IF9SdW5JblJvb3RGcmFtZSREZXRlcikge1xuICAgICAgICAgICAgICAgIGRvXG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIChuYW1lUHJvcERlc2NyaXB0b3ItLSxcbiAgICAgICAgICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyLS0sXG4gICAgICAgICAgICAgICAgICAgIDAgPiBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVMaW5lc1tuYW1lUHJvcERlc2NyaXB0b3JdICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbExpbmVzW19SdW5JblJvb3RGcmFtZSREZXRlcl0pXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgYXQgbmV3IFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgYXQgXCJcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBmbi5kaXNwbGF5TmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICAgIF9mcmFtZS5pbmNsdWRlcyhcIjxhbm9ueW1vdXM+XCIpICYmXG4gICAgICAgICAgICAgICAgICAgICAgKF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKFwiPGFub255bW91cz5cIiwgZm4uZGlzcGxheU5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZm4gJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoMSA8PSBuYW1lUHJvcERlc2NyaXB0b3IgJiYgMCA8PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAocmVlbnRyeSA9ICExKSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZpb3VzRGlzcGF0Y2hlciksXG4gICAgICAgICAgcmVlbmFibGVMb2dzKCksXG4gICAgICAgICAgKEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gZnJhbWUpO1xuICAgICAgfVxuICAgICAgc2FtcGxlTGluZXMgPSAoc2FtcGxlTGluZXMgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiBcIlwiKVxuICAgICAgICA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHNhbXBsZUxpbmVzKVxuICAgICAgICA6IFwiXCI7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBmbiAmJiBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc2FtcGxlTGluZXMpO1xuICAgICAgcmV0dXJuIHNhbXBsZUxpbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSkge1xuICAgICAgaWYgKG51bGwgPT0gdHlwZSkgcmV0dXJuIFwiXCI7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSkge1xuICAgICAgICB2YXIgcHJvdG90eXBlID0gdHlwZS5wcm90b3R5cGU7XG4gICAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgISghcHJvdG90eXBlIHx8ICFwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSkgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXCJTdXNwZW5zZVwiKTtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiU3VzcGVuc2VMaXN0XCIpO1xuICAgICAgfVxuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKHR5cGUgPSBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyLCAhMSkpLCB0eXBlO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUpO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgcHJvdG90eXBlID0gdHlwZS5fcGF5bG9hZDtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLl9pbml0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlKHByb3RvdHlwZSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE93bmVyKCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5BO1xuICAgICAgcmV0dXJuIG51bGwgPT09IGRpc3BhdGNoZXIgPyBudWxsIDogZGlzcGF0Y2hlci5nZXRPd25lcigpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgXCJrZXlcIikpIHtcbiAgICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCBcImtleVwiKS5nZXQ7XG4gICAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSByZXR1cm4gITE7XG4gICAgICB9XG4gICAgICByZXR1cm4gdm9pZCAwICE9PSBjb25maWcua2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAgICAgIGZ1bmN0aW9uIHdhcm5BYm91dEFjY2Vzc2luZ0tleSgpIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gfHxcbiAgICAgICAgICAoKHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gITApLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0IGluIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgdmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCBwcm9wLiAoaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9zcGVjaWFsLXByb3BzKVwiLFxuICAgICAgICAgICAgZGlzcGxheU5hbWVcbiAgICAgICAgICApKTtcbiAgICAgIH1cbiAgICAgIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9ICEwO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCBcImtleVwiLCB7XG4gICAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZWxlbWVudFJlZkdldHRlcldpdGhEZXByZWNhdGlvbldhcm5pbmcoKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0aGlzLnR5cGUpO1xuICAgICAgZGlkV2FybkFib3V0RWxlbWVudFJlZltjb21wb25lbnROYW1lXSB8fFxuICAgICAgICAoKGRpZFdhcm5BYm91dEVsZW1lbnRSZWZbY29tcG9uZW50TmFtZV0gPSAhMCksXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJBY2Nlc3NpbmcgZWxlbWVudC5yZWYgd2FzIHJlbW92ZWQgaW4gUmVhY3QgMTkuIHJlZiBpcyBub3cgYSByZWd1bGFyIHByb3AuIEl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBKU1ggRWxlbWVudCB0eXBlIGluIGEgZnV0dXJlIHJlbGVhc2UuXCJcbiAgICAgICAgKSk7XG4gICAgICBjb21wb25lbnROYW1lID0gdGhpcy5wcm9wcy5yZWY7XG4gICAgICByZXR1cm4gdm9pZCAwICE9PSBjb21wb25lbnROYW1lID8gY29tcG9uZW50TmFtZSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gICAgICBzZWxmID0gcHJvcHMucmVmO1xuICAgICAgdHlwZSA9IHtcbiAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIHByb3BzOiBwcm9wcyxcbiAgICAgICAgX293bmVyOiBvd25lclxuICAgICAgfTtcbiAgICAgIG51bGwgIT09ICh2b2lkIDAgIT09IHNlbGYgPyBzZWxmIDogbnVsbClcbiAgICAgICAgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJyZWZcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgICBnZXQ6IGVsZW1lbnRSZWZHZXR0ZXJXaXRoRGVwcmVjYXRpb25XYXJuaW5nXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJyZWZcIiwgeyBlbnVtZXJhYmxlOiAhMSwgdmFsdWU6IG51bGwgfSk7XG4gICAgICB0eXBlLl9zdG9yZSA9IHt9O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUuX3N0b3JlLCBcInZhbGlkYXRlZFwiLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITEsXG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgIHZhbHVlOiAwXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcIl9kZWJ1Z0luZm9cIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZnJlZXplICYmIChPYmplY3QuZnJlZXplKHR5cGUucHJvcHMpLCBPYmplY3QuZnJlZXplKHR5cGUpKTtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBqc3hERVZJbXBsKFxuICAgICAgdHlwZSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIG1heWJlS2V5LFxuICAgICAgaXNTdGF0aWNDaGlsZHJlbixcbiAgICAgIHNvdXJjZSxcbiAgICAgIHNlbGZcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUgfHxcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSB8fFxuICAgICAgICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHxcbiAgICAgICAgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fFxuICAgICAgICB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fFxuICAgICAgICB0eXBlID09PSBSRUFDVF9PRkZTQ1JFRU5fVFlQRSB8fFxuICAgICAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgICBudWxsICE9PSB0eXBlICYmXG4gICAgICAgICAgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8XG4gICAgICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHxcbiAgICAgICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlNVTUVSX1RZUEUgfHxcbiAgICAgICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHxcbiAgICAgICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSB8fFxuICAgICAgICAgICAgdm9pZCAwICE9PSB0eXBlLmdldE1vZHVsZUlkKSlcbiAgICAgICkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSBjb25maWcuY2hpbGRyZW47XG4gICAgICAgIGlmICh2b2lkIDAgIT09IGNoaWxkcmVuKVxuICAgICAgICAgIGlmIChpc1N0YXRpY0NoaWxkcmVuKVxuICAgICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgIGlzU3RhdGljQ2hpbGRyZW4gPSAwO1xuICAgICAgICAgICAgICAgIGlzU3RhdGljQ2hpbGRyZW4gPCBjaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaXNTdGF0aWNDaGlsZHJlbisrXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhjaGlsZHJlbltpc1N0YXRpY0NoaWxkcmVuXSwgdHlwZSk7XG4gICAgICAgICAgICAgIE9iamVjdC5mcmVlemUgJiYgT2JqZWN0LmZyZWV6ZShjaGlsZHJlbik7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlJlYWN0LmpzeDogU3RhdGljIGNoaWxkcmVuIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXkuIFlvdSBhcmUgbGlrZWx5IGV4cGxpY2l0bHkgY2FsbGluZyBSZWFjdC5qc3hzIG9yIFJlYWN0LmpzeERFVi4gVXNlIHRoZSBCYWJlbCB0cmFuc2Zvcm0gaW5zdGVhZC5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIGVsc2UgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW4sIHR5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGRyZW4gPSBcIlwiO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdm9pZCAwID09PSB0eXBlIHx8XG4gICAgICAgICAgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgICAgICBudWxsICE9PSB0eXBlICYmXG4gICAgICAgICAgICAwID09PSBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGgpXG4gICAgICAgIClcbiAgICAgICAgICBjaGlsZHJlbiArPVxuICAgICAgICAgICAgXCIgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgICAgICBudWxsID09PSB0eXBlXG4gICAgICAgICAgPyAoaXNTdGF0aWNDaGlsZHJlbiA9IFwibnVsbFwiKVxuICAgICAgICAgIDogaXNBcnJheUltcGwodHlwZSlcbiAgICAgICAgICAgID8gKGlzU3RhdGljQ2hpbGRyZW4gPSBcImFycmF5XCIpXG4gICAgICAgICAgICA6IHZvaWQgMCAhPT0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcbiAgICAgICAgICAgICAgPyAoKGlzU3RhdGljQ2hpbGRyZW4gPVxuICAgICAgICAgICAgICAgICAgXCI8XCIgK1xuICAgICAgICAgICAgICAgICAgKGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8IFwiVW5rbm93blwiKSArXG4gICAgICAgICAgICAgICAgICBcIiAvPlwiKSxcbiAgICAgICAgICAgICAgICAoY2hpbGRyZW4gPVxuICAgICAgICAgICAgICAgICAgXCIgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD9cIikpXG4gICAgICAgICAgICAgIDogKGlzU3RhdGljQ2hpbGRyZW4gPSB0eXBlb2YgdHlwZSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJSZWFjdC5qc3g6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yIGJ1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXNcIixcbiAgICAgICAgICBpc1N0YXRpY0NoaWxkcmVuLFxuICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIFwia2V5XCIpKSB7XG4gICAgICAgIGNoaWxkcmVuID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZykuZmlsdGVyKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgcmV0dXJuIFwia2V5XCIgIT09IGs7XG4gICAgICAgIH0pO1xuICAgICAgICBpc1N0YXRpY0NoaWxkcmVuID1cbiAgICAgICAgICAwIDwga2V5cy5sZW5ndGhcbiAgICAgICAgICAgID8gXCJ7a2V5OiBzb21lS2V5LCBcIiArIGtleXMuam9pbihcIjogLi4uLCBcIikgKyBcIjogLi4ufVwiXG4gICAgICAgICAgICA6IFwie2tleTogc29tZUtleX1cIjtcbiAgICAgICAgZGlkV2FybkFib3V0S2V5U3ByZWFkW2NoaWxkcmVuICsgaXNTdGF0aWNDaGlsZHJlbl0gfHxcbiAgICAgICAgICAoKGtleXMgPVxuICAgICAgICAgICAgMCA8IGtleXMubGVuZ3RoID8gXCJ7XCIgKyBrZXlzLmpvaW4oXCI6IC4uLiwgXCIpICsgXCI6IC4uLn1cIiA6IFwie31cIiksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICdBIHByb3BzIG9iamVjdCBjb250YWluaW5nIGEgXCJrZXlcIiBwcm9wIGlzIGJlaW5nIHNwcmVhZCBpbnRvIEpTWDpcXG4gIGxldCBwcm9wcyA9ICVzO1xcbiAgPCVzIHsuLi5wcm9wc30gLz5cXG5SZWFjdCBrZXlzIG11c3QgYmUgcGFzc2VkIGRpcmVjdGx5IHRvIEpTWCB3aXRob3V0IHVzaW5nIHNwcmVhZDpcXG4gIGxldCBwcm9wcyA9ICVzO1xcbiAgPCVzIGtleT17c29tZUtleX0gey4uLnByb3BzfSAvPicsXG4gICAgICAgICAgICBpc1N0YXRpY0NoaWxkcmVuLFxuICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICBrZXlzLFxuICAgICAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgICApLFxuICAgICAgICAgIChkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY2hpbGRyZW4gKyBpc1N0YXRpY0NoaWxkcmVuXSA9ICEwKSk7XG4gICAgICB9XG4gICAgICBjaGlsZHJlbiA9IG51bGw7XG4gICAgICB2b2lkIDAgIT09IG1heWJlS2V5ICYmXG4gICAgICAgIChjaGVja0tleVN0cmluZ0NvZXJjaW9uKG1heWJlS2V5KSwgKGNoaWxkcmVuID0gXCJcIiArIG1heWJlS2V5KSk7XG4gICAgICBoYXNWYWxpZEtleShjb25maWcpICYmXG4gICAgICAgIChjaGVja0tleVN0cmluZ0NvZXJjaW9uKGNvbmZpZy5rZXkpLCAoY2hpbGRyZW4gPSBcIlwiICsgY29uZmlnLmtleSkpO1xuICAgICAgaWYgKFwia2V5XCIgaW4gY29uZmlnKSB7XG4gICAgICAgIG1heWJlS2V5ID0ge307XG4gICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIGNvbmZpZylcbiAgICAgICAgICBcImtleVwiICE9PSBwcm9wTmFtZSAmJiAobWF5YmVLZXlbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXSk7XG4gICAgICB9IGVsc2UgbWF5YmVLZXkgPSBjb25maWc7XG4gICAgICBjaGlsZHJlbiAmJlxuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihcbiAgICAgICAgICBtYXliZUtleSxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlXG4gICAgICAgICAgICA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IFwiVW5rbm93blwiXG4gICAgICAgICAgICA6IHR5cGVcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwgY2hpbGRyZW4sIHNlbGYsIHNvdXJjZSwgZ2V0T3duZXIoKSwgbWF5YmVLZXkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBub2RlICYmXG4gICAgICAgIG5vZGUgJiZcbiAgICAgICAgbm9kZS4kJHR5cGVvZiAhPT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRVxuICAgICAgKVxuICAgICAgICBpZiAoaXNBcnJheUltcGwobm9kZSkpXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xuICAgICAgICAgICAgaXNWYWxpZEVsZW1lbnQoY2hpbGQpICYmIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNWYWxpZEVsZW1lbnQobm9kZSkpXG4gICAgICAgICAgbm9kZS5fc3RvcmUgJiYgKG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IDEpO1xuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAobnVsbCA9PT0gbm9kZSB8fCBcIm9iamVjdFwiICE9PSB0eXBlb2Ygbm9kZVxuICAgICAgICAgICAgPyAoaSA9IG51bGwpXG4gICAgICAgICAgICA6ICgoaSA9XG4gICAgICAgICAgICAgICAgKE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBub2RlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0pIHx8XG4gICAgICAgICAgICAgICAgbm9kZVtcIkBAaXRlcmF0b3JcIl0pLFxuICAgICAgICAgICAgICAoaSA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGkgPyBpIDogbnVsbCkpLFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGkgJiZcbiAgICAgICAgICAgIGkgIT09IG5vZGUuZW50cmllcyAmJlxuICAgICAgICAgICAgKChpID0gaS5jYWxsKG5vZGUpKSwgaSAhPT0gbm9kZSkpXG4gICAgICAgIClcbiAgICAgICAgICBmb3IgKDsgIShub2RlID0gaS5uZXh0KCkpLmRvbmU7IClcbiAgICAgICAgICAgIGlzVmFsaWRFbGVtZW50KG5vZGUudmFsdWUpICYmXG4gICAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkobm9kZS52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9iamVjdCAmJlxuICAgICAgICBudWxsICE9PSBvYmplY3QgJiZcbiAgICAgICAgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICAgICAgaWYgKFxuICAgICAgICBlbGVtZW50Ll9zdG9yZSAmJlxuICAgICAgICAhZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkICYmXG4gICAgICAgIG51bGwgPT0gZWxlbWVudC5rZXkgJiZcbiAgICAgICAgKChlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgPSAxKSxcbiAgICAgICAgKHBhcmVudFR5cGUgPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpKSxcbiAgICAgICAgIW93bmVySGFzS2V5VXNlV2FybmluZ1twYXJlbnRUeXBlXSlcbiAgICAgICkge1xuICAgICAgICBvd25lckhhc0tleVVzZVdhcm5pbmdbcGFyZW50VHlwZV0gPSAhMDtcbiAgICAgICAgdmFyIGNoaWxkT3duZXIgPSBcIlwiO1xuICAgICAgICBlbGVtZW50ICYmXG4gICAgICAgICAgbnVsbCAhPSBlbGVtZW50Ll9vd25lciAmJlxuICAgICAgICAgIGVsZW1lbnQuX293bmVyICE9PSBnZXRPd25lcigpICYmXG4gICAgICAgICAgKChjaGlsZE93bmVyID0gbnVsbCksXG4gICAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIGVsZW1lbnQuX293bmVyLnRhZ1xuICAgICAgICAgICAgPyAoY2hpbGRPd25lciA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShlbGVtZW50Ll9vd25lci50eXBlKSlcbiAgICAgICAgICAgIDogXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVsZW1lbnQuX293bmVyLm5hbWUgJiZcbiAgICAgICAgICAgICAgKGNoaWxkT3duZXIgPSBlbGVtZW50Ll9vd25lci5uYW1lKSxcbiAgICAgICAgICAoY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgY2hpbGRPd25lciArIFwiLlwiKSk7XG4gICAgICAgIHZhciBwcmV2R2V0Q3VycmVudFN0YWNrID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5nZXRDdXJyZW50U3RhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSk7XG4gICAgICAgICAgcHJldkdldEN1cnJlbnRTdGFjayAmJiAoc3RhY2sgKz0gcHJldkdldEN1cnJlbnRTdGFjaygpIHx8IFwiXCIpO1xuICAgICAgICAgIHJldHVybiBzdGFjaztcbiAgICAgICAgfTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLiVzJXMgU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLicsXG4gICAgICAgICAgcGFyZW50VHlwZSxcbiAgICAgICAgICBjaGlsZE93bmVyXG4gICAgICAgICk7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLmdldEN1cnJlbnRTdGFjayA9IHByZXZHZXRDdXJyZW50U3RhY2s7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkge1xuICAgICAgdmFyIGluZm8gPSBcIlwiLFxuICAgICAgICBvd25lciA9IGdldE93bmVyKCk7XG4gICAgICBvd25lciAmJlxuICAgICAgICAob3duZXIgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUob3duZXIudHlwZSkpICYmXG4gICAgICAgIChpbmZvID0gXCJcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgXCIgKyBvd25lciArIFwiYC5cIik7XG4gICAgICBpbmZvIHx8XG4gICAgICAgICgocGFyZW50VHlwZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShwYXJlbnRUeXBlKSkgJiZcbiAgICAgICAgICAoaW5mbyA9XG4gICAgICAgICAgICBcIlxcblxcbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPFwiICsgcGFyZW50VHlwZSArIFwiPi5cIikpO1xuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuICAgIHZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKSxcbiAgICAgIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC50cmFuc2l0aW9uYWwuZWxlbWVudFwiKSxcbiAgICAgIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxcbiAgICAgIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksXG4gICAgICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLFxuICAgICAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTtcbiAgICBTeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik7XG4gICAgdmFyIFJFQUNUX0NPTlNVTUVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29uc3VtZXJcIiksXG4gICAgICBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxcbiAgICAgIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksXG4gICAgICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIiksXG4gICAgICBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxcbiAgICAgIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpLFxuICAgICAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Qub2Zmc2NyZWVuXCIpLFxuICAgICAgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gU3ltYm9sLml0ZXJhdG9yLFxuICAgICAgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQyID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIiksXG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscyA9XG4gICAgICAgIFJlYWN0Ll9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxcbiAgICAgIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbiAgICAgIGFzc2lnbiA9IE9iamVjdC5hc3NpZ24sXG4gICAgICBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDEgPSBTeW1ib2wuZm9yKFwicmVhY3QuY2xpZW50LnJlZmVyZW5jZVwiKSxcbiAgICAgIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIGRpc2FibGVkRGVwdGggPSAwLFxuICAgICAgcHJldkxvZyxcbiAgICAgIHByZXZJbmZvLFxuICAgICAgcHJldldhcm4sXG4gICAgICBwcmV2RXJyb3IsXG4gICAgICBwcmV2R3JvdXAsXG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQsXG4gICAgICBwcmV2R3JvdXBFbmQ7XG4gICAgZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gITA7XG4gICAgdmFyIHByZWZpeCxcbiAgICAgIHN1ZmZpeCxcbiAgICAgIHJlZW50cnkgPSAhMTtcbiAgICB2YXIgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyAoXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBXZWFrTWFwID8gV2Vha01hcCA6IE1hcFxuICAgICkoKTtcbiAgICB2YXIgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpLFxuICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd247XG4gICAgdmFyIGRpZFdhcm5BYm91dEVsZW1lbnRSZWYgPSB7fTtcbiAgICB2YXIgZGlkV2FybkFib3V0S2V5U3ByZWFkID0ge30sXG4gICAgICBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcbiAgICBleHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbiAgICBleHBvcnRzLmpzeERFViA9IGZ1bmN0aW9uIChcbiAgICAgIHR5cGUsXG4gICAgICBjb25maWcsXG4gICAgICBtYXliZUtleSxcbiAgICAgIGlzU3RhdGljQ2hpbGRyZW4sXG4gICAgICBzb3VyY2UsXG4gICAgICBzZWxmXG4gICAgKSB7XG4gICAgICByZXR1cm4ganN4REVWSW1wbCh0eXBlLCBjb25maWcsIG1heWJlS2V5LCBpc1N0YXRpY0NoaWxkcmVuLCBzb3VyY2UsIHNlbGYpO1xuICAgIH07XG4gIH0pKCk7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtZGV2LXJ1bnRpbWUucHJvZHVjdGlvbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsCiAgICAiXCJ1c2UgY2xpZW50XCI7XG5pbXBvcnQgUmVhY3QsIHsgdHlwZSBKU1gsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IFwiLi4vc3R5bGVzL2dsb2JhbHMuY3NzXCI7XG5cbnR5cGUgVGhlbWVNb2RlID0gXCJsaWdodFwiIHwgXCJkYXJrXCI7XG5cbnR5cGUgVGhlbWVDb250ZXh0VHlwZSA9IHtcbiAgbW9kZTogVGhlbWVNb2RlO1xuICB0b2dnbGVUaGVtZTogKCkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IFRoZW1lQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8VGhlbWVDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuZXhwb3J0IGZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgW21vdW50ZWQsIHNldE1vdW50ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbbW9kZSwgc2V0TW9kZV0gPSB1c2VTdGF0ZTxUaGVtZU1vZGU+KFwibGlnaHRcIik7XG5cbiAgLy8gSGFuZGxlIGh5ZHJhdGlvblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldE1vdW50ZWQodHJ1ZSk7XG4gIH0sIFtdKTtcblxuICAvLyBJbml0aWFsaXplIHRoZW1lXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtb3VudGVkKSByZXR1cm47XG5cbiAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInRoZW1lXCIpIGFzIFRoZW1lTW9kZTtcblxuICAgIGlmIChzdG9yZWQpIHtcbiAgICAgIHNldE1vZGUoc3RvcmVkKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZWZlcnNEYXJrID0gd2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspXCIpLm1hdGNoZXM7XG5cbiAgICBzZXRNb2RlKHByZWZlcnNEYXJrID8gXCJkYXJrXCIgOiBcImxpZ2h0XCIpO1xuICB9LCBbbW91bnRlZF0pO1xuXG4gIC8vIFVwZGF0ZSB0aGVtZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbW91bnRlZCkgcmV0dXJuO1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXRoZW1lXCIsIG1vZGUpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwidGhlbWVcIiwgbW9kZSk7XG4gIH0sIFttb2RlLCBtb3VudGVkXSk7XG5cbiAgY29uc3QgdG9nZ2xlVGhlbWUgPSAoKTogdm9pZCA9PiBzZXRNb2RlKChwcmV2KSA9PiAocHJldiA9PT0gXCJsaWdodFwiID8gXCJkYXJrXCIgOiBcImxpZ2h0XCIpKTtcblxuICAvLyBQcmV2ZW50IGh5ZHJhdGlvbiBtaXNtYXRjaFxuICBpZiAoIW1vdW50ZWQpIHtcbiAgICByZXR1cm4gPD4gPC8+O1xuICB9XG5cbiAgcmV0dXJuIDxUaGVtZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgbW9kZSwgdG9nZ2xlVGhlbWUgfX0+e2NoaWxkcmVufTwvVGhlbWVDb250ZXh0LlByb3ZpZGVyPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVRoZW1lKCk6IFRoZW1lQ29udGV4dFR5cGUge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuXG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInVzZVRoZW1lIG11c3QgYmUgdXNlZCB3aXRoaW4gVGhlbWVQcm92aWRlclwiKTtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQSxXQUNZLEdBQUc7QUFDWCxhQUFTLHdCQUF3QixDQUFDLFlBQVksTUFBTTtBQUNsRCxhQUFPLGVBQWUsVUFBVSxXQUFXLFlBQVk7QUFBQSxRQUNyRCxhQUFjLEdBQUc7QUFDZixrQkFBUSxLQUNOLCtEQUNBLEtBQUssSUFDTCxLQUFLLEVBQ1A7QUFBQTtBQUFBLE1BRUosQ0FBQztBQUFBO0FBRUgsYUFBUyxhQUFhLENBQUMsZUFBZTtBQUNwQyxVQUFhLGtCQUFULGVBQThDLGtCQUFwQjtBQUM1QixlQUFPO0FBQ1Qsc0JBQ0cseUJBQXlCLGNBQWMsMEJBQ3hDLGNBQWM7QUFDaEIsb0JBQTZCLGtCQUF0QixhQUFzQyxnQkFBZ0I7QUFBQTtBQUUvRCxhQUFTLFFBQVEsQ0FBQyxnQkFBZ0IsWUFBWTtBQUM1Qyx3QkFDSSxpQkFBaUIsZUFBZSxpQkFDL0IsZUFBZSxlQUFlLGVBQWUsU0FDaEQ7QUFDRixVQUFJLGFBQWEsaUJBQWlCLE1BQU07QUFDeEMsOENBQXdDLGdCQUNyQyxRQUFRLE1BQ1AseVBBQ0EsWUFDQSxjQUNGLEdBQ0Msd0NBQXdDLGNBQWM7QUFBQTtBQUUzRCxhQUFTLFNBQVMsQ0FBQyxPQUFPLFNBQVMsU0FBUztBQUMxQyxXQUFLLFFBQVE7QUFDYixXQUFLLFVBQVU7QUFDZixXQUFLLE9BQU87QUFDWixXQUFLLFVBQVUsV0FBVztBQUFBO0FBRTVCLGFBQVMsY0FBYyxHQUFHO0FBQUE7QUFDMUIsYUFBUyxhQUFhLENBQUMsT0FBTyxTQUFTLFNBQVM7QUFDOUMsV0FBSyxRQUFRO0FBQ2IsV0FBSyxVQUFVO0FBQ2YsV0FBSyxPQUFPO0FBQ1osV0FBSyxVQUFVLFdBQVc7QUFBQTtBQUU1QixhQUFTLGtCQUFrQixDQUFDLE9BQU87QUFDakMsYUFBTyxLQUFLO0FBQUE7QUFFZCxhQUFTLHNCQUFzQixDQUFDLE9BQU87QUFDckMsVUFBSTtBQUNGLDJCQUFtQixLQUFLO0FBQ3hCLFlBQUksMkJBQTJCO0FBQUEsZUFDeEIsR0FBUDtBQUNBLG1DQUEyQjtBQUFBO0FBRTdCLFVBQUksMEJBQTBCO0FBQzVCLG1DQUEyQjtBQUMzQixZQUFJLHdCQUF3Qix5QkFBeUI7QUFDckQsWUFBSSwyQ0FDcUIsV0FBdEIsY0FDQyxPQUFPLGVBQ1AsTUFBTSxPQUFPLGdCQUNmLE1BQU0sWUFBWSxRQUNsQjtBQUNGLDhCQUFzQixLQUNwQiwwQkFDQSw0R0FDQSxpQ0FDRjtBQUNBLGVBQU8sbUJBQW1CLEtBQUs7QUFBQSxNQUNqQztBQUFBO0FBRUYsYUFBUyx3QkFBd0IsQ0FBQyxNQUFNO0FBQ3RDLFVBQVksUUFBUjtBQUFjLGVBQU87QUFDekIsaUJBQTBCLFNBQXRCO0FBQ0YsZUFBTyxLQUFLLGFBQWEsMkJBQ3JCLE9BQ0EsS0FBSyxlQUFlLEtBQUssUUFBUTtBQUN2QyxpQkFBd0IsU0FBcEI7QUFBMEIsZUFBTztBQUNyQyxjQUFRO0FBQUEsYUFDRDtBQUNILGlCQUFPO0FBQUEsYUFDSjtBQUNILGlCQUFPO0FBQUEsYUFDSjtBQUNILGlCQUFPO0FBQUEsYUFDSjtBQUNILGlCQUFPO0FBQUEsYUFDSjtBQUNILGlCQUFPO0FBQUEsYUFDSjtBQUNILGlCQUFPO0FBQUE7QUFFWCxpQkFBd0IsU0FBcEI7QUFDRix1QkFDdUIsS0FBSyxRQUF6QixZQUNDLFFBQVEsTUFDTixtSEFDRixHQUNGLEtBQUs7QUFBQSxlQUVBO0FBQ0gsb0JBQVEsS0FBSyxlQUFlLGFBQWE7QUFBQSxlQUN0QztBQUNILG9CQUFRLEtBQUssU0FBUyxlQUFlLGFBQWE7QUFBQSxlQUMvQztBQUNILGdCQUFJLFlBQVksS0FBSztBQUNyQixtQkFBTyxLQUFLO0FBQ1oscUJBQ0ksT0FBTyxVQUFVLGVBQWUsVUFBVSxRQUFRLElBQ25ELE9BQWMsU0FBUCxLQUFjLGdCQUFnQixPQUFPLE1BQU07QUFDckQsbUJBQU87QUFBQSxlQUNKO0FBQ0gsbUJBQ0csWUFBWSxLQUFLLGVBQWUsTUFDeEIsY0FBVCxPQUNJLFlBQ0EseUJBQXlCLEtBQUssSUFBSSxLQUFLO0FBQUEsZUFFMUM7QUFDSCx3QkFBWSxLQUFLO0FBQ2pCLG1CQUFPLEtBQUs7QUFDWixnQkFBSTtBQUNGLHFCQUFPLHlCQUF5QixLQUFLLFNBQVMsQ0FBQztBQUFBLHFCQUN4QyxHQUFQO0FBQUE7QUFBQTtBQUVSLGFBQU87QUFBQTtBQUVULGFBQVMsa0JBQWtCLENBQUMsTUFBTTtBQUNoQyxvQkFBMkIsU0FBcEIsbUJBQ2lCLFNBQXRCLGNBQ0EsU0FBUyx1QkFDVCxTQUFTLHVCQUNULFNBQVMsMEJBQ1QsU0FBUyx1QkFDVCxTQUFTLDRCQUNULFNBQVMsK0JBQ1ksU0FBcEIsWUFDVSxTQUFULFNBQ0MsS0FBSyxhQUFhLG1CQUNqQixLQUFLLGFBQWEsbUJBQ2xCLEtBQUssYUFBYSxzQkFDbEIsS0FBSyxhQUFhLHVCQUNsQixLQUFLLGFBQWEsMEJBQ2xCLEtBQUssYUFBYSw0QkFDUCxLQUFLLGdCQUFYLGFBQ1AsT0FDQTtBQUFBO0FBRU4sYUFBUyxXQUFXLEdBQUc7QUFBQTtBQUN2QixhQUFTLFdBQVcsR0FBRztBQUNyQixVQUFVLGtCQUFOLEdBQXFCO0FBQ3ZCLGtCQUFVLFFBQVE7QUFDbEIsbUJBQVcsUUFBUTtBQUNuQixtQkFBVyxRQUFRO0FBQ25CLG9CQUFZLFFBQVE7QUFDcEIsb0JBQVksUUFBUTtBQUNwQiw2QkFBcUIsUUFBUTtBQUM3Qix1QkFBZSxRQUFRO0FBQ3ZCLFlBQUksUUFBUTtBQUFBLFVBQ1YsY0FBYztBQUFBLFVBQ2QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFVBQ1AsVUFBVTtBQUFBLFFBQ1o7QUFDQSxlQUFPLGlCQUFpQixTQUFTO0FBQUEsVUFDL0IsTUFBTTtBQUFBLFVBQ04sS0FBSztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sT0FBTztBQUFBLFVBQ1AsT0FBTztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFFBQ1osQ0FBQztBQUFBLE1BQ0g7QUFDQTtBQUFBO0FBRUYsYUFBUyxZQUFZLEdBQUc7QUFDdEI7QUFDQSxVQUFVLGtCQUFOLEdBQXFCO0FBQ3ZCLFlBQUksUUFBUSxFQUFFLGNBQWMsTUFBSSxZQUFZLE1BQUksVUFBVSxLQUFHO0FBQzdELGVBQU8saUJBQWlCLFNBQVM7QUFBQSxVQUMvQixLQUFLLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxPQUFPLFFBQVEsQ0FBQztBQUFBLFVBQ3pDLE1BQU0sT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLE9BQU8sU0FBUyxDQUFDO0FBQUEsVUFDM0MsTUFBTSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFBQSxVQUMzQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxPQUFPLFVBQVUsQ0FBQztBQUFBLFVBQzdDLE9BQU8sT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLE9BQU8sVUFBVSxDQUFDO0FBQUEsVUFDN0MsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxPQUFPLG1CQUFtQixDQUFDO0FBQUEsVUFDL0QsVUFBVSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsT0FBTyxhQUFhLENBQUM7QUFBQSxRQUNyRCxDQUFDO0FBQUEsTUFDSDtBQUNBLFVBQUksaUJBQ0YsUUFBUSxNQUNOLDhFQUNGO0FBQUE7QUFFSixhQUFTLDZCQUE2QixDQUFDLE1BQU07QUFDM0MsVUFBZSxXQUFOO0FBQ1AsWUFBSTtBQUNGLGdCQUFNLE1BQU07QUFBQSxpQkFDTCxHQUFQO0FBQ0EsY0FBSSxRQUFRLEVBQUUsTUFBTSxLQUFLLEVBQUUsTUFBTSxjQUFjO0FBQy9DLG1CQUFVLFNBQVMsTUFBTSxNQUFPO0FBQ2hDLG1CQUNFLEtBQUssRUFBRSxNQUFNLFFBQVEsVUFBVSxJQUMzQixtQkFDQSxLQUFLLEVBQUUsTUFBTSxRQUFRLEdBQUcsSUFDdEIsaUJBQ0E7QUFBQTtBQUVaLGFBQU8sT0FBTyxTQUFTLE9BQU87QUFBQTtBQUVoQyxhQUFTLDRCQUE0QixDQUFDLElBQUksV0FBVztBQUNuRCxXQUFLLE1BQU07QUFBUyxlQUFPO0FBQzNCLFVBQUksUUFBUSxvQkFBb0IsSUFBSSxFQUFFO0FBQ3RDLFVBQWUsVUFBTjtBQUFhLGVBQU87QUFDN0IsZ0JBQVU7QUFDVixjQUFRLE1BQU07QUFDZCxZQUFNLG9CQUF5QjtBQUMvQixVQUFJLHFCQUFxQjtBQUN6QiwyQkFBcUIscUJBQXFCO0FBQzFDLDJCQUFxQixJQUFJO0FBQ3pCLGtCQUFZO0FBQ1osVUFBSTtBQUNGLFlBQUksaUJBQWlCO0FBQUEsVUFDbkIscUNBQXNDLEdBQUc7QUFDdkMsZ0JBQUk7QUFDRixrQkFBSSxXQUFXO0FBQ2Isb0JBQUksZUFBZ0IsR0FBRztBQUNyQix3QkFBTSxNQUFNO0FBQUE7QUFFZCx1QkFBTyxlQUFlLEtBQUssV0FBVyxTQUFTO0FBQUEsa0JBQzdDLGFBQWMsR0FBRztBQUNmLDBCQUFNLE1BQU07QUFBQTtBQUFBLGdCQUVoQixDQUFDO0FBQ0QsMkJBQXdCLFlBQXBCLFlBQStCLFFBQVEsV0FBVztBQUNwRCxzQkFBSTtBQUNGLDRCQUFRLFVBQVUsTUFBTSxDQUFDLENBQUM7QUFBQSwyQkFDbkIsR0FBUDtBQUNBLHdCQUFJLFVBQVU7QUFBQTtBQUVoQiwwQkFBUSxVQUFVLElBQUksQ0FBQyxHQUFHLElBQUk7QUFBQSxnQkFDaEMsT0FBTztBQUNMLHNCQUFJO0FBQ0YseUJBQUssS0FBSztBQUFBLDJCQUNILEtBQVA7QUFDQSw4QkFBVTtBQUFBO0FBRVoscUJBQUcsS0FBSyxLQUFLLFNBQVM7QUFBQTtBQUFBLGNBRTFCLE9BQU87QUFDTCxvQkFBSTtBQUNGLHdCQUFNLE1BQU07QUFBQSx5QkFDTCxLQUFQO0FBQ0EsNEJBQVU7QUFBQTtBQUVaLGlCQUFDLE9BQU8sR0FBRyxhQUNhLEtBQUssVUFBM0IsY0FDQSxLQUFLLGNBQWUsR0FBRztBQUFBLGlCQUFFO0FBQUE7QUFBQSxxQkFFdEIsUUFBUDtBQUNBLGtCQUFJLFVBQVUsa0JBQStCLE9BQU8sVUFBM0I7QUFDdkIsdUJBQU8sQ0FBQyxPQUFPLE9BQU8sUUFBUSxLQUFLO0FBQUE7QUFFdkMsbUJBQU8sQ0FBQyxNQUFNLElBQUk7QUFBQTtBQUFBLFFBRXRCO0FBQ0EsdUJBQWUsNEJBQTRCLGNBQ3pDO0FBQ0YsWUFBSSxxQkFBcUIsT0FBTyx5QkFDOUIsZUFBZSw2QkFDZixNQUNGO0FBQ0EsOEJBQ0UsbUJBQW1CLGdCQUNuQixPQUFPLGVBQ0wsZUFBZSw2QkFDZixRQUNBLEVBQUUsT0FBTyw4QkFBOEIsQ0FDekM7QUFDRixZQUFJLHdCQUNBLGVBQWUsNEJBQTRCLEdBQzdDLGNBQWMsc0JBQXNCLElBQ3BDLGVBQWUsc0JBQXNCO0FBQ3ZDLFlBQUksZUFBZSxjQUFjO0FBQy9CLGNBQUksY0FBYyxZQUFZLE1BQU0sSUFBSSxHQUN0QyxlQUFlLGFBQWEsTUFBTSxJQUFJO0FBQ3hDLGVBQ0Usd0JBQXdCLHFCQUFxQixFQUM3QyxxQkFBcUIsWUFBWSxXQUNoQyxZQUFZLG9CQUFvQixTQUMvQiw2QkFDRjtBQUdBO0FBQ0YsZ0JBRUUsd0JBQXdCLGFBQWEsV0FDcEMsYUFBYSx1QkFBdUIsU0FDbkMsNkJBQ0Y7QUFHQTtBQUNGLGNBQ0UsdUJBQXVCLFlBQVksVUFDbkMsMEJBQTBCLGFBQWE7QUFFdkMsaUJBQ0UscUJBQXFCLFlBQVksU0FBUyxHQUN4Qyx3QkFBd0IsYUFBYSxTQUFTLEVBQ2hELEtBQUssc0JBQ0wsS0FBSyx5QkFDTCxZQUFZLHdCQUNWLGFBQWE7QUFHZjtBQUNKLGdCQUVFLEtBQUssc0JBQXNCLEtBQUssdUJBQ2hDLHNCQUFzQjtBQUV0QixnQkFDRSxZQUFZLHdCQUNaLGFBQWEsd0JBQ2I7QUFDQSxrQkFBVSx1QkFBTixLQUFrQywwQkFBTixHQUE2QjtBQUMzRDtBQUNFLHNCQUNHLHNCQUNELHlCQUNBLElBQUkseUJBQ0YsWUFBWSx3QkFDVixhQUFhLHdCQUNqQjtBQUNBLHdCQUFJLFNBQ0YsT0FDQSxZQUFZLG9CQUFvQixRQUM5QixZQUNBLE1BQ0Y7QUFDRix1QkFBRyxlQUNELE9BQU8sU0FBUyxhQUFhLE1BQzVCLFNBQVMsT0FBTyxRQUFRLGVBQWUsR0FBRyxXQUFXO0FBQ3hELDJCQUFzQixPQUF0QixjQUNFLG9CQUFvQixJQUFJLElBQUksTUFBTTtBQUNwQywyQkFBTztBQUFBLGtCQUNUO0FBQUEsdUJBQ0ssS0FBSyxzQkFBc0IsS0FBSztBQUFBLGNBQ3pDO0FBQ0E7QUFBQSxZQUNGO0FBQUEsUUFDSjtBQUFBLGdCQUNBO0FBQ0EsUUFBQyxVQUFVLE9BQ1IscUJBQXFCLElBQUksb0JBQzFCLGFBQWEsR0FDWixNQUFNLG9CQUFvQjtBQUFBO0FBRS9CLHFCQUFlLGNBQWMsS0FBSyxHQUFHLGVBQWUsR0FBRyxPQUFPLE1BQzFELDhCQUE4QixXQUFXLElBQ3pDO0FBQ0osYUFBc0IsT0FBdEIsY0FBNEIsb0JBQW9CLElBQUksSUFBSSxXQUFXO0FBQ25FLGFBQU87QUFBQTtBQUVULGFBQVMsb0NBQW9DLENBQUMsTUFBTTtBQUNsRCxVQUFZLFFBQVI7QUFBYyxlQUFPO0FBQ3pCLGlCQUEwQixTQUF0QixZQUE0QjtBQUM5QixZQUFJLFlBQVksS0FBSztBQUNyQixlQUFPLDZCQUNMLFNBQ0csY0FBYyxVQUFVLGlCQUM3QjtBQUFBLE1BQ0Y7QUFDQSxpQkFBd0IsU0FBcEI7QUFBMEIsZUFBTyw4QkFBOEIsSUFBSTtBQUN2RSxjQUFRO0FBQUEsYUFDRDtBQUNILGlCQUFPLDhCQUE4QixVQUFVO0FBQUEsYUFDNUM7QUFDSCxpQkFBTyw4QkFBOEIsY0FBYztBQUFBO0FBRXZELGlCQUF3QixTQUFwQjtBQUNGLGdCQUFRLEtBQUs7QUFBQSxlQUNOO0FBQ0gsbUJBQVEsT0FBTyw2QkFBNkIsS0FBSyxRQUFRLEtBQUUsR0FBSTtBQUFBLGVBQzVEO0FBQ0gsbUJBQU8scUNBQXFDLEtBQUssSUFBSTtBQUFBLGVBQ2xEO0FBQ0gsd0JBQVksS0FBSztBQUNqQixtQkFBTyxLQUFLO0FBQ1osZ0JBQUk7QUFDRixxQkFBTyxxQ0FBcUMsS0FBSyxTQUFTLENBQUM7QUFBQSxxQkFDcEQsR0FBUDtBQUFBO0FBQUE7QUFFUixhQUFPO0FBQUE7QUFFVCxhQUFTLFFBQVEsR0FBRztBQUNsQixVQUFJLGFBQWEscUJBQXFCO0FBQ3RDLGFBQWdCLGVBQVQsT0FBc0IsT0FBTyxXQUFXLFNBQVM7QUFBQTtBQUUxRCxhQUFTLFdBQVcsQ0FBQyxRQUFRO0FBQzNCLFVBQUksZUFBZSxLQUFLLFFBQVEsS0FBSyxHQUFHO0FBQ3RDLFlBQUksU0FBUyxPQUFPLHlCQUF5QixRQUFRLEtBQUssRUFBRTtBQUM1RCxZQUFJLFVBQVUsT0FBTztBQUFnQixpQkFBTztBQUFBLE1BQzlDO0FBQ0EsYUFBa0IsT0FBTyxRQUFiO0FBQUE7QUFFZCxhQUFTLDBCQUEwQixDQUFDLE9BQU8sYUFBYTtBQUN0RCxlQUFTLHFCQUFxQixHQUFHO0FBQy9CLHVDQUNJLDZCQUE2QixNQUMvQixRQUFRLE1BQ04sMk9BQ0EsV0FDRjtBQUFBO0FBRUosNEJBQXNCLGlCQUFpQjtBQUN2QyxhQUFPLGVBQWUsT0FBTyxPQUFPO0FBQUEsUUFDbEMsS0FBSztBQUFBLFFBQ0wsY0FBYztBQUFBLE1BQ2hCLENBQUM7QUFBQTtBQUVILGFBQVMsc0NBQXNDLEdBQUc7QUFDaEQsVUFBSSxnQkFBZ0IseUJBQXlCLEtBQUssSUFBSTtBQUN0RCw2QkFBdUIsbUJBQ25CLHVCQUF1QixpQkFBaUIsTUFDMUMsUUFBUSxNQUNOLDZJQUNGO0FBQ0Ysc0JBQWdCLEtBQUssTUFBTTtBQUMzQixhQUFrQixrQkFBTixZQUFzQixnQkFBZ0I7QUFBQTtBQUVwRCxhQUFTLFlBQVksQ0FBQyxNQUFNLEtBQUssTUFBTSxRQUFRLE9BQU8sT0FBTztBQUMzRCxhQUFPLE1BQU07QUFDYixhQUFPO0FBQUEsUUFDTCxVQUFVO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxRQUFRO0FBQUEsTUFDVjtBQUNBLE9BQXFCLFNBQU4sWUFBYSxPQUFPLFVBQW5DLE9BQ0ksT0FBTyxlQUFlLE1BQU0sT0FBTztBQUFBLFFBQ2pDLFlBQVk7QUFBQSxRQUNaLEtBQUs7QUFBQSxNQUNQLENBQUMsSUFDRCxPQUFPLGVBQWUsTUFBTSxPQUFPLEVBQUUsWUFBWSxPQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ3RFLFdBQUssU0FBUyxDQUFDO0FBQ2YsYUFBTyxlQUFlLEtBQUssUUFBUSxhQUFhO0FBQUEsUUFDOUMsY0FBYztBQUFBLFFBQ2QsWUFBWTtBQUFBLFFBQ1osVUFBVTtBQUFBLFFBQ1YsT0FBTztBQUFBLE1BQ1QsQ0FBQztBQUNELGFBQU8sZUFBZSxNQUFNLGNBQWM7QUFBQSxRQUN4QyxjQUFjO0FBQUEsUUFDZCxZQUFZO0FBQUEsUUFDWixVQUFVO0FBQUEsUUFDVixPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQ0QsYUFBTyxXQUFXLE9BQU8sT0FBTyxLQUFLLEtBQUssR0FBRyxPQUFPLE9BQU8sSUFBSTtBQUMvRCxhQUFPO0FBQUE7QUFFVCxhQUFTLGtCQUFrQixDQUFDLFlBQVksUUFBUTtBQUM5QyxlQUFTLGFBQ1AsV0FBVyxNQUNYLFFBQ0ssV0FDQSxXQUNMLFdBQVcsUUFDWCxXQUFXLEtBQ2I7QUFDQSxhQUFPLE9BQU8sWUFBWSxXQUFXLE9BQU87QUFDNUMsYUFBTztBQUFBO0FBRVQsYUFBUyxpQkFBaUIsQ0FBQyxNQUFNLFlBQVk7QUFDM0MsaUJBQ3NCLFNBQXBCLFlBQ0EsUUFDQSxLQUFLLGFBQWE7QUFFbEIsWUFBSSxZQUFZLElBQUk7QUFDbEIsbUJBQVMsSUFBSSxFQUFHLElBQUksS0FBSyxRQUFRLEtBQUs7QUFDcEMsZ0JBQUksUUFBUSxLQUFLO0FBQ2pCLDJCQUFlLEtBQUssS0FBSyxvQkFBb0IsT0FBTyxVQUFVO0FBQUEsVUFDaEU7QUFBQSxpQkFDTyxlQUFlLElBQUk7QUFDMUIsZUFBSyxXQUFXLEtBQUssT0FBTyxZQUFZO0FBQUEsaUJBRXRDLElBQUksY0FBYyxJQUFJLFVBQ0YsTUFBdEIsY0FDRSxNQUFNLEtBQUssWUFDVCxJQUFJLEVBQUUsS0FBSyxJQUFJLEdBQUksTUFBTTtBQUU3QixrQkFBUyxPQUFPLEVBQUUsS0FBSyxHQUFHO0FBQ3hCLDJCQUFlLEtBQUssS0FBSyxLQUN2QixvQkFBb0IsS0FBSyxPQUFPLFVBQVU7QUFBQTtBQUFBO0FBRXBELGFBQVMsY0FBYyxDQUFDLFFBQVE7QUFDOUIsb0JBQ3NCLFdBQXBCLFlBQ1MsV0FBVCxRQUNBLE9BQU8sYUFBYTtBQUFBO0FBR3hCLGFBQVMsbUJBQW1CLENBQUMsU0FBUyxZQUFZO0FBQ2hELFVBQ0UsUUFBUSxXQUNQLFFBQVEsT0FBTyxhQUNSLFFBQVEsT0FBaEIsU0FDRSxRQUFRLE9BQU8sWUFBWSxHQUM1QixhQUFhLDZCQUE2QixVQUFVLElBQ3BELHNCQUFzQixjQUN2QjtBQUNBLDhCQUFzQixjQUFjO0FBQ3BDLFlBQUksYUFBYTtBQUNqQixtQkFDVSxRQUFRLFVBQWhCLFFBQ0EsUUFBUSxXQUFXLFNBQVMsTUFDMUIsYUFBYSxhQUNLLFFBQVEsT0FBTyxRQUFuQyxXQUNLLGFBQWEseUJBQXlCLFFBQVEsT0FBTyxJQUFJLFdBQ3RDLFFBQVEsT0FBTyxTQUFuQyxhQUNDLGFBQWEsUUFBUSxPQUFPLE9BQ2hDLGFBQWEsaUNBQWlDLGFBQWE7QUFDOUQsWUFBSSxzQkFBc0IscUJBQXFCO0FBQy9DLDZCQUFxQiwwQkFBMkIsR0FBRztBQUNqRCxjQUFJLFFBQVEscUNBQXFDLFFBQVEsSUFBSTtBQUM3RCxrQ0FBd0IsU0FBUyxvQkFBb0IsS0FBSztBQUMxRCxpQkFBTztBQUFBO0FBRVQsZ0JBQVEsTUFDTiwySEFDQSxZQUNBLFVBQ0Y7QUFDQSw2QkFBcUIsa0JBQWtCO0FBQUEsTUFDekM7QUFBQTtBQUVGLGFBQVMsNEJBQTRCLENBQUMsWUFBWTtBQUNoRCxVQUFJLE9BQU8sSUFDVCxRQUFRLFNBQVM7QUFDbkIsZ0JBQ0csUUFBUSx5QkFBeUIsTUFBTSxJQUFJLE9BQzNDLE9BQU8scUNBQXFDLFFBQVE7QUFDdkQsZUFDSSxhQUFhLHlCQUF5QixVQUFVLE9BQy9DLE9BQ0MsZ0RBQWdELGFBQWE7QUFDbkUsYUFBTztBQUFBO0FBRVQsYUFBUyxNQUFNLENBQUMsS0FBSztBQUNuQixVQUFJLGdCQUFnQixFQUFFLEtBQUssTUFBTSxLQUFLLEtBQUs7QUFDM0MsYUFDRSxNQUNBLElBQUksUUFBUSxpQkFBa0IsQ0FBQyxPQUFPO0FBQ3BDLGVBQU8sY0FBYztBQUFBLE9BQ3RCO0FBQUE7QUFHTCxhQUFTLGFBQWEsQ0FBQyxTQUFTLE9BQU87QUFDckMsb0JBQTJCLFlBQXBCLFlBQ0ksWUFBVCxRQUNRLFFBQVEsT0FBaEIsUUFDRyx1QkFBdUIsUUFBUSxHQUFHLEdBQUcsT0FBTyxLQUFLLFFBQVEsR0FBRyxLQUM3RCxNQUFNLFNBQVMsRUFBRTtBQUFBO0FBRXZCLGFBQVMsTUFBTSxHQUFHO0FBQUE7QUFDbEIsYUFBUyxlQUFlLENBQUMsVUFBVTtBQUNqQyxjQUFRLFNBQVM7QUFBQSxhQUNWO0FBQ0gsaUJBQU8sU0FBUztBQUFBLGFBQ2I7QUFDSCxnQkFBTSxTQUFTO0FBQUE7QUFFZix5QkFDdUIsU0FBUyxXQUE3QixXQUNHLFNBQVMsS0FBSyxRQUFRLE1BQU0sS0FDMUIsU0FBUyxTQUFTLFdBQ3BCLFNBQVMsYUFDRSxDQUFDLGdCQUFnQjtBQUN4QixZQUFjLFNBQVMsV0FBdkIsY0FDSSxTQUFTLFNBQVMsYUFDbkIsU0FBUyxRQUFRO0FBQUEscUJBRWIsQ0FBQyxPQUFPO0FBQ2YsWUFBYyxTQUFTLFdBQXZCLGNBQ0ksU0FBUyxTQUFTLFlBQ25CLFNBQVMsU0FBUztBQUFBLFdBRXpCLElBQ0osU0FBUztBQUFBLGlCQUVKO0FBQ0gscUJBQU8sU0FBUztBQUFBLGlCQUNiO0FBQ0gsb0JBQU0sU0FBUztBQUFBO0FBQUE7QUFHdkIsWUFBTTtBQUFBO0FBRVIsYUFBUyxZQUFZLENBQUMsVUFBVSxPQUFPLGVBQWUsV0FBVyxVQUFVO0FBQ3pFLFVBQUksY0FBYztBQUNsQixVQUFvQixTQUFoQixlQUFzQyxTQUFkO0FBQW9CLG1CQUFXO0FBQzNELFVBQUksaUJBQWlCO0FBQ3JCLFVBQWEsYUFBVDtBQUFtQix5QkFBaUI7QUFBQTtBQUV0QyxnQkFBUTtBQUFBLGVBQ0Q7QUFBQSxlQUNBO0FBQUEsZUFDQTtBQUNILDZCQUFpQjtBQUNqQjtBQUFBLGVBQ0c7QUFDSCxvQkFBUSxTQUFTO0FBQUEsbUJBQ1Y7QUFBQSxtQkFDQTtBQUNILGlDQUFpQjtBQUNqQjtBQUFBLG1CQUNHO0FBQ0gsdUJBQ0csaUJBQWlCLFNBQVMsT0FDM0IsYUFDRSxlQUFlLFNBQVMsUUFBUSxHQUNoQyxPQUNBLGVBQ0EsV0FDQSxRQUNGO0FBQUE7QUFBQTtBQUlaLFVBQUksZ0JBQWdCO0FBQ2xCLHlCQUFpQjtBQUNqQixtQkFBVyxTQUFTLGNBQWM7QUFDbEMsWUFBSSxXQUNLLGNBQVAsS0FBbUIsTUFBTSxjQUFjLGdCQUFnQixDQUFDLElBQUk7QUFDOUQsb0JBQVksUUFBUSxLQUNkLGdCQUFnQixJQUNWLFlBQVIsU0FDRyxnQkFDQyxTQUFTLFFBQVEsNEJBQTRCLEtBQUssSUFBSSxNQUMxRCxhQUFhLFVBQVUsT0FBTyxlQUFlLFlBQWEsQ0FBQyxHQUFHO0FBQzVELGlCQUFPO0FBQUEsU0FDUixLQUNPLFlBQVIsU0FDQyxlQUFlLFFBQVEsTUFDYixTQUFTLE9BQWpCLFNBQ0csa0JBQWtCLGVBQWUsUUFBUSxTQUFTLE9BQ2xELHVCQUF1QixTQUFTLEdBQUcsSUFDdEMsZ0JBQWdCLG1CQUNmLFVBQ0EsaUJBQ1csU0FBUyxPQUFqQixRQUNBLGtCQUFrQixlQUFlLFFBQVEsU0FBUyxNQUMvQyxNQUNDLEtBQUssU0FBUyxLQUFLLFFBQ2xCLDRCQUNBLEtBQ0YsSUFBSSxPQUNSLFFBQ0osR0FDTyxjQUFQLE1BQ1Usa0JBQVIsUUFDQSxlQUFlLGNBQWMsS0FDckIsZUFBZSxPQUF2QixRQUNBLGVBQWUsV0FDZCxlQUFlLE9BQU8sY0FDdEIsY0FBYyxPQUFPLFlBQVksSUFDbkMsV0FBVyxnQkFDZCxNQUFNLEtBQUssUUFBUTtBQUN2QixlQUFPO0FBQUEsTUFDVDtBQUNBLHVCQUFpQjtBQUNqQixpQkFBa0IsY0FBUCxLQUFtQixNQUFNLFlBQVk7QUFDaEQsVUFBSSxZQUFZLFFBQVE7QUFDdEIsaUJBQVMsSUFBSSxFQUFHLElBQUksU0FBUyxRQUFRO0FBQ25DLFVBQUMsWUFBWSxTQUFTLElBQ25CLE9BQU8sV0FBVyxjQUFjLFdBQVcsQ0FBQyxHQUM1QyxrQkFBa0IsYUFDakIsV0FDQSxPQUNBLGVBQ0EsTUFDQSxRQUNGO0FBQUEsZUFDSyxJQUFJLGNBQWMsUUFBUSxVQUEwQixNQUF0QjtBQUN2QyxhQUNFLE1BQU0sU0FBUyxZQUNaLG9CQUNDLFFBQVEsS0FDTix1RkFDRixHQUNELG1CQUFtQixPQUNwQixXQUFXLEVBQUUsS0FBSyxRQUFRLEdBQzFCLElBQUksSUFDSixZQUFZLFNBQVMsS0FBSyxHQUFHO0FBRy9CLFVBQUMsWUFBWSxVQUFVLE9BQ3BCLE9BQU8sV0FBVyxjQUFjLFdBQVcsR0FBRyxHQUM5QyxrQkFBa0IsYUFDakIsV0FDQSxPQUNBLGVBQ0EsTUFDQSxRQUNGO0FBQUEsZUFDZ0IsU0FBYixVQUFtQjtBQUMxQixtQkFBMEIsU0FBUyxTQUEvQjtBQUNGLGlCQUFPLGFBQ0wsZ0JBQWdCLFFBQVEsR0FDeEIsT0FDQSxlQUNBLFdBQ0EsUUFDRjtBQUNGLGdCQUFRLE9BQU8sUUFBUTtBQUN2QixjQUFNLE1BQ0oscURBQ3lCLFVBQXRCLG9CQUNHLHVCQUF1QixPQUFPLEtBQUssUUFBUSxFQUFFLEtBQUssSUFBSSxJQUFJLE1BQzFELFNBQ0osMkVBQ0o7QUFBQSxNQUNGO0FBQ0EsYUFBTztBQUFBO0FBRVQsYUFBUyxXQUFXLENBQUMsVUFBVSxNQUFNLFNBQVM7QUFDNUMsVUFBWSxZQUFSO0FBQWtCLGVBQU87QUFDN0IsVUFBSSxTQUFTLENBQUMsR0FDWixRQUFRO0FBQ1YsbUJBQWEsVUFBVSxRQUFRLElBQUksWUFBYSxDQUFDLE9BQU87QUFDdEQsZUFBTyxLQUFLLEtBQUssU0FBUyxPQUFPLE9BQU87QUFBQSxPQUN6QztBQUNELGFBQU87QUFBQTtBQUVULGFBQVMsZUFBZSxDQUFDLFNBQVM7QUFDaEMsVUFBVyxRQUFRLFlBQWYsSUFBd0I7QUFDMUIsWUFBSSxPQUFPLFFBQVE7QUFDbkIsZUFBTyxLQUFLO0FBQ1osYUFBSyxhQUNNLENBQUMsY0FBYztBQUN0QixjQUFVLFFBQVEsWUFBZCxLQUFnQyxRQUFRLFlBQWY7QUFDM0IsWUFBQyxRQUFRLFVBQVUsR0FBSyxRQUFRLFVBQVU7QUFBQSxtQkFFckMsQ0FBQyxPQUFPO0FBQ2YsY0FBVSxRQUFRLFlBQWQsS0FBZ0MsUUFBUSxZQUFmO0FBQzNCLFlBQUMsUUFBUSxVQUFVLEdBQUssUUFBUSxVQUFVO0FBQUEsU0FFaEQ7QUFDQSxRQUFPLFFBQVEsWUFBZixPQUNJLFFBQVEsVUFBVSxHQUFLLFFBQVEsVUFBVTtBQUFBLE1BQy9DO0FBQ0EsVUFBVSxRQUFRLFlBQWQ7QUFDRixlQUNHLE9BQU8sUUFBUSxTQUNMLFNBQU4sYUFDSCxRQUFRLE1BQ04scU9BQ0EsSUFDRixHQUNGLGFBQWEsUUFDWCxRQUFRLE1BQ04seUtBQ0EsSUFDRixHQUNGLEtBQUs7QUFFVCxZQUFNLFFBQVE7QUFBQTtBQUVoQixhQUFTLGlCQUFpQixHQUFHO0FBQzNCLFVBQUksYUFBYSxxQkFBcUI7QUFDdEMsTUFBUyxlQUFULFFBQ0UsUUFBUSxNQUNOLCthQUNGO0FBQ0YsYUFBTztBQUFBO0FBRVQsYUFBUyxJQUFJLEdBQUc7QUFBQTtBQUNoQixhQUFTLFdBQVcsQ0FBQyxNQUFNO0FBQ3pCLFVBQWEsb0JBQVQ7QUFDRixZQUFJO0FBQ0YsY0FBSSxpQkFBaUIsWUFBWSxLQUFLLE9BQU8sR0FBRyxNQUFNLEdBQUcsQ0FBQztBQUMxRCw2QkFBbUIsVUFBVSxPQUFPLGdCQUFnQixLQUNsRCxRQUNBLFFBQ0YsRUFBRTtBQUFBLGlCQUNLLE1BQVA7QUFDQSxvQ0FBMkIsQ0FBQyxVQUFVO0FBQ3BDLFlBQU8sK0JBQVAsVUFDSSw2QkFBNkIsYUFDUixtQkFBdkIsZUFDRSxRQUFRLE1BQ04sME5BQ0Y7QUFDSixnQkFBSSxVQUFVLElBQUk7QUFDbEIsb0JBQVEsTUFBTSxZQUFZO0FBQzFCLG9CQUFRLE1BQU0sWUFBaUIsU0FBQztBQUFBO0FBQUE7QUFHdEMsYUFBTyxnQkFBZ0IsSUFBSTtBQUFBO0FBRTdCLGFBQVMsZUFBZSxDQUFDLFFBQVE7QUFDL0IsYUFBTyxJQUFJLE9BQU8saUJBQWdDLG1CQUF0QixhQUN4QixJQUFJLGVBQWUsTUFBTSxJQUN6QixPQUFPO0FBQUE7QUFFYixhQUFTLFdBQVcsQ0FBQyxjQUFjLG1CQUFtQjtBQUNwRCw0QkFBc0IsZ0JBQWdCLEtBQ3BDLFFBQVEsTUFDTixrSUFDRjtBQUNGLHNCQUFnQjtBQUFBO0FBRWxCLGFBQVMsNEJBQTRCLENBQUMsYUFBYSxTQUFTLFFBQVE7QUFDbEUsVUFBSSxRQUFRLHFCQUFxQjtBQUNqQyxVQUFhLFVBQVQ7QUFDRixZQUFVLE1BQU0sV0FBWjtBQUNGLGNBQUk7QUFDRiwwQkFBYyxLQUFLO0FBQ25CLGdDQUFxQixHQUFHO0FBQ3RCLHFCQUFPLDZCQUE2QixhQUFhLFNBQVMsTUFBTTtBQUFBLGFBQ2pFO0FBQ0Q7QUFBQSxtQkFDTyxPQUFQO0FBQ0EsaUNBQXFCLGFBQWEsS0FBSyxLQUFLO0FBQUE7QUFBQTtBQUUzQywrQkFBcUIsV0FBVztBQUN2QyxVQUFJLHFCQUFxQixhQUFhLFVBQ2hDLFFBQVEsZ0JBQWdCLHFCQUFxQixZQUFZLEdBQzFELHFCQUFxQixhQUFhLFNBQVMsR0FDNUMsT0FBTyxLQUFLLEtBQ1osUUFBUSxXQUFXO0FBQUE7QUFFekIsYUFBUyxhQUFhLENBQUMsT0FBTztBQUM1QixXQUFLLFlBQVk7QUFDZixxQkFBYTtBQUNiLFlBQUksSUFBSTtBQUNSLFlBQUk7QUFDRixnQkFBTyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQzVCLGdCQUFJLFdBQVcsTUFBTTtBQUNyQixlQUFHO0FBQ0QsbUNBQXFCLGdCQUFnQjtBQUNyQyxrQkFBSSxlQUFlLFNBQVMsS0FBRTtBQUM5QixrQkFBYSxpQkFBVCxNQUF1QjtBQUN6QixvQkFBSSxxQkFBcUIsZUFBZTtBQUN0Qyx3QkFBTSxLQUFLO0FBQ1gsd0JBQU0sT0FBTyxHQUFHLENBQUM7QUFDakI7QUFBQSxnQkFDRjtBQUNBLDJCQUFXO0FBQUEsY0FDYjtBQUFPO0FBQUEsWUFDVCxTQUFTO0FBQUEsVUFDWDtBQUNBLGdCQUFNLFNBQVM7QUFBQSxpQkFDUixPQUFQO0FBQ0EsZ0JBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLHFCQUFxQixhQUFhLEtBQUssS0FBSztBQUFBLGtCQUNwRTtBQUNBLHVCQUFhO0FBQUE7QUFBQSxNQUVqQjtBQUFBO0FBRUYsV0FBdUIsbUNBQXZCLHNCQUVXLCtCQUErQixnQ0FEeEMsY0FFQSwrQkFBK0IsNEJBQTRCLE1BQU0sQ0FBQztBQUNwRSxRQUFJLHFCQUFxQixPQUFPLElBQUksNEJBQTRCLEdBQzlELG9CQUFvQixPQUFPLElBQUksY0FBYyxHQUM3QyxzQkFBc0IsT0FBTyxJQUFJLGdCQUFnQixHQUNqRCx5QkFBeUIsT0FBTyxJQUFJLG1CQUFtQixHQUN2RCxzQkFBc0IsT0FBTyxJQUFJLGdCQUFnQjtBQUNuRCxXQUFPLElBQUksZ0JBQWdCO0FBQzNCLFFBQUksc0JBQXNCLE9BQU8sSUFBSSxnQkFBZ0IsR0FDbkQscUJBQXFCLE9BQU8sSUFBSSxlQUFlLEdBQy9DLHlCQUF5QixPQUFPLElBQUksbUJBQW1CLEdBQ3ZELHNCQUFzQixPQUFPLElBQUksZ0JBQWdCLEdBQ2pELDJCQUEyQixPQUFPLElBQUkscUJBQXFCLEdBQzNELGtCQUFrQixPQUFPLElBQUksWUFBWSxHQUN6QyxrQkFBa0IsT0FBTyxJQUFJLFlBQVksR0FDekMsdUJBQXVCLE9BQU8sSUFBSSxpQkFBaUIsR0FDbkQsd0JBQXdCLE9BQU8sVUFDL0IsMENBQTBDLENBQUMsR0FDM0MsdUJBQXVCO0FBQUEsTUFDckIsbUJBQW9CLEdBQUc7QUFDckIsZUFBTztBQUFBO0FBQUEsTUFFVCw0QkFBNkIsQ0FBQyxnQkFBZ0I7QUFDNUMsaUJBQVMsZ0JBQWdCLGFBQWE7QUFBQTtBQUFBLE1BRXhDLDZCQUE4QixDQUFDLGdCQUFnQjtBQUM3QyxpQkFBUyxnQkFBZ0IsY0FBYztBQUFBO0FBQUEsTUFFekMseUJBQTBCLENBQUMsZ0JBQWdCO0FBQ3pDLGlCQUFTLGdCQUFnQixVQUFVO0FBQUE7QUFBQSxJQUV2QyxHQUNBLFNBQVMsT0FBTyxRQUNoQixjQUFjLENBQUM7QUFDakIsV0FBTyxPQUFPLFdBQVc7QUFDekIsY0FBVSxVQUFVLG1CQUFtQixDQUFDO0FBQ3hDLGNBQVUsVUFBVSxtQkFBb0IsQ0FBQyxjQUFjLFVBQVU7QUFDL0QsaUJBQ3NCLGlCQUFwQixtQkFDc0IsaUJBQXRCLGNBQ1EsZ0JBQVI7QUFFQSxjQUFNLE1BQ0osd0dBQ0Y7QUFDRixXQUFLLFFBQVEsZ0JBQWdCLE1BQU0sY0FBYyxVQUFVLFVBQVU7QUFBQTtBQUV2RSxjQUFVLFVBQVUsc0JBQXVCLENBQUMsVUFBVTtBQUNwRCxXQUFLLFFBQVEsbUJBQW1CLE1BQU0sVUFBVSxhQUFhO0FBQUE7QUFFL0QsUUFBSSxpQkFBaUI7QUFBQSxNQUNqQixXQUFXO0FBQUEsUUFDVDtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsTUFDQSxjQUFjO0FBQUEsUUFDWjtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRixHQUNBO0FBQ0YsU0FBSyxVQUFVO0FBQ2IscUJBQWUsZUFBZSxNQUFNLEtBQ2xDLHlCQUF5QixRQUFRLGVBQWUsT0FBTztBQUMzRCxtQkFBZSxZQUFZLFVBQVU7QUFDckMscUJBQWlCLGNBQWMsWUFBWSxJQUFJO0FBQy9DLG1CQUFlLGNBQWM7QUFDN0IsV0FBTyxnQkFBZ0IsVUFBVSxTQUFTO0FBQzFDLG1CQUFlLHVCQUF1QjtBQUN0QyxRQUFJLGNBQWMsTUFBTSxTQUN0QiwyQkFBMkIsT0FBTyxJQUFJLHdCQUF3QixHQUM5RCx1QkFBdUI7QUFBQSxNQUNyQixHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsTUFDSCxVQUFVO0FBQUEsTUFDVixrQkFBa0I7QUFBQSxNQUNsQix5QkFBeUI7QUFBQSxNQUN6QixlQUFlO0FBQUEsTUFDZixjQUFjLENBQUM7QUFBQSxNQUNmLGlCQUFpQjtBQUFBLElBQ25CLEdBQ0EsaUJBQWlCLE9BQU8sVUFBVSxnQkFDbEMsMkJBQTJCLE9BQU8sSUFBSSx3QkFBd0IsR0FDOUQsZ0JBQWdCLEdBQ2hCLFNBQ0EsVUFDQSxVQUNBLFdBQ0EsV0FDQSxvQkFDQTtBQUNGLGdCQUFZLHFCQUFxQjtBQUNqQyxRQUFJLFFBQ0YsUUFDQSxVQUFVO0FBQ1osUUFBSSxzQkFBc0IsWUFDRixZQUF0QixhQUFnQyxVQUFVO0FBRTVDLFFBQUkseUJBQXlCLE9BQU8sSUFBSSx3QkFBd0IsR0FDOUQsNEJBQ0E7QUFDRixRQUFJLHlCQUF5QixDQUFDO0FBQzlCLFFBQUksd0JBQXdCLENBQUMsR0FDM0IsbUJBQW1CLE9BQ25CLDZCQUE2QixRQUM3QiwyQkFDd0IsZ0JBQXRCLGFBQ0ksc0JBQ1MsQ0FBQyxPQUFPO0FBQ2YsaUJBQ3NCLFdBQXBCLG1CQUNzQixPQUFPLGVBQTdCLFlBQ0E7QUFDQSxZQUFJLFFBQVEsSUFBSSxPQUFPLFdBQVcsU0FBUztBQUFBLFVBQ3pDLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLGdCQUNzQixVQUFwQixZQUNTLFVBQVQsZUFDb0IsTUFBTSxZQUExQixXQUNJLE9BQU8sTUFBTSxPQUFPLElBQ3BCLE9BQU8sS0FBSztBQUFBLFVBQ2xCO0FBQUEsUUFDRixDQUFDO0FBQ0QsYUFBSyxPQUFPLGNBQWMsS0FBSztBQUFHO0FBQUEsTUFDcEMsa0JBQ3NCLFlBQXBCLG1CQUNzQixRQUFRLFNBQTlCLFlBQ0E7QUFDQSxnQkFBUSxLQUFLLHFCQUFxQixLQUFLO0FBQ3ZDO0FBQUEsTUFDRjtBQUNBLGNBQVEsTUFBTSxLQUFLO0FBQUEsT0FFM0IsNkJBQTZCLE9BQzdCLGtCQUFrQixNQUNsQixnQkFBZ0IsR0FDaEIsb0JBQW9CLE9BQ3BCLGFBQWEsT0FDYixnQ0FDd0IsbUJBQXRCLHFCQUNhLENBQUMsVUFBVTtBQUNsQiw2QkFBd0IsR0FBRztBQUN6QixlQUFPLGVBQWUsUUFBUTtBQUFBLE9BQy9CO0FBQUEsUUFFSDtBQUNSLElBQVEsbUJBQVc7QUFBQSxNQUNqQixLQUFLO0FBQUEsTUFDTCxpQkFBa0IsQ0FBQyxVQUFVLGFBQWEsZ0JBQWdCO0FBQ3hELG9CQUNFLGtCQUNTLEdBQUc7QUFDVixzQkFBWSxNQUFNLE1BQU0sU0FBUztBQUFBLFdBRW5DLGNBQ0Y7QUFBQTtBQUFBLE1BRUYsZUFBZ0IsQ0FBQyxVQUFVO0FBQ3pCLFlBQUksSUFBSTtBQUNSLG9CQUFZLGtCQUFtQixHQUFHO0FBQ2hDO0FBQUEsU0FDRDtBQUNELGVBQU87QUFBQTtBQUFBLE1BRVQsaUJBQWtCLENBQUMsVUFBVTtBQUMzQixlQUNFLFlBQVksa0JBQW1CLENBQUMsT0FBTztBQUNyQyxpQkFBTztBQUFBLFNBQ1IsS0FBSyxDQUFDO0FBQUE7QUFBQSxNQUdYLGNBQWUsQ0FBQyxVQUFVO0FBQ3hCLGFBQUssZUFBZSxRQUFRO0FBQzFCLGdCQUFNLE1BQ0osdUVBQ0Y7QUFDRixlQUFPO0FBQUE7QUFBQSxJQUVYO0FBQ0EsSUFBUSxvQkFBWTtBQUNwQixJQUFRLG1CQUFXO0FBQ25CLElBQVEsbUJBQVc7QUFDbkIsSUFBUSx3QkFBZ0I7QUFDeEIsSUFBUSxxQkFBYTtBQUNyQixJQUFRLG1CQUFXO0FBQ25CLElBQVEsMEVBQ047QUFDRixJQUFRLHNCQUFlLENBQUMsVUFBVTtBQUNoQyxVQUFJLGVBQWUscUJBQXFCLFVBQ3RDLG9CQUFvQjtBQUN0QjtBQUNBLFVBQUksUUFBUyxxQkFBcUIsV0FDckIsaUJBQVQsT0FBd0IsZUFBZSxDQUFDLEdBQzFDLGtCQUFrQjtBQUNwQixVQUFJO0FBQ0YsWUFBSSxTQUFTLFNBQVM7QUFBQSxlQUNmLE9BQVA7QUFDQSw2QkFBcUIsYUFBYSxLQUFLLEtBQUs7QUFBQTtBQUU5QyxVQUFJLElBQUkscUJBQXFCLGFBQWE7QUFDeEMsY0FDRyxZQUFZLGNBQWMsaUJBQWlCLEdBQzNDLFdBQVcsZ0JBQWdCLHFCQUFxQixZQUFZLEdBQzVELHFCQUFxQixhQUFhLFNBQVMsR0FDNUM7QUFFSixVQUNXLFdBQVQsZUFDb0IsV0FBcEIsbUJBQ3NCLE9BQU8sU0FBN0IsWUFDQTtBQUNBLFlBQUksV0FBVztBQUNmLHVDQUFnQyxHQUFHO0FBQ2pDLDZCQUNFLHNCQUNFLG9CQUFvQixNQUN0QixRQUFRLE1BQ04sbU1BQ0Y7QUFBQSxTQUNIO0FBQ0QsZUFBTztBQUFBLFVBQ0wsY0FBZSxDQUFDLFNBQVMsUUFBUTtBQUMvQiw4QkFBa0I7QUFDbEIscUJBQVMsYUFDRSxDQUFDLGFBQWE7QUFDckIsMEJBQVksY0FBYyxpQkFBaUI7QUFDM0Msa0JBQVUsc0JBQU4sR0FBeUI7QUFDM0Isb0JBQUk7QUFDRixnQ0FBYyxLQUFLLEdBQ2pCLG9CQUFxQixHQUFHO0FBQ3RCLDJCQUFPLDZCQUNMLGFBQ0EsU0FDQSxNQUNGO0FBQUEsbUJBQ0Q7QUFBQSx5QkFDSSxTQUFQO0FBQ0EsdUNBQXFCLGFBQWEsS0FBSyxPQUFPO0FBQUE7QUFFaEQsb0JBQUksSUFBSSxxQkFBcUIsYUFBYSxRQUFRO0FBQ2hELHNCQUFJLGVBQWUsZ0JBQ2pCLHFCQUFxQixZQUN2QjtBQUNBLHVDQUFxQixhQUFhLFNBQVM7QUFDM0MseUJBQU8sWUFBWTtBQUFBLGdCQUNyQjtBQUFBLGNBQ0Y7QUFBTyx3QkFBUSxXQUFXO0FBQUEsdUJBRW5CLENBQUMsT0FBTztBQUNmLDBCQUFZLGNBQWMsaUJBQWlCO0FBQzNDLGtCQUFJLHFCQUFxQixhQUFhLFVBQ2hDLFFBQVEsZ0JBQ1IscUJBQXFCLFlBQ3ZCLEdBQ0MscUJBQXFCLGFBQWEsU0FBUyxHQUM1QyxPQUFPLEtBQUssS0FDWixPQUFPLEtBQUs7QUFBQSxhQUVwQjtBQUFBO0FBQUEsUUFFSjtBQUFBLE1BQ0Y7QUFDQSxVQUFJLHVCQUF1QjtBQUMzQixrQkFBWSxjQUFjLGlCQUFpQjtBQUMzQyxNQUFNLHNCQUFOLE1BQ0csY0FBYyxLQUFLLEdBQ2QsTUFBTSxXQUFaLEtBQ0UsK0JBQWdDLEdBQUc7QUFDakMsMkJBQ0Usc0JBQ0Usb0JBQW9CLE1BQ3RCLFFBQVEsTUFDTixxTUFDRjtBQUFBLE9BQ0gsR0FDRixxQkFBcUIsV0FBVztBQUNuQyxVQUFJLElBQUkscUJBQXFCLGFBQWE7QUFDeEMsY0FDSSxXQUFXLGdCQUFnQixxQkFBcUIsWUFBWSxHQUM3RCxxQkFBcUIsYUFBYSxTQUFTLEdBQzVDO0FBRUosYUFBTztBQUFBLFFBQ0wsY0FBZSxDQUFDLFNBQVMsUUFBUTtBQUMvQiw0QkFBa0I7QUFDbEIsVUFBTSxzQkFBTixLQUNNLHFCQUFxQixXQUFXLE9BQ2xDLG9CQUFxQixHQUFHO0FBQ3RCLG1CQUFPLDZCQUNMLHNCQUNBLFNBQ0EsTUFDRjtBQUFBLFdBQ0QsS0FDRCxRQUFRLG9CQUFvQjtBQUFBO0FBQUEsTUFFcEM7QUFBQTtBQUVGLElBQVEsd0JBQWlCLENBQUMsSUFBSTtBQUM1QixxQkFBZ0IsR0FBRztBQUNqQixlQUFPLEdBQUcsTUFBTSxNQUFNLFNBQVM7QUFBQTtBQUFBO0FBR25DLElBQVEsK0JBQXdCLENBQUMsU0FBUyxRQUFRLFVBQVU7QUFDMUQsVUFBYSxZQUFULFFBQStCLFlBQU47QUFDM0IsY0FBTSxNQUNKLDBEQUNFLFVBQ0EsR0FDSjtBQUNGLFVBQUksUUFBUSxPQUFPLENBQUMsR0FBRyxRQUFRLEtBQUssR0FDbEMsTUFBTSxRQUFRLEtBQ2QsUUFBUSxRQUFRO0FBQ2xCLFVBQVksVUFBUixNQUFnQjtBQUNsQixZQUFJO0FBQ0osV0FBRztBQUNELGNBQ0UsZUFBZSxLQUFLLFFBQVEsS0FBSyxNQUNoQywyQkFBMkIsT0FBTyx5QkFDakMsUUFDQSxLQUNGLEVBQUUsUUFDRix5QkFBeUIsZ0JBQ3pCO0FBQ0EsdUNBQTJCO0FBQzNCO0FBQUEsVUFDRjtBQUNBLHFDQUFzQyxPQUFPLFFBQWI7QUFBQSxRQUNsQztBQUNBLHFDQUE2QixRQUFRLFNBQVM7QUFDOUMsb0JBQVksTUFBTSxNQUNmLHVCQUF1QixPQUFPLEdBQUcsR0FBSSxNQUFNLEtBQUssT0FBTztBQUMxRCxhQUFLLFlBQVk7QUFDZixXQUFDLGVBQWUsS0FBSyxRQUFRLFFBQVEsS0FDekIsYUFBVixTQUNhLGFBQWIsWUFDZSxhQUFmLGNBQ1csYUFBVixTQUFpQyxPQUFPLFFBQWIsY0FDM0IsTUFBTSxZQUFZLE9BQU87QUFBQSxNQUNoQztBQUNBLFVBQUksV0FBVyxVQUFVLFNBQVM7QUFDbEMsVUFBVSxhQUFOO0FBQWdCLGNBQU0sV0FBVztBQUFBLGVBQzVCLElBQUksVUFBVTtBQUNyQixtQ0FBMkIsTUFBTSxRQUFRO0FBQ3pDLGlCQUFTLElBQUksRUFBRyxJQUFJLFVBQVU7QUFDNUIsbUNBQXlCLEtBQUssVUFBVSxJQUFJO0FBQzlDLGNBQU0sV0FBVztBQUFBLE1BQ25CO0FBQ0EsY0FBUSxhQUFhLFFBQVEsTUFBTSxLQUFVLFdBQVEsV0FBRyxPQUFPLEtBQUs7QUFDcEUsV0FBSyxNQUFNLEVBQUcsTUFBTSxVQUFVLFFBQVE7QUFDcEMsMEJBQWtCLFVBQVUsTUFBTSxNQUFNLElBQUk7QUFDOUMsYUFBTztBQUFBO0FBRVQsSUFBUSxnQ0FBeUIsQ0FBQyxjQUFjO0FBQzlDLHFCQUFlO0FBQUEsUUFDYixVQUFVO0FBQUEsUUFDVixlQUFlO0FBQUEsUUFDZixnQkFBZ0I7QUFBQSxRQUNoQixjQUFjO0FBQUEsUUFDZCxVQUFVO0FBQUEsUUFDVixVQUFVO0FBQUEsTUFDWjtBQUNBLG1CQUFhLFdBQVc7QUFDeEIsbUJBQWEsV0FBVztBQUFBLFFBQ3RCLFVBQVU7QUFBQSxRQUNWLFVBQVU7QUFBQSxNQUNaO0FBQ0EsbUJBQWEsbUJBQW1CO0FBQ2hDLG1CQUFhLG9CQUFvQjtBQUNqQyxhQUFPO0FBQUE7QUFFVCxJQUFRLGdDQUF5QixDQUFDLE1BQU0sUUFBUSxVQUFVO0FBQ3hELFVBQUksbUJBQW1CLElBQUk7QUFDekIsaUJBQVMsSUFBSSxFQUFHLElBQUksVUFBVSxRQUFRO0FBQ3BDLDRCQUFrQixVQUFVLElBQUksSUFBSTtBQUFBLFdBQ25DO0FBQ0gsWUFBSTtBQUNKLFlBQ2EsU0FBTixvQkFDZ0IsU0FBcEIsWUFDVSxTQUFULFFBQ00sT0FBTyxLQUFLLElBQUksRUFBRSxXQUF4QjtBQUVGLGVBQ0U7QUFDSixZQUFhLFNBQVQ7QUFBZSxjQUFJLGFBQWE7QUFBQTtBQUVsQyxzQkFBWSxJQUFJLElBQ1gsYUFBYSxVQUNILFNBQU4sYUFBYyxLQUFLLGFBQWEsc0JBQ2pDLGFBQ0EsT0FDQyx5QkFBeUIsS0FBSyxJQUFJLEtBQUssYUFDeEMsT0FDRCxJQUNDLHdFQUNELG9CQUFvQjtBQUM3QixnQkFBUSxNQUNOLHFKQUNBLFlBQ0EsQ0FDRjtBQUFBO0FBRUYsVUFBSTtBQUNKLFVBQUksQ0FBQztBQUNMLG1CQUFhO0FBQ2IsVUFBWSxVQUFSO0FBQ0YsYUFBSyxZQUFhLCtCQUNkLFlBQVksV0FDZCxTQUFTLFdBQ1AsNEJBQTRCLE1BQzlCLFFBQVEsS0FDTiwrS0FDRixJQUNGLFlBQVksTUFBTSxNQUNmLHVCQUF1QixPQUFPLEdBQUcsR0FBSSxhQUFhLEtBQUssT0FBTyxNQUNqRTtBQUNFLHlCQUFlLEtBQUssUUFBUSxRQUFRLEtBQ3hCLGFBQVYsU0FDYSxhQUFiLFlBQ2UsYUFBZixlQUNDLEVBQUUsWUFBWSxPQUFPO0FBQzVCLFVBQUksaUJBQWlCLFVBQVUsU0FBUztBQUN4QyxVQUFVLG1CQUFOO0FBQXNCLFVBQUUsV0FBVztBQUFBLGVBQzlCLElBQUksZ0JBQWdCO0FBQzNCLGlCQUNNLGFBQWEsTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUM3QyxLQUFLLGdCQUNMO0FBRUEscUJBQVcsTUFBTSxVQUFVLEtBQUs7QUFDbEMsZUFBTyxVQUFVLE9BQU8sT0FBTyxVQUFVO0FBQ3pDLFVBQUUsV0FBVztBQUFBLE1BQ2Y7QUFDQSxVQUFJLFFBQVEsS0FBSztBQUNmLGFBQUssWUFBYyxpQkFBaUIsS0FBSyxjQUFlO0FBQ3RELFVBQVcsRUFBRSxjQUFSLGNBQXNCLEVBQUUsWUFBWSxlQUFlO0FBQzVELG9CQUNFLDJCQUNFLFVBQ3NCLFNBQXRCLGFBQ0ksS0FBSyxlQUFlLEtBQUssUUFBUSxZQUNqQyxJQUNOO0FBQ0YsYUFBTyxhQUFhLE1BQU0sWUFBaUIsV0FBUSxXQUFHLFNBQVMsR0FBRyxDQUFDO0FBQUE7QUFFckUsSUFBUSw0QkFBcUIsR0FBRztBQUM5QixVQUFJLFlBQVksRUFBRSxTQUFTLEtBQUs7QUFDaEMsYUFBTyxLQUFLLFNBQVM7QUFDckIsYUFBTztBQUFBO0FBRVQsSUFBUSw2QkFBc0IsQ0FBQyxRQUFRO0FBQ3JDLE1BQVEsVUFBUixRQUFrQixPQUFPLGFBQWEsa0JBQ2xDLFFBQVEsTUFDTixxSUFDRixXQUNzQixXQUF0QixhQUNFLFFBQVEsTUFDTiwyREFDUyxXQUFULE9BQWtCLGdCQUFnQixNQUNwQyxJQUNNLE9BQU8sV0FBYixLQUNNLE9BQU8sV0FBYixLQUNBLFFBQVEsTUFDTixnRkFDTSxPQUFPLFdBQWIsSUFDSSw2Q0FDQSw2Q0FDTjtBQUNOLE1BQVEsVUFBUixRQUNVLE9BQU8sZ0JBQWYsUUFDQSxRQUFRLE1BQ04sdUdBQ0Y7QUFDRixVQUFJLGNBQWMsRUFBRSxVQUFVLHdCQUF3QixPQUFlLEdBQ25FO0FBQ0YsYUFBTyxlQUFlLGFBQWEsZUFBZTtBQUFBLFFBQ2hELFlBQVk7QUFBQSxRQUNaLGNBQWM7QUFBQSxRQUNkLGFBQWMsR0FBRztBQUNmLGlCQUFPO0FBQUE7QUFBQSxRQUVULGFBQWMsQ0FBQyxNQUFNO0FBQ25CLG9CQUFVO0FBQ1YsaUJBQU8sUUFDTCxPQUFPLGdCQUNOLE9BQU8sZUFBZSxRQUFRLFFBQVEsRUFBRSxPQUFPLEtBQUssQ0FBQyxHQUNyRCxPQUFPLGNBQWM7QUFBQTtBQUFBLE1BRTVCLENBQUM7QUFDRCxhQUFPO0FBQUE7QUFFVCxJQUFRLHlCQUFpQjtBQUN6QixJQUFRLHVCQUFnQixDQUFDLE1BQU07QUFDN0IsYUFBTztBQUFBLFFBQ0wsVUFBVTtBQUFBLFFBQ1YsVUFBVSxFQUFFLFNBQVMsSUFBSSxTQUFTLEtBQUs7QUFBQSxRQUN2QyxPQUFPO0FBQUEsTUFDVDtBQUFBO0FBRUYsSUFBUSx1QkFBZ0IsQ0FBQyxNQUFNLFNBQVM7QUFDdEMseUJBQW1CLElBQUksS0FDckIsUUFBUSxNQUNOLHNFQUNTLFNBQVQsT0FBZ0IsZ0JBQWdCLElBQ2xDO0FBQ0YsZ0JBQVU7QUFBQSxRQUNSLFVBQVU7QUFBQSxRQUNWO0FBQUEsUUFDQSxTQUFvQixZQUFOLFlBQWdCLE9BQU87QUFBQSxNQUN2QztBQUNBLFVBQUk7QUFDSixhQUFPLGVBQWUsU0FBUyxlQUFlO0FBQUEsUUFDNUMsWUFBWTtBQUFBLFFBQ1osY0FBYztBQUFBLFFBQ2QsYUFBYyxHQUFHO0FBQ2YsaUJBQU87QUFBQTtBQUFBLFFBRVQsYUFBYyxDQUFDLE1BQU07QUFDbkIsb0JBQVU7QUFDVixlQUFLLFFBQ0gsS0FBSyxnQkFDSixPQUFPLGVBQWUsTUFBTSxRQUFRLEVBQUUsT0FBTyxLQUFLLENBQUMsR0FDbkQsS0FBSyxjQUFjO0FBQUE7QUFBQSxNQUUxQixDQUFDO0FBQ0QsYUFBTztBQUFBO0FBRVQsSUFBUSxrQ0FBMkIsQ0FBQyxPQUFPO0FBQ3pDLFVBQUksaUJBQWlCLHFCQUFxQixHQUN4QyxvQkFBb0IsQ0FBQztBQUN2QiwyQkFBcUIsSUFBSTtBQUN6Qix3QkFBa0IsaUJBQWlCLElBQUk7QUFDdkMsVUFBSTtBQUNGLFlBQUksY0FBYyxNQUFNLEdBQ3RCLDBCQUEwQixxQkFBcUI7QUFDakQsUUFBUyw0QkFBVCxRQUNFLHdCQUF3QixtQkFBbUIsV0FBVztBQUN4RCxlQUFvQixnQkFBcEIsWUFDVyxnQkFBVCxlQUNzQixZQUFZLFNBQWxDLGNBQ0EsWUFBWSxLQUFLLE1BQU0saUJBQWlCO0FBQUEsZUFDbkMsT0FBUDtBQUNBLDBCQUFrQixLQUFLO0FBQUEsZ0JBQ3ZCO0FBQ0EsUUFBUyxtQkFBVCxRQUNFLGtCQUFrQixtQkFDaEIsUUFBUSxrQkFBa0IsZUFBZSxNQUMzQyxrQkFBa0IsZUFBZSxNQUFNLEdBQ3ZDLEtBQUssU0FDSCxRQUFRLEtBQ04scU1BQ0YsSUFDRCxxQkFBcUIsSUFBSTtBQUFBO0FBQUE7QUFHaEMsSUFBUSwyQ0FBb0MsR0FBRztBQUM3QyxhQUFPLGtCQUFrQixFQUFFLGdCQUFnQjtBQUFBO0FBRTdDLElBQVEsc0JBQWUsQ0FBQyxRQUFRO0FBQzlCLGFBQU8sa0JBQWtCLEVBQUUsSUFBSSxNQUFNO0FBQUE7QUFFdkMsSUFBUSxpQ0FBMEIsQ0FBQyxRQUFRLGNBQWMsV0FBVztBQUNsRSxhQUFPLGtCQUFrQixFQUFFLGVBQ3pCLFFBQ0EsY0FDQSxTQUNGO0FBQUE7QUFFRixJQUFRLDhCQUF1QixDQUFDLFVBQVUsTUFBTTtBQUM5QyxhQUFPLGtCQUFrQixFQUFFLFlBQVksVUFBVSxJQUFJO0FBQUE7QUFFdkQsSUFBUSw2QkFBc0IsQ0FBQyxTQUFTO0FBQ3RDLFVBQUksYUFBYSxrQkFBa0I7QUFDbkMsY0FBUSxhQUFhLHVCQUNuQixRQUFRLE1BQ04sOEhBQ0Y7QUFDRixhQUFPLFdBQVcsV0FBVyxPQUFPO0FBQUE7QUFFdEMsSUFBUSxnQ0FBeUIsQ0FBQyxPQUFPLGFBQWE7QUFDcEQsYUFBTyxrQkFBa0IsRUFBRSxjQUFjLE9BQU8sV0FBVztBQUFBO0FBRTdELElBQVEsbUNBQTRCLENBQUMsT0FBTyxjQUFjO0FBQ3hELGFBQU8sa0JBQWtCLEVBQUUsaUJBQWlCLE9BQU8sWUFBWTtBQUFBO0FBRWpFLElBQVEsNEJBQXFCLENBQUMsUUFBUSxNQUFNO0FBQzFDLGFBQU8sa0JBQWtCLEVBQUUsVUFBVSxRQUFRLElBQUk7QUFBQTtBQUVuRCxJQUFRLHdCQUFpQixHQUFHO0FBQzFCLGFBQU8sa0JBQWtCLEVBQUUsTUFBTTtBQUFBO0FBRW5DLElBQVEsc0NBQStCLENBQUMsS0FBSyxRQUFRLE1BQU07QUFDekQsYUFBTyxrQkFBa0IsRUFBRSxvQkFBb0IsS0FBSyxRQUFRLElBQUk7QUFBQTtBQUVsRSxJQUFRLHFDQUE4QixDQUFDLFFBQVEsTUFBTTtBQUNuRCxhQUFPLGtCQUFrQixFQUFFLG1CQUFtQixRQUFRLElBQUk7QUFBQTtBQUU1RCxJQUFRLGtDQUEyQixDQUFDLFFBQVEsTUFBTTtBQUNoRCxhQUFPLGtCQUFrQixFQUFFLGdCQUFnQixRQUFRLElBQUk7QUFBQTtBQUV6RCxJQUFRLDBCQUFtQixDQUFDLFFBQVEsTUFBTTtBQUN4QyxhQUFPLGtCQUFrQixFQUFFLFFBQVEsUUFBUSxJQUFJO0FBQUE7QUFFakQsSUFBUSxnQ0FBeUIsQ0FBQyxhQUFhLFNBQVM7QUFDdEQsYUFBTyxrQkFBa0IsRUFBRSxjQUFjLGFBQWEsT0FBTztBQUFBO0FBRS9ELElBQVEsNkJBQXNCLENBQUMsU0FBUyxZQUFZLE1BQU07QUFDeEQsYUFBTyxrQkFBa0IsRUFBRSxXQUFXLFNBQVMsWUFBWSxJQUFJO0FBQUE7QUFFakUsSUFBUSx5QkFBa0IsQ0FBQyxjQUFjO0FBQ3ZDLGFBQU8sa0JBQWtCLEVBQUUsT0FBTyxZQUFZO0FBQUE7QUFFaEQsSUFBUSwyQkFBb0IsQ0FBQyxjQUFjO0FBQ3pDLGFBQU8sa0JBQWtCLEVBQUUsU0FBUyxZQUFZO0FBQUE7QUFFbEQsSUFBUSx1Q0FBZ0MsQ0FDdEMsV0FDQSxhQUNBLG1CQUNBO0FBQ0EsYUFBTyxrQkFBa0IsRUFBRSxxQkFDekIsV0FDQSxhQUNBLGlCQUNGO0FBQUE7QUFFRixJQUFRLGdDQUF5QixHQUFHO0FBQ2xDLGFBQU8sa0JBQWtCLEVBQUUsY0FBYztBQUFBO0FBRTNDLElBQVEsa0JBQVU7QUFDbEIsV0FBdUIsbUNBQXZCLHNCQUVXLCtCQUErQiwrQkFEeEMsY0FFQSwrQkFBK0IsMkJBQTJCLE1BQU0sQ0FBQztBQUFBLEtBQ2xFO0FBQUE7Ozs7QUMzK0NzQjtBQUgzQixNQUFJLE9BQXVDO0FBQUEsRUFFM0MsT0FBTztBQUNMLFdBQU8sVUFBa0I7QUFBQTtBQUFBOzs7O0FDd2xCSDtBQWxsQnhCLFdBQ1ksR0FBRztBQUNYLGFBQVMsd0JBQXdCLENBQUMsTUFBTTtBQUN0QyxVQUFZLFFBQVI7QUFBYyxlQUFPO0FBQ3pCLGlCQUEwQixTQUF0QjtBQUNGLGVBQU8sS0FBSyxhQUFhLDJCQUNyQixPQUNBLEtBQUssZUFBZSxLQUFLLFFBQVE7QUFDdkMsaUJBQXdCLFNBQXBCO0FBQTBCLGVBQU87QUFDckMsY0FBUTtBQUFBLGFBQ0Q7QUFDSCxpQkFBTztBQUFBLGFBQ0o7QUFDSCxpQkFBTztBQUFBLGFBQ0o7QUFDSCxpQkFBTztBQUFBLGFBQ0o7QUFDSCxpQkFBTztBQUFBLGFBQ0o7QUFDSCxpQkFBTztBQUFBLGFBQ0o7QUFDSCxpQkFBTztBQUFBO0FBRVgsaUJBQXdCLFNBQXBCO0FBQ0YsdUJBQ3VCLEtBQUssUUFBekIsWUFDQyxRQUFRLE1BQ04sbUhBQ0YsR0FDRixLQUFLO0FBQUEsZUFFQTtBQUNILG9CQUFRLEtBQUssZUFBZSxhQUFhO0FBQUEsZUFDdEM7QUFDSCxvQkFBUSxLQUFLLFNBQVMsZUFBZSxhQUFhO0FBQUEsZUFDL0M7QUFDSCxnQkFBSSxZQUFZLEtBQUs7QUFDckIsbUJBQU8sS0FBSztBQUNaLHFCQUNJLE9BQU8sVUFBVSxlQUFlLFVBQVUsUUFBUSxJQUNuRCxPQUFjLFNBQVAsS0FBYyxnQkFBZ0IsT0FBTyxNQUFNO0FBQ3JELG1CQUFPO0FBQUEsZUFDSjtBQUNILG1CQUNHLFlBQVksS0FBSyxlQUFlLE1BQ3hCLGNBQVQsT0FDSSxZQUNBLHlCQUF5QixLQUFLLElBQUksS0FBSztBQUFBLGVBRTFDO0FBQ0gsd0JBQVksS0FBSztBQUNqQixtQkFBTyxLQUFLO0FBQ1osZ0JBQUk7QUFDRixxQkFBTyx5QkFBeUIsS0FBSyxTQUFTLENBQUM7QUFBQSxxQkFDeEMsR0FBUDtBQUFBO0FBQUE7QUFFUixhQUFPO0FBQUE7QUFFVCxhQUFTLGtCQUFrQixDQUFDLE9BQU87QUFDakMsYUFBTyxLQUFLO0FBQUE7QUFFZCxhQUFTLHNCQUFzQixDQUFDLE9BQU87QUFDckMsVUFBSTtBQUNGLDJCQUFtQixLQUFLO0FBQ3hCLFlBQUksMkJBQTJCO0FBQUEsZUFDeEIsR0FBUDtBQUNBLG1DQUEyQjtBQUFBO0FBRTdCLFVBQUksMEJBQTBCO0FBQzVCLG1DQUEyQjtBQUMzQixZQUFJLHdCQUF3Qix5QkFBeUI7QUFDckQsWUFBSSwyQ0FDcUIsV0FBdEIsY0FDQyxPQUFPLGVBQ1AsTUFBTSxPQUFPLGdCQUNmLE1BQU0sWUFBWSxRQUNsQjtBQUNGLDhCQUFzQixLQUNwQiwwQkFDQSw0R0FDQSxpQ0FDRjtBQUNBLGVBQU8sbUJBQW1CLEtBQUs7QUFBQSxNQUNqQztBQUFBO0FBRUYsYUFBUyxXQUFXLEdBQUc7QUFBQTtBQUN2QixhQUFTLFdBQVcsR0FBRztBQUNyQixVQUFVLGtCQUFOLEdBQXFCO0FBQ3ZCLGtCQUFVLFFBQVE7QUFDbEIsbUJBQVcsUUFBUTtBQUNuQixtQkFBVyxRQUFRO0FBQ25CLG9CQUFZLFFBQVE7QUFDcEIsb0JBQVksUUFBUTtBQUNwQiw2QkFBcUIsUUFBUTtBQUM3Qix1QkFBZSxRQUFRO0FBQ3ZCLFlBQUksUUFBUTtBQUFBLFVBQ1YsY0FBYztBQUFBLFVBQ2QsWUFBWTtBQUFBLFVBQ1osT0FBTztBQUFBLFVBQ1AsVUFBVTtBQUFBLFFBQ1o7QUFDQSxlQUFPLGlCQUFpQixTQUFTO0FBQUEsVUFDL0IsTUFBTTtBQUFBLFVBQ04sS0FBSztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sT0FBTztBQUFBLFVBQ1AsT0FBTztBQUFBLFVBQ1AsZ0JBQWdCO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFFBQ1osQ0FBQztBQUFBLE1BQ0g7QUFDQTtBQUFBO0FBRUYsYUFBUyxZQUFZLEdBQUc7QUFDdEI7QUFDQSxVQUFVLGtCQUFOLEdBQXFCO0FBQ3ZCLFlBQUksUUFBUSxFQUFFLGNBQWMsTUFBSSxZQUFZLE1BQUksVUFBVSxLQUFHO0FBQzdELGVBQU8saUJBQWlCLFNBQVM7QUFBQSxVQUMvQixLQUFLLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxPQUFPLFFBQVEsQ0FBQztBQUFBLFVBQ3pDLE1BQU0sT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLE9BQU8sU0FBUyxDQUFDO0FBQUEsVUFDM0MsTUFBTSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFBQSxVQUMzQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxPQUFPLFVBQVUsQ0FBQztBQUFBLFVBQzdDLE9BQU8sT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLE9BQU8sVUFBVSxDQUFDO0FBQUEsVUFDN0MsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxPQUFPLG1CQUFtQixDQUFDO0FBQUEsVUFDL0QsVUFBVSxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsT0FBTyxhQUFhLENBQUM7QUFBQSxRQUNyRCxDQUFDO0FBQUEsTUFDSDtBQUNBLFVBQUksaUJBQ0YsUUFBUSxNQUNOLDhFQUNGO0FBQUE7QUFFSixhQUFTLDZCQUE2QixDQUFDLE1BQU07QUFDM0MsVUFBZSxXQUFOO0FBQ1AsWUFBSTtBQUNGLGdCQUFNLE1BQU07QUFBQSxpQkFDTCxHQUFQO0FBQ0EsY0FBSSxRQUFRLEVBQUUsTUFBTSxLQUFLLEVBQUUsTUFBTSxjQUFjO0FBQy9DLG1CQUFVLFNBQVMsTUFBTSxNQUFPO0FBQ2hDLG1CQUNFLEtBQUssRUFBRSxNQUFNLFFBQVEsVUFBVSxJQUMzQixtQkFDQSxLQUFLLEVBQUUsTUFBTSxRQUFRLEdBQUcsSUFDdEIsaUJBQ0E7QUFBQTtBQUVaLGFBQU8sT0FBTyxTQUFTLE9BQU87QUFBQTtBQUVoQyxhQUFTLDRCQUE0QixDQUFDLElBQUksV0FBVztBQUNuRCxXQUFLLE1BQU07QUFBUyxlQUFPO0FBQzNCLFVBQUksUUFBUSxvQkFBb0IsSUFBSSxFQUFFO0FBQ3RDLFVBQWUsVUFBTjtBQUFhLGVBQU87QUFDN0IsZ0JBQVU7QUFDVixjQUFRLE1BQU07QUFDZCxZQUFNLG9CQUF5QjtBQUMvQixVQUFJLHFCQUFxQjtBQUN6QiwyQkFBcUIscUJBQXFCO0FBQzFDLDJCQUFxQixJQUFJO0FBQ3pCLGtCQUFZO0FBQ1osVUFBSTtBQUNGLFlBQUksaUJBQWlCO0FBQUEsVUFDbkIscUNBQXNDLEdBQUc7QUFDdkMsZ0JBQUk7QUFDRixrQkFBSSxXQUFXO0FBQ2Isb0JBQUksZUFBZ0IsR0FBRztBQUNyQix3QkFBTSxNQUFNO0FBQUE7QUFFZCx1QkFBTyxlQUFlLEtBQUssV0FBVyxTQUFTO0FBQUEsa0JBQzdDLGFBQWMsR0FBRztBQUNmLDBCQUFNLE1BQU07QUFBQTtBQUFBLGdCQUVoQixDQUFDO0FBQ0QsMkJBQXdCLFlBQXBCLFlBQStCLFFBQVEsV0FBVztBQUNwRCxzQkFBSTtBQUNGLDRCQUFRLFVBQVUsTUFBTSxDQUFDLENBQUM7QUFBQSwyQkFDbkIsR0FBUDtBQUNBLHdCQUFJLFVBQVU7QUFBQTtBQUVoQiwwQkFBUSxVQUFVLElBQUksQ0FBQyxHQUFHLElBQUk7QUFBQSxnQkFDaEMsT0FBTztBQUNMLHNCQUFJO0FBQ0YseUJBQUssS0FBSztBQUFBLDJCQUNILEtBQVA7QUFDQSw4QkFBVTtBQUFBO0FBRVoscUJBQUcsS0FBSyxLQUFLLFNBQVM7QUFBQTtBQUFBLGNBRTFCLE9BQU87QUFDTCxvQkFBSTtBQUNGLHdCQUFNLE1BQU07QUFBQSx5QkFDTCxLQUFQO0FBQ0EsNEJBQVU7QUFBQTtBQUVaLGlCQUFDLE9BQU8sR0FBRyxhQUNhLEtBQUssVUFBM0IsY0FDQSxLQUFLLGNBQWUsR0FBRztBQUFBLGlCQUFFO0FBQUE7QUFBQSxxQkFFdEIsUUFBUDtBQUNBLGtCQUFJLFVBQVUsa0JBQStCLE9BQU8sVUFBM0I7QUFDdkIsdUJBQU8sQ0FBQyxPQUFPLE9BQU8sUUFBUSxLQUFLO0FBQUE7QUFFdkMsbUJBQU8sQ0FBQyxNQUFNLElBQUk7QUFBQTtBQUFBLFFBRXRCO0FBQ0EsdUJBQWUsNEJBQTRCLGNBQ3pDO0FBQ0YsWUFBSSxxQkFBcUIsT0FBTyx5QkFDOUIsZUFBZSw2QkFDZixNQUNGO0FBQ0EsOEJBQ0UsbUJBQW1CLGdCQUNuQixPQUFPLGVBQ0wsZUFBZSw2QkFDZixRQUNBLEVBQUUsT0FBTyw4QkFBOEIsQ0FDekM7QUFDRixZQUFJLHdCQUNBLGVBQWUsNEJBQTRCLEdBQzdDLGNBQWMsc0JBQXNCLElBQ3BDLGVBQWUsc0JBQXNCO0FBQ3ZDLFlBQUksZUFBZSxjQUFjO0FBQy9CLGNBQUksY0FBYyxZQUFZLE1BQU0sSUFBSSxHQUN0QyxlQUFlLGFBQWEsTUFBTSxJQUFJO0FBQ3hDLGVBQ0Usd0JBQXdCLHFCQUFxQixFQUM3QyxxQkFBcUIsWUFBWSxXQUNoQyxZQUFZLG9CQUFvQixTQUMvQiw2QkFDRjtBQUdBO0FBQ0YsZ0JBRUUsd0JBQXdCLGFBQWEsV0FDcEMsYUFBYSx1QkFBdUIsU0FDbkMsNkJBQ0Y7QUFHQTtBQUNGLGNBQ0UsdUJBQXVCLFlBQVksVUFDbkMsMEJBQTBCLGFBQWE7QUFFdkMsaUJBQ0UscUJBQXFCLFlBQVksU0FBUyxHQUN4Qyx3QkFBd0IsYUFBYSxTQUFTLEVBQ2hELEtBQUssc0JBQ0wsS0FBSyx5QkFDTCxZQUFZLHdCQUNWLGFBQWE7QUFHZjtBQUNKLGdCQUVFLEtBQUssc0JBQXNCLEtBQUssdUJBQ2hDLHNCQUFzQjtBQUV0QixnQkFDRSxZQUFZLHdCQUNaLGFBQWEsd0JBQ2I7QUFDQSxrQkFBVSx1QkFBTixLQUFrQywwQkFBTixHQUE2QjtBQUMzRDtBQUNFLHNCQUNHLHNCQUNELHlCQUNBLElBQUkseUJBQ0YsWUFBWSx3QkFDVixhQUFhLHdCQUNqQjtBQUNBLHdCQUFJLFNBQ0YsT0FDQSxZQUFZLG9CQUFvQixRQUM5QixZQUNBLE1BQ0Y7QUFDRix1QkFBRyxlQUNELE9BQU8sU0FBUyxhQUFhLE1BQzVCLFNBQVMsT0FBTyxRQUFRLGVBQWUsR0FBRyxXQUFXO0FBQ3hELDJCQUFzQixPQUF0QixjQUNFLG9CQUFvQixJQUFJLElBQUksTUFBTTtBQUNwQywyQkFBTztBQUFBLGtCQUNUO0FBQUEsdUJBQ0ssS0FBSyxzQkFBc0IsS0FBSztBQUFBLGNBQ3pDO0FBQ0E7QUFBQSxZQUNGO0FBQUEsUUFDSjtBQUFBLGdCQUNBO0FBQ0EsUUFBQyxVQUFVLE9BQ1IscUJBQXFCLElBQUksb0JBQzFCLGFBQWEsR0FDWixNQUFNLG9CQUFvQjtBQUFBO0FBRS9CLHFCQUFlLGNBQWMsS0FBSyxHQUFHLGVBQWUsR0FBRyxPQUFPLE1BQzFELDhCQUE4QixXQUFXLElBQ3pDO0FBQ0osYUFBc0IsT0FBdEIsY0FBNEIsb0JBQW9CLElBQUksSUFBSSxXQUFXO0FBQ25FLGFBQU87QUFBQTtBQUVULGFBQVMsb0NBQW9DLENBQUMsTUFBTTtBQUNsRCxVQUFZLFFBQVI7QUFBYyxlQUFPO0FBQ3pCLGlCQUEwQixTQUF0QixZQUE0QjtBQUM5QixZQUFJLFlBQVksS0FBSztBQUNyQixlQUFPLDZCQUNMLFNBQ0csY0FBYyxVQUFVLGlCQUM3QjtBQUFBLE1BQ0Y7QUFDQSxpQkFBd0IsU0FBcEI7QUFBMEIsZUFBTyw4QkFBOEIsSUFBSTtBQUN2RSxjQUFRO0FBQUEsYUFDRDtBQUNILGlCQUFPLDhCQUE4QixVQUFVO0FBQUEsYUFDNUM7QUFDSCxpQkFBTyw4QkFBOEIsY0FBYztBQUFBO0FBRXZELGlCQUF3QixTQUFwQjtBQUNGLGdCQUFRLEtBQUs7QUFBQSxlQUNOO0FBQ0gsbUJBQVEsT0FBTyw2QkFBNkIsS0FBSyxRQUFRLEtBQUUsR0FBSTtBQUFBLGVBQzVEO0FBQ0gsbUJBQU8scUNBQXFDLEtBQUssSUFBSTtBQUFBLGVBQ2xEO0FBQ0gsd0JBQVksS0FBSztBQUNqQixtQkFBTyxLQUFLO0FBQ1osZ0JBQUk7QUFDRixxQkFBTyxxQ0FBcUMsS0FBSyxTQUFTLENBQUM7QUFBQSxxQkFDcEQsR0FBUDtBQUFBO0FBQUE7QUFFUixhQUFPO0FBQUE7QUFFVCxhQUFTLFFBQVEsR0FBRztBQUNsQixVQUFJLGFBQWEscUJBQXFCO0FBQ3RDLGFBQWdCLGVBQVQsT0FBc0IsT0FBTyxXQUFXLFNBQVM7QUFBQTtBQUUxRCxhQUFTLFdBQVcsQ0FBQyxRQUFRO0FBQzNCLFVBQUksZUFBZSxLQUFLLFFBQVEsS0FBSyxHQUFHO0FBQ3RDLFlBQUksU0FBUyxPQUFPLHlCQUF5QixRQUFRLEtBQUssRUFBRTtBQUM1RCxZQUFJLFVBQVUsT0FBTztBQUFnQixpQkFBTztBQUFBLE1BQzlDO0FBQ0EsYUFBa0IsT0FBTyxRQUFiO0FBQUE7QUFFZCxhQUFTLDBCQUEwQixDQUFDLE9BQU8sYUFBYTtBQUN0RCxlQUFTLHFCQUFxQixHQUFHO0FBQy9CLHVDQUNJLDZCQUE2QixNQUMvQixRQUFRLE1BQ04sMk9BQ0EsV0FDRjtBQUFBO0FBRUosNEJBQXNCLGlCQUFpQjtBQUN2QyxhQUFPLGVBQWUsT0FBTyxPQUFPO0FBQUEsUUFDbEMsS0FBSztBQUFBLFFBQ0wsY0FBYztBQUFBLE1BQ2hCLENBQUM7QUFBQTtBQUVILGFBQVMsc0NBQXNDLEdBQUc7QUFDaEQsVUFBSSxnQkFBZ0IseUJBQXlCLEtBQUssSUFBSTtBQUN0RCw2QkFBdUIsbUJBQ25CLHVCQUF1QixpQkFBaUIsTUFDMUMsUUFBUSxNQUNOLDZJQUNGO0FBQ0Ysc0JBQWdCLEtBQUssTUFBTTtBQUMzQixhQUFrQixrQkFBTixZQUFzQixnQkFBZ0I7QUFBQTtBQUVwRCxhQUFTLFlBQVksQ0FBQyxNQUFNLEtBQUssTUFBTSxRQUFRLE9BQU8sT0FBTztBQUMzRCxhQUFPLE1BQU07QUFDYixhQUFPO0FBQUEsUUFDTCxVQUFVO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxRQUFRO0FBQUEsTUFDVjtBQUNBLE9BQXFCLFNBQU4sWUFBYSxPQUFPLFVBQW5DLE9BQ0ksT0FBTyxlQUFlLE1BQU0sT0FBTztBQUFBLFFBQ2pDLFlBQVk7QUFBQSxRQUNaLEtBQUs7QUFBQSxNQUNQLENBQUMsSUFDRCxPQUFPLGVBQWUsTUFBTSxPQUFPLEVBQUUsWUFBWSxPQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ3RFLFdBQUssU0FBUyxDQUFDO0FBQ2YsYUFBTyxlQUFlLEtBQUssUUFBUSxhQUFhO0FBQUEsUUFDOUMsY0FBYztBQUFBLFFBQ2QsWUFBWTtBQUFBLFFBQ1osVUFBVTtBQUFBLFFBQ1YsT0FBTztBQUFBLE1BQ1QsQ0FBQztBQUNELGFBQU8sZUFBZSxNQUFNLGNBQWM7QUFBQSxRQUN4QyxjQUFjO0FBQUEsUUFDZCxZQUFZO0FBQUEsUUFDWixVQUFVO0FBQUEsUUFDVixPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQ0QsYUFBTyxXQUFXLE9BQU8sT0FBTyxLQUFLLEtBQUssR0FBRyxPQUFPLE9BQU8sSUFBSTtBQUMvRCxhQUFPO0FBQUE7QUFFVCxhQUFTLFVBQVUsQ0FDakIsTUFDQSxRQUNBLFVBQ0Esa0JBQ0EsUUFDQSxNQUNBO0FBQ0EsaUJBQ3NCLFNBQXBCLG1CQUNzQixTQUF0QixjQUNBLFNBQVMsdUJBQ1QsU0FBUyx1QkFDVCxTQUFTLDBCQUNULFNBQVMsdUJBQ1QsU0FBUyw0QkFDVCxTQUFTLCtCQUNZLFNBQXBCLFlBQ1UsU0FBVCxTQUNDLEtBQUssYUFBYSxtQkFDakIsS0FBSyxhQUFhLG1CQUNsQixLQUFLLGFBQWEsc0JBQ2xCLEtBQUssYUFBYSx1QkFDbEIsS0FBSyxhQUFhLDBCQUNsQixLQUFLLGFBQWEsNEJBQ1AsS0FBSyxnQkFBWCxZQUNUO0FBQ0EsWUFBSSxXQUFXLE9BQU87QUFDdEIsWUFBZSxhQUFOO0FBQ1AsY0FBSTtBQUNGLGdCQUFJLFlBQVksUUFBUSxHQUFHO0FBQ3pCLG1CQUNFLG1CQUFtQixFQUNuQixtQkFBbUIsU0FBUyxRQUM1QjtBQUVBLGtDQUFrQixTQUFTLG1CQUFtQixJQUFJO0FBQ3BELHFCQUFPLFVBQVUsT0FBTyxPQUFPLFFBQVE7QUFBQSxZQUN6QztBQUNFLHNCQUFRLE1BQ04sc0pBQ0Y7QUFBQTtBQUNDLDhCQUFrQixVQUFVLElBQUk7QUFBQSxNQUN6QyxPQUFPO0FBQ0wsbUJBQVc7QUFDWCxZQUNhLFNBQU4sb0JBQ2dCLFNBQXBCLFlBQ1UsU0FBVCxRQUNNLE9BQU8sS0FBSyxJQUFJLEVBQUUsV0FBeEI7QUFFRixzQkFDRTtBQUNKLFFBQVMsU0FBVCxPQUNLLG1CQUFtQixTQUNwQixZQUFZLElBQUksSUFDYixtQkFBbUIsVUFDVCxTQUFOLGFBQWMsS0FBSyxhQUFhLHNCQUNqQyxtQkFDQSxPQUNDLHlCQUF5QixLQUFLLElBQUksS0FBSyxhQUN4QyxPQUNELFdBQ0Msd0VBQ0QsMEJBQTBCO0FBQ25DLGdCQUFRLE1BQ04sMklBQ0Esa0JBQ0EsUUFDRjtBQUFBO0FBRUYsVUFBSSxlQUFlLEtBQUssUUFBUSxLQUFLLEdBQUc7QUFDdEMsbUJBQVcseUJBQXlCLElBQUk7QUFDeEMsWUFBSSxPQUFPLE9BQU8sS0FBSyxNQUFNLEVBQUUsZUFBZ0IsQ0FBQyxHQUFHO0FBQ2pELGlCQUFpQixNQUFWO0FBQUEsU0FDUjtBQUNELDJCQUNFLElBQUksS0FBSyxTQUNMLG9CQUFvQixLQUFLLEtBQUssU0FBUyxJQUFJLFdBQzNDO0FBQ04sOEJBQXNCLFdBQVcsc0JBQzdCLE9BQ0EsSUFBSSxLQUFLLFNBQVMsTUFBTSxLQUFLLEtBQUssU0FBUyxJQUFJLFdBQVcsTUFDNUQsUUFBUSxNQUNOLG1PQUNBLGtCQUNBLFVBQ0EsTUFDQSxRQUNGLEdBQ0Msc0JBQXNCLFdBQVcsb0JBQW9CO0FBQUEsTUFDMUQ7QUFDQSxpQkFBVztBQUNYLE1BQVcsYUFBTixjQUNGLHVCQUF1QixRQUFRLEdBQUksV0FBVyxLQUFLO0FBQ3RELGtCQUFZLE1BQU0sTUFDZix1QkFBdUIsT0FBTyxHQUFHLEdBQUksV0FBVyxLQUFLLE9BQU87QUFDL0QsVUFBSSxTQUFTLFFBQVE7QUFDbkIsbUJBQVcsQ0FBQztBQUNaLGlCQUFTLFlBQVk7QUFDbkIsVUFBVSxhQUFWLFVBQXVCLFNBQVMsWUFBWSxPQUFPO0FBQUEsTUFDdkQ7QUFBTyxtQkFBVztBQUNsQixrQkFDRSwyQkFDRSxpQkFDc0IsU0FBdEIsYUFDSSxLQUFLLGVBQWUsS0FBSyxRQUFRLFlBQ2pDLElBQ047QUFDRixhQUFPLGFBQWEsTUFBTSxVQUFVLE1BQU0sUUFBUSxTQUFTLEdBQUcsUUFBUTtBQUFBO0FBRXhFLGFBQVMsaUJBQWlCLENBQUMsTUFBTSxZQUFZO0FBQzNDLGlCQUNzQixTQUFwQixZQUNBLFFBQ0EsS0FBSyxhQUFhO0FBRWxCLFlBQUksWUFBWSxJQUFJO0FBQ2xCLG1CQUFTLElBQUksRUFBRyxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQ3BDLGdCQUFJLFFBQVEsS0FBSztBQUNqQiwyQkFBZSxLQUFLLEtBQUssb0JBQW9CLE9BQU8sVUFBVTtBQUFBLFVBQ2hFO0FBQUEsaUJBQ08sZUFBZSxJQUFJO0FBQzFCLGVBQUssV0FBVyxLQUFLLE9BQU8sWUFBWTtBQUFBLGlCQUU5QixTQUFULGVBQXFDLFNBQXBCLFdBQ2IsSUFBSSxRQUNILElBQ0MseUJBQXlCLEtBQUssMEJBQy9CLEtBQUssZUFDTixXQUEwQixNQUF0QixhQUEwQixJQUFJLGNBQ2pCLE1BQXRCLGNBQ0UsTUFBTSxLQUFLLFlBQ1QsSUFBSSxFQUFFLEtBQUssSUFBSSxHQUFJLE1BQU07QUFFN0Isa0JBQVMsT0FBTyxFQUFFLEtBQUssR0FBRztBQUN4QiwyQkFBZSxLQUFLLEtBQUssS0FDdkIsb0JBQW9CLEtBQUssT0FBTyxVQUFVO0FBQUE7QUFBQTtBQUVwRCxhQUFTLGNBQWMsQ0FBQyxRQUFRO0FBQzlCLG9CQUNzQixXQUFwQixZQUNTLFdBQVQsUUFDQSxPQUFPLGFBQWE7QUFBQTtBQUd4QixhQUFTLG1CQUFtQixDQUFDLFNBQVMsWUFBWTtBQUNoRCxVQUNFLFFBQVEsV0FDUCxRQUFRLE9BQU8sYUFDUixRQUFRLE9BQWhCLFNBQ0UsUUFBUSxPQUFPLFlBQVksR0FDNUIsYUFBYSw2QkFBNkIsVUFBVSxJQUNwRCxzQkFBc0IsY0FDdkI7QUFDQSw4QkFBc0IsY0FBYztBQUNwQyxZQUFJLGFBQWE7QUFDakIsbUJBQ1UsUUFBUSxVQUFoQixRQUNBLFFBQVEsV0FBVyxTQUFTLE1BQzFCLGFBQWEsYUFDSyxRQUFRLE9BQU8sUUFBbkMsV0FDSyxhQUFhLHlCQUF5QixRQUFRLE9BQU8sSUFBSSxXQUN0QyxRQUFRLE9BQU8sU0FBbkMsYUFDQyxhQUFhLFFBQVEsT0FBTyxPQUNoQyxhQUFhLGlDQUFpQyxhQUFhO0FBQzlELFlBQUksc0JBQXNCLHFCQUFxQjtBQUMvQyw2QkFBcUIsMEJBQTJCLEdBQUc7QUFDakQsY0FBSSxRQUFRLHFDQUFxQyxRQUFRLElBQUk7QUFDN0Qsa0NBQXdCLFNBQVMsb0JBQW9CLEtBQUs7QUFDMUQsaUJBQU87QUFBQTtBQUVULGdCQUFRLE1BQ04sMkhBQ0EsWUFDQSxVQUNGO0FBQ0EsNkJBQXFCLGtCQUFrQjtBQUFBLE1BQ3pDO0FBQUE7QUFFRixhQUFTLDRCQUE0QixDQUFDLFlBQVk7QUFDaEQsVUFBSSxPQUFPLElBQ1QsUUFBUSxTQUFTO0FBQ25CLGdCQUNHLFFBQVEseUJBQXlCLE1BQU0sSUFBSSxPQUMzQyxPQUFPLHFDQUFxQyxRQUFRO0FBQ3ZELGVBQ0ksYUFBYSx5QkFBeUIsVUFBVSxPQUMvQyxPQUNDLGdEQUFnRCxhQUFhO0FBQ25FLGFBQU87QUFBQTtBQUVULFFBQ0UscUJBQXFCLE9BQU8sSUFBSSw0QkFBNEIsR0FDNUQsb0JBQW9CLE9BQU8sSUFBSSxjQUFjLEdBQzdDLHNCQUFzQixPQUFPLElBQUksZ0JBQWdCLEdBQ2pELHlCQUF5QixPQUFPLElBQUksbUJBQW1CLEdBQ3ZELHNCQUFzQixPQUFPLElBQUksZ0JBQWdCO0FBQ25ELFdBQU8sSUFBSSxnQkFBZ0I7QUFDM0IsUUFBSSxzQkFBc0IsT0FBTyxJQUFJLGdCQUFnQixHQUNuRCxxQkFBcUIsT0FBTyxJQUFJLGVBQWUsR0FDL0MseUJBQXlCLE9BQU8sSUFBSSxtQkFBbUIsR0FDdkQsc0JBQXNCLE9BQU8sSUFBSSxnQkFBZ0IsR0FDakQsMkJBQTJCLE9BQU8sSUFBSSxxQkFBcUIsR0FDM0Qsa0JBQWtCLE9BQU8sSUFBSSxZQUFZLEdBQ3pDLGtCQUFrQixPQUFPLElBQUksWUFBWSxHQUN6Qyx1QkFBdUIsT0FBTyxJQUFJLGlCQUFpQixHQUNuRCx3QkFBd0IsT0FBTyxVQUMvQiwyQkFBMkIsT0FBTyxJQUFJLHdCQUF3QixHQUM5RCx1QkFDUSx1RUFDUixpQkFBaUIsT0FBTyxVQUFVLGdCQUNsQyxTQUFTLE9BQU8sUUFDaEIsMkJBQTJCLE9BQU8sSUFBSSx3QkFBd0IsR0FDOUQsY0FBYyxNQUFNLFNBQ3BCLGdCQUFnQixHQUNoQixTQUNBLFVBQ0EsVUFDQSxXQUNBLFdBQ0Esb0JBQ0E7QUFDRixnQkFBWSxxQkFBcUI7QUFDakMsUUFBSSxRQUNGLFFBQ0EsVUFBVTtBQUNaLFFBQUksc0JBQXNCLFlBQ0YsWUFBdEIsYUFBZ0MsVUFBVTtBQUU1QyxRQUFJLHlCQUF5QixPQUFPLElBQUksd0JBQXdCLEdBQzlEO0FBQ0YsUUFBSSx5QkFBeUIsQ0FBQztBQUM5QixRQUFJLHdCQUF3QixDQUFDLEdBQzNCLHdCQUF3QixDQUFDO0FBQzNCLElBQVEsbUJBQVc7QUFDbkIsSUFBUSx5QkFBa0IsQ0FDeEIsTUFDQSxRQUNBLFVBQ0Esa0JBQ0EsUUFDQSxNQUNBO0FBQ0EsYUFBTyxXQUFXLE1BQU0sUUFBUSxVQUFVLGtCQUFrQixRQUFRLElBQUk7QUFBQTtBQUFBLEtBRXpFO0FBQUE7Ozs7QUM5b0JzQjtBQUgzQixNQUFJLE9BQXVDO0FBQUEsRUFFM0MsT0FBTztBQUNMLFdBQU8sVUFBa0I7QUFBQTtBQUFBOzs7QUNKM0I7O0FBREE7QUFZQSxJQUFNLGVBQWUsMkJBQTRDLFNBQVM7QUFFbkUsU0FBUyxhQUFhLEdBQUcsWUFBd0Q7QUFDdEYsU0FBTyxTQUFTLGNBQWMsc0JBQVMsS0FBSztBQUM1QyxTQUFPLE1BQU0sV0FBVyxzQkFBb0IsT0FBTztBQUduRCx5QkFBVSxNQUFNO0FBQ2QsZUFBVyxJQUFJO0FBQUEsS0FDZCxDQUFDLENBQUM7QUFHTCx5QkFBVSxNQUFNO0FBQ2QsU0FBSztBQUFTO0FBRWQsVUFBTSxTQUFTLGFBQWEsUUFBUSxPQUFPO0FBRTNDLFFBQUksUUFBUTtBQUNWLGNBQVEsTUFBTTtBQUVkO0FBQUEsSUFDRjtBQUVBLFVBQU0sY0FBYyxPQUFPLFdBQVcsOEJBQThCLEVBQUU7QUFFdEUsWUFBUSxjQUFjLFNBQVMsT0FBTztBQUFBLEtBQ3JDLENBQUMsT0FBTyxDQUFDO0FBR1oseUJBQVUsTUFBTTtBQUNkLFNBQUs7QUFBUztBQUNkLGFBQVMsZ0JBQWdCLGFBQWEsY0FBYyxJQUFJO0FBQ3hELGlCQUFhLFFBQVEsU0FBUyxJQUFJO0FBQUEsS0FDakMsQ0FBQyxNQUFNLE9BQU8sQ0FBQztBQUVsQixRQUFNLGNBQWMsTUFBWSxRQUFRLENBQUMsU0FBVSxTQUFTLFVBQVUsU0FBUyxPQUFRO0FBR3ZGLE9BQUssU0FBUztBQUNaLDJCQUFPO0FBQUE7QUFBQSx3Q0FBSztBQUFBLEVBQ2Q7QUFFQSx5QkFBTyx1QkFBaUUsYUFBYSxVQUE5RTtBQUFBLElBQXVCLE9BQU8sRUFBRSxNQUFNLFlBQVk7QUFBQSxJQUFsRDtBQUFBLHNDQUFpRTtBQUFBO0FBR25FLFNBQVMsUUFBUSxHQUFxQjtBQUMzQyxRQUFNLFVBQVUsd0JBQVcsWUFBWTtBQUV2QyxPQUFLLFNBQVM7QUFDWixVQUFNLElBQUksTUFBTSw0Q0FBNEM7QUFBQSxFQUM5RDtBQUVBLFNBQU87QUFBQTsiLAogICJkZWJ1Z0lkIjogIjcxQ0ZCRDUxN0RBQTQ1RTY2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|
|
38
|
+
//# debugId=B2E16B1B1C4F855164756E2164756E21
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL2Nsc3gvZGlzdC9jbHN4Lm1qcyIsICIuLi9zcmMvY29tcG9uZW50cy9CdXR0b24vQnV0dG9uLnRzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJmdW5jdGlvbiByKGUpe3ZhciB0LGYsbj1cIlwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSluKz1lO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUpaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG89ZS5sZW5ndGg7Zm9yKHQ9MDt0PG87dCsrKWVbdF0mJihmPXIoZVt0XSkpJiYobiYmKG4rPVwiIFwiKSxuKz1mKX1lbHNlIGZvcihmIGluIGUpZVtmXSYmKG4mJihuKz1cIiBcIiksbis9Zik7cmV0dXJuIG59ZXhwb3J0IGZ1bmN0aW9uIGNsc3goKXtmb3IodmFyIGUsdCxmPTAsbj1cIlwiLG89YXJndW1lbnRzLmxlbmd0aDtmPG87ZisrKShlPWFyZ3VtZW50c1tmXSkmJih0PXIoZSkpJiYobiYmKG4rPVwiIFwiKSxuKz10KTtyZXR1cm4gbn1leHBvcnQgZGVmYXVsdCBjbHN4OyIsCiAgICAiaW1wb3J0IHsgY2xzeCB9IGZyb20gXCJjbHN4XCI7XG5pbXBvcnQgeyB0eXBlIEJ1dHRvbkhUTUxBdHRyaWJ1dGVzLCB0eXBlIEpTWCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQnV0dG9uUHJvcHMgPSBCdXR0b25IVE1MQXR0cmlidXRlczxIVE1MQnV0dG9uRWxlbWVudD47XG5cbmV4cG9ydCBmdW5jdGlvbiBCdXR0b24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IEJ1dHRvblByb3BzKTogSlNYLkVsZW1lbnQge1xuICAvLyBAdHMtaWdub3JlIC0gQ1NTIG1vZHVsZSB0eXBlcyBhcmUgY29ycmVjdCBhdCBydW50aW1lXG4gIHJldHVybiA8YnV0dG9uIGNsYXNzTmFtZT17Y2xzeChzdHlsZXNbXCJidXR0b25cIl0sIGNsYXNzTmFtZSl9IHR5cGU9XCJidXR0b25cIiB7Li4ucHJvcHN9IC8+O1xufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLFNBQVMsQ0FBQyxDQUFDLEdBQUU7QUFBQyxNQUFJLEdBQUUsR0FBRSxJQUFFO0FBQUcsYUFBb0IsS0FBakIsbUJBQXFDLEtBQWpCO0FBQW1CLFNBQUc7QUFBQSxrQkFBMkIsS0FBakI7QUFBbUIsUUFBRyxNQUFNLFFBQVEsQ0FBQyxHQUFFO0FBQUMsVUFBSSxJQUFFLEVBQUU7QUFBTyxXQUFJLElBQUUsRUFBRSxJQUFFLEdBQUU7QUFBSSxVQUFFLE9BQUssSUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFLLE1BQUksS0FBRyxNQUFLLEtBQUc7QUFBQSxJQUFFO0FBQU0sV0FBSSxLQUFLO0FBQUUsVUFBRSxPQUFLLE1BQUksS0FBRyxNQUFLLEtBQUc7QUFBRyxTQUFPO0FBQUE7QUFBUyxTQUFTLElBQUksR0FBRTtBQUFDLFdBQVEsR0FBRSxHQUFFLElBQUUsR0FBRSxJQUFFLElBQUcsSUFBRSxVQUFVLE9BQU8sSUFBRSxHQUFFO0FBQUksS0FBQyxJQUFFLFVBQVUsUUFBTSxJQUFFLEVBQUUsQ0FBQyxPQUFLLE1BQUksS0FBRyxNQUFLLEtBQUc7QUFBRyxTQUFPO0FBQUE7Ozs7Ozs7QUNPdlcsU0FBUyxNQUFNLEdBQUcsY0FBYyxTQUFtQztBQUV4RSx5QkFBTyxnQkFBQyxVQUFEO0FBQUEsSUFBUSxXQUFXLEtBQUssc0JBQU8sV0FBVyxTQUFTO0FBQUEsSUFBRyxNQUFLO0FBQUEsT0FBYTtBQUFBLEtBQXhFLGlDQUErRTtBQUFBOyIsCiAgImRlYnVnSWQiOiAiQjJFMTZCMUIxQzRGODU1MTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|