@posiwise/common-services 0.1.40 → 0.1.41
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/esm2022/lib/ab-test.service.mjs +1 -1
- package/esm2022/lib/ahoy.service.mjs +1 -1
- package/esm2022/lib/auth.service.mjs +1 -1
- package/esm2022/lib/base-http.service.mjs +2 -2
- package/esm2022/lib/common-services.interface.mjs +1 -1
- package/esm2022/lib/common.service.mjs +1 -1
- package/esm2022/lib/custom-preloading.service.mjs +1 -1
- package/esm2022/lib/dashboard.service.mjs +1 -1
- package/esm2022/lib/data.service.mjs +1 -1
- package/esm2022/lib/date-formatter.service.mjs +9 -4
- package/esm2022/lib/effects/user.effects.mjs +1 -1
- package/esm2022/lib/geo.service.mjs +1 -1
- package/esm2022/lib/google-analytics.service.mjs +13 -9
- package/esm2022/lib/group.service.mjs +1 -1
- package/esm2022/lib/hopscotch.service.mjs +1 -1
- package/esm2022/lib/link-loader.service.mjs +1 -1
- package/esm2022/lib/mailbox.service.mjs +1 -1
- package/esm2022/lib/notification.service.mjs +1 -1
- package/esm2022/lib/permission.service.mjs +4 -4
- package/esm2022/lib/product.service.mjs +1 -1
- package/esm2022/lib/profile.service.mjs +1 -1
- package/esm2022/lib/qualification.service.mjs +1 -1
- package/esm2022/lib/script-loader.service.mjs +5 -4
- package/esm2022/lib/sentry.service.mjs +127 -108
- package/esm2022/lib/socket.service.mjs +1 -1
- package/esm2022/lib/subscription.service.mjs +4 -4
- package/esm2022/lib/tag.service.mjs +1 -1
- package/esm2022/lib/tips.service.mjs +1 -1
- package/esm2022/lib/toast.service.mjs +1 -1
- package/esm2022/lib/user.service.mjs +1 -1
- package/esm2022/lib/validation.service.mjs +2 -2
- package/fesm2022/posiwise-common-services.mjs +158 -129
- package/fesm2022/posiwise-common-services.mjs.map +1 -1
- package/lib/ab-test.service.d.ts +1 -1
- package/lib/ahoy.service.d.ts +3 -3
- package/lib/auth.service.d.ts +10 -10
- package/lib/base-http.service.d.ts +1 -1
- package/lib/common-services.interface.d.ts +2 -3
- package/lib/common.service.d.ts +1 -1
- package/lib/custom-preloading.service.d.ts +1 -1
- package/lib/dashboard.service.d.ts +1 -1
- package/lib/data.service.d.ts +1 -1
- package/lib/effects/user.effects.d.ts +2 -2
- package/lib/geo.service.d.ts +3 -3
- package/lib/google-analytics.service.d.ts +4 -3
- package/lib/group.service.d.ts +5 -5
- package/lib/hopscotch.service.d.ts +3 -3
- package/lib/link-loader.service.d.ts +2 -2
- package/lib/mailbox.service.d.ts +3 -3
- package/lib/notification.service.d.ts +4 -4
- package/lib/permission.service.d.ts +1 -1
- package/lib/product.service.d.ts +2 -2
- package/lib/profile.service.d.ts +4 -4
- package/lib/qualification.service.d.ts +2 -2
- package/lib/script-loader.service.d.ts +1 -1
- package/lib/sentry.service.d.ts +9 -1
- package/lib/socket.service.d.ts +2 -2
- package/lib/subscription.service.d.ts +1 -1
- package/lib/tag.service.d.ts +1 -1
- package/lib/tips.service.d.ts +1 -1
- package/lib/toast.service.d.ts +1 -1
- package/lib/user.service.d.ts +4 -4
- package/lib/validation.service.d.ts +1 -1
- package/package.json +1 -1
|
@@ -47,13 +47,13 @@ export class SentryErrorHandler {
|
|
|
47
47
|
tracesSampleRate: 0.1,
|
|
48
48
|
beforeSend(event, hint) {
|
|
49
49
|
// Check if the event is of type CloseEvent and ignore it
|
|
50
|
-
if (event
|
|
50
|
+
if (event?.exception?.values) {
|
|
51
51
|
event.exception.values = event.exception.values.filter(value => {
|
|
52
52
|
// Update the condition based on the actual structure of the event
|
|
53
53
|
return !(value.type === 'CloseEvent' || value.value.includes('CloseEvent'));
|
|
54
54
|
});
|
|
55
55
|
}
|
|
56
|
-
if (event
|
|
56
|
+
if (event?.exception?.values) {
|
|
57
57
|
event.exception.values = event.exception.values.filter(value => {
|
|
58
58
|
// Check for the specific error message and ignore it
|
|
59
59
|
return !(value.type === 'Error' &&
|
|
@@ -61,43 +61,41 @@ export class SentryErrorHandler {
|
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
63
|
// originates from vendor.js file
|
|
64
|
-
if (event
|
|
64
|
+
if (event?.exception?.values) {
|
|
65
65
|
const isJsonParsingError = event.exception.values.some(value => {
|
|
66
66
|
return (value.type === 'SyntaxError' &&
|
|
67
|
-
value
|
|
68
|
-
value.value.includes("expected ':' after property name in"));
|
|
67
|
+
value?.value?.includes("expected ':' after property name in"));
|
|
69
68
|
});
|
|
70
69
|
if (isJsonParsingError) {
|
|
71
70
|
return null;
|
|
72
71
|
}
|
|
73
72
|
}
|
|
74
73
|
// Check if the event is a ChunkLoadError and ignore it (it could be because of poor network)
|
|
75
|
-
if (event
|
|
74
|
+
if (event?.exception?.values) {
|
|
76
75
|
event.exception.values = event.exception.values.filter(value => {
|
|
77
76
|
return !(value.type === 'ChunkLoadError' ||
|
|
78
77
|
value.value.includes('ChunkLoadError: Loading chunk'));
|
|
79
78
|
});
|
|
80
79
|
}
|
|
81
80
|
// Check if the event is a script loading error and ignore it
|
|
82
|
-
if (event
|
|
81
|
+
if (event?.exception?.values) {
|
|
83
82
|
event.exception.values = event.exception.values.filter(value => {
|
|
84
83
|
return !(value.type === 'Error' &&
|
|
85
84
|
value.value.includes('Could not load "util"'));
|
|
86
85
|
});
|
|
87
86
|
}
|
|
88
87
|
// Check if the event is a timeout error and ignore it
|
|
89
|
-
if (event
|
|
88
|
+
if (event?.exception?.values) {
|
|
90
89
|
event.exception.values = event.exception.values.filter(value => {
|
|
91
90
|
return !(value.type === 'Error' &&
|
|
92
91
|
value.value.includes('Error loading plotly.js library from'));
|
|
93
92
|
});
|
|
94
93
|
}
|
|
95
94
|
// Check if the event is related to cross-origin frame access
|
|
96
|
-
if (event
|
|
95
|
+
if (event?.exception?.values) {
|
|
97
96
|
const isCrossOriginFrameError = event.exception.values.some(value => {
|
|
98
97
|
return (value.type === 'SecurityError' &&
|
|
99
|
-
value
|
|
100
|
-
value.value.includes("Failed to read a named property 'navigator' from 'Window': Blocked a frame with origin"));
|
|
98
|
+
value?.value?.includes("Failed to read a named property 'navigator' from 'Window': Blocked a frame with origin"));
|
|
101
99
|
});
|
|
102
100
|
if (isCrossOriginFrameError) {
|
|
103
101
|
// Exclude cross-origin frame errors from being reported to Sentry
|
|
@@ -105,7 +103,7 @@ export class SentryErrorHandler {
|
|
|
105
103
|
}
|
|
106
104
|
}
|
|
107
105
|
// Check if the event has an exception and values array
|
|
108
|
-
if (event
|
|
106
|
+
if (event?.exception?.values) {
|
|
109
107
|
// Filter out events generated by TryCatch and GlobalHandlers
|
|
110
108
|
event.exception.values = event.exception.values.filter(value => {
|
|
111
109
|
const mechanism = value.mechanism;
|
|
@@ -200,125 +198,146 @@ export class SentryErrorHandler {
|
|
|
200
198
|
return;
|
|
201
199
|
}
|
|
202
200
|
}
|
|
201
|
+
this.handleExceptionError(incomingError);
|
|
202
|
+
}
|
|
203
|
+
handleExceptionError(incomingError) {
|
|
203
204
|
if (incomingError) {
|
|
204
205
|
let error = incomingError; // The actual error to log
|
|
205
206
|
while ('originalError' in error && error.originalError instanceof Error) {
|
|
206
207
|
this.logToConsole(error);
|
|
207
208
|
error = error.originalError;
|
|
208
209
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
return; // Don't rethrow the error
|
|
219
|
-
}
|
|
220
|
-
let { message } = error;
|
|
221
|
-
if (!message) {
|
|
222
|
-
try {
|
|
223
|
-
message = JSON.stringify(error);
|
|
224
|
-
}
|
|
225
|
-
catch (e) {
|
|
226
|
-
message = error.toString();
|
|
227
|
-
console.log(e);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
error = new Error(`Got HttpErrorResponse on URL ${error.url} message: ${message}`);
|
|
210
|
+
this.extractOriginalError(error, incomingError);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
extractOriginalError(error, incomingError) {
|
|
214
|
+
// Exclude specific errors
|
|
215
|
+
if (error instanceof HttpErrorResponse) {
|
|
216
|
+
if (error.status === StatusCodes.NOT_FOUND) {
|
|
217
|
+
console.warn('Excluded 404 error:', error);
|
|
218
|
+
return; // Skip logging to Sentry
|
|
231
219
|
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
220
|
+
if (error.status === 0 && error.statusText === 'Unknown Error') {
|
|
221
|
+
// Handle network-related errors differently or suppress them
|
|
222
|
+
console.warn('Network-related error:', error);
|
|
223
|
+
return; // Don't rethrow the error
|
|
224
|
+
}
|
|
225
|
+
let { message } = error;
|
|
226
|
+
if (!message) {
|
|
227
|
+
try {
|
|
228
|
+
message = JSON.stringify(error);
|
|
229
|
+
}
|
|
230
|
+
catch (e) {
|
|
231
|
+
message = error.toString();
|
|
232
|
+
console.log(e);
|
|
238
233
|
}
|
|
239
|
-
// Exclude reporting 401 errors
|
|
240
234
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
235
|
+
error = new Error(`Got HttpErrorResponse on URL ${error.url} message: ${message}`);
|
|
236
|
+
}
|
|
237
|
+
this.handleNonHttpErrorResponse(error);
|
|
238
|
+
// Ensure all errors have a proper message
|
|
239
|
+
this.errorMessageFormatter(error);
|
|
240
|
+
// Existing Sentry initialization logic
|
|
241
|
+
this.sentryIntilization(error, incomingError);
|
|
242
|
+
}
|
|
243
|
+
handleNonHttpErrorResponse(error) {
|
|
244
|
+
if (typeof error === 'object' && 'message' in error) {
|
|
245
|
+
if (error instanceof HttpErrorResponse) {
|
|
246
|
+
if (error.status !== StatusCodes.UNAUTHORIZED) {
|
|
247
|
+
error = new Error(`Object captured as exception: ${error}`); // NOSONAR
|
|
247
248
|
}
|
|
248
|
-
const errorDetails = error
|
|
249
|
-
? JSON.stringify(error)
|
|
250
|
-
: 'No more additional error info';
|
|
251
|
-
const enhancedErrorMessage = `${defaultMessage} | Original error detail: ${errorDetails}`;
|
|
252
|
-
error = new Error(enhancedErrorMessage);
|
|
253
249
|
}
|
|
254
|
-
//
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
this.logToConsole(error);
|
|
264
|
-
});
|
|
250
|
+
// Exclude reporting 401 errors
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
errorMessageFormatter(error) {
|
|
254
|
+
if (!(error instanceof Error) || !error.message) {
|
|
255
|
+
const defaultMessage = 'Captured an unlabeled event';
|
|
256
|
+
if (error && 'isTrusted' in error) {
|
|
257
|
+
console.warn('Ignored isTrusted browser event:', error);
|
|
258
|
+
return;
|
|
265
259
|
}
|
|
266
|
-
|
|
260
|
+
const errorDetails = error ? JSON.stringify(error) : 'No more additional error info';
|
|
261
|
+
const enhancedErrorMessage = `${defaultMessage} | Original error detail: ${errorDetails}`;
|
|
262
|
+
error = new Error(enhancedErrorMessage); // NOSONAR
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
sentryIntilization(error, incomingError) {
|
|
266
|
+
if (!SentryErrorHandler.sentryInitialized) {
|
|
267
|
+
this.initializeSentryAsync()
|
|
268
|
+
.then(() => {
|
|
267
269
|
this.logToSentry(error);
|
|
268
|
-
|
|
270
|
+
throw incomingError;
|
|
271
|
+
})
|
|
272
|
+
.catch(err => {
|
|
273
|
+
console.error('Error initializing Sentry:', err);
|
|
274
|
+
this.logToConsole(error);
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
this.logToSentry(error);
|
|
269
279
|
}
|
|
270
280
|
}
|
|
271
281
|
logToSentry(error) {
|
|
272
282
|
try {
|
|
273
283
|
const user = SentryErrorHandler.user;
|
|
274
|
-
|
|
275
|
-
// Appends user details for sentry log
|
|
276
|
-
scope.setUser({
|
|
277
|
-
...user
|
|
278
|
-
});
|
|
279
|
-
// Ensure error is properly formatted
|
|
280
|
-
if (error instanceof Error && error.message) {
|
|
281
|
-
Sentry.captureException(error);
|
|
282
|
-
}
|
|
283
|
-
else if (typeof error === 'object' && error !== null) {
|
|
284
|
-
// If it's an object but not a standard Error, attempt to log its properties safely
|
|
285
|
-
let errorMessage = 'Captured non-standard error with no message';
|
|
286
|
-
// Try to extract any message-like property safely
|
|
287
|
-
if ('message' in error) {
|
|
288
|
-
errorMessage = `Error message: ${error.message}`;
|
|
289
|
-
}
|
|
290
|
-
else {
|
|
291
|
-
// Attempt to capture key properties safely
|
|
292
|
-
try {
|
|
293
|
-
errorMessage = `Captured non-standard error: ${JSON.stringify(error, Object.getOwnPropertyNames(error))}`;
|
|
294
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
295
|
-
}
|
|
296
|
-
catch (jsonError) {
|
|
297
|
-
errorMessage = `Captured non-standard error with serialization issue: ${jsonError.message}`;
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
// Create a new Error object with the enhanced message
|
|
301
|
-
const errorObject = new Error(errorMessage);
|
|
302
|
-
Sentry.captureException(errorObject);
|
|
303
|
-
}
|
|
304
|
-
else {
|
|
305
|
-
const defaultMessage = 'Captured an unlabeled event';
|
|
306
|
-
if (error && 'isTrusted' in error) {
|
|
307
|
-
console.warn('Ignored isTrusted browser event:', error);
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
|
-
const errorDetails = error ? JSON.stringify(error) : 'No additional error info';
|
|
311
|
-
const enhancedErrorMessage = `${defaultMessage} | Original error details: ${errorDetails}`;
|
|
312
|
-
const enhancedError = new Error(enhancedErrorMessage);
|
|
313
|
-
Sentry.captureException(enhancedError);
|
|
314
|
-
}
|
|
315
|
-
});
|
|
284
|
+
this.scopeWithSentry(error, user);
|
|
316
285
|
}
|
|
317
286
|
catch (e) {
|
|
318
287
|
console.error('Unable to log the error to Sentry. An exception occurred:');
|
|
319
288
|
console.error(e);
|
|
320
289
|
}
|
|
321
290
|
}
|
|
291
|
+
scopeWithSentry(error, user) {
|
|
292
|
+
Sentry.withScope(scope => {
|
|
293
|
+
// Appends user details for sentry log
|
|
294
|
+
scope.setUser({
|
|
295
|
+
...user
|
|
296
|
+
});
|
|
297
|
+
// Ensure error is properly formatted
|
|
298
|
+
if (error instanceof Error && error.message) {
|
|
299
|
+
Sentry.captureException(error);
|
|
300
|
+
}
|
|
301
|
+
else if (typeof error === 'object' && error !== null) {
|
|
302
|
+
this.handleNonStandardError(error);
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
this.handleUnlabeledEvent(error);
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
handleNonStandardError(error) {
|
|
310
|
+
// If it's an object but not a standard Error, attempt to log its properties safely
|
|
311
|
+
let errorMessage = 'Captured non-standard error with no message'; // NOSONAR
|
|
312
|
+
// Try to extract any message-like property safely
|
|
313
|
+
if ('message' in error) {
|
|
314
|
+
errorMessage = `Error message: ${String(error.message)}`;
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
// Attempt to capture key properties safely
|
|
318
|
+
try {
|
|
319
|
+
errorMessage = `Captured non-standard error: ${JSON.stringify(error, Object.getOwnPropertyNames(error))}`;
|
|
320
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
321
|
+
}
|
|
322
|
+
catch (jsonError) {
|
|
323
|
+
errorMessage = `Captured non-standard error with serialization issue: ${jsonError.message}`;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// Create a new Error object with the enhanced message
|
|
327
|
+
const errorObject = new Error(errorMessage);
|
|
328
|
+
Sentry.captureException(errorObject);
|
|
329
|
+
}
|
|
330
|
+
handleUnlabeledEvent(error) {
|
|
331
|
+
const defaultMessage = 'Captured an unlabeled event';
|
|
332
|
+
if (error && 'isTrusted' in error) {
|
|
333
|
+
console.warn('Ignored isTrusted browser event:', error);
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
const errorDetails = error ? JSON.stringify(error) : 'No additional error info';
|
|
337
|
+
const enhancedErrorMessage = `${defaultMessage} | Original error details: ${errorDetails}`;
|
|
338
|
+
const enhancedError = new Error(enhancedErrorMessage);
|
|
339
|
+
Sentry.captureException(enhancedError);
|
|
340
|
+
}
|
|
322
341
|
logToConsole(error) {
|
|
323
342
|
// Attempt to print in the console
|
|
324
343
|
try {
|
|
@@ -343,4 +362,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
343
362
|
providedIn: 'root'
|
|
344
363
|
}]
|
|
345
364
|
}], ctorParameters: () => [{ type: i1.AppConfigService }] });
|
|
346
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VudHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi1zZXJ2aWNlcy9zcmMvbGliL3NlbnRyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBZ0IsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sS0FBSyxNQUFNLE1BQU0scUJBQXFCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQUtoRSxNQUFNLE9BQU8sa0JBQWtCO2FBRVosc0JBQWlCLEdBQUcsS0FBSyxBQUFSLENBQVM7SUFFekMsWUFBb0IsZ0JBQWtDO1FBQWxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFBRyxDQUFDO0lBRWxELEtBQUssQ0FBQyxxQkFBcUI7UUFDL0IsSUFBSSxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZDLHdEQUF3RDtZQUN4RCxPQUFPO1FBQ1gsQ0FBQztRQUNELE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTVCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFakQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDN0MsSUFBSSxHQUFHLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxD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RUFBRSxDQUFDLENBQUM7Z0JBRXZFLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMvRCxDQUFDLENBQ0osQ0FBQztRQUNOLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1QsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNMLENBQUM7K0dBOVhRLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmYsTUFBTTs7NEZBRVQsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBTZW50cnkgZnJvbSAnQHNlbnRyeS9hbmd1bGFyLWl2eSc7XG5cbmltcG9ydCB7IFN0YXR1c0NvZGVzIH0gZnJvbSAnaHR0cC1zdGF0dXMtY29kZXMnO1xuaW1wb3J0IHsgZnJvbUVycm9yIH0gZnJvbSAnc3RhY2t0cmFjZS1qcyc7XG5cbmltcG9ydCB7IFVzZXIgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1jb25maWctc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2VudHJ5RXJyb3JIYW5kbGVyIGltcGxlbWVudHMgRXJyb3JIYW5kbGVyIHtcbiAgICBwcml2YXRlIHN0YXRpYyB1c2VyOiBQYXJ0aWFsPFVzZXI+O1xuICAgIHByaXZhdGUgc3RhdGljIHNlbnRyeUluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UpIHt9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVTZW50cnlBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKFNlbnRyeUVycm9ySGFuZGxlci5zZW50cnlJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgLy8gU2VudHJ5IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIG5vIG5lZWQgdG8gZG8gaXQgYWdhaW5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBTZW50cnkuY3JlYXRlRXJyb3JIYW5kbGVyKCk7XG5cbiAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5nZXRTZW50cnlDb25maWdBc3luYygpO1xuXG4gICAgICAgIHRoaXMuYXBwQ29uZmlnU2VydmljZS5hcHBDb25maWckLnN1YnNjcmliZShlbnYgPT4ge1xuICAgICAgICAgICAgaWYgKGVudj8uaW50ZWdyYXRpb25zPy5zZW50cnlfY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgU2VudHJ5LmluaXQoeyAuLi5jb25maWcsIC4uLmVudi5pbnRlZ3JhdGlvbnMuc2VudHJ5X2NvbmZpZyB9KTtcbiAgICAgICAgICAgICAgICBTZW50cnlFcnJvckhhbmRsZXIuc2VudHJ5SW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gQWRkIGEgZ2xvYmFsIGxpc3RlbmVyIGZvciB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zXG4gICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsIChldmVudDogUHJvbWlzZVJlamVjdGlvbkV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUHJvbWlzZVJlamVjdGlvbihldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBBZGQgYSBnbG9iYWwgbGlzdGVuZXIgZm9yIHVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbnNcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsIChldmVudDogUHJvbWlzZVJlamVjdGlvbkV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVByb21pc2VSZWplY3Rpb24oZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldFNlbnRyeUNvbmZpZ0FzeW5jKCk6IFByb21pc2U8U2VudHJ5LkJyb3dzZXJPcHRpb25zPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudmlyb25tZW50ID1cbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaG9zdD8uaW5jbHVkZXMoJ2RldicpIHx8IHdpbmRvdy5sb2NhdGlvbi5ob3N0Py5pbmNsdWRlcygnbG9jYWxob3N0JylcbiAgICAgICAgICAgICAgICAgICAgPyAnZGV2ZWxvcG1lbnQnXG4gICAgICAgICAgICAgICAgICAgIDogJ3Byb2R1Y3Rpb24nO1xuXG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkUGF0aHMgPSBbJyddO1xuICAgICAgICAgICAgY29uc3QgaGVhbHRoQ2hlY2tQYXRocyA9IFsnL3BpbmcnXTtcbiAgICAgICAgICAgIGNvbnN0IG9uZVBlcmNlbnRJZ25vcmVkUGF0aHMgPSBbJyddO1xuICAgICAgICAgICAgY29uc3QgZml2ZVBlcmNlbnRJZ25vcmVkUGF0aHMgPSBbJyddO1xuXG4gICAgICAgICAgICBjb25zdCBjb25maWc6IFNlbnRyeS5Ccm93c2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBkc246IG51bGwsXG4gICAgICAgICAgICAgICAgdHJhY2VzU2FtcGxlUmF0ZTogMC4xLFxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQoZXZlbnQsIGhpbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50IGlzIG9mIHR5cGUgQ2xvc2VFdmVudCBhbmQgaWdub3JlIGl0XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudCAmJiBldmVudC5leGNlcHRpb24gJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMuZmlsdGVyKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGNvbmRpdGlvbiBiYXNlZCBvbiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBvZiB0aGUgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudHlwZSA9PT0gJ0Nsb3NlRXZlbnQnIHx8IHZhbHVlLnZhbHVlLmluY2x1ZGVzKCdDbG9zZUV2ZW50JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQgJiYgZXZlbnQuZXhjZXB0aW9uICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgPSBldmVudC5leGNlcHRpb24udmFsdWVzLmZpbHRlcih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHRoZSBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIGFuZCBpZ25vcmUgaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudHlwZSA9PT0gJ0Vycm9yJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZS5pbmNsdWRlcygnUmVzaXplT2JzZXJ2ZXIgbG9vcCBjb21wbGV0ZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmF0ZXMgZnJvbSB2ZW5kb3IuanMgZmlsZVxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQgJiYgZXZlbnQuZXhjZXB0aW9uICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzSnNvblBhcnNpbmdFcnJvciA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMuc29tZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudHlwZSA9PT0gJ1N5bnRheEVycm9yJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZS5pbmNsdWRlcyhcImV4cGVjdGVkICc6JyBhZnRlciBwcm9wZXJ0eSBuYW1lIGluXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNKc29uUGFyc2luZ0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZXZlbnQgaXMgYSBDaHVua0xvYWRFcnJvciBhbmQgaWdub3JlIGl0IChpdCBjb3VsZCBiZSBiZWNhdXNlIG9mIHBvb3IgbmV0d29yaylcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmV4Y2VwdGlvbiAmJiBldmVudC5leGNlcHRpb24udmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5leGNlcHRpb24udmFsdWVzID0gZXZlbnQuZXhjZXB0aW9uLnZhbHVlcy5maWx0ZXIodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS50eXBlID09PSAnQ2h1bmtMb2FkRXJyb3InIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlLmluY2x1ZGVzKCdDaHVua0xvYWRFcnJvcjogTG9hZGluZyBjaHVuaycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50IGlzIGEgc2NyaXB0IGxvYWRpbmcgZXJyb3IgYW5kIGlnbm9yZSBpdFxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQgJiYgZXZlbnQuZXhjZXB0aW9uICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgPSBldmVudC5leGNlcHRpb24udmFsdWVzLmZpbHRlcih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnR5cGUgPT09ICdFcnJvcicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudmFsdWUuaW5jbHVkZXMoJ0NvdWxkIG5vdCBsb2FkIFwidXRpbFwiJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZXZlbnQgaXMgYSB0aW1lb3V0IGVycm9yIGFuZCBpZ25vcmUgaXRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmV4Y2VwdGlvbiAmJiBldmVudC5leGNlcHRpb24udmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5leGNlcHRpb24udmFsdWVzID0gZXZlbnQuZXhjZXB0aW9uLnZhbHVlcy5maWx0ZXIodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS50eXBlID09PSAnRXJyb3InICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlLmluY2x1ZGVzKCdFcnJvciBsb2FkaW5nIHBsb3RseS5qcyBsaWJyYXJ5IGZyb20nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBldmVudCBpcyByZWxhdGVkIHRvIGNyb3NzLW9yaWdpbiBmcmFtZSBhY2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmV4Y2VwdGlvbiAmJiBldmVudC5leGNlcHRpb24udmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0Nyb3NzT3JpZ2luRnJhbWVFcnJvciA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMuc29tZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudHlwZSA9PT0gJ1NlY3VyaXR5RXJyb3InICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJGYWlsZWQgdG8gcmVhZCBhIG5hbWVkIHByb3BlcnR5ICduYXZpZ2F0b3InIGZyb20gJ1dpbmRvdyc6IEJsb2NrZWQgYSBmcmFtZSB3aXRoIG9yaWdpblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Nyb3NzT3JpZ2luRnJhbWVFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4Y2x1ZGUgY3Jvc3Mtb3JpZ2luIGZyYW1lIGVycm9ycyBmcm9tIGJlaW5nIHJlcG9ydGVkIHRvIFNlbnRyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50IGhhcyBhbiBleGNlcHRpb24gYW5kIHZhbHVlcyBhcnJheVxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQgJiYgZXZlbnQuZXhjZXB0aW9uICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgZXZlbnRzIGdlbmVyYXRlZCBieSBUcnlDYXRjaCBhbmQgR2xvYmFsSGFuZGxlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgPSBldmVudC5leGNlcHRpb24udmFsdWVzLmZpbHRlcih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVjaGFuaXNtID0gdmFsdWUubWVjaGFuaXNtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWNoYW5pc20gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lY2hhbmlzbS50eXBlID09PSAnVHJ5Q2F0Y2gnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWNoYW5pc20udHlwZSA9PT0gJ0dsb2JhbEhhbmRsZXJzJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgbm9uLWVycm9yIGV4Y2VwdGlvblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc05vbkVycm9yRXhjZXB0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Py5leGNlcHRpb24/LnZhbHVlcz8uWzBdPy52YWx1ZT8uc3RhcnRzV2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTm9uLUVycm9yIGV4Y2VwdGlvbiBjYXB0dXJlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChoaW50Py5vcmlnaW5hbEV4Y2VwdGlvbiBhcyBFcnJvcik/Lm1lc3NhZ2U/LnN0YXJ0c1dpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05vbi1FcnJvciBleGNlcHRpb24gY2FwdHVyZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05vbkVycm9yRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGlnbm9yZSB0aG9zZSBraW5kcyBvZiBlcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGVueVVybHM6IFsvZHJpZnQuKlxcLmpzL2ksIC9hbmFseXRpY3MuKlxcLmpzL2ksIC9wb2x5ZmlsbHMuKlxcLmpzL2ksIC92ZW5kb3IuKlxcLmpzL2ldLFxuICAgICAgICAgICAgICAgIGludGVncmF0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYW5kIGNvbmZpZ3VyZXMgdGhlIFRyYWNpbmcgaW50ZWdyYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIGF1dG9tYXRpY2FsbHkgaW5zdHJ1bWVudHMgeW91ciBhcHBsaWNhdGlvbiB0byBtb25pdG9yIGl0c1xuICAgICAgICAgICAgICAgICAgICAvLyBwZXJmb3JtYW5jZSwgaW5jbHVkaW5nIGN1c3RvbSBBbmd1bGFyIHJvdXRpbmcgaW5zdHJ1bWVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIG5ldyBTZW50cnkuQnJvd3NlclRyYWNpbmcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGluZ0luc3RydW1lbnRhdGlvbjogU2VudHJ5LnJvdXRpbmdJbnN0cnVtZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHRyYWNlc1NhbXBsZXI6IHNhbXBsaW5nQ29udGV4dCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4YW1pbmUgcHJvdmlkZWQgY29udGV4dCBkYXRhIChpbmNsdWRpbmcgcGFyZW50IGRlY2lzaW9uLCBpZiBhbnkpIGFsb25nXG4gICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYW55dGhpbmcgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UgdG8gY29tcHV0ZSB0aGUgc2FtcGxlIHJhdGUgb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gc2FtcGxpbmcgZGVjaXNpb24gZm9yIHRoaXMgdHJhbnNhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aG5hbWUgPSBzYW1wbGluZ0NvbnRleHQubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZ25vcmVkUGF0aHMuaW5jbHVkZXMocGF0aG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoZWFsdGhDaGVja1BhdGhzLmluY2x1ZGVzKHBhdGhuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmVyeSBsb3cgcmF0ZSBhcyB0aGVzZSBhcmUgZXh0cmVtZWx5IGZyZXF1ZW50IGFuZCBwcmV0dHkgdXNlbGVzc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDAxO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9uZVBlcmNlbnRJZ25vcmVkUGF0aHMuaW5jbHVkZXMocGF0aG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMC4wMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaXZlUGVyY2VudElnbm9yZWRQYXRocy5pbmNsdWRlcyhwYXRobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjA1O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBzYW1wbGUgcmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW52aXJvbm1lbnQsXG5cbiAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgU2VydmVyIEVycm9ycy4gV2UgaGF2ZSB0byBkZWZpbmUgaGVyZSBzaW5jZSBBbmd1bGFyXG4gICAgICAgICAgICAgICAgLy8gaHR0cCBjbGllbnQgdXNlcyBzZXRUaW1lb3V0IHRvIGRldGVjdCBodHRwIGNhbGwgcHJvZ3Jlc3MuXG4gICAgICAgICAgICAgICAgLy8gQW5kIHdoZW4gdGhlIGNhbGwgZmFpbHMsIGl0IHRocm93cyBhbiBleGNlcHRpb24gaW5zaWRlIHRoYXQgdGltZW91dFxuICAgICAgICAgICAgICAgIC8vIHRoYXQgYnViYmxlcyB1cCBoaWdoZXIgdG8gdGhlIG1haW4gQW5ndWxhcidzIGVycm9yIGhhbmRsZXIuXG4gICAgICAgICAgICAgICAgaWdub3JlRXJyb3JzOiBbXG4gICAgICAgICAgICAgICAgICAgICd0b3AuR0xPQkFMUycsXG4gICAgICAgICAgICAgICAgICAgICdSZXNpemVPYnNlcnZlciBsb29wIGNvbXBsZXRlZCB3aXRoIHVuZGVsaXZlcmVkIG5vdGlmaWNhdGlvbnMnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc29sdmUoY29uZmlnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGluaXRpYWxpemVVc2VyKHVzZXI6IFBhcnRpYWw8VXNlcj4pIHtcbiAgICAgICAgU2VudHJ5RXJyb3JIYW5kbGVyLnVzZXIgPSB7XG4gICAgICAgICAgICBpZDogdXNlcj8uaWQsXG4gICAgICAgICAgICBuYW1lOiB1c2VyPy5maXJzdF9uYW1lLFxuICAgICAgICAgICAgZW1haWw6IHVzZXI/LmVtYWlsXG4gICAgICAgIH0gYXMgUGFydGlhbDxVc2VyPjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVByb21pc2VSZWplY3Rpb24oZXZlbnQ6IFByb21pc2VSZWplY3Rpb25FdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlcnJvciA9IGV2ZW50LnJlYXNvbjtcbiAgICAgICAgdGhpcy5sb2dUb1NlbnRyeShlcnJvcik7XG4gICAgICAgIHRoaXMubG9nVG9Db25zb2xlKGVycm9yKTtcbiAgICB9XG5cbiAgICBoYW5kbGVFcnJvcihpbmNvbWluZ0Vycm9yOiBIdHRwRXJyb3JSZXNwb25zZSB8IEVycm9yKSB7XG4gICAgICAgIC8vIGluIGNhc2Ugb2YgNDAxLCByZXR1cm4gbm8gZXhjZXB0aW9uXG4gICAgICAgIGlmIChpbmNvbWluZ0Vycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBpbmNvbWluZ0Vycm9yLnN0YXR1cyA9PT0gU3RhdHVzQ29kZXMuVU5BVVRIT1JJWkVEIHx8XG4gICAgICAgICAgICAgICAgaW5jb21pbmdFcnJvci5zdGF0dXMgPT09IFN0YXR1c0NvZGVzLkZPUkJJRERFTlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIDQwMSBlcnJvciAoZS5nLiwgcmVkaXJlY3QgdG8gbG9naW4gcGFnZSlcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmF1dGhvcml6ZWQgcmVxdWVzdDonLCBpbmNvbWluZ0Vycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbmNvbWluZ0Vycm9yLnN0YXR1cyA9PT0gU3RhdHVzQ29kZXMuVU5QUk9DRVNTQUJMRV9FTlRJVFkpIHtcbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgNDIyIGVycm9yXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVU5QUk9DRVNTQUJMRV9FTlRJVFkgcmVxdWVzdDonLCBpbmNvbWluZ0Vycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbmNvbWluZ0Vycm9yLnN0YXR1cyA9PT0gNDMzKSB7XG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIDQzMyBlcnJvclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ292ZXIgbWVzc2FnZSBxdW90YTonLCBpbmNvbWluZ0Vycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5jb21pbmdFcnJvcikge1xuICAgICAgICAgICAgbGV0IGVycm9yID0gaW5jb21pbmdFcnJvcjsgLy8gVGhlIGFjdHVhbCBlcnJvciB0byBsb2dcbiAgICAgICAgICAgIHdoaWxlICgnb3JpZ2luYWxFcnJvcicgaW4gZXJyb3IgJiYgZXJyb3Iub3JpZ2luYWxFcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dUb0NvbnNvbGUoZXJyb3IpO1xuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyb3Iub3JpZ2luYWxFcnJvcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRXhjbHVkZSBzcGVjaWZpYyBlcnJvcnNcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gU3RhdHVzQ29kZXMuTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRXhjbHVkZWQgNDA0IGVycm9yOicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBTa2lwIGxvZ2dpbmcgdG8gU2VudHJ5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDAgJiYgZXJyb3Iuc3RhdHVzVGV4dCA9PT0gJ1Vua25vd24gRXJyb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBuZXR3b3JrLXJlbGF0ZWQgZXJyb3JzIGRpZmZlcmVudGx5IG9yIHN1cHByZXNzIHRoZW1cbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdOZXR3b3JrLXJlbGF0ZWQgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIERvbid0IHJldGhyb3cgdGhlIGVycm9yXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCB7IG1lc3NhZ2UgfSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGVycm9yLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihgR290IEh0dHBFcnJvclJlc3BvbnNlIG9uIFVSTCAke2Vycm9yLnVybH0gbWVzc2FnZTogJHttZXNzYWdlfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBIYW5kbGUgbm9uLUh0dHBFcnJvclJlc3BvbnNlIGNhc2VzXG4gICAgICAgICAgICBpZiAodHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiAnbWVzc2FnZScgaW4gZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzICE9PSBTdGF0dXNDb2Rlcy5VTkFVVEhPUklaRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKGBPYmplY3QgY2FwdHVyZWQgYXMgZXhjZXB0aW9uOiAke2Vycm9yfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEV4Y2x1ZGUgcmVwb3J0aW5nIDQwMSBlcnJvcnNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRW5zdXJlIGFsbCBlcnJvcnMgaGF2ZSBhIHByb3BlciBtZXNzYWdlXG4gICAgICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB8fCAhZXJyb3IubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRNZXNzYWdlID0gJ0NhcHR1cmVkIGFuIHVubGFiZWxlZCBldmVudCc7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgJiYgJ2lzVHJ1c3RlZCcgaW4gZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdJZ25vcmVkIGlzVHJ1c3RlZCBicm93c2VyIGV2ZW50OicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yRGV0YWlscyA9IGVycm9yXG4gICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIDogJ05vIG1vcmUgYWRkaXRpb25hbCBlcnJvciBpbmZvJztcbiAgICAgICAgICAgICAgICBjb25zdCBlbmhhbmNlZEVycm9yTWVzc2FnZSA9IGAke2RlZmF1bHRNZXNzYWdlfSB8IE9yaWdpbmFsIGVycm9yIGRldGFpbDogJHtlcnJvckRldGFpbHN9YDtcbiAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihlbmhhbmNlZEVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEV4aXN0aW5nIFNlbnRyeSBpbml0aWFsaXphdGlvbiBsb2dpY1xuICAgICAgICAgICAgaWYgKCFTZW50cnlFcnJvckhhbmRsZXIuc2VudHJ5SW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVTZW50cnlBc3luYygpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nVG9TZW50cnkoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgaW5jb21pbmdFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgU2VudHJ5OicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ1RvQ29uc29sZShlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1RvU2VudHJ5KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbG9nVG9TZW50cnkoZXJyb3I6IEVycm9yKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB1c2VyID0gU2VudHJ5RXJyb3JIYW5kbGVyLnVzZXIgYXMgRXJyb3I7XG4gICAgICAgICAgICBTZW50cnkud2l0aFNjb3BlKHNjb3BlID0+IHtcbiAgICAgICAgICAgICAgICAvLyBBcHBlbmRzIHVzZXIgZGV0YWlscyBmb3Igc2VudHJ5IGxvZ1xuICAgICAgICAgICAgICAgIHNjb3BlLnNldFVzZXIoe1xuICAgICAgICAgICAgICAgICAgICAuLi51c2VyXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBFbnN1cmUgZXJyb3IgaXMgcHJvcGVybHkgZm9ybWF0dGVkXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICBTZW50cnkuY2FwdHVyZUV4Y2VwdGlvbihlcnJvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmIGVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgYW4gb2JqZWN0IGJ1dCBub3QgYSBzdGFuZGFyZCBFcnJvciwgYXR0ZW1wdCB0byBsb2cgaXRzIHByb3BlcnRpZXMgc2FmZWx5XG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnQ2FwdHVyZWQgbm9uLXN0YW5kYXJkIGVycm9yIHdpdGggbm8gbWVzc2FnZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGV4dHJhY3QgYW55IG1lc3NhZ2UtbGlrZSBwcm9wZXJ0eSBzYWZlbHlcbiAgICAgICAgICAgICAgICAgICAgaWYgKCdtZXNzYWdlJyBpbiBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYEVycm9yIG1lc3NhZ2U6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGNhcHR1cmUga2V5IHByb3BlcnRpZXMgc2FmZWx5XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBDYXB0dXJlZCBub24tc3RhbmRhcmQgZXJyb3I6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3IsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKSl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoanNvbkVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgQ2FwdHVyZWQgbm9uLXN0YW5kYXJkIGVycm9yIHdpdGggc2VyaWFsaXphdGlvbiBpc3N1ZTogJHtqc29uRXJyb3IubWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IEVycm9yIG9iamVjdCB3aXRoIHRoZSBlbmhhbmNlZCBtZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yT2JqZWN0ID0gbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIFNlbnRyeS5jYXB0dXJlRXhjZXB0aW9uKGVycm9yT2JqZWN0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0TWVzc2FnZSA9ICdDYXB0dXJlZCBhbiB1bmxhYmVsZWQgZXZlbnQnO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAmJiAnaXNUcnVzdGVkJyBpbiBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdJZ25vcmVkIGlzVHJ1c3RlZCBicm93c2VyIGV2ZW50OicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yRGV0YWlscyA9IGVycm9yID8gSlNPTi5zdHJpbmdpZnkoZXJyb3IpIDogJ05vIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuaGFuY2VkRXJyb3JNZXNzYWdlID0gYCR7ZGVmYXVsdE1lc3NhZ2V9IHwgT3JpZ2luYWwgZXJyb3IgZGV0YWlsczogJHtlcnJvckRldGFpbHN9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5oYW5jZWRFcnJvciA9IG5ldyBFcnJvcihlbmhhbmNlZEVycm9yTWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oZW5oYW5jZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byBsb2cgdGhlIGVycm9yIHRvIFNlbnRyeS4gQW4gZXhjZXB0aW9uIG9jY3VycmVkOicpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIGxvZ1RvQ29uc29sZShlcnJvcjogRXJyb3IpIHtcbiAgICAgICAgLy8gQXR0ZW1wdCB0byBwcmludCBpbiB0aGUgY29uc29sZVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2UgdXNlIFN0YWNrVHJhY2UgdG8gdHJ5IGdldHRpbmcgYSBnb29kIHN0YWNrdHJhY2UuIElmIGl0IGZhaWxzLCBqdXN0IHByaW50IHRoZSBlcnJvclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogZXJyb3IudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgICAgICAgZnJvbUVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcignTm9uLUVycm9yIE9iamVjdCcpKS50aGVuKFxuICAgICAgICAgICAgICAgIHN0YWNrRnJhbWVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2tTdHJpbmcgPSBzdGFja0ZyYW1lcy5zcGxpY2UoMCwgMjApLm1hcChzZiA9PiBzZi50b1N0cmluZygpKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHsgbWVzc2FnZSwgdXJsLCBzdGFjazogc3RhY2tTdHJpbmcsIGVycm9yIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IsIGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
365
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VudHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi1zZXJ2aWNlcy9zcmMvbGliL3NlbnRyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBZ0IsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sS0FBSyxNQUFNLE1BQU0scUJBQXFCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQUtoRSxNQUFNLE9BQU8sa0JBQWtCO2FBRVosc0JBQWlCLEdBQUcsS0FBSyxBQUFSLENBQVM7SUFFekMsWUFBNkIsZ0JBQWtDO1FBQWxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFBRyxDQUFDO0lBRTNELEtBQUssQ0FBQyxxQkFBcUI7UUFDL0IsSUFBSSxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZDLHdEQUF3RDtZQUN4RCxPQUFPO1FBQ1gsQ0FBQztRQUNELE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTVCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFakQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDN0MsSUFBSSxHQUFHLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxD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LENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakUsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDakMsU0FBUyxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDMUUsV0FBVyxDQUFDLEVBQUU7Z0JBQ1YsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBRXZFLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMvRCxDQUFDLENBQ0osQ0FBQztRQUNOLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1QsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNMLENBQUM7K0dBeFpRLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmYsTUFBTTs7NEZBRVQsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBTZW50cnkgZnJvbSAnQHNlbnRyeS9hbmd1bGFyLWl2eSc7XG5cbmltcG9ydCB7IFN0YXR1c0NvZGVzIH0gZnJvbSAnaHR0cC1zdGF0dXMtY29kZXMnO1xuaW1wb3J0IHsgZnJvbUVycm9yIH0gZnJvbSAnc3RhY2t0cmFjZS1qcyc7XG5cbmltcG9ydCB7IFVzZXIgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1jb25maWctc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2VudHJ5RXJyb3JIYW5kbGVyIGltcGxlbWVudHMgRXJyb3JIYW5kbGVyIHtcbiAgICBwcml2YXRlIHN0YXRpYyB1c2VyOiBQYXJ0aWFsPFVzZXI+O1xuICAgIHByaXZhdGUgc3RhdGljIHNlbnRyeUluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UpIHt9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVTZW50cnlBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKFNlbnRyeUVycm9ySGFuZGxlci5zZW50cnlJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgLy8gU2VudHJ5IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIG5vIG5lZWQgdG8gZG8gaXQgYWdhaW5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBTZW50cnkuY3JlYXRlRXJyb3JIYW5kbGVyKCk7XG5cbiAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5nZXRTZW50cnlDb25maWdBc3luYygpO1xuXG4gICAgICAgIHRoaXMuYXBwQ29uZmlnU2VydmljZS5hcHBDb25maWckLnN1YnNjcmliZShlbnYgPT4ge1xuICAgICAgICAgICAgaWYgKGVudj8uaW50ZWdyYXRpb25zPy5zZW50cnlfY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgU2VudHJ5LmluaXQoeyAuLi5jb25maWcsIC4uLmVudi5pbnRlZ3JhdGlvbnMuc2VudHJ5X2NvbmZpZyB9KTtcbiAgICAgICAgICAgICAgICBTZW50cnlFcnJvckhhbmRsZXIuc2VudHJ5SW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gQWRkIGEgZ2xvYmFsIGxpc3RlbmVyIGZvciB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zXG4gICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsIChldmVudDogUHJvbWlzZVJlamVjdGlvbkV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUHJvbWlzZVJlamVjdGlvbihldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBBZGQgYSBnbG9iYWwgbGlzdGVuZXIgZm9yIHVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbnNcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsIChldmVudDogUHJvbWlzZVJlamVjdGlvbkV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVByb21pc2VSZWplY3Rpb24oZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldFNlbnRyeUNvbmZpZ0FzeW5jKCk6IFByb21pc2U8U2VudHJ5LkJyb3dzZXJPcHRpb25zPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudmlyb25tZW50ID1cbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaG9zdD8uaW5jbHVkZXMoJ2RldicpIHx8IHdpbmRvdy5sb2NhdGlvbi5ob3N0Py5pbmNsdWRlcygnbG9jYWxob3N0JylcbiAgICAgICAgICAgICAgICAgICAgPyAnZGV2ZWxvcG1lbnQnXG4gICAgICAgICAgICAgICAgICAgIDogJ3Byb2R1Y3Rpb24nO1xuXG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkUGF0aHMgPSBbJyddO1xuICAgICAgICAgICAgY29uc3QgaGVhbHRoQ2hlY2tQYXRocyA9IFsnL3BpbmcnXTtcbiAgICAgICAgICAgIGNvbnN0IG9uZVBlcmNlbnRJZ25vcmVkUGF0aHMgPSBbJyddO1xuICAgICAgICAgICAgY29uc3QgZml2ZVBlcmNlbnRJZ25vcmVkUGF0aHMgPSBbJyddO1xuXG4gICAgICAgICAgICBjb25zdCBjb25maWc6IFNlbnRyeS5Ccm93c2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBkc246IG51bGwsXG4gICAgICAgICAgICAgICAgdHJhY2VzU2FtcGxlUmF0ZTogMC4xLFxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQoZXZlbnQsIGhpbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50IGlzIG9mIHR5cGUgQ2xvc2VFdmVudCBhbmQgaWdub3JlIGl0XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudD8uZXhjZXB0aW9uPy52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgPSBldmVudC5leGNlcHRpb24udmFsdWVzLmZpbHRlcih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBjb25kaXRpb24gYmFzZWQgb24gdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgb2YgdGhlIGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnR5cGUgPT09ICdDbG9zZUV2ZW50JyB8fCB2YWx1ZS52YWx1ZS5pbmNsdWRlcygnQ2xvc2VFdmVudCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50Py5leGNlcHRpb24/LnZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMuZmlsdGVyKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgdGhlIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UgYW5kIGlnbm9yZSBpdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS50eXBlID09PSAnRXJyb3InICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlLmluY2x1ZGVzKCdSZXNpemVPYnNlcnZlciBsb29wIGNvbXBsZXRlZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gb3JpZ2luYXRlcyBmcm9tIHZlbmRvci5qcyBmaWxlXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudD8uZXhjZXB0aW9uPy52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzSnNvblBhcnNpbmdFcnJvciA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMuc29tZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudHlwZSA9PT0gJ1N5bnRheEVycm9yJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT8udmFsdWU/LmluY2x1ZGVzKFwiZXhwZWN0ZWQgJzonIGFmdGVyIHByb3BlcnR5IG5hbWUgaW5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0pzb25QYXJzaW5nRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBldmVudCBpcyBhIENodW5rTG9hZEVycm9yIGFuZCBpZ25vcmUgaXQgKGl0IGNvdWxkIGJlIGJlY2F1c2Ugb2YgcG9vciBuZXR3b3JrKVxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQ/LmV4Y2VwdGlvbj8udmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5leGNlcHRpb24udmFsdWVzID0gZXZlbnQuZXhjZXB0aW9uLnZhbHVlcy5maWx0ZXIodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS50eXBlID09PSAnQ2h1bmtMb2FkRXJyb3InIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlLmluY2x1ZGVzKCdDaHVua0xvYWRFcnJvcjogTG9hZGluZyBjaHVuaycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50IGlzIGEgc2NyaXB0IGxvYWRpbmcgZXJyb3IgYW5kIGlnbm9yZSBpdFxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQ/LmV4Y2VwdGlvbj8udmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5leGNlcHRpb24udmFsdWVzID0gZXZlbnQuZXhjZXB0aW9uLnZhbHVlcy5maWx0ZXIodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS50eXBlID09PSAnRXJyb3InICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlLmluY2x1ZGVzKCdDb3VsZCBub3QgbG9hZCBcInV0aWxcIicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50IGlzIGEgdGltZW91dCBlcnJvciBhbmQgaWdub3JlIGl0XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudD8uZXhjZXB0aW9uPy52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgPSBldmVudC5leGNlcHRpb24udmFsdWVzLmZpbHRlcih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnR5cGUgPT09ICdFcnJvcicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudmFsdWUuaW5jbHVkZXMoJ0Vycm9yIGxvYWRpbmcgcGxvdGx5LmpzIGxpYnJhcnkgZnJvbScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50IGlzIHJlbGF0ZWQgdG8gY3Jvc3Mtb3JpZ2luIGZyYW1lIGFjY2Vzc1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQ/LmV4Y2VwdGlvbj8udmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0Nyb3NzT3JpZ2luRnJhbWVFcnJvciA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMuc29tZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudHlwZSA9PT0gJ1NlY3VyaXR5RXJyb3InICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPy52YWx1ZT8uaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkZhaWxlZCB0byByZWFkIGEgbmFtZWQgcHJvcGVydHkgJ25hdmlnYXRvcicgZnJvbSAnV2luZG93JzogQmxvY2tlZCBhIGZyYW1lIHdpdGggb3JpZ2luXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3Jvc3NPcmlnaW5GcmFtZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXhjbHVkZSBjcm9zcy1vcmlnaW4gZnJhbWUgZXJyb3JzIGZyb20gYmVpbmcgcmVwb3J0ZWQgdG8gU2VudHJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZXZlbnQgaGFzIGFuIGV4Y2VwdGlvbiBhbmQgdmFsdWVzIGFycmF5XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudD8uZXhjZXB0aW9uPy52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgZXZlbnRzIGdlbmVyYXRlZCBieSBUcnlDYXRjaCBhbmQgR2xvYmFsSGFuZGxlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgPSBldmVudC5leGNlcHRpb24udmFsdWVzLmZpbHRlcih2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVjaGFuaXNtID0gdmFsdWUubWVjaGFuaXNtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWNoYW5pc20gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lY2hhbmlzbS50eXBlID09PSAnVHJ5Q2F0Y2gnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWNoYW5pc20udHlwZSA9PT0gJ0dsb2JhbEhhbmRsZXJzJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgbm9uLWVycm9yIGV4Y2VwdGlvblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc05vbkVycm9yRXhjZXB0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Py5leGNlcHRpb24/LnZhbHVlcz8uWzBdPy52YWx1ZT8uc3RhcnRzV2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTm9uLUVycm9yIGV4Y2VwdGlvbiBjYXB0dXJlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChoaW50Py5vcmlnaW5hbEV4Y2VwdGlvbiBhcyBFcnJvcik/Lm1lc3NhZ2U/LnN0YXJ0c1dpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05vbi1FcnJvciBleGNlcHRpb24gY2FwdHVyZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05vbkVycm9yRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGlnbm9yZSB0aG9zZSBraW5kcyBvZiBlcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGVueVVybHM6IFsvZHJpZnQuKlxcLmpzL2ksIC9hbmFseXRpY3MuKlxcLmpzL2ksIC9wb2x5ZmlsbHMuKlxcLmpzL2ksIC92ZW5kb3IuKlxcLmpzL2ldLFxuICAgICAgICAgICAgICAgIGludGVncmF0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgYW5kIGNvbmZpZ3VyZXMgdGhlIFRyYWNpbmcgaW50ZWdyYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIGF1dG9tYXRpY2FsbHkgaW5zdHJ1bWVudHMgeW91ciBhcHBsaWNhdGlvbiB0byBtb25pdG9yIGl0c1xuICAgICAgICAgICAgICAgICAgICAvLyBwZXJmb3JtYW5jZSwgaW5jbHVkaW5nIGN1c3RvbSBBbmd1bGFyIHJvdXRpbmcgaW5zdHJ1bWVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIG5ldyBTZW50cnkuQnJvd3NlclRyYWNpbmcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGluZ0luc3RydW1lbnRhdGlvbjogU2VudHJ5LnJvdXRpbmdJbnN0cnVtZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHRyYWNlc1NhbXBsZXI6IHNhbXBsaW5nQ29udGV4dCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4YW1pbmUgcHJvdmlkZWQgY29udGV4dCBkYXRhIChpbmNsdWRpbmcgcGFyZW50IGRlY2lzaW9uLCBpZiBhbnkpIGFsb25nXG4gICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYW55dGhpbmcgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UgdG8gY29tcHV0ZSB0aGUgc2FtcGxlIHJhdGUgb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gc2FtcGxpbmcgZGVjaXNpb24gZm9yIHRoaXMgdHJhbnNhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aG5hbWUgPSBzYW1wbGluZ0NvbnRleHQubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZ25vcmVkUGF0aHMuaW5jbHVkZXMocGF0aG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoZWFsdGhDaGVja1BhdGhzLmluY2x1ZGVzKHBhdGhuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmVyeSBsb3cgcmF0ZSBhcyB0aGVzZSBhcmUgZXh0cmVtZWx5IGZyZXF1ZW50IGFuZCBwcmV0dHkgdXNlbGVzc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDAxO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9uZVBlcmNlbnRJZ25vcmVkUGF0aHMuaW5jbHVkZXMocGF0aG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMC4wMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaXZlUGVyY2VudElnbm9yZWRQYXRocy5pbmNsdWRlcyhwYXRobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjA1O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBzYW1wbGUgcmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW52aXJvbm1lbnQsXG5cbiAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgU2VydmVyIEVycm9ycy4gV2UgaGF2ZSB0byBkZWZpbmUgaGVyZSBzaW5jZSBBbmd1bGFyXG4gICAgICAgICAgICAgICAgLy8gaHR0cCBjbGllbnQgdXNlcyBzZXRUaW1lb3V0IHRvIGRldGVjdCBodHRwIGNhbGwgcHJvZ3Jlc3MuXG4gICAgICAgICAgICAgICAgLy8gQW5kIHdoZW4gdGhlIGNhbGwgZmFpbHMsIGl0IHRocm93cyBhbiBleGNlcHRpb24gaW5zaWRlIHRoYXQgdGltZW91dFxuICAgICAgICAgICAgICAgIC8vIHRoYXQgYnViYmxlcyB1cCBoaWdoZXIgdG8gdGhlIG1haW4gQW5ndWxhcidzIGVycm9yIGhhbmRsZXIuXG4gICAgICAgICAgICAgICAgaWdub3JlRXJyb3JzOiBbXG4gICAgICAgICAgICAgICAgICAgICd0b3AuR0xPQkFMUycsXG4gICAgICAgICAgICAgICAgICAgICdSZXNpemVPYnNlcnZlciBsb29wIGNvbXBsZXRlZCB3aXRoIHVuZGVsaXZlcmVkIG5vdGlmaWNhdGlvbnMnXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc29sdmUoY29uZmlnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGluaXRpYWxpemVVc2VyKHVzZXI6IFBhcnRpYWw8VXNlcj4pIHtcbiAgICAgICAgU2VudHJ5RXJyb3JIYW5kbGVyLnVzZXIgPSB7XG4gICAgICAgICAgICBpZDogdXNlcj8uaWQsXG4gICAgICAgICAgICBuYW1lOiB1c2VyPy5maXJzdF9uYW1lLFxuICAgICAgICAgICAgZW1haWw6IHVzZXI/LmVtYWlsXG4gICAgICAgIH0gYXMgUGFydGlhbDxVc2VyPjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVByb21pc2VSZWplY3Rpb24oZXZlbnQ6IFByb21pc2VSZWplY3Rpb25FdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlcnJvciA9IGV2ZW50LnJlYXNvbjtcbiAgICAgICAgdGhpcy5sb2dUb1NlbnRyeShlcnJvcik7XG4gICAgICAgIHRoaXMubG9nVG9Db25zb2xlKGVycm9yKTtcbiAgICB9XG5cbiAgICBoYW5kbGVFcnJvcihpbmNvbWluZ0Vycm9yOiBIdHRwRXJyb3JSZXNwb25zZSB8IEVycm9yKSB7XG4gICAgICAgIC8vIGluIGNhc2Ugb2YgNDAxLCByZXR1cm4gbm8gZXhjZXB0aW9uXG4gICAgICAgIGlmIChpbmNvbWluZ0Vycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBpbmNvbWluZ0Vycm9yLnN0YXR1cyA9PT0gU3RhdHVzQ29kZXMuVU5BVVRIT1JJWkVEIHx8XG4gICAgICAgICAgICAgICAgaW5jb21pbmdFcnJvci5zdGF0dXMgPT09IFN0YXR1c0NvZGVzLkZPUkJJRERFTlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIDQwMSBlcnJvciAoZS5nLiwgcmVkaXJlY3QgdG8gbG9naW4gcGFnZSlcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmF1dGhvcml6ZWQgcmVxdWVzdDonLCBpbmNvbWluZ0Vycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbmNvbWluZ0Vycm9yLnN0YXR1cyA9PT0gU3RhdHVzQ29kZXMuVU5QUk9DRVNTQUJMRV9FTlRJVFkpIHtcbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgNDIyIGVycm9yXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVU5QUk9DRVNTQUJMRV9FTlRJVFkgcmVxdWVzdDonLCBpbmNvbWluZ0Vycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbmNvbWluZ0Vycm9yLnN0YXR1cyA9PT0gNDMzKSB7XG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIDQzMyBlcnJvclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ292ZXIgbWVzc2FnZSBxdW90YTonLCBpbmNvbWluZ0Vycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVFeGNlcHRpb25FcnJvcihpbmNvbWluZ0Vycm9yKTtcbiAgICB9XG5cbiAgICBoYW5kbGVFeGNlcHRpb25FcnJvcihpbmNvbWluZ0Vycm9yKSB7XG4gICAgICAgIGlmIChpbmNvbWluZ0Vycm9yKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3IgPSBpbmNvbWluZ0Vycm9yOyAvLyBUaGUgYWN0dWFsIGVycm9yIHRvIGxvZ1xuICAgICAgICAgICAgd2hpbGUgKCdvcmlnaW5hbEVycm9yJyBpbiBlcnJvciAmJiBlcnJvci5vcmlnaW5hbEVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1RvQ29uc29sZShlcnJvcik7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnJvci5vcmlnaW5hbEVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5leHRyYWN0T3JpZ2luYWxFcnJvcihlcnJvciwgaW5jb21pbmdFcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHRyYWN0T3JpZ2luYWxFcnJvcihlcnJvciwgaW5jb21pbmdFcnJvcikge1xuICAgICAgICAvLyBFeGNsdWRlIHNwZWNpZmljIGVycm9yc1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gU3RhdHVzQ29kZXMuTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdFeGNsdWRlZCA0MDQgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gU2tpcCBsb2dnaW5nIHRvIFNlbnRyeVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gMCAmJiBlcnJvci5zdGF0dXNUZXh0ID09PSAnVW5rbm93biBFcnJvcicpIHtcbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgbmV0d29yay1yZWxhdGVkIGVycm9ycyBkaWZmZXJlbnRseSBvciBzdXBwcmVzcyB0aGVtXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdOZXR3b3JrLXJlbGF0ZWQgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gRG9uJ3QgcmV0aHJvdyB0aGUgZXJyb3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB7IG1lc3NhZ2UgfSA9IGVycm9yO1xuICAgICAgICAgICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBlcnJvci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihgR290IEh0dHBFcnJvclJlc3BvbnNlIG9uIFVSTCAke2Vycm9yLnVybH0gbWVzc2FnZTogJHttZXNzYWdlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVOb25IdHRwRXJyb3JSZXNwb25zZShlcnJvcik7XG5cbiAgICAgICAgLy8gRW5zdXJlIGFsbCBlcnJvcnMgaGF2ZSBhIHByb3BlciBtZXNzYWdlXG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlRm9ybWF0dGVyKGVycm9yKTtcblxuICAgICAgICAvLyBFeGlzdGluZyBTZW50cnkgaW5pdGlhbGl6YXRpb24gbG9naWNcbiAgICAgICAgdGhpcy5zZW50cnlJbnRpbGl6YXRpb24oZXJyb3IsIGluY29taW5nRXJyb3IpO1xuICAgIH1cblxuICAgIGhhbmRsZU5vbkh0dHBFcnJvclJlc3BvbnNlKGVycm9yKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmICdtZXNzYWdlJyBpbiBlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzICE9PSBTdGF0dXNDb2Rlcy5VTkFVVEhPUklaRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYE9iamVjdCBjYXB0dXJlZCBhcyBleGNlcHRpb246ICR7ZXJyb3J9YCk7IC8vIE5PU09OQVJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBFeGNsdWRlIHJlcG9ydGluZyA0MDEgZXJyb3JzXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlcnJvck1lc3NhZ2VGb3JtYXR0ZXIoZXJyb3IpIHtcbiAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikgfHwgIWVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRNZXNzYWdlID0gJ0NhcHR1cmVkIGFuIHVubGFiZWxlZCBldmVudCc7XG5cbiAgICAgICAgICAgIGlmIChlcnJvciAmJiAnaXNUcnVzdGVkJyBpbiBlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignSWdub3JlZCBpc1RydXN0ZWQgYnJvd3NlciBldmVudDonLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBlcnJvckRldGFpbHMgPSBlcnJvciA/IEpTT04uc3RyaW5naWZ5KGVycm9yKSA6ICdObyBtb3JlIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyc7XG4gICAgICAgICAgICBjb25zdCBlbmhhbmNlZEVycm9yTWVzc2FnZSA9IGAke2RlZmF1bHRNZXNzYWdlfSB8IE9yaWdpbmFsIGVycm9yIGRldGFpbDogJHtlcnJvckRldGFpbHN9YDtcbiAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKGVuaGFuY2VkRXJyb3JNZXNzYWdlKTsgLy8gTk9TT05BUlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VudHJ5SW50aWxpemF0aW9uKGVycm9yLCBpbmNvbWluZ0Vycm9yKSB7XG4gICAgICAgIGlmICghU2VudHJ5RXJyb3JIYW5kbGVyLnNlbnRyeUluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVTZW50cnlBc3luYygpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ1RvU2VudHJ5KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgaW5jb21pbmdFcnJvcjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgU2VudHJ5OicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nVG9Db25zb2xlKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nVG9TZW50cnkoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2dUb1NlbnRyeShlcnJvcjogRXJyb3IpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSBTZW50cnlFcnJvckhhbmRsZXIudXNlciBhcyBFcnJvcjtcbiAgICAgICAgICAgIHRoaXMuc2NvcGVXaXRoU2VudHJ5KGVycm9yLCB1c2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVW5hYmxlIHRvIGxvZyB0aGUgZXJyb3IgdG8gU2VudHJ5LiBBbiBleGNlcHRpb24gb2NjdXJyZWQ6Jyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY29wZVdpdGhTZW50cnkoZXJyb3IsIHVzZXIpIHtcbiAgICAgICAgU2VudHJ5LndpdGhTY29wZShzY29wZSA9PiB7XG4gICAgICAgICAgICAvLyBBcHBlbmRzIHVzZXIgZGV0YWlscyBmb3Igc2VudHJ5IGxvZ1xuICAgICAgICAgICAgc2NvcGUuc2V0VXNlcih7XG4gICAgICAgICAgICAgICAgLi4udXNlclxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIEVuc3VyZSBlcnJvciBpcyBwcm9wZXJseSBmb3JtYXR0ZWRcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBTZW50cnkuY2FwdHVyZUV4Y2VwdGlvbihlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU5vblN0YW5kYXJkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVVubGFiZWxlZEV2ZW50KGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVOb25TdGFuZGFyZEVycm9yKGVycm9yOiBvYmplY3QpIHtcbiAgICAgICAgLy8gSWYgaXQncyBhbiBvYmplY3QgYnV0IG5vdCBhIHN0YW5kYXJkIEVycm9yLCBhdHRlbXB0IHRvIGxvZyBpdHMgcHJvcGVydGllcyBzYWZlbHlcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9ICdDYXB0dXJlZCBub24tc3RhbmRhcmQgZXJyb3Igd2l0aCBubyBtZXNzYWdlJzsgLy8gTk9TT05BUlxuXG4gICAgICAgIC8vIFRyeSB0byBleHRyYWN0IGFueSBtZXNzYWdlLWxpa2UgcHJvcGVydHkgc2FmZWx5XG4gICAgICAgIGlmICgnbWVzc2FnZScgaW4gZXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBFcnJvciBtZXNzYWdlOiAke1N0cmluZyhlcnJvci5tZXNzYWdlKX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBjYXB0dXJlIGtleSBwcm9wZXJ0aWVzIHNhZmVseVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgQ2FwdHVyZWQgbm9uLXN0YW5kYXJkIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KGVycm9yLCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcikpfWA7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIH0gY2F0Y2ggKGpzb25FcnJvcjogYW55KSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYENhcHR1cmVkIG5vbi1zdGFuZGFyZCBlcnJvciB3aXRoIHNlcmlhbGl6YXRpb24gaXNzdWU6ICR7anNvbkVycm9yLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBFcnJvciBvYmplY3Qgd2l0aCB0aGUgZW5oYW5jZWQgbWVzc2FnZVxuICAgICAgICBjb25zdCBlcnJvck9iamVjdCA9IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgICBTZW50cnkuY2FwdHVyZUV4Y2VwdGlvbihlcnJvck9iamVjdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVVbmxhYmVsZWRFdmVudChlcnJvcikge1xuICAgICAgICBjb25zdCBkZWZhdWx0TWVzc2FnZSA9ICdDYXB0dXJlZCBhbiB1bmxhYmVsZWQgZXZlbnQnO1xuXG4gICAgICAgIGlmIChlcnJvciAmJiAnaXNUcnVzdGVkJyBpbiBlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdJZ25vcmVkIGlzVHJ1c3RlZCBicm93c2VyIGV2ZW50OicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVycm9yRGV0YWlscyA9IGVycm9yID8gSlNPTi5zdHJpbmdpZnkoZXJyb3IpIDogJ05vIGFkZGl0aW9uYWwgZXJyb3IgaW5mbyc7XG4gICAgICAgIGNvbnN0IGVuaGFuY2VkRXJyb3JNZXNzYWdlID0gYCR7ZGVmYXVsdE1lc3NhZ2V9IHwgT3JpZ2luYWwgZXJyb3IgZGV0YWlsczogJHtlcnJvckRldGFpbHN9YDtcbiAgICAgICAgY29uc3QgZW5oYW5jZWRFcnJvciA9IG5ldyBFcnJvcihlbmhhbmNlZEVycm9yTWVzc2FnZSk7XG5cbiAgICAgICAgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oZW5oYW5jZWRFcnJvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2dUb0NvbnNvbGUoZXJyb3I6IEVycm9yKSB7XG4gICAgICAgIC8vIEF0dGVtcHQgdG8gcHJpbnQgaW4gdGhlIGNvbnNvbGVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdlIHVzZSBTdGFja1RyYWNlIHRvIHRyeSBnZXR0aW5nIGEgZ29vZCBzdGFja3RyYWNlLiBJZiBpdCBmYWlscywganVzdCBwcmludCB0aGUgZXJyb3JcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IGVycm9yLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgICAgICAgIGZyb21FcnJvcihlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoJ05vbi1FcnJvciBPYmplY3QnKSkudGhlbihcbiAgICAgICAgICAgICAgICBzdGFja0ZyYW1lcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrU3RyaW5nID0gc3RhY2tGcmFtZXMuc3BsaWNlKDAsIDIwKS5tYXAoc2YgPT4gc2YudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcih7IG1lc3NhZ2UsIHVybCwgc3RhY2s6IHN0YWNrU3RyaW5nLCBlcnJvciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLCBlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -26,4 +26,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
26
26
|
providedIn: 'root'
|
|
27
27
|
}]
|
|
28
28
|
}], ctorParameters: () => [{ type: i1.AppConfigService }, { type: i2.AuthService }] });
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi1zZXJ2aWNlcy9zcmMvbGliL3NvY2tldC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFvQixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFLN0MsTUFBTSxPQUFPLGdCQUFnQjtJQU96QixZQUNxQixnQkFBa0MsRUFDbEMsV0FBd0I7UUFEeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUV6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDO1lBQy9DLE1BQU0sR0FBRyxHQUFHLEdBQUcsVUFBVSx1Q0FBdUMsSUFBSSxDQUNoRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUM5QixFQUFFLENBQUM7WUFDSixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFDeEYsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOytHQW5CUSxnQkFBZ0I7bUhBQWhCLGdCQUFnQixjQUZiLE1BQU07OzRGQUVULGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFdlYlNvY2tldFN1YmplY3QsIHdlYlNvY2tldCB9IGZyb20gJ3J4anMvd2ViU29ja2V0JztcblxuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtY29uZmlnLXNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgV2Vic29ja2V0U2VydmljZSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcml2YXRlIHdlYlNvY2tldFN1YmplY3Q6IFdlYlNvY2tldFN1YmplY3Q8YW55PjtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgd2ViU29ja2V0JDogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5hcHBDb25maWdTZXJ2aWNlLmFwcENvbmZpZyQuc3Vic2NyaWJlKGNvbmZpZyA9PiB7XG4gICAgICAgICAgICBjb25zdCBzb2NrZXRMaW5rID0gY29uZmlnWydsaW5rcyddLnNvY2tldF9saW5rO1xuICAgICAgICAgICAgY29uc3QgdXJsID0gYCR7c29ja2V0TGlua30vd2Vic29ja2V0cy93ZWJzb2NrZXQ/c2Vzc2lvbl90b2tlbj0ke2J0b2EoXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRUb2tlbigpXG4gICAgICAgICAgICApfWA7XG4gICAgICAgICAgICB0aGlzLndlYlNvY2tldFN1YmplY3QgPSB3ZWJTb2NrZXQodXJsKTtcbiAgICAgICAgICAgIHRoaXMud2ViU29ja2V0JCA9IHRoaXMud2ViU29ja2V0U3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -30,7 +30,7 @@ export class SubscriptionService {
|
|
|
30
30
|
const formData = new FormData();
|
|
31
31
|
// eslint-disable-next-line no-restricted-syntax
|
|
32
32
|
for (const key in data) {
|
|
33
|
-
if (Object.
|
|
33
|
+
if (Object.hasOwn(data, key)) {
|
|
34
34
|
formData.append(key, data[key]);
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -46,7 +46,7 @@ export class SubscriptionService {
|
|
|
46
46
|
const formData = new FormData();
|
|
47
47
|
// eslint-disable-next-line no-restricted-syntax
|
|
48
48
|
for (const key in data) {
|
|
49
|
-
if (Object.
|
|
49
|
+
if (Object.hasOwn(data, key)) {
|
|
50
50
|
formData.append(key, data[key]);
|
|
51
51
|
}
|
|
52
52
|
}
|
|
@@ -56,7 +56,7 @@ export class SubscriptionService {
|
|
|
56
56
|
const formData = new FormData();
|
|
57
57
|
// eslint-disable-next-line no-restricted-syntax
|
|
58
58
|
for (const key in data) {
|
|
59
|
-
if (Object.
|
|
59
|
+
if (Object.hasOwn(data, key)) {
|
|
60
60
|
formData.append(key, data[key]);
|
|
61
61
|
}
|
|
62
62
|
}
|
|
@@ -123,4 +123,4 @@ export class SubscriptionService {
|
|
|
123
123
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SubscriptionService, decorators: [{
|
|
124
124
|
type: Injectable
|
|
125
125
|
}], ctorParameters: () => [{ type: i1.MainApiHttpService }] });
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi1zZXJ2aWNlcy9zcmMvbGliL3N1YnNjcmlwdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7QUFHN0QsTUFBTSxPQUFPLG1CQUFtQjtJQUc1QixZQUFvQixHQUF1QjtRQUF2QixRQUFHLEdBQUgsR0FBRyxDQUFvQjtRQUYzQyxhQUFRLEdBQUcsaUJBQWlCLENBQUM7SUFFaUIsQ0FBQztJQUUvQyxPQUFPLENBQUMsRUFBVTtRQUNkLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGtCQUFrQixDQUFDLEVBQVUsRUFBRSxPQUFlO1FBQzFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFVO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQTJCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGtCQUFrQixDQUFDLEVBQVUsRUFBRSxJQUEyQjtRQUN0RCxPQUFPLElBQUksQ0FBQyxH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UCxDQUFDOytHQXRKUSxtQkFBbUI7bUhBQW5CLG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUGFnaW5nLCBTdWJzY3JpcHRpb24gfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcbmltcG9ydCB7IE1haW5BcGlIdHRwU2VydmljZSB9IGZyb20gJy4vbWFpbi1hcGktaHR0cC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFN1YnNjcmlwdGlvblNlcnZpY2Uge1xuICAgIGVuZHBvaW50ID0gJy9zdWJzY3JpcHRpb25zLyc7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwaTogTWFpbkFwaUh0dHBTZXJ2aWNlKSB7fVxuXG4gICAgZ2V0QnlJZChpZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYCR7dGhpcy5lbmRwb2ludH0ke2lkfWApO1xuICAgIH1cblxuICAgIGRlbGV0ZVN1YnNjcmlwdGlvbihpZDogbnVtYmVyLCByZXFKc29uOiBvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbGV0ZShgL3N1YnNjcmlwdGlvbnMvJHtpZH1gLCByZXFKc29uKTtcbiAgICB9XG5cbiAgICBnZXRTdWJzY3JpcHRpb25zKGlkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChgL3N1YnNjcmlwdGlvbnMvJHtpZH1gKTtcbiAgICB9XG5cbiAgICBwb3N0U3Vic2NyaXB0aW9uKGRhdGE6IFBhcnRpYWw8U3Vic2NyaXB0aW9uPikge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdCgnL3N1YnNjcmlwdGlvbnMnLCBkYXRhKTtcbiAgICB9XG5cbiAgICB1cGRhdGVTdWJzY3JpcHRpb24oaWQ6IG51bWJlciwgZGF0YTogUGFydGlhbDxTdWJzY3JpcHRpb24+KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wdXQoYC9zdWJzY3JpcHRpb25zLyR7aWR9YCwgZGF0YSk7XG4gICAgfVxuXG4gICAgdXBkYXRlU3Vic2NyaXB0aW9uVW5pdChpZDogbnVtYmVyLCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucHV0KGAvc3Vic2NyaXB0aW9ucy8ke2lkfS91cGRhdGVfdW5pdHNgLCB7IHB1cmNoYXNlZF91bml0czogdW5pdHMgfSk7XG4gICAgfVxuXG4gICAgYWRkUGFydG5lcnNUb1N1YnNjcmlwdGlvbihpZDogbnVtYmVyLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSkge1xuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIGRhdGFba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdChgL3N1YnNjcmlwdGlvbnMvJHtpZH0vcGFydG5lcnMvaW52aXRlX3BhcnRuZXJgLCBkYXRhKTtcbiAgICB9XG5cbiAgICBnZXRQcm9kdWN0TGlzdChwYWdpbmc/OiBQYWdpbmcsIHN1YnNjcmlwdGlvbl9pZD86IG51bWJlciwgX3BhcmFtcz8pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldFdpdGhQYXJhbXMoXG4gICAgICAgICAgICBgL3N1YnNjcmlwdGlvbnMvJHtzdWJzY3JpcHRpb25faWR9L3BhcnRuZXJzL3Byb2R1Y3RzX2Zvcl9wYXJ0bmVyc2AsXG4gICAgICAgICAgICBIZWxwZXJTZXJ2aWNlLmdldFBhZ2luZ1BhcmFtcyhwYWdpbmcpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmVtb3ZlUGFydG5lcihpZDogbnVtYmVyLCBwYXJ0bmVyX2lkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbGV0ZShgL3N1YnNjcmlwdGlvbnMvJHtpZH0vcGFydG5lcnMvcmVtb3ZlX3BhcnRuZXIvJHtwYXJ0bmVyX2lkfWApO1xuICAgIH1cblxuICAgIGRlYWN0aXZhdGVQYXJ0bmVyKGlkOiBudW1iZXIsIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgZGF0YVtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wdXQoYC9zdWJzY3JpcHRpb25zLyR7aWR9L3BhcnRuZXJzL3RvZ2dsZV9hY3RpdmVfc3RhdHVzYCwgZGF0YSk7XG4gICAgfVxuXG4gICAgYWRkTWVtYmVyc1RvU3Vic2NyaXB0aW9uKGlkOiBudW1iZXIsIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgZGF0YVtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wb3N0KGAvc3Vic2NyaXB0aW9ucy8ke2lkfS9zaWdudXBfbWVtYmVyc2AsIGRhdGEpO1xuICAgIH1cblxuICAgIHNpZ25VcE1lbWJlclVybChpZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBgL3N1YnNjcmlwdGlvbnMvJHtpZH0vc2lnbnVwX21lbWJlcnNgO1xuICAgIH1cblxuICAgIGdldEVucm9sbGVkU3Vic2NyaXB0aW9uKGlkOiBudW1iZXIsIHBhZ2luZz86IFBhZ2luZykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0V2l0aFBhcmFtcyhcbiAgICAgICAgICAgIGAvc3Vic2NyaXB0aW9ucy8ke2lkfS9tZW1iZXJzYCxcbiAgICAgICAgICAgIEhlbHBlclNlcnZpY2UuZ2V0UGFnaW5nUGFyYW1zKHBhZ2luZylcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmVtb3ZlRW5yb2xsZWRTdWJzY3JpcHRpb24oaWQ6IG51bWJlciwgdXNlcl9pZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5kZWxldGUoYC9zdWJzY3JpcHRpb25zLyR7aWR9L3JlbW92ZV9tZW1iZXIvJHt1c2VyX2lkfWApO1xuICAgIH1cblxuICAgIHRvZ2dsZUFkbWluKGlkOiBudW1iZXIsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dChgL3N1YnNjcmlwdGlvbnMvJHtpZH0vdG9nZ2xlX2FkbWluYCwgZGF0YSk7XG4gICAgfVxuXG4gICAgdXBkYXRlU3Vic2NyaXB0aW9uQVBJS2V5KGlkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dChgL3N1YnNjcmlwdGlvbnMvJHtpZH0vdXBkYXRlX2FwaV9rZXlgKTtcbiAgICB9XG5cbiAgICBhZGRGdWxsTG9nbyhpZDogbnVtYmVyLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS51cGxvYWQoYC9zdWJzY3JpcHRpb25zLyR7aWR9YCwgZGF0YSwgJ2Z1bGxfbG9nbycpO1xuICAgIH1cblxuICAgIGFkZFNxdWFyZWRMb2dvKGlkOiBudW1iZXIsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnVwbG9hZChgL3N1YnNjcmlwdGlvbnMvJHtpZH1gLCBkYXRhLCAnc3F1YXJlZF9sb2dvJyk7XG4gICAgfVxuXG4gICAgZ2V0Q2FyZERldGFpbHMoc3Vic2NyaXB0aW9uSWQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0KGAvc3Vic2NyaXB0aW9ucy8ke3N1YnNjcmlwdGlvbklkfS9jYXJkX2RldGFpbGApO1xuICAgIH1cblxuICAgIHVwZGF0ZUNhcmREZXRhaWxzKGRhdGE6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIHN1YnNjcmlwdGlvbl9pZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wb3N0KGAvc3Vic2NyaXB0aW9ucy8ke3N1YnNjcmlwdGlvbl9pZH0vdXBkYXRlX2NhcmRgLCBkYXRhKTtcbiAgICB9XG5cbiAgICBnZXRFbnRlcnByaXNlSW5zaWdodChzdWJzY3JpcHRpb25JZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYC9zdWJzY3JpcHRpb25zLyR7c3Vic2NyaXB0aW9uSWR9L2VudGVycHJpc2VfYW5hbHl0aWNzP3R5cGU9c3VtbWFyeWApO1xuICAgIH1cblxuICAgIHBvc3RTdWJzY3JpcHRpb25DcmVkZW50aWFsKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnBvc3QoYC9zdWJzY3JpcHRpb25fY3JlZGVudGlhbHNgLCBkYXRhKTtcbiAgICB9XG5cbiAgICBlZGl0U3Vic2NyaXB0aW9uQ3JlZGVudGlhbChpZDogbnVtYmVyLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wdXQoYC9zdWJzY3JpcHRpb25fY3JlZGVudGlhbHMvJHtpZH1gLCBkYXRhKTtcbiAgICB9XG5cbiAgICBnZXRBbGxTdWJzY3JpcHRpb25DcmVkZW50aWFscyhzdWJzY3JpcHRpb25faWQ6IG51bWJlciwgcGFnaW5nPzogUGFnaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXRXaXRoUGFyYW1zKGAvc3Vic2NyaXB0aW9uX2NyZWRlbnRpYWxzL2dldF9hbGxgLCB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb25faWQsXG4gICAgICAgICAgICAuLi5IZWxwZXJTZXJ2aWNlLmdldFBhZ2luZ1BhcmFtcyhwYWdpbmcpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEFsbFN1YnNjcmlwdGlvblBhcnRuZXJzKHN1YnNjcmlwdGlvbl9pZDogbnVtYmVyLCBwYWdpbmc/OiBQYWdpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldFdpdGhQYXJhbXMoYC9zdWJzY3JpcHRpb25zLyR7c3Vic2NyaXB0aW9uX2lkfS9wYXJ0bmVycy9nZXRfYWxsYCwge1xuICAgICAgICAgICAgLi4uSGVscGVyU2VydmljZS5nZXRQYWdpbmdQYXJhbXMocGFnaW5nKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZWxldGVTdWJzY3JpcHRpb25DcmVkZW50aWFsKGlkOiBudW1iZXIsIHN1YnNjcmlwdGlvbklkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbGV0ZShgL3N1YnNjcmlwdGlvbl9jcmVkZW50aWFscy8ke2lkfT9zdWJzY3JpcHRpb25faWQ9JHtzdWJzY3JpcHRpb25JZH1gKTtcbiAgICB9XG5cbiAgICBnZXRBbGxDcmVkZW50aWFscyhwYWdpbmc/OiBQYWdpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldFdpdGhQYXJhbXMoYC9jcmVkZW50aWFscy9nZXRfYWxsYCwge1xuICAgICAgICAgICAgLi4uSGVscGVyU2VydmljZS5nZXRQYWdpbmdQYXJhbXMocGFnaW5nKVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi1zZXJ2aWNlcy9zcmMvbGliL3N1YnNjcmlwdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7QUFHN0QsTUFBTSxPQUFPLG1CQUFtQjtJQUc1QixZQUE2QixHQUF1QjtRQUF2QixRQUFHLEdBQUgsR0FBRyxDQUFvQjtRQUZwRCxhQUFRLEdBQUcsaUJBQWlCLENBQUM7SUFFMEIsQ0FBQztJQUV4RCxPQUFPLENBQUMsRUFBVTtRQUNkLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGtCQUFrQixDQUFDLEVBQVUsRUFBRSxPQUFlO1FBQzFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFVO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQTJCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGtCQUFrQixDQUFDLEVBQVUsRUFBRSxJQUEyQjtRQUN0RCxPQUFPLElBQUksQ0FBQyxH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VSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUGFnaW5nLCBTdWJzY3JpcHRpb24gfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcbmltcG9ydCB7IE1haW5BcGlIdHRwU2VydmljZSB9IGZyb20gJy4vbWFpbi1hcGktaHR0cC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFN1YnNjcmlwdGlvblNlcnZpY2Uge1xuICAgIGVuZHBvaW50ID0gJy9zdWJzY3JpcHRpb25zLyc7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFwaTogTWFpbkFwaUh0dHBTZXJ2aWNlKSB7fVxuXG4gICAgZ2V0QnlJZChpZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYCR7dGhpcy5lbmRwb2ludH0ke2lkfWApO1xuICAgIH1cblxuICAgIGRlbGV0ZVN1YnNjcmlwdGlvbihpZDogbnVtYmVyLCByZXFKc29uOiBvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbGV0ZShgL3N1YnNjcmlwdGlvbnMvJHtpZH1gLCByZXFKc29uKTtcbiAgICB9XG5cbiAgICBnZXRTdWJzY3JpcHRpb25zKGlkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChgL3N1YnNjcmlwdGlvbnMvJHtpZH1gKTtcbiAgICB9XG5cbiAgICBwb3N0U3Vic2NyaXB0aW9uKGRhdGE6IFBhcnRpYWw8U3Vic2NyaXB0aW9uPikge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdCgnL3N1YnNjcmlwdGlvbnMnLCBkYXRhKTtcbiAgICB9XG5cbiAgICB1cGRhdGVTdWJzY3JpcHRpb24oaWQ6IG51bWJlciwgZGF0YTogUGFydGlhbDxTdWJzY3JpcHRpb24+KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wdXQoYC9zdWJzY3JpcHRpb25zLyR7aWR9YCwgZGF0YSk7XG4gICAgfVxuXG4gICAgdXBkYXRlU3Vic2NyaXB0aW9uVW5pdChpZDogbnVtYmVyLCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucHV0KGAvc3Vic2NyaXB0aW9ucy8ke2lkfS91cGRhdGVfdW5pdHNgLCB7IHB1cmNoYXNlZF91bml0czogdW5pdHMgfSk7XG4gICAgfVxuXG4gICAgYWRkUGFydG5lcnNUb1N1YnNjcmlwdGlvbihpZDogbnVtYmVyLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QuaGFzT3duKGRhdGEsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBkYXRhW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnBvc3QoYC9zdWJzY3JpcHRpb25zLyR7aWR9L3BhcnRuZXJzL2ludml0ZV9wYXJ0bmVyYCwgZGF0YSk7XG4gICAgfVxuXG4gICAgZ2V0UHJvZHVjdExpc3QocGFnaW5nPzogUGFnaW5nLCBzdWJzY3JpcHRpb25faWQ/OiBudW1iZXIsIF9wYXJhbXM/KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXRXaXRoUGFyYW1zKFxuICAgICAgICAgICAgYC9zdWJzY3JpcHRpb25zLyR7c3Vic2NyaXB0aW9uX2lkfS9wYXJ0bmVycy9wcm9kdWN0c19mb3JfcGFydG5lcnNgLFxuICAgICAgICAgICAgSGVscGVyU2VydmljZS5nZXRQYWdpbmdQYXJhbXMocGFnaW5nKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJlbW92ZVBhcnRuZXIoaWQ6IG51bWJlciwgcGFydG5lcl9pZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5kZWxldGUoYC9zdWJzY3JpcHRpb25zLyR7aWR9L3BhcnRuZXJzL3JlbW92ZV9wYXJ0bmVyLyR7cGFydG5lcl9pZH1gKTtcbiAgICB9XG5cbiAgICBkZWFjdGl2YXRlUGFydG5lcihpZDogbnVtYmVyLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QuaGFzT3duKGRhdGEsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBkYXRhW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dChgL3N1YnNjcmlwdGlvbnMvJHtpZH0vcGFydG5lcnMvdG9nZ2xlX2FjdGl2ZV9zdGF0dXNgLCBkYXRhKTtcbiAgICB9XG5cbiAgICBhZGRNZW1iZXJzVG9TdWJzY3JpcHRpb24oaWQ6IG51bWJlciwgZGF0YSkge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0Lmhhc093bihkYXRhLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgZGF0YVtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wb3N0KGAvc3Vic2NyaXB0aW9ucy8ke2lkfS9zaWdudXBfbWVtYmVyc2AsIGRhdGEpO1xuICAgIH1cblxuICAgIHNpZ25VcE1lbWJlclVybChpZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBgL3N1YnNjcmlwdGlvbnMvJHtpZH0vc2lnbnVwX21lbWJlcnNgO1xuICAgIH1cblxuICAgIGdldEVucm9sbGVkU3Vic2NyaXB0aW9uKGlkOiBudW1iZXIsIHBhZ2luZz86IFBhZ2luZykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0V2l0aFBhcmFtcyhcbiAgICAgICAgICAgIGAvc3Vic2NyaXB0aW9ucy8ke2lkfS9tZW1iZXJzYCxcbiAgICAgICAgICAgIEhlbHBlclNlcnZpY2UuZ2V0UGFnaW5nUGFyYW1zKHBhZ2luZylcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmVtb3ZlRW5yb2xsZWRTdWJzY3JpcHRpb24oaWQ6IG51bWJlciwgdXNlcl9pZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5kZWxldGUoYC9zdWJzY3JpcHRpb25zLyR7aWR9L3JlbW92ZV9tZW1iZXIvJHt1c2VyX2lkfWApO1xuICAgIH1cblxuICAgIHRvZ2dsZUFkbWluKGlkOiBudW1iZXIsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dChgL3N1YnNjcmlwdGlvbnMvJHtpZH0vdG9nZ2xlX2FkbWluYCwgZGF0YSk7XG4gICAgfVxuXG4gICAgdXBkYXRlU3Vic2NyaXB0aW9uQVBJS2V5KGlkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dChgL3N1YnNjcmlwdGlvbnMvJHtpZH0vdXBkYXRlX2FwaV9rZXlgKTtcbiAgICB9XG5cbiAgICBhZGRGdWxsTG9nbyhpZDogbnVtYmVyLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS51cGxvYWQoYC9zdWJzY3JpcHRpb25zLyR7aWR9YCwgZGF0YSwgJ2Z1bGxfbG9nbycpO1xuICAgIH1cblxuICAgIGFkZFNxdWFyZWRMb2dvKGlkOiBudW1iZXIsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnVwbG9hZChgL3N1YnNjcmlwdGlvbnMvJHtpZH1gLCBkYXRhLCAnc3F1YXJlZF9sb2dvJyk7XG4gICAgfVxuXG4gICAgZ2V0Q2FyZERldGFpbHMoc3Vic2NyaXB0aW9uSWQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0KGAvc3Vic2NyaXB0aW9ucy8ke3N1YnNjcmlwdGlvbklkfS9jYXJkX2RldGFpbGApO1xuICAgIH1cblxuICAgIHVwZGF0ZUNhcmREZXRhaWxzKGRhdGE6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIHN1YnNjcmlwdGlvbl9pZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wb3N0KGAvc3Vic2NyaXB0aW9ucy8ke3N1YnNjcmlwdGlvbl9pZH0vdXBkYXRlX2NhcmRgLCBkYXRhKTtcbiAgICB9XG5cbiAgICBnZXRFbnRlcnByaXNlSW5zaWdodChzdWJzY3JpcHRpb25JZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYC9zdWJzY3JpcHRpb25zLyR7c3Vic2NyaXB0aW9uSWR9L2VudGVycHJpc2VfYW5hbHl0aWNzP3R5cGU9c3VtbWFyeWApO1xuICAgIH1cblxuICAgIHBvc3RTdWJzY3JpcHRpb25DcmVkZW50aWFsKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnBvc3QoYC9zdWJzY3JpcHRpb25fY3JlZGVudGlhbHNgLCBkYXRhKTtcbiAgICB9XG5cbiAgICBlZGl0U3Vic2NyaXB0aW9uQ3JlZGVudGlhbChpZDogbnVtYmVyLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wdXQoYC9zdWJzY3JpcHRpb25fY3JlZGVudGlhbHMvJHtpZH1gLCBkYXRhKTtcbiAgICB9XG5cbiAgICBnZXRBbGxTdWJzY3JpcHRpb25DcmVkZW50aWFscyhzdWJzY3JpcHRpb25faWQ6IG51bWJlciwgcGFnaW5nPzogUGFnaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXRXaXRoUGFyYW1zKGAvc3Vic2NyaXB0aW9uX2NyZWRlbnRpYWxzL2dldF9hbGxgLCB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb25faWQsXG4gICAgICAgICAgICAuLi5IZWxwZXJTZXJ2aWNlLmdldFBhZ2luZ1BhcmFtcyhwYWdpbmcpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEFsbFN1YnNjcmlwdGlvblBhcnRuZXJzKHN1YnNjcmlwdGlvbl9pZDogbnVtYmVyLCBwYWdpbmc/OiBQYWdpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldFdpdGhQYXJhbXMoYC9zdWJzY3JpcHRpb25zLyR7c3Vic2NyaXB0aW9uX2lkfS9wYXJ0bmVycy9nZXRfYWxsYCwge1xuICAgICAgICAgICAgLi4uSGVscGVyU2VydmljZS5nZXRQYWdpbmdQYXJhbXMocGFnaW5nKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZWxldGVTdWJzY3JpcHRpb25DcmVkZW50aWFsKGlkOiBudW1iZXIsIHN1YnNjcmlwdGlvbklkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbGV0ZShgL3N1YnNjcmlwdGlvbl9jcmVkZW50aWFscy8ke2lkfT9zdWJzY3JpcHRpb25faWQ9JHtzdWJzY3JpcHRpb25JZH1gKTtcbiAgICB9XG5cbiAgICBnZXRBbGxDcmVkZW50aWFscyhwYWdpbmc/OiBQYWdpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldFdpdGhQYXJhbXMoYC9jcmVkZW50aWFscy9nZXRfYWxsYCwge1xuICAgICAgICAgICAgLi4uSGVscGVyU2VydmljZS5nZXRQYWdpbmdQYXJhbXMocGFnaW5nKVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|