@sumaris-net/ngx-components 1.22.6 → 1.22.9
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/bundles/sumaris-net.ngx-components.umd.js +142 -592
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/esm2015/public_api.js +1 -2
- package/esm2015/src/app/social/social.module.js +2 -2
- package/esm2015/src/app/social/user-event/user-event.model.js +5 -1
- package/esm2015/src/app/social/user-event/user-event.module.js +2 -10
- package/esm2015/src/app/social/user-event/user-event.service.js +5 -174
- package/esm2015/sumaris-net.ngx-components.js +7 -8
- package/fesm2015/sumaris-net.ngx-components.js +129 -511
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +0 -1
- package/src/app/social/user-event/user-event.model.d.ts +2 -0
- package/src/app/social/user-event/user-event.service.d.ts +1 -25
- package/sumaris-net.ngx-components.d.ts +6 -7
- package/sumaris-net.ngx-components.metadata.json +1 -1
- package/esm2015/src/app/social/user-event/user-events.table.js +0 -159
- package/src/app/social/user-event/user-events.table.d.ts +0 -58
|
@@ -1,21 +1,15 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { Directive,
|
|
3
|
-
import { gql } from '@apollo/client/core';
|
|
2
|
+
import { Directive, InjectionToken } from '@angular/core';
|
|
4
3
|
import { SocialErrorCodes } from '../social.errors';
|
|
5
4
|
import { AccountService } from '../../core/services/account.service';
|
|
6
5
|
import { GraphqlService } from '../../core/graphql/graphql.service';
|
|
7
6
|
import { BehaviorSubject, merge, of, Subscription } from 'rxjs';
|
|
8
|
-
import { UserEvent, UserEventFilter, UserEventTypes } from './user-event.model';
|
|
9
|
-
import { UserEventFragments } from './user-event.fragments';
|
|
10
7
|
import { distinctUntilChanged, map, mergeMap } from 'rxjs/operators';
|
|
11
8
|
import { isEmptyArray, isNotNil, toNumber } from '../../shared/functions';
|
|
12
|
-
import { Toasts } from '../../shared/toast/toasts';
|
|
13
|
-
import { ToastController } from '@ionic/angular';
|
|
14
9
|
import { TranslateService } from '@ngx-translate/core';
|
|
15
10
|
import { NetworkService } from '../../core/services/network.service';
|
|
16
11
|
import { BaseGraphqlService } from '../../core/services/base-graphql-service.class';
|
|
17
|
-
import {
|
|
18
|
-
import { Environment, ENVIRONMENT } from '../../../environments/environment.class';
|
|
12
|
+
import { EntityUtils } from '../../core/services/model/entity.model';
|
|
19
13
|
import { DateUtils } from '../../shared/dates';
|
|
20
14
|
import * as momentImported from 'moment';
|
|
21
15
|
const moment = momentImported;
|
|
@@ -42,7 +36,8 @@ export class AbstractUserEventService extends BaseGraphqlService {
|
|
|
42
36
|
ngOnStart() {
|
|
43
37
|
return __awaiter(this, void 0, void 0, function* () {
|
|
44
38
|
// Update component when refresh is need (=login events)
|
|
45
|
-
this._subscriptions.add(merge(this.accountService.onLogin, this.accountService.onLogout)
|
|
39
|
+
this._subscriptions.add(merge(this.accountService.onLogin, this.accountService.onLogout, of() // Starts with - first attempt if account is ready
|
|
40
|
+
)
|
|
46
41
|
.pipe(
|
|
47
42
|
// Wait account service ready (can be restarted)
|
|
48
43
|
mergeMap(() => this.accountService.ready()), map(() => this.accountService.isLogin()), distinctUntilChanged())
|
|
@@ -54,11 +49,6 @@ export class AbstractUserEventService extends BaseGraphqlService {
|
|
|
54
49
|
this.onLogout();
|
|
55
50
|
}
|
|
56
51
|
}));
|
|
57
|
-
// First attempt if account is ready
|
|
58
|
-
yield this.accountService.ready();
|
|
59
|
-
if (this.accountService.isLogin()) {
|
|
60
|
-
setTimeout(() => this.onLogin());
|
|
61
|
-
}
|
|
62
52
|
});
|
|
63
53
|
}
|
|
64
54
|
ngOnDestroy() {
|
|
@@ -443,163 +433,4 @@ AbstractUserEventService.ctorParameters = () => [
|
|
|
443
433
|
{ type: TranslateService },
|
|
444
434
|
{ type: undefined }
|
|
445
435
|
];
|
|
446
|
-
const userEventQueries = {
|
|
447
|
-
loadAll: gql `
|
|
448
|
-
query UserEvents($filter: UserEventFilterVOInput, $page: PageInput){
|
|
449
|
-
data: userEvents(filter: $filter, page: $page){
|
|
450
|
-
...LightUserEventFragment
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
${UserEventFragments.lightUserEvent}
|
|
454
|
-
`,
|
|
455
|
-
loadAllWithContent: gql `
|
|
456
|
-
query UserEventsWithContent($filter: UserEventFilterVOInput, $page: PageInput){
|
|
457
|
-
data: userEvents(filter: $filter, page: $page){
|
|
458
|
-
...UserEventFragment
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
${UserEventFragments.userEvent}
|
|
462
|
-
`
|
|
463
|
-
};
|
|
464
|
-
const userEventMutations = {
|
|
465
|
-
deleteByIds: gql `
|
|
466
|
-
mutation DeleteUserEvents($ids:[Int]){
|
|
467
|
-
deleteUserEvents(ids: $ids)
|
|
468
|
-
}
|
|
469
|
-
`,
|
|
470
|
-
save: gql `
|
|
471
|
-
mutation SaveUserEvent($data: UserEventVOInput){
|
|
472
|
-
data: saveUserEvent(userEvent: $data){
|
|
473
|
-
...UserEventFragment
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
${UserEventFragments.userEvent}
|
|
477
|
-
`
|
|
478
|
-
};
|
|
479
|
-
export class UserEventService extends AbstractUserEventService {
|
|
480
|
-
constructor(graphql, accountService, network, translate, toastController, environment) {
|
|
481
|
-
super(graphql, accountService, network, translate, {
|
|
482
|
-
queries: userEventQueries,
|
|
483
|
-
mutations: userEventMutations,
|
|
484
|
-
production: environment === null || environment === void 0 ? void 0 : environment.production
|
|
485
|
-
});
|
|
486
|
-
this.graphql = graphql;
|
|
487
|
-
this.accountService = accountService;
|
|
488
|
-
this.network = network;
|
|
489
|
-
this.translate = translate;
|
|
490
|
-
this.toastController = toastController;
|
|
491
|
-
this.environment = environment;
|
|
492
|
-
}
|
|
493
|
-
showToastErrorWithContext(opts) {
|
|
494
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
495
|
-
let message = opts.message || (opts.error && opts.error.message || opts.error);
|
|
496
|
-
// Make sure message a string
|
|
497
|
-
if (!message || typeof message !== 'string') {
|
|
498
|
-
message = 'ERROR.UNKNOWN_TECHNICAL_ERROR';
|
|
499
|
-
}
|
|
500
|
-
// If offline, display a simple alert
|
|
501
|
-
if (this.network.offline) {
|
|
502
|
-
this.showToast({ message, type: 'error' });
|
|
503
|
-
return;
|
|
504
|
-
}
|
|
505
|
-
// Translate the message (to be able to extract details content)
|
|
506
|
-
message = this.translate.instant(message);
|
|
507
|
-
// Clean details parts
|
|
508
|
-
if (message && message.indexOf('<small>') !== -1) {
|
|
509
|
-
message = message.substr(0, message.indexOf('<small>') - 1);
|
|
510
|
-
}
|
|
511
|
-
const res = yield this.showToast({
|
|
512
|
-
type: 'error',
|
|
513
|
-
duration: 15000,
|
|
514
|
-
message: message + '<br/><br/><b>' + this.translate.instant('CONFIRM.SEND_DEBUG_DATA') + '</b>',
|
|
515
|
-
buttons: [{
|
|
516
|
-
icon: 'bug',
|
|
517
|
-
text: this.translate.instant('COMMON.BTN_SEND'),
|
|
518
|
-
role: 'send'
|
|
519
|
-
}]
|
|
520
|
-
});
|
|
521
|
-
if (!res || res.role !== 'send')
|
|
522
|
-
return;
|
|
523
|
-
// Send debug data
|
|
524
|
-
try {
|
|
525
|
-
if (this._debug)
|
|
526
|
-
console.debug('Sending debug data...');
|
|
527
|
-
// Call content factory
|
|
528
|
-
let context = opts && opts.context;
|
|
529
|
-
if (typeof context === 'function') {
|
|
530
|
-
context = context();
|
|
531
|
-
}
|
|
532
|
-
if (context instanceof Promise) {
|
|
533
|
-
context = yield context;
|
|
534
|
-
}
|
|
535
|
-
// Send the message
|
|
536
|
-
const userEvent = yield this.sendDataForDebug({
|
|
537
|
-
message,
|
|
538
|
-
error: opts.error || undefined,
|
|
539
|
-
context: this.convertObjectToString(context)
|
|
540
|
-
});
|
|
541
|
-
console.info('Debug data successfully sent to admin', userEvent);
|
|
542
|
-
this.showToast({
|
|
543
|
-
type: 'info',
|
|
544
|
-
message: 'INFO.DEBUG_DATA_SEND',
|
|
545
|
-
showCloseButton: true
|
|
546
|
-
});
|
|
547
|
-
}
|
|
548
|
-
catch (err) {
|
|
549
|
-
console.error('Error while sending debug data:', err);
|
|
550
|
-
}
|
|
551
|
-
});
|
|
552
|
-
}
|
|
553
|
-
sendDataForDebug(data) {
|
|
554
|
-
const userEvent = new UserEvent();
|
|
555
|
-
userEvent.type = UserEventTypes.DEBUG_DATA;
|
|
556
|
-
userEvent.content = this.convertObjectToString(data);
|
|
557
|
-
return this.save(userEvent);
|
|
558
|
-
}
|
|
559
|
-
asFilter(filter) {
|
|
560
|
-
return UserEventFilter.fromObject(filter);
|
|
561
|
-
}
|
|
562
|
-
fromObject(source) {
|
|
563
|
-
return UserEvent.fromObject(source);
|
|
564
|
-
}
|
|
565
|
-
/* -- protected methods -- */
|
|
566
|
-
convertObjectToString(data) {
|
|
567
|
-
if (typeof data === 'string') {
|
|
568
|
-
return data;
|
|
569
|
-
}
|
|
570
|
-
// Serialize content into string
|
|
571
|
-
else if (typeof data === 'object') {
|
|
572
|
-
if (data instanceof Entity) {
|
|
573
|
-
return JSON.stringify(data.asObject({ keepTypename: true, keepLocalId: true, minify: false }));
|
|
574
|
-
}
|
|
575
|
-
else {
|
|
576
|
-
return JSON.stringify(data);
|
|
577
|
-
}
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
showToast(opts) {
|
|
581
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
582
|
-
if (!this.toastController)
|
|
583
|
-
throw new Error('Missing toastController in component\'s constructor');
|
|
584
|
-
return yield Toasts.show(this.toastController, this.translate, opts);
|
|
585
|
-
});
|
|
586
|
-
}
|
|
587
|
-
fillDefaultProperties(entity) {
|
|
588
|
-
entity.issuer = this.accountService.account.pubkey;
|
|
589
|
-
// TODO: compute hash (using cryptoService)
|
|
590
|
-
// TODO: compute sign
|
|
591
|
-
console.warn('TODO: sign user event before sending');
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
|
-
UserEventService.decorators = [
|
|
595
|
-
{ type: Injectable }
|
|
596
|
-
];
|
|
597
|
-
UserEventService.ctorParameters = () => [
|
|
598
|
-
{ type: GraphqlService },
|
|
599
|
-
{ type: AccountService },
|
|
600
|
-
{ type: NetworkService },
|
|
601
|
-
{ type: TranslateService },
|
|
602
|
-
{ type: ToastController },
|
|
603
|
-
{ type: Environment, decorators: [{ type: Optional }, { type: Inject, args: [ENVIRONMENT,] }] }
|
|
604
|
-
];
|
|
605
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ldmVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zb2NpYWwvdXNlci1ldmVudC91c2VyLWV2ZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQWEsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBYyxHQUFHLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxlQUFlLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUUsT0FBTyxFQUErQixTQUFTLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzVHLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRzFELE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDeEUsT0FBTyxFQUFtQixNQUFNLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUVuRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFDQUFxQyxDQUFD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Q0FBQyxDQUFDO0lBQ3ZELENBQUM7OztZQW5JRixVQUFVOzs7WUE1bUJILGNBQWM7WUFEZCxjQUFjO1lBYWQsY0FBYztZQURkLGdCQUFnQjtZQURoQixlQUFlO1lBS2YsV0FBVyx1QkF1bUJkLFFBQVEsWUFBSSxNQUFNLFNBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPbkRlc3Ryb3ksIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RmV0Y2hQb2xpY3ksIGdxbH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQge1NvY2lhbEVycm9yQ29kZXN9IGZyb20gJy4uL3NvY2lhbC5lcnJvcnMnO1xuaW1wb3J0IHtBY2NvdW50U2VydmljZX0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHtHcmFwaHFsU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZS9ncmFwaHFsL2dyYXBocWwuc2VydmljZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtJVXNlckV2ZW50LCBJVXNlckV2ZW50RmlsdGVyLCBVc2VyRXZlbnQsIFVzZXJFdmVudEZpbHRlciwgVXNlckV2ZW50VHlwZXN9IGZyb20gJy4vdXNlci1ldmVudC5tb2RlbCc7XG5pbXBvcnQge1VzZXJFdmVudEZyYWdtZW50c30gZnJvbSAnLi91c2VyLWV2ZW50LmZyYWdtZW50cyc7XG5pbXBvcnQge1NvcnREaXJlY3Rpb259IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHtFbnRpdGllc1NlcnZpY2VXYXRjaE9wdGlvbnMsIEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucywgSUVudGl0aWVzU2VydmljZSwgTG9hZFJlc3VsdCwgUGFnZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgbWVyZ2VNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7aXNFbXB0eUFycmF5LCBpc05vdE5pbCwgdG9OdW1iZXJ9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtTaG93VG9hc3RPcHRpb25zLCBUb2FzdHN9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdC90b2FzdHMnO1xuaW1wb3J0IHtPdmVybGF5RXZlbnREZXRhaWx9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7VG9hc3RDb250cm9sbGVyfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtOZXR3b3JrU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHtCYXNlR3JhcGhxbFNlcnZpY2UsIEJhc2VHcmFwaHFsU2VydmljZU9wdGlvbnN9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvYmFzZS1ncmFwaHFsLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtFbnRpdHksIEVudGl0eVV0aWxzfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQge0Vudmlyb25tZW50LCBFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7RGF0ZVV0aWxzfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0ICogYXMgbW9tZW50SW1wb3J0ZWQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7TW9tZW50fSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtJU3RhcnRhYmxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcblxuY29uc3QgbW9tZW50ID0gbW9tZW50SW1wb3J0ZWQ7XG5cbmV4cG9ydCBjb25zdCBVU0VSX0VWRU5UX1NFUlZJQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48SVVzZXJFdmVudFNlcnZpY2U8YW55LCBhbnk+PignVXNlckV2ZW50U2VydmljZScpO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVXNlckV2ZW50V2F0Y2hPcHRpb25zIGV4dGVuZHMgRW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zIHtcbiAgd2l0aENvbnRlbnQ/OiBib29sZWFuOyAvLyBEZWZhdWx0IHRvIGZhbHNlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXJFdmVudFF1ZXJpZXMge1xuICBsb2FkQWxsOiBhbnk7XG4gIGxvYWRBbGxXaXRoQ29udGVudDogYW55O1xuICBjb3VudD86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVXNlckV2ZW50TXV0YXRpb25zIHtcbiAgc2F2ZTogYW55O1xuICBtYXJrQXNSZWFkPzogYW55O1xuICBkZWxldGVCeUlkczogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyRXZlbnRTdWJzY3JpcHRpb25zIHtcbiAgbGlzdGVuQ2hhbmdlczogYW55O1xuICBsaXN0ZW5Db3VudENoYW5nZXM/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXJFdmVudExpc3RlbmVyPEUgZXh0ZW5kcyBJVXNlckV2ZW50PEU+PiB7XG4gIGFjY2VwdDogKEUpID0+IGJvb2xlYW47XG4gIG9uUmVjZWl2ZWQ/OiAoRSkgPT4gRSB8IHVuZGVmaW5lZDtcbiAgb25SZWFkPzogKEUpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJFdmVudFNlcnZpY2VPcHRpb25zPFxuICBRIGV4dGVuZHMgSVVzZXJFdmVudFF1ZXJpZXMgPSBJVXNlckV2ZW50UXVlcmllcyxcbiAgTSBleHRlbmRzIElVc2VyRXZlbnRNdXRhdGlvbnMgPSBJVXNlckV2ZW50TXV0YXRpb25zLFxuICBTIGV4dGVuZHMgSVVzZXJFdmVudFN1YnNjcmlwdGlvbnMgPSBJVXNlckV2ZW50U3Vic2NyaXB0aW9uc1xuICA+IGV4dGVuZHMgQmFzZUdyYXBocWxTZXJ2aWNlT3B0aW9ucyB7XG4gIHF1ZXJpZXM6IFE7XG4gIG11dGF0aW9ucz86IFBhcnRpYWw8TT47XG4gIHN1YnNjcmlwdGlvbnM/OiBQYXJ0aWFsPFM+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyRXZlbnRTZXJ2aWNlPEUgZXh0ZW5kcyBJVXNlckV2ZW50PEU+LFxuICBGIGV4dGVuZHMgSVVzZXJFdmVudEZpbHRlcjxFPixcbiAgV08gZXh0ZW5kcyBVc2VyRXZlbnRXYXRjaE9wdGlvbnMgPSBVc2VyRXZlbnRXYXRjaE9wdGlvbnM+XG4gIGV4dGVuZHMgSUVudGl0aWVzU2VydmljZTxFLCBGLCBXTz4sIElTdGFydGFibGVTZXJ2aWNlIHtcblxuICB1c2VyRXZlbnRDb3VudDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gIGFkZChlbnRpdHk6IEUpO1xuXG4gIGNvdW50KGZpbHRlcjogUGFydGlhbDxGPiwgb3B0aW9ucz86IHsgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTsgfSk6IFByb21pc2U8bnVtYmVyPjtcblxuICBsaXN0ZW5Db3VudENoYW5nZXMoZmlsdGVyOiBQYXJ0aWFsPEY+LCBvcHRpb25zPzogV08gJiB7IGludGVydmFsPzogbnVtYmVyOyBmZXRjaFBvbGljeT86IEZldGNoUG9saWN5OyB9KTogT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gIGxpc3RlbkNoYW5nZXMoZmlsdGVyOiBQYXJ0aWFsPEY+LCBvcHRpb25zPzogV08gJiB7IGludGVydmFsPzogbnVtYmVyOyBmZXRjaFBvbGljeT86IEZldGNoUG9saWN5OyB9KTogT2JzZXJ2YWJsZTxFW10+O1xuXG4gIHNhdmUoZW50aXR5OiBFLCBvcHRpb25zPzogRW50aXR5U2VydmljZUxvYWRPcHRpb25zKTogUHJvbWlzZTxFPjtcblxuICBkZWxldGUoZW50aXR5OiBFKTogUHJvbWlzZTxhbnk+O1xuXG4gIG1hcmtBc1JlYWQoZW50aXRpZXM6IEVbXSk7XG5cbiAgcmVnaXN0ZXJMaXN0ZW5lcihsaXN0ZW5lcjogSVVzZXJFdmVudExpc3RlbmVyPEU+KTtcblxuICByZXNldENvdW50KCk7XG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0VXNlckV2ZW50U2VydmljZTxFIGV4dGVuZHMgSVVzZXJFdmVudDxFLCBhbnk+LFxuICBGIGV4dGVuZHMgSVVzZXJFdmVudEZpbHRlcjxFLCBhbnk+LFxuICBXTyBleHRlbmRzIFVzZXJFdmVudFdhdGNoT3B0aW9ucyA9IFVzZXJFdmVudFdhdGNoT3B0aW9ucyxcbiAgUSBleHRlbmRzIElVc2VyRXZlbnRRdWVyaWVzID0gSVVzZXJFdmVudFF1ZXJpZXMsXG4gIE0gZXh0ZW5kcyBJVXNlckV2ZW50TXV0YXRpb25zID0gSVVzZXJFdmVudE11dGF0aW9ucyxcbiAgUyBleHRlbmRzIElVc2VyRXZlbnRTdWJzY3JpcHRpb25zID0gSVVzZXJFdmVudFN1YnNjcmlwdGlvbnNcbiAgPlxuICBleHRlbmRzIEJhc2VHcmFwaHFsU2VydmljZTxFLCBGPlxuICBpbXBsZW1lbnRzIElVc2VyRXZlbnRTZXJ2aWNlPEUsIEYsIFdPPiwgT25EZXN0cm95IHtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcmllczogUTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG11dGF0aW9uczogUGFydGlhbDxNPjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN1YnNjcmlwdGlvbnM6IFBhcnRpYWw8Uz47XG4gIHByb3RlY3RlZCBjb3VudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCByZXNldENvdW50RGF0ZTogTW9tZW50O1xuICBwcm90ZWN0ZWQgbGlzdGVuZXJzOiBJVXNlckV2ZW50TGlzdGVuZXI8RT5bXSA9IFtdO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9saXN0ZW5TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBnZXQgdXNlckV2ZW50Q291bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5jb3VudCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGdyYXBocWw6IEdyYXBocWxTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG5ldHdvcms6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG9wdGlvbnM6IFVzZXJFdmVudFNlcnZpY2VPcHRpb25zPFEsIE0sIFM+XG4gICkge1xuICAgIHN1cGVyKGdyYXBocWwsIG9wdGlvbnMpO1xuICAgIHRoaXMucXVlcmllcyA9IG9wdGlvbnMucXVlcmllcztcbiAgICB0aGlzLm11dGF0aW9ucyA9IG9wdGlvbnMubXV0YXRpb25zIHx8IDxQYXJ0aWFsPE0+Pnt9O1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IG9wdGlvbnMuc3Vic2NyaXB0aW9ucyB8fCA8UGFydGlhbDxTPj57fTtcbiAgICB0aGlzLl9sb2dQcmVmaXggPSAnW3VzZXItZXZlbnQtc2VydmljZV0gJztcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICAvLyBVcGRhdGUgY29tcG9uZW50IHdoZW4gcmVmcmVzaCBpcyBuZWVkICg9bG9naW4gZXZlbnRzKVxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgbWVyZ2UoXG4gICAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dpbixcbiAgICAgICAgdGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ291dFxuICAgICAgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBXYWl0IGFjY291bnQgc2VydmljZSByZWFkeSAoY2FuIGJlIHJlc3RhcnRlZClcbiAgICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmFjY291bnRTZXJ2aWNlLnJlYWR5KCkpLFxuICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLmFjY291bnRTZXJ2aWNlLmlzTG9naW4oKSksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUobG9naW4gPT4ge1xuICAgICAgICAgIGlmIChsb2dpbikge1xuICAgICAgICAgICAgdGhpcy5vbkxvZ2luKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25Mb2dvdXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcblxuICAgIC8vIEZpcnN0IGF0dGVtcHQgaWYgYWNjb3VudCBpcyByZWFkeVxuICAgIGF3YWl0IHRoaXMuYWNjb3VudFNlcnZpY2UucmVhZHkoKTtcbiAgICBpZiAodGhpcy5hY2NvdW50U2VydmljZS5pc0xvZ2luKCkpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5vbkxvZ2luKCkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGFic3RyYWN0IGFzRmlsdGVyKGZpbHRlcjogUGFydGlhbDxGPik6IEY7XG5cbiAgYWJzdHJhY3QgZnJvbU9iamVjdChzb3VyY2U6IGFueSk6IEU7XG5cbiAgd2F0Y2hBbGwob2Zmc2V0OiBudW1iZXIsIHNpemU6IG51bWJlciwgc29ydEJ5Pzogc3RyaW5nLCBzb3J0RGlyZWN0aW9uPzogU29ydERpcmVjdGlvbiwgZmlsdGVyPzogUGFydGlhbDxGPiwgb3B0aW9ucz86IFdPKTogT2JzZXJ2YWJsZTxMb2FkUmVzdWx0PEU+PiB7XG4gICAgcmV0dXJuIHRoaXMud2F0Y2hQYWdlKDxQYWdlPnsgb2Zmc2V0LCBzaXplLCBzb3J0QnksIHNvcnREaXJlY3Rpb24gfSwgZmlsdGVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHdhdGNoUGFnZShwYWdlOiBQYWdlLFxuICAgICAgICAgICAgZmlsdGVyPzogUGFydGlhbDxGPixcbiAgICAgICAgICAgIG9wdGlvbnM/OiBXTyk6IE9ic2VydmFibGU8TG9hZFJlc3VsdDxFPj4ge1xuXG4gICAgbGV0IG5vdyA9IHRoaXMuX2RlYnVnICYmIERhdGUubm93KCk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIGZpbHRlciA9IHRoaXMuZGVmYXVsdEZpbHRlcigpO1xuICAgIH1cbiAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1Mb2FkaW5nIHVzZXIgZXZlbnRzLi4uYCwgZmlsdGVyKTtcblxuICAgIGZpbHRlciA9IHRoaXMuYXNGaWx0ZXIoZmlsdGVyKTtcblxuICAgIC8vIEZvcmNlIHJlY2lwaWVudCB0byBjdXJyZW50IGlzc3VlciwgaWYgbm90IGFkbWluIGFuZCBub3Qgc3BlY2lmaWVkXG4gICAgaWYgKGlzRW1wdHlBcnJheShmaWx0ZXI/LnJlY2lwaWVudHMpIHx8ICF0aGlzLmFjY291bnRTZXJ2aWNlLmlzQWRtaW4oKSkge1xuICAgICAgY29uc3QgcmVjaXBpZW50ID0gdGhpcy5kZWZhdWx0UmVjaXBpZW50KCk7XG4gICAgICBpZiAoIWZpbHRlcj8ucmVjaXBpZW50cz8uaW5jbHVkZXMocmVjaXBpZW50KSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1t1c2VyLWV2ZW50cy1zZXJ2aWNlXSBGb3JjZSB1c2VyIGV2ZW50IGZpbHRlci5yZWNpcGllbnQ9JyArIHJlY2lwaWVudCk7XG4gICAgICAgIGZpbHRlci5yZWNpcGllbnRzID0gW3JlY2lwaWVudF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2l0aENvbnRlbnQgPSBvcHRpb25zPy53aXRoQ29udGVudCA9PT0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLm11dGFibGVXYXRjaFF1ZXJ5PExvYWRSZXN1bHQ8RT4sIHsgZmlsdGVyOiBhbnksIHBhZ2U6IFBhZ2UgfT4oe1xuICAgICAgcXVlcnlOYW1lOiB3aXRoQ29udGVudCA/ICdMb2FkQWxsV2l0aENvbnRlbnQnIDogJ0xvYWRBbGwnLFxuICAgICAgcXVlcnk6IHdpdGhDb250ZW50ID8gdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoQ29udGVudCA6IHRoaXMucXVlcmllcy5sb2FkQWxsLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIHBhZ2U6IHtcbiAgICAgICAgICBzb3J0Qnk6ICdjcmVhdGlvbkRhdGUnLFxuICAgICAgICAgIC4uLnBhZ2UsXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHNvcnREaXJlY3Rpb246IChwYWdlLnNvcnREaXJlY3Rpb24gfHwgJ2Rlc2MnKS50b1VwcGVyQ2FzZSgpXG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlcjogZmlsdGVyICYmIGZpbHRlci5hc1BvZE9iamVjdCgpXG4gICAgICB9LFxuICAgICAgYXJyYXlGaWVsZE5hbWU6ICdkYXRhJyxcbiAgICAgIGVycm9yOiB7IGNvZGU6IFNvY2lhbEVycm9yQ29kZXMuTE9BRF9VU0VSX0VWRU5UU19FUlJPUiwgbWVzc2FnZTogJ1NPQ0lBTC5FUlJPUi5MT0FEX1VTRVJfRVZFTlRTX0VSUk9SJyB9LFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdGlvbnM/LmZldGNoUG9saWN5IHx8ICdjYWNoZS1maXJzdCdcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4ge1xuICAgICAgICAgIGxldCBkYXRhID0gKHJlcz8uZGF0YSB8fCBbXSkubWFwKHZhbHVlID0+IHRoaXMucHJvY2Vzc1VzZXJFdmVudCh2YWx1ZSwgdGhpcykpO1xuXG4gICAgICAgICAgaWYgKG5vdykge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9JHtkYXRhLmxlbmd0aH0gdXNlciBldmVudHMgbG9hZGVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgICAgICAgICAgbm93ID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNdXN0IHJlLW9yZGVyIGJlY2F1c2Ugb2YgbGlzdGVuQ2hhbmdlcyByZXN1bHQgd2lsbCBhZGQgbmV3IGV2ZW50IGF0IHRoZSBlbmRcbiAgICAgICAgICBkYXRhID0gRW50aXR5VXRpbHMuc29ydChkYXRhLCBwYWdlLnNvcnRCeSwgcGFnZS5zb3J0RGlyZWN0aW9uKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgdG90YWw6IHRvTnVtYmVyKHJlcz8udG90YWwsIGRhdGEubGVuZ3RoKVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgYWRkKGVudGl0eTogRSkge1xuXG4gICAgLy8gVE9ETyBzZXQgYW4gaWQgISEhISEhISEhISEhISEhISEhISEhISEhIVxuXG4gICAgZW50aXR5ID0gdGhpcy5wcm9jZXNzVXNlckV2ZW50KGVudGl0eSk7XG5cbiAgICBjb25zdCB3aXRoQ29udGVudCA9ICEhZW50aXR5LmNvbnRlbnQ7XG5cbiAgICAvLyBBZGQgdXNlciBldmVudCBsb2NhbGx5XG4gICAgdGhpcy5pbnNlcnRJbnRvTXV0YWJsZUNhY2hlZFF1ZXJpZXMoXG4gICAgICB0aGlzLmdyYXBocWwuY2FjaGUsXG4gICAgICB7XG4gICAgICAgIHF1ZXJ5OiB3aXRoQ29udGVudCA/IHRoaXMucXVlcmllcy5sb2FkQWxsV2l0aENvbnRlbnQgOiB0aGlzLnF1ZXJpZXMubG9hZEFsbCxcbiAgICAgICAgZGF0YTogZW50aXR5XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIFVwZGF0ZSBjb3VudFxuICAgIHRoaXMuY291bnQkLm5leHQodGhpcy5jb3VudCQudmFsdWUgKyAxKTtcbiAgfVxuXG4gIGFzeW5jIGNvdW50KGZpbHRlcjogUGFydGlhbDxGPiwgb3B0aW9ucz86IHsgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTsgfSk6IFByb21pc2U8bnVtYmVyPiB7XG5cbiAgICBpZiAoIXRoaXMucXVlcmllcz8uY291bnQpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLl9sb2dQcmVmaXh9UXVlcnkgJ2NvdW50JyBub3QgcHJvdmlkZWQsIHNraXAuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICghZmlsdGVyKSBmaWx0ZXIgPSB0aGlzLmRlZmF1bHRGaWx0ZXIoKTtcbiAgICAvLyBBcHBseSBsYXN0IHJlc2V0IGRhdGUgYXMgc3RhcnQgZGF0ZVxuICAgIGZpbHRlci5zdGFydERhdGUgPSB0aGlzLnJlc2V0Q291bnREYXRlO1xuICAgIGZpbHRlciA9IHRoaXMuYXNGaWx0ZXIoZmlsdGVyKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9Q291bnRpbmcgdXNlciBldmVudHMgd2l0aCBmaWx0ZXI6YCwgZmlsdGVyKTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTx7IHRvdGFsOiBudW1iZXI7IH0+KHtcbiAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJpZXMuY291bnQsXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIuYXNQb2RPYmplY3QoKVxuICAgICAgfSxcbiAgICAgIGVycm9yOiB7IGNvZGU6IFNvY2lhbEVycm9yQ29kZXMuQ09VTlRfVVNFUl9FVkVOVF9FUlJPUiwgbWVzc2FnZTogJ1NPQ0lBTC5FUlJPUi5DT1VOVF9VU0VSX0VWRU5UX0VSUk9SJyB9LFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdGlvbnM/LmZldGNoUG9saWN5IHx8ICduZXR3b3JrLW9ubHknXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcy50b3RhbDtcbiAgfVxuXG4gIGxpc3RlbkNvdW50Q2hhbmdlcyhmaWx0ZXI6IFBhcnRpYWw8Rj4sIG9wdGlvbnM/OiBXTyAmIHsgaW50ZXJ2YWw/OiBudW1iZXI7IGZldGNoUG9saWN5PzogRmV0Y2hQb2xpY3kgfSk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG5cbiAgICBpZiAoIXRoaXMuc3Vic2NyaXB0aW9ucz8ubGlzdGVuQ291bnRDaGFuZ2VzKSB7XG4gICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5fbG9nUHJlZml4fVN1YnNjcmlwdGlvbiBxdWVyeSAnbGlzdGVuQ291bnRDaGFuZ2VzJyBub3QgcHJvdmlkZWQsIHNraXAuYCk7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG5cbiAgICBpZiAoIWZpbHRlcikgZmlsdGVyID0gdGhpcy5kZWZhdWx0RmlsdGVyKCk7XG4gICAgLy8gQXBwbHkgbGFzdCByZXNldCBkYXRlIGFzIHN0YXJ0IGRhdGVcbiAgICBmaWx0ZXIuc3RhcnREYXRlID0gdGhpcy5yZXNldENvdW50RGF0ZVxuICAgIGZpbHRlciA9IHRoaXMuYXNGaWx0ZXIoZmlsdGVyKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9W1dTXSBMaXN0ZW5pbmcgY291bnQgY2hhbmdlcyBmb3IgdXNlciBldmVudHMgd2l0aCBmaWx0ZXI6YCwgZmlsdGVyKTtcblxuICAgIHJldHVybiB0aGlzLmdyYXBocWwuc3Vic2NyaWJlPHsgdG90YWw6IG51bWJlciB9LCB7IGZpbHRlcjogYW55LCBpbnRlcnZhbDogbnVtYmVyIH0+KHtcbiAgICAgIHF1ZXJ5OiB0aGlzLnN1YnNjcmlwdGlvbnMubGlzdGVuQ291bnRDaGFuZ2VzLFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdGlvbnM/LmZldGNoUG9saWN5LFxuICAgICAgdmFyaWFibGVzOiB7IGZpbHRlcjogZmlsdGVyLmFzUG9kT2JqZWN0KCksIGludGVydmFsOiB0b051bWJlcihvcHRpb25zPy5pbnRlcnZhbCwgMTApIH0sXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBTb2NpYWxFcnJvckNvZGVzLlNVQlNDUklCRV9VU0VSX0VWRU5UU19FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ1NPQ0lBTC5FUlJPUi5TVUJTQ1JJQkVfVVNFUl9FVkVOVFNfRVJST1InXG4gICAgICB9XG4gICAgfSkucGlwZShcbiAgICAgIG1hcCgoeyB0b3RhbCB9KSA9PiB7XG4gICAgICAgICAgaWYgKHRvdGFsICYmIHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1SZWNlaXZlZCBuZXcgdXNlciBldmVudHMgY291bnQ6YCwgdG90YWwpO1xuICAgICAgICAgIC8vIHVwZGF0ZSBjb3VudFxuICAgICAgICAgIHRoaXMuY291bnQkLm5leHQodG90YWwpO1xuICAgICAgICAgIHJldHVybiB0b3RhbDtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG5cbiAgfVxuXG4gIGxpc3RlbkNoYW5nZXMoZmlsdGVyOiBQYXJ0aWFsPEY+LCBvcHRpb25zPzogV08gJiB7IGludGVydmFsPzogbnVtYmVyOyBmZXRjaFBvbGljeT86IEZldGNoUG9saWN5OyB9KTogT2JzZXJ2YWJsZTxFW10+IHtcblxuICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zPy5saXN0ZW5DaGFuZ2VzKSB7XG4gICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5fbG9nUHJlZml4fVN1YnNjcmlwdGlvbiBxdWVyeSAnbGlzdGVuQ2hhbmdlcycgbm90IHByb3ZpZGVkLCBza2lwLmApO1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuXG4gICAgaWYgKCFmaWx0ZXIpIGZpbHRlciA9IHRoaXMuZGVmYXVsdEZpbHRlcigpO1xuICAgIGZpbHRlciA9IHRoaXMuYXNGaWx0ZXIoZmlsdGVyKTtcblxuICAgIGNvbnN0IHdpdGhDb250ZW50ID0gb3B0aW9ucz8ud2l0aENvbnRlbnQgPT09IHRydWU7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVtXU10gTGlzdGVuaW5nIGNoYW5nZXMgZm9yIHVzZXIgZXZlbnRzIHdpdGggZmlsdGVyOmAsIGZpbHRlcik7XG5cbiAgICByZXR1cm4gdGhpcy5ncmFwaHFsLnN1YnNjcmliZTx7IGRhdGE6IGFueVtdIH0sIHsgZmlsdGVyOiBhbnksIGludGVydmFsOiBudW1iZXIgfT4oe1xuICAgICAgcXVlcnk6IHRoaXMuc3Vic2NyaXB0aW9ucy5saXN0ZW5DaGFuZ2VzLFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdGlvbnM/LmZldGNoUG9saWN5LFxuICAgICAgdmFyaWFibGVzOiB7IGZpbHRlcjogZmlsdGVyLmFzUG9kT2JqZWN0KCksIGludGVydmFsOiB0b051bWJlcihvcHRpb25zPy5pbnRlcnZhbCwgMTApIH0sXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBTb2NpYWxFcnJvckNvZGVzLlNVQlNDUklCRV9VU0VSX0VWRU5UU19FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ1NPQ0lBTC5FUlJPUi5TVUJTQ1JJQkVfVVNFUl9FVkVOVFNfRVJST1InXG4gICAgICB9XG4gICAgfSkucGlwZShcbiAgICAgIG1hcCgoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgICBpZiAoZGF0YSAmJiB0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9UmVjZWl2ZWQgbmV3IHVzZXIgZXZlbnRzOmAsIGRhdGEpO1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gZGF0YT8ubWFwKHZhbHVlID0+IHRoaXMucHJvY2Vzc1VzZXJFdmVudCh2YWx1ZSwgdGhpcykpO1xuICAgICAgICAgIC8vIFVwZGF0ZSBjYWNoZVxuICAgICAgICAgIHRoaXMuaW5zZXJ0SW50b011dGFibGVDYWNoZWRRdWVyaWVzKFxuICAgICAgICAgICAgdGhpcy5ncmFwaHFsLmNhY2hlLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBxdWVyeTogd2l0aENvbnRlbnQgPyB0aGlzLnF1ZXJpZXMubG9hZEFsbFdpdGhDb250ZW50IDogdGhpcy5xdWVyaWVzLmxvYWRBbGwsXG4gICAgICAgICAgICAgIGRhdGE6IHVwZGF0ZWREYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlZERhdGE7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuXG4gIH1cblxuICBhc3luYyBkZWxldGUoZW50aXR5OiBFKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAoIWVudGl0eSkgcmV0dXJuOyAvLyBza2lwXG4gICAgYXdhaXQgdGhpcy5kZWxldGVBbGwoW2VudGl0eV0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlQWxsKGVudGl0aWVzOiBFW10sIG9wdHM/OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGlkcyA9IGVudGl0aWVzICYmIGVudGl0aWVzXG4gICAgICAubWFwKHQgPT4gdC5pZCk7XG4gICAgaWYgKGlzRW1wdHlBcnJheShpZHMpKSByZXR1cm47IC8vIHN0b3AsIGlmIG5vdGhpbmcgZWxzZSB0byBkb1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fURlbGV0aW5nIGV2ZW50cy4uLiBpZHM6YCwgaWRzKTtcblxuICAgIGF3YWl0IHRoaXMuZ3JhcGhxbC5tdXRhdGU8YW55Pih7XG4gICAgICBtdXRhdGlvbjogdGhpcy5tdXRhdGlvbnMuZGVsZXRlQnlJZHMsXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaWRzXG4gICAgICB9LFxuICAgICAgdXBkYXRlOiAocHJveHkpID0+IHtcbiAgICAgICAgLy8gUmVtb3ZlIGZyb20gY2FjaGVzXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbU11dGFibGVDYWNoZWRRdWVyaWVzQnlJZHMocHJveHksIHtcbiAgICAgICAgICBxdWVyeTogdGhpcy5xdWVyaWVzLmxvYWRBbGwsXG4gICAgICAgICAgaWRzXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlbW92ZUZyb21NdXRhYmxlQ2FjaGVkUXVlcmllc0J5SWRzKHByb3h5LCB7XG4gICAgICAgICAgcXVlcnk6IHRoaXMucXVlcmllcy5sb2FkQWxsV2l0aENvbnRlbnQsXG4gICAgICAgICAgaWRzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9RXZlbnRzIGRlbGV0ZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzYXZlKGVudGl0eTogRSwgb3B0aW9ucz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyk6IFByb21pc2U8RT4ge1xuICAgIHRoaXMuZmlsbERlZmF1bHRQcm9wZXJ0aWVzKGVudGl0eSk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gaW50byBqc29uXG4gICAgY29uc3Qgd2l0aENvbnRlbnQgPSAhIWVudGl0eS5jb250ZW50O1xuICAgIGNvbnN0IGpzb24gPSBlbnRpdHkuYXNPYmplY3QoKTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1TYXZpbmcgdXNlciBldmVudC4uLmAsIGpzb24pO1xuXG4gICAgYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7IGRhdGE6IGFueSB9Pih7XG4gICAgICBtdXRhdGlvbjogdGhpcy5tdXRhdGlvbnMuc2F2ZSxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBkYXRhOiBqc29uXG4gICAgICB9LFxuICAgICAgZXJyb3I6IHsgY29kZTogU29jaWFsRXJyb3JDb2Rlcy5TQVZFX1VTRVJfRVZFTlRfRVJST1IsIG1lc3NhZ2U6ICdTT0NJQUwuRVJST1IuU0FWRV9VU0VSX0VWRU5UX0VSUk9SJyB9LFxuICAgICAgdXBkYXRlOiAocHJveHksIHsgZGF0YSB9KSA9PiB7XG4gICAgICAgIC8vIFVwZGF0ZSBlbnRpdHlcbiAgICAgICAgY29uc3Qgc2F2ZWRFbnRpdHkgPSBkYXRhICYmIGRhdGEuZGF0YTtcbiAgICAgICAgaWYgKHNhdmVkRW50aXR5KSB7XG4gICAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1Vc2VyIGV2ZW50IHNhdmVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2AsIGVudGl0eSk7XG4gICAgICAgICAgdGhpcy5jb3B5SWRBbmRVcGRhdGVEYXRlKHNhdmVkRW50aXR5LCBlbnRpdHkpO1xuXG4gICAgICAgICAgLy8gQWRkIHRvIGNhY2hlXG4gICAgICAgICAgaWYgKHdpdGhDb250ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydEludG9NdXRhYmxlQ2FjaGVkUXVlcmllcyhwcm94eSwge1xuICAgICAgICAgICAgICBxdWVyeTogdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoQ29udGVudCxcbiAgICAgICAgICAgICAgZGF0YTogc2F2ZWRFbnRpdHlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydEludG9NdXRhYmxlQ2FjaGVkUXVlcmllcyhwcm94eSwge1xuICAgICAgICAgICAgICBxdWVyeTogdGhpcy5xdWVyaWVzLmxvYWRBbGwsXG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAuLi5zYXZlZEVudGl0eSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBudWxsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVudGl0eTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVBbGwoZW50aXRpZXM6IEVbXSwgb3B0cz86IGFueSk6IFByb21pc2U8RVtdPiB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGVudGl0aWVzXG4gICAgICAubWFwKGVudGl0eSA9PiB0aGlzLnNhdmUoZW50aXR5LCBvcHRzKSlcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgbWFya0FzUmVhZChlbnRpdGllczogRVtdKSB7XG5cbiAgICBjb25zdCB1c2VyRXZlbnRXaXRob3V0UmVhZExpc3RlbmVyczogRVtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRpdHkgb2YgKGVudGl0aWVzIHx8IFtdKSkge1xuICAgICAgLy8gR2V0IG9uUmVhZCBsaXN0ZW5lcnNcbiAgICAgIGNvbnN0IG9uUmVhZExpc3RlbmVycyA9ICh0aGlzLmxpc3RlbmVycyB8fCBbXSkuZmlsdGVyKGxpc3RlbmVyID0+ICEhbGlzdGVuZXIub25SZWFkKS5maWx0ZXIobGlzdGVuZXIgPT4gbGlzdGVuZXIuYWNjZXB0KGVudGl0eSkpO1xuICAgICAgaWYgKG9uUmVhZExpc3RlbmVycy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBvblJlYWRMaXN0ZW5lcnMpIHtcbiAgICAgICAgICBhd2FpdCBsaXN0ZW5lci5vblJlYWQoZW50aXR5KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWRkIHRvIHRoaXMgbGlzdCBmb3IgZGVmYXVsdCBvcGVyYXRpb25cbiAgICAgICAgdXNlckV2ZW50V2l0aG91dFJlYWRMaXN0ZW5lcnMucHVzaChlbnRpdHkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVzZSBkZWZhdWx0XG4gICAgYXdhaXQgdGhpcy5kZWZhdWx0TWFya0FzUmVhZCh1c2VyRXZlbnRXaXRob3V0UmVhZExpc3RlbmVycyk7XG4gIH1cblxuICByZWdpc3Rlckxpc3RlbmVyKGxpc3RlbmVyOiBJVXNlckV2ZW50TGlzdGVuZXI8RT4pIHtcbiAgICBpZiAoIXRoaXMubGlzdGVuZXJzKSB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgcmVzZXRDb3VudCgpIHtcbiAgICB0aGlzLmNvdW50JC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5yZXNldENvdW50RGF0ZSA9IG1vbWVudCgpO1xuICAgIC8vIHJlc3RhcnQgbGlzdGVuaW5nIGNvdW50IGNoYW5nZXNcbiAgICB0aGlzLnN0YXJ0TGlzdGVuQ291bnRDaGFuZ2VzKCk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBhc3luYyBvbkxvZ2luKCkge1xuICAgIC8vIEdldCBmaXJzdCBjb3VudFxuICAgIGNvbnN0IGNvdW50ID0gYXdhaXQgdGhpcy5jb3VudCh1bmRlZmluZWQpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9UmVjZWl2aW5nIHVzZXIgZXZlbnRzIGNvdW50YCwgY291bnQpO1xuICAgIC8vIFVwZGF0ZSBjb3VudFxuICAgIHRoaXMuY291bnQkLm5leHQoY291bnQpO1xuXG4gICAgLy8gVGhlbiBsaXN0ZW4gY2hhbmdlc1xuICAgIHRoaXMuc3RhcnRMaXN0ZW5Db3VudENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkxvZ291dCgpIHtcbiAgICB0aGlzLnN0b3BMaXN0ZW5Db3VudENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydExpc3RlbkNvdW50Q2hhbmdlcygpIHtcbiAgICB0aGlzLnN0b3BMaXN0ZW5Db3VudENoYW5nZXMoKTtcbiAgICB0aGlzLl9saXN0ZW5TdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbkNvdW50Q2hhbmdlcyh1bmRlZmluZWQpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0b3BMaXN0ZW5Db3VudENoYW5nZXMoKSB7XG4gICAgdGhpcy5fbGlzdGVuU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2xpc3RlblN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzVXNlckV2ZW50KHNvdXJjZTogYW55LCB0aGF0PzogQWJzdHJhY3RVc2VyRXZlbnRTZXJ2aWNlPEUsIEY+KTogRSB7XG4gICAgdGhhdCA9IHRoYXQgfHwgdGhpcztcblxuICAgIC8vIENvbnZlcnQganNvbiBzb3VyY2UgdG8gSVVzZXJFdmVudFxuICAgIGxldCB0YXJnZXQgPSB0aGF0LmZyb21PYmplY3Qoc291cmNlKTtcblxuICAgIC8vIEdldCBsaXN0ZW5lcnNcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSAodGhhdC5saXN0ZW5lcnMgfHwgW10pLmZpbHRlcihsaXN0ZW5lciA9PiBsaXN0ZW5lci5vblJlY2VpdmVkKS5maWx0ZXIobGlzdGVuZXIgPT4gbGlzdGVuZXIuYWNjZXB0KHRhcmdldCkpO1xuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgbGlzdGVuZXJzKSB7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldCA9IGxpc3RlbmVyLm9uUmVjZWl2ZWQodGFyZ2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGF0Ll9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGF0Ll9sb2dQcmVmaXh9RXZlbnQgaGFzIGJlZW4gcmVqZWN0ZWQgYnkgYSBsaXN0ZW5lcmAsIHNvdXJjZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZGVmYXVsdE1hcmtBc1JlYWQodXNlckV2ZW50czogRVtdKSB7XG4gICAgaWYgKCF1c2VyRXZlbnRzKSB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5fbG9nUHJlZml4fUludmFsaWQgZXZlbnQgdG8gc2F2ZWApO1xuICAgIGlmICghdXNlckV2ZW50cy5sZW5ndGgpIHJldHVybjtcblxuICAgIC8vIHNldCByZWFkIGRhdGVcbiAgICB1c2VyRXZlbnRzLmZvckVhY2godXNlckV2ZW50ID0+IHVzZXJFdmVudC5yZWFkRGF0ZSA9IG1vbWVudCgpKTtcblxuICAgIC8vIHNwbGl0IGxvY2FsL3JlbW90ZSBlbnRpdGllc1xuICAgIGNvbnN0IGxvY2FsRW50aXRpZXMgPSB1c2VyRXZlbnRzLmZpbHRlcih1c2VyRXZlbnQgPT4gIXVzZXJFdmVudC5pZCB8fCB1c2VyRXZlbnQuaWQgPCAwKTtcbiAgICBjb25zdCByZW1vdGVFbnRpdGllcyA9IHVzZXJFdmVudHMuZmlsdGVyKHVzZXJFdmVudCA9PiB1c2VyRXZlbnQuaWQgPiAwKTtcblxuICAgIC8vIHNhdmUgbG9jYWwgZW50aXRpZXNcbiAgICBpZiAobG9jYWxFbnRpdGllcy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9U2F2ZSBsb2NhbCB1c2VyIGV2ZW50YCk7XG4gICAgICAvLyBUT0RPICEhISEhISEhISEhISFcbiAgICB9XG4gICAgLy8gbWFyayByZW1vdGUgZW50aXRpZXMgYXMgcmVhZFxuICAgIGlmIChyZW1vdGVFbnRpdGllcy5sZW5ndGgpIHtcbiAgICAgIGlmICghdGhpcy5tdXRhdGlvbnM/Lm1hcmtBc1JlYWQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAke3RoaXMuX2xvZ1ByZWZpeH1NdXRhdGlvbiBxdWVyeSAnbWFya0FzUmVhZCcgbm90IHByb3ZpZGVkLCBza2lwLmApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENvbGxlY3QgaWRzXG4gICAgICBjb25zdCBpZHMgPSByZW1vdGVFbnRpdGllcy5tYXAodmFsdWUgPT4gdmFsdWUuaWQpO1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9TWFyayB1c2VyIGV2ZW50cyBhcyByZWFkLi4uYCwgaWRzKTtcblxuICAgICAgYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7IGRhdGE6IGFueSB9Pih7XG4gICAgICAgIG11dGF0aW9uOiB0aGlzLm11dGF0aW9ucy5tYXJrQXNSZWFkLFxuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHsgY29kZTogU29jaWFsRXJyb3JDb2Rlcy5TQVZFX1VTRVJfRVZFTlRfRVJST1IsIG1lc3NhZ2U6ICdTT0NJQUwuRVJST1IuU0FWRV9VU0VSX0VWRU5UX0VSUk9SJyB9LFxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9VXNlciBldmVudHMgbWFya2VkIGFzIHJlYWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCwgaWRzKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdEZpbHRlcigpOiBGIHtcbiAgICAvLyBCeSBkZWZhdWx0XG4gICAgcmV0dXJuIDxGPntcbiAgICAgIHJlY2lwaWVudHM6IFt0aGlzLmRlZmF1bHRSZWNpcGllbnQoKV1cbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRSZWNpcGllbnQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5hY2NvdW50U2VydmljZS5wZXJzb24ucHVia2V5O1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbGxEZWZhdWx0UHJvcGVydGllcyhlbnRpdHk6IEUpIHtcbiAgfVxuXG4gIHByb3RlY3RlZCB1bnJlYWRFdmVudHMoZXZlbnRzOiBFW10pOiBudW1iZXIge1xuICAgIC8vIGRlZmF1bHQgY2FsY3VsYXRpb24gb24gdW5yZWFkIGV2ZW50cyBmcm9tIGEgbGlzdFxuICAgIGlmIChpc0VtcHR5QXJyYXkoZXZlbnRzKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBsYXN0UmVhZERhdGUgPSBldmVudHNcbiAgICAgIC5maWx0ZXIoZXZlbnQgPT4gaXNOb3ROaWwoZXZlbnQucmVhZERhdGUpKVxuICAgICAgLnJlZHVjZSgobGFzdERhdGUsIGV2ZW50KSA9PiBEYXRlVXRpbHMubWF4KGxhc3REYXRlLCBldmVudC5yZWFkRGF0ZSksIHVuZGVmaW5lZCBhcyBNb21lbnQpO1xuICAgIHJldHVybiBldmVudHNcbiAgICAgIC5maWx0ZXIoZXZlbnQgPT4gZXZlbnQuY3JlYXRpb25EYXRlLmlzU2FtZU9yQWZ0ZXIobGFzdFJlYWREYXRlKSkubGVuZ3RoO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvcHlJZEFuZFVwZGF0ZURhdGUoc291cmNlOiBFLCB0YXJnZXQ6IEUpIHtcbiAgICBFbnRpdHlVdGlscy5jb3B5SWRBbmRVcGRhdGVEYXRlKHNvdXJjZSwgdGFyZ2V0KTtcbiAgfVxuXG59XG5cblxuY29uc3QgdXNlckV2ZW50UXVlcmllczogSVVzZXJFdmVudFF1ZXJpZXMgPSB7XG4gIGxvYWRBbGw6IGdxbGBcbiAgICBxdWVyeSBVc2VyRXZlbnRzKCRmaWx0ZXI6IFVzZXJFdmVudEZpbHRlclZPSW5wdXQsICRwYWdlOiBQYWdlSW5wdXQpe1xuICAgICAgZGF0YTogdXNlckV2ZW50cyhmaWx0ZXI6ICRmaWx0ZXIsIHBhZ2U6ICRwYWdlKXtcbiAgICAgICAgLi4uTGlnaHRVc2VyRXZlbnRGcmFnbWVudFxuICAgICAgfVxuICAgIH1cbiAgICAke1VzZXJFdmVudEZyYWdtZW50cy5saWdodFVzZXJFdmVudH1cbiAgYCxcblxuICBsb2FkQWxsV2l0aENvbnRlbnQ6IGdxbGBcbiAgICBxdWVyeSBVc2VyRXZlbnRzV2l0aENvbnRlbnQoJGZpbHRlcjogVXNlckV2ZW50RmlsdGVyVk9JbnB1dCwgJHBhZ2U6IFBhZ2VJbnB1dCl7XG4gICAgICBkYXRhOiB1c2VyRXZlbnRzKGZpbHRlcjogJGZpbHRlciwgcGFnZTogJHBhZ2Upe1xuICAgICAgICAuLi5Vc2VyRXZlbnRGcmFnbWVudFxuICAgICAgfVxuICAgIH1cbiAgICAke1VzZXJFdmVudEZyYWdtZW50cy51c2VyRXZlbnR9XG4gIGBcbn07XG5cbmNvbnN0IHVzZXJFdmVudE11dGF0aW9uczogSVVzZXJFdmVudE11dGF0aW9ucyA9IHtcbiAgZGVsZXRlQnlJZHM6IGdxbGBcbiAgICBtdXRhdGlvbiBEZWxldGVVc2VyRXZlbnRzKCRpZHM6W0ludF0pe1xuICAgICAgZGVsZXRlVXNlckV2ZW50cyhpZHM6ICRpZHMpXG4gICAgfVxuICBgLFxuXG4gIHNhdmU6IGdxbGBcbiAgICBtdXRhdGlvbiBTYXZlVXNlckV2ZW50KCRkYXRhOiBVc2VyRXZlbnRWT0lucHV0KXtcbiAgICAgIGRhdGE6IHNhdmVVc2VyRXZlbnQodXNlckV2ZW50OiAkZGF0YSl7XG4gICAgICAgIC4uLlVzZXJFdmVudEZyYWdtZW50XG4gICAgICB9XG4gICAgfVxuICAgICR7VXNlckV2ZW50RnJhZ21lbnRzLnVzZXJFdmVudH1cbiAgYFxufTtcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVXNlckV2ZW50U2VydmljZVxuICBleHRlbmRzIEFic3RyYWN0VXNlckV2ZW50U2VydmljZTxVc2VyRXZlbnQsIFVzZXJFdmVudEZpbHRlcj4ge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBncmFwaHFsOiBHcmFwaHFsU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBuZXR3b3JrOiBOZXR3b3JrU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlcixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50XG4gICkge1xuICAgIHN1cGVyKGdyYXBocWwsIGFjY291bnRTZXJ2aWNlLCBuZXR3b3JrLCB0cmFuc2xhdGUsIHtcbiAgICAgIHF1ZXJpZXM6IHVzZXJFdmVudFF1ZXJpZXMsXG4gICAgICBtdXRhdGlvbnM6IHVzZXJFdmVudE11dGF0aW9ucyxcbiAgICAgIHByb2R1Y3Rpb246IGVudmlyb25tZW50Py5wcm9kdWN0aW9uXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzaG93VG9hc3RFcnJvcldpdGhDb250ZXh0KG9wdHM6IHtcbiAgICBlcnJvcj86IGFueTtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIGNvbnRleHQ6IGFueSB8ICgoKSA9PiBhbnkpIHwgUHJvbWlzZTxhbnk+O1xuICB9KSB7XG5cbiAgICBsZXQgbWVzc2FnZSA9IG9wdHMubWVzc2FnZSB8fCAob3B0cy5lcnJvciAmJiBvcHRzLmVycm9yLm1lc3NhZ2UgfHwgb3B0cy5lcnJvcik7XG5cbiAgICAvLyBNYWtlIHN1cmUgbWVzc2FnZSBhIHN0cmluZ1xuICAgIGlmICghbWVzc2FnZSB8fCB0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIG1lc3NhZ2UgPSAnRVJST1IuVU5LTk9XTl9URUNITklDQUxfRVJST1InO1xuICAgIH1cblxuICAgIC8vIElmIG9mZmxpbmUsIGRpc3BsYXkgYSBzaW1wbGUgYWxlcnRcbiAgICBpZiAodGhpcy5uZXR3b3JrLm9mZmxpbmUpIHtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KHsgbWVzc2FnZSwgdHlwZTogJ2Vycm9yJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUcmFuc2xhdGUgdGhlIG1lc3NhZ2UgKHRvIGJlIGFibGUgdG8gZXh0cmFjdCBkZXRhaWxzIGNvbnRlbnQpXG4gICAgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQobWVzc2FnZSk7XG5cbiAgICAvLyBDbGVhbiBkZXRhaWxzIHBhcnRzXG4gICAgaWYgKG1lc3NhZ2UgJiYgbWVzc2FnZS5pbmRleE9mKCc8c21hbGw+JykgIT09IC0xKSB7XG4gICAgICBtZXNzYWdlID0gbWVzc2FnZS5zdWJzdHIoMCwgbWVzc2FnZS5pbmRleE9mKCc8c21hbGw+JykgLSAxKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgZHVyYXRpb246IDE1MDAwLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZSArICc8YnIvPjxici8+PGI+JyArIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ0NPTkZJUk0uU0VORF9ERUJVR19EQVRBJykgKyAnPC9iPicsXG4gICAgICBidXR0b25zOiBbe1xuICAgICAgICBpY29uOiAnYnVnJyxcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnQ09NTU9OLkJUTl9TRU5EJyksXG4gICAgICAgIHJvbGU6ICdzZW5kJ1xuICAgICAgfV1cbiAgICB9KTtcbiAgICBpZiAoIXJlcyB8fCByZXMucm9sZSAhPT0gJ3NlbmQnKSByZXR1cm47XG5cbiAgICAvLyBTZW5kIGRlYnVnIGRhdGFcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdTZW5kaW5nIGRlYnVnIGRhdGEuLi4nKTtcblxuICAgICAgLy8gQ2FsbCBjb250ZW50IGZhY3RvcnlcbiAgICAgIGxldCBjb250ZXh0OiBhbnkgPSBvcHRzICYmIG9wdHMuY29udGV4dDtcbiAgICAgIGlmICh0eXBlb2YgY29udGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb250ZXh0ID0gY29udGV4dCgpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRleHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIGNvbnRleHQgPSBhd2FpdCBjb250ZXh0O1xuICAgICAgfVxuXG4gICAgICAvLyBTZW5kIHRoZSBtZXNzYWdlXG4gICAgICBjb25zdCB1c2VyRXZlbnQgPSBhd2FpdCB0aGlzLnNlbmREYXRhRm9yRGVidWcoe1xuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBlcnJvcjogb3B0cy5lcnJvciB8fCB1bmRlZmluZWQsXG4gICAgICAgIGNvbnRleHQ6IHRoaXMuY29udmVydE9iamVjdFRvU3RyaW5nKGNvbnRleHQpXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5pbmZvKCdEZWJ1ZyBkYXRhIHN1Y2Nlc3NmdWxseSBzZW50IHRvIGFkbWluJywgdXNlckV2ZW50KTtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KHtcbiAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICBtZXNzYWdlOiAnSU5GTy5ERUJVR19EQVRBX1NFTkQnLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWVcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgc2VuZGluZyBkZWJ1ZyBkYXRhOicsIGVycik7XG4gICAgfVxuICB9XG5cbiAgc2VuZERhdGFGb3JEZWJ1ZyhkYXRhOiBhbnkpOiBQcm9taXNlPFVzZXJFdmVudD4ge1xuICAgIGNvbnN0IHVzZXJFdmVudCA9IG5ldyBVc2VyRXZlbnQoKTtcbiAgICB1c2VyRXZlbnQudHlwZSA9IFVzZXJFdmVudFR5cGVzLkRFQlVHX0RBVEE7XG4gICAgdXNlckV2ZW50LmNvbnRlbnQgPSB0aGlzLmNvbnZlcnRPYmplY3RUb1N0cmluZyhkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5zYXZlKHVzZXJFdmVudCk7XG4gIH1cblxuICBhc0ZpbHRlcihmaWx0ZXI6IFBhcnRpYWw8VXNlckV2ZW50RmlsdGVyPik6IFVzZXJFdmVudEZpbHRlciB7XG4gICAgcmV0dXJuIFVzZXJFdmVudEZpbHRlci5mcm9tT2JqZWN0KGZpbHRlcik7XG4gIH1cblxuICBmcm9tT2JqZWN0KHNvdXJjZTogYW55KTogVXNlckV2ZW50IHtcbiAgICByZXR1cm4gVXNlckV2ZW50LmZyb21PYmplY3Qoc291cmNlKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGNvbnZlcnRPYmplY3RUb1N0cmluZyhkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICAvLyBTZXJpYWxpemUgY29udGVudCBpbnRvIHN0cmluZ1xuICAgIGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBFbnRpdHkpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEuYXNPYmplY3QoeyBrZWVwVHlwZW5hbWU6IHRydWUsIGtlZXBMb2NhbElkOiB0cnVlLCBtaW5pZnk6IGZhbHNlIH0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2hvd1RvYXN0PFQgPSBhbnk+KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpOiBQcm9taXNlPE92ZXJsYXlFdmVudERldGFpbDxUPj4ge1xuICAgIGlmICghdGhpcy50b2FzdENvbnRyb2xsZXIpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB0b2FzdENvbnRyb2xsZXIgaW4gY29tcG9uZW50XFwncyBjb25zdHJ1Y3RvcicpO1xuICAgIHJldHVybiBhd2FpdCBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbGxEZWZhdWx0UHJvcGVydGllcyhlbnRpdHk6IFVzZXJFdmVudCkge1xuICAgIGVudGl0eS5pc3N1ZXIgPSB0aGlzLmFjY291bnRTZXJ2aWNlLmFjY291bnQucHVia2V5O1xuXG4gICAgLy8gVE9ETzogY29tcHV0ZSBoYXNoICh1c2luZyBjcnlwdG9TZXJ2aWNlKVxuICAgIC8vIFRPRE86IGNvbXB1dGUgc2lnblxuICAgIGNvbnNvbGUud2FybignVE9ETzogc2lnbiB1c2VyIGV2ZW50IGJlZm9yZSBzZW5kaW5nJyk7XG4gIH1cblxufVxuIl19
|
|
436
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ldmVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zb2NpYWwvdXNlci1ldmVudC91c2VyLWV2ZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsY0FBYyxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRW5FLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFDLGVBQWUsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUkxRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3hFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRSxPQUFPLEVBQUMsa0JBQWtCLEVBQTRCLE1BQU0sZ0RBQWdELENBQUM7QUFDN0csT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEtBQUssY0FBYyxNQUFNLFFBQVEsQ0FBQztBQUl6QyxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUM7QUFFOUIsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQThCLGtCQUFrQixDQUFDLENBQUM7QUFr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LENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsU0FBbUIsQ0FBQyxDQUFDO1FBQzdGLE9BQU8sTUFBTTthQUNWLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVFLENBQUM7SUFFUyxtQkFBbUIsQ0FBQyxNQUFTLEVBQUUsTUFBUztRQUNoRCxXQUFXLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELENBQUM7OztZQXBlRixTQUFTOzs7WUFuRkYsY0FBYztZQURkLGNBQWM7WUFTZCxjQUFjO1lBRGQsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEluamVjdGlvblRva2VuLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGZXRjaFBvbGljeX0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQge1NvY2lhbEVycm9yQ29kZXN9IGZyb20gJy4uL3NvY2lhbC5lcnJvcnMnO1xuaW1wb3J0IHtBY2NvdW50U2VydmljZX0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHtHcmFwaHFsU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZS9ncmFwaHFsL2dyYXBocWwuc2VydmljZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtJVXNlckV2ZW50LCBJVXNlckV2ZW50RmlsdGVyfSBmcm9tICcuL3VzZXItZXZlbnQubW9kZWwnO1xuaW1wb3J0IHtTb3J0RGlyZWN0aW9ufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7RW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zLCBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMsIElFbnRpdGllc1NlcnZpY2UsIExvYWRSZXN1bHQsIFBhZ2V9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIG1lcmdlTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge2lzRW1wdHlBcnJheSwgaXNOb3ROaWwsIHRvTnVtYmVyfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge05ldHdvcmtTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZSc7XG5pbXBvcnQge0Jhc2VHcmFwaHFsU2VydmljZSwgQmFzZUdyYXBocWxTZXJ2aWNlT3B0aW9uc30gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9iYXNlLWdyYXBocWwtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge0VudGl0eVV0aWxzfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQge0RhdGVVdGlsc30gZnJvbSAnLi4vLi4vc2hhcmVkL2RhdGVzJztcbmltcG9ydCAqIGFzIG1vbWVudEltcG9ydGVkIGZyb20gJ21vbWVudCc7XG5pbXBvcnQge01vbWVudH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7SVN0YXJ0YWJsZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtc2VydmljZS5jbGFzcyc7XG5cbmNvbnN0IG1vbWVudCA9IG1vbWVudEltcG9ydGVkO1xuXG5leHBvcnQgY29uc3QgVVNFUl9FVkVOVF9TRVJWSUNFID0gbmV3IEluamVjdGlvblRva2VuPElVc2VyRXZlbnRTZXJ2aWNlPGFueSwgYW55Pj4oJ1VzZXJFdmVudFNlcnZpY2UnKTtcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFVzZXJFdmVudFdhdGNoT3B0aW9ucyBleHRlbmRzIEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyB7XG4gIHdpdGhDb250ZW50PzogYm9vbGVhbjsgLy8gRGVmYXVsdCB0byBmYWxzZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyRXZlbnRRdWVyaWVzIHtcbiAgbG9hZEFsbDogYW55O1xuICBsb2FkQWxsV2l0aENvbnRlbnQ6IGFueTtcbiAgY291bnQ/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXJFdmVudE11dGF0aW9ucyB7XG4gIHNhdmU6IGFueTtcbiAgbWFya0FzUmVhZD86IGFueTtcbiAgZGVsZXRlQnlJZHM6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVXNlckV2ZW50U3Vic2NyaXB0aW9ucyB7XG4gIGxpc3RlbkNoYW5nZXM6IGFueTtcbiAgbGlzdGVuQ291bnRDaGFuZ2VzPzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyRXZlbnRMaXN0ZW5lcjxFIGV4dGVuZHMgSVVzZXJFdmVudDxFPj4ge1xuICBhY2NlcHQ6IChFKSA9PiBib29sZWFuO1xuICBvblJlY2VpdmVkPzogKEUpID0+IEUgfCB1bmRlZmluZWQ7XG4gIG9uUmVhZD86IChFKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyRXZlbnRTZXJ2aWNlT3B0aW9uczxcbiAgUSBleHRlbmRzIElVc2VyRXZlbnRRdWVyaWVzID0gSVVzZXJFdmVudFF1ZXJpZXMsXG4gIE0gZXh0ZW5kcyBJVXNlckV2ZW50TXV0YXRpb25zID0gSVVzZXJFdmVudE11dGF0aW9ucyxcbiAgUyBleHRlbmRzIElVc2VyRXZlbnRTdWJzY3JpcHRpb25zID0gSVVzZXJFdmVudFN1YnNjcmlwdGlvbnNcbiAgPiBleHRlbmRzIEJhc2VHcmFwaHFsU2VydmljZU9wdGlvbnMge1xuICBxdWVyaWVzOiBRO1xuICBtdXRhdGlvbnM/OiBQYXJ0aWFsPE0+O1xuICBzdWJzY3JpcHRpb25zPzogUGFydGlhbDxTPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVXNlckV2ZW50U2VydmljZTxFIGV4dGVuZHMgSVVzZXJFdmVudDxFPixcbiAgRiBleHRlbmRzIElVc2VyRXZlbnRGaWx0ZXI8RT4sXG4gIFdPIGV4dGVuZHMgVXNlckV2ZW50V2F0Y2hPcHRpb25zID0gVXNlckV2ZW50V2F0Y2hPcHRpb25zPlxuICBleHRlbmRzIElFbnRpdGllc1NlcnZpY2U8RSwgRiwgV08+LCBJU3RhcnRhYmxlU2VydmljZSB7XG5cbiAgdXNlckV2ZW50Q291bnQ6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICBhZGQoZW50aXR5OiBFKTtcblxuICBjb3VudChmaWx0ZXI6IFBhcnRpYWw8Rj4sIG9wdGlvbnM/OiB7IGZldGNoUG9saWN5PzogRmV0Y2hQb2xpY3k7IH0pOiBQcm9taXNlPG51bWJlcj47XG5cbiAgbGlzdGVuQ291bnRDaGFuZ2VzKGZpbHRlcjogUGFydGlhbDxGPiwgb3B0aW9ucz86IFdPICYgeyBpbnRlcnZhbD86IG51bWJlcjsgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTsgfSk6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICBsaXN0ZW5DaGFuZ2VzKGZpbHRlcjogUGFydGlhbDxGPiwgb3B0aW9ucz86IFdPICYgeyBpbnRlcnZhbD86IG51bWJlcjsgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeTsgfSk6IE9ic2VydmFibGU8RVtdPjtcblxuICBzYXZlKGVudGl0eTogRSwgb3B0aW9ucz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyk6IFByb21pc2U8RT47XG5cbiAgZGVsZXRlKGVudGl0eTogRSk6IFByb21pc2U8YW55PjtcblxuICBtYXJrQXNSZWFkKGVudGl0aWVzOiBFW10pO1xuXG4gIHJlZ2lzdGVyTGlzdGVuZXIobGlzdGVuZXI6IElVc2VyRXZlbnRMaXN0ZW5lcjxFPik7XG5cbiAgcmVzZXRDb3VudCgpO1xufVxuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFVzZXJFdmVudFNlcnZpY2U8RSBleHRlbmRzIElVc2VyRXZlbnQ8RSwgYW55PixcbiAgRiBleHRlbmRzIElVc2VyRXZlbnRGaWx0ZXI8RSwgYW55PixcbiAgV08gZXh0ZW5kcyBVc2VyRXZlbnRXYXRjaE9wdGlvbnMgPSBVc2VyRXZlbnRXYXRjaE9wdGlvbnMsXG4gIFEgZXh0ZW5kcyBJVXNlckV2ZW50UXVlcmllcyA9IElVc2VyRXZlbnRRdWVyaWVzLFxuICBNIGV4dGVuZHMgSVVzZXJFdmVudE11dGF0aW9ucyA9IElVc2VyRXZlbnRNdXRhdGlvbnMsXG4gIFMgZXh0ZW5kcyBJVXNlckV2ZW50U3Vic2NyaXB0aW9ucyA9IElVc2VyRXZlbnRTdWJzY3JpcHRpb25zXG4gID5cbiAgZXh0ZW5kcyBCYXNlR3JhcGhxbFNlcnZpY2U8RSwgRj5cbiAgaW1wbGVtZW50cyBJVXNlckV2ZW50U2VydmljZTxFLCBGLCBXTz4sIE9uRGVzdHJveSB7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHF1ZXJpZXM6IFE7XG4gIHByb3RlY3RlZCByZWFkb25seSBtdXRhdGlvbnM6IFBhcnRpYWw8TT47XG4gIHByb3RlY3RlZCByZWFkb25seSBzdWJzY3JpcHRpb25zOiBQYXJ0aWFsPFM+O1xuICBwcm90ZWN0ZWQgY291bnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgcmVzZXRDb3VudERhdGU6IE1vbWVudDtcbiAgcHJvdGVjdGVkIGxpc3RlbmVyczogSVVzZXJFdmVudExpc3RlbmVyPEU+W10gPSBbXTtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfbGlzdGVuU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgZ2V0IHVzZXJFdmVudENvdW50KCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuY291bnQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBncmFwaHFsOiBHcmFwaHFsU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBuZXR3b3JrOiBOZXR3b3JrU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBvcHRpb25zOiBVc2VyRXZlbnRTZXJ2aWNlT3B0aW9uczxRLCBNLCBTPlxuICApIHtcbiAgICBzdXBlcihncmFwaHFsLCBvcHRpb25zKTtcbiAgICB0aGlzLnF1ZXJpZXMgPSBvcHRpb25zLnF1ZXJpZXM7XG4gICAgdGhpcy5tdXRhdGlvbnMgPSBvcHRpb25zLm11dGF0aW9ucyB8fCA8UGFydGlhbDxNPj57fTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBvcHRpb25zLnN1YnNjcmlwdGlvbnMgfHwgPFBhcnRpYWw8Uz4+e307XG4gICAgdGhpcy5fbG9nUHJlZml4ID0gJ1t1c2VyLWV2ZW50LXNlcnZpY2VdICc7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuXG4gICAgLy8gVXBkYXRlIGNvbXBvbmVudCB3aGVuIHJlZnJlc2ggaXMgbmVlZCAoPWxvZ2luIGV2ZW50cylcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIG1lcmdlKFxuICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9naW4sXG4gICAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dvdXQsXG4gICAgICAgIG9mKCkgLy8gU3RhcnRzIHdpdGggLSAgZmlyc3QgYXR0ZW1wdCBpZiBhY2NvdW50IGlzIHJlYWR5XG4gICAgICApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vIFdhaXQgYWNjb3VudCBzZXJ2aWNlIHJlYWR5IChjYW4gYmUgcmVzdGFydGVkKVxuICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuYWNjb3VudFNlcnZpY2UucmVhZHkoKSksXG4gICAgICAgICAgbWFwKCgpID0+IHRoaXMuYWNjb3VudFNlcnZpY2UuaXNMb2dpbigpKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShsb2dpbiA9PiB7XG4gICAgICAgICAgaWYgKGxvZ2luKSB7XG4gICAgICAgICAgICB0aGlzLm9uTG9naW4oKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbkxvZ291dCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYWJzdHJhY3QgYXNGaWx0ZXIoZmlsdGVyOiBQYXJ0aWFsPEY+KTogRjtcblxuICBhYnN0cmFjdCBmcm9tT2JqZWN0KHNvdXJjZTogYW55KTogRTtcblxuICB3YXRjaEFsbChvZmZzZXQ6IG51bWJlciwgc2l6ZTogbnVtYmVyLCBzb3J0Qnk/OiBzdHJpbmcsIHNvcnREaXJlY3Rpb24/OiBTb3J0RGlyZWN0aW9uLCBmaWx0ZXI/OiBQYXJ0aWFsPEY+LCBvcHRpb25zPzogV08pOiBPYnNlcnZhYmxlPExvYWRSZXN1bHQ8RT4+IHtcbiAgICByZXR1cm4gdGhpcy53YXRjaFBhZ2UoPFBhZ2U+eyBvZmZzZXQsIHNpemUsIHNvcnRCeSwgc29ydERpcmVjdGlvbiB9LCBmaWx0ZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgd2F0Y2hQYWdlKHBhZ2U6IFBhZ2UsXG4gICAgICAgICAgICBmaWx0ZXI/OiBQYXJ0aWFsPEY+LFxuICAgICAgICAgICAgb3B0aW9ucz86IFdPKTogT2JzZXJ2YWJsZTxMb2FkUmVzdWx0PEU+PiB7XG5cbiAgICBsZXQgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcbiAgICBpZiAoIWZpbHRlcikge1xuICAgICAgZmlsdGVyID0gdGhpcy5kZWZhdWx0RmlsdGVyKCk7XG4gICAgfVxuICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fUxvYWRpbmcgdXNlciBldmVudHMuLi5gLCBmaWx0ZXIpO1xuXG4gICAgZmlsdGVyID0gdGhpcy5hc0ZpbHRlcihmaWx0ZXIpO1xuXG4gICAgLy8gRm9yY2UgcmVjaXBpZW50IHRvIGN1cnJlbnQgaXNzdWVyLCBpZiBub3QgYWRtaW4gYW5kIG5vdCBzcGVjaWZpZWRcbiAgICBpZiAoaXNFbXB0eUFycmF5KGZpbHRlcj8ucmVjaXBpZW50cykgfHwgIXRoaXMuYWNjb3VudFNlcnZpY2UuaXNBZG1pbigpKSB7XG4gICAgICBjb25zdCByZWNpcGllbnQgPSB0aGlzLmRlZmF1bHRSZWNpcGllbnQoKTtcbiAgICAgIGlmICghZmlsdGVyPy5yZWNpcGllbnRzPy5pbmNsdWRlcyhyZWNpcGllbnQpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3VzZXItZXZlbnRzLXNlcnZpY2VdIEZvcmNlIHVzZXIgZXZlbnQgZmlsdGVyLnJlY2lwaWVudD0nICsgcmVjaXBpZW50KTtcbiAgICAgICAgZmlsdGVyLnJlY2lwaWVudHMgPSBbcmVjaXBpZW50XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3aXRoQ29udGVudCA9IG9wdGlvbnM/LndpdGhDb250ZW50ID09PSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMubXV0YWJsZVdhdGNoUXVlcnk8TG9hZFJlc3VsdDxFPiwgeyBmaWx0ZXI6IGFueSwgcGFnZTogUGFnZSB9Pih7XG4gICAgICBxdWVyeU5hbWU6IHdpdGhDb250ZW50ID8gJ0xvYWRBbGxXaXRoQ29udGVudCcgOiAnTG9hZEFsbCcsXG4gICAgICBxdWVyeTogd2l0aENvbnRlbnQgPyB0aGlzLnF1ZXJpZXMubG9hZEFsbFdpdGhDb250ZW50IDogdGhpcy5xdWVyaWVzLmxvYWRBbGwsXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgcGFnZToge1xuICAgICAgICAgIHNvcnRCeTogJ2NyZWF0aW9uRGF0ZScsXG4gICAgICAgICAgLi4ucGFnZSxcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgc29ydERpcmVjdGlvbjogKHBhZ2Uuc29ydERpcmVjdGlvbiB8fCAnZGVzYycpLnRvVXBwZXJDYXNlKClcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIgJiYgZmlsdGVyLmFzUG9kT2JqZWN0KClcbiAgICAgIH0sXG4gICAgICBhcnJheUZpZWxkTmFtZTogJ2RhdGEnLFxuICAgICAgZXJyb3I6IHsgY29kZTogU29jaWFsRXJyb3JDb2Rlcy5MT0FEX1VTRVJfRVZFTlRTX0VSUk9SLCBtZXNzYWdlOiAnU09DSUFMLkVSUk9SLkxPQURfVVNFUl9FVkVOVFNfRVJST1InIH0sXG4gICAgICBmZXRjaFBvbGljeTogb3B0aW9ucz8uZmV0Y2hQb2xpY3kgfHwgJ2NhY2hlLWZpcnN0J1xuICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiB7XG4gICAgICAgICAgbGV0IGRhdGEgPSAocmVzPy5kYXRhIHx8IFtdKS5tYXAodmFsdWUgPT4gdGhpcy5wcm9jZXNzVXNlckV2ZW50KHZhbHVlLCB0aGlzKSk7XG5cbiAgICAgICAgICBpZiAobm93KSB7XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH0ke2RhdGEubGVuZ3RofSB1c2VyIGV2ZW50cyBsb2FkZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gICAgICAgICAgICBub3cgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE11c3QgcmUtb3JkZXIgYmVjYXVzZSBvZiBsaXN0ZW5DaGFuZ2VzIHJlc3VsdCB3aWxsIGFkZCBuZXcgZXZlbnQgYXQgdGhlIGVuZFxuICAgICAgICAgIGRhdGEgPSBFbnRpdHlVdGlscy5zb3J0KGRhdGEsIHBhZ2Uuc29ydEJ5LCBwYWdlLnNvcnREaXJlY3Rpb24pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB0b3RhbDogdG9OdW1iZXIocmVzPy50b3RhbCwgZGF0YS5sZW5ndGgpXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBhZGQoZW50aXR5OiBFKSB7XG5cbiAgICAvLyBUT0RPIHNldCBhbiBpZCAhISEhISEhISEhISEhISEhISEhISEhISEhXG5cbiAgICBlbnRpdHkgPSB0aGlzLnByb2Nlc3NVc2VyRXZlbnQoZW50aXR5KTtcblxuICAgIGNvbnN0IHdpdGhDb250ZW50ID0gISFlbnRpdHkuY29udGVudDtcblxuICAgIC8vIEFkZCB1c2VyIGV2ZW50IGxvY2FsbHlcbiAgICB0aGlzLmluc2VydEludG9NdXRhYmxlQ2FjaGVkUXVlcmllcyhcbiAgICAgIHRoaXMuZ3JhcGhxbC5jYWNoZSxcbiAgICAgIHtcbiAgICAgICAgcXVlcnk6IHdpdGhDb250ZW50ID8gdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoQ29udGVudCA6IHRoaXMucXVlcmllcy5sb2FkQWxsLFxuICAgICAgICBkYXRhOiBlbnRpdHlcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVXBkYXRlIGNvdW50XG4gICAgdGhpcy5jb3VudCQubmV4dCh0aGlzLmNvdW50JC52YWx1ZSArIDEpO1xuICB9XG5cbiAgYXN5bmMgY291bnQoZmlsdGVyOiBQYXJ0aWFsPEY+LCBvcHRpb25zPzogeyBmZXRjaFBvbGljeT86IEZldGNoUG9saWN5OyB9KTogUHJvbWlzZTxudW1iZXI+IHtcblxuICAgIGlmICghdGhpcy5xdWVyaWVzPy5jb3VudCkge1xuICAgICAgY29uc29sZS53YXJuKGAke3RoaXMuX2xvZ1ByZWZpeH1RdWVyeSAnY291bnQnIG5vdCBwcm92aWRlZCwgc2tpcC5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFmaWx0ZXIpIGZpbHRlciA9IHRoaXMuZGVmYXVsdEZpbHRlcigpO1xuICAgIC8vIEFwcGx5IGxhc3QgcmVzZXQgZGF0ZSBhcyBzdGFydCBkYXRlXG4gICAgZmlsdGVyLnN0YXJ0RGF0ZSA9IHRoaXMucmVzZXRDb3VudERhdGU7XG4gICAgZmlsdGVyID0gdGhpcy5hc0ZpbHRlcihmaWx0ZXIpO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1Db3VudGluZyB1c2VyIGV2ZW50cyB3aXRoIGZpbHRlcjpgLCBmaWx0ZXIpO1xuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PHsgdG90YWw6IG51bWJlcjsgfT4oe1xuICAgICAgcXVlcnk6IHRoaXMucXVlcmllcy5jb3VudCxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBmaWx0ZXI6IGZpbHRlci5hc1BvZE9iamVjdCgpXG4gICAgICB9LFxuICAgICAgZXJyb3I6IHsgY29kZTogU29jaWFsRXJyb3JDb2Rlcy5DT1VOVF9VU0VSX0VWRU5UX0VSUk9SLCBtZXNzYWdlOiAnU09DSUFMLkVSUk9SLkNPVU5UX1VTRVJfRVZFTlRfRVJST1InIH0sXG4gICAgICBmZXRjaFBvbGljeTogb3B0aW9ucz8uZmV0Y2hQb2xpY3kgfHwgJ25ldHdvcmstb25seSdcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzLnRvdGFsO1xuICB9XG5cbiAgbGlzdGVuQ291bnRDaGFuZ2VzKGZpbHRlcjogUGFydGlhbDxGPiwgb3B0aW9ucz86IFdPICYgeyBpbnRlcnZhbD86IG51bWJlcjsgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeSB9KTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcblxuICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb25zPy5saXN0ZW5Db3VudENoYW5nZXMpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLl9sb2dQcmVmaXh9U3Vic2NyaXB0aW9uIHF1ZXJ5ICdsaXN0ZW5Db3VudENoYW5nZXMnIG5vdCBwcm92aWRlZCwgc2tpcC5gKTtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cblxuICAgIGlmICghZmlsdGVyKSBmaWx0ZXIgPSB0aGlzLmRlZmF1bHRGaWx0ZXIoKTtcbiAgICAvLyBBcHBseSBsYXN0IHJlc2V0IGRhdGUgYXMgc3RhcnQgZGF0ZVxuICAgIGZpbHRlci5zdGFydERhdGUgPSB0aGlzLnJlc2V0Q291bnREYXRlXG4gICAgZmlsdGVyID0gdGhpcy5hc0ZpbHRlcihmaWx0ZXIpO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1bV1NdIExpc3RlbmluZyBjb3VudCBjaGFuZ2VzIGZvciB1c2VyIGV2ZW50cyB3aXRoIGZpbHRlcjpgLCBmaWx0ZXIpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ3JhcGhxbC5zdWJzY3JpYmU8eyB0b3RhbDogbnVtYmVyIH0sIHsgZmlsdGVyOiBhbnksIGludGVydmFsOiBudW1iZXIgfT4oe1xuICAgICAgcXVlcnk6IHRoaXMuc3Vic2NyaXB0aW9ucy5saXN0ZW5Db3VudENoYW5nZXMsXG4gICAgICBmZXRjaFBvbGljeTogb3B0aW9ucz8uZmV0Y2hQb2xpY3ksXG4gICAgICB2YXJpYWJsZXM6IHsgZmlsdGVyOiBmaWx0ZXIuYXNQb2RPYmplY3QoKSwgaW50ZXJ2YWw6IHRvTnVtYmVyKG9wdGlvbnM/LmludGVydmFsLCAxMCkgfSxcbiAgICAgIGVycm9yOiB7XG4gICAgICAgIGNvZGU6IFNvY2lhbEVycm9yQ29kZXMuU1VCU0NSSUJFX1VTRVJfRVZFTlRTX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnU09DSUFMLkVSUk9SLlNVQlNDUklCRV9VU0VSX0VWRU5UU19FUlJPUidcbiAgICAgIH1cbiAgICB9KS5waXBlKFxuICAgICAgbWFwKCh7IHRvdGFsIH0pID0+IHtcbiAgICAgICAgICBpZiAodG90YWwgJiYgdGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVJlY2VpdmVkIG5ldyB1c2VyIGV2ZW50cyBjb3VudDpgLCB0b3RhbCk7XG4gICAgICAgICAgLy8gdXBkYXRlIGNvdW50XG4gICAgICAgICAgdGhpcy5jb3VudCQubmV4dCh0b3RhbCk7XG4gICAgICAgICAgcmV0dXJuIHRvdGFsO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcblxuICB9XG5cbiAgbGlzdGVuQ2hhbmdlcyhmaWx0ZXI6IFBhcnRpYWw8Rj4sIG9wdGlvbnM/OiBXTyAmIHsgaW50ZXJ2YWw/OiBudW1iZXI7IGZldGNoUG9saWN5PzogRmV0Y2hQb2xpY3k7IH0pOiBPYnNlcnZhYmxlPEVbXT4ge1xuXG4gICAgaWYgKCF0aGlzLnN1YnNjcmlwdGlvbnM/Lmxpc3RlbkNoYW5nZXMpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLl9sb2dQcmVmaXh9U3Vic2NyaXB0aW9uIHF1ZXJ5ICdsaXN0ZW5DaGFuZ2VzJyBub3QgcHJvdmlkZWQsIHNraXAuYCk7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG5cbiAgICBpZiAoIWZpbHRlcikgZmlsdGVyID0gdGhpcy5kZWZhdWx0RmlsdGVyKCk7XG4gICAgZmlsdGVyID0gdGhpcy5hc0ZpbHRlcihmaWx0ZXIpO1xuXG4gICAgY29uc3Qgd2l0aENvbnRlbnQgPSBvcHRpb25zPy53aXRoQ29udGVudCA9PT0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9W1dTXSBMaXN0ZW5pbmcgY2hhbmdlcyBmb3IgdXNlciBldmVudHMgd2l0aCBmaWx0ZXI6YCwgZmlsdGVyKTtcblxuICAgIHJldHVybiB0aGlzLmdyYXBocWwuc3Vic2NyaWJlPHsgZGF0YTogYW55W10gfSwgeyBmaWx0ZXI6IGFueSwgaW50ZXJ2YWw6IG51bWJlciB9Pih7XG4gICAgICBxdWVyeTogdGhpcy5zdWJzY3JpcHRpb25zLmxpc3RlbkNoYW5nZXMsXG4gICAgICBmZXRjaFBvbGljeTogb3B0aW9ucz8uZmV0Y2hQb2xpY3ksXG4gICAgICB2YXJpYWJsZXM6IHsgZmlsdGVyOiBmaWx0ZXIuYXNQb2RPYmplY3QoKSwgaW50ZXJ2YWw6IHRvTnVtYmVyKG9wdGlvbnM/LmludGVydmFsLCAxMCkgfSxcbiAgICAgIGVycm9yOiB7XG4gICAgICAgIGNvZGU6IFNvY2lhbEVycm9yQ29kZXMuU1VCU0NSSUJFX1VTRVJfRVZFTlRTX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnU09DSUFMLkVSUk9SLlNVQlNDUklCRV9VU0VSX0VWRU5UU19FUlJPUidcbiAgICAgIH1cbiAgICB9KS5waXBlKFxuICAgICAgbWFwKCh7IGRhdGEgfSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhICYmIHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1SZWNlaXZlZCBuZXcgdXNlciBldmVudHM6YCwgZGF0YSk7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSBkYXRhPy5tYXAodmFsdWUgPT4gdGhpcy5wcm9jZXNzVXNlckV2ZW50KHZhbHVlLCB0aGlzKSk7XG4gICAgICAgICAgLy8gVXBkYXRlIGNhY2hlXG4gICAgICAgICAgdGhpcy5pbnNlcnRJbnRvTXV0YWJsZUNhY2hlZFF1ZXJpZXMoXG4gICAgICAgICAgICB0aGlzLmdyYXBocWwuY2FjaGUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHF1ZXJ5OiB3aXRoQ29udGVudCA/IHRoaXMucXVlcmllcy5sb2FkQWxsV2l0aENvbnRlbnQgOiB0aGlzLnF1ZXJpZXMubG9hZEFsbCxcbiAgICAgICAgICAgICAgZGF0YTogdXBkYXRlZERhdGFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVkRGF0YTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG5cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShlbnRpdHk6IEUpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghZW50aXR5KSByZXR1cm47IC8vIHNraXBcbiAgICBhd2FpdCB0aGlzLmRlbGV0ZUFsbChbZW50aXR5XSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVBbGwoZW50aXRpZXM6IEVbXSwgb3B0cz86IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgaWRzID0gZW50aXRpZXMgJiYgZW50aXRpZXNcbiAgICAgIC5tYXAodCA9PiB0LmlkKTtcbiAgICBpZiAoaXNFbXB0eUFycmF5KGlkcykpIHJldHVybjsgLy8gc3RvcCwgaWYgbm90aGluZyBlbHNlIHRvIGRvXG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9RGVsZXRpbmcgZXZlbnRzLi4uIGlkczpgLCBpZHMpO1xuXG4gICAgYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTxhbnk+KHtcbiAgICAgIG11dGF0aW9uOiB0aGlzLm11dGF0aW9ucy5kZWxldGVCeUlkcyxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpZHNcbiAgICAgIH0sXG4gICAgICB1cGRhdGU6IChwcm94eSkgPT4ge1xuICAgICAgICAvLyBSZW1vdmUgZnJvbSBjYWNoZXNcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tTXV0YWJsZUNhY2hlZFF1ZXJpZXNCeUlkcyhwcm94eSwge1xuICAgICAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJpZXMubG9hZEFsbCxcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbU11dGFibGVDYWNoZWRRdWVyaWVzQnlJZHMocHJveHksIHtcbiAgICAgICAgICBxdWVyeTogdGhpcy5xdWVyaWVzLmxvYWRBbGxXaXRoQ29udGVudCxcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1FdmVudHMgZGVsZXRlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoZW50aXR5OiBFLCBvcHRpb25zPzogRW50aXR5U2VydmljZUxvYWRPcHRpb25zKTogUHJvbWlzZTxFPiB7XG4gICAgdGhpcy5maWxsRGVmYXVsdFByb3BlcnRpZXMoZW50aXR5KTtcblxuICAgIC8vIFRyYW5zZm9ybSBpbnRvIGpzb25cbiAgICBjb25zdCB3aXRoQ29udGVudCA9ICEhZW50aXR5LmNvbnRlbnQ7XG4gICAgY29uc3QganNvbiA9IGVudGl0eS5hc09iamVjdCgpO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVNhdmluZyB1c2VyIGV2ZW50Li4uYCwganNvbik7XG5cbiAgICBhd2FpdCB0aGlzLmdyYXBocWwubXV0YXRlPHsgZGF0YTogYW55IH0+KHtcbiAgICAgIG11dGF0aW9uOiB0aGlzLm11dGF0aW9ucy5zYXZlLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGRhdGE6IGpzb25cbiAgICAgIH0sXG4gICAgICBlcnJvcjogeyBjb2RlOiBTb2NpYWxFcnJvckNvZGVzLlNBVkVfVVNFUl9FVkVOVF9FUlJPUiwgbWVzc2FnZTogJ1NPQ0lBTC5FUlJPUi5TQVZFX1VTRVJfRVZFTlRfRVJST1InIH0sXG4gICAgICB1cGRhdGU6IChwcm94eSwgeyBkYXRhIH0pID0+IHtcbiAgICAgICAgLy8gVXBkYXRlIGVudGl0eVxuICAgICAgICBjb25zdCBzYXZlZEVudGl0eSA9IGRhdGEgJiYgZGF0YS5kYXRhO1xuICAgICAgICBpZiAoc2F2ZWRFbnRpdHkpIHtcbiAgICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVVzZXIgZXZlbnQgc2F2ZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCwgZW50aXR5KTtcbiAgICAgICAgICB0aGlzLmNvcHlJZEFuZFVwZGF0ZURhdGUoc2F2ZWRFbnRpdHksIGVudGl0eSk7XG5cbiAgICAgICAgICAvLyBBZGQgdG8gY2FjaGVcbiAgICAgICAgICBpZiAod2l0aENvbnRlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0SW50b011dGFibGVDYWNoZWRRdWVyaWVzKHByb3h5LCB7XG4gICAgICAgICAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJpZXMubG9hZEFsbFdpdGhDb250ZW50LFxuICAgICAgICAgICAgICBkYXRhOiBzYXZlZEVudGl0eVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0SW50b011dGFibGVDYWNoZWRRdWVyaWVzKHByb3h5LCB7XG4gICAgICAgICAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJpZXMubG9hZEFsbCxcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIC4uLnNhdmVkRW50aXR5LFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgYXN5bmMgc2F2ZUFsbChlbnRpdGllczogRVtdLCBvcHRzPzogYW55KTogUHJvbWlzZTxFW10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoZW50aXRpZXNcbiAgICAgIC5tYXAoZW50aXR5ID0+IHRoaXMuc2F2ZShlbnRpdHksIG9wdHMpKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBtYXJrQXNSZWFkKGVudGl0aWVzOiBFW10pIHtcblxuICAgIGNvbnN0IHVzZXJFdmVudFdpdGhvdXRSZWFkTGlzdGVuZXJzOiBFW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiAoZW50aXRpZXMgfHwgW10pKSB7XG4gICAgICAvLyBHZXQgb25SZWFkIGxpc3RlbmVyc1xuICAgICAgY29uc3Qgb25SZWFkTGlzdGVuZXJzID0gKHRoaXMubGlzdGVuZXJzIHx8IFtdKS5maWx0ZXIobGlzdGVuZXIgPT4gISFsaXN0ZW5lci5vblJlYWQpLmZpbHRlcihsaXN0ZW5lciA9PiBsaXN0ZW5lci5hY2NlcHQoZW50aXR5KSk7XG4gICAgICBpZiAob25SZWFkTGlzdGVuZXJzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIG9uUmVhZExpc3RlbmVycykge1xuICAgICAgICAgIGF3YWl0IGxpc3RlbmVyLm9uUmVhZChlbnRpdHkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBZGQgdG8gdGhpcyBsaXN0IGZvciBkZWZhdWx0IG9wZXJhdGlvblxuICAgICAgICB1c2VyRXZlbnRXaXRob3V0UmVhZExpc3RlbmVycy5wdXNoKGVudGl0eSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXNlIGRlZmF1bHRcbiAgICBhd2FpdCB0aGlzLmRlZmF1bHRNYXJrQXNSZWFkKHVzZXJFdmVudFdpdGhvdXRSZWFkTGlzdGVuZXJzKTtcbiAgfVxuXG4gIHJlZ2lzdGVyTGlzdGVuZXIobGlzdGVuZXI6IElVc2VyRXZlbnRMaXN0ZW5lcjxFPikge1xuICAgIGlmICghdGhpcy5saXN0ZW5lcnMpIHRoaXMubGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICByZXNldENvdW50KCkge1xuICAgIHRoaXMuY291bnQkLm5leHQodW5kZWZpbmVkKTtcbiAgICB0aGlzLnJlc2V0Q291bnREYXRlID0gbW9tZW50KCk7XG4gICAgLy8gcmVzdGFydCBsaXN0ZW5pbmcgY291bnQgY2hhbmdlc1xuICAgIHRoaXMuc3RhcnRMaXN0ZW5Db3VudENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uTG9naW4oKSB7XG4gICAgLy8gR2V0IGZpcnN0IGNvdW50XG4gICAgY29uc3QgY291bnQgPSBhd2FpdCB0aGlzLmNvdW50KHVuZGVmaW5lZCk7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1SZWNlaXZpbmcgdXNlciBldmVudHMgY291bnRgLCBjb3VudCk7XG4gICAgLy8gVXBkYXRlIGNvdW50XG4gICAgdGhpcy5jb3VudCQubmV4dChjb3VudCk7XG5cbiAgICAvLyBUaGVuIGxpc3RlbiBjaGFuZ2VzXG4gICAgdGhpcy5zdGFydExpc3RlbkNvdW50Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uTG9nb3V0KCkge1xuICAgIHRoaXMuc3RvcExpc3RlbkNvdW50Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXJ0TGlzdGVuQ291bnRDaGFuZ2VzKCkge1xuICAgIHRoaXMuc3RvcExpc3RlbkNvdW50Q2hhbmdlcygpO1xuICAgIHRoaXMuX2xpc3RlblN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuQ291bnRDaGFuZ2VzKHVuZGVmaW5lZCkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RvcExpc3RlbkNvdW50Q2hhbmdlcygpIHtcbiAgICB0aGlzLl9saXN0ZW5TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fbGlzdGVuU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NVc2VyRXZlbnQoc291cmNlOiBhbnksIHRoYXQ/OiBBYnN0cmFjdFVzZXJFdmVudFNlcnZpY2U8RSwgRj4pOiBFIHtcbiAgICB0aGF0ID0gdGhhdCB8fCB0aGlzO1xuXG4gICAgLy8gQ29udmVydCBqc29uIHNvdXJjZSB0byBJVXNlckV2ZW50XG4gICAgbGV0IHRhcmdldCA9IHRoYXQuZnJvbU9iamVjdChzb3VyY2UpO1xuXG4gICAgLy8gR2V0IGxpc3RlbmVyc1xuICAgIGNvbnN0IGxpc3RlbmVycyA9ICh0aGF0Lmxpc3RlbmVycyB8fCBbXSkuZmlsdGVyKGxpc3RlbmVyID0+IGxpc3RlbmVyLm9uUmVjZWl2ZWQpLmZpbHRlcihsaXN0ZW5lciA9PiBsaXN0ZW5lci5hY2NlcHQodGFyZ2V0KSk7XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMpIHtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGFyZ2V0ID0gbGlzdGVuZXIub25SZWNlaXZlZCh0YXJnZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoYXQuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoYXQuX2xvZ1ByZWZpeH1FdmVudCBoYXMgYmVlbiByZWplY3RlZCBieSBhIGxpc3RlbmVyYCwgc291cmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBkZWZhdWx0TWFya0FzUmVhZCh1c2VyRXZlbnRzOiBFW10pIHtcbiAgICBpZiAoIXVzZXJFdmVudHMpIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLl9sb2dQcmVmaXh9SW52YWxpZCBldmVudCB0byBzYXZlYCk7XG4gICAgaWYgKCF1c2VyRXZlbnRzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgLy8gc2V0IHJlYWQgZGF0ZVxuICAgIHVzZXJFdmVudHMuZm9yRWFjaCh1c2VyRXZlbnQgPT4gdXNlckV2ZW50LnJlYWREYXRlID0gbW9tZW50KCkpO1xuXG4gICAgLy8gc3BsaXQgbG9jYWwvcmVtb3RlIGVudGl0aWVzXG4gICAgY29uc3QgbG9jYWxFbnRpdGllcyA9IHVzZXJFdmVudHMuZmlsdGVyKHVzZXJFdmVudCA9PiAhdXNlckV2ZW50LmlkIHx8IHVzZXJFdmVudC5pZCA8IDApO1xuICAgIGNvbnN0IHJlbW90ZUVudGl0aWVzID0gdXNlckV2ZW50cy5maWx0ZXIodXNlckV2ZW50ID0+IHVzZXJFdmVudC5pZCA+IDApO1xuXG4gICAgLy8gc2F2ZSBsb2NhbCBlbnRpdGllc1xuICAgIGlmIChsb2NhbEVudGl0aWVzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1TYXZlIGxvY2FsIHVzZXIgZXZlbnRgKTtcbiAgICAgIC8vIFRPRE8gISEhISEhISEhISEhIVxuICAgIH1cbiAgICAvLyBtYXJrIHJlbW90ZSBlbnRpdGllcyBhcyByZWFkXG4gICAgaWYgKHJlbW90ZUVudGl0aWVzLmxlbmd0aCkge1xuICAgICAgaWYgKCF0aGlzLm11dGF0aW9ucz8ubWFya0FzUmVhZCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5fbG9nUHJlZml4fU11dGF0aW9uIHF1ZXJ5ICdtYXJrQXNSZWFkJyBub3QgcHJvdmlkZWQsIHNraXAuYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQ29sbGVjdCBpZHNcbiAgICAgIGNvbnN0IGlkcyA9IHJlbW90ZUVudGl0aWVzLm1hcCh2YWx1ZSA9PiB2YWx1ZS5pZCk7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1NYXJrIHVzZXIgZXZlbnRzIGFzIHJlYWQuLi5gLCBpZHMpO1xuXG4gICAgICBhd2FpdCB0aGlzLmdyYXBocWwubXV0YXRlPHsgZGF0YTogYW55IH0+KHtcbiAgICAgICAgbXV0YXRpb246IHRoaXMubXV0YXRpb25zLm1hcmtBc1JlYWQsXG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIGlkc1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogeyBjb2RlOiBTb2NpYWxFcnJvckNvZGVzLlNBVkVfVVNFUl9FVkVOVF9FUlJPUiwgbWVzc2FnZTogJ1NPQ0lBTC5FUlJPUi5TQVZFX1VTRVJfRVZFTlRfRVJST1InIH0sXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1Vc2VyIGV2ZW50cyBtYXJrZWQgYXMgcmVhZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgLCBpZHMpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0RmlsdGVyKCk6IEYge1xuICAgIC8vIEJ5IGRlZmF1bHRcbiAgICByZXR1cm4gPEY+e1xuICAgICAgcmVjaXBpZW50czogW3RoaXMuZGVmYXVsdFJlY2lwaWVudCgpXVxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdFJlY2lwaWVudCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmFjY291bnRTZXJ2aWNlLnBlcnNvbi5wdWJrZXk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmlsbERlZmF1bHRQcm9wZXJ0aWVzKGVudGl0eTogRSkge1xuICB9XG5cbiAgcHJvdGVjdGVkIHVucmVhZEV2ZW50cyhldmVudHM6IEVbXSk6IG51bWJlciB7XG4gICAgLy8gZGVmYXVsdCBjYWxjdWxhdGlvbiBvbiB1bnJlYWQgZXZlbnRzIGZyb20gYSBsaXN0XG4gICAgaWYgKGlzRW1wdHlBcnJheShldmVudHMpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGxhc3RSZWFkRGF0ZSA9IGV2ZW50c1xuICAgICAgLmZpbHRlcihldmVudCA9PiBpc05vdE5pbChldmVudC5yZWFkRGF0ZSkpXG4gICAgICAucmVkdWNlKChsYXN0RGF0ZSwgZXZlbnQpID0+IERhdGVVdGlscy5tYXgobGFzdERhdGUsIGV2ZW50LnJlYWREYXRlKSwgdW5kZWZpbmVkIGFzIE1vbWVudCk7XG4gICAgcmV0dXJuIGV2ZW50c1xuICAgICAgLmZpbHRlcihldmVudCA9PiBldmVudC5jcmVhdGlvbkRhdGUuaXNTYW1lT3JBZnRlcihsYXN0UmVhZERhdGUpKS5sZW5ndGg7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29weUlkQW5kVXBkYXRlRGF0ZShzb3VyY2U6IEUsIHRhcmdldDogRSkge1xuICAgIEVudGl0eVV0aWxzLmNvcHlJZEFuZFVwZGF0ZURhdGUoc291cmNlLCB0YXJnZXQpO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -9,14 +9,13 @@ export { AccountValidatorService as ɵe } from './src/app/core/services/validato
|
|
|
9
9
|
export { LocalSettingsValidatorService as ɵh } from './src/app/core/services/validator/local-settings.validator';
|
|
10
10
|
export { UserSettingsValidatorService as ɵg } from './src/app/core/services/validator/user-settings.validator';
|
|
11
11
|
export { isFocusableElement as ɵc } from './src/app/shared/focusable';
|
|
12
|
-
export { MatBadgeIconTestPage as
|
|
13
|
-
export { DateTestPage as
|
|
12
|
+
export { MatBadgeIconTestPage as ɵn } from './src/app/shared/material/badge/badge-icon.test';
|
|
13
|
+
export { DateTestPage as ɵl } from './src/app/shared/material/datetime/testing/mat-date.test';
|
|
14
14
|
export { MatNumpadDomService as ɵb } from './src/app/shared/material/numpad/numpad.dom-service';
|
|
15
|
-
export { NumpadTestPage as
|
|
15
|
+
export { NumpadTestPage as ɵm } from './src/app/shared/material/numpad/testing/numpad.test';
|
|
16
16
|
export { CustomReuseStrategy as ɵa } from './src/app/shared/shared-routing.module';
|
|
17
|
-
export { ToastTestingPage as
|
|
18
|
-
export { ToastTestingModule as
|
|
19
|
-
export { JobProgressionList as
|
|
17
|
+
export { ToastTestingPage as ɵp } from './src/app/shared/toast/toast.testing';
|
|
18
|
+
export { ToastTestingModule as ɵo } from './src/app/shared/toast/toast.testing.module';
|
|
19
|
+
export { JobProgressionList as ɵk } from './src/app/social/job/progression/job-progression.list';
|
|
20
20
|
export { UserEventNotificationList as ɵj } from './src/app/social/user-event/notification/user-event-notification.list';
|
|
21
|
-
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VtYXJpcy1uZXQubmd4LWNvbXBvbmVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zdW1hcmlzLW5ldC5uZ3gtY29tcG9uZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDO0FBRTdCLE9BQU8sRUFBQyx3QkFBd0IsSUFBSSxFQUFFLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUN6RyxPQUFPLEVBQUMsWUFBWSxJQUFJLEVBQUUsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxhQUFhLElBQUksRUFBRSxFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDakYsT0FBTyxFQUFDLHVCQUF1QixJQUFJLEVBQUUsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBQ2xHLE9BQU8sRUFBQyw2QkFBNkIsSUFBSSxFQUFFLEVBQUMsTUFBTSw0REFBNEQsQ0FBQztBQUMvRyxPQUFPLEVBQUMsNEJBQTRCLElBQUksRUFBRSxFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDN0csT0FBTyxFQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxvQkFBb0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUMsWUFBWSxJQUFJLEVBQUUsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQzVGLE9BQU8sRUFBQyxtQkFBbUIsSUFBSSxFQUFFLEVBQUMsTUFBTSxxREFBcUQsQ0FBQztBQUM5RixPQUFPLEVBQUMsY0FBYyxJQUFJLEVBQUUsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQzFGLE9BQU8sRUFBQyxtQkFBbUIsSUFBSSxFQUFFLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxrQkFBa0IsSUFBSSxFQUFFLEVBQUMsTUFBTSx1REFBdUQsQ0FBQztBQUMvRixPQUFPLEVBQUMseUJBQXlCLElBQUksRUFBRSxFQUFDLE1BQU0sdUVBQXVFLENBQUM7QUFDdEgsT0FBTyxFQUFDLG9CQUFvQixJQUFJLEVBQUUsRUFBQyxNQUFNLGdFQUFnRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuXG5leHBvcnQge0FwcFVwZGF0ZU9mZmxpbmVNb2RlQ2FyZCBhcyDJtWl9IGZyb20gJy4vc3JjL2FwcC9jb3JlL29mZmxpbmUvdXBkYXRlLW9mZmxpbmUtbW9kZS1jYXJkLmNvbXBvbmVudCc7XG5leHBvcnQge1JlZ2lzdGVyRm9ybSBhcyDJtWR9IGZyb20gJy4vc3JjL2FwcC9jb3JlL3JlZ2lzdGVyL2Zvcm0vZm9ybS1yZWdpc3Rlcic7XG5leHBvcnQge1JlZ2lzdGVyTW9kYWwgYXMgybVmfSBmcm9tICcuL3NyYy9hcHAvY29yZS9yZWdpc3Rlci9tb2RhbC9tb2RhbC1yZWdpc3Rlcic7XG5leHBvcnQge0FjY291bnRWYWxpZGF0b3JTZXJ2aWNlIGFzIMm1ZX0gZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvdmFsaWRhdG9yL2FjY291bnQudmFsaWRhdG9yJztcbmV4cG9ydCB7TG9jYWxTZXR0aW5nc1ZhbGlkYXRvclNlcnZpY2UgYXMgybVofSBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy92YWxpZGF0b3IvbG9jYWwtc2V0dGluZ3MudmFsaWRhdG9yJztcbmV4cG9ydCB7VXNlclNldHRpbmdzVmFsaWRhdG9yU2VydmljZSBhcyDJtWd9IGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3ZhbGlkYXRvci91c2VyLXNldHRpbmdzLnZhbGlkYXRvcic7XG5leHBvcnQge2lzRm9jdXNhYmxlRWxlbWVudCBhcyDJtWN9IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvZm9jdXNhYmxlJztcbmV4cG9ydCB7TWF0QmFkZ2VJY29uVGVzdFBhZ2UgYXMgybVvfSBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2JhZGdlL2JhZGdlLWljb24udGVzdCc7XG5leHBvcnQge0RhdGVUZXN0UGFnZSBhcyDJtW19IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvZGF0ZXRpbWUvdGVzdGluZy9tYXQtZGF0ZS50ZXN0JztcbmV4cG9ydCB7TWF0TnVtcGFkRG9tU2VydmljZSBhcyDJtWJ9IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvbnVtcGFkL251bXBhZC5kb20tc2VydmljZSc7XG5leHBvcnQge051bXBhZFRlc3RQYWdlIGFzIMm1bn0gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9udW1wYWQvdGVzdGluZy9udW1wYWQudGVzdCc7XG5leHBvcnQge0N1c3RvbVJldXNlU3RyYXRlZ3kgYXMgybVhfSBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3NoYXJlZC1yb3V0aW5nLm1vZHVsZSc7XG5leHBvcnQge1RvYXN0VGVzdGluZ1BhZ2UgYXMgybVxfSBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3RvYXN0L3RvYXN0LnRlc3RpbmcnO1xuZXhwb3J0IHtUb2FzdFRlc3RpbmdNb2R1bGUgYXMgybVwfSBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3RvYXN0L3RvYXN0LnRlc3RpbmcubW9kdWxlJztcbmV4cG9ydCB7Sm9iUHJvZ3Jlc3Npb25MaXN0IGFzIMm1bH0gZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC9qb2IvcHJvZ3Jlc3Npb24vam9iLXByb2dyZXNzaW9uLmxpc3QnO1xuZXhwb3J0IHtVc2VyRXZlbnROb3RpZmljYXRpb25MaXN0IGFzIMm1an0gZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC91c2VyLWV2ZW50L25vdGlmaWNhdGlvbi91c2VyLWV2ZW50LW5vdGlmaWNhdGlvbi5saXN0JztcbmV4cG9ydCB7VXNlckV2ZW50VGVzdFNlcnZpY2UgYXMgybVrfSBmcm9tICcuL3NyYy9hcHAvc29jaWFsL3VzZXItZXZlbnQvdGVzdGluZy91c2VyLWV2ZW50LnRlc3Rpbmcuc2VydmljZSc7Il19
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VtYXJpcy1uZXQubmd4LWNvbXBvbmVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zdW1hcmlzLW5ldC5uZ3gtY29tcG9uZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDO0FBRTdCLE9BQU8sRUFBQyx3QkFBd0IsSUFBSSxFQUFFLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUN6RyxPQUFPLEVBQUMsWUFBWSxJQUFJLEVBQUUsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxhQUFhLElBQUksRUFBRSxFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDakYsT0FBTyxFQUFDLHVCQUF1QixJQUFJLEVBQUUsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBQ2xHLE9BQU8sRUFBQyw2QkFBNkIsSUFBSSxFQUFFLEVBQUMsTUFBTSw0REFBNEQsQ0FBQztBQUMvRyxPQUFPLEVBQUMsNEJBQTRCLElBQUksRUFBRSxFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDN0csT0FBTyxFQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxvQkFBb0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUMsWUFBWSxJQUFJLEVBQUUsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQzVGLE9BQU8sRUFBQyxtQkFBbUIsSUFBSSxFQUFFLEVBQUMsTUFBTSxxREFBcUQsQ0FBQztBQUM5RixPQUFPLEVBQUMsY0FBYyxJQUFJLEVBQUUsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQzFGLE9BQU8sRUFBQyxtQkFBbUIsSUFBSSxFQUFFLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxrQkFBa0IsSUFBSSxFQUFFLEVBQUMsTUFBTSx1REFBdUQsQ0FBQztBQUMvRixPQUFPLEVBQUMseUJBQXlCLElBQUksRUFBRSxFQUFDLE1BQU0sdUVBQXVFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG5cbmV4cG9ydCB7QXBwVXBkYXRlT2ZmbGluZU1vZGVDYXJkIGFzIMm1aX0gZnJvbSAnLi9zcmMvYXBwL2NvcmUvb2ZmbGluZS91cGRhdGUtb2ZmbGluZS1tb2RlLWNhcmQuY29tcG9uZW50JztcbmV4cG9ydCB7UmVnaXN0ZXJGb3JtIGFzIMm1ZH0gZnJvbSAnLi9zcmMvYXBwL2NvcmUvcmVnaXN0ZXIvZm9ybS9mb3JtLXJlZ2lzdGVyJztcbmV4cG9ydCB7UmVnaXN0ZXJNb2RhbCBhcyDJtWZ9IGZyb20gJy4vc3JjL2FwcC9jb3JlL3JlZ2lzdGVyL21vZGFsL21vZGFsLXJlZ2lzdGVyJztcbmV4cG9ydCB7QWNjb3VudFZhbGlkYXRvclNlcnZpY2UgYXMgybVlfSBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy92YWxpZGF0b3IvYWNjb3VudC52YWxpZGF0b3InO1xuZXhwb3J0IHtMb2NhbFNldHRpbmdzVmFsaWRhdG9yU2VydmljZSBhcyDJtWh9IGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3ZhbGlkYXRvci9sb2NhbC1zZXR0aW5ncy52YWxpZGF0b3InO1xuZXhwb3J0IHtVc2VyU2V0dGluZ3NWYWxpZGF0b3JTZXJ2aWNlIGFzIMm1Z30gZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvdmFsaWRhdG9yL3VzZXItc2V0dGluZ3MudmFsaWRhdG9yJztcbmV4cG9ydCB7aXNGb2N1c2FibGVFbGVtZW50IGFzIMm1Y30gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9mb2N1c2FibGUnO1xuZXhwb3J0IHtNYXRCYWRnZUljb25UZXN0UGFnZSBhcyDJtW59IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYmFkZ2UvYmFkZ2UtaWNvbi50ZXN0JztcbmV4cG9ydCB7RGF0ZVRlc3RQYWdlIGFzIMm1bH0gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS90ZXN0aW5nL21hdC1kYXRlLnRlc3QnO1xuZXhwb3J0IHtNYXROdW1wYWREb21TZXJ2aWNlIGFzIMm1Yn0gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9udW1wYWQvbnVtcGFkLmRvbS1zZXJ2aWNlJztcbmV4cG9ydCB7TnVtcGFkVGVzdFBhZ2UgYXMgybVtfSBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL251bXBhZC90ZXN0aW5nL251bXBhZC50ZXN0JztcbmV4cG9ydCB7Q3VzdG9tUmV1c2VTdHJhdGVneSBhcyDJtWF9IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvc2hhcmVkLXJvdXRpbmcubW9kdWxlJztcbmV4cG9ydCB7VG9hc3RUZXN0aW5nUGFnZSBhcyDJtXB9IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvdG9hc3QvdG9hc3QudGVzdGluZyc7XG5leHBvcnQge1RvYXN0VGVzdGluZ01vZHVsZSBhcyDJtW99IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvdG9hc3QvdG9hc3QudGVzdGluZy5tb2R1bGUnO1xuZXhwb3J0IHtKb2JQcm9ncmVzc2lvbkxpc3QgYXMgybVrfSBmcm9tICcuL3NyYy9hcHAvc29jaWFsL2pvYi9wcm9ncmVzc2lvbi9qb2ItcHJvZ3Jlc3Npb24ubGlzdCc7XG5leHBvcnQge1VzZXJFdmVudE5vdGlmaWNhdGlvbkxpc3QgYXMgybVqfSBmcm9tICcuL3NyYy9hcHAvc29jaWFsL3VzZXItZXZlbnQvbm90aWZpY2F0aW9uL3VzZXItZXZlbnQtbm90aWZpY2F0aW9uLmxpc3QnOyJdfQ==
|