@sunbird-cb/tree-hierarchy 0.0.2-cbrelease-4.8.26 → 0.0.4-cbrelease-4.8.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/esm2022/lib/components/approve-view/approve-view.component.mjs +1 -1
  2. package/esm2022/lib/components/category-edit/category-edit-module/category-edit-module.component.mjs +57 -0
  3. package/esm2022/lib/components/term-card/term-card.component.mjs +10 -4
  4. package/esm2022/lib/components/tree-column-view/tree-column-view.component.mjs +9 -3
  5. package/esm2022/lib/components/tree-view/tree-view.component.mjs +214 -16
  6. package/esm2022/lib/services/framework.service.mjs +2 -1
  7. package/esm2022/lib/tree-hierarchy.module.mjs +5 -2
  8. package/esm2022/lib/tree-hierarchy.service.mjs +10 -2
  9. package/fesm2022/sunbird-cb-tree-hierarchy.mjs +303 -39
  10. package/fesm2022/sunbird-cb-tree-hierarchy.mjs.map +1 -1
  11. package/lib/components/category-edit/category-edit-module/category-edit-module.component.d.ts +18 -0
  12. package/lib/components/category-edit/category-edit-module/category-edit-module.component.d.ts.map +1 -0
  13. package/lib/components/term-card/term-card.component.d.ts +6 -1
  14. package/lib/components/term-card/term-card.component.d.ts.map +1 -1
  15. package/lib/components/tree-column-view/tree-column-view.component.d.ts +3 -1
  16. package/lib/components/tree-column-view/tree-column-view.component.d.ts.map +1 -1
  17. package/lib/components/tree-view/tree-view.component.d.ts +7 -1
  18. package/lib/components/tree-view/tree-view.component.d.ts.map +1 -1
  19. package/lib/services/framework.service.d.ts +1 -0
  20. package/lib/services/framework.service.d.ts.map +1 -1
  21. package/lib/tree-hierarchy.module.d.ts +5 -4
  22. package/lib/tree-hierarchy.module.d.ts.map +1 -1
  23. package/lib/tree-hierarchy.service.d.ts +2 -0
  24. package/lib/tree-hierarchy.service.d.ts.map +1 -1
  25. package/package.json +1 -1
@@ -6,6 +6,9 @@ import { labels } from '../../labels/strings';
6
6
  import { CreateTermFromFrameworkComponent } from '../create-term-from-framework/create-term-from-framework.component';
7
7
  import { OrgHierarchyAddModalComponent } from '../org-hierarchy-add-modal/org-hierarchy-add-modal.component';
8
8
  import { v4 as uuidv4 } from 'uuid';
9
+ import { ConforamtionPopupComponent } from '../conforamtion-popup/conforamtion-popup.component';
10
+ import { CategoryEditModuleComponent } from '../category-edit/category-edit-module/category-edit-module.component';
11
+ import _ from 'lodash';
9
12
  import * as i0 from "@angular/core";
10
13
  import * as i1 from "../../services/framework.service";
11
14
  import * as i2 from "../../services/local-connection.service";
@@ -35,6 +38,7 @@ export class TreeViewComponent {
35
38
  this.workFlowStatus = '';
36
39
  this.sentForApprove = new EventEmitter();
37
40
  this.loaderEnable = new EventEmitter();
41
+ this.manageOrg = new EventEmitter();
38
42
  this.mapping = {};
39
43
  this.heightLighted = [];
40
44
  this.localList = [];
@@ -334,10 +338,32 @@ export class TreeViewComponent {
334
338
  this.categoryList.push(event);
335
339
  }
336
340
  getCount(code) {
341
+ const allCategories = Array.from(this.frameworkService.list.values());
342
+ const currentCategoryIndex = allCategories.findIndex(cat => cat.code === code);
343
+ for (let i = 0; i < currentCategoryIndex; i++) {
344
+ const prevCategoryCode = allCategories[i].code;
345
+ const hasPrevSelection = this.frameworkService.selectionList.has(prevCategoryCode);
346
+ if (!hasPrevSelection) {
347
+ return 0;
348
+ }
349
+ }
337
350
  let count = 0;
338
- if (this.categoryList) {
339
- const category = this.categoryList.find((category) => category.category === code);
340
- count = category && category.count ? category.count : 0;
351
+ const prevCategory = this.frameworkService.getPreviousCategory(code);
352
+ if (prevCategory) {
353
+ const prevSelectedTerm = this.frameworkService.selectionList.get(prevCategory.code);
354
+ if (prevSelectedTerm) {
355
+ if (prevSelectedTerm.children && prevSelectedTerm.children.length > 0) {
356
+ count = prevSelectedTerm.children.filter((child) => !child.isDeleted && child.status !== 'Retired' &&
357
+ (child.category === code || (child.associations &&
358
+ child.associations.some((assoc) => assoc.category === code)))).length;
359
+ return count;
360
+ }
361
+ }
362
+ return 0;
363
+ }
364
+ const categoryData = this.frameworkService.list.get(code);
365
+ if (categoryData && categoryData.children) {
366
+ count = categoryData.children.filter((child) => !child.isDeleted && child.status !== 'Retired').length;
341
367
  }
342
368
  return count;
343
369
  }
@@ -423,6 +449,9 @@ export class TreeViewComponent {
423
449
  additionalProperties: {
424
450
  identifier: ele.ministryOrStateId || '',
425
451
  parentOrgName: ele.ministryOrStateName || '',
452
+ orgId: ele.identifier || '',
453
+ orgName: ele.orgName || '',
454
+ ministryOrStateType: ele.ministryOrStateType || '',
426
455
  }
427
456
  }
428
457
  }
@@ -448,11 +477,7 @@ export class TreeViewComponent {
448
477
  }
449
478
  async updateAssociation(nodeId, frameworkData, column) {
450
479
  const prev = this.frameworkService.getPreviousCategory(column.code);
451
- let prevTrem = this.frameworkService.getPreviousSelectedTerms(column);
452
- let currentTermSelected;
453
- this.frameworkService.currentSelection.subscribe((ele) => {
454
- currentTermSelected = ele.data;
455
- });
480
+ let prevTrem = this.frameworkService.getPreviousSelectedTerms(column.code);
456
481
  const requestBody = {
457
482
  request: {
458
483
  term: {
@@ -477,8 +502,8 @@ export class TreeViewComponent {
477
502
  });
478
503
  });
479
504
  }
480
- frameworkData.category = prev.code || '';
481
- const nodeIdParts = currentTermSelected.identifier.split('_');
505
+ frameworkData.category = prevTrem.category || '';
506
+ const nodeIdParts = prevTrem.identifier.split('_');
482
507
  const codeId = nodeIdParts[nodeIdParts.length - 1];
483
508
  const updateAssociationRes = await this.treeHierarchySvc.updateFrameworkAssociation(requestBody, frameworkData, codeId).toPromise().catch(err => {
484
509
  console.error('Error in updating association', err);
@@ -489,9 +514,11 @@ export class TreeViewComponent {
489
514
  publishFramework(frameworkData) {
490
515
  this.treeHierarchySvc.publishFreamework(frameworkData).subscribe((res) => {
491
516
  if (res && res.result && res.result.publishStatus) {
492
- this._snackBar.open(`${res.result.publishStatus}`, 'cancel');
493
- this.treeHierarchySvc.setLoaderState(false);
494
- this.init();
517
+ setTimeout(() => {
518
+ this._snackBar.open(`Organization Hierarchy updated. Will reflect in sometime`, 'cancel');
519
+ this.treeHierarchySvc.setLoaderState(false);
520
+ this.init();
521
+ }, 10000);
495
522
  }
496
523
  else {
497
524
  this._snackBar.open('Error in publishing framework', 'cancel');
@@ -502,12 +529,181 @@ export class TreeViewComponent {
502
529
  this.treeHierarchySvc.setLoaderState(false);
503
530
  });
504
531
  }
532
+ removeConnection(data) {
533
+ const association = this.getSelectedTermsAssociation(data.children.code);
534
+ let count = 0;
535
+ if (association && association.length > 0) {
536
+ association.forEach((assoc) => {
537
+ if (assoc.ids && assoc.ids.length > 0) {
538
+ count += assoc.ids.length;
539
+ }
540
+ });
541
+ }
542
+ if (count > 0) {
543
+ const dialogData = {
544
+ dialogType: 'warning',
545
+ descriptions: [
546
+ {
547
+ header: `${count || 0} Organisation${count > 1 ? 's' : ''} will be removed from organisation hierarchy.`,
548
+ headerClass: 'flex items-center justify-center text-blue',
549
+ messages: [
550
+ {
551
+ msgClass: 'text-blue margin-bottom-s',
552
+ msg: `Do you want to proceed?`,
553
+ },
554
+ ],
555
+ },
556
+ ],
557
+ footerClass: 'items-center justify-center',
558
+ buttons: [
559
+ {
560
+ btnText: 'No',
561
+ btnClass: 'btn-common btn-secondary',
562
+ response: false,
563
+ },
564
+ {
565
+ btnText: 'Yes',
566
+ btnClass: 'btn-common btn-primary',
567
+ response: true,
568
+ },
569
+ ],
570
+ };
571
+ const dialogRef = this.dialog.open(ConforamtionPopupComponent, {
572
+ data: dialogData,
573
+ autoFocus: false,
574
+ width: '600px',
575
+ maxWidth: '80vw',
576
+ maxHeight: '90vh',
577
+ disableClose: true,
578
+ });
579
+ dialogRef.afterClosed().subscribe((res) => {
580
+ if (res) {
581
+ this.retireTermFunction(association);
582
+ }
583
+ });
584
+ }
585
+ else {
586
+ this._snackBar.open(`Error in removing the organisation`, 'cancel');
587
+ }
588
+ }
589
+ async retireTermFunction(association) {
590
+ let count = 0;
591
+ this.treeHierarchySvc.setLoaderState(true);
592
+ for await (const ele of association) {
593
+ const requestBody = {
594
+ request: {
595
+ contentIds: ele.ids
596
+ }
597
+ };
598
+ const frameworkObj = {
599
+ id: this.frameworkService.completeResponse.code,
600
+ category: ele.category || '',
601
+ };
602
+ const retireRes = await this.treeHierarchySvc.retireTerm(requestBody, frameworkObj).toPromise().catch((_err) => {
603
+ this.treeHierarchySvc.setLoaderState(false);
604
+ this._snackBar.open(`Failed to remove connection.`, 'cancel');
605
+ });
606
+ if (retireRes && retireRes.params && retireRes.params.status?.toLowerCase() === 'successful') {
607
+ count += 1;
608
+ }
609
+ else {
610
+ this.treeHierarchySvc.setLoaderState(false);
611
+ this._snackBar.open(`Failed to remove connection.`, 'cancel');
612
+ }
613
+ }
614
+ if (count === association.length) {
615
+ await this.publishFramework({
616
+ id: this.frameworkService.completeResponse.code,
617
+ });
618
+ }
619
+ else {
620
+ this.treeHierarchySvc.setLoaderState(false);
621
+ this._snackBar.open(`Failed to remove connection.`, 'cancel');
622
+ }
623
+ }
624
+ cardActionEmit(event) {
625
+ switch (event.action) {
626
+ case 'remove-term':
627
+ this.removeConnection(event.data);
628
+ break;
629
+ case 'update-hierarchy':
630
+ this.openOrganizationDialog(this.list[this.list.findIndex((item) => item.code === event.data.category) + 1], '');
631
+ break;
632
+ case 'manage-org':
633
+ this.manageOrg.emit(event.data.children);
634
+ break;
635
+ }
636
+ }
637
+ editCategoryName(column, index) {
638
+ console.log('editCategoryName', column, index);
639
+ const dialog = this.dialog.open(CategoryEditModuleComponent, {
640
+ data: {
641
+ columnInfo: column,
642
+ frameworkId: this.frameworkService.getFrameworkId(),
643
+ colIndex: index
644
+ },
645
+ width: '800px',
646
+ panelClass: 'category-edit-container',
647
+ position: { top: '50px' }
648
+ });
649
+ dialog.afterClosed().subscribe((res) => {
650
+ console.log('Category edit dialog closed', res);
651
+ });
652
+ }
653
+ getSelectedTermsAssociation(categoryCode) {
654
+ let tempData = [];
655
+ const completeData = _.cloneDeep(this.frameworkService.completeResponse);
656
+ if (completeData && completeData.categories && completeData.categories.length > 0) {
657
+ completeData.categories.forEach((category, catIndex) => {
658
+ if (category.terms && category.terms.length > 0) {
659
+ category.terms.forEach((term) => {
660
+ if (term.code === categoryCode) {
661
+ tempData.push({
662
+ name: term.name,
663
+ category: term.category,
664
+ ids: [term.code],
665
+ nextCategory: term.children ? term.children[0].category : '',
666
+ assocIds: []
667
+ });
668
+ if (term.associations && term.associations.length > 0) {
669
+ term.associations.forEach((assoc) => {
670
+ tempData[catIndex]['assocIds'].push(assoc.code);
671
+ });
672
+ }
673
+ }
674
+ });
675
+ }
676
+ if (catIndex > 0 && category.terms && category.terms.length > 0) {
677
+ category.terms.forEach((term) => {
678
+ tempData.forEach((item) => {
679
+ if (item.nextCategory === term.category && item.assocIds.includes(term.code)) {
680
+ const pushData = {
681
+ name: term.name,
682
+ category: term.category,
683
+ ids: [term.code],
684
+ nextCategory: term.children ? term.children[0].category : '',
685
+ assocIds: []
686
+ };
687
+ if (term.associations && term.associations.length > 0) {
688
+ term.associations.forEach((assoc) => {
689
+ pushData['assocIds'].push(assoc.code);
690
+ });
691
+ }
692
+ tempData.push(pushData);
693
+ }
694
+ });
695
+ });
696
+ }
697
+ });
698
+ }
699
+ return tempData;
700
+ }
505
701
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeViewComponent, deps: [{ token: i1.FrameworkService }, { token: i2.LocalConnectionService }, { token: i3.MatLegacyDialog }, { token: i4.ApprovalService }, { token: i5.MatLegacySnackBar }, { token: i6.ConnectorService }, { token: i0.ChangeDetectorRef }, { token: i7.TreeHierarchyService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
506
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TreeViewComponent, selector: "lib-tree-view", inputs: { approvalList: "approvalList", isApprovalView: "isApprovalView", workFlowStatus: "workFlowStatus", environment: "environment", taxonomyConfig: "taxonomyConfig", orgSelectedData: "orgSelectedData" }, outputs: { sentForApprove: "sentForApprove", loaderEnable: "loaderEnable" }, usesOnChanges: true, ngImport: i0, template: "<!-- <div class=\"flex flex-1 connectionSettings\">\n <button mat-raised-button color=\"accent\" (click)=\"newConnection()\">\n <mat-icon>{{app_strings.build}}</mat-icon>\n </button>\n</div> -->\n\n<div *ngIf=\"list && list.length > 0\" class=\"flex heightFix overflow-container\" id=\"treeViewContainer\">\n <ng-container *ngFor=\"let column of list; let i = index;\">\n <div class=\"flex-1 felx-col col-container containers{{list.length}}\" id=\"box{{i+1}}Container\">\n <div class=\"category-heading-sticky\">\n <div class=\"category-heading-container\">\n <div class='category-header'>\n <div class=\"category-header-items w-full\" id=\"box{{i}}Header\">\n <ng-container *ngIf=\"column?.config?.iconEnabled\">\n <mat-icon [ngStyle]=\"{'color':column.config.color}\">{{column.config.icon}}</mat-icon>\n </ng-container>\n <span class=\"flex-1 mat-body-1\">\n <!-- {{column.name}} -->\n {{column?.config?.categoryDisplayName || column.name }}\n <ng-container *ngIf=\"i != 0 && categoryList?.length > 0; else firstColumn\">\n <ng-container *ngIf=\"column.index !== 1\">\n <span class=\"count\">({{getCount(column.code)}})</span>\n </ng-container>\n </ng-container>\n </span>\n <ng-template #firstColumn>\n <span *ngIf=\"i == 0\" id=\"box{{i+1}}count\" class=\"count\">({{column.children.length}})</span>\n </ng-template>\n <ng-container class=\"\" *ngIf=\"column?.config?.createBtnEnabled && !column?.config?.addOrgEnabled\">\n <button mat-button class=\"add-btn\" [ngClass]=\"{'button-enabled': configCodeBtn== column?.code, 'button-disabled': configCodeBtn!== column?.code}\"\n (click)=\"openCreateTermDialog(column, i)\" type=\"button\">\n <span>Add</span>\n <mat-icon class=\"margin-remove\">\n {{app_strings.add}}\n </mat-icon>\n </button>\n </ng-container>\n <ng-container *ngIf=\"column?.config?.addOrgEnabled && !column?.config?.createBtnEnabled\">\n <button mat-button class=\"add-btn\" (click)=\"openOrganizationDialog(column, i)\" type=\"button\" \n [ngClass]=\"{'button-enabled': isCurrentOrNextTerm(column, i), 'button-disabled': !isCurrentOrNextTerm(column, i)}\">\n <span>Add</span>\n <mat-icon class=\"margin-remove\">\n {{app_strings.add}}\n </mat-icon>\n </button>\n </ng-container>\n <div class=\"arrow\" id=\"box{{i+1}}count\"></div>\n </div>\n </div>\n <!-- <div>\n Put search button here in future\n </div> -->\n </div>\n </div>\n <!-- {{column.code}} -->\n <div class=\"padding-x2 cat-columns container-box\" id=\"box{{i+1}}\">\n <ng-container *ngIf=\"column?.children && column?.children.length > 0\">\n <lib-tree-column-view *ngIf=\"loaded[column.code]\" #selectedTaxonomyTerm [column]=\"column\"\n [containerId]=\"'box'+(i+1)\" (updateTaxonomyTerm)=\"updateTaxonomyTerm($event)\"\n (updateTermList)=\"updateDraftStatusTerms($event)\" (cardsCount)=\"getNoOfCards($event)\">\n </lib-tree-column-view>\n </ng-container>\n <ng-container *ngIf=\"shouldShowSvgBorderWrapper(column, i)\">\n <div class=\"svg-border-wrapper\">\n <svg width=\"100%\" height=\"100%\">\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"none\" stroke=\"#1B213352\" stroke-width=\"2\" \n stroke-dasharray=\"20, 10\" rx=\"10\" ry=\"10\"/>\n </svg>\n <div class=\"content flex flex-col w-full\">\n <div class=\"icon-container\">\n <mat-icon svgIcon=\"frac-no-connection\"></mat-icon>\n </div>\n <label>{{isLoading}} Select an organization to add or see further connections</label>\n <button mat-button class=\"add-btn\" (click)=\"openOrganizationDialog(column, i)\" type=\"button\" \n [ngClass]=\"{'button-enabled': isCurrentOrNextTerm(column, i), 'button-disabled': !isCurrentOrNextTerm(column, i)}\">\n <span>Add</span>\n <mat-icon class=\"margin-remove\">\n {{app_strings.add}}\n </mat-icon>\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n <lib-action-bar *ngIf=\"showActionBar\" [actionType]=\"isApprovalView\" [configType]=\"workFlowStatus\"\n (sendApproval)=\"sendForApproval()\" (closeAction)=\"closeActionBar($event)\"></lib-action-bar>\n</div>\n<div *ngIf=\"!(list && list.length > 0 ) && isFraworkLoading\" class=\"flex heightFix \">\n <h1 i18n>{{app_strings.loading}}</h1>\n</div>", styles: [".connectionSettings{flex-direction:row-reverse;z-index:40;position:fixed;padding:0 4px 4px 0;bottom:0;right:0}.flex{display:flex}.w-full{width:100%;align-items:center;display:flex}.w-full.addCardButton{padding:.25em .8em;text-align:left;border:2px dotted #b1b1b1;color:#666;border-radius:8px}.w-full.addCardButton .mat-icon{position:absolute;top:0%;right:3%;height:100%;display:flex;align-items:center}.w-full .button-enabled{opacity:1;pointer-events:auto}.w-full .button-disabled{opacity:.5;pointer-events:none}.w-full.addCardButtonNew{padding:8px 12px;text-align:center;border-radius:24px;height:24px;background:#1b4ca1;color:#fff!important}.w-full.addCardButtonNew .mat-icon-custom{font-size:21px}.w-full.addCardButtonNew:disabled{opacity:.6}.mb1{margin-bottom:1em}flex-center{flex-wrap:nowrap;align-items:start;justify-content:center}.flex-1{flex:1}.felx-col{flex-direction:column}.padding-x2{padding:0 2.5em}.heightFix{height:100%;width:100%;justify-content:space-around;position:relative}.cat-columns{position:relative;height:inherit}.col-container{height:inherit;min-width:350px}.category-heading-sticky{top:0;position:sticky;width:100%;background:#fff;margin-bottom:16px;z-index:10}.category-heading-container{box-sizing:content-box;position:relative;display:block;padding:2px 2.5em}.category-heading-container .category-header{display:flex;align-items:center}.category-heading-container .category-header-items{display:flex;align-items:center;padding:0 10px}.category-heading-container .category-header h4{padding:0 10px;color:#00000080}.category-heading-container .category-header .count{padding:0 2px}.category-heading-container .category-header .category-header-items{font-size:12px;font-weight:600;font-family:Lato;color:#7c7c7c}.cat-columns:hover{overflow-y:scroll}.container-box{overflow-y:auto;scrollbar-width:none;-ms-overflow-style:none;height:calc(100% - 70px)}.container-box::-webkit-scrollbar{width:0;height:0}.spinner{position:fixed;display:flex;top:50%;left:50%}.arrow{left:30px;position:relative}@media only screen and (max-width: 1024px){::ng-deep mat-checkbox .mat-checkbox-inner-container{height:.8em;width:.8em}}@media only screen and (max-width: 1024px){.containers4{max-width:250px;font-size:10px}.containers5{max-width:230px}.containers6{max-width:150px}.containers7{max-width:100px}.w-full{height:3.5em}.w-full.mat-stroked-button{font-size:8px}.padding-x2,.category-heading-container{padding:0 2em}mat-icon{font-size:12px;width:1.25em;height:1.25em}.connectionSettings .mat-raised-button{min-width:auto;padding:0 .5em;line-height:2em}}@media only screen and (max-width: 992px){.containers4{max-width:220px;font-size:9px}.padding-x2,.category-heading-container{padding:0 1.5em}}@media only screen and (max-width: 768px){.containers4{max-width:165px;font-size:8px}.w-full{height:2.5em}.padding-x2,.category-heading-container{padding:0 1em}mat-icon{font-size:8px;width:1em;height:1em}.connectionSettings .mat-raised-button{min-width:auto;padding:0 .3em;line-height:1.5em}}.add-btn{height:24px;background:#1b4ca1;color:#fff!important;display:flex;flex-direction:row-reverse;justify-content:space-between;border-radius:12px}.overflow-container{width:100%;max-width:100%;overflow-x:auto;white-space:nowrap}.svg-border-wrapper{position:relative;width:100%;height:95%;min-height:100px}.svg-border-wrapper .content{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center}.content{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;text-align:center}.content label{max-width:90%;margin:10px 0;font-size:16px;line-height:1.4;color:#000000b3;white-space:normal;word-wrap:break-word;font-weight:700}.icon-container{background:#0000000a;position:relative;width:40px;height:40px;border-radius:5px}.icon-container mat-icon{width:30px;height:30px;margin:auto;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}\n"], dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.TreeColumnViewComponent, selector: "lib-tree-column-view", inputs: ["column", "containerId"], outputs: ["updateTaxonomyTerm", "updateTermList", "cardsCount"] }, { kind: "component", type: i12.ActionBarComponent, selector: "lib-action-bar", inputs: ["actionType", "configType"], outputs: ["sendApproval", "closeAction"] }] }); }
702
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TreeViewComponent, selector: "lib-tree-view", inputs: { approvalList: "approvalList", isApprovalView: "isApprovalView", workFlowStatus: "workFlowStatus", environment: "environment", taxonomyConfig: "taxonomyConfig", orgSelectedData: "orgSelectedData" }, outputs: { sentForApprove: "sentForApprove", loaderEnable: "loaderEnable", manageOrg: "manageOrg" }, usesOnChanges: true, ngImport: i0, template: "<!-- <div class=\"flex flex-1 connectionSettings\">\n <button mat-raised-button color=\"accent\" (click)=\"newConnection()\">\n <mat-icon>{{app_strings.build}}</mat-icon>\n </button>\n</div> -->\n\n<div *ngIf=\"list && list.length > 0\" class=\"flex heightFix overflow-container\" id=\"treeViewContainer\">\n <ng-container *ngFor=\"let column of list; let i = index;\">\n <div class=\"flex-1 felx-col col-container containers{{list.length}}\" id=\"box{{i+1}}Container\">\n <div class=\"category-heading-sticky\">\n <div class=\"category-heading-container\">\n <div class='category-header'>\n <div class=\"category-header-items w-full flex padding-remove\" id=\"box{{i}}Header\">\n <span class=\"flex gap-1 mat-body-1\">\n <ng-container *ngIf=\"column?.config?.iconEnabled\">\n <mat-icon [ngStyle]=\"{'color':column.config.color}\">{{column.config.icon}}</mat-icon>\n </ng-container>\n <!-- {{column.name}} -->\n {{column?.config?.categoryDisplayName || column.name }}\n <ng-container *ngIf=\"i != 0 && categoryList?.length > 0; else firstColumn\">\n <ng-container *ngIf=\"column.index !== 1\">\n <span class=\"count\">({{getCount(column.code)}})</span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"column?.config?.levelNameEdit\">\n <button mat-icon-button type=\"button\" class=\"edit-btn flex\" (click)=\"editCategoryName(column, i)\">\n <mat-icon>edit</mat-icon>\n </button>\n </ng-container>\n </span>\n <ng-template #firstColumn>\n <span *ngIf=\"i == 0\" id=\"box{{i+1}}count\" class=\"count\">({{column.children.length}})</span>\n </ng-template>\n <ng-container class=\"\" *ngIf=\"column?.config?.createBtnEnabled && !column?.config?.addOrgEnabled\">\n <button mat-button class=\"add-btn margin-left-auto\" [ngClass]=\"{'button-enabled': configCodeBtn== column?.code, 'button-disabled': configCodeBtn!== column?.code}\"\n (click)=\"openCreateTermDialog(column, i)\" type=\"button\">\n <span>Add</span>\n <mat-icon class=\"margin-remove\">\n {{app_strings.add}}\n </mat-icon>\n </button>\n </ng-container>\n <ng-container *ngIf=\"column?.config?.addOrgEnabled && !column?.config?.createBtnEnabled\">\n <button mat-button class=\"add-btn margin-left-auto\" (click)=\"openOrganizationDialog(column, i)\" type=\"button\" \n [ngClass]=\"{'button-enabled': isCurrentOrNextTerm(column, i), 'button-disabled': !isCurrentOrNextTerm(column, i)}\">\n <span>Add</span>\n <mat-icon class=\"margin-remove\">\n {{app_strings.add}}\n </mat-icon>\n </button>\n </ng-container>\n <div class=\"arrow\" id=\"box{{i+1}}count\"></div>\n </div>\n </div>\n <!-- <div>\n Put search button here in future\n </div> -->\n </div>\n </div>\n <!-- {{column.code}} -->\n <div class=\"padding-x2 cat-columns container-box\" id=\"box{{i+1}}\">\n <ng-container *ngIf=\"column?.children && column?.children.length > 0\">\n <lib-tree-column-view *ngIf=\"loaded[column.code]\" #selectedTaxonomyTerm [column]=\"column\"\n [containerId]=\"'box'+(i+1)\" (updateTaxonomyTerm)=\"updateTaxonomyTerm($event)\"\n (updateTermList)=\"updateDraftStatusTerms($event)\" (cardsCount)=\"getNoOfCards($event)\" \n (retireTermData)=\"removeConnection($event)\" (cardAction)=\"cardActionEmit($event)\">\n </lib-tree-column-view>\n </ng-container>\n <ng-container *ngIf=\"shouldShowSvgBorderWrapper(column, i)\">\n <div class=\"svg-border-wrapper\">\n <svg width=\"100%\" height=\"100%\">\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"none\" stroke=\"#1B213352\" stroke-width=\"2\" \n stroke-dasharray=\"20, 10\" rx=\"10\" ry=\"10\"/>\n </svg>\n <div class=\"content flex flex-col w-full\">\n <div class=\"icon-container\">\n <mat-icon svgIcon=\"frac-no-connection\"></mat-icon>\n </div>\n <label>Select an organization to add or see further connections</label>\n <button mat-button class=\"add-btn\" (click)=\"openOrganizationDialog(column, i)\" type=\"button\" \n [ngClass]=\"{'button-enabled': isCurrentOrNextTerm(column, i), 'button-disabled': !isCurrentOrNextTerm(column, i)}\">\n <span>Add</span>\n <mat-icon class=\"margin-remove\">\n {{app_strings.add}}\n </mat-icon>\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n <lib-action-bar *ngIf=\"showActionBar\" [actionType]=\"isApprovalView\" [configType]=\"workFlowStatus\"\n (sendApproval)=\"sendForApproval()\" (closeAction)=\"closeActionBar($event)\"></lib-action-bar>\n</div>\n<div *ngIf=\"!(list && list.length > 0 ) && isFraworkLoading\" class=\"flex heightFix \">\n <h1 i18n>{{app_strings.loading}}</h1>\n</div>", styles: [".connectionSettings{flex-direction:row-reverse;z-index:40;position:fixed;padding:0 4px 4px 0;bottom:0;right:0}.flex{display:flex}.w-full{width:100%;align-items:center;display:flex}.w-full.addCardButton{padding:.25em .8em;text-align:left;border:2px dotted #b1b1b1;color:#666;border-radius:8px}.w-full.addCardButton .mat-icon{position:absolute;top:0%;right:3%;height:100%;display:flex;align-items:center}.w-full .button-enabled{opacity:1;pointer-events:auto}.w-full .button-disabled{opacity:.5;pointer-events:none}.w-full.addCardButtonNew{padding:8px 12px;text-align:center;border-radius:24px;height:24px;background:#1b4ca1;color:#fff!important}.w-full.addCardButtonNew .mat-icon-custom{font-size:21px}.w-full.addCardButtonNew:disabled{opacity:.6}.mb1{margin-bottom:1em}flex-center{flex-wrap:nowrap;align-items:start;justify-content:center}.flex-1{flex:1}.felx-col{flex-direction:column}.padding-x2{padding:0 2.5em}.heightFix{height:100%;width:100%;justify-content:space-around;position:relative}.cat-columns{position:relative;height:inherit}.col-container{height:inherit;min-width:350px}.category-heading-sticky{top:0;position:sticky;width:100%;background:#fff;margin-bottom:16px;z-index:10}.category-heading-container{box-sizing:content-box;position:relative;display:block;padding:2px 2.5em}.category-heading-container .category-header{display:flex;align-items:center}.category-heading-container .category-header-items{display:flex;align-items:center;padding:0 10px}.category-heading-container .category-header h4{padding:0 10px;color:#00000080}.category-heading-container .category-header .count{padding:0 2px}.category-heading-container .category-header .category-header-items{font-size:12px;font-weight:600;font-family:Lato;color:#7c7c7c}.cat-columns:hover{overflow-y:scroll}.container-box{overflow-y:auto;scrollbar-width:none;-ms-overflow-style:none;height:calc(100% - 70px)}.container-box::-webkit-scrollbar{width:0;height:0}.spinner{position:fixed;display:flex;top:50%;left:50%}.arrow{left:30px;position:relative}@media only screen and (max-width: 1024px){::ng-deep mat-checkbox .mat-checkbox-inner-container{height:.8em;width:.8em}}@media only screen and (max-width: 1024px){.containers4{max-width:250px;font-size:10px}.containers5{max-width:230px}.containers6{max-width:150px}.containers7{max-width:100px}.w-full{height:3.5em}.w-full.mat-stroked-button{font-size:8px}.padding-x2,.category-heading-container{padding:0 2em}mat-icon{font-size:12px;width:1.25em;height:1.25em}.connectionSettings .mat-raised-button{min-width:auto;padding:0 .5em;line-height:2em}}@media only screen and (max-width: 992px){.containers4{max-width:220px;font-size:9px}.padding-x2,.category-heading-container{padding:0 1.5em}}@media only screen and (max-width: 768px){.containers4{max-width:165px;font-size:8px}.w-full{height:2.5em}.padding-x2,.category-heading-container{padding:0 1em}mat-icon{font-size:8px;width:1em;height:1em}.connectionSettings .mat-raised-button{min-width:auto;padding:0 .3em;line-height:1.5em}}.add-btn{height:24px;background:#1b4ca1;color:#fff!important;display:flex;flex-direction:row-reverse;justify-content:space-between;border-radius:12px}.overflow-container{width:100%;max-width:100%;overflow-x:auto;white-space:nowrap}.svg-border-wrapper{position:relative;width:100%;height:95%;min-height:100px}.svg-border-wrapper .content{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center}.content{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;text-align:center}.content label{max-width:90%;margin:10px 0;font-size:16px;line-height:1.4;color:#000000b3;white-space:normal;word-wrap:break-word;font-weight:700}.icon-container{background:#0000000a;position:relative;width:40px;height:40px;border-radius:5px}.icon-container mat-icon{width:30px;height:30px;margin:auto;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.edit-btn{width:24px;height:24px;padding:0;display:flex;align-items:center;justify-content:center;position:relative}.edit-btn mat-icon{font-size:16px;position:absolute;top:50%;height:16px;left:50%;width:16px;transform:translate(-50%,-50%)}\n"], dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.TreeColumnViewComponent, selector: "lib-tree-column-view", inputs: ["column", "containerId"], outputs: ["updateTaxonomyTerm", "updateTermList", "cardsCount", "cardAction"] }, { kind: "component", type: i12.ActionBarComponent, selector: "lib-action-bar", inputs: ["actionType", "configType"], outputs: ["sendApproval", "closeAction"] }] }); }
507
703
  }
508
704
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeViewComponent, decorators: [{
509
705
  type: Component,
510
- args: [{ selector: 'lib-tree-view', template: "<!-- <div class=\"flex flex-1 connectionSettings\">\n <button mat-raised-button color=\"accent\" (click)=\"newConnection()\">\n <mat-icon>{{app_strings.build}}</mat-icon>\n </button>\n</div> -->\n\n<div *ngIf=\"list && list.length > 0\" class=\"flex heightFix overflow-container\" id=\"treeViewContainer\">\n <ng-container *ngFor=\"let column of list; let i = index;\">\n <div class=\"flex-1 felx-col col-container containers{{list.length}}\" id=\"box{{i+1}}Container\">\n <div class=\"category-heading-sticky\">\n <div class=\"category-heading-container\">\n <div class='category-header'>\n <div class=\"category-header-items w-full\" id=\"box{{i}}Header\">\n <ng-container *ngIf=\"column?.config?.iconEnabled\">\n <mat-icon [ngStyle]=\"{'color':column.config.color}\">{{column.config.icon}}</mat-icon>\n </ng-container>\n <span class=\"flex-1 mat-body-1\">\n <!-- {{column.name}} -->\n {{column?.config?.categoryDisplayName || column.name }}\n <ng-container *ngIf=\"i != 0 && categoryList?.length > 0; else firstColumn\">\n <ng-container *ngIf=\"column.index !== 1\">\n <span class=\"count\">({{getCount(column.code)}})</span>\n </ng-container>\n </ng-container>\n </span>\n <ng-template #firstColumn>\n <span *ngIf=\"i == 0\" id=\"box{{i+1}}count\" class=\"count\">({{column.children.length}})</span>\n </ng-template>\n <ng-container class=\"\" *ngIf=\"column?.config?.createBtnEnabled && !column?.config?.addOrgEnabled\">\n <button mat-button class=\"add-btn\" [ngClass]=\"{'button-enabled': configCodeBtn== column?.code, 'button-disabled': configCodeBtn!== column?.code}\"\n (click)=\"openCreateTermDialog(column, i)\" type=\"button\">\n <span>Add</span>\n <mat-icon class=\"margin-remove\">\n {{app_strings.add}}\n </mat-icon>\n </button>\n </ng-container>\n <ng-container *ngIf=\"column?.config?.addOrgEnabled && !column?.config?.createBtnEnabled\">\n <button mat-button class=\"add-btn\" (click)=\"openOrganizationDialog(column, i)\" type=\"button\" \n [ngClass]=\"{'button-enabled': isCurrentOrNextTerm(column, i), 'button-disabled': !isCurrentOrNextTerm(column, i)}\">\n <span>Add</span>\n <mat-icon class=\"margin-remove\">\n {{app_strings.add}}\n </mat-icon>\n </button>\n </ng-container>\n <div class=\"arrow\" id=\"box{{i+1}}count\"></div>\n </div>\n </div>\n <!-- <div>\n Put search button here in future\n </div> -->\n </div>\n </div>\n <!-- {{column.code}} -->\n <div class=\"padding-x2 cat-columns container-box\" id=\"box{{i+1}}\">\n <ng-container *ngIf=\"column?.children && column?.children.length > 0\">\n <lib-tree-column-view *ngIf=\"loaded[column.code]\" #selectedTaxonomyTerm [column]=\"column\"\n [containerId]=\"'box'+(i+1)\" (updateTaxonomyTerm)=\"updateTaxonomyTerm($event)\"\n (updateTermList)=\"updateDraftStatusTerms($event)\" (cardsCount)=\"getNoOfCards($event)\">\n </lib-tree-column-view>\n </ng-container>\n <ng-container *ngIf=\"shouldShowSvgBorderWrapper(column, i)\">\n <div class=\"svg-border-wrapper\">\n <svg width=\"100%\" height=\"100%\">\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"none\" stroke=\"#1B213352\" stroke-width=\"2\" \n stroke-dasharray=\"20, 10\" rx=\"10\" ry=\"10\"/>\n </svg>\n <div class=\"content flex flex-col w-full\">\n <div class=\"icon-container\">\n <mat-icon svgIcon=\"frac-no-connection\"></mat-icon>\n </div>\n <label>{{isLoading}} Select an organization to add or see further connections</label>\n <button mat-button class=\"add-btn\" (click)=\"openOrganizationDialog(column, i)\" type=\"button\" \n [ngClass]=\"{'button-enabled': isCurrentOrNextTerm(column, i), 'button-disabled': !isCurrentOrNextTerm(column, i)}\">\n <span>Add</span>\n <mat-icon class=\"margin-remove\">\n {{app_strings.add}}\n </mat-icon>\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n <lib-action-bar *ngIf=\"showActionBar\" [actionType]=\"isApprovalView\" [configType]=\"workFlowStatus\"\n (sendApproval)=\"sendForApproval()\" (closeAction)=\"closeActionBar($event)\"></lib-action-bar>\n</div>\n<div *ngIf=\"!(list && list.length > 0 ) && isFraworkLoading\" class=\"flex heightFix \">\n <h1 i18n>{{app_strings.loading}}</h1>\n</div>", styles: [".connectionSettings{flex-direction:row-reverse;z-index:40;position:fixed;padding:0 4px 4px 0;bottom:0;right:0}.flex{display:flex}.w-full{width:100%;align-items:center;display:flex}.w-full.addCardButton{padding:.25em .8em;text-align:left;border:2px dotted #b1b1b1;color:#666;border-radius:8px}.w-full.addCardButton .mat-icon{position:absolute;top:0%;right:3%;height:100%;display:flex;align-items:center}.w-full .button-enabled{opacity:1;pointer-events:auto}.w-full .button-disabled{opacity:.5;pointer-events:none}.w-full.addCardButtonNew{padding:8px 12px;text-align:center;border-radius:24px;height:24px;background:#1b4ca1;color:#fff!important}.w-full.addCardButtonNew .mat-icon-custom{font-size:21px}.w-full.addCardButtonNew:disabled{opacity:.6}.mb1{margin-bottom:1em}flex-center{flex-wrap:nowrap;align-items:start;justify-content:center}.flex-1{flex:1}.felx-col{flex-direction:column}.padding-x2{padding:0 2.5em}.heightFix{height:100%;width:100%;justify-content:space-around;position:relative}.cat-columns{position:relative;height:inherit}.col-container{height:inherit;min-width:350px}.category-heading-sticky{top:0;position:sticky;width:100%;background:#fff;margin-bottom:16px;z-index:10}.category-heading-container{box-sizing:content-box;position:relative;display:block;padding:2px 2.5em}.category-heading-container .category-header{display:flex;align-items:center}.category-heading-container .category-header-items{display:flex;align-items:center;padding:0 10px}.category-heading-container .category-header h4{padding:0 10px;color:#00000080}.category-heading-container .category-header .count{padding:0 2px}.category-heading-container .category-header .category-header-items{font-size:12px;font-weight:600;font-family:Lato;color:#7c7c7c}.cat-columns:hover{overflow-y:scroll}.container-box{overflow-y:auto;scrollbar-width:none;-ms-overflow-style:none;height:calc(100% - 70px)}.container-box::-webkit-scrollbar{width:0;height:0}.spinner{position:fixed;display:flex;top:50%;left:50%}.arrow{left:30px;position:relative}@media only screen and (max-width: 1024px){::ng-deep mat-checkbox .mat-checkbox-inner-container{height:.8em;width:.8em}}@media only screen and (max-width: 1024px){.containers4{max-width:250px;font-size:10px}.containers5{max-width:230px}.containers6{max-width:150px}.containers7{max-width:100px}.w-full{height:3.5em}.w-full.mat-stroked-button{font-size:8px}.padding-x2,.category-heading-container{padding:0 2em}mat-icon{font-size:12px;width:1.25em;height:1.25em}.connectionSettings .mat-raised-button{min-width:auto;padding:0 .5em;line-height:2em}}@media only screen and (max-width: 992px){.containers4{max-width:220px;font-size:9px}.padding-x2,.category-heading-container{padding:0 1.5em}}@media only screen and (max-width: 768px){.containers4{max-width:165px;font-size:8px}.w-full{height:2.5em}.padding-x2,.category-heading-container{padding:0 1em}mat-icon{font-size:8px;width:1em;height:1em}.connectionSettings .mat-raised-button{min-width:auto;padding:0 .3em;line-height:1.5em}}.add-btn{height:24px;background:#1b4ca1;color:#fff!important;display:flex;flex-direction:row-reverse;justify-content:space-between;border-radius:12px}.overflow-container{width:100%;max-width:100%;overflow-x:auto;white-space:nowrap}.svg-border-wrapper{position:relative;width:100%;height:95%;min-height:100px}.svg-border-wrapper .content{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center}.content{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;text-align:center}.content label{max-width:90%;margin:10px 0;font-size:16px;line-height:1.4;color:#000000b3;white-space:normal;word-wrap:break-word;font-weight:700}.icon-container{background:#0000000a;position:relative;width:40px;height:40px;border-radius:5px}.icon-container mat-icon{width:30px;height:30px;margin:auto;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}\n"] }]
706
+ args: [{ selector: 'lib-tree-view', template: "<!-- <div class=\"flex flex-1 connectionSettings\">\n <button mat-raised-button color=\"accent\" (click)=\"newConnection()\">\n <mat-icon>{{app_strings.build}}</mat-icon>\n </button>\n</div> -->\n\n<div *ngIf=\"list && list.length > 0\" class=\"flex heightFix overflow-container\" id=\"treeViewContainer\">\n <ng-container *ngFor=\"let column of list; let i = index;\">\n <div class=\"flex-1 felx-col col-container containers{{list.length}}\" id=\"box{{i+1}}Container\">\n <div class=\"category-heading-sticky\">\n <div class=\"category-heading-container\">\n <div class='category-header'>\n <div class=\"category-header-items w-full flex padding-remove\" id=\"box{{i}}Header\">\n <span class=\"flex gap-1 mat-body-1\">\n <ng-container *ngIf=\"column?.config?.iconEnabled\">\n <mat-icon [ngStyle]=\"{'color':column.config.color}\">{{column.config.icon}}</mat-icon>\n </ng-container>\n <!-- {{column.name}} -->\n {{column?.config?.categoryDisplayName || column.name }}\n <ng-container *ngIf=\"i != 0 && categoryList?.length > 0; else firstColumn\">\n <ng-container *ngIf=\"column.index !== 1\">\n <span class=\"count\">({{getCount(column.code)}})</span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"column?.config?.levelNameEdit\">\n <button mat-icon-button type=\"button\" class=\"edit-btn flex\" (click)=\"editCategoryName(column, i)\">\n <mat-icon>edit</mat-icon>\n </button>\n </ng-container>\n </span>\n <ng-template #firstColumn>\n <span *ngIf=\"i == 0\" id=\"box{{i+1}}count\" class=\"count\">({{column.children.length}})</span>\n </ng-template>\n <ng-container class=\"\" *ngIf=\"column?.config?.createBtnEnabled && !column?.config?.addOrgEnabled\">\n <button mat-button class=\"add-btn margin-left-auto\" [ngClass]=\"{'button-enabled': configCodeBtn== column?.code, 'button-disabled': configCodeBtn!== column?.code}\"\n (click)=\"openCreateTermDialog(column, i)\" type=\"button\">\n <span>Add</span>\n <mat-icon class=\"margin-remove\">\n {{app_strings.add}}\n </mat-icon>\n </button>\n </ng-container>\n <ng-container *ngIf=\"column?.config?.addOrgEnabled && !column?.config?.createBtnEnabled\">\n <button mat-button class=\"add-btn margin-left-auto\" (click)=\"openOrganizationDialog(column, i)\" type=\"button\" \n [ngClass]=\"{'button-enabled': isCurrentOrNextTerm(column, i), 'button-disabled': !isCurrentOrNextTerm(column, i)}\">\n <span>Add</span>\n <mat-icon class=\"margin-remove\">\n {{app_strings.add}}\n </mat-icon>\n </button>\n </ng-container>\n <div class=\"arrow\" id=\"box{{i+1}}count\"></div>\n </div>\n </div>\n <!-- <div>\n Put search button here in future\n </div> -->\n </div>\n </div>\n <!-- {{column.code}} -->\n <div class=\"padding-x2 cat-columns container-box\" id=\"box{{i+1}}\">\n <ng-container *ngIf=\"column?.children && column?.children.length > 0\">\n <lib-tree-column-view *ngIf=\"loaded[column.code]\" #selectedTaxonomyTerm [column]=\"column\"\n [containerId]=\"'box'+(i+1)\" (updateTaxonomyTerm)=\"updateTaxonomyTerm($event)\"\n (updateTermList)=\"updateDraftStatusTerms($event)\" (cardsCount)=\"getNoOfCards($event)\" \n (retireTermData)=\"removeConnection($event)\" (cardAction)=\"cardActionEmit($event)\">\n </lib-tree-column-view>\n </ng-container>\n <ng-container *ngIf=\"shouldShowSvgBorderWrapper(column, i)\">\n <div class=\"svg-border-wrapper\">\n <svg width=\"100%\" height=\"100%\">\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"none\" stroke=\"#1B213352\" stroke-width=\"2\" \n stroke-dasharray=\"20, 10\" rx=\"10\" ry=\"10\"/>\n </svg>\n <div class=\"content flex flex-col w-full\">\n <div class=\"icon-container\">\n <mat-icon svgIcon=\"frac-no-connection\"></mat-icon>\n </div>\n <label>Select an organization to add or see further connections</label>\n <button mat-button class=\"add-btn\" (click)=\"openOrganizationDialog(column, i)\" type=\"button\" \n [ngClass]=\"{'button-enabled': isCurrentOrNextTerm(column, i), 'button-disabled': !isCurrentOrNextTerm(column, i)}\">\n <span>Add</span>\n <mat-icon class=\"margin-remove\">\n {{app_strings.add}}\n </mat-icon>\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n <lib-action-bar *ngIf=\"showActionBar\" [actionType]=\"isApprovalView\" [configType]=\"workFlowStatus\"\n (sendApproval)=\"sendForApproval()\" (closeAction)=\"closeActionBar($event)\"></lib-action-bar>\n</div>\n<div *ngIf=\"!(list && list.length > 0 ) && isFraworkLoading\" class=\"flex heightFix \">\n <h1 i18n>{{app_strings.loading}}</h1>\n</div>", styles: [".connectionSettings{flex-direction:row-reverse;z-index:40;position:fixed;padding:0 4px 4px 0;bottom:0;right:0}.flex{display:flex}.w-full{width:100%;align-items:center;display:flex}.w-full.addCardButton{padding:.25em .8em;text-align:left;border:2px dotted #b1b1b1;color:#666;border-radius:8px}.w-full.addCardButton .mat-icon{position:absolute;top:0%;right:3%;height:100%;display:flex;align-items:center}.w-full .button-enabled{opacity:1;pointer-events:auto}.w-full .button-disabled{opacity:.5;pointer-events:none}.w-full.addCardButtonNew{padding:8px 12px;text-align:center;border-radius:24px;height:24px;background:#1b4ca1;color:#fff!important}.w-full.addCardButtonNew .mat-icon-custom{font-size:21px}.w-full.addCardButtonNew:disabled{opacity:.6}.mb1{margin-bottom:1em}flex-center{flex-wrap:nowrap;align-items:start;justify-content:center}.flex-1{flex:1}.felx-col{flex-direction:column}.padding-x2{padding:0 2.5em}.heightFix{height:100%;width:100%;justify-content:space-around;position:relative}.cat-columns{position:relative;height:inherit}.col-container{height:inherit;min-width:350px}.category-heading-sticky{top:0;position:sticky;width:100%;background:#fff;margin-bottom:16px;z-index:10}.category-heading-container{box-sizing:content-box;position:relative;display:block;padding:2px 2.5em}.category-heading-container .category-header{display:flex;align-items:center}.category-heading-container .category-header-items{display:flex;align-items:center;padding:0 10px}.category-heading-container .category-header h4{padding:0 10px;color:#00000080}.category-heading-container .category-header .count{padding:0 2px}.category-heading-container .category-header .category-header-items{font-size:12px;font-weight:600;font-family:Lato;color:#7c7c7c}.cat-columns:hover{overflow-y:scroll}.container-box{overflow-y:auto;scrollbar-width:none;-ms-overflow-style:none;height:calc(100% - 70px)}.container-box::-webkit-scrollbar{width:0;height:0}.spinner{position:fixed;display:flex;top:50%;left:50%}.arrow{left:30px;position:relative}@media only screen and (max-width: 1024px){::ng-deep mat-checkbox .mat-checkbox-inner-container{height:.8em;width:.8em}}@media only screen and (max-width: 1024px){.containers4{max-width:250px;font-size:10px}.containers5{max-width:230px}.containers6{max-width:150px}.containers7{max-width:100px}.w-full{height:3.5em}.w-full.mat-stroked-button{font-size:8px}.padding-x2,.category-heading-container{padding:0 2em}mat-icon{font-size:12px;width:1.25em;height:1.25em}.connectionSettings .mat-raised-button{min-width:auto;padding:0 .5em;line-height:2em}}@media only screen and (max-width: 992px){.containers4{max-width:220px;font-size:9px}.padding-x2,.category-heading-container{padding:0 1.5em}}@media only screen and (max-width: 768px){.containers4{max-width:165px;font-size:8px}.w-full{height:2.5em}.padding-x2,.category-heading-container{padding:0 1em}mat-icon{font-size:8px;width:1em;height:1em}.connectionSettings .mat-raised-button{min-width:auto;padding:0 .3em;line-height:1.5em}}.add-btn{height:24px;background:#1b4ca1;color:#fff!important;display:flex;flex-direction:row-reverse;justify-content:space-between;border-radius:12px}.overflow-container{width:100%;max-width:100%;overflow-x:auto;white-space:nowrap}.svg-border-wrapper{position:relative;width:100%;height:95%;min-height:100px}.svg-border-wrapper .content{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center}.content{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;text-align:center}.content label{max-width:90%;margin:10px 0;font-size:16px;line-height:1.4;color:#000000b3;white-space:normal;word-wrap:break-word;font-weight:700}.icon-container{background:#0000000a;position:relative;width:40px;height:40px;border-radius:5px}.icon-container mat-icon{width:30px;height:30px;margin:auto;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.edit-btn{width:24px;height:24px;padding:0;display:flex;align-items:center;justify-content:center;position:relative}.edit-btn mat-icon{font-size:16px;position:absolute;top:50%;height:16px;left:50%;width:16px;transform:translate(-50%,-50%)}\n"] }]
511
707
  }], ctorParameters: function () { return [{ type: i1.FrameworkService }, { type: i2.LocalConnectionService }, { type: i3.MatLegacyDialog }, { type: i4.ApprovalService }, { type: i5.MatLegacySnackBar }, { type: i6.ConnectorService }, { type: i0.ChangeDetectorRef }, { type: i7.TreeHierarchyService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { approvalList: [{
512
708
  type: Input
513
709
  }], isApprovalView: [{
@@ -524,5 +720,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
524
720
  type: Output
525
721
  }], loaderEnable: [{
526
722
  type: Output
723
+ }], manageOrg: [{
724
+ type: Output
527
725
  }] } });
528
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90cmVlLWhpZXJhcmNoeS9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFHN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFPdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUN0SCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUU3RyxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQTs7Ozs7Ozs7Ozs7Ozs7QUFRbkMsTUFBTSxPQUFPLGlCQUFpQjtJQTJCNUIsWUFBb0IsZ0JBQWtDLEVBQzVDLFFBQWdDLEVBQ2pDLE1BQWlCLEVBQ2hCLGVBQWdDLEVBQ2hDLFNBQXNCLEVBQ3RCLFlBQThCLEVBQzlCLEdBQXNCLEVBQ3RCLGdCQUFzQyxFQUN0QyxjQUFpQztRQVJ2QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtC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dXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRnJhbWV3b3JrU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZyYW1ld29yay5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZyBhcyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJztcbmltcG9ydCB7IENyZWF0ZVRlcm1Db21wb25lbnQgfSBmcm9tICcuLi9jcmVhdGUtdGVybS9jcmVhdGUtdGVybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29ubmVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vY29ubmVjdG9yL2Nvbm5lY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9jYWxDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvY2FsLWNvbm5lY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJQ29ubmVjdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29ubmVjdGlvbi10eXBlLm1vZGVsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29ubmVjdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Nvbm5lY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcHJvdmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcHJvdmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0TGVnYWN5U25hY2tCYXIgYXMgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktc25hY2stYmFyJztcbmltcG9ydCB7IGRlZmF1bHRDb25maWcsIGhlYWRlckxpbmVDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXBwLWNvbnN0YW50JztcbmltcG9ydCB7IGxhYmVscyB9IGZyb20gJy4uLy4uL2xhYmVscy9zdHJpbmdzJztcbmltcG9ydCB7IENhcmQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdmFyaWFibGUtdHlwZS5tb2RlbCc7XG5pbXBvcnQgeyBDcmVhdGVUZXJtRnJvbUZyYW1ld29ya0NvbXBvbmVudCB9IGZyb20gJy4uL2NyZWF0ZS10ZXJtLWZyb20tZnJhbWV3b3JrL2NyZWF0ZS10ZXJtLWZyb20tZnJhbWV3b3JrLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPcmdIaWVyYXJjaHlBZGRNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL29yZy1oaWVyYXJjaHktYWRkLW1vZGFsL29yZy1oaWVyYXJjaHktYWRkLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmVlSGllcmFyY2h5U2VydmljZSB9IGZyb20gJy4uLy4uL3RyZWUtaGllcmFyY2h5LnNlcnZpY2UnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcblxuZGVjbGFyZSB2YXIgTGVhZGVyTGluZTogYW55O1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXRyZWUtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90cmVlLXZpZXcuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgYXBwcm92YWxMaXN0OiBBcnJheTxDYXJkPiA9IFtdO1xuICBASW5wdXQoKSBpc0FwcHJvdmFsVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB3b3JrRmxvd1N0YXR1czogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGVudmlyb25tZW50OmFueTtcbiAgQElucHV0KCkgdGF4b25vbXlDb25maWc6IGFueTtcbiAgQElucHV0KCkgb3JnU2VsZWN0ZWREYXRhOiBhbnk7XG4gIEBPdXRwdXQoKSBzZW50Rm9yQXBwcm92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSBsb2FkZXJFbmFibGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBtYXBwaW5nID0ge307XG4gIGhlaWdodExpZ2h0ZWQgPSBbXVxuICBsb2NhbExpc3QgPSBbXVxuICBzaG93UHVibGlzaDogYm9vbGVhbiA9IGZhbHNlXG4gIG5ld1Rlcm1TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICBsb2FkZWQ6IGFueSA9IHt9XG4gIHNob3dBY3Rpb25CYXI6IGJvb2xlYW4gPSBmYWxzZVxuICBhcHByb3ZhbFJlcXVpcmVkVGVybXMgPSBbXVxuICBkcmFmdFRlcm1zOiBBcnJheTxDYXJkPiA9IFtdO1xuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2F0ZWdvcnlMaXN0OmFueSA9IFtdO1xuICBhcHBfc3RyaW5nczogYW55ID0gbGFiZWxzO1xuICBpc0hpZGVCdG5FbmE6Ym9vbGVhbiA9dHJ1ZTtcbiAgY29sdW1uSWQ6c3RyaW5nID0gJyc7XG4gIGNvbmZpZ0NvZGVCdG46YW55O1xuICBkYXRhQ29uZmlnOmFueVxuICBpc0ZyYXdvcmtMb2FkaW5nID0gdHJ1ZVxuICBsb2FkZXJTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb25cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmcmFtZXdvcmtTZXJ2aWNlOiBGcmFtZXdvcmtTZXJ2aWNlLCBcbiAgICBwcml2YXRlIGxvY2FsU3ZjOiBMb2NhbENvbm5lY3Rpb25TZXJ2aWNlLCBcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csIFxuICAgIHByaXZhdGUgYXBwcm92YWxTZXJ2aWNlOiBBcHByb3ZhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHByaXZhdGUgY29ubmVjdG9yU3ZjOiBDb25uZWN0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRyZWVIaWVyYXJjaHlTdmM6IFRyZWVIaWVyYXJjaHlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIFxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5kcmFmdFRlcm1zID0gdGhpcy5hcHByb3ZhbExpc3Q7XG4gICAgdGhpcy5pbml0KClcbiAgICB0aGlzLnNob3dBY3Rpb25CYXIgPSB0aGlzLmlzQXBwcm92YWxWaWV3P3RydWU6ZmFsc2U7XG4gICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmFmdGVyQWRkT3JFZGl0U3ViamVjdC5zdWJzY3JpYmUocmVzcG9uc2VEYXRhID0+IHtcbiAgICAgIGlmKHJlc3BvbnNlRGF0YSAmJiByZXNwb25zZURhdGEucmVzICYmIHJlc3BvbnNlRGF0YS5kYXRhKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaERhdGEocmVzcG9uc2VEYXRhKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5pc0VuYWJsZWRzKClcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gfSBcblxuICBpbml0KCkge1xuICAgIHRoaXMuaW5pdENvbmZpZygpO1xuICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJbmZvKCh0aGlzLm9yZ1NlbGVjdGVkRGF0YSkgPyB0aGlzLm9yZ1NlbGVjdGVkRGF0YSA6ICcnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0b3JTdmMucmVtb3ZlQWxsTGluZXMoKVxuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNhdGVnb3JpZXNIYXNoLnZhbHVlLmZvckVhY2goKGNhdDphbnkpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkZWRbY2F0LmNvZGVdID0gdHJ1ZVxuICAgICAgfSlcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyAgdGhpcy5kcmF3SGVhZGVyTGluZShyZXMucmVzdWx0LmZyYW1ld29yay5jYXRlZ29yaWVzLmxlbmd0aCk7ICBcbiAgICAgICAgICAgICB0aGlzLm1ha2VGaXJzdFRlcm1TZWxlY3RlZCgpXG4gICAgICAgIH0sNTAwKVxuICAgIH0sIChlcnIpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yIGluIGZldGNoaW5nIGZyYW1ld29yaycsIGVycilcbiAgICB9KVxuXG4gICAgdGhpcy5sb2FkZXJTdWJzY3JpcHRpb24gPSB0aGlzLnRyZWVIaWVyYXJjaHlTdmMubG9hZGVyU3RhdGUkLnN1YnNjcmliZShcbiAgICAgIGRhdGEgPT4ge1xuICAgICAgICB0aGlzLmxvYWRlckVuYWJsZS5lbWl0KGRhdGEpXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICB9LFxuICAgIClcbiAgXG4gIH1cbiAgcmVmcmVzaERhdGEocmVzRGF0YTogYW55KSB7XG4gICAgY29uc3QgcmVzID0gcmVzRGF0YS5yZXNcbiAgICBpZiAocmVzICYmIHJlcy5jcmVhdGVkKSB7XG4gICAgICB0aGlzLnNob3dQdWJsaXNoID0gdHJ1ZVxuICAgIH1cbiAgICBpZihyZXMubXVsdGkgJiYgQXJyYXkuaXNBcnJheShyZXMudGVybSkgJiYgcmVzLnRlcm0ubGVuZ3RoKXtcbiAgICAgIHJlcy50ZXJtID0gcmVzLnRlcm1bMF1cbiAgICB9IFxuICAgIHRoaXMubG9hZGVkW3Jlcy50ZXJtLmNhdGVnb3J5XSA9IGZhbHNlXG4gICAgLy8gd2FpdFxuICAgIGNvbnN0IHBhcmVudENvbHVtbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KHJlcy50ZXJtLmNhdGVnb3J5KVxuICAgIHJlcy5wYXJlbnQgPSBudWxsXG4gICAgaWYgKHBhcmVudENvbHVtbikge1xuICAgICAgcmVzLnBhcmVudCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChwYXJlbnRDb2x1bW4uY29kZSlcbiAgICAgIGlmKHJlc0RhdGEudHlwZSA9PT0gJ3VwZGF0ZScpe1xuICAgICAgICBcbiAgICAgICAgcmVzLnBhcmVudC5jaGlsZHJlbltyZXMucGFyZW50LmNoaWxkcmVuLmZpbmRJbmRleCgoZWw6IGFueSkgPT4gZWwuaWRlbnRpZmllciA9PT0gcmVzLnRlcm0uaWRlbnRpZmllcildID0gIHJlcy50ZXJtXG4gICAgICAgIC8vIHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LmdldChyZXMucGFyZW50LmNhdGVnb3J5KS5jaGlsZHJlbiA9IFsuLi5yZXMucGFyZW50LmNoaWxkcmVuXVxuICAgICAgICBcbiAgICAgICAgXG5cbiAgICAgICAgLy8gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmN1cnJlbnRTZWxlY3Rpb24ubmV4dCh7IHR5cGU6IHJlcy50ZXJtLmNhdGVnb3J5LCBkYXRhOiByZXMudGVybS5jaGlsZHJlbiwgY2FyZFJlZjpyZXNEYXRhLmNhcmRSZWYgfSlcbiAgICAgICAgLy8gdGhpcy51cGRhdGVTZWxlY3Rpb24ocmVzLnRlcm0uY2F0ZWdvcnksIHJlcy50ZXJtLmNvZGUpO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZVNlbGVjdGlvbihyZXMucGFyZW50LmNhdGVnb3J5LCByZXMucGFyZW50LmNvZGUpO1xuICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi5uZXh0KHsgdHlwZTogcmVzLnRlcm0uY2F0ZWdvcnksIGRhdGE6IHJlcy50ZXJtLmNoaWxkcmVuLCBjYXJkUmVmOnJlc0RhdGEuY2FyZFJlZiB9KVxuICAgICAgICAvLyB9LCAxMDApO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZUZpbmFsTGlzdCh7IHNlbGVjdGVkVGVybTogcmVzLnRlcm0sIGlzU2VsZWN0ZWQ6IHRydWUsIHBhcmVudERhdGE6IHJlcy5wYXJlbnQsIGNvbEluZGV4OnJlc0RhdGEuaW5kZXggfSlcbiAgICAgICAgIHRoaXMubG9hZGVkW3Jlcy50ZXJtLmNhdGVnb3J5XSA9IHRydWVcbiAgICAgICAgcmVzLnRlcm0uc2VsZWN0ZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5kZWxldGUocmVzLnRlcm0uY2F0ZWdvcnkpXG4gICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuaW5zZXJ0VXBkYXRlRGVsZXRlTm90aWZpZXIubmV4dCh7IGFjdGlvbjogcmVzLnRlcm0uY2F0ZWdvcnksIHR5cGU6J3VwZGF0ZScsIGRhdGE6IHJlcy50ZXJtIH0pXG4gICAgICAgICB0aGlzLnVwZGF0ZUZpbmFsTGlzdCh7IHNlbGVjdGVkVGVybTogcmVzLnRlcm0sIGlzU2VsZWN0ZWQ6IHRydWUsIHBhcmVudERhdGE6IHJlcy5wYXJlbnQsIGNvbEluZGV4OnJlc0RhdGEuaW5kZXggfSwgJ3VwZGF0ZScpXG4gICAgICAgICByZXMudGVybS5zZWxlY3RlZCA9IHRydWVcbiAgICAgICAgLy8gY29uc3QgbmV4dCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkocmVzLnRlcm0uY2F0ZWdvcnkpXG4gICAgICAgIFxuICAgICAgICAvLyAgIGlmIChuZXh0ICYmIG5leHQuY29kZSkge1xuICAgICAgICAvLyAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZGVsZXRlKG5leHQuY29kZSlcbiAgICAgICAgLy8gICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZighcmVzLm11bHRpKXtcbiAgICAgICAgICByZXMucGFyZW50LmNoaWxkcmVuPyByZXMucGFyZW50LmNoaWxkcmVuLnB1c2gocmVzLnRlcm0pIDpyZXMucGFyZW50WydjaGlsZHJlbiddID0gW3Jlcy50ZXJtXVxuICAgICAgICB9IFxuICAgICAgICB0aGlzLnVwZGF0ZUZpbmFsTGlzdCh7IHNlbGVjdGVkVGVybTogcmVzLnRlcm0sIGlzU2VsZWN0ZWQ6IGZhbHNlLCBwYXJlbnREYXRhOiByZXMucGFyZW50LCBjb2xJbmRleDpyZXNEYXRhLmluZGV4IH0sKVxuICAgICAgfVxuICAgIH1cbiAgIFxuICB9XG5cbiAgbWFrZUZpcnN0VGVybVNlbGVjdGVkKCkge1xuICAgIGNvbnN0IGZpcnN0TGlzdEl0ZW0gPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC5lbnRyaWVzKCkubmV4dCgpLnZhbHVlIGFzIGFueVxuICAgIGlmKGZpcnN0TGlzdEl0ZW0gJiYgZmlyc3RMaXN0SXRlbS5sZW5ndGggPj0gMil7XG4gICAgICBpZihmaXJzdExpc3RJdGVtWzFdICYmIGZpcnN0TGlzdEl0ZW1bMV0uY2hpbGRyZW4gJiYgZmlyc3RMaXN0SXRlbVsxXS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZmlyc3RUZXJtID0gZmlyc3RMaXN0SXRlbVsxXS5jaGlsZHJlblswXSBhcyBhbnlcbiAgICAgICAgY29uc3QgY2FyZFJlZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpcnN0VGVybS5uYW1lKVxuICAgICAgICAvLyB0aGlzLmNhdGVnb3J5TGlzdCA9IFtdXG4gICAgICAgIGZpcnN0VGVybS5zZWxlY3RlZCA9IHRydWVcbiAgICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNhcmRDbGtEYXRhID0gZmlyc3RUZXJtO1xuICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuQ3VycmVudENhcmRDbGsubmV4dChmaXJzdFRlcm0uY2F0ZWdvcnkpXG4gICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLm5leHQoeyB0eXBlOiBmaXJzdFRlcm0uY2F0ZWdvcnksIGRhdGE6IGZpcnN0VGVybSwgY2FyZFJlZiB9KVxuICAgICAgICB0aGlzLmlzRnJhd29ya0xvYWRpbmcgPSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRheG9ub215VGVybShkYXRhOiB7IHNlbGVjdGVkVGVybTogYW55LCBpc1NlbGVjdGVkOiBib29sZWFuLCBpc1VwZGF0ZT86YW55fSkge1xuICAgIGlmKGRhdGEgJiYgZGF0YS5zZWxlY3RlZFRlcm0gJiYgZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnkpIHtcbiAgICAgIGlmKCFkYXRhLmlzVXBkYXRlKXtcbiAgICAgICAgdGhpcy51cGRhdGVGaW5hbExpc3QoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlRmluYWxMaXN0KGRhdGEsICd1cGRhdGUnKVxuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnksIGRhdGEuc2VsZWN0ZWRUZXJtLmNvZGUpO1xuICAgIH1cbiAgfVxuICB1cGRhdGVTZWxlY3Rpb24oY2F0ZWdvcnk6IHN0cmluZywgc2VsZWN0ZWRUZXJtQ29kZTogc3RyaW5nKSB7XG4gICAgY29uc3QgY2F0ZWdvcnlEYXRhID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QuZ2V0KGNhdGVnb3J5KTtcbiAgICBpZiAoY2F0ZWdvcnlEYXRhICYmIGNhdGVnb3J5RGF0YS5jaGlsZHJlbikge1xuICAgICAgY2F0ZWdvcnlEYXRhLmNoaWxkcmVuLm1hcChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9IHNlbGVjdGVkVGVybUNvZGUgPT09IGl0ZW0uY29kZSA/IHRydWUgOiBmYWxzZVxuICAgICAgICByZXR1cm4gaXRlbVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvL25lZWQgdG8gcmVmYWN0b3IgYXQgaGVpZ2ggbGV2ZWxcbiAgdXBkYXRlRmluYWxMaXN0KGRhdGE6IHsgc2VsZWN0ZWRUZXJtOiBhbnksIGlzU2VsZWN0ZWQ6IGJvb2xlYW4sIHBhcmVudERhdGE/OiBhbnksIGNvbEluZGV4PzogYW55fSwgdHlwZT86IGFueSkge1xuICAgIFxuICAgIGlmIChkYXRhLmlzU2VsZWN0ZWQpIHtcbiAgICAgIC8vIGRhdGEuc2VsZWN0ZWRUZXJtLnNlbGVjdGVkID0gZGF0YS5pc1NlbGVjdGVkXG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5zZXQoZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnksIGRhdGEuc2VsZWN0ZWRUZXJtKTtcbiAgICAgIGNvbnN0IG5leHQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KGRhdGEuc2VsZWN0ZWRUZXJtLmNhdGVnb3J5KVxuICAgICAgaWYgKG5leHQgJiYgbmV4dC5jb2RlKSB7XG4gICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmRlbGV0ZShuZXh0LmNvZGUpXG4gICAgICB9XG4gICAgICAvLyBub3RpZnkgbmV4dFxuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmluc2VydFVwZGF0ZURlbGV0ZU5vdGlmaWVyLm5leHQoeyBhY3Rpb246IGRhdGEuc2VsZWN0ZWRUZXJtLmNhdGVnb3J5LCB0eXBlOiB0eXBlID8gdHlwZSA6ICdzZWxlY3QnLCBkYXRhOiBkYXRhLnNlbGVjdGVkVGVybSB9KVxuICAgIH0gXG4gICAgaWYoZGF0YS5jb2xJbmRleCA9PT0gMCAmJiAhZGF0YS5pc1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICBzZXRUaW1lb3V0KCgpPT4ge1xuICAgICAgICB0aGlzLmluaXQoKVxuICAgICAgfSwzMDAwKVxuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubG9hZGVkW2RhdGEuc2VsZWN0ZWRUZXJtLmNhdGVnb3J5XSA9IHRydWVcbiAgICAgIC8vIGlmKHR5cGUgJiYgdHlwZSA9PT0gJ3VwZGF0ZScpe1xuICAgICAgLy8gICB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5kZWxldGUoZGF0YS5zZWxlY3RlZFRlcm0uY2F0ZWdvcnkpO1xuICAgICAgLy8gICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi5uZXh0KHsgdHlwZTogZGF0YS5wYXJlbnREYXRhLmNhdGVnb3J5LCBkYXRhOiBkYXRhLnBhcmVudERhdGEuY2hpbGRyZW4gfSlcbiAgICAgIC8vIH1cbiAgICB9LCAxMDApO1xuXG4gIH1cbiAgaXNFbmFibGVkKGNvbHVtbkNvZGU6IHN0cmluZyk6IGJvb2xlYW4geyAgICBcbiAgICByZXR1cm4gISF0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQoY29sdW1uQ29kZSlcbiAgfVxuXG4gIGlzRW5hYmxlZHMoKSB7XG4gIC8vICByZXR1cm4gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNhcmRDbGtEYXRhXG4gIGlmKHRoaXMuZnJhbWV3b3JrU2VydmljZS5DdXJyZW50Q2FyZENsayl7XG4gICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLkN1cnJlbnRDYXJkQ2xrLnN1YnNjcmliZSgoaXRlbSk9PntcbiAgICAgY29uc3QgZGF0YUNvZGU6IGFueSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkoaXRlbSlcbiAgICAgIGlmIChkYXRhQ29kZSAmJiBkYXRhQ29kZS5jb2RlKXtcbiAgICAgICAgdGhpcy5kYXRhQ29uZmlnID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldENvbmZpZyhkYXRhQ29kZS5jb2RlKVxuICAgICAgfVxuICAgICBpZihkYXRhQ29kZSl7XG4gICAgICB0aGlzLmNvbmZpZ0NvZGVCdG4gPSBkYXRhQ29kZS5jb2RlXG4gICAgIH1cbiAgICAgfSlcbiAgfVxuICBcbiAgXG4gIH1cblxuICAvLyBnZXRidG5FbmFibGVGbihfaXRlbTogYW55KSB7XG4gIC8vICAgY29uc3QgYWxsU2VsZWN0ZWRUZXJtOiBhbnkgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0QWxsU2VsZWN0ZWRUZXJtcygpXG4gIC8vICAgaWYgKGFsbFNlbGVjdGVkVGVybSAmJiBhbGxTZWxlY3RlZFRlcm0ubGVuZ3RoICYmIGFsbFNlbGVjdGVkVGVybS5maWx0ZXIoKHQ6IGFueSkgPT4gdC5jYXRlZ29yeSA9PT0gX2l0ZW0uY29kZSkubGVuZ3RoID4gMCkge1xuICAvLyAgICAgcmV0dXJuIHRydWVcbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIGZhbHNlXG4gIC8vIH1cblxuXG4gIG9wZW5DcmVhdGVUZXJtRGlhbG9nKGNvbHVtbjogYW55LCBjb2xJbmRleDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmlzRW5hYmxlZChjb2x1bW4uY29kZSkpIHtcbiAgICAgIGNvbnN0IG5leHRDYXQgPSBjb2x1bW4uY29kZVxuICAgICAgY29uc3QgbmV4dE5leHRDYXQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KG5leHRDYXQpXG4gICAgICBpZihuZXh0Q2F0KSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVGVybXMgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0UHJldmlvdXNTZWxlY3RlZFRlcm1zKG5leHRDYXQpXG4gICAgICAgIGNvbnN0IGNvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHRDYXQgKVxuICAgICAgICBsZXQgbmV4dENvbEluZm86IGFueSA9IFtdXG4gICAgICAgIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgICAgICBuZXh0Q29sSW5mbyA9IEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpLmZpbHRlcihsID0+IGwuY29kZSA9PT0gbmV4dE5leHRDYXQuY29kZSApXG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRpYWxvZzogYW55XG4gICAgICAgIGlmKHRoaXMuZW52aXJvbm1lbnQgJiYgdGhpcy5lbnZpcm9ubWVudC5mcmFtZXdvcmtUeXBlID09PSAnTURPX0RFU0lHTkFUSU9OJyl7XG4gICAgICAgICAgZGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbihDcmVhdGVUZXJtRnJvbUZyYW1ld29ya0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICAgICAgbW9kZTonbXVsdGktY3JlYXRlJyxcbiAgICAgICAgICAgICAgLy8gY2FyZENvbEluZm86IHRoaXMuZGF0YS5jb2x1bW5JbmZvLFxuICAgICAgICAgICAgICBjb2x1bW5JbmZvOiBjb2xJbmZvICYmIGNvbEluZm8ubGVuZ3RoID8gY29sSW5mb1swXSA6IFtdLFxuICAgICAgICAgICAgICBuZXh0Q29sSW5mbzogbmV4dENvbEluZm8gJiYgbmV4dENvbEluZm8ubGVuZ3RoID8gbmV4dENvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgICAgICAgICBzZWxlY3RlZHBhcmVudHM6IHRoaXMuaGVpZ2h0TGlnaHRlZCxcbiAgICAgICAgICAgICAgY29sSW5kZXg6IG5leHRDYXQuaW5kZXgsXG4gICAgICAgICAgICAgIC8vIGNoaWxkcmVuRGF0YTogZGF0YS5jaGlsZHJlbixcbiAgICAgICAgICAgICAgc2VsZWN0ZWRQYXJlbnRUZXJtczogc2VsZWN0ZWRUZXJtc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7IHRvcDogJzUwcHgnIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ3JlYXRlVGVybUNvbXBvbmVudCwge1xuICAgICAgICAgICAgLy8gZGF0YToge1xuICAgICAgICAgICAgLy8gICBtb2RlOidjcmVhdGUnLFxuICAgICAgICAgICAgLy8gICBjb2x1bW5JbmZvOiBjb2x1bW4sXG4gICAgICAgICAgICAvLyAgIGZyYW1ld29ya0lkOiB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrSWQoKSxcbiAgICAgICAgICAgIC8vICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgICAvLyAgIGNvbEluZGV4OiBjb2xJbmRleCxcbiAgICAgICAgICAgIC8vICAgc2VsZWN0ZWRQYXJlbnRUZXJtczogc2VsZWN0ZWRUZXJtc1xuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIGRhdGE6IHsgXG4gICAgICAgICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAgICAgICAgIGNvbHVtbkluZm86IGNvbEluZm8gJiYgY29sSW5mby5sZW5ndGggPyBjb2xJbmZvWzBdIDogW10sXG4gICAgICAgICAgICAgIGZyYW1ld29ya0lkOiB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrSWQoKSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgICAgIGNvbEluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgICAgICAvLyBjaGlsZHJlbkRhdGE6IGRhdGEuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3aWR0aDogJzgwMHB4JyxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcicsXG4gICAgICAgICAgICBwb3NpdGlvbjogeyB0b3A6ICc1MHB4JyB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgaWYoIXJlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNyZWF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1B1Ymxpc2ggPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgY29uc3QgZGF0YSAgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY2FyZENsa0RhdGFcbiAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHtcbiAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgIGluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHR5cGU6ICdtdWx0aS1jcmVhdGUnXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKCEocmVzICYmIHJlcy5zdG9wVXBkYXRlKSl7XG4gICAgICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UudXBkYXRlQWZ0ZXJBZGRPckVkaXRTdWJqZWN0KHJlc3BvbnNlRGF0YSlcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgXG4gICAgICAgICAgdGhpcy5sb2FkZWRbcmVzLnRlcm0uY2F0ZWdvcnldID0gZmFsc2VcbiAgICAgICAgICAvLyB3YWl0XG4gICAgICAgICAgY29uc3QgcGFyZW50Q29sdW1uID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzQ2F0ZWdvcnkocmVzLnRlcm1bMF0uY2F0ZWdvcnkpXG4gICAgICAgICAgcmVzLnBhcmVudCA9IG51bGxcbiAgICAgICAgICBpZiAocGFyZW50Q29sdW1uKSB7XG4gICAgICAgICAgICByZXMucGFyZW50ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZ2V0KHBhcmVudENvbHVtbi5jb2RlKVxuICAgICAgICAgICAgcmVzLnBhcmVudC5jaGlsZHJlbj8gcmVzLnBhcmVudC5jaGlsZHJlbi5wdXNoKHJlcy50ZXJtWzBdKSA6cmVzLnBhcmVudFsnY2hpbGRyZW4nXSA9IFtyZXMudGVybVswXV1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy51cGRhdGVGaW5hbExpc3QoeyBzZWxlY3RlZFRlcm06IHJlcy50ZXJtWzBdLCBpc1NlbGVjdGVkOiBmYWxzZSwgcGFyZW50RGF0YTogcmVzLnBhcmVudCwgY29sSW5kZXg6Y29sSW5kZXggfSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvcGVuT3JnYW5pemF0aW9uRGlhbG9nKGNvbHVtbjogYW55LCBfaW5kZXg6IGFueSkge1xuICAgIGNvbnN0IHRyZWVMaXN0RGF0YSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMoY29sdW1uLmNvZGUpICAgICBcbiAgICBjb25zdCBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKE9yZ0hpZXJhcmNoeUFkZE1vZGFsQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHByZXZpb3VzOiB0cmVlTGlzdERhdGEsXG4gICAgICAgIGN1cnJlbnREYXRhOiBjb2x1bW4sXG4gICAgICAgIHNlbGVjdGVkT3JnRGF0YTogdGhpcy5vcmdTZWxlY3RlZERhdGEsXG4gICAgICB9LFxuICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxuICAgICAgcG9zaXRpb246IHsgcmlnaHQ6ICcwJyB9LFxuICAgICAgaGVpZ2h0OiAnMTAwdmgnLFxuICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgcGFuZWxDbGFzczogJ3JpZ2h0LXNpZGUtbW9kYWwnLFxuICAgICAgbWF4V2lkdGg6ICcxMDB2dydcbiAgICB9KTtcbiAgICBcbiAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKF9yZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAoX3JlcyAmJiBfcmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5jcmVhdGVUZXJtcyhfcmVzLCBjb2x1bW4pXG4gICAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBsaXN0KCk6IGFueVtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC52YWx1ZXMoKSlcbiAgfVxuICBcbiAgZHJhd0hlYWRlckxpbmUobGVuOiBudW1iZXIpe1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7Li4uZGVmYXVsdENvbmZpZywuLi5oZWFkZXJMaW5lQ29uZmlnIH1cbiAgICBmb3IobGV0IGk9MTsgaTw9bGVuOyBpKyspe1xuICAgICAgY29uc3Qgc3RhcnRFbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjYm94JHtpfWNvdW50YClcbiAgICAgIGNvbnN0IGVuZEVsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNib3gke2l9SGVhZGVyYClcbiAgICAgIGlmKHN0YXJ0RWxlICYmIGVuZEVsZSkge1xuICAgICAgICBuZXcgTGVhZGVyTGluZShzdGFydEVsZSwgZW5kRWxlLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRDb2x1bW4oY29sdW1uQ29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LmdldChjb2x1bW5Db2RlKVxuICB9XG4gIFxuICBuZXdDb25uZWN0aW9uKCkgeyBcbiAgICBjb25zdCBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENvbm5lY3RvckNvbXBvbmVudCwge1xuICAgICAgZGF0YToge30sXG4gICAgICB3aWR0aDogJzkwJScsXG4gICAgICAvLyBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInIFxuICAgIH0pXG4gICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXM6IElDb25uZWN0aW9uVHlwZSkgPT4ge1xuICAgICAgaWYgKChyZXMuc291cmNlID09PSAnb25saW5lJyAmJiByZXMuZGF0YS5lbmRwb2ludCkgfHwgKHJlcy5zb3VyY2UgPT09ICdvZmZsaW5lJykpIHtcbiAgICAgICAgdGhpcy5sb2NhbFN2Yy5sb2NhbFN0b3JhZ2UgPSByZXNcbiAgICAgICAgdGhpcy5pbml0KClcbiAgICAgIH0gZWxzZSBpZiAocmVzLnNvdXJjZSA9PT0gJ29ubGluZScgJiYgIXJlcy5kYXRhLmVuZHBvaW50KSB7XG4gICAgICAgIHRoaXMubG9jYWxTdmMubG9jYWxTdG9yYWdlID0gcmVzXG4gICAgICAgIHRoaXMuaW5pdCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHVwZGF0ZURyYWZ0U3RhdHVzVGVybXMoZXZlbnQ6IGFueSl7XG4gICAgaWYoZXZlbnQuY2hlY2tlZCkge1xuICAgICAgdGhpcy5kcmFmdFRlcm1zLnB1c2goZXZlbnQudGVybSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRyYWZ0VGVybXMgPSB0aGlzLmRyYWZ0VGVybXMuZmlsdGVyKGQgPT4gZXZlbnQudGVybS5pZGVudGlmaWVyICE9PSBkLmlkZW50aWZpZXIpXG4gICAgfVxuICAgIHRoaXMuc2hvd0FjdGlvbkJhciA9IHRoaXMuZHJhZnRUZXJtcy5sZW5ndGg+MD90cnVlOmZhbHNlXG4gIH1cblxuICBnZXROb09mQ2FyZHMoZXZlbnQ6YW55KSB7XG4gICAgaWYodGhpcy5jYXRlZ29yeUxpc3QubGVuZ3RoID4gMCAmJiBldmVudC5jYXRlZ29yeSAhPT0gJycpIHtcbiAgICAgIGxldCBpbmRleCA9IHRoaXMuY2F0ZWdvcnlMaXN0LmZpbmRJbmRleCgob2JqOmFueSkgPT4gb2JqLmNhdGVnb3J5ID09IGV2ZW50LmNhdGVnb3J5KTtcbiAgICAgIGlmKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5jYXRlZ29yeUxpc3Quc3BsaWNlKGluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoZXZlbnQuY2F0ZWdvcnkgPT0gJycpIHtcbiAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0W3RoaXMuY2F0ZWdvcnlMaXN0Lmxlbmd0aC0xXS5jb3VudCA9IDA7XG4gICAgfVxuICAgIHRoaXMuY2F0ZWdvcnlMaXN0LnB1c2goZXZlbnQpO1xuICB9XG4gIFxuICBnZXRDb3VudChjb2RlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDBcbiAgICBpZiAodGhpcy5jYXRlZ29yeUxpc3QpIHtcbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gdGhpcy5jYXRlZ29yeUxpc3QuZmluZCgoY2F0ZWdvcnk6IGFueSkgPT4gY2F0ZWdvcnkuY2F0ZWdvcnkgPT09IGNvZGUpXG4gICAgICBjb3VudCA9IGNhdGVnb3J5ICYmIGNhdGVnb3J5LmNvdW50ID8gY2F0ZWdvcnkuY291bnQgOiAwXG4gICAgfVxuICAgIHJldHVybiBjb3VudFxuICB9XG5cbiAgc2VuZEZvckFwcHJvdmFsKCl7XG4gICAgaWYoIXRoaXMuaXNBcHByb3ZhbFZpZXcpe1xuICAgICAgICBsZXQgcGFyZW50TGlzdDogYW55ID0gW11cbiAgICAgICAgdGhpcy5saXN0LmZvckVhY2goZWxlID0+IHtcbiAgICAgICAgICBjb25zdCB0ID0gZWxlLmNoaWxkcmVuLmZpbHRlcigodGVybTogYW55KSA9PiB0ZXJtLnNlbGVjdGVkID09PSB0cnVlKVxuICAgICAgICAgIGlmKHRbMF0pe1xuICAgICAgICAgICAgcGFyZW50TGlzdC5wdXNoKHRbMF0pXG4gICAgICAgICAgfSBcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmVxID0ge1xuICAgICAgICAgIHVwZGF0ZUZpZWxkVmFsdWVzOlsuLi5wYXJlbnRMaXN0LCAuLi50aGlzLmRyYWZ0VGVybXNdXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHByb3ZhbFNlcnZpY2UuY3JlYXRlQXBwcm92YWwocmVxKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5yZW1vdmVPbGRMaW5lKClcbiAgICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKCdUZXJtcyBzdWNjZXNzZnVsbHkgc2VudCBmb3IgQXBwcm92YWwuJywgJ2NhbmNlbCcpXG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VudEZvckFwcHJvdmUuZW1pdCh0aGlzLmRyYWZ0VGVybXMpXG4gICAgfVxuICAgXG4gIH1cblxuICBjbG9zZUFjdGlvbkJhcihfZTphbnkpeyBcbiAgICB0aGlzLnNob3dBY3Rpb25CYXIgPSBmYWxzZTtcbiAgfVxuXG4gIGluaXRDb25maWcoKSB7XG4gICAgaWYodGhpcy5lbnZpcm9ubWVudCl7XG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UudXBkYXRlRW52aXJvbm1lbnQodGhpcy5lbnZpcm9ubWVudCk7XG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2V0Q29uZmlnKHRoaXMudGF4b25vbXlDb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCl7XG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UucmVtb3ZlT2xkTGluZSgpO1xuICAgICAgLy8gdGhpcy5lbnZpcm9ubWVudCA9IG51bGxcbiAgICAgIC8vIHRoaXMuZnJhbWV3b3JrU2VydmljZS5yZXNldEFuZEZyZXNoKClcbiAgICAgIC8vIHRoaXMuY29ubmVjdG9yU3ZjLnJlbW92ZUFsbExpbmVzKClcbiAgICAgIC8vIHRoaXMuY29ubmVjdG9yU3ZjLnVwZGF0ZUNvbm5lY3RvcnNNYXAoe30pXG4gIH1cblxuICBnZXROZXh0Q2F0KGRhdGE6IGFueSkge1xuICAgIGlmKGRhdGEgICYmIGRhdGEuY29kZSl7XG4gICAgICBjb25zdCBuZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShkYXRhLmNvZGUpXG4gICAgICByZXR1cm4gbmV4dENhdFxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgaXNDdXJyZW50T3JOZXh0VGVybShfY29sdW1uOiBhbnksIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIGN1cnJlbnQgc2VsZWN0aW9uLCBvbmx5IGVuYWJsZSB0aGUgZmlyc3QgY29sdW1uXG4gICAgaWYgKCF0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi52YWx1ZSkge1xuICAgICAgcmV0dXJuIGluZGV4ID09PSAwO1xuICAgIH1cbiAgICBcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgY2F0ZWdvcnkgZnJvbSB0aGUgY3VycmVudFNlbGVjdGlvblxuICAgIGNvbnN0IGN1cnJlbnRDYXRlZ29yeSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLnZhbHVlLnR5cGU7XG4gICAgaWYgKCFjdXJyZW50Q2F0ZWdvcnkpIHtcbiAgICAgIHJldHVybiBpbmRleCA9PT0gMDtcbiAgICB9XG4gICAgXG4gICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgYWN0aXZlIGNvbHVtblxuICAgIGxldCBjdXJyZW50SW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMubGlzdFtpXS5jb2RlID09PSBjdXJyZW50Q2F0ZWdvcnkpIHtcbiAgICAgICAgY3VycmVudEluZGV4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIElmIHdlIGNvdWxkbid0IGZpbmQgdGhlIGN1cnJlbnQgaW5kZXgsIG9ubHkgZW5hYmxlIHRoZSBmaXJzdCBjb2x1bW5cbiAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIGluZGV4ID09PSAwO1xuICAgIH1cbiAgICBcbiAgICAvLyBFbmFibGUgdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGUgbmV4dCBvbmVcbiAgICByZXR1cm4gaW5kZXggPT09IGN1cnJlbnRJbmRleCB8fCBpbmRleCA9PT0gY3VycmVudEluZGV4ICsgMTtcbiAgfVxuXG4gIHNob3VsZFNob3dTdmdCb3JkZXJXcmFwcGVyKGNvbHVtbjogYW55LCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNDdXJyZW50T3JOZXh0VGVybShjb2x1bW4sIGluZGV4KSAmJiB0aGlzLmdldENvdW50KGNvbHVtbi5jb2RlKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVRlcm1zKHNlbGVjdGVkTGlzdDphbnksIGNvbHVtbjphbnkpIHtcbiAgICBjb25zdCBmcmFtZXdvcmtEYXRhID0ge1xuICAgICAgaWQ6IHRoaXMub3JnU2VsZWN0ZWREYXRhLm9yZ0hpZXJhcmNoeUZyYW1ld29ya0lkIHx8ICcnLFxuICAgICAgY2F0ZWdvcnk6IGNvbHVtbi5jb2RlIHx8ICcnLFxuICAgIH1cbiAgICBsZXQgY3JlYXRlZE5vZGVJZDphbnkgPSBbXVxuICAgIGZvciBhd2FpdCAoY29uc3QgZWxlIG9mIHNlbGVjdGVkTGlzdCkgeyBcbiAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICB0ZXJtOiB7XG4gICAgICAgICAgICAgIG5hbWU6IGVsZS5vcmdOYW1lIHx8ICcnLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZWxlLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgICBjb2RlOiB1dWlkdjQoKSxcbiAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBpZGVudGlmaWVyOiBlbGUubWluaXN0cnlPclN0YXRlSWQgfHwgJycsXG4gICAgICAgICAgICAgICAgcGFyZW50T3JnTmFtZTogZWxlLm1pbmlzdHJ5T3JTdGF0ZU5hbWUgfHwgJycsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGNvbnN0IGNyZWF0ZVRyZW1zUmVzOmFueSA9IGF3YWl0IHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5jcmVhdGVUZXJtKHJlcXVlc3RCb2R5LCBmcmFtZXdvcmtEYXRhKS50b1Byb21pc2UoKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBjcmVhdGluZyB0ZXJtJywgZXJyKTtcbiAgICAgIH0pXG4gICAgICBpZiAoY3JlYXRlVHJlbXNSZXMgJiYgY3JlYXRlVHJlbXNSZXMucmVzdWx0ICYmIGNyZWF0ZVRyZW1zUmVzLnJlc3VsdC5ub2RlX2lkKSB7XG4gICAgICAgIGNyZWF0ZWROb2RlSWQucHVzaChjcmVhdGVUcmVtc1Jlcy5yZXN1bHQubm9kZV9pZFswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKCdFcnJvciBpbiBjcmVhdGluZyB0ZXJtJywgJ2NhbmNlbCcpO1xuICAgICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUoZmFsc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjcmVhdGVkTm9kZUlkLmxlbmd0aCA9PT0gc2VsZWN0ZWRMaXN0Lmxlbmd0aCkge1xuICAgICAgaWYgKGNvbHVtbi5pbmRleCA+MSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUFzc29jaWF0aW9uKGNyZWF0ZWROb2RlSWQsIGZyYW1ld29ya0RhdGEsIGNvbHVtbik7XG4gICAgICB9IFxuICAgICAgdGhpcy5wdWJsaXNoRnJhbWV3b3JrKGZyYW1ld29ya0RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFzc29jaWF0aW9uKG5vZGVJZDogYW55LCBmcmFtZXdvcmtEYXRhOiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgY29uc3QgcHJldjphbnkgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0UHJldmlvdXNDYXRlZ29yeShjb2x1bW4uY29kZSk7XG4gICAgbGV0IHByZXZUcmVtOmFueSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMoY29sdW1uKVxuICAgIGxldCBjdXJyZW50VGVybVNlbGVjdGVkOmFueVxuICAgIFxuICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLnN1YnNjcmliZSgoZWxlOmFueSkgPT4ge1xuICAgICAgY3VycmVudFRlcm1TZWxlY3RlZCA9IGVsZS5kYXRhXG4gICAgfSlcbiAgICBjb25zdCByZXF1ZXN0Qm9keTphbnkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIHRlcm06IHtcbiAgICAgICAgICBhc3NvY2lhdGlvbnM6IFtdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IFxuICAgIGlmIChwcmV2VHJlbSAmJiBwcmV2VHJlbSkge1xuICAgICAgcHJldlRyZW0gPSBwcmV2VHJlbS5maWx0ZXIoKGVsZTphbnkpID0+IGVsZS5jYXRlZ29yeSA9PT0gcHJldi5jb2RlKVswXVxuICAgICAgaWYgKHByZXZUcmVtICYmIHByZXZUcmVtLmFzc29jaWF0aW9ucyAmJiBwcmV2VHJlbS5hc3NvY2lhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBwcmV2VHJlbS5hc3NvY2lhdGlvbnMuZm9yRWFjaCgoZWxlOmFueSkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdEJvZHkucmVxdWVzdC50ZXJtLmFzc29jaWF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGVsZS5pZGVudGlmaWVyXG4gICAgICAgICAgfSlcbiAgICAgICAgfSkgXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlSWQgJiYgbm9kZUlkLmxlbmd0aCA+IDApIHtcbiAgICAgIG5vZGVJZC5mb3JFYWNoKChlbGU6YW55KSA9PiB7XG4gICAgICAgIHJlcXVlc3RCb2R5LnJlcXVlc3QudGVybS5hc3NvY2lhdGlvbnMucHVzaCh7XG4gICAgICAgICAgaWRlbnRpZmllcjogZWxlXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBmcmFtZXdvcmtEYXRhLmNhdGVnb3J5ID0gcHJldi5jb2RlIHx8ICcnO1xuICAgIGNvbnN0IG5vZGVJZFBhcnRzID0gY3VycmVudFRlcm1TZWxlY3RlZC5pZGVudGlmaWVyLnNwbGl0KCdfJyk7XG4gICAgY29uc3QgY29kZUlkID0gbm9kZUlkUGFydHNbbm9kZUlkUGFydHMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgdXBkYXRlQXNzb2NpYXRpb25SZXM6YW55ID0gYXdhaXQgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnVwZGF0ZUZyYW1ld29ya0Fzc29jaWF0aW9uKHJlcXVlc3RCb2R5LCBmcmFtZXdvcmtEYXRhLCBjb2RlSWQpLnRvUHJvbWlzZSgpLmNhdGNoKGVyciA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiB1cGRhdGluZyBhc3NvY2lhdGlvbicsIGVycik7XG4gICAgfSlcbiAgICBpZiAodXBkYXRlQXNzb2NpYXRpb25SZXMgJiYgdXBkYXRlQXNzb2NpYXRpb25SZXMucmVzdWx0ICYmIHVwZGF0ZUFzc29jaWF0aW9uUmVzLnJlc3VsdC5ub2RlX2lkKSB7XG4gICAgICAvLyB0aGlzLnB1Ymxpc2hGcmFtZXdvcmsoZnJhbWV3b3JrRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGlzaEZyYW1ld29yayhmcmFtZXdvcmtEYXRhOiBhbnkpIHtcbiAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMucHVibGlzaEZyZWFtZXdvcmsoZnJhbWV3b3JrRGF0YSkuc3Vic2NyaWJlKChyZXM6YW55KSA9PiB7XG4gICAgICBpZiAocmVzICYmIHJlcy5yZXN1bHQgJiYgcmVzLnJlc3VsdC5wdWJsaXNoU3RhdHVzKSB7XG4gICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW4oYCR7cmVzLnJlc3VsdC5wdWJsaXNoU3RhdHVzfWAsICdjYW5jZWwnKTtcbiAgICAgICAgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnNldExvYWRlclN0YXRlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKCdFcnJvciBpbiBwdWJsaXNoaW5nIGZyYW1ld29yaycsICdjYW5jZWwnKTtcbiAgICAgICAgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnNldExvYWRlclN0YXRlKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LCAoZXJyKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBwdWJsaXNoaW5nIGZyYW1ld29yaycsIGVycik7XG4gICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUoZmFsc2UpO1xuICAgIH0pO1xuICB9XG59IiwiPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LTEgY29ubmVjdGlvblNldHRpbmdzXCI+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIChjbGljayk9XCJuZXdDb25uZWN0aW9uKClcIj5cbiAgICAgICAgPG1hdC1pY29uPnt7YXBwX3N0cmluZ3MuYnVpbGR9fTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG48L2Rpdj4gLS0+XG5cbjxkaXYgKm5nSWY9XCJsaXN0ICYmIGxpc3QubGVuZ3RoID4gMFwiIGNsYXNzPVwiZmxleCBoZWlnaHRGaXggb3ZlcmZsb3ctY29udGFpbmVyXCIgaWQ9XCJ0cmVlVmlld0NvbnRhaW5lclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBsaXN0OyBsZXQgaSA9IGluZGV4O1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIGZlbHgtY29sICBjb2wtY29udGFpbmVyIGNvbnRhaW5lcnN7e2xpc3QubGVuZ3RofX1cIiBpZD1cImJveHt7aSsxfX1Db250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1oZWFkaW5nLXN0aWNreVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1oZWFkaW5nLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjYXRlZ29yeS1oZWFkZXInPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5LWhlYWRlci1pdGVtcyB3LWZ1bGxcIiBpZD1cImJveHt7aX19SGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbj8uY29uZmlnPy5pY29uRW5hYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gW25nU3R5bGVdPVwieydjb2xvcic6Y29sdW1uLmNvbmZpZy5jb2xvcn1cIj57e2NvbHVtbi5jb25maWcuaWNvbn19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXgtMSBtYXQtYm9keS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3tjb2x1bW4ubmFtZX19IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbHVtbj8uY29uZmlnPy5jYXRlZ29yeURpc3BsYXlOYW1lIHx8IGNvbHVtbi5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpICE9IDAgJiYgY2F0ZWdvcnlMaXN0Py5sZW5ndGggPiAwOyBlbHNlIGZpcnN0Q29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmluZGV4ICE9PSAxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudFwiPih7e2dldENvdW50KGNvbHVtbi5jb2RlKX19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmaXJzdENvbHVtbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpID09IDBcIiBpZD1cImJveHt7aSsxfX1jb3VudFwiIGNsYXNzPVwiY291bnRcIj4oe3tjb2x1bW4uY2hpbGRyZW4ubGVuZ3RofX0pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBjbGFzcz1cIlwiICpuZ0lmPVwiY29sdW1uPy5jb25maWc/LmNyZWF0ZUJ0bkVuYWJsZWQgJiYgIWNvbHVtbj8uY29uZmlnPy5hZGRPcmdFbmFibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cImFkZC1idG5cIiBbbmdDbGFzc109XCJ7J2J1dHRvbi1lbmFibGVkJzogY29uZmlnQ29kZUJ0bj09IGNvbHVtbj8uY29kZSwgJ2J1dHRvbi1kaXNhYmxlZCc6IGNvbmZpZ0NvZGVCdG4hPT0gY29sdW1uPy5jb2RlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNyZWF0ZVRlcm1EaWFsb2coY29sdW1uLCBpKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFkZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hcmdpbi1yZW1vdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FwcF9zdHJpbmdzLmFkZH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uPy5jb25maWc/LmFkZE9yZ0VuYWJsZWQgJiYgIWNvbHVtbj8uY29uZmlnPy5jcmVhdGVCdG5FbmFibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cImFkZC1idG5cIiAoY2xpY2spPVwib3Blbk9yZ2FuaXphdGlvbkRpYWxvZyhjb2x1bW4sIGkpXCIgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2J1dHRvbi1lbmFibGVkJzogaXNDdXJyZW50T3JOZXh0VGVybShjb2x1bW4sIGkpLCAnYnV0dG9uLWRpc2FibGVkJzogIWlzQ3VycmVudE9yTmV4dFRlcm0oY29sdW1uLCBpKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFkZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hcmdpbi1yZW1vdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FwcF9zdHJpbmdzLmFkZH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3dcIiBpZD1cImJveHt7aSsxfX1jb3VudFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICBQdXQgc2VhcmNoIGJ1dHRvbiBoZXJlIGluIGZ1dHVyZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0ge3tjb2x1bW4uY29kZX19IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZGRpbmcteDIgY2F0LWNvbHVtbnMgY29udGFpbmVyLWJveFwiIGlkPVwiYm94e3tpKzF9fVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4/LmNoaWxkcmVuICYmIGNvbHVtbj8uY2hpbGRyZW4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGliLXRyZWUtY29sdW1uLXZpZXcgKm5nSWY9XCJsb2FkZWRbY29sdW1uLmNvZGVdXCIgI3NlbGVjdGVkVGF4b25vbXlUZXJtIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRhaW5lcklkXT1cIidib3gnKyhpKzEpXCIgKHVwZGF0ZVRheG9ub215VGVybSk9XCJ1cGRhdGVUYXhvbm9teVRlcm0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICh1cGRhdGVUZXJtTGlzdCk9XCJ1cGRhdGVEcmFmdFN0YXR1c1Rlcm1zKCRldmVudClcIiAoY2FyZHNDb3VudCk9XCJnZXROb09mQ2FyZHMoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvbGliLXRyZWUtY29sdW1uLXZpZXc+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZFNob3dTdmdCb3JkZXJXcmFwcGVyKGNvbHVtbiwgaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN2Zy1ib3JkZXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMxQjIxMzM1MlwiIHN0cm9rZS13aWR0aD1cIjJcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtZGFzaGFycmF5PVwiMjAsIDEwXCIgcng9XCIxMFwiIHJ5PVwiMTBcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50IGZsZXggZmxleC1jb2wgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZnJhYy1uby1jb25uZWN0aW9uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3tpc0xvYWRpbmd9fSBTZWxlY3QgYW4gb3JnYW5pemF0aW9uIHRvIGFkZCBvciBzZWUgZnVydGhlciBjb25uZWN0aW9uczwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwiYWRkLWJ0blwiIChjbGljayk9XCJvcGVuT3JnYW5pemF0aW9uRGlhbG9nKGNvbHVtbiwgaSlcIiB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydidXR0b24tZW5hYmxlZCc6IGlzQ3VycmVudE9yTmV4dFRlcm0oY29sdW1uLCBpKSwgJ2J1dHRvbi1kaXNhYmxlZCc6ICFpc0N1cnJlbnRPck5leHRUZXJtKGNvbHVtbiwgaSl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFkZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWFyZ2luLXJlbW92ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thcHBfc3RyaW5ncy5hZGR9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxsaWItYWN0aW9uLWJhciAqbmdJZj1cInNob3dBY3Rpb25CYXJcIiBbYWN0aW9uVHlwZV09XCJpc0FwcHJvdmFsVmlld1wiIFtjb25maWdUeXBlXT1cIndvcmtGbG93U3RhdHVzXCJcbiAgICAgICAgKHNlbmRBcHByb3ZhbCk9XCJzZW5kRm9yQXBwcm92YWwoKVwiIChjbG9zZUFjdGlvbik9XCJjbG9zZUFjdGlvbkJhcigkZXZlbnQpXCI+PC9saWItYWN0aW9uLWJhcj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cIiEobGlzdCAmJiBsaXN0Lmxlbmd0aCA+IDAgKSAmJiBpc0ZyYXdvcmtMb2FkaW5nXCIgY2xhc3M9XCJmbGV4IGhlaWdodEZpeCBcIj5cbiAgICA8aDEgaTE4bj57e2FwcF9zdHJpbmdzLmxvYWRpbmd9fTwvaDE+XG48L2Rpdj4iXX0=
726
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90cmVlLWhpZXJhcmNoeS9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFHN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFPdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUN0SCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUU3RyxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNuQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNoRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUNuSCxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBUXZCLE1BQU0sT0FBTyxpQkFBaUI7SUE0QjVCLFlBQW9CLGdCQUFrQyxFQUM1QyxR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Q0FDRCxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzZCQUN6Qjt3QkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztpQkFDSjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOytHQWh5QlUsaUJBQWlCO21HQUFqQixpQkFBaUIsK1hDNUI5Qix3aE5BaUdNOzs0RkRyRU8saUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGVBQWU7MFdBS2hCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRnJhbWV3b3JrU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZyYW1ld29yay5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZyBhcyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJztcbmltcG9ydCB7IENyZWF0ZVRlcm1Db21wb25lbnQgfSBmcm9tICcuLi9jcmVhdGUtdGVybS9jcmVhdGUtdGVybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29ubmVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vY29ubmVjdG9yL2Nvbm5lY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9jYWxDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvY2FsLWNvbm5lY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJQ29ubmVjdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29ubmVjdGlvbi10eXBlLm1vZGVsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29ubmVjdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Nvbm5lY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcHJvdmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcHJvdmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0TGVnYWN5U25hY2tCYXIgYXMgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktc25hY2stYmFyJztcbmltcG9ydCB7IGRlZmF1bHRDb25maWcsIGhlYWRlckxpbmVDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXBwLWNvbnN0YW50JztcbmltcG9ydCB7IGxhYmVscyB9IGZyb20gJy4uLy4uL2xhYmVscy9zdHJpbmdzJztcbmltcG9ydCB7IENhcmQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdmFyaWFibGUtdHlwZS5tb2RlbCc7XG5pbXBvcnQgeyBDcmVhdGVUZXJtRnJvbUZyYW1ld29ya0NvbXBvbmVudCB9IGZyb20gJy4uL2NyZWF0ZS10ZXJtLWZyb20tZnJhbWV3b3JrL2NyZWF0ZS10ZXJtLWZyb20tZnJhbWV3b3JrLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPcmdIaWVyYXJjaHlBZGRNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL29yZy1oaWVyYXJjaHktYWRkLW1vZGFsL29yZy1oaWVyYXJjaHktYWRkLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmVlSGllcmFyY2h5U2VydmljZSB9IGZyb20gJy4uLy4uL3RyZWUtaGllcmFyY2h5LnNlcnZpY2UnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcbmltcG9ydCB7IENvbmZvcmFtdGlvblBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZm9yYW10aW9uLXBvcHVwL2NvbmZvcmFtdGlvbi1wb3B1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2F0ZWdvcnlFZGl0TW9kdWxlQ29tcG9uZW50IH0gZnJvbSAnLi4vY2F0ZWdvcnktZWRpdC9jYXRlZ29yeS1lZGl0LW1vZHVsZS9jYXRlZ29yeS1lZGl0LW1vZHVsZS5jb21wb25lbnQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuZGVjbGFyZSB2YXIgTGVhZGVyTGluZTogYW55O1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXRyZWUtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90cmVlLXZpZXcuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgYXBwcm92YWxMaXN0OiBBcnJheTxDYXJkPiA9IFtdO1xuICBASW5wdXQoKSBpc0FwcHJvdmFsVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB3b3JrRmxvd1N0YXR1czogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGVudmlyb25tZW50OmFueTtcbiAgQElucHV0KCkgdGF4b25vbXlDb25maWc6IGFueTtcbiAgQElucHV0KCkgb3JnU2VsZWN0ZWREYXRhOiBhbnk7XG4gIEBPdXRwdXQoKSBzZW50Rm9yQXBwcm92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSBsb2FkZXJFbmFibGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgbWFuYWdlT3JnID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgbWFwcGluZyA9IHt9O1xuICBoZWlnaHRMaWdodGVkID0gW11cbiAgbG9jYWxMaXN0ID0gW11cbiAgc2hvd1B1Ymxpc2g6IGJvb2xlYW4gPSBmYWxzZVxuICBuZXdUZXJtU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgbG9hZGVkOiBhbnkgPSB7fVxuICBzaG93QWN0aW9uQmFyOiBib29sZWFuID0gZmFsc2VcbiAgYXBwcm92YWxSZXF1aXJlZFRlcm1zID0gW11cbiAgZHJhZnRUZXJtczogQXJyYXk8Q2FyZD4gPSBbXTtcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGNhdGVnb3J5TGlzdDphbnkgPSBbXTtcbiAgYXBwX3N0cmluZ3M6IGFueSA9IGxhYmVscztcbiAgaXNIaWRlQnRuRW5hOmJvb2xlYW4gPXRydWU7XG4gIGNvbHVtbklkOnN0cmluZyA9ICcnO1xuICBjb25maWdDb2RlQnRuOmFueTtcbiAgZGF0YUNvbmZpZzphbnlcbiAgaXNGcmF3b3JrTG9hZGluZyA9IHRydWVcbiAgbG9hZGVyU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZnJhbWV3b3JrU2VydmljZTogRnJhbWV3b3JrU2VydmljZSwgXG4gICAgcHJpdmF0ZSBsb2NhbFN2YzogTG9jYWxDb25uZWN0aW9uU2VydmljZSwgXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLCBcbiAgICBwcml2YXRlIGFwcHJvdmFsU2VydmljZTogQXBwcm92YWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3NuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwcml2YXRlIGNvbm5lY3RvclN2YzogQ29ubmVjdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB0cmVlSGllcmFyY2h5U3ZjOiBUcmVlSGllcmFyY2h5U2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHRoaXMuZHJhZnRUZXJtcyA9IHRoaXMuYXBwcm92YWxMaXN0O1xuICAgIHRoaXMuaW5pdCgpXG4gICAgdGhpcy5zaG93QWN0aW9uQmFyID0gdGhpcy5pc0FwcHJvdmFsVmlldz90cnVlOmZhbHNlO1xuICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5hZnRlckFkZE9yRWRpdFN1YmplY3Quc3Vic2NyaWJlKHJlc3BvbnNlRGF0YSA9PiB7XG4gICAgICBpZihyZXNwb25zZURhdGEgJiYgcmVzcG9uc2VEYXRhLnJlcyAmJiByZXNwb25zZURhdGEuZGF0YSkge1xuICAgICAgICB0aGlzLnJlZnJlc2hEYXRhKHJlc3BvbnNlRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuaXNFbmFibGVkcygpXG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuIH0gXG5cbiAgaW5pdCgpIHtcbiAgICB0aGlzLmluaXRDb25maWcoKTtcbiAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrSW5mbygodGhpcy5vcmdTZWxlY3RlZERhdGEpID8gdGhpcy5vcmdTZWxlY3RlZERhdGEgOiAnJykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdG9yU3ZjLnJlbW92ZUFsbExpbmVzKClcbiAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jYXRlZ29yaWVzSGFzaC52YWx1ZS5mb3JFYWNoKChjYXQ6YW55KSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGVkW2NhdC5jb2RlXSA9IHRydWVcbiAgICAgIH0pXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gIHRoaXMuZHJhd0hlYWRlckxpbmUocmVzLnJlc3VsdC5mcmFtZXdvcmsuY2F0ZWdvcmllcy5sZW5ndGgpOyAgXG4gICAgICAgICAgICAgdGhpcy5tYWtlRmlyc3RUZXJtU2VsZWN0ZWQoKVxuICAgICAgICB9LDUwMClcbiAgICB9LCAoZXJyKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdlcnJvciBpbiBmZXRjaGluZyBmcmFtZXdvcmsnLCBlcnIpXG4gICAgfSlcblxuICAgIHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uID0gdGhpcy50cmVlSGllcmFyY2h5U3ZjLmxvYWRlclN0YXRlJC5zdWJzY3JpYmUoXG4gICAgICBkYXRhID0+IHtcbiAgICAgICAgdGhpcy5sb2FkZXJFbmFibGUuZW1pdChkYXRhKVxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKVxuICAgICAgfSxcbiAgICApXG4gIFxuICB9XG4gIHJlZnJlc2hEYXRhKHJlc0RhdGE6IGFueSkge1xuICAgIGNvbnN0IHJlcyA9IHJlc0RhdGEucmVzXG4gICAgaWYgKHJlcyAmJiByZXMuY3JlYXRlZCkge1xuICAgICAgdGhpcy5zaG93UHVibGlzaCA9IHRydWVcbiAgICB9XG4gICAgaWYocmVzLm11bHRpICYmIEFycmF5LmlzQXJyYXkocmVzLnRlcm0pICYmIHJlcy50ZXJtLmxlbmd0aCl7XG4gICAgICByZXMudGVybSA9IHJlcy50ZXJtWzBdXG4gICAgfSBcbiAgICB0aGlzLmxvYWRlZFtyZXMudGVybS5jYXRlZ29yeV0gPSBmYWxzZVxuICAgIC8vIHdhaXRcbiAgICBjb25zdCBwYXJlbnRDb2x1bW4gPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0UHJldmlvdXNDYXRlZ29yeShyZXMudGVybS5jYXRlZ29yeSlcbiAgICByZXMucGFyZW50ID0gbnVsbFxuICAgIGlmIChwYXJlbnRDb2x1bW4pIHtcbiAgICAgIHJlcy5wYXJlbnQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQocGFyZW50Q29sdW1uLmNvZGUpXG4gICAgICBpZihyZXNEYXRhLnR5cGUgPT09ICd1cGRhdGUnKXtcbiAgICAgICAgXG4gICAgICAgIHJlcy5wYXJlbnQuY2hpbGRyZW5bcmVzLnBhcmVudC5jaGlsZHJlbi5maW5kSW5kZXgoKGVsOiBhbnkpID0+IGVsLmlkZW50aWZpZXIgPT09IHJlcy50ZXJtLmlkZW50aWZpZXIpXSA9ICByZXMudGVybVxuICAgICAgICAvLyB0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC5nZXQocmVzLnBhcmVudC5jYXRlZ29yeSkuY2hpbGRyZW4gPSBbLi4ucmVzLnBhcmVudC5jaGlsZHJlbl1cbiAgICAgICAgXG4gICAgICAgIFxuXG4gICAgICAgIC8vIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLm5leHQoeyB0eXBlOiByZXMudGVybS5jYXRlZ29yeSwgZGF0YTogcmVzLnRlcm0uY2hpbGRyZW4sIGNhcmRSZWY6cmVzRGF0YS5jYXJkUmVmIH0pXG4gICAgICAgIC8vIHRoaXMudXBkYXRlU2VsZWN0aW9uKHJlcy50ZXJtLmNhdGVnb3J5LCByZXMudGVybS5jb2RlKTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVTZWxlY3Rpb24ocmVzLnBhcmVudC5jYXRlZ29yeSwgcmVzLnBhcmVudC5jb2RlKTtcbiAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmN1cnJlbnRTZWxlY3Rpb24ubmV4dCh7IHR5cGU6IHJlcy50ZXJtLmNhdGVnb3J5LCBkYXRhOiByZXMudGVybS5jaGlsZHJlbiwgY2FyZFJlZjpyZXNEYXRhLmNhcmRSZWYgfSlcbiAgICAgICAgLy8gfSwgMTAwKTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVGaW5hbExpc3QoeyBzZWxlY3RlZFRlcm06IHJlcy50ZXJtLCBpc1NlbGVjdGVkOiB0cnVlLCBwYXJlbnREYXRhOiByZXMucGFyZW50LCBjb2xJbmRleDpyZXNEYXRhLmluZGV4IH0pXG4gICAgICAgICB0aGlzLmxvYWRlZFtyZXMudGVybS5jYXRlZ29yeV0gPSB0cnVlXG4gICAgICAgIHJlcy50ZXJtLnNlbGVjdGVkID0gZmFsc2VcbiAgICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZGVsZXRlKHJlcy50ZXJtLmNhdGVnb3J5KVxuICAgICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmluc2VydFVwZGF0ZURlbGV0ZU5vdGlmaWVyLm5leHQoeyBhY3Rpb246IHJlcy50ZXJtLmNhdGVnb3J5LCB0eXBlOid1cGRhdGUnLCBkYXRhOiByZXMudGVybSB9KVxuICAgICAgICAgdGhpcy51cGRhdGVGaW5hbExpc3QoeyBzZWxlY3RlZFRlcm06IHJlcy50ZXJtLCBpc1NlbGVjdGVkOiB0cnVlLCBwYXJlbnREYXRhOiByZXMucGFyZW50LCBjb2xJbmRleDpyZXNEYXRhLmluZGV4IH0sICd1cGRhdGUnKVxuICAgICAgICAgcmVzLnRlcm0uc2VsZWN0ZWQgPSB0cnVlXG4gICAgICAgIC8vIGNvbnN0IG5leHQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KHJlcy50ZXJtLmNhdGVnb3J5KVxuICAgICAgICBcbiAgICAgICAgLy8gICBpZiAobmV4dCAmJiBuZXh0LmNvZGUpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmRlbGV0ZShuZXh0LmNvZGUpXG4gICAgICAgIC8vICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYoIXJlcy5tdWx0aSl7XG4gICAgICAgICAgcmVzLnBhcmVudC5jaGlsZHJlbj8gcmVzLnBhcmVudC5jaGlsZHJlbi5wdXNoKHJlcy50ZXJtKSA6cmVzLnBhcmVudFsnY2hpbGRyZW4nXSA9IFtyZXMudGVybV1cbiAgICAgICAgfSBcbiAgICAgICAgdGhpcy51cGRhdGVGaW5hbExpc3QoeyBzZWxlY3RlZFRlcm06IHJlcy50ZXJtLCBpc1NlbGVjdGVkOiBmYWxzZSwgcGFyZW50RGF0YTogcmVzLnBhcmVudCwgY29sSW5kZXg6cmVzRGF0YS5pbmRleCB9LClcbiAgICAgIH1cbiAgICB9XG4gICBcbiAgfVxuXG4gIG1ha2VGaXJzdFRlcm1TZWxlY3RlZCgpIHtcbiAgICBjb25zdCBmaXJzdExpc3RJdGVtID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QuZW50cmllcygpLm5leHQoKS52YWx1ZSBhcyBhbnlcbiAgICBpZihmaXJzdExpc3RJdGVtICYmIGZpcnN0TGlzdEl0ZW0ubGVuZ3RoID49IDIpe1xuICAgICAgaWYoZmlyc3RMaXN0SXRlbVsxXSAmJiBmaXJzdExpc3RJdGVtWzFdLmNoaWxkcmVuICYmIGZpcnN0TGlzdEl0ZW1bMV0uY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0VGVybSA9IGZpcnN0TGlzdEl0ZW1bMV0uY2hpbGRyZW5bMF0gYXMgYW55XG4gICAgICAgIGNvbnN0IGNhcmRSZWYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaXJzdFRlcm0ubmFtZSlcbiAgICAgICAgLy8gdGhpcy5jYXRlZ29yeUxpc3QgPSBbXVxuICAgICAgICBmaXJzdFRlcm0uc2VsZWN0ZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jYXJkQ2xrRGF0YSA9IGZpcnN0VGVybTtcbiAgICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLkN1cnJlbnRDYXJkQ2xrLm5leHQoZmlyc3RUZXJtLmNhdGVnb3J5KVxuICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi5uZXh0KHsgdHlwZTogZmlyc3RUZXJtLmNhdGVnb3J5LCBkYXRhOiBmaXJzdFRlcm0sIGNhcmRSZWYgfSlcbiAgICAgICAgdGhpcy5pc0ZyYXdvcmtMb2FkaW5nID0gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVUYXhvbm9teVRlcm0oZGF0YTogeyBzZWxlY3RlZFRlcm06IGFueSwgaXNTZWxlY3RlZDogYm9vbGVhbiwgaXNVcGRhdGU/OmFueX0pIHtcbiAgICBpZihkYXRhICYmIGRhdGEuc2VsZWN0ZWRUZXJtICYmIGRhdGEuc2VsZWN0ZWRUZXJtLmNhdGVnb3J5KSB7XG4gICAgICBpZighZGF0YS5pc1VwZGF0ZSl7XG4gICAgICAgIHRoaXMudXBkYXRlRmluYWxMaXN0KGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbmFsTGlzdChkYXRhLCAndXBkYXRlJylcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKGRhdGEuc2VsZWN0ZWRUZXJtLmNhdGVnb3J5LCBkYXRhLnNlbGVjdGVkVGVybS5jb2RlKTtcbiAgICB9XG4gIH1cbiAgdXBkYXRlU2VsZWN0aW9uKGNhdGVnb3J5OiBzdHJpbmcsIHNlbGVjdGVkVGVybUNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IGNhdGVnb3J5RGF0YSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LmdldChjYXRlZ29yeSk7XG4gICAgaWYgKGNhdGVnb3J5RGF0YSAmJiBjYXRlZ29yeURhdGEuY2hpbGRyZW4pIHtcbiAgICAgIGNhdGVnb3J5RGF0YS5jaGlsZHJlbi5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBzZWxlY3RlZFRlcm1Db2RlID09PSBpdGVtLmNvZGUgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgcmV0dXJuIGl0ZW1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLy9uZWVkIHRvIHJlZmFjdG9yIGF0IGhlaWdoIGxldmVsXG4gIHVwZGF0ZUZpbmFsTGlzdChkYXRhOiB7IHNlbGVjdGVkVGVybTogYW55LCBpc1NlbGVjdGVkOiBib29sZWFuLCBwYXJlbnREYXRhPzogYW55LCBjb2xJbmRleD86IGFueX0sIHR5cGU/OiBhbnkpIHtcbiAgICBcbiAgICBpZiAoZGF0YS5pc1NlbGVjdGVkKSB7XG4gICAgICAvLyBkYXRhLnNlbGVjdGVkVGVybS5zZWxlY3RlZCA9IGRhdGEuaXNTZWxlY3RlZFxuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3Quc2V0KGRhdGEuc2VsZWN0ZWRUZXJtLmNhdGVnb3J5LCBkYXRhLnNlbGVjdGVkVGVybSk7XG4gICAgICBjb25zdCBuZXh0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShkYXRhLnNlbGVjdGVkVGVybS5jYXRlZ29yeSlcbiAgICAgIGlmIChuZXh0ICYmIG5leHQuY29kZSkge1xuICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5kZWxldGUobmV4dC5jb2RlKVxuICAgICAgfVxuICAgICAgLy8gbm90aWZ5IG5leHRcbiAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5pbnNlcnRVcGRhdGVEZWxldGVOb3RpZmllci5uZXh0KHsgYWN0aW9uOiBkYXRhLnNlbGVjdGVkVGVybS5jYXRlZ29yeSwgdHlwZTogdHlwZSA/IHR5cGUgOiAnc2VsZWN0JywgZGF0YTogZGF0YS5zZWxlY3RlZFRlcm0gfSlcbiAgICB9IFxuICAgIGlmKGRhdGEuY29sSW5kZXggPT09IDAgJiYgIWRhdGEuaXNTZWxlY3RlZCkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgc2V0VGltZW91dCgoKT0+IHtcbiAgICAgICAgdGhpcy5pbml0KClcbiAgICAgIH0sMzAwMClcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmxvYWRlZFtkYXRhLnNlbGVjdGVkVGVybS5jYXRlZ29yeV0gPSB0cnVlXG4gICAgICAvLyBpZih0eXBlICYmIHR5cGUgPT09ICd1cGRhdGUnKXtcbiAgICAgIC8vICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZGVsZXRlKGRhdGEuc2VsZWN0ZWRUZXJtLmNhdGVnb3J5KTtcbiAgICAgIC8vICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmN1cnJlbnRTZWxlY3Rpb24ubmV4dCh7IHR5cGU6IGRhdGEucGFyZW50RGF0YS5jYXRlZ29yeSwgZGF0YTogZGF0YS5wYXJlbnREYXRhLmNoaWxkcmVuIH0pXG4gICAgICAvLyB9XG4gICAgfSwgMTAwKTtcblxuICB9XG4gIGlzRW5hYmxlZChjb2x1bW5Db2RlOiBzdHJpbmcpOiBib29sZWFuIHsgICAgXG4gICAgcmV0dXJuICEhdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZ2V0KGNvbHVtbkNvZGUpXG4gIH1cblxuICBpc0VuYWJsZWRzKCkge1xuICAvLyAgcmV0dXJuIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jYXJkQ2xrRGF0YVxuICBpZih0aGlzLmZyYW1ld29ya1NlcnZpY2UuQ3VycmVudENhcmRDbGspe1xuICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5DdXJyZW50Q2FyZENsay5zdWJzY3JpYmUoKGl0ZW0pPT57XG4gICAgIGNvbnN0IGRhdGFDb2RlOiBhbnkgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KGl0ZW0pXG4gICAgICBpZiAoZGF0YUNvZGUgJiYgZGF0YUNvZGUuY29kZSl7XG4gICAgICAgIHRoaXMuZGF0YUNvbmZpZyA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRDb25maWcoZGF0YUNvZGUuY29kZSlcbiAgICAgIH1cbiAgICAgaWYoZGF0YUNvZGUpe1xuICAgICAgdGhpcy5jb25maWdDb2RlQnRuID0gZGF0YUNvZGUuY29kZVxuICAgICB9XG4gICAgIH0pXG4gIH1cbiAgXG4gIFxuICB9XG5cbiAgLy8gZ2V0YnRuRW5hYmxlRm4oX2l0ZW06IGFueSkge1xuICAvLyAgIGNvbnN0IGFsbFNlbGVjdGVkVGVybTogYW55ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEFsbFNlbGVjdGVkVGVybXMoKVxuICAvLyAgIGlmIChhbGxTZWxlY3RlZFRlcm0gJiYgYWxsU2VsZWN0ZWRUZXJtLmxlbmd0aCAmJiBhbGxTZWxlY3RlZFRlcm0uZmlsdGVyKCh0OiBhbnkpID0+IHQuY2F0ZWdvcnkgPT09IF9pdGVtLmNvZGUpLmxlbmd0aCA+IDApIHtcbiAgLy8gICAgIHJldHVybiB0cnVlXG4gIC8vICAgfVxuICAvLyAgIHJldHVybiBmYWxzZVxuICAvLyB9XG5cblxuICBvcGVuQ3JlYXRlVGVybURpYWxvZyhjb2x1bW46IGFueSwgY29sSW5kZXg6IGFueSkge1xuICAgIGlmICghdGhpcy5pc0VuYWJsZWQoY29sdW1uLmNvZGUpKSB7XG4gICAgICBjb25zdCBuZXh0Q2F0ID0gY29sdW1uLmNvZGVcbiAgICAgIGNvbnN0IG5leHROZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShuZXh0Q2F0KVxuICAgICAgaWYobmV4dENhdCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhuZXh0Q2F0KVxuICAgICAgICBjb25zdCBjb2xJbmZvID0gQXJyYXkuZnJvbSh0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC52YWx1ZXMoKSkuZmlsdGVyKGwgPT4gbC5jb2RlID09PSBuZXh0Q2F0IClcbiAgICAgICAgbGV0IG5leHRDb2xJbmZvOiBhbnkgPSBbXVxuICAgICAgICBpZihuZXh0TmV4dENhdCAmJiBuZXh0TmV4dENhdC5jb2RlKSB7XG4gICAgICAgICAgbmV4dENvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHROZXh0Q2F0LmNvZGUgKVxuICAgICAgICB9XG4gICAgICAgIGxldCBkaWFsb2c6IGFueVxuICAgICAgICBpZih0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrVHlwZSA9PT0gJ01ET19ERVNJR05BVElPTicpe1xuICAgICAgICAgIGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ3JlYXRlVGVybUZyb21GcmFtZXdvcmtDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGRhdGE6IHsgXG4gICAgICAgICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAgICAgICAgIC8vIGNhcmRDb2xJbmZvOiB0aGlzLmRhdGEuY29sdW1uSW5mbyxcbiAgICAgICAgICAgICAgY29sdW1uSW5mbzogY29sSW5mbyAmJiBjb2xJbmZvLmxlbmd0aCA/IGNvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgICAgbmV4dENvbEluZm86IG5leHRDb2xJbmZvICYmIG5leHRDb2xJbmZvLmxlbmd0aCA/IG5leHRDb2xJbmZvWzBdIDogW10sXG4gICAgICAgICAgICAgIGZyYW1ld29ya0lkOiB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrSWQoKSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgICAgIGNvbEluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgICAgICAvLyBjaGlsZHJlbkRhdGE6IGRhdGEuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3aWR0aDogJzgwMHB4JyxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcicsXG4gICAgICAgICAgICBwb3NpdGlvbjogeyB0b3A6ICc1MHB4JyB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Db21wb25lbnQsIHtcbiAgICAgICAgICAgIC8vIGRhdGE6IHtcbiAgICAgICAgICAgIC8vICAgbW9kZTonY3JlYXRlJyxcbiAgICAgICAgICAgIC8vICAgY29sdW1uSW5mbzogY29sdW1uLFxuICAgICAgICAgICAgLy8gICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgICAvLyAgIHNlbGVjdGVkcGFyZW50czogdGhpcy5oZWlnaHRMaWdodGVkLFxuICAgICAgICAgICAgLy8gICBjb2xJbmRleDogY29sSW5kZXgsXG4gICAgICAgICAgICAvLyAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICBkYXRhOiB7IFxuICAgICAgICAgICAgICBtb2RlOidtdWx0aS1jcmVhdGUnLFxuICAgICAgICAgICAgICBjb2x1bW5JbmZvOiBjb2xJbmZvICYmIGNvbEluZm8ubGVuZ3RoID8gY29sSW5mb1swXSA6IFtdLFxuICAgICAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgICAgIHNlbGVjdGVkcGFyZW50czogdGhpcy5oZWlnaHRMaWdodGVkLFxuICAgICAgICAgICAgICBjb2xJbmRleDogbmV4dENhdC5pbmRleCxcbiAgICAgICAgICAgICAgLy8gY2hpbGRyZW5EYXRhOiBkYXRhLmNoaWxkcmVuLFxuICAgICAgICAgICAgICBzZWxlY3RlZFBhcmVudFRlcm1zOiBzZWxlY3RlZFRlcm1zXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInLFxuICAgICAgICAgICAgcG9zaXRpb246IHsgdG9wOiAnNTBweCcgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmKCFyZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jcmVhdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQdWJsaXNoID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgIGNvbnN0IGRhdGEgID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNhcmRDbGtEYXRhXG4gICAgICAgICBcbiAgICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSB7XG4gICAgICAgICAgICByZXMsXG4gICAgICAgICAgICBpbmRleDogbmV4dENhdC5pbmRleCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB0eXBlOiAnbXVsdGktY3JlYXRlJ1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZighKHJlcyAmJiByZXMuc3RvcFVwZGF0ZSkpe1xuICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnVwZGF0ZUFmdGVyQWRkT3JFZGl0U3ViamVjdChyZXNwb25zZURhdGEpXG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIFxuICAgICAgICAgIHRoaXMubG9hZGVkW3Jlcy50ZXJtLmNhdGVnb3J5XSA9IGZhbHNlXG4gICAgICAgICAgLy8gd2FpdFxuICAgICAgICAgIGNvbnN0IHBhcmVudENvbHVtbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KHJlcy50ZXJtWzBdLmNhdGVnb3J5KVxuICAgICAgICAgIHJlcy5wYXJlbnQgPSBudWxsXG4gICAgICAgICAgaWYgKHBhcmVudENvbHVtbikge1xuICAgICAgICAgICAgcmVzLnBhcmVudCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChwYXJlbnRDb2x1bW4uY29kZSlcbiAgICAgICAgICAgIHJlcy5wYXJlbnQuY2hpbGRyZW4/IHJlcy5wYXJlbnQuY2hpbGRyZW4ucHVzaChyZXMudGVybVswXSkgOnJlcy5wYXJlbnRbJ2NoaWxkcmVuJ10gPSBbcmVzLnRlcm1bMF1dXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudXBkYXRlRmluYWxMaXN0KHsgc2VsZWN0ZWRUZXJtOiByZXMudGVybVswXSwgaXNTZWxlY3RlZDogZmFsc2UsIHBhcmVudERhdGE6IHJlcy5wYXJlbnQsIGNvbEluZGV4OmNvbEluZGV4IH0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3Blbk9yZ2FuaXphdGlvbkRpYWxvZyhjb2x1bW46IGFueSwgX2luZGV4OiBhbnkpIHtcbiAgICBjb25zdCB0cmVlTGlzdERhdGEgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0UHJldmlvdXNTZWxlY3RlZFRlcm1zKGNvbHVtbi5jb2RlKSAgICAgXG4gICAgY29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbihPcmdIaWVyYXJjaHlBZGRNb2RhbENvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICBwcmV2aW91czogdHJlZUxpc3REYXRhLFxuICAgICAgICBjdXJyZW50RGF0YTogY29sdW1uLFxuICAgICAgICBzZWxlY3RlZE9yZ0RhdGE6IHRoaXMub3JnU2VsZWN0ZWREYXRhLFxuICAgICAgfSxcbiAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgIHJlc3RvcmVGb2N1czogdHJ1ZSxcbiAgICAgIHBvc2l0aW9uOiB7IHJpZ2h0OiAnMCcgfSxcbiAgICAgIGhlaWdodDogJzEwMHZoJyxcbiAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgIHBhbmVsQ2xhc3M6ICdyaWdodC1zaWRlLW1vZGFsJyxcbiAgICAgIG1heFdpZHRoOiAnMTAwdncnXG4gICAgfSk7XG4gICAgXG4gICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChfcmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKF9yZXMgJiYgX3Jlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnNldExvYWRlclN0YXRlKHRydWUpO1xuICAgICAgICAgIHRoaXMuY3JlYXRlVGVybXMoX3JlcywgY29sdW1uKVxuICAgICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgbGlzdCgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpXG4gIH1cbiAgXG4gIGRyYXdIZWFkZXJMaW5lKGxlbjogbnVtYmVyKXtcbiAgICBjb25zdCBvcHRpb25zID0gey4uLmRlZmF1bHRDb25maWcsLi4uaGVhZGVyTGluZUNvbmZpZyB9XG4gICAgZm9yKGxldCBpPTE7IGk8PWxlbjsgaSsrKXtcbiAgICAgIGNvbnN0IHN0YXJ0RWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI2JveCR7aX1jb3VudGApXG4gICAgICBjb25zdCBlbmRFbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjYm94JHtpfUhlYWRlcmApXG4gICAgICBpZihzdGFydEVsZSAmJiBlbmRFbGUpIHtcbiAgICAgICAgbmV3IExlYWRlckxpbmUoc3RhcnRFbGUsIGVuZEVsZSwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29sdW1uKGNvbHVtbkNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC5nZXQoY29sdW1uQ29kZSlcbiAgfVxuICBcbiAgbmV3Q29ubmVjdGlvbigpIHsgXG4gICAgY29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbihDb25uZWN0b3JDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHt9LFxuICAgICAgd2lkdGg6ICc5MCUnLFxuICAgICAgLy8gcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJyBcbiAgICB9KVxuICAgIGRpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzOiBJQ29ubmVjdGlvblR5cGUpID0+IHtcbiAgICAgIGlmICgocmVzLnNvdXJjZSA9PT0gJ29ubGluZScgJiYgcmVzLmRhdGEuZW5kcG9pbnQpIHx8IChyZXMuc291cmNlID09PSAnb2ZmbGluZScpKSB7XG4gICAgICAgIHRoaXMubG9jYWxTdmMubG9jYWxTdG9yYWdlID0gcmVzXG4gICAgICAgIHRoaXMuaW5pdCgpXG4gICAgICB9IGVsc2UgaWYgKHJlcy5zb3VyY2UgPT09ICdvbmxpbmUnICYmICFyZXMuZGF0YS5lbmRwb2ludCkge1xuICAgICAgICB0aGlzLmxvY2FsU3ZjLmxvY2FsU3RvcmFnZSA9IHJlc1xuICAgICAgICB0aGlzLmluaXQoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICB1cGRhdGVEcmFmdFN0YXR1c1Rlcm1zKGV2ZW50OiBhbnkpe1xuICAgIGlmKGV2ZW50LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuZHJhZnRUZXJtcy5wdXNoKGV2ZW50LnRlcm0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcmFmdFRlcm1zID0gdGhpcy5kcmFmdFRlcm1zLmZpbHRlcihkID0+IGV2ZW50LnRlcm0uaWRlbnRpZmllciAhPT0gZC5pZGVudGlmaWVyKVxuICAgIH1cbiAgICB0aGlzLnNob3dBY3Rpb25CYXIgPSB0aGlzLmRyYWZ0VGVybXMubGVuZ3RoPjA/dHJ1ZTpmYWxzZVxuICB9XG5cbiAgZ2V0Tm9PZkNhcmRzKGV2ZW50OmFueSkge1xuICAgIGlmKHRoaXMuY2F0ZWdvcnlMaXN0Lmxlbmd0aCA+IDAgJiYgZXZlbnQuY2F0ZWdvcnkgIT09ICcnKSB7XG4gICAgICBsZXQgaW5kZXggPSB0aGlzLmNhdGVnb3J5TGlzdC5maW5kSW5kZXgoKG9iajphbnkpID0+IG9iai5jYXRlZ29yeSA9PSBldmVudC5jYXRlZ29yeSk7XG4gICAgICBpZihpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0LnNwbGljZShpbmRleCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmKGV2ZW50LmNhdGVnb3J5ID09ICcnKSB7XG4gICAgICB0aGlzLmNhdGVnb3J5TGlzdFt0aGlzLmNhdGVnb3J5TGlzdC5sZW5ndGgtMV0uY291bnQgPSAwO1xuICAgIH1cbiAgICB0aGlzLmNhdGVnb3J5TGlzdC5wdXNoKGV2ZW50KTtcbiAgfVxuICBcbiAgZ2V0Q291bnQoY29kZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAvLyBHZXQgYWxsIHByZXZpb3VzIGNhdGVnb3JpZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgaGF2ZSBzZWxlY3Rpb25zXG4gICAgY29uc3QgYWxsQ2F0ZWdvcmllcyA9IEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpO1xuICAgIGNvbnN0IGN1cnJlbnRDYXRlZ29yeUluZGV4ID0gYWxsQ2F0ZWdvcmllcy5maW5kSW5kZXgoY2F0ID0+IGNhdC5jb2RlID09PSBjb2RlKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiBhbGwgcHJldmlvdXMgY2F0ZWdvcmllcyBoYXZlIHNlbGVjdGVkIHRlcm1zXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50Q2F0ZWdvcnlJbmRleDsgaSsrKSB7XG4gICAgICBjb25zdCBwcmV2Q2F0ZWdvcnlDb2RlID0gYWxsQ2F0ZWdvcmllc1tpXS5jb2RlO1xuICAgICAgY29uc3QgaGFzUHJldlNlbGVjdGlvbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmhhcyhwcmV2Q2F0ZWdvcnlDb2RlKTtcbiAgICAgIFxuICAgICAgLy8gSWYgYW55IHByZXZpb3VzIGNhdGVnb3J5IGRvZXNuJ3QgaGF2ZSBhIHNlbGVjdGlvbiwgcmV0dXJuIDBcbiAgICAgIGlmICghaGFzUHJldlNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gTm93IHdlIGNhbiBjYWxjdWxhdGUgdGhlIGFjdHVhbCBjb3VudCBzaW5jZSBhbGwgcHJldmlvdXMgbGV2ZWxzIGFyZSBzZWxlY3RlZFxuICAgIGxldCBjb3VudCA9IDA7XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhIHNlbGVjdGVkIHRlcm0gZm9yIHBhcmVudCBjYXRlZ29yeSB0aGF0IGhhcyBjaGlsZHJlbiBmb3IgdGhpcyBjYXRlZ29yeVxuICAgIGNvbnN0IHByZXZDYXRlZ29yeSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KGNvZGUpO1xuICAgIGlmIChwcmV2Q2F0ZWdvcnkpIHtcbiAgICAgIGNvbnN0IHByZXZTZWxlY3RlZFRlcm0gPSB0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQocHJldkNhdGVnb3J5LmNvZGUpO1xuICAgICAgaWYgKHByZXZTZWxlY3RlZFRlcm0pIHtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHNlbGVjdGVkIHBhcmVudCB0ZXJtLCBjb3VudCBpdHMgY2hpbGRyZW4gZm9yIHRoaXMgY2F0ZWdvcnlcbiAgICAgICAgaWYgKHByZXZTZWxlY3RlZFRlcm0uY2hpbGRyZW4gJiYgcHJldlNlbGVjdGVkVGVybS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY291bnQgPSBwcmV2U2VsZWN0ZWRUZXJtLmNoaWxkcmVuLmZpbHRlcigoY2hpbGQ6IGFueSkgPT4gXG4gICAgICAgICAgICAhY2hpbGQuaXNEZWxldGVkICYmIGNoaWxkLnN0YXR1cyAhPT0gJ1JldGlyZWQnICYmIFxuICAgICAgICAgICAgKGNoaWxkLmNhdGVnb3J5ID09PSBjb2RlIHx8IChjaGlsZC5hc3NvY2lhdGlvbnMgJiYgXG4gICAgICAgICAgICAgY2hpbGQuYXNzb2NpYXRpb25zLnNvbWUoKGFzc29jOiBhbnkpID0+IGFzc29jLmNhdGVnb3J5ID09PSBjb2RlKSkpXG4gICAgICAgICAgKS5sZW5ndGg7XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIElmIG5vIHNlbGVjdGlvbiBleGlzdHMgZm9yIHRoZSBwYXJlbnQsIGRvbid0IHNob3cgY291bnRzXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgXG4gICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgbGV2ZWwsIHdlIGNhbiBzaG93IGFsbCB0ZXJtc1xuICAgIGNvbnN0IGNhdGVnb3J5RGF0YSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LmdldChjb2RlKTtcbiAgICBpZiAoY2F0ZWdvcnlEYXRhICYmIGNhdGVnb3J5RGF0YS5jaGlsZHJlbikge1xuICAgICAgY291bnQgPSBjYXRlZ29yeURhdGEuY2hpbGRyZW4uZmlsdGVyKChjaGlsZDogYW55KSA9PiBcbiAgICAgICAgIWNoaWxkLmlzRGVsZXRlZCAmJiBjaGlsZC5zdGF0dXMgIT09ICdSZXRpcmVkJ1xuICAgICAgKS5sZW5ndGg7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIHNlbmRGb3JBcHByb3ZhbCgpe1xuICAgIGlmKCF0aGlzLmlzQXBwcm92YWxWaWV3KXtcbiAgICAgICAgbGV0IHBhcmVudExpc3Q6IGFueSA9IFtdXG4gICAgICAgIHRoaXMubGlzdC5mb3JFYWNoKGVsZSA9PiB7XG4gICAgICAgICAgY29uc3QgdCA9IGVsZS5jaGlsZHJlbi5maWx0ZXIoKHRlcm06IGFueSkgPT4gdGVybS5zZWxlY3RlZCA9PT0gdHJ1ZSlcbiAgICAgICAgICBpZih0WzBdKXtcbiAgICAgICAgICAgIHBhcmVudExpc3QucHVzaCh0WzBdKVxuICAgICAgICAgIH0gXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgICB1cGRhdGVGaWVsZFZhbHVlczpbLi4ucGFyZW50TGlzdCwgLi4udGhpcy5kcmFmdFRlcm1zXVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwcm92YWxTZXJ2aWNlLmNyZWF0ZUFwcHJvdmFsKHJlcSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UucmVtb3ZlT2xkTGluZSgpXG4gICAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbignVGVybXMgc3VjY2Vzc2Z1bGx5IHNlbnQgZm9yIEFwcHJvdmFsLicsICdjYW5jZWwnKVxuICAgICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbnRGb3JBcHByb3ZlLmVtaXQodGhpcy5kcmFmdFRlcm1zKVxuICAgIH1cbiAgIFxuICB9XG5cbiAgY2xvc2VBY3Rpb25CYXIoX2U6YW55KXsgXG4gICAgdGhpcy5zaG93QWN0aW9uQmFyID0gZmFsc2U7XG4gIH1cblxuICBpbml0Q29uZmlnKCkge1xuICAgIGlmKHRoaXMuZW52aXJvbm1lbnQpe1xuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnVwZGF0ZUVudmlyb25tZW50KHRoaXMuZW52aXJvbm1lbnQpO1xuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnNldENvbmZpZyh0aGlzLnRheG9ub215Q29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpe1xuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnJlbW92ZU9sZExpbmUoKTtcbiAgICAgIC8vIHRoaXMuZW52aXJvbm1lbnQgPSBudWxsXG4gICAgICAvLyB0aGlzLmZyYW1ld29ya1NlcnZpY2UucmVzZXRBbmRGcmVzaCgpXG4gICAgICAvLyB0aGlzLmNvbm5lY3RvclN2Yy5yZW1vdmVBbGxMaW5lcygpXG4gICAgICAvLyB0aGlzLmNvbm5lY3RvclN2Yy51cGRhdGVDb25uZWN0b3JzTWFwKHt9KVxuICB9XG5cbiAgZ2V0TmV4dENhdChkYXRhOiBhbnkpIHtcbiAgICBpZihkYXRhICAmJiBkYXRhLmNvZGUpe1xuICAgICAgY29uc3QgbmV4dENhdCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkoZGF0YS5jb2RlKVxuICAgICAgcmV0dXJuIG5leHRDYXRcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGlzQ3VycmVudE9yTmV4dFRlcm0oX2NvbHVtbjogYW55LCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgLy8gSWYgdGhlcmUncyBubyBjdXJyZW50IHNlbGVjdGlvbiwgb25seSBlbmFibGUgdGhlIGZpcnN0IGNvbHVtblxuICAgIGlmICghdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmN1cnJlbnRTZWxlY3Rpb24udmFsdWUpIHtcbiAgICAgIHJldHVybiBpbmRleCA9PT0gMDtcbiAgICB9XG4gICAgXG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHNlbGVjdGVkIGNhdGVnb3J5IGZyb20gdGhlIGN1cnJlbnRTZWxlY3Rpb25cbiAgICBjb25zdCBjdXJyZW50Q2F0ZWdvcnkgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi52YWx1ZS50eXBlO1xuICAgIGlmICghY3VycmVudENhdGVnb3J5KSB7XG4gICAgICByZXR1cm4gaW5kZXggPT09IDA7XG4gICAgfVxuICAgIFxuICAgIC8vIEZpbmQgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGFjdGl2ZSBjb2x1bW5cbiAgICBsZXQgY3VycmVudEluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmxpc3RbaV0uY29kZSA9PT0gY3VycmVudENhdGVnb3J5KSB7XG4gICAgICAgIGN1cnJlbnRJbmRleCA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBJZiB3ZSBjb3VsZG4ndCBmaW5kIHRoZSBjdXJyZW50IGluZGV4LCBvbmx5IGVuYWJsZSB0aGUgZmlyc3QgY29sdW1uXG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBpbmRleCA9PT0gMDtcbiAgICB9XG4gICAgXG4gICAgLy8gRW5hYmxlIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlIG5leHQgb25lXG4gICAgcmV0dXJuIGluZGV4ID09PSBjdXJyZW50SW5kZXggfHwgaW5kZXggPT09IGN1cnJlbnRJbmRleCArIDE7XG4gIH1cblxuICBzaG91bGRTaG93U3ZnQm9yZGVyV3JhcHBlcihjb2x1bW46IGFueSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzQ3VycmVudE9yTmV4dFRlcm0oY29sdW1uLCBpbmRleCkgJiYgdGhpcy5nZXRDb3VudChjb2x1bW4uY29kZSkgPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBhc3luYyBjcmVhdGVUZXJtcyhzZWxlY3RlZExpc3Q6YW55LCBjb2x1bW46YW55KSB7XG4gICAgY29uc3QgZnJhbWV3b3JrRGF0YSA9IHtcbiAgICAgIGlkOiB0aGlzLm9yZ1NlbGVjdGVkRGF0YS5vcmdIaWVyYXJjaHlGcmFtZXdvcmtJZCB8fCAnJyxcbiAgICAgIGNhdGVnb3J5OiBjb2x1bW4uY29kZSB8fCAnJyxcbiAgICB9XG4gICAgbGV0IGNyZWF0ZWROb2RlSWQ6YW55ID0gW11cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGVsZSBvZiBzZWxlY3RlZExpc3QpIHsgXG4gICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgICAgdGVybToge1xuICAgICAgICAgICAgICBuYW1lOiBlbGUub3JnTmFtZSB8fCAnJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGVsZS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgY29kZTogdXVpZHY0KCksXG4gICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgaWRlbnRpZmllcjogZWxlLm1pbmlzdHJ5T3JTdGF0ZUlkIHx8ICcnLFxuICAgICAgICAgICAgICAgIHBhcmVudE9yZ05hbWU6IGVsZS5taW5pc3RyeU9yU3RhdGVOYW1lIHx8ICcnLFxuICAgICAgICAgICAgICAgIG9yZ0lkOiBlbGUuaWRlbnRpZmllciB8fCAnJyxcbiAgICAgICAgICAgICAgICBvcmdOYW1lOiBlbGUub3JnTmFtZSB8fCAnJyxcbiAgICAgICAgICAgICAgICBtaW5pc3RyeU9yU3RhdGVUeXBlOiBlbGUubWluaXN0cnlPclN0YXRlVHlwZSB8fCAnJyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgY29uc3QgY3JlYXRlVHJlbXNSZXM6YW55ID0gYXdhaXQgdGhpcy50cmVlSGllcmFyY2h5U3ZjLmNyZWF0ZVRlcm0ocmVxdWVzdEJvZHksIGZyYW1ld29ya0RhdGEpLnRvUHJvbWlzZSgpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGNyZWF0aW5nIHRlcm0nLCBlcnIpO1xuICAgICAgfSlcbiAgICAgIGlmIChjcmVhdGVUcmVtc1JlcyAmJiBjcmVhdGVUcmVtc1Jlcy5yZXN1bHQgJiYgY3JlYXRlVHJlbXNSZXMucmVzdWx0Lm5vZGVfaWQpIHtcbiAgICAgICAgY3JlYXRlZE5vZGVJZC5wdXNoKGNyZWF0ZVRyZW1zUmVzLnJlc3VsdC5ub2RlX2lkWzBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW4oJ0Vycm9yIGluIGNyZWF0aW5nIHRlcm0nLCAnY2FuY2VsJyk7XG4gICAgICAgIHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5zZXRMb2FkZXJTdGF0ZShmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNyZWF0ZWROb2RlSWQubGVuZ3RoID09PSBzZWxlY3RlZExpc3QubGVuZ3RoKSB7XG4gICAgICBpZiAoY29sdW1uLmluZGV4ID4xKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQXNzb2NpYXRpb24oY3JlYXRlZE5vZGVJZCwgZnJhbWV3b3JrRGF0YSwgY29sdW1uKTtcbiAgICAgIH0gXG4gICAgICB0aGlzLnB1Ymxpc2hGcmFtZXdvcmsoZnJhbWV3b3JrRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlQXNzb2NpYXRpb24obm9kZUlkOiBhbnksIGZyYW1ld29ya0RhdGE6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBjb25zdCBwcmV2OmFueSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KGNvbHVtbi5jb2RlKTtcbiAgICBsZXQgcHJldlRyZW06YW55ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhjb2x1bW4uY29kZSlcbiAgICBjb25zdCByZXF1ZXN0Qm9keTphbnkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIHRlcm06IHtcbiAgICAgICAgICBhc3NvY2lhdGlvbnM6IFtdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IFxuICAgIGlmIChwcmV2VHJlbSAmJiBwcmV2VHJlbSkge1xuICAgICAgcHJldlRyZW0gPSBwcmV2VHJlbS5maWx0ZXIoKGVsZTphbnkpID0+IGVsZS5jYXRlZ29yeSA9PT0gcHJldi5jb2RlKVswXVxuICAgICAgaWYgKHByZXZUcmVtICYmIHByZXZUcmVtLmFzc29jaWF0aW9ucyAmJiBwcmV2VHJlbS5hc3NvY2lhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBwcmV2VHJlbS5hc3NvY2lhdGlvbnMuZm9yRWFjaCgoZWxlOmFueSkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdEJvZHkucmVxdWVzdC50ZXJtLmFzc29jaWF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGVsZS5pZGVudGlmaWVyXG4gICAgICAgICAgfSlcbiAgICAgICAgfSkgXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlSWQgJiYgbm9kZUlkLmxlbmd0aCA+IDApIHtcbiAgICAgIG5vZGVJZC5mb3JFYWNoKChlbGU6YW55KSA9PiB7XG4gICAgICAgIHJlcXVlc3RCb2R5LnJlcXVlc3QudGVybS5hc3NvY2lhdGlvbnMucHVzaCh7XG4gICAgICAgICAgaWRlbnRpZmllcjogZWxlXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBmcmFtZXdvcmtEYXRhLmNhdGVnb3J5ID0gcHJldlRyZW0uY2F0ZWdvcnkgfHwgJyc7XG4gICAgY29uc3Qgbm9kZUlkUGFydHMgPSBwcmV2VHJlbS5pZGVudGlmaWVyLnNwbGl0KCdfJyk7XG4gICAgY29uc3QgY29kZUlkID0gbm9kZUlkUGFydHNbbm9kZUlkUGFydHMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgdXBkYXRlQXNzb2NpYXRpb25SZXM6YW55ID0gYXdhaXQgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnVwZGF0ZUZyYW1ld29ya0Fzc29jaWF0aW9uKHJlcXVlc3RCb2R5LCBmcmFtZXdvcmtEYXRhLCBjb2RlSWQpLnRvUHJvbWlzZSgpLmNhdGNoKGVyciA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiB1cGRhdGluZyBhc3NvY2lhdGlvbicsIGVycik7XG4gICAgfSlcbiAgICBpZiAodXBkYXRlQXNzb2NpYXRpb25SZXMgJiYgdXBkYXRlQXNzb2NpYXRpb25SZXMucmVzdWx0ICYmIHVwZGF0ZUFzc29jaWF0aW9uUmVzLnJlc3VsdC5ub2RlX2lkKSB7XG4gICAgICAvLyB0aGlzLnB1Ymxpc2hGcmFtZXdvcmsoZnJhbWV3b3JrRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGlzaEZyYW1ld29yayhmcmFtZXdvcmtEYXRhOiBhbnkpIHtcbiAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMucHVibGlzaEZyZWFtZXdvcmsoZnJhbWV3b3JrRGF0YSkuc3Vic2NyaWJlKChyZXM6YW55KSA9PiB7XG4gICAgICBpZiAocmVzICYmIHJlcy5yZXN1bHQgJiYgcmVzLnJlc3VsdC5wdWJsaXNoU3RhdHVzKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW4oYE9yZ2FuaXphdGlvbiBIaWVyYXJjaHkgdXBkYXRlZC4gV2lsbCByZWZsZWN0IGluIHNvbWV0aW1lYCwgJ2NhbmNlbCcpO1xuICAgICAgICAgIHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5zZXRMb2FkZXJTdGF0ZShmYWxzZSk7XG4gICAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICAgIH0sIDEwMDAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW4oJ0Vycm9yIGluIHB1Ymxpc2hpbmcgZnJhbWV3b3JrJywgJ2NhbmNlbCcpO1xuICAgICAgICB0aGlzLnRyZWVIaWVyYXJjaHlTdmMuc2V0TG9hZGVyU3RhdGUoZmFsc2UpO1xuICAgICAgfVxuICAgIH0sIChlcnIpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIHB1Ymxpc2hpbmcgZnJhbWV3b3JrJywgZXJyKTtcbiAgICAgIHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5zZXRMb2FkZXJTdGF0ZShmYWxzZSk7XG4gICAgfSk7XG4gIH1cblxuICByZW1vdmVDb25uZWN0aW9uKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IGFzc29jaWF0aW9uID0gdGhpcy5nZXRTZWxlY3RlZFRlcm1zQXNzb2NpYXRpb24oZGF0YS5jaGlsZHJlbi5jb2RlKTtcbiAgICBsZXQgY291bnQgPSAwXG4gICAgaWYgKGFzc29jaWF0aW9uICYmIGFzc29jaWF0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIGFzc29jaWF0aW9uLmZvckVhY2goKGFzc29jOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGFzc29jLmlkcyAmJiBhc3NvYy5pZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvdW50ICs9IGFzc29jLmlkcy5sZW5ndGhcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgY29uc3QgZGlhbG9nRGF0YSA9IHtcbiAgICAgICAgZGlhbG9nVHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBoZWFkZXI6IGAke2NvdW50IHx8IDB9IE9yZ2FuaXNhdGlvbiR7Y291bnQgPiAxID8gJ3MnIDogJyd9IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIG9yZ2FuaXNhdGlvbiBoaWVyYXJjaHkuYCxcbiAgICAgICAgICAgIGhlYWRlckNsYXNzOiAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibHVlJyxcbiAgICAgICAgICAgIG1lc3NhZ2VzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtc2dDbGFzczogJ3RleHQtYmx1ZSBtYXJnaW4tYm90dG9tLXMnLFxuICAgICAgICAgICAgICAgIG1zZzogYERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZm9vdGVyQ2xhc3M6ICdpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXInLFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYnRuVGV4dDogJ05vJyxcbiAgICAgICAgICAgIGJ0bkNsYXNzOiAnYnRuLWNvbW1vbiBidG4tc2Vjb25kYXJ5JyxcbiAgICAgICAgICAgIHJlc3BvbnNlOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJ0blRleHQ6ICdZZXMnLFxuICAgICAgICAgICAgYnRuQ2xhc3M6ICdidG4tY29tbW9uIGJ0bi1wcmltYXJ5JyxcbiAgICAgICAgICAgIHJlc3BvbnNlOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9XG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZvcmFtdGlvblBvcHVwQ29tcG9uZW50LCB7XG4gICAgICAgIGRhdGE6IGRpYWxvZ0RhdGEsXG4gICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgIHdpZHRoOiAnNjAwcHgnLFxuICAgICAgICBtYXhXaWR0aDogJzgwdncnLFxuICAgICAgICBtYXhIZWlnaHQ6ICc5MHZoJyxcbiAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgfSlcbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHRoaXMucmV0aXJlVGVybUZ1bmN0aW9uKGFzc29jaWF0aW9uKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKGBFcnJvciBpbiByZW1vdmluZyB0aGUgb3JnYW5pc2F0aW9uYCwgJ2NhbmNlbCcpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmV0aXJlVGVybUZ1bmN0aW9uKGFzc29jaWF0aW9uOiBhbnkpIHsgIFxuICAgIGxldCBjb3VudCA9IDAgIFxuICAgIHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5zZXRMb2FkZXJTdGF0ZSh0cnVlKVxuICAgIGZvciBhd2FpdCAoY29uc3QgZWxlIG9mIGFzc29jaWF0aW9uKSB7XG4gICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIGNvbnRlbnRJZHM6IGVsZS5pZHNcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgZnJhbWV3b3JrT2JqID0ge1xuICAgICAgICBpZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNvbXBsZXRlUmVzcG9uc2UuY29kZSxcbiAgICAgICAgY2F0ZWdvcnk6IGVsZS5jYXRlZ29yeSB8fCAnJyxcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJldGlyZVJlcyA9IGF3YWl0IHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5yZXRpcmVUZXJtKHJlcXVlc3RCb2R5LCBmcmFtZXdvcmtPYmopLnRvUHJvbWlzZSgpLmNhdGNoKChfZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnNldExvYWRlclN0YXRlKGZhbHNlKVxuICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKGBGYWlsZWQgdG8gcmVtb3ZlIGNvbm5lY3Rpb24uYCwgJ2NhbmNlbCcpXG4gICAgICB9KVxuICAgICAgaWYgKHJldGlyZVJlcyAmJiByZXRpcmVSZXMucGFyYW1zICYmIHJldGlyZVJlcy5wYXJhbXMuc3RhdHVzPy50b0xvd2VyQ2FzZSgpID09PSAnc3VjY2Vzc2Z1bCcpIHtcbiAgICAgICAgY291bnQgKz0gMVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50cmVlSGllcmFyY2h5U3ZjLnNldExvYWRlclN0YXRlKGZhbHNlKVxuICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKGBGYWlsZWQgdG8gcmVtb3ZlIGNvbm5lY3Rpb24uYCwgJ2NhbmNlbCcpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb3VudCA9PT0gYXNzb2NpYXRpb24ubGVuZ3RoKSB7XG4gICAgICBhd2FpdCB0aGlzLnB1Ymxpc2hGcmFtZXdvcmsoe1xuICAgICAgICBpZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNvbXBsZXRlUmVzcG9uc2UuY29kZSxcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJlZUhpZXJhcmNoeVN2Yy5zZXRMb2FkZXJTdGF0ZShmYWxzZSlcbiAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW4oYEZhaWxlZCB0byByZW1vdmUgY29ubmVjdGlvbi5gLCAnY2FuY2VsJylcbiAgICB9XG4gIH1cblxuICBjYXJkQWN0aW9uRW1pdChldmVudDphbnkpIHtcbiAgICBzd2l0Y2goZXZlbnQuYWN0aW9uKSB7XG4gICAgICBjYXNlICdyZW1vdmUtdGVybSc6XG4gICAgICAgICAgdGhpcy5yZW1vdmVDb25uZWN0aW9uKGV2ZW50LmRhdGEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd1cGRhdGUtaGllcmFyY2h5JzpcbiAgICAgICAgICB0aGlzLm9wZW5Pcmdhbml6YXRpb25EaWFsb2codGhpcy5saXN0W3RoaXMubGlzdC5maW5kSW5kZXgoKGl0ZW06YW55KSA9PiBpdGVtLmNvZGUgPT09IGV2ZW50LmRhdGEuY2F0ZWdvcnkpICsxXSwgJycpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21hbmFnZS1vcmcnOlxuICAgICAgICAgICAgdGhpcy5tYW5hZ2VPcmcuZW1pdChldmVudC5kYXRhLmNoaWxkcmVuKTtcbiAgICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBlZGl0Q2F0ZWdvcnlOYW1lKGNvbHVtbjphbnksIGluZGV4OmFueSkge1xuICAgIGNvbnNvbGUubG9nKCdlZGl0Q2F0ZWdvcnlOYW1lJywgY29sdW1uLCBpbmRleCk7XG4gICAgY29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbihDYXRlZ29yeUVkaXRNb2R1bGVDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY29sdW1uSW5mbzogY29sdW1uLFxuICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgIGNvbEluZGV4OiBpbmRleFxuICAgICAgfSxcbiAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgcGFuZWxDbGFzczogJ2NhdGVnb3J5LWVkaXQtY29udGFpbmVyJyxcbiAgICAgIHBvc2l0aW9uOiB7IHRvcDogJzUwcHgnIH1cbiAgICB9KVxuICAgIGRpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdDYXRlZ29yeSBlZGl0IGRpYWxvZyBjbG9zZWQnLCByZXMpO1xuICAgIH0pXG4gIH1cblxuICBnZXRTZWxlY3RlZFRlcm1zQXNzb2NpYXRpb24oY2F0ZWdvcnlDb2RlOiBzdHJpbmcpIHtcbiAgICBsZXQgdGVtcERhdGE6IGFueSA9IFtdO1xuICAgIGNvbnN0IGNvbXBsZXRlRGF0YSA9IF8uY2xvbmVEZWVwKHRoaXMuZnJhbWV3b3JrU2VydmljZS5jb21wbGV0ZVJlc3BvbnNlKTtcbiAgICBpZiAoY29tcGxldGVEYXRhICYmIGNvbXBsZXRlRGF0YS5jYXRlZ29yaWVzICYmIGNvbXBsZXRlRGF0YS5jYXRlZ29yaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbXBsZXRlRGF0YS5jYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5OiBhbnksIGNhdEluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNhdGVnb3J5LnRlcm1zICYmIGNhdGVnb3J5LnRlcm1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjYXRlZ29yeS50ZXJtcy5mb3JFYWNoKCh0ZXJtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICh0ZXJtLmNvZGUgPT09IGNhdGVnb3J5Q29kZSkge1xuICAgICAgICAgICAgICB0ZW1wRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0ZXJtLm5hbWUsXG4gICAgICAgICAgICAgICAgY2F0ZWdvcnk6IHRlcm0uY2F0ZWdvcnksXG4gICAgICAgICAgICAgICAgaWRzOiBbdGVybS5jb2RlXSxcbiAgICAgICAgICAgICAgICBuZXh0Q2F0ZWdvcnk6IHRlcm0uY2hpbGRyZW4gPyB0ZXJtLmNoaWxkcmVuWzBdLmNhdGVnb3J5IDogJycsXG4gICAgICAgICAgICAgICAgYXNzb2NJZHM6IFtdXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAodGVybS5hc3NvY2lhdGlvbnMgJiYgdGVybS5hc3NvY2lhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRlcm0uYXNzb2NpYXRpb25zLmZvckVhY2goKGFzc29jOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRlbXBEYXRhW2NhdEluZGV4XVsnYXNzb2NJZHMnXS5wdXNoKGFzc29jLmNvZGUpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGlmIChjYXRJbmRleCA+IDAgJiYgY2F0ZWdvcnkudGVybXMgJiYgY2F0ZWdvcnkudGVybXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNhdGVnb3J5LnRlcm1zLmZvckVhY2goKHRlcm06IGFueSkgPT4ge1xuICAgICAgICAgICAgdGVtcERhdGEuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpdGVtLm5leHRDYXRlZ29yeSA9PT0gdGVybS5jYXRlZ29yeSAmJiBpdGVtLmFzc29jSWRzLmluY2x1ZGVzKHRlcm0uY29kZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdXNoRGF0YTphbnkgPSB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiB0ZXJtLm5hbWUsXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yeTogdGVybS5jYXRlZ29yeSxcbiAgICAgICAgICAgICAgICAgIGlkczogW3Rlcm0uY29kZV0sXG4gICAgICAgICAgICAgICAgICBuZXh0Q2F0ZWdvcnk6IHRlcm0uY2hpbGRyZW4gPyB0ZXJtLmNoaWxkcmVuWzBdLmNhdGVnb3J5IDogJycsXG4gICAgICAgICAgICAgICAgICBhc3NvY0lkczogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRlcm0uYXNzb2NpYXRpb25zICYmIHRlcm0uYXNzb2NpYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIHRlcm0uYXNzb2NpYXRpb25zLmZvckVhY2goKGFzc29jOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHVzaERhdGFbJ2Fzc29jSWRzJ10ucHVzaChhc3NvYy5jb2RlKVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGVtcERhdGEucHVzaChwdXNoRGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBEYXRhO1xuICB9XG59IiwiPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LTEgY29ubmVjdGlvblNldHRpbmdzXCI+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIChjbGljayk9XCJuZXdDb25uZWN0aW9uKClcIj5cbiAgICAgICAgPG1hdC1pY29uPnt7YXBwX3N0cmluZ3MuYnVpbGR9fTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG48L2Rpdj4gLS0+XG5cbjxkaXYgKm5nSWY9XCJsaXN0ICYmIGxpc3QubGVuZ3RoID4gMFwiIGNsYXNzPVwiZmxleCBoZWlnaHRGaXggb3ZlcmZsb3ctY29udGFpbmVyXCIgaWQ9XCJ0cmVlVmlld0NvbnRhaW5lclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBsaXN0OyBsZXQgaSA9IGluZGV4O1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIGZlbHgtY29sICBjb2wtY29udGFpbmVyIGNvbnRhaW5lcnN7e2xpc3QubGVuZ3RofX1cIiBpZD1cImJveHt7aSsxfX1Db250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1oZWFkaW5nLXN0aWNreVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1oZWFkaW5nLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjYXRlZ29yeS1oZWFkZXInPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5LWhlYWRlci1pdGVtcyB3LWZ1bGwgZmxleCBwYWRkaW5nLXJlbW92ZVwiIGlkPVwiYm94e3tpfX1IZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggZ2FwLTEgbWF0LWJvZHktMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uPy5jb25maWc/Lmljb25FbmFibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gW25nU3R5bGVdPVwieydjb2xvcic6Y29sdW1uLmNvbmZpZy5jb2xvcn1cIj57e2NvbHVtbi5jb25maWcuaWNvbn19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3tjb2x1bW4ubmFtZX19IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbHVtbj8uY29uZmlnPy5jYXRlZ29yeURpc3BsYXlOYW1lIHx8IGNvbHVtbi5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpICE9IDAgJiYgY2F0ZWdvcnlMaXN0Py5sZW5ndGggPiAwOyBlbHNlIGZpcnN0Q29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmluZGV4ICE9PSAxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudFwiPih7e2dldENvdW50KGNvbHVtbi5jb2RlKX19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbj8uY29uZmlnPy5sZXZlbE5hbWVFZGl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJlZGl0LWJ0biBmbGV4XCIgKGNsaWNrKT1cImVkaXRDYXRlZ29yeU5hbWUoY29sdW1uLCBpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpcnN0Q29sdW1uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgPT0gMFwiIGlkPVwiYm94e3tpKzF9fWNvdW50XCIgY2xhc3M9XCJjb3VudFwiPih7e2NvbHVtbi5jaGlsZHJlbi5sZW5ndGh9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGNsYXNzPVwiXCIgKm5nSWY9XCJjb2x1bW4/LmNvbmZpZz8uY3JlYXRlQnRuRW5hYmxlZCAmJiAhY29sdW1uPy5jb25maWc/LmFkZE9yZ0VuYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwiYWRkLWJ0biBtYXJnaW4tbGVmdC1hdXRvXCIgW25nQ2xhc3NdPVwieydidXR0b24tZW5hYmxlZCc6IGNvbmZpZ0NvZGVCdG49PSBjb2x1bW4/LmNvZGUsICdidXR0b24tZGlzYWJsZWQnOiBjb25maWdDb2RlQnRuIT09IGNvbHVtbj8uY29kZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5DcmVhdGVUZXJtRGlhbG9nKGNvbHVtbiwgaSlcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BZGQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXJnaW4tcmVtb3ZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thcHBfc3RyaW5ncy5hZGR9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbj8uY29uZmlnPy5hZGRPcmdFbmFibGVkICYmICFjb2x1bW4/LmNvbmZpZz8uY3JlYXRlQnRuRW5hYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJhZGQtYnRuIG1hcmdpbi1sZWZ0LWF1dG9cIiAoY2xpY2spPVwib3Blbk9yZ2FuaXphdGlvbkRpYWxvZyhjb2x1bW4sIGkpXCIgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2J1dHRvbi1lbmFibGVkJzogaXNDdXJyZW50T3JOZXh0VGVybShjb2x1bW4sIGkpLCAnYnV0dG9uLWRpc2FibGVkJzogIWlzQ3VycmVudE9yTmV4dFRlcm0oY29sdW1uLCBpKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFkZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hcmdpbi1yZW1vdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FwcF9zdHJpbmdzLmFkZH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3dcIiBpZD1cImJveHt7aSsxfX1jb3VudFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICBQdXQgc2VhcmNoIGJ1dHRvbiBoZXJlIGluIGZ1dHVyZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0ge3tjb2x1bW4uY29kZX19IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZGRpbmcteDIgY2F0LWNvbHVtbnMgY29udGFpbmVyLWJveFwiIGlkPVwiYm94e3tpKzF9fVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4/LmNoaWxkcmVuICYmIGNvbHVtbj8uY2hpbGRyZW4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGliLXRyZWUtY29sdW1uLXZpZXcgKm5nSWY9XCJsb2FkZWRbY29sdW1uLmNvZGVdXCIgI3NlbGVjdGVkVGF4b25vbXlUZXJtIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRhaW5lcklkXT1cIidib3gnKyhpKzEpXCIgKHVwZGF0ZVRheG9ub215VGVybSk9XCJ1cGRhdGVUYXhvbm9teVRlcm0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICh1cGRhdGVUZXJtTGlzdCk9XCJ1cGRhdGVEcmFmdFN0YXR1c1Rlcm1zKCRldmVudClcIiAoY2FyZHNDb3VudCk9XCJnZXROb09mQ2FyZHMoJGV2ZW50KVwiIFxuICAgICAgICAgICAgICAgICAgICAocmV0aXJlVGVybURhdGEpPVwicmVtb3ZlQ29ubmVjdGlvbigkZXZlbnQpXCIgKGNhcmRBY3Rpb24pPVwiY2FyZEFjdGlvbkVtaXQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvbGliLXRyZWUtY29sdW1uLXZpZXc+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZFNob3dTdmdCb3JkZXJXcmFwcGVyKGNvbHVtbiwgaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN2Zy1ib3JkZXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMxQjIxMzM1MlwiIHN0cm9rZS13aWR0aD1cIjJcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtZGFzaGFycmF5PVwiMjAsIDEwXCIgcng9XCIxMFwiIHJ5PVwiMTBcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50IGZsZXggZmxleC1jb2wgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZnJhYy1uby1jb25uZWN0aW9uXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U2VsZWN0IGFuIG9yZ2FuaXphdGlvbiB0byBhZGQgb3Igc2VlIGZ1cnRoZXIgY29ubmVjdGlvbnM8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cImFkZC1idG5cIiAoY2xpY2spPVwib3Blbk9yZ2FuaXphdGlvbkRpYWxvZyhjb2x1bW4sIGkpXCIgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYnV0dG9uLWVuYWJsZWQnOiBpc0N1cnJlbnRPck5leHRUZXJtKGNvbHVtbiwgaSksICdidXR0b24tZGlzYWJsZWQnOiAhaXNDdXJyZW50T3JOZXh0VGVybShjb2x1bW4sIGkpfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BZGQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hcmdpbi1yZW1vdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YXBwX3N0cmluZ3MuYWRkfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bGliLWFjdGlvbi1iYXIgKm5nSWY9XCJzaG93QWN0aW9uQmFyXCIgW2FjdGlvblR5cGVdPVwiaXNBcHByb3ZhbFZpZXdcIiBbY29uZmlnVHlwZV09XCJ3b3JrRmxvd1N0YXR1c1wiXG4gICAgICAgIChzZW5kQXBwcm92YWwpPVwic2VuZEZvckFwcHJvdmFsKClcIiAoY2xvc2VBY3Rpb24pPVwiY2xvc2VBY3Rpb25CYXIoJGV2ZW50KVwiPjwvbGliLWFjdGlvbi1iYXI+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCIhKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwICkgJiYgaXNGcmF3b3JrTG9hZGluZ1wiIGNsYXNzPVwiZmxleCBoZWlnaHRGaXggXCI+XG4gICAgPGgxIGkxOG4+e3thcHBfc3RyaW5ncy5sb2FkaW5nfX08L2gxPlxuPC9kaXY+Il19