@vgip/meta-ui 1.7.6 → 1.7.7

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 (43) hide show
  1. package/esm2022/lib/fieldComposite/index.mjs +2 -2
  2. package/esm2022/lib/fieldDatetime/index.mjs +10 -8
  3. package/esm2022/lib/fieldInput/index.mjs +22 -11
  4. package/esm2022/lib/fieldReference/index.mjs +2 -2
  5. package/esm2022/lib/fieldSelect/index.mjs +36 -13
  6. package/esm2022/lib/resource/index.mjs +14 -10
  7. package/esm2022/lib/services/metaContext/index.mjs +9 -1
  8. package/fesm2022/{vgip-meta-ui-index-46c7f4e4.mjs → vgip-meta-ui-index-09f92f24.mjs} +16 -12
  9. package/fesm2022/vgip-meta-ui-index-09f92f24.mjs.map +1 -0
  10. package/fesm2022/{vgip-meta-ui-index-45a741f4.mjs → vgip-meta-ui-index-1b9f700a.mjs} +3 -3
  11. package/fesm2022/vgip-meta-ui-index-1b9f700a.mjs.map +1 -0
  12. package/fesm2022/{vgip-meta-ui-index-1799a060.mjs → vgip-meta-ui-index-3cd63fdb.mjs} +5 -5
  13. package/fesm2022/vgip-meta-ui-index-3cd63fdb.mjs.map +1 -0
  14. package/fesm2022/{vgip-meta-ui-index-ea5c2466.mjs → vgip-meta-ui-index-4e34299c.mjs} +9 -1
  15. package/fesm2022/vgip-meta-ui-index-4e34299c.mjs.map +1 -0
  16. package/fesm2022/{vgip-meta-ui-index-ea3cad77.mjs → vgip-meta-ui-index-5fbb0fc8.mjs} +2 -2
  17. package/fesm2022/{vgip-meta-ui-index-ea3cad77.mjs.map → vgip-meta-ui-index-5fbb0fc8.mjs.map} +1 -1
  18. package/fesm2022/{vgip-meta-ui-index-0349968f.mjs → vgip-meta-ui-index-6f2365c3.mjs} +10 -8
  19. package/fesm2022/vgip-meta-ui-index-6f2365c3.mjs.map +1 -0
  20. package/fesm2022/{vgip-meta-ui-index-6f647ae9.mjs → vgip-meta-ui-index-94c9df13.mjs} +39 -16
  21. package/fesm2022/vgip-meta-ui-index-94c9df13.mjs.map +1 -0
  22. package/fesm2022/{vgip-meta-ui-index-b3099377.mjs → vgip-meta-ui-index-af0ec42f.mjs} +2 -2
  23. package/fesm2022/{vgip-meta-ui-index-b3099377.mjs.map → vgip-meta-ui-index-af0ec42f.mjs.map} +1 -1
  24. package/fesm2022/vgip-meta-ui-index-af8c0f14.mjs +471 -0
  25. package/fesm2022/vgip-meta-ui-index-af8c0f14.mjs.map +1 -0
  26. package/fesm2022/{vgip-meta-ui-index-ebaddb9b.mjs → vgip-meta-ui-index-f98de31b.mjs} +2 -2
  27. package/fesm2022/{vgip-meta-ui-index-ebaddb9b.mjs.map → vgip-meta-ui-index-f98de31b.mjs.map} +1 -1
  28. package/fesm2022/{vgip-meta-ui-index-aa21fd6a.mjs → vgip-meta-ui-index-fdeb80d6.mjs} +9 -9
  29. package/fesm2022/{vgip-meta-ui-index-aa21fd6a.mjs.map → vgip-meta-ui-index-fdeb80d6.mjs.map} +1 -1
  30. package/fesm2022/vgip-meta-ui.mjs +13 -13
  31. package/lib/fieldInput/index.d.ts +2 -0
  32. package/lib/fieldSelect/index.d.ts +1 -1
  33. package/lib/resource/index.d.ts +1 -0
  34. package/lib/services/metaContext/index.d.ts +2 -0
  35. package/package.json +1 -1
  36. package/fesm2022/vgip-meta-ui-index-0349968f.mjs.map +0 -1
  37. package/fesm2022/vgip-meta-ui-index-1799a060.mjs.map +0 -1
  38. package/fesm2022/vgip-meta-ui-index-44af92c9.mjs +0 -460
  39. package/fesm2022/vgip-meta-ui-index-44af92c9.mjs.map +0 -1
  40. package/fesm2022/vgip-meta-ui-index-45a741f4.mjs.map +0 -1
  41. package/fesm2022/vgip-meta-ui-index-46c7f4e4.mjs.map +0 -1
  42. package/fesm2022/vgip-meta-ui-index-6f647ae9.mjs.map +0 -1
  43. package/fesm2022/vgip-meta-ui-index-ea5c2466.mjs.map +0 -1
@@ -68,10 +68,13 @@ export class MetaResource {
68
68
  if (!this.model) {
69
69
  this.model = {};
70
70
  }
71
+ this.isPersistent = this.resource?.externalId;
72
+ if (this.isPersistent) {
73
+ this.resourceVrn = `vrn:vgis:${this.integrationCode.toLowerCase()}:${this.resource.resourceType}:${this.resource.externalId}`;
74
+ }
71
75
  if (this.resource.activity && this.resource.ref.editable === false && !this.resource.externalId) {
72
76
  this.resource.externalId = 'MISSING_EXTERNAL_ID';
73
77
  }
74
- this.isPersistent = this.resource && this.resource.externalId;
75
78
  if (!this.resource.meta) {
76
79
  this.loadMetadata(this.resource.layoutId);
77
80
  }
@@ -300,6 +303,7 @@ export class MetaResource {
300
303
  this.service.save(this.model).subscribe((result) => {
301
304
  this.model = result;
302
305
  this.resource.externalId = result._vgis.externalId; // eslint-disable-line no-underscore-dangle
306
+ this.resourceVrn = `vrn:vgis:${this.integrationCode.toLowerCase()}:${this.resource.resourceType}:${this.resource.externalId}`;
303
307
  this.isPersistent = true;
304
308
  this.close(result);
305
309
  this.edit = false;
@@ -429,15 +433,15 @@ export class MetaResource {
429
433
  for (const s of this.meta.layout.sections) {
430
434
  for (const f of (s.fields || [])) {
431
435
  if (f.type === 'reference') {
436
+ if (!f.suggestions) {
437
+ f.suggestions = [];
438
+ }
439
+ else {
440
+ f.suggestions = f.suggestions.filter(sg => !sg.auto); // keep meta suggestions if any
441
+ }
432
442
  const refTypes = (f.reference.length ? f.reference : [f.reference]).map(r => r.name);
433
443
  for (const c of this.metaContext.contactables[this.integrationCode]) {
434
444
  if (refTypes.indexOf(c.resourceType || c.type) !== -1) {
435
- if (!f.suggestions) {
436
- f.suggestions = [];
437
- }
438
- else {
439
- f.suggestions = f.suggestions.filter(sg => !sg.auto);
440
- }
441
445
  let tLabel = c.displayName || c.name;
442
446
  if (c.phoneNumbers) {
443
447
  tLabel += (' ✆' + c.phoneNumbers.map(p => p.phoneNumber).join(','));
@@ -485,11 +489,11 @@ export class MetaResource {
485
489
  this.el.nativeElement.dispatchEvent(e);
486
490
  }
487
491
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: MetaResource, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.MetaResourceService }, { token: i2.MetaContextService }, { token: i3.MetaMsgService }], target: i0.ɵɵFactoryTarget.Component }); }
488
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.11", type: MetaResource, selector: "vgip-meta-resource", inputs: { resource: "resource", model: "model", metaResourceServiceDelegated: "metaResourceServiceDelegated", theme: "theme", editMode: "editMode" }, outputs: { done: "done", resourceChange: "resourceChange" }, viewQueries: [{ propertyName: "resourceForm", first: true, predicate: ["resourceForm"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf='generalError' class=\"Vlt-callout Vlt-callout--critical\" style='overflow: auto; margin: 20px;'>\n\t<i></i>\n\t<div class=\"Vlt-callout__content\">\n\t\t<p>{{generalError}}</p>\n\t</div>\n</div>\n<div *ngIf='!meta' class=\"Vlt-progress\">\n\t<div class=\"Vlt-progress__bar\" [ngClass]=\"{ loading: metaLoading }\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuetext=\"Loading Metadata\" aria-valuemax=\"100\"></div>\n</div>\n<form [vgipMetaFormAutofocus]='!resource || !resource.externalId' *ngIf='meta && !generalError' #resourceForm=\"ngForm\" [name]='resource.resourceType' (ngSubmit)='submit(resourceForm)' (change)='onFormChange()' novalidate>\n\t<div class='form-content' style='overflow: hidden;'>\n\t\t<div [ngClass]=\"{ 'Vlt-callout--dismissed': !formErrors }\" class=\"Vlt-callout Vlt-callout--banner Vlt-callout--critical\">\n\t\t\t<i></i>\n\t\t\t<div class=\"Vlt-callout__content\" style=\"margin-top: auto;\">\n\t\t\t\t<p>There is a problem with one or more fields</p>\n\t\t\t\t<small style='font-weight: 600; font-size: 1.0em;' *ngIf='formErrors'>{{ formErrors.message || formErrors }}</small>\n\t\t\t</div>\n\t\t\t<button type='button' class=\"Vlt-callout__dismiss\" (click)='clearFormErrors()' aria-label=\"Dismiss\"></button>\n\t\t</div>\n\t\t<div class=\"Vlt-card__content\" style='min-height: 40px;'>\n\t\t\t<vgip-meta-layout *ngIf='edit' [meta]='meta.layout' [resource]='model' [preview]='false' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t\t<vgip-meta-layout *ngIf='!edit' [meta]='meta.layout' [resource]='model' [preview]='true' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t</div>\n\t</div>\n\t<div class=\"Vlt-card__footer\">\n\t\t<button class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--outline\" type='button' aria-label='Cancel' (click)='close()'>\n\t\t\t{{ edit ? 'Cancel' : 'Close' }}\n\t\t</button>\n\t\t<button *ngIf='edit' class=\"Vlt-btn Vlt-btn--app\" [ngClass]=\"{ 'Vlt-btn--primary': isPersistent, 'Vlt-btn--secondary': !isPersistent }\" type='submit'>\n\t\t\t{{ (resource && resource.externalId) ? 'Update' : 'Create' }}\n\t\t</button>\n\t\t<button (click)='setEditMode()' *ngIf='!edit && isEditable' [disabled]='!isEditable' class=\"Vlt-btn Vlt-btn--app Vlt-btn--primary\" type='button' aria-label='Edit'>\n\t\t\tEdit\n\t\t</button>\n\t\t<div style='margin-right: 8px; flex: 1;'>\n\t\t\t<div *ngIf='meta.availableLayouts && meta.availableLayouts.length' class=\"Vlt-form__element Vlt-form__element--big\" style='padding: 0; margin: -8px -18px -8px 0;'>\n\t\t\t\t<div class=\"Vlt-select\">\n\t\t\t\t\t<label style='all: inherit;'>\n\t\t\t\t\t\t<select style='border: 0; margin-top: 3px; background: transparent;' (change)='changeLayout()' [(ngModel)]='currentLayoutId' [ngModelOptions]='{ standalone: true }' [disabled]='isPersistent'>\n\t\t\t\t\t\t\t<option selected disabled>Select layout</option>\n\t\t\t\t\t\t\t<option *ngFor='let layout of meta.availableLayouts' [ngValue]='layout.id'>{{layout.name}}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t<label>Layout</label> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control -->\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"Vlt-dropdown resource-menu\" [ngClass]=\"{ 'Vlt-dropdown--expanded': resourceMenuVisible }\" style='margin-left: 2px;'>\n\t\t\t<div class=\"Vlt-dropdown__panel\" style='bottom: 40px; right: -4px; top: initial;'>\n\t\t\t\t<div class=\"Vlt-dropdown__panel__content\">\n\t\t\t\t\t<a href='#' class=\"Vlt-dropdown__link\" (click)='loadMetadata(currentLayoutId, true, $event)'>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--smaller'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-refresh\"/></svg>&nbsp;&nbsp;Refresh metadata\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"Vlt-dropdown__trigger\">\n\t\t\t\t<button type='button' (click)='openResourceMenu()' class=\"Vlt-btn Vlt-btn--link\" aria-label='Resource menu'>\n\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small' style='margin: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-more-v-negative\"/></svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</form>\n<div class='busy-mask' [ngClass]=\"{ active: busy }\">\n\t<div style='height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center;'>\n\t\t<div class=\"Vlt-spinner\"></div>\n\t</div>\n</div>\n", styles: [":host{flex:1;display:flex;flex-direction:column;min-height:0;color:var(--vgip-meta-resource-color)}.Vlt-callout--banner{justify-content:initial;text-align:initial;overflow-y:auto}.Vlt-callout--banner.Vlt-callout--dismissed{padding:0}.Vlt-callout--banner:not(.Vlt-callout--dismissed){min-height:78px}.Vlt-spinner:before,.Vlt-spinner:after{border:6px solid #616266;border-color:#616266 transparent transparent}.Vlt-card__content{padding:8px 8px 8px 16px;display:flex;flex-direction:column;min-height:0;flex:1;overflow-y:scroll;overflow-x:hidden;background-color:var(--vgip-meta-resource-bg-color)}@media (hover: none){.Vlt-card__content{padding-right:16px}}.Vlt-card__content::-webkit-scrollbar{width:8px}.Vlt-card__content::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}.Vlt-card__footer{background:var(--vgip-meta-resource-bar-color);border-top:1px solid var(--vgip-meta-separator-color);display:flex;flex-direction:row;margin:16px -24px -24px;padding:8px 8px 8px 16px;box-shadow:0 0 4px #00000040;z-index:1}.Vlt-card__footer .Vlt-select select{color:var(--vgip-meta-input-color)}.Vlt-card__footer .Vlt-select select:disabled{background:initial;cursor:not-allowed}.Vlt-card__footer .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon)}.Vlt-card__footer .resource-menu .Vlt-icon:not(:hover){fill:var(--vgip-meta-input-label-color)}.Vlt-card__footer button.Vlt-btn--secondary{border:none;box-shadow:inset 0 0 0 1px var(--vgip-meta-button-border-color)}.Vlt-card__footer button.Vlt-btn--secondary:not([type=submit]){color:var(--vgip-meta-input-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover{box-shadow:inset 0 0 0 1px var(--vgip-meta-input-accent-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover[type=submit]{background-color:var(--vgip-meta-submit-hover-bg-color)}.Vlt-progress{margin:0;position:sticky}.Vlt-progress .Vlt-progress__bar{width:0;transition:width 5s}.Vlt-progress .Vlt-progress__bar.loading{width:100%}form{border-radius:6px;padding:24px;display:flex;flex-direction:column;min-height:0;flex:1}form .form-content{margin:-24px -24px -16px;padding-bottom:0;flex:1;display:flex;flex-direction:column}.busy-mask{position:absolute;inset:0;background:rgba(0,0,0,.32);opacity:1;z-index:898;display:none;border-bottom-left-radius:6px;border-bottom-right-radius:6px;margin:1px;cursor:progress}.busy-mask.active{display:block}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MetaLayout, selector: "vgip-meta-layout", inputs: ["meta", "resource", "integration", "type", "preview", "theme"] }, { kind: "directive", type: i7.MetaAutofocusDirective, selector: "[vgipMetaFormAutofocus]", inputs: ["vgipMetaFormAutofocus"] }] }); }
492
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.11", type: MetaResource, selector: "vgip-meta-resource", inputs: { resource: "resource", model: "model", metaResourceServiceDelegated: "metaResourceServiceDelegated", theme: "theme", editMode: "editMode" }, outputs: { done: "done", resourceChange: "resourceChange" }, viewQueries: [{ propertyName: "resourceForm", first: true, predicate: ["resourceForm"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf='generalError' class=\"Vlt-callout Vlt-callout--critical\" style='overflow: auto; margin: 20px;'>\n\t<i></i>\n\t<div class=\"Vlt-callout__content\">\n\t\t<p>{{generalError}}</p>\n\t</div>\n</div>\n<div *ngIf='!meta' class=\"Vlt-progress\">\n\t<div class=\"Vlt-progress__bar\" [ngClass]=\"{ loading: metaLoading }\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuetext=\"Loading Metadata\" aria-valuemax=\"100\"></div>\n</div>\n<form [vgipMetaFormAutofocus]='!resource || !resource.externalId' *ngIf='meta && !generalError' #resourceForm=\"ngForm\" [name]='resource.resourceType' (ngSubmit)='submit(resourceForm)' (change)='onFormChange()' novalidate>\n\t<div class='form-content' style='overflow: hidden;'>\n\t\t<div [ngClass]=\"{ 'Vlt-callout--dismissed': !formErrors }\" class=\"Vlt-callout Vlt-callout--banner Vlt-callout--critical\">\n\t\t\t<i></i>\n\t\t\t<div class=\"Vlt-callout__content\" style=\"margin-top: auto;\">\n\t\t\t\t<p>There is a problem with one or more fields</p>\n\t\t\t\t<small style='font-weight: 600; font-size: 1.0em;' *ngIf='formErrors'>{{ formErrors.message || formErrors }}</small>\n\t\t\t</div>\n\t\t\t<button type='button' class=\"Vlt-callout__dismiss\" (click)='clearFormErrors()' aria-label=\"Dismiss\"></button>\n\t\t</div>\n\t\t<div class=\"Vlt-card__content\" style='min-height: 40px;'>\n\t\t\t<vgip-meta-layout *ngIf='edit' [meta]='meta.layout' [resource]='model' [preview]='false' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t\t<vgip-meta-layout *ngIf='!edit' [meta]='meta.layout' [resource]='model' [preview]='true' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit' [attr.data-vrn]='resourceVrn'></vgip-meta-layout>\n\t\t</div>\n\t</div>\n\t<div class=\"Vlt-card__footer\">\n\t\t<button class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--outline\" type='button' aria-label='Cancel' (click)='close()'>\n\t\t\t{{ edit ? 'Cancel' : 'Close' }}\n\t\t</button>\n\t\t<button *ngIf='edit' class=\"Vlt-btn Vlt-btn--app\" [ngClass]=\"{ 'Vlt-btn--primary': isPersistent, 'Vlt-btn--secondary': !isPersistent }\" type='submit'>\n\t\t\t{{ (resource && resource.externalId) ? 'Update' : 'Create' }}\n\t\t</button>\n\t\t<button (click)='setEditMode()' *ngIf='!edit && isEditable' [disabled]='!isEditable' class=\"Vlt-btn Vlt-btn--app Vlt-btn--primary\" type='button' aria-label='Edit'>\n\t\t\tEdit\n\t\t</button>\n\t\t<div style='margin-right: 8px; flex: 1;'>\n\t\t\t<div *ngIf='meta.availableLayouts && meta.availableLayouts.length' class=\"Vlt-form__element Vlt-form__element--big\" style='padding: 0; margin: -8px -18px -8px 0;'>\n\t\t\t\t<div class=\"Vlt-select\">\n\t\t\t\t\t<label style='all: inherit;'>\n\t\t\t\t\t\t<select style='border: 0; margin-top: 3px; background: transparent;' (change)='changeLayout()' [(ngModel)]='currentLayoutId' [ngModelOptions]='{ standalone: true }' [disabled]='isPersistent'>\n\t\t\t\t\t\t\t<option selected disabled>Select layout</option>\n\t\t\t\t\t\t\t<option *ngFor='let layout of meta.availableLayouts' [ngValue]='layout.id'>{{layout.name}}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t<label>Layout</label> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control -->\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"Vlt-dropdown resource-menu\" [ngClass]=\"{ 'Vlt-dropdown--expanded': resourceMenuVisible }\" style='margin-left: 2px;'>\n\t\t\t<div class=\"Vlt-dropdown__panel\" style='bottom: 40px; right: -4px; top: initial;'>\n\t\t\t\t<div class=\"Vlt-dropdown__panel__content\">\n\t\t\t\t\t<a href='#' class=\"Vlt-dropdown__link\" (click)='loadMetadata(currentLayoutId, true, $event)'>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--smaller'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-refresh\"/></svg>&nbsp;&nbsp;Refresh metadata\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"Vlt-dropdown__trigger\">\n\t\t\t\t<button type='button' (click)='openResourceMenu()' class=\"Vlt-btn Vlt-btn--link\" aria-label='Resource menu'>\n\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small' style='margin: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-more-v-negative\"/></svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</form>\n<div class='busy-mask' [ngClass]=\"{ active: busy }\">\n\t<div style='height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center;'>\n\t\t<div class=\"Vlt-spinner\"></div>\n\t</div>\n</div>\n", styles: [":host{flex:1;display:flex;flex-direction:column;min-height:0;color:var(--vgip-meta-resource-color)}.Vlt-callout--banner{justify-content:initial;text-align:initial;overflow-y:auto}.Vlt-callout--banner.Vlt-callout--dismissed{padding:0}.Vlt-callout--banner:not(.Vlt-callout--dismissed){min-height:78px}.Vlt-spinner:before,.Vlt-spinner:after{border:6px solid #616266;border-color:#616266 transparent transparent}.Vlt-card__content{padding:8px 8px 8px 16px;display:flex;flex-direction:column;min-height:0;flex:1;overflow-y:scroll;overflow-x:hidden;background-color:var(--vgip-meta-resource-bg-color)}@media (hover: none){.Vlt-card__content{padding-right:16px}}.Vlt-card__content::-webkit-scrollbar{width:8px}.Vlt-card__content::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}.Vlt-card__footer{background:var(--vgip-meta-resource-bar-color);border-top:1px solid var(--vgip-meta-separator-color);display:flex;flex-direction:row;margin:16px -24px -24px;padding:8px 8px 8px 16px;box-shadow:0 0 4px #00000040;z-index:1}.Vlt-card__footer .Vlt-select select{color:var(--vgip-meta-input-color)}.Vlt-card__footer .Vlt-select select:disabled{background:initial;cursor:not-allowed}.Vlt-card__footer .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon)}.Vlt-card__footer .resource-menu .Vlt-icon:not(:hover){fill:var(--vgip-meta-input-label-color)}.Vlt-card__footer button.Vlt-btn--secondary{border:none;box-shadow:inset 0 0 0 1px var(--vgip-meta-button-border-color)}.Vlt-card__footer button.Vlt-btn--secondary:not([type=submit]){color:var(--vgip-meta-input-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover{box-shadow:inset 0 0 0 1px var(--vgip-meta-input-accent-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover[type=submit]{background-color:var(--vgip-meta-submit-hover-bg-color)}.Vlt-progress{margin:0;position:sticky}.Vlt-progress .Vlt-progress__bar{width:0;transition:width 5s}.Vlt-progress .Vlt-progress__bar.loading{width:100%}form{border-radius:6px;padding:24px;display:flex;flex-direction:column;min-height:0;flex:1}form .form-content{margin:-24px -24px -16px;padding-bottom:0;flex:1;display:flex;flex-direction:column}.busy-mask{position:absolute;inset:0;background:rgba(0,0,0,.32);opacity:1;z-index:898;display:none;border-bottom-left-radius:6px;border-bottom-right-radius:6px;margin:1px;cursor:progress}.busy-mask.active{display:block}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MetaLayout, selector: "vgip-meta-layout", inputs: ["meta", "resource", "integration", "type", "preview", "theme"] }, { kind: "directive", type: i7.MetaAutofocusDirective, selector: "[vgipMetaFormAutofocus]", inputs: ["vgipMetaFormAutofocus"] }] }); }
489
493
  }
490
494
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: MetaResource, decorators: [{
491
495
  type: Component,
492
- args: [{ selector: 'vgip-meta-resource', template: "<div *ngIf='generalError' class=\"Vlt-callout Vlt-callout--critical\" style='overflow: auto; margin: 20px;'>\n\t<i></i>\n\t<div class=\"Vlt-callout__content\">\n\t\t<p>{{generalError}}</p>\n\t</div>\n</div>\n<div *ngIf='!meta' class=\"Vlt-progress\">\n\t<div class=\"Vlt-progress__bar\" [ngClass]=\"{ loading: metaLoading }\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuetext=\"Loading Metadata\" aria-valuemax=\"100\"></div>\n</div>\n<form [vgipMetaFormAutofocus]='!resource || !resource.externalId' *ngIf='meta && !generalError' #resourceForm=\"ngForm\" [name]='resource.resourceType' (ngSubmit)='submit(resourceForm)' (change)='onFormChange()' novalidate>\n\t<div class='form-content' style='overflow: hidden;'>\n\t\t<div [ngClass]=\"{ 'Vlt-callout--dismissed': !formErrors }\" class=\"Vlt-callout Vlt-callout--banner Vlt-callout--critical\">\n\t\t\t<i></i>\n\t\t\t<div class=\"Vlt-callout__content\" style=\"margin-top: auto;\">\n\t\t\t\t<p>There is a problem with one or more fields</p>\n\t\t\t\t<small style='font-weight: 600; font-size: 1.0em;' *ngIf='formErrors'>{{ formErrors.message || formErrors }}</small>\n\t\t\t</div>\n\t\t\t<button type='button' class=\"Vlt-callout__dismiss\" (click)='clearFormErrors()' aria-label=\"Dismiss\"></button>\n\t\t</div>\n\t\t<div class=\"Vlt-card__content\" style='min-height: 40px;'>\n\t\t\t<vgip-meta-layout *ngIf='edit' [meta]='meta.layout' [resource]='model' [preview]='false' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t\t<vgip-meta-layout *ngIf='!edit' [meta]='meta.layout' [resource]='model' [preview]='true' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t</div>\n\t</div>\n\t<div class=\"Vlt-card__footer\">\n\t\t<button class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--outline\" type='button' aria-label='Cancel' (click)='close()'>\n\t\t\t{{ edit ? 'Cancel' : 'Close' }}\n\t\t</button>\n\t\t<button *ngIf='edit' class=\"Vlt-btn Vlt-btn--app\" [ngClass]=\"{ 'Vlt-btn--primary': isPersistent, 'Vlt-btn--secondary': !isPersistent }\" type='submit'>\n\t\t\t{{ (resource && resource.externalId) ? 'Update' : 'Create' }}\n\t\t</button>\n\t\t<button (click)='setEditMode()' *ngIf='!edit && isEditable' [disabled]='!isEditable' class=\"Vlt-btn Vlt-btn--app Vlt-btn--primary\" type='button' aria-label='Edit'>\n\t\t\tEdit\n\t\t</button>\n\t\t<div style='margin-right: 8px; flex: 1;'>\n\t\t\t<div *ngIf='meta.availableLayouts && meta.availableLayouts.length' class=\"Vlt-form__element Vlt-form__element--big\" style='padding: 0; margin: -8px -18px -8px 0;'>\n\t\t\t\t<div class=\"Vlt-select\">\n\t\t\t\t\t<label style='all: inherit;'>\n\t\t\t\t\t\t<select style='border: 0; margin-top: 3px; background: transparent;' (change)='changeLayout()' [(ngModel)]='currentLayoutId' [ngModelOptions]='{ standalone: true }' [disabled]='isPersistent'>\n\t\t\t\t\t\t\t<option selected disabled>Select layout</option>\n\t\t\t\t\t\t\t<option *ngFor='let layout of meta.availableLayouts' [ngValue]='layout.id'>{{layout.name}}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t<label>Layout</label> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control -->\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"Vlt-dropdown resource-menu\" [ngClass]=\"{ 'Vlt-dropdown--expanded': resourceMenuVisible }\" style='margin-left: 2px;'>\n\t\t\t<div class=\"Vlt-dropdown__panel\" style='bottom: 40px; right: -4px; top: initial;'>\n\t\t\t\t<div class=\"Vlt-dropdown__panel__content\">\n\t\t\t\t\t<a href='#' class=\"Vlt-dropdown__link\" (click)='loadMetadata(currentLayoutId, true, $event)'>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--smaller'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-refresh\"/></svg>&nbsp;&nbsp;Refresh metadata\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"Vlt-dropdown__trigger\">\n\t\t\t\t<button type='button' (click)='openResourceMenu()' class=\"Vlt-btn Vlt-btn--link\" aria-label='Resource menu'>\n\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small' style='margin: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-more-v-negative\"/></svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</form>\n<div class='busy-mask' [ngClass]=\"{ active: busy }\">\n\t<div style='height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center;'>\n\t\t<div class=\"Vlt-spinner\"></div>\n\t</div>\n</div>\n", styles: [":host{flex:1;display:flex;flex-direction:column;min-height:0;color:var(--vgip-meta-resource-color)}.Vlt-callout--banner{justify-content:initial;text-align:initial;overflow-y:auto}.Vlt-callout--banner.Vlt-callout--dismissed{padding:0}.Vlt-callout--banner:not(.Vlt-callout--dismissed){min-height:78px}.Vlt-spinner:before,.Vlt-spinner:after{border:6px solid #616266;border-color:#616266 transparent transparent}.Vlt-card__content{padding:8px 8px 8px 16px;display:flex;flex-direction:column;min-height:0;flex:1;overflow-y:scroll;overflow-x:hidden;background-color:var(--vgip-meta-resource-bg-color)}@media (hover: none){.Vlt-card__content{padding-right:16px}}.Vlt-card__content::-webkit-scrollbar{width:8px}.Vlt-card__content::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}.Vlt-card__footer{background:var(--vgip-meta-resource-bar-color);border-top:1px solid var(--vgip-meta-separator-color);display:flex;flex-direction:row;margin:16px -24px -24px;padding:8px 8px 8px 16px;box-shadow:0 0 4px #00000040;z-index:1}.Vlt-card__footer .Vlt-select select{color:var(--vgip-meta-input-color)}.Vlt-card__footer .Vlt-select select:disabled{background:initial;cursor:not-allowed}.Vlt-card__footer .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon)}.Vlt-card__footer .resource-menu .Vlt-icon:not(:hover){fill:var(--vgip-meta-input-label-color)}.Vlt-card__footer button.Vlt-btn--secondary{border:none;box-shadow:inset 0 0 0 1px var(--vgip-meta-button-border-color)}.Vlt-card__footer button.Vlt-btn--secondary:not([type=submit]){color:var(--vgip-meta-input-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover{box-shadow:inset 0 0 0 1px var(--vgip-meta-input-accent-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover[type=submit]{background-color:var(--vgip-meta-submit-hover-bg-color)}.Vlt-progress{margin:0;position:sticky}.Vlt-progress .Vlt-progress__bar{width:0;transition:width 5s}.Vlt-progress .Vlt-progress__bar.loading{width:100%}form{border-radius:6px;padding:24px;display:flex;flex-direction:column;min-height:0;flex:1}form .form-content{margin:-24px -24px -16px;padding-bottom:0;flex:1;display:flex;flex-direction:column}.busy-mask{position:absolute;inset:0;background:rgba(0,0,0,.32);opacity:1;z-index:898;display:none;border-bottom-left-radius:6px;border-bottom-right-radius:6px;margin:1px;cursor:progress}.busy-mask.active{display:block}\n"] }]
496
+ args: [{ selector: 'vgip-meta-resource', template: "<div *ngIf='generalError' class=\"Vlt-callout Vlt-callout--critical\" style='overflow: auto; margin: 20px;'>\n\t<i></i>\n\t<div class=\"Vlt-callout__content\">\n\t\t<p>{{generalError}}</p>\n\t</div>\n</div>\n<div *ngIf='!meta' class=\"Vlt-progress\">\n\t<div class=\"Vlt-progress__bar\" [ngClass]=\"{ loading: metaLoading }\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuetext=\"Loading Metadata\" aria-valuemax=\"100\"></div>\n</div>\n<form [vgipMetaFormAutofocus]='!resource || !resource.externalId' *ngIf='meta && !generalError' #resourceForm=\"ngForm\" [name]='resource.resourceType' (ngSubmit)='submit(resourceForm)' (change)='onFormChange()' novalidate>\n\t<div class='form-content' style='overflow: hidden;'>\n\t\t<div [ngClass]=\"{ 'Vlt-callout--dismissed': !formErrors }\" class=\"Vlt-callout Vlt-callout--banner Vlt-callout--critical\">\n\t\t\t<i></i>\n\t\t\t<div class=\"Vlt-callout__content\" style=\"margin-top: auto;\">\n\t\t\t\t<p>There is a problem with one or more fields</p>\n\t\t\t\t<small style='font-weight: 600; font-size: 1.0em;' *ngIf='formErrors'>{{ formErrors.message || formErrors }}</small>\n\t\t\t</div>\n\t\t\t<button type='button' class=\"Vlt-callout__dismiss\" (click)='clearFormErrors()' aria-label=\"Dismiss\"></button>\n\t\t</div>\n\t\t<div class=\"Vlt-card__content\" style='min-height: 40px;'>\n\t\t\t<vgip-meta-layout *ngIf='edit' [meta]='meta.layout' [resource]='model' [preview]='false' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t\t<vgip-meta-layout *ngIf='!edit' [meta]='meta.layout' [resource]='model' [preview]='true' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit' [attr.data-vrn]='resourceVrn'></vgip-meta-layout>\n\t\t</div>\n\t</div>\n\t<div class=\"Vlt-card__footer\">\n\t\t<button class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--outline\" type='button' aria-label='Cancel' (click)='close()'>\n\t\t\t{{ edit ? 'Cancel' : 'Close' }}\n\t\t</button>\n\t\t<button *ngIf='edit' class=\"Vlt-btn Vlt-btn--app\" [ngClass]=\"{ 'Vlt-btn--primary': isPersistent, 'Vlt-btn--secondary': !isPersistent }\" type='submit'>\n\t\t\t{{ (resource && resource.externalId) ? 'Update' : 'Create' }}\n\t\t</button>\n\t\t<button (click)='setEditMode()' *ngIf='!edit && isEditable' [disabled]='!isEditable' class=\"Vlt-btn Vlt-btn--app Vlt-btn--primary\" type='button' aria-label='Edit'>\n\t\t\tEdit\n\t\t</button>\n\t\t<div style='margin-right: 8px; flex: 1;'>\n\t\t\t<div *ngIf='meta.availableLayouts && meta.availableLayouts.length' class=\"Vlt-form__element Vlt-form__element--big\" style='padding: 0; margin: -8px -18px -8px 0;'>\n\t\t\t\t<div class=\"Vlt-select\">\n\t\t\t\t\t<label style='all: inherit;'>\n\t\t\t\t\t\t<select style='border: 0; margin-top: 3px; background: transparent;' (change)='changeLayout()' [(ngModel)]='currentLayoutId' [ngModelOptions]='{ standalone: true }' [disabled]='isPersistent'>\n\t\t\t\t\t\t\t<option selected disabled>Select layout</option>\n\t\t\t\t\t\t\t<option *ngFor='let layout of meta.availableLayouts' [ngValue]='layout.id'>{{layout.name}}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t<label>Layout</label> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control -->\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"Vlt-dropdown resource-menu\" [ngClass]=\"{ 'Vlt-dropdown--expanded': resourceMenuVisible }\" style='margin-left: 2px;'>\n\t\t\t<div class=\"Vlt-dropdown__panel\" style='bottom: 40px; right: -4px; top: initial;'>\n\t\t\t\t<div class=\"Vlt-dropdown__panel__content\">\n\t\t\t\t\t<a href='#' class=\"Vlt-dropdown__link\" (click)='loadMetadata(currentLayoutId, true, $event)'>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--smaller'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-refresh\"/></svg>&nbsp;&nbsp;Refresh metadata\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"Vlt-dropdown__trigger\">\n\t\t\t\t<button type='button' (click)='openResourceMenu()' class=\"Vlt-btn Vlt-btn--link\" aria-label='Resource menu'>\n\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small' style='margin: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-more-v-negative\"/></svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</form>\n<div class='busy-mask' [ngClass]=\"{ active: busy }\">\n\t<div style='height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center;'>\n\t\t<div class=\"Vlt-spinner\"></div>\n\t</div>\n</div>\n", styles: [":host{flex:1;display:flex;flex-direction:column;min-height:0;color:var(--vgip-meta-resource-color)}.Vlt-callout--banner{justify-content:initial;text-align:initial;overflow-y:auto}.Vlt-callout--banner.Vlt-callout--dismissed{padding:0}.Vlt-callout--banner:not(.Vlt-callout--dismissed){min-height:78px}.Vlt-spinner:before,.Vlt-spinner:after{border:6px solid #616266;border-color:#616266 transparent transparent}.Vlt-card__content{padding:8px 8px 8px 16px;display:flex;flex-direction:column;min-height:0;flex:1;overflow-y:scroll;overflow-x:hidden;background-color:var(--vgip-meta-resource-bg-color)}@media (hover: none){.Vlt-card__content{padding-right:16px}}.Vlt-card__content::-webkit-scrollbar{width:8px}.Vlt-card__content::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}.Vlt-card__footer{background:var(--vgip-meta-resource-bar-color);border-top:1px solid var(--vgip-meta-separator-color);display:flex;flex-direction:row;margin:16px -24px -24px;padding:8px 8px 8px 16px;box-shadow:0 0 4px #00000040;z-index:1}.Vlt-card__footer .Vlt-select select{color:var(--vgip-meta-input-color)}.Vlt-card__footer .Vlt-select select:disabled{background:initial;cursor:not-allowed}.Vlt-card__footer .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon)}.Vlt-card__footer .resource-menu .Vlt-icon:not(:hover){fill:var(--vgip-meta-input-label-color)}.Vlt-card__footer button.Vlt-btn--secondary{border:none;box-shadow:inset 0 0 0 1px var(--vgip-meta-button-border-color)}.Vlt-card__footer button.Vlt-btn--secondary:not([type=submit]){color:var(--vgip-meta-input-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover{box-shadow:inset 0 0 0 1px var(--vgip-meta-input-accent-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover[type=submit]{background-color:var(--vgip-meta-submit-hover-bg-color)}.Vlt-progress{margin:0;position:sticky}.Vlt-progress .Vlt-progress__bar{width:0;transition:width 5s}.Vlt-progress .Vlt-progress__bar.loading{width:100%}form{border-radius:6px;padding:24px;display:flex;flex-direction:column;min-height:0;flex:1}form .form-content{margin:-24px -24px -16px;padding-bottom:0;flex:1;display:flex;flex-direction:column}.busy-mask{position:absolute;inset:0;background:rgba(0,0,0,.32);opacity:1;z-index:898;display:none;border-bottom-left-radius:6px;border-bottom-right-radius:6px;margin:1px;cursor:progress}.busy-mask.active{display:block}\n"] }]
493
497
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.MetaResourceService }, { type: i2.MetaContextService }, { type: i3.MetaMsgService }]; }, propDecorators: { resource: [{
494
498
  type: Input
495
499
  }], model: [{
@@ -508,4 +512,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.11", ngImpo
508
512
  type: ViewChild,
509
513
  args: ['resourceForm']
510
514
  }] } });
511
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvcmVzb3VyY2UvaW5kZXgudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvcmVzb3VyY2Uvdmlldy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHcEksT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFPcEUsTUFBTSxPQUFPLFlBQVk7SUE0QnZCLFlBQ1UsR0FBc0IsRUFDdEIsRUFBYyxFQUNkLG1CQUF3QyxFQUN4QyxXQUErQixFQUMvQixjQUE4QjtRQUo5QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2Qsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBNUIvQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ1IsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDMUIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBV3JELFNBQUksR0FBRyxJQUFJLENBQUM7UUFLWiw0QkFBdUIsR0FBRyxLQUFL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c0JBQWhCLEtBQUs7Z0JBQ1csSUFBSTtzQkFBcEIsTUFBTTtnQkFDVSxjQUFjO3NCQUE5QixNQUFNO2dCQUUyQixZQUFZO3NCQUE3QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1ldGFSZXNvdXJjZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhUmVzb3VyY2UnO1xuaW1wb3J0IHsgbWV0YURhcmssIG1ldGFMaWdodCB9IGZyb20gJy4uL2NvbW1vbi91dGlscy9jb2xvclRoZW1lcyc7XG5pbXBvcnQgeyBNZXRhQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhQ29udGV4dCc7XG5pbXBvcnQgeyBNZXRhTXNnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21ldGFNc2cnO1xuaW1wb3J0IHsgbWV0YU5vcm1hbGl6ZXIgfSBmcm9tICcuLi9jb21tb24vbWV0YU5vcm1hbGl6ZXInO1xuaW1wb3J0IHsgdGVtcGxhdGVCdWlsZGVyIH0gZnJvbSAnLi4vY29tbW9uL3V0aWxzL3RlbXBsYXRlQnVpbGRlcic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2Z2lwLW1ldGEtcmVzb3VyY2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vdmlldy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3R5bGUuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1ldGFSZXNvdXJjZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgcmVzb3VyY2U6IGFueTtcbiAgQElucHV0KCkgbW9kZWw6IGFueTtcbiAgQElucHV0KCkgbWV0YVJlc291cmNlU2VydmljZURlbGVnYXRlZDogTWV0YVJlc291cmNlU2VydmljZTsgLy8gY2FyeSBpdCBmcm9tIHRoZSBwYXJlbnQgdG8ga2VlcCB0aGUgaW50ZXJjZXB0b3JzXG4gIEBJbnB1dCgpIHRoZW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGVkaXRNb2RlID0gdHJ1ZTtcbiAgQE91dHB1dCgpIHB1YmxpYyBkb25lID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIHJlc291cmNlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3Jlc291cmNlRm9ybScpIHB1YmxpYyByZXNvdXJjZUZvcm06IE5nRm9ybTtcblxuICBpbnRlZ3JhdGlvbkNvZGU6IHN0cmluZztcbiAgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIG1ldGE6IGFueTtcbiAgc2VydmljZTogTWV0YVJlc291cmNlU2VydmljZTtcbiAgY3VycmVudExheW91dElkOiBhbnk7XG4gIGZvcm1FcnJvcnM6IGFueTtcbiAgZmllbGRzTWFwOiBhbnk7XG4gIGVkaXQgPSB0cnVlO1xuICBidXN5OiBib29sZWFuO1xuICBtZXRhTG9hZGluZzogYm9vbGVhbjtcbiAgZ2VuZXJhbEVycm9yOiBzdHJpbmc7XG4gIHJlc291cmNlTWVudVZpc2libGU6IGJvb2xlYW47XG4gIGNvbnRhY3RzU3VnZ2VzdGlvbnNEb25lID0gZmFsc2U7XG4gIGlzRWRpdGFibGU6IGJvb2xlYW47XG4gIGlzUGVyc2lzdGVudDogYm9vbGVhbjtcbiAgcmVzb3VyY2VDaGFuZ2VkOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBtZXRhUmVzb3VyY2VTZXJ2aWNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YUNvbnRleHQ6IE1ldGFDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIG1ldGFNc2dTZXJ2aWNlOiBNZXRhTXNnU2VydmljZVxuICApIHtcblxuICB9XG5cbiAgZ2V0IG5pY2VGaWVsZHMoKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMucmVzb3VyY2UubmljZUZpZWxkc1xuICAgICAgJiYgdGhpcy5yZXNvdXJjZS5tZXRhXG4gICAgICAmJiB0aGlzLnJlc291cmNlLm1ldGEubGF5b3V0XG4gICAgICAmJiB0aGlzLnJlc291cmNlLm1ldGEubGF5b3V0LnNlY3Rpb25zXG4gICAgKSB7XG4gICAgICBjb25zdCBleHRyYWN0U2VjdGlvbkZpZWxkcyA9IChzKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBzLmZpZWxkcykge1xuICAgICAgICAgIGlmIChmLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2UubmljZUZpZWxkc1tmLm5hbWVdID0gZjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGYuZmllbGRzICYmIGYuZmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgZXh0cmFjdFNlY3Rpb25GaWVsZHMoZik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5yZXNvdXJjZS5uaWNlRmllbGRzID0ge307XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5yZXNvdXJjZS5tZXRhLmxheW91dC5zZWN0aW9ucykge1xuICAgICAgICBleHRyYWN0U2VjdGlvbkZpZWxkcyhzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2UubmljZUZpZWxkcztcbiAgfVxuXG4gIGdldCBmaWVsZE5hbWVzKCkge1xuICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXModGhpcy5uaWNlRmllbGRzKTtcbiAgICBpZiAodGhpcy5yZXNvdXJjZS5tZXRhLmxheW91dC5jaGlsZHJlbikge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLnJlc291cmNlLm1ldGEubGF5b3V0LmNoaWxkcmVuKSB7XG4gICAgICAgIG5hbWVzLnB1c2goY2hpbGQubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuYW1lcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW50ZWdyYXRpb25Db2RlID0gKHRoaXMucmVzb3VyY2UuaW50ZWdyYXRpb25Db2RlIHx8ICcnKS50b1VwcGVyQ2FzZSgpO1xuICAgIHRoaXMucmVzb3VyY2VUeXBlID0gdGhpcy5yZXNvdXJjZS5yZXNvdXJjZVR5cGU7XG4gICAgdGhpcy5zZXJ2aWNlID0gKHRoaXMubWV0YVJlc291cmNlU2VydmljZURlbGVnYXRlZCB8fCB0aGlzLm1ldGFSZXNvdXJjZVNlcnZpY2UpLm5ldyh0aGlzLnJlc291cmNlKTtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgIHRoaXMubW9kZWwgPSB7fTtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVzb3VyY2UuYWN0aXZpdHkgJiYgdGhpcy5yZXNvdXJjZS5yZWYuZWRpdGFibGUgPT09IGZhbHNlICYmICF0aGlzLnJlc291cmNlLmV4dGVybmFsSWQpIHtcbiAgICAgIHRoaXMucmVzb3VyY2UuZXh0ZXJuYWxJZCA9ICdNSVNTSU5HX0VYVEVSTkFMX0lEJztcbiAgICB9XG4gICAgdGhpcy5pc1BlcnNpc3RlbnQgPSB0aGlzLnJlc291cmNlICYmIHRoaXMucmVzb3VyY2UuZXh0ZXJuYWxJZDtcbiAgICBpZiAoIXRoaXMucmVzb3VyY2UubWV0YSkge1xuICAgICAgdGhpcy5sb2FkTWV0YWRhdGEodGhpcy5yZXNvdXJjZS5sYXlvdXRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vICAgaWYgKHRoaXMuaXNQZXJzaXN0ZW50ICYmICghdGhpcy5pc0VkaXRhYmxlIHx8IHRoaXMucmVzb3VyY2VzW3JlZi5uYW1lXS5tZXRhLmxheW91dC5jaGlsZHJlbikpIHtcbiAgICAgIC8vICAgICB0aGlzLmVkaXQgPSBmYWxzZTtcbiAgICAgIC8vICAgfVxuICAgICAgdGhpcy5tZXRhID0gdGhpcy5yZXNvdXJjZS5tZXRhO1xuICAgICAgdGhpcy5pc0VkaXRhYmxlID0gdGhpcy5tZXRhLmxheW91dCAmJiB0aGlzLm1ldGEubGF5b3V0LmVkaXRhYmxlICE9PSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLmlzUGVyc2lzdGVudCAmJiAoIXRoaXMuaXNFZGl0YWJsZSB8fCB0aGlzLmVkaXRNb2RlID09PSBmYWxzZSB8fCB0aGlzLm1ldGEubGF5b3V0LmNoaWxkcmVuKSkge1xuICAgICAgICB0aGlzLmVkaXQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudExheW91dElkID0gdGhpcy5tZXRhLmxheW91dC5pZDtcbiAgICAgIHRoaXMuZ2V0RGV0YWlscygpO1xuICAgICAgdGhpcy5nZXRGaWVsZHNNYXAoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGhlbWUgIT09ICdpbmhlcml0Jykge1xuICAgICAgdGhpcy5hcHBseVRoZW1lKCk7XG4gICAgfVxuICAgIHRoaXMucmVzb3VyY2VDaGFuZ2VkLnBpcGUoZGVib3VuY2VUaW1lKDQwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5yZXNvdXJjZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IGFueSkge1xuICAgIGlmIChjaGFuZ2VzLnRoZW1lKSB7XG4gICAgICB0aGlzLnRoZW1lID0gY2hhbmdlcy50aGVtZS5jdXJyZW50VmFsdWU7XG4gICAgICBpZiAodGhpcy50aGVtZSAhPT0gJ2luaGVyaXQnKSB7XG4gICAgICAgIHRoaXMuYXBwbHlUaGVtZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEVkaXRNb2RlKCkge1xuICAgIHRoaXMuZWRpdCA9IHRydWU7XG4gIH1cblxuICBsb2FkTWV0YWRhdGEobGF5b3V0SWQ/LCByZWZyZXNoID0gZmFsc2UsIGV2Pykge1xuICAgIGNvbnN0IGxheW91dFN0b3JlS2V5ID0gYHZnaXMubGF5b3V0XyR7dGhpcy5tZXRhQ29udGV4dC52Z2lwVXNlcklkfV8ke3RoaXMuaW50ZWdyYXRpb25Db2RlfV8ke3RoaXMucmVzb3VyY2UucmVzb3VyY2VUeXBlfWA7XG4gICAgaWYgKCFsYXlvdXRJZCkge1xuICAgICAgbGF5b3V0SWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShsYXlvdXRTdG9yZUtleSk7XG4gICAgfVxuICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1ldGFMb2FkaW5nID0gdHJ1ZTtcbiAgICB9LCAwKTtcbiAgICBkZWxldGUgdGhpcy5yZXNvdXJjZS5uaWNlRmllbGRzO1xuICAgIHRoaXMuc2VydmljZS5nZXRNZXRhZGF0YShsYXlvdXRJZCwgcmVmcmVzaCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChtZXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50TGF5b3V0SWQgPSBtZXRhLmxheW91dC5pZDtcbiAgICAgICAgaWYgKGxheW91dElkICE9PSBtZXRhLmxheW91dC5pZCAmJiAhdGhpcy5pc1BlcnNpc3RlbnQpIHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShsYXlvdXRTdG9yZUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXRhID0gbWV0YU5vcm1hbGl6ZXIobWV0YSwgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIHRoaXMucmVzb3VyY2UucmVzb3VyY2VUeXBlKTtcbiAgICAgICAgdGhpcy5pc0VkaXRhYmxlID0gdGhpcy5tZXRhLmxheW91dCAmJiB0aGlzLm1ldGEubGF5b3V0LmVkaXRhYmxlICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZS5tZXRhID0gdGhpcy5tZXRhO1xuICAgICAgICBpZiAoIXJlZnJlc2ggJiYgdGhpcy5pc1BlcnNpc3RlbnQgJiYgKCF0aGlzLmlzRWRpdGFibGUgfHwgdGhpcy5lZGl0TW9kZSA9PT0gZmFsc2UgfHwgdGhpcy5tZXRhLmxheW91dC5jaGlsZHJlbikpIHtcbiAgICAgICAgICB0aGlzLmVkaXQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgdGhpcy5idXN5O1xuICAgICAgICB0aGlzLmdldERldGFpbHMoKTtcbiAgICAgICAgdGhpcy5nZXRGaWVsZHNNYXAoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKG1ldGFFcnJvcjogYW55KSA9PiB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmJ1c3k7XG4gICAgICAgIHRoaXMuZ2VuZXJhbEVycm9yID0gYEVycm9yIGxvYWRpbmcgcmVzb3VyY2UgbWV0YWRhdGEgKCR7bWV0YUVycm9yLnN0YXR1c1RleHR9KWA7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGxheW91dFN0b3JlS2V5KTtcbiAgICAgIH0sXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICBkZWxldGUgdGhpcy5tZXRhTG9hZGluZztcbiAgICAgICAgdGhpcy5mb3JjZVVpVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGV2KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlTGF5b3V0KCkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgYHZnaXMubGF5b3V0XyR7dGhpcy5tZXRhQ29udGV4dC52Z2lwVXNlcklkfV8ke3RoaXMuaW50ZWdyYXRpb25Db2RlfV8ke3RoaXMucmVzb3VyY2UucmVzb3VyY2VUeXBlfWAsXG4gICAgICB0aGlzLmN1cnJlbnRMYXlvdXRJZFxuICAgICk7XG4gICAgdGhpcy5sb2FkTWV0YWRhdGEodGhpcy5jdXJyZW50TGF5b3V0SWQpO1xuICB9XG5cbiAgZ2V0RGV0YWlscygpIHtcbiAgICBpZiAodGhpcy5yZXNvdXJjZSAmJiAodGhpcy5yZXNvdXJjZS5leHRlcm5hbElkIHx8IHRoaXMucmVzb3VyY2UuaWQpKSB7XG4gICAgICBpZiAodGhpcy5yZXNvdXJjZS5wYXJlbnQgJiYgdGhpcy5yZXNvdXJjZS5hY3Rpdml0eSAvLyBza2lwIGZldGNoXG4gICAgICAgICYmIHRoaXMubWV0YS5sYXlvdXQuZWRpdGFibGUgPT09IGZhbHNlICYmICF0aGlzLm1ldGEubGF5b3V0LmNoaWxkcmVuXG4gICAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCBwIGluIHRoaXMucmVzb3VyY2UuYWN0aXZpdHkpIHtcbiAgICAgICAgICBpZiAodGhpcy5yZXNvdXJjZS5hY3Rpdml0eVtwXSAmJiB0aGlzLmZpZWxkTmFtZXMuaW5kZXhPZihwKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWxbcF0gPSB0aGlzLnJlc291cmNlLmFjdGl2aXR5W3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdldERldGFpbHMoXG4gICAgICAgICAgKHRoaXMucmVzb3VyY2UuZXh0ZXJuYWxJZCB8fCB0aGlzLnJlc291cmNlLmlkKSwge1xuICAgICAgICAgIGV2ZW50SWQ6IHRoaXMucmVzb3VyY2UuZXZlbnRJZCAhPT0gJ05PX0VWRU5UJyA/IHRoaXMucmVzb3VyY2UuZXZlbnRJZCA6IG51bGwsIGxheW91dElkOiB0aGlzLnJlc291cmNlLmxheW91dElkXG4gICAgICAgIH1cbiAgICAgICAgKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXNvdXJjZTogYW55KSA9PiB7XG4gICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuICAgICAgICAgICAgaWYgKHJlc291cmNlLl92Z2lzKSB7XG4gICAgICAgICAgICAgIGlmIChyZXNvdXJjZS5fdmdpcy5ldmVudElkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXRhQ29udGV4dC52Z2lwRXZlbnRJZCA9IHJlc291cmNlLl92Z2lzLmV2ZW50SWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJlc291cmNlLmxheW91dElkICYmIHJlc291cmNlLl92Z2lzLmxheW91dElkICE9PSB0aGlzLmN1cnJlbnRMYXlvdXRJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1ldGFkYXRhKHJlc291cmNlLl92Z2lzLmxheW91dElkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuICAgICAgICAgICAgZm9yIChjb25zdCBwIGluIHJlc291cmNlKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKHJlc291cmNlW3BdICE9PSAndW5kZWZpbmVkJykgJiYgKHRoaXMuZmllbGROYW1lcy5pbmRleE9mKHApICE9PSAtMSB8fCBwID09PSAnX3ZnaXMnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWxbcF0gPSByZXNvdXJjZVtwXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYnVzeTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAocmVzb3VyY2VFcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmFsRXJyb3IgPSByZXNvdXJjZUVycm9yLmVycm9yID8gcmVzb3VyY2VFcnJvci5lcnJvci5tZXNzYWdlIHx8IHJlc291cmNlRXJyb3IubWVzc2FnZSA6IHJlc291cmNlRXJyb3IubWVzc2FnZTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1c3k7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JjZVVpVXBkYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucmVzb3VyY2UucmVmICYmIHRoaXMucmVzb3VyY2UucmVmLmFjdGl2aXR5KSB7IC8vIHJldXNlIGZhaWxlZCBhdXRvYWN0aXZpdGllcyBkYXRhXG4gICAgICAgIGZvciAoY29uc3QgcCBpbiB0aGlzLnJlc291cmNlLnJlZi5hY3Rpdml0eSkge1xuICAgICAgICAgIGlmICh0aGlzLnJlc291cmNlLnJlZi5hY3Rpdml0eSAmJiB0aGlzLmZpZWxkTmFtZXMuaW5kZXhPZihwKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWxbcF0gPSB0aGlzLnJlc291cmNlLnJlZi5hY3Rpdml0eVtwXTsgLy8gVkdJUy03MjE1IChjb3B5IG9ubHkgdmFsaWQgZmllbGRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5wZXJmb3JtQXV0b0ZpbGwoKTtcbiAgICB9XG4gIH1cblxuICBwZXJmb3JtQXV0b0ZpbGwoKSB7XG4gICAgdGhpcy5tZXRhTXNnU2VydmljZS5zZW5kTWVzc2FnZShcbiAgICAgIHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAge1xuICAgICAgICBhY3Rpb246ICdhdXRvRmlsbCcsXG4gICAgICAgIGludGVncmF0aW9uOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgcmVzb3VyY2VUeXBlOiB0aGlzLnJlc291cmNlVHlwZSxcbiAgICAgICAgcmVzb3VyY2U6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5tb2RlbCkpLFxuICAgICAgICBmaWVsZHM6IHRoaXMubmljZUZpZWxkcyxcbiAgICAgICAgZXZlbnQ6IHRoaXMubWV0YUNvbnRleHQuY29udGV4dCxcbiAgICAgICAgcHJvZmlsZTogdGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZV1cbiAgICAgIH0sXG4gICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCFyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgIGZvciAoY29uc3QgYWZwIGluIHJlc3BvbnNlLmF1dG9GaWxsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubW9kZWxbYWZwXSkge1xuICAgICAgICAgICAgICB0aGlzLm1vZGVsW2FmcF0gPSByZXNwb25zZS5hdXRvRmlsbFthZnBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBnZXRGaWVsZHNNYXAoKSB7XG4gICAgaWYgKHRoaXMubWV0YS5maWVsZHNNYXApIHtcbiAgICAgIHRoaXMuZmllbGRzTWFwID0gdGhpcy5tZXRhLmZpZWxkc01hcDtcbiAgICAgIHRoaXMubWFya0NvbnRhY3RhYmxlcygpO1xuICAgICAgdGhpcy5idWlsZENvbnRhY3RzU3VnZ2VzdGlvbnMoKTtcbiAgICAgIGlmICghdGhpcy5yZXNvdXJjZS5leHRlcm5hbElkKSB7XG4gICAgICAgIHRoaXMuYnVpbGRTdWJqZWN0VGVtcGxhdGUoKTtcbiAgICAgICAgdGhpcy5leGVjVHJhbnNmb3JtZXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXRhTXNnU2VydmljZS5zZW5kTWVzc2FnZShcbiAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgIHsgYWN0aW9uOiAnZmllbGRzTWFwJywgaW50ZWdyYXRpb246IHRoaXMuaW50ZWdyYXRpb25Db2RlLCByZXNvdXJjZVR5cGU6IHRoaXMucmVzb3VyY2VUeXBlIH0sXG4gICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmICghcmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGRzTWFwID0gcmVzcG9uc2UuZmllbGRzTWFwO1xuICAgICAgICAgICAgdGhpcy5tYXJrQ29udGFjdGFibGVzKCk7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkQ29udGFjdHNTdWdnZXN0aW9ucygpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlc291cmNlLmV4dGVybmFsSWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5idWlsZFN1YmplY3RUZW1wbGF0ZSgpO1xuICAgICAgICAgICAgICB0aGlzLmV4ZWNUcmFuc2Zvcm1lcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnTm8gZmllbGRzIG1hcCcsIHRoaXMuaW50ZWdyYXRpb25Db2RlLCB0aGlzLnJlc291cmNlVHlwZSwgcmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBvcGVuUmVzb3VyY2VNZW51KCkge1xuICAgIHRoaXMucmVzb3VyY2VNZW51VmlzaWJsZSA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25NZW51Q2xpY2tvdXQpO1xuICAgIH0sIDEwKTtcbiAgfVxuXG4gIGNsb3NlKHJlc3VsdD8pIHtcbiAgICB0aGlzLmRvbmUuZW1pdChyZXN1bHQpO1xuICB9XG5cbiAgc2hvd1BhcnNlZEVycm9yKHJlc291cmNlRm9ybSwgcGFyc2VkRXJyb3IpIHtcbiAgICB0aGlzLmZvcm1FcnJvcnMgPSBwYXJzZWRFcnJvci5tZXNzYWdlIHx8ICdUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCBvbmUgb3IgbW9yZSBmaWVsZHMnO1xuICAgIGlmIChwYXJzZWRFcnJvci5lcnJvcnMgJiYgcGFyc2VkRXJyb3IuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgdGhpcy5mb3JtRXJyb3JzICs9IGAgKCR7cGFyc2VkRXJyb3IuZXJyb3JzLm1hcChlID0+IGUubWVzc2FnZSkuam9pbignLCAnKX0pYDtcbiAgICAgIGZvciAoY29uc3QgcGUgb2YgcGFyc2VkRXJyb3IuZXJyb3JzKSB7XG4gICAgICAgIGlmIChyZXNvdXJjZUZvcm0uY29udHJvbHNbcGUuZmllbGRdKSB7XG4gICAgICAgICAgcmVzb3VyY2VGb3JtLmNvbnRyb2xzW3BlLmZpZWxkXS5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlLCBjdXN0b206IHBlLm1lc3NhZ2UgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBmaXJzdEludmFsaWQ6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLlZsdC1mb3JtX19lbGVtZW50LS1lcnJvciAubWFpbjpub3QoLnN0YW5kYWxvbmUpJyk7XG4gICAgICAgIGlmIChmaXJzdEludmFsaWQpIHtcbiAgICAgICAgICBmaXJzdEludmFsaWQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3VibWl0KHJlc291cmNlRm9ybSkge1xuICAgIGRlbGV0ZSB0aGlzLmZvcm1FcnJvcnM7XG4gICAgcmVzb3VyY2VGb3JtLmZvcm0uc3VibWl0dGVkID0gdHJ1ZTtcbiAgICBpZiAocmVzb3VyY2VGb3JtLnZhbGlkKSB7XG4gICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMubWV0YUNvbnRleHQudmdpcEV2ZW50SWQpIHtcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsLl92Z2lzKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5fdmdpcyA9IHtcbiAgICAgICAgICAgIGNvbm5lY3RvcjogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgICAgICByZXNvdXJjZVR5cGU6IHRoaXMucmVzb3VyY2VUeXBlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vZGVsLl92Z2lzLmxheW91dElkID0gdGhpcy5jdXJyZW50TGF5b3V0SWQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgIC8vIHRoaXMubW9kZWwuX3ZnaXMudGltZVpvbmVPZmZzZXRJbk1pbnV0ZXMgPSAwOyAvLyB3ZSBhcmUgbm90IHByb3ZpZGluZyB0aW1lem9uZSBhbnltb3JlIChhcyBWMyksIGluc3RlYWQgdGhlICd0aW1lJyBhbmQgJ2RhdGUnIG9iamVjdHMgYXJlIGNvbnZlcnRlZCBzbyB0aGUgVVRDIHRpbWUvZGF0ZSBpcyBjb3JyZWN0XG4gICAgICAgIHRoaXMubW9kZWwuX3ZnaXMuZXZlbnRJZCA9IHRoaXMubWV0YUNvbnRleHQudmdpcEV2ZW50SWQ7XG4gICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbiAgICAgIH1cbiAgICAgIHRoaXMuc2VydmljZS5zYXZlKHRoaXMubW9kZWwpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHJlc3VsdDtcbiAgICAgICAgdGhpcy5yZXNvdXJjZS5leHRlcm5hbElkID0gcmVzdWx0Ll92Z2lzLmV4dGVybmFsSWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICAgICAgdGhpcy5pc1BlcnNpc3RlbnQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNsb3NlKHJlc3VsdCk7XG4gICAgICAgIHRoaXMuZWRpdCA9IGZhbHNlO1xuICAgICAgICBkZWxldGUgdGhpcy5idXN5O1xuICAgICAgfSwgKGVycm9yUmVzdWx0KSA9PiB7XG4gICAgICAgIGlmICgoZXJyb3JSZXN1bHQuc3RhdHVzID09PSA0MjIgJiYgZXJyb3JSZXN1bHQuZXJyb3IgJiYgIWVycm9yUmVzdWx0LmVycm9yLmVycm9ycyAmJiBlcnJvclJlc3VsdC5lcnJvci5pbnRlZ3JhdGlvbkVycm9yKVxuICAgICAgICAgIHx8IChlcnJvclJlc3VsdC5lcnJvciAmJiBlcnJvclJlc3VsdC5lcnJvci5lcnJvcnMgJiYgZXJyb3JSZXN1bHQuZXJyb3IuZXJyb3JzLmxlbmd0aCAmJiAhZXJyb3JSZXN1bHQuZXJyb3IuZXJyb3JzWzBdLmZpZWxkKVxuICAgICAgICAgIC8vIGJhY2tlbmQgaW1wbGVtZW50ZWQgZXJyb3IgcGFyc2luZyBidXQgYnJva2VuIFZHSVMtNzM2NlxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSAnVGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggb25lIG9yIG1vcmUgZmllbGRzJztcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5tZXRhTXNnU2VydmljZS5zZW5kTWVzc2FnZShcbiAgICAgICAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdwYXJzZUVycm9yTWVzc2FnZScsXG4gICAgICAgICAgICAgICAgaW50ZWdyYXRpb25Db2RlOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZVR5cGU6IGVycm9yUmVzdWx0LmVycm9yLnJlc291cmNlVHlwZSxcbiAgICAgICAgICAgICAgICByYXdFcnJvcjogZXJyb3JSZXN1bHQuZXJyb3IuaW50ZWdyYXRpb25FcnJvcixcbiAgICAgICAgICAgICAgICBwcm9maWxlOiB0aGlzLm1ldGFDb250ZXh0LnByb2ZpbGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlLnRvVXBwZXJDYXNlKCldXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5wYXJzZWRFcnJvcikge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93UGFyc2VkRXJyb3IocmVzb3VyY2VGb3JtLCByZXNwb25zZS5wYXJzZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignTm8gZXJyb3IgcGFyc2VyIGZvcicsIHRoaXMuaW50ZWdyYXRpb25Db2RlLCBlcnJvclJlc3VsdC5lcnJvci5pbnRlZ3JhdGlvbkVycm9yKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUVycm9ycyA9IGVycm9yUmVzdWx0LmVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcuLi4uJywgZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3JSZXN1bHQuc3RhdHVzID09PSA0MjIpIHtcbiAgICAgICAgICB0aGlzLnNob3dQYXJzZWRFcnJvcihyZXNvdXJjZUZvcm0sIGVycm9yUmVzdWx0LmVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSBlcnJvclJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgdGhpcy5idXN5O1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybUVycm9ycyA9IE9iamVjdC5rZXlzKHJlc291cmNlRm9ybS5jb250cm9scylcbiAgICAgICAgLmZpbHRlcigoYykgPT4gcmVzb3VyY2VGb3JtLmNvbnRyb2xzW2NdLmludmFsaWQpXG4gICAgICAgIC5tYXAoKGYpID0+ICh0aGlzLm5pY2VGaWVsZHNbZl0gPyAodGhpcy5uaWNlRmllbGRzW2ZdLmxhYmVsIHx8IGYpIDogZikpLmpvaW4oJywgJyk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSBgZm9ybVtuYW1lPVwiJHt0aGlzLnJlc291cmNlVHlwZX1cIl0gLlZsdC1mb3JtX19lbGVtZW50LS1lcnJvciAubWFpbjpub3QoLnN0YW5kYWxvbmUpYDtcbiAgICAgICAgY29uc3QgZmlyc3RJbnZhbGlkOiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICBpZiAoZmlyc3RJbnZhbGlkKSB7XG4gICAgICAgICAgZmlyc3RJbnZhbGlkLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRm9ybUVycm9ycygpIHtcbiAgICBkZWxldGUgdGhpcy5mb3JtRXJyb3JzO1xuICB9XG5cbiAgb25Gb3JtQ2hhbmdlKCkge1xuICAgIHRoaXMucmVzb3VyY2VDaGFuZ2VkLm5leHQoSlNPTi5zdHJpbmdpZnkodGhpcy5tb2RlbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1lbnVDbGlja291dCA9ICgpID0+IHtcbiAgICBkZWxldGUgdGhpcy5yZXNvdXJjZU1lbnVWaXNpYmxlO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbk1lbnVDbGlja291dCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzdWdnZXN0RmllbGRQcm9wZXJ0eShrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgZmllbGROYW1lcyA9IHRoaXMuZmllbGROYW1lcztcbiAgICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICAgIGNvbnN0IG5lc3RNYXRjaCA9IGtleS5tYXRjaCgvKFxcUyspXFxbXFxkXFxdXFwuKFxcUyspLyk7XG4gICAgICAgIGlmIChuZXN0TWF0Y2ggJiYgZmllbGROYW1lcy5pbmRleE9mKG5lc3RNYXRjaFsxXSkgIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbFtuZXN0TWF0Y2hbMV1dID0gW107XG4gICAgICAgICAgY29uc3QgbmVzdEtleXM6IGFueSA9IHt9O1xuICAgICAgICAgIG5lc3RLZXlzW25lc3RNYXRjaFsyXV0gPSB2YWx1ZTtcbiAgICAgICAgICB0aGlzLm1vZGVsW25lc3RNYXRjaFsxXV0ucHVzaChuZXN0S2V5cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGROYW1lcy5pbmRleE9mKGtleSkgIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGV4ZWNUcmFuc2Zvcm1lcigpIHtcbiAgICBpZiAodGhpcy5tZXRhQ29udGV4dCAmJiB0aGlzLmZpZWxkc01hcCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAucGhvbmVOdW1iZXIsIHRoaXMubWV0YUNvbnRleHQucGhvbmVOdW1iZXIpO1xuICAgICAgICBpZiAodGhpcy5maWVsZHNNYXAuZmlyc3ROYW1lIHx8IHRoaXMuZmllbGRzTWFwLmxhc3ROYW1lKSB7XG4gICAgICAgICAgY29uc3QgbmFtZXMgPSAodGhpcy5tZXRhQ29udGV4dC5kaXNwbGF5TmFtZSB8fCAnJykuc3BsaXQoJyAnKTtcbiAgICAgICAgICB0aGlzLnN1Z2dlc3RGaWVsZFByb3BlcnR5KHRoaXMuZmllbGRzTWFwLmZpcnN0TmFtZSwgbmFtZXNbMF0pO1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAubGFzdE5hbWUsIG5hbWVzWzFdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpZWxkc01hcC5kaXNwbGF5TmFtZSkge1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAuZGlzcGxheU5hbWUsIHRoaXMubWV0YUNvbnRleHQuZGlzcGxheU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFya0NvbnRhY3RhYmxlcygpIHtcbiAgICBpZiAodGhpcy5maWVsZHNNYXAuY29udGFjdGFibGVzICYmIHRoaXMuZmllbGRzTWFwLmNvbnRhY3RhYmxlcy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmZpZWxkc01hcC5jb250YWN0YWJsZXMpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLm5pY2VGaWVsZHNbY107XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWVsZCwgJyRpc0NvbnRhY3RhYmxlJywge1xuICAgICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFN1YmplY3RUZW1wbGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMubW9kZWxbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0gJiYgdGhpcy5maWVsZHNNYXAuc3ViamVjdCAmJiB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0pIHtcbiAgICAgIGxldCBzdWJqZWN0VGVtcGxhdGU6IHN0cmluZztcbiAgICAgIGlmICh0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdCkge1xuICAgICAgICBzdWJqZWN0VGVtcGxhdGUgPSB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdC5pZCB8fCB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZV0pIHtcbiAgICAgICAgY29uc3QgcHJvZmlsZSA9IHRoaXMubWV0YUNvbnRleHQucHJvZmlsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdIHx8IHt9O1xuICAgICAgICBzdWJqZWN0VGVtcGxhdGUgPSBwcm9maWxlLmRlZmF1bHRTdWJqZWN0ID9cbiAgICAgICAgICBwcm9maWxlLmRlZmF1bHRTdWJqZWN0WygodGhpcy5tZXRhQ29udGV4dC5jb250ZXh0IHx8ICdDQUxMJykudHlwZSB8fCAnJykudG9VcHBlckNhc2UoKV0gOlxuICAgICAgICAgIHByb2ZpbGUuYWN0aXZpdHlEZWZhdWx0U3ViamVjdFRlbXBsYXRlO1xuICAgICAgfVxuICAgICAgaWYgKHN1YmplY3RUZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLm1vZGVsW3RoaXMuZmllbGRzTWFwLnN1YmplY3RdID0gdGVtcGxhdGVCdWlsZGVyKHRoaXMubWV0YUNvbnRleHQsIHN1YmplY3RUZW1wbGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbnRhY3RzU3VnZ2VzdGlvbnMoKSB7XG4gICAgLy8gbGV0IGhhc0RlZmF1bHRDb250YWN0ID0gZmFsc2U7XG4gICAgaWYgKHRoaXMubWV0YUNvbnRleHQuY29udGFjdGFibGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlXSAmJiB0aGlzLm1ldGEubGF5b3V0ICYmIHRoaXMubWV0YS5sYXlvdXQuc2VjdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLm1ldGEubGF5b3V0LnNlY3Rpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiAocy5maWVsZHMgfHwgW10pKSB7XG4gICAgICAgICAgaWYgKGYudHlwZSA9PT0gJ3JlZmVyZW5jZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZlR5cGVzID0gKGYucmVmZXJlbmNlLmxlbmd0aCA/IGYucmVmZXJlbmNlIDogW2YucmVmZXJlbmNlXSkubWFwKHIgPT4gci5uYW1lKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLm1ldGFDb250ZXh0LmNvbnRhY3RhYmxlc1t0aGlzLmludGVncmF0aW9uQ29kZV0pIHtcbiAgICAgICAgICAgICAgaWYgKHJlZlR5cGVzLmluZGV4T2YoYy5yZXNvdXJjZVR5cGUgfHwgYy50eXBlKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWYuc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgIGYuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZi5zdWdnZXN0aW9ucyA9IGYuc3VnZ2VzdGlvbnMuZmlsdGVyKHNnID0+ICFzZy5hdXRvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHRMYWJlbCA9IGMuZGlzcGxheU5hbWUgfHwgYy5uYW1lO1xuICAgICAgICAgICAgICAgIGlmIChjLnBob25lTnVtYmVycykge1xuICAgICAgICAgICAgICAgICAgdExhYmVsICs9ICgnIOKchicgKyBjLnBob25lTnVtYmVycy5tYXAocCA9PiBwLnBob25lTnVtYmVyKS5qb2luKCcsJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmLnN1Z2dlc3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgaWQ6IGMuZXh0ZXJuYWxJZCB8fCBjLmlkZW50aWZpZXIgfHwgYy5pZCxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiB0TGFiZWwsXG4gICAgICAgICAgICAgICAgICB0eXBlOiBjLnJlc291cmNlVHlwZSB8fCBjLnR5cGUsXG4gICAgICAgICAgICAgICAgICBhdXRvOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgodGhpcy5maWVsZHNNYXAuY29udGFjdGFibGVzIHx8IFtdKS5pbmRleE9mKGYubmFtZSkgIT09IC0xKSB7IC8vIGV2YWx1YXRlIHVzYWJpbGl0eT9cbiAgICAgICAgICAgICAgZi5hbHdheXNWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIChcbiAgICAgICAgICAgIC8vICAgIWhhc0RlZmF1bHRDb250YWN0ICYmIHRoaXMubWV0YUNvbnRleHQuZGVmYXVsdENvbnRhY3RhYmxlc1t0aGlzLmludGVncmF0aW9uQ29kZV1cbiAgICAgICAgICAgIC8vICAgJiYgcmVmVHlwZXMuaW5kZXhPZih0aGlzLm1ldGFDb250ZXh0LmRlZmF1bHRDb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdLnR5cGUpICE9PSAtMVxuICAgICAgICAgICAgLy8gKSB7XG4gICAgICAgICAgICAvLyAgIHRoaXMucmVzb3VyY2VbZi5uYW1lXSA9IHRoaXMubWV0YUNvbnRleHQuZGVmYXVsdENvbnRhY3RhYmxlc1t0aGlzLmludGVncmF0aW9uQ29kZV07XG4gICAgICAgICAgICAvLyAgIGhhc0RlZmF1bHRDb250YWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAoIWhhc0RlZmF1bHRDb250YWN0ICYmIHRoaXMuZmllbGRzTWFwLmNvbnRhY3RhYmxlcyAmJiBmLnN1Z2dlc3Rpb25zICYmIGYuc3VnZ2VzdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyAgIGlmICh0aGlzLmZpZWxkc01hcC5jb250YWN0YWJsZXMuaW5kZXhPZihmLm5hbWUpICE9PSAtMSAmJiAhZi5kZWZhdWx0KSB7XG4gICAgICAgICAgICAvLyAgICAgZi5kZWZhdWx0ID0gZi5zdWdnZXN0aW9uc1swXTtcbiAgICAgICAgICAgIC8vICAgICBoYXNEZWZhdWx0Q29udGFjdCA9IHRydWU7XG4gICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGFjdHNTdWdnZXN0aW9uc0RvbmUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlUaGVtZSgpIHtcbiAgICBjb25zdCBtZXRhVGhlbWUgPSB0aGlzLnRoZW1lID09PSAnZGFyaycgPyBtZXRhRGFyayA6IG1ldGFMaWdodDtcbiAgICBjb25zb2xlLmxvZygncmVzb3VyY2UgYXBwbHkgdGhlbWUnLCB0aGlzLnRoZW1lKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtZXRhVGhlbWUucHJvcGVydGllcykpIHtcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIG1ldGFUaGVtZS5wcm9wZXJ0aWVzW2tleV0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9yY2VVaVVwZGF0ZSgpIHsgLy8gaU9TIHdlYnZpZXcgZG9lcyBub3QgdXBkYXRlIHRoZSBVSSBhZnRlciBhc3ljIGNoYW5nZXMuIFRlbXAgZml4IDooXG4gICAgLy8gdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnRzJyk7XG4gICAgZS5pbml0RXZlbnQoJ2NsaWNrJywgdHJ1ZSwgZmFsc2UpO1xuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGUpO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPSdnZW5lcmFsRXJyb3InIGNsYXNzPVwiVmx0LWNhbGxvdXQgVmx0LWNhbGxvdXQtLWNyaXRpY2FsXCIgc3R5bGU9J292ZXJmbG93OiBhdXRvOyBtYXJnaW46IDIwcHg7Jz5cblx0PGk+PC9pPlxuXHQ8ZGl2IGNsYXNzPVwiVmx0LWNhbGxvdXRfX2NvbnRlbnRcIj5cblx0XHQ8cD57e2dlbmVyYWxFcnJvcn19PC9wPlxuXHQ8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj0nIW1ldGEnIGNsYXNzPVwiVmx0LXByb2dyZXNzXCI+XG5cdDxkaXYgY2xhc3M9XCJWbHQtcHJvZ3Jlc3NfX2JhclwiIFtuZ0NsYXNzXT1cInsgbG9hZGluZzogbWV0YUxvYWRpbmcgfVwiIHJvbGU9XCJwcm9ncmVzc2JhclwiIGFyaWEtdmFsdWVtaW49XCIwXCIgYXJpYS12YWx1ZXRleHQ9XCJMb2FkaW5nIE1ldGFkYXRhXCIgYXJpYS12YWx1ZW1heD1cIjEwMFwiPjwvZGl2PlxuPC9kaXY+XG48Zm9ybSBbdmdpcE1ldGFGb3JtQXV0b2ZvY3VzXT0nIXJlc291cmNlIHx8ICFyZXNvdXJjZS5leHRlcm5hbElkJyAqbmdJZj0nbWV0YSAmJiAhZ2VuZXJhbEVycm9yJyAjcmVzb3VyY2VGb3JtPVwibmdGb3JtXCIgW25hbWVdPSdyZXNvdXJjZS5yZXNvdXJjZVR5cGUnIChuZ1N1Ym1pdCk9J3N1Ym1pdChyZXNvdXJjZUZvcm0pJyAoY2hhbmdlKT0nb25Gb3JtQ2hhbmdlKCknIG5vdmFsaWRhdGU+XG5cdDxkaXYgY2xhc3M9J2Zvcm0tY29udGVudCcgc3R5bGU9J292ZXJmbG93OiBoaWRkZW47Jz5cblx0XHQ8ZGl2IFtuZ0NsYXNzXT1cInsgJ1ZsdC1jYWxsb3V0LS1kaXNtaXNzZWQnOiAhZm9ybUVycm9ycyB9XCIgY2xhc3M9XCJWbHQtY2FsbG91dCBWbHQtY2FsbG91dC0tYmFubmVyIFZsdC1jYWxsb3V0LS1jcml0aWNhbFwiPlxuXHRcdFx0PGk+PC9pPlxuXHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1jYWxsb3V0X19jb250ZW50XCIgc3R5bGU9XCJtYXJnaW4tdG9wOiBhdXRvO1wiPlxuXHRcdFx0XHQ8cD5UaGVyZSBpcyBhIHByb2JsZW0gd2l0aCBvbmUgb3IgbW9yZSBmaWVsZHM8L3A+XG5cdFx0XHRcdDxzbWFsbCBzdHlsZT0nZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAxLjBlbTsnICpuZ0lmPSdmb3JtRXJyb3JzJz57eyBmb3JtRXJyb3JzLm1lc3NhZ2UgfHwgZm9ybUVycm9ycyB9fTwvc21hbGw+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz1cIlZsdC1jYWxsb3V0X19kaXNtaXNzXCIgKGNsaWNrKT0nY2xlYXJGb3JtRXJyb3JzKCknIGFyaWEtbGFiZWw9XCJEaXNtaXNzXCI+PC9idXR0b24+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cIlZsdC1jYXJkX19jb250ZW50XCIgc3R5bGU9J21pbi1oZWlnaHQ6IDQwcHg7Jz5cblx0XHRcdDx2Z2lwLW1ldGEtbGF5b3V0ICpuZ0lmPSdlZGl0JyBbbWV0YV09J21ldGEubGF5b3V0JyBbcmVzb3VyY2VdPSdtb2RlbCcgW3ByZXZpZXddPSdmYWxzZScgW2ludGVncmF0aW9uXT0nbWV0YS5pbnRlZ3JhdGlvbicgW3R5cGVdPSdyZXNvdXJjZS5yZXNvdXJjZVR5cGUnIHRoZW1lPSdpbmhlcml0Jz48L3ZnaXAtbWV0YS1sYXlvdXQ+XG5cdFx0XHQ8dmdpcC1tZXRhLWxheW91dCAqbmdJZj0nIWVkaXQnIFttZXRhXT0nbWV0YS5sYXlvdXQnIFtyZXNvdXJjZV09J21vZGVsJyBbcHJldmlld109J3RydWUnIFtpbnRlZ3JhdGlvbl09J21ldGEuaW50ZWdyYXRpb24nIFt0eXBlXT0ncmVzb3VyY2UucmVzb3VyY2VUeXBlJyB0aGVtZT0naW5oZXJpdCc+PC92Z2lwLW1ldGEtbGF5b3V0PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblx0PGRpdiBjbGFzcz1cIlZsdC1jYXJkX19mb290ZXJcIj5cblx0XHQ8YnV0dG9uIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zZWNvbmRhcnkgVmx0LWJ0bi0tYXBwIFZsdC1idG4tLW91dGxpbmVcIiB0eXBlPSdidXR0b24nIGFyaWEtbGFiZWw9J0NhbmNlbCcgKGNsaWNrKT0nY2xvc2UoKSc+XG5cdFx0XHR7eyBlZGl0ID8gJ0NhbmNlbCcgOiAnQ2xvc2UnIH19XG5cdFx0PC9idXR0b24+XG5cdFx0PGJ1dHRvbiAqbmdJZj0nZWRpdCcgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLWFwcFwiIFtuZ0NsYXNzXT1cInsgJ1ZsdC1idG4tLXByaW1hcnknOiBpc1BlcnNpc3RlbnQsICdWbHQtYnRuLS1zZWNvbmRhcnknOiAhaXNQZXJzaXN0ZW50IH1cIiB0eXBlPSdzdWJtaXQnPlxuXHRcdFx0e3sgKHJlc291cmNlICYmIHJlc291cmNlLmV4dGVybmFsSWQpID8gJ1VwZGF0ZScgOiAnQ3JlYXRlJyB9fVxuXHRcdDwvYnV0dG9uPlxuXHRcdDxidXR0b24gKGNsaWNrKT0nc2V0RWRpdE1vZGUoKScgKm5nSWY9JyFlZGl0ICYmIGlzRWRpdGFibGUnIFtkaXNhYmxlZF09JyFpc0VkaXRhYmxlJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tYXBwIFZsdC1idG4tLXByaW1hcnlcIiB0eXBlPSdidXR0b24nIGFyaWEtbGFiZWw9J0VkaXQnPlxuXHRcdFx0RWRpdFxuXHRcdDwvYnV0dG9uPlxuXHRcdDxkaXYgc3R5bGU9J21hcmdpbi1yaWdodDogOHB4OyBmbGV4OiAxOyc+XG5cdFx0XHQ8ZGl2ICpuZ0lmPSdtZXRhLmF2YWlsYWJsZUxheW91dHMgJiYgbWV0YS5hdmFpbGFibGVMYXlvdXRzLmxlbmd0aCcgY2xhc3M9XCJWbHQtZm9ybV9fZWxlbWVudCBWbHQtZm9ybV9fZWxlbWVudC0tYmlnXCIgc3R5bGU9J3BhZGRpbmc6IDA7IG1hcmdpbjogLThweCAtMThweCAtOHB4IDA7Jz5cblx0XHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1zZWxlY3RcIj5cblx0XHRcdFx0XHQ8bGFiZWwgc3R5bGU9J2FsbDogaW5oZXJpdDsnPlxuXHRcdFx0XHRcdFx0PHNlbGVjdCBzdHlsZT0nYm9yZGVyOiAwOyBtYXJnaW4tdG9wOiAzcHg7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OycgKGNoYW5nZSk9J2NoYW5nZUxheW91dCgpJyBbKG5nTW9kZWwpXT0nY3VycmVudExheW91dElkJyBbbmdNb2RlbE9wdGlvbnNdPSd7IHN0YW5kYWxvbmU6IHRydWUgfScgW2Rpc2FibGVkXT0naXNQZXJzaXN0ZW50Jz5cblx0XHRcdFx0XHRcdFx0PG9wdGlvbiBzZWxlY3RlZCBkaXNhYmxlZD5TZWxlY3QgbGF5b3V0PC9vcHRpb24+XG5cdFx0XHRcdFx0XHRcdDxvcHRpb24gKm5nRm9yPSdsZXQgbGF5b3V0IG9mIG1ldGEuYXZhaWxhYmxlTGF5b3V0cycgW25nVmFsdWVdPSdsYXlvdXQuaWQnPnt7bGF5b3V0Lm5hbWV9fTwvb3B0aW9uPlxuXHRcdFx0XHRcdFx0PC9zZWxlY3Q+XG5cdFx0XHRcdFx0XHQ8bGFiZWw+TGF5b3V0PC9sYWJlbD4gPCEtLSBlc2xpbnQtZGlzYWJsZS1saW5lIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9sYWJlbC1oYXMtYXNzb2NpYXRlZC1jb250cm9sIC0tPlxuXHRcdFx0XHRcdDwvbGFiZWw+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93biByZXNvdXJjZS1tZW51XCIgW25nQ2xhc3NdPVwieyAnVmx0LWRyb3Bkb3duLS1leHBhbmRlZCc6IHJlc291cmNlTWVudVZpc2libGUgfVwiIHN0eWxlPSdtYXJnaW4tbGVmdDogMnB4Oyc+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19wYW5lbFwiIHN0eWxlPSdib3R0b206IDQwcHg7IHJpZ2h0OiAtNHB4OyB0b3A6IGluaXRpYWw7Jz5cblx0XHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fcGFuZWxfX2NvbnRlbnRcIj5cblx0XHRcdFx0XHQ8YSBocmVmPScjJyBjbGFzcz1cIlZsdC1kcm9wZG93bl9fbGlua1wiIChjbGljayk9J2xvYWRNZXRhZGF0YShjdXJyZW50TGF5b3V0SWQsIHRydWUsICRldmVudCknPlxuXHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0PHN2ZyBjbGFzcz0nVmx0LWljb24gVmx0LWljb24tLXNtYWxsZXInPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1yZWZyZXNoXCIvPjwvc3ZnPiZuYnNwOyZuYnNwO1JlZnJlc2ggbWV0YWRhdGFcblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvYT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3RyaWdnZXJcIj5cblx0XHRcdFx0PGJ1dHRvbiB0eXBlPSdidXR0b24nIChjbGljayk9J29wZW5SZXNvdXJjZU1lbnUoKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLWxpbmtcIiBhcmlhLWxhYmVsPSdSZXNvdXJjZSBtZW51Jz5cblx0XHRcdFx0XHQ8c3ZnIGNsYXNzPSdWbHQtaWNvbiBWbHQtaWNvbi0tc21hbGwnIHN0eWxlPSdtYXJnaW46IDA7Jz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tbW9yZS12LW5lZ2F0aXZlXCIvPjwvc3ZnPlxuXHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZm9ybT5cbjxkaXYgY2xhc3M9J2J1c3ktbWFzaycgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGJ1c3kgfVwiPlxuXHQ8ZGl2IHN0eWxlPSdoZWlnaHQ6IDEwMCU7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyc+XG5cdFx0PGRpdiBjbGFzcz1cIlZsdC1zcGlubmVyXCI+PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+XG4iXX0=
515
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvcmVzb3VyY2UvaW5kZXgudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvcmVzb3VyY2Uvdmlldy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHcEksT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFPcEUsTUFBTSxPQUFPLFlBQVk7SUE2QnZCLFlBQ1UsR0FBc0IsRUFDdEIsRUFBYyxFQUNkLG1CQUF3QyxFQUN4QyxXQUErQixFQUMvQixjQUE4QjtRQUo5QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2Qsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBN0IvQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ1IsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDMUIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBV3JELFNBQUksR0FBRyxJQUFJLENBQUM7UUFLWiw0QkFBdUIsR0FBRyxLQUFL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QyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDOytHQWpoQlUsWUFBWTttR0FBWixZQUFZLGdaQ2hCekIsKzhJQXNFQTs7NEZEdERhLFlBQVk7a0JBTHhCLFNBQVM7K0JBQ0Usb0JBQW9CO2lPQUtyQixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ1csSUFBSTtzQkFBcEIsTUFBTTtnQkFDVSxjQUFjO3NCQUE5QixNQUFNO2dCQUUyQixZQUFZO3NCQUE3QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1ldGFSZXNvdXJjZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhUmVzb3VyY2UnO1xuaW1wb3J0IHsgbWV0YURhcmssIG1ldGFMaWdodCB9IGZyb20gJy4uL2NvbW1vbi91dGlscy9jb2xvclRoZW1lcyc7XG5pbXBvcnQgeyBNZXRhQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhQ29udGV4dCc7XG5pbXBvcnQgeyBNZXRhTXNnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21ldGFNc2cnO1xuaW1wb3J0IHsgbWV0YU5vcm1hbGl6ZXIgfSBmcm9tICcuLi9jb21tb24vbWV0YU5vcm1hbGl6ZXInO1xuaW1wb3J0IHsgdGVtcGxhdGVCdWlsZGVyIH0gZnJvbSAnLi4vY29tbW9uL3V0aWxzL3RlbXBsYXRlQnVpbGRlcic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2Z2lwLW1ldGEtcmVzb3VyY2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vdmlldy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3R5bGUuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1ldGFSZXNvdXJjZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgcmVzb3VyY2U6IGFueTtcbiAgQElucHV0KCkgbW9kZWw6IGFueTtcbiAgQElucHV0KCkgbWV0YVJlc291cmNlU2VydmljZURlbGVnYXRlZDogTWV0YVJlc291cmNlU2VydmljZTsgLy8gY2FyeSBpdCBmcm9tIHRoZSBwYXJlbnQgdG8ga2VlcCB0aGUgaW50ZXJjZXB0b3JzXG4gIEBJbnB1dCgpIHRoZW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGVkaXRNb2RlID0gdHJ1ZTtcbiAgQE91dHB1dCgpIHB1YmxpYyBkb25lID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIHJlc291cmNlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3Jlc291cmNlRm9ybScpIHB1YmxpYyByZXNvdXJjZUZvcm06IE5nRm9ybTtcblxuICBpbnRlZ3JhdGlvbkNvZGU6IHN0cmluZztcbiAgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIG1ldGE6IGFueTtcbiAgc2VydmljZTogTWV0YVJlc291cmNlU2VydmljZTtcbiAgY3VycmVudExheW91dElkOiBhbnk7XG4gIGZvcm1FcnJvcnM6IGFueTtcbiAgZmllbGRzTWFwOiBhbnk7XG4gIGVkaXQgPSB0cnVlO1xuICBidXN5OiBib29sZWFuO1xuICBtZXRhTG9hZGluZzogYm9vbGVhbjtcbiAgZ2VuZXJhbEVycm9yOiBzdHJpbmc7XG4gIHJlc291cmNlTWVudVZpc2libGU6IGJvb2xlYW47XG4gIGNvbnRhY3RzU3VnZ2VzdGlvbnNEb25lID0gZmFsc2U7XG4gIGlzRWRpdGFibGU6IGJvb2xlYW47XG4gIGlzUGVyc2lzdGVudDogYm9vbGVhbjtcbiAgcmVzb3VyY2VDaGFuZ2VkOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHJlc291cmNlVnJuOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBtZXRhUmVzb3VyY2VTZXJ2aWNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YUNvbnRleHQ6IE1ldGFDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIG1ldGFNc2dTZXJ2aWNlOiBNZXRhTXNnU2VydmljZVxuICApIHtcblxuICB9XG5cbiAgZ2V0IG5pY2VGaWVsZHMoKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMucmVzb3VyY2UubmljZUZpZWxkc1xuICAgICAgJiYgdGhpcy5yZXNvdXJjZS5tZXRhXG4gICAgICAmJiB0aGlzLnJlc291cmNlLm1ldGEubGF5b3V0XG4gICAgICAmJiB0aGlzLnJlc291cmNlLm1ldGEubGF5b3V0LnNlY3Rpb25zXG4gICAgKSB7XG4gICAgICBjb25zdCBleHRyYWN0U2VjdGlvbkZpZWxkcyA9IChzKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBzLmZpZWxkcykge1xuICAgICAgICAgIGlmIChmLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2UubmljZUZpZWxkc1tmLm5hbWVdID0gZjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGYuZmllbGRzICYmIGYuZmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgZXh0cmFjdFNlY3Rpb25GaWVsZHMoZik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5yZXNvdXJjZS5uaWNlRmllbGRzID0ge307XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5yZXNvdXJjZS5tZXRhLmxheW91dC5zZWN0aW9ucykge1xuICAgICAgICBleHRyYWN0U2VjdGlvbkZpZWxkcyhzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2UubmljZUZpZWxkcztcbiAgfVxuXG4gIGdldCBmaWVsZE5hbWVzKCkge1xuICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXModGhpcy5uaWNlRmllbGRzKTtcbiAgICBpZiAodGhpcy5yZXNvdXJjZS5tZXRhLmxheW91dC5jaGlsZHJlbikge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLnJlc291cmNlLm1ldGEubGF5b3V0LmNoaWxkcmVuKSB7XG4gICAgICAgIG5hbWVzLnB1c2goY2hpbGQubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuYW1lcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW50ZWdyYXRpb25Db2RlID0gKHRoaXMucmVzb3VyY2UuaW50ZWdyYXRpb25Db2RlIHx8ICcnKS50b1VwcGVyQ2FzZSgpO1xuICAgIHRoaXMucmVzb3VyY2VUeXBlID0gdGhpcy5yZXNvdXJjZS5yZXNvdXJjZVR5cGU7XG4gICAgdGhpcy5zZXJ2aWNlID0gKHRoaXMubWV0YVJlc291cmNlU2VydmljZURlbGVnYXRlZCB8fCB0aGlzLm1ldGFSZXNvdXJjZVNlcnZpY2UpLm5ldyh0aGlzLnJlc291cmNlKTtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgIHRoaXMubW9kZWwgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5pc1BlcnNpc3RlbnQgPSB0aGlzLnJlc291cmNlPy5leHRlcm5hbElkO1xuICAgIGlmICh0aGlzLmlzUGVyc2lzdGVudCkge1xuICAgICAgdGhpcy5yZXNvdXJjZVZybiA9IGB2cm46dmdpczoke3RoaXMuaW50ZWdyYXRpb25Db2RlLnRvTG93ZXJDYXNlKCl9OiR7dGhpcy5yZXNvdXJjZS5yZXNvdXJjZVR5cGV9OiR7dGhpcy5yZXNvdXJjZS5leHRlcm5hbElkfWA7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlc291cmNlLmFjdGl2aXR5ICYmIHRoaXMucmVzb3VyY2UucmVmLmVkaXRhYmxlID09PSBmYWxzZSAmJiAhdGhpcy5yZXNvdXJjZS5leHRlcm5hbElkKSB7XG4gICAgICB0aGlzLnJlc291cmNlLmV4dGVybmFsSWQgPSAnTUlTU0lOR19FWFRFUk5BTF9JRCc7XG4gICAgfVxuICAgIGlmICghdGhpcy5yZXNvdXJjZS5tZXRhKSB7XG4gICAgICB0aGlzLmxvYWRNZXRhZGF0YSh0aGlzLnJlc291cmNlLmxheW91dElkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gICBpZiAodGhpcy5pc1BlcnNpc3RlbnQgJiYgKCF0aGlzLmlzRWRpdGFibGUgfHwgdGhpcy5yZXNvdXJjZXNbcmVmLm5hbWVdLm1ldGEubGF5b3V0LmNoaWxkcmVuKSkge1xuICAgICAgLy8gICAgIHRoaXMuZWRpdCA9IGZhbHNlO1xuICAgICAgLy8gICB9XG4gICAgICB0aGlzLm1ldGEgPSB0aGlzLnJlc291cmNlLm1ldGE7XG4gICAgICB0aGlzLmlzRWRpdGFibGUgPSB0aGlzLm1ldGEubGF5b3V0ICYmIHRoaXMubWV0YS5sYXlvdXQuZWRpdGFibGUgIT09IGZhbHNlO1xuICAgICAgaWYgKHRoaXMuaXNQZXJzaXN0ZW50ICYmICghdGhpcy5pc0VkaXRhYmxlIHx8IHRoaXMuZWRpdE1vZGUgPT09IGZhbHNlIHx8IHRoaXMubWV0YS5sYXlvdXQuY2hpbGRyZW4pKSB7XG4gICAgICAgIHRoaXMuZWRpdCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5jdXJyZW50TGF5b3V0SWQgPSB0aGlzLm1ldGEubGF5b3V0LmlkO1xuICAgICAgdGhpcy5nZXREZXRhaWxzKCk7XG4gICAgICB0aGlzLmdldEZpZWxkc01hcCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50aGVtZSAhPT0gJ2luaGVyaXQnKSB7XG4gICAgICB0aGlzLmFwcGx5VGhlbWUoKTtcbiAgICB9XG4gICAgdGhpcy5yZXNvdXJjZUNoYW5nZWQucGlwZShkZWJvdW5jZVRpbWUoNDAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSkuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnJlc291cmNlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KSB7XG4gICAgaWYgKGNoYW5nZXMudGhlbWUpIHtcbiAgICAgIHRoaXMudGhlbWUgPSBjaGFuZ2VzLnRoZW1lLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmICh0aGlzLnRoZW1lICE9PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgdGhpcy5hcHBseVRoZW1lKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0RWRpdE1vZGUoKSB7XG4gICAgdGhpcy5lZGl0ID0gdHJ1ZTtcbiAgfVxuXG4gIGxvYWRNZXRhZGF0YShsYXlvdXRJZD8sIHJlZnJlc2ggPSBmYWxzZSwgZXY/KSB7XG4gICAgY29uc3QgbGF5b3V0U3RvcmVLZXkgPSBgdmdpcy5sYXlvdXRfJHt0aGlzLm1ldGFDb250ZXh0LnZnaXBVc2VySWR9XyR7dGhpcy5pbnRlZ3JhdGlvbkNvZGV9XyR7dGhpcy5yZXNvdXJjZS5yZXNvdXJjZVR5cGV9YDtcbiAgICBpZiAoIWxheW91dElkKSB7XG4gICAgICBsYXlvdXRJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGxheW91dFN0b3JlS2V5KTtcbiAgICB9XG4gICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubWV0YUxvYWRpbmcgPSB0cnVlO1xuICAgIH0sIDApO1xuICAgIGRlbGV0ZSB0aGlzLnJlc291cmNlLm5pY2VGaWVsZHM7XG4gICAgdGhpcy5zZXJ2aWNlLmdldE1ldGFkYXRhKGxheW91dElkLCByZWZyZXNoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKG1ldGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRMYXlvdXRJZCA9IG1ldGEubGF5b3V0LmlkO1xuICAgICAgICBpZiAobGF5b3V0SWQgIT09IG1ldGEubGF5b3V0LmlkICYmICF0aGlzLmlzUGVyc2lzdGVudCkge1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGxheW91dFN0b3JlS2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1ldGEgPSBtZXRhTm9ybWFsaXplcihtZXRhLCB0aGlzLmludGVncmF0aW9uQ29kZSwgdGhpcy5yZXNvdXJjZS5yZXNvdXJjZVR5cGUpO1xuICAgICAgICB0aGlzLmlzRWRpdGFibGUgPSB0aGlzLm1ldGEubGF5b3V0ICYmIHRoaXMubWV0YS5sYXlvdXQuZWRpdGFibGUgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc291cmNlLm1ldGEgPSB0aGlzLm1ldGE7XG4gICAgICAgIGlmICghcmVmcmVzaCAmJiB0aGlzLmlzUGVyc2lzdGVudCAmJiAoIXRoaXMuaXNFZGl0YWJsZSB8fCB0aGlzLmVkaXRNb2RlID09PSBmYWxzZSB8fCB0aGlzLm1ldGEubGF5b3V0LmNoaWxkcmVuKSkge1xuICAgICAgICAgIHRoaXMuZWRpdCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSB0aGlzLmJ1c3k7XG4gICAgICAgIHRoaXMuZ2V0RGV0YWlscygpO1xuICAgICAgICB0aGlzLmdldEZpZWxkc01hcCgpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAobWV0YUVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuYnVzeTtcbiAgICAgICAgdGhpcy5nZW5lcmFsRXJyb3IgPSBgRXJyb3IgbG9hZGluZyByZXNvdXJjZSBtZXRhZGF0YSAoJHttZXRhRXJyb3Iuc3RhdHVzVGV4dH0pYDtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obGF5b3V0U3RvcmVLZXkpO1xuICAgICAgfSxcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLm1ldGFMb2FkaW5nO1xuICAgICAgICB0aGlzLmZvcmNlVWlVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZXYpIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VMYXlvdXQoKSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICBgdmdpcy5sYXlvdXRfJHt0aGlzLm1ldGFDb250ZXh0LnZnaXBVc2VySWR9XyR7dGhpcy5pbnRlZ3JhdGlvbkNvZGV9XyR7dGhpcy5yZXNvdXJjZS5yZXNvdXJjZVR5cGV9YCxcbiAgICAgIHRoaXMuY3VycmVudExheW91dElkXG4gICAgKTtcbiAgICB0aGlzLmxvYWRNZXRhZGF0YSh0aGlzLmN1cnJlbnRMYXlvdXRJZCk7XG4gIH1cblxuICBnZXREZXRhaWxzKCkge1xuICAgIGlmICh0aGlzLnJlc291cmNlICYmICh0aGlzLnJlc291cmNlLmV4dGVybmFsSWQgfHwgdGhpcy5yZXNvdXJjZS5pZCkpIHtcbiAgICAgIGlmICh0aGlzLnJlc291cmNlLnBhcmVudCAmJiB0aGlzLnJlc291cmNlLmFjdGl2aXR5IC8vIHNraXAgZmV0Y2hcbiAgICAgICAgJiYgdGhpcy5tZXRhLmxheW91dC5lZGl0YWJsZSA9PT0gZmFsc2UgJiYgIXRoaXMubWV0YS5sYXlvdXQuY2hpbGRyZW5cbiAgICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IHAgaW4gdGhpcy5yZXNvdXJjZS5hY3Rpdml0eSkge1xuICAgICAgICAgIGlmICh0aGlzLnJlc291cmNlLmFjdGl2aXR5W3BdICYmIHRoaXMuZmllbGROYW1lcy5pbmRleE9mKHApICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbFtwXSA9IHRoaXMucmVzb3VyY2UuYWN0aXZpdHlbcF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0RGV0YWlscyhcbiAgICAgICAgICAodGhpcy5yZXNvdXJjZS5leHRlcm5hbElkIHx8IHRoaXMucmVzb3VyY2UuaWQpLCB7XG4gICAgICAgICAgZXZlbnRJZDogdGhpcy5yZXNvdXJjZS5ldmVudElkICE9PSAnTk9fRVZFTlQnID8gdGhpcy5yZXNvdXJjZS5ldmVudElkIDogbnVsbCwgbGF5b3V0SWQ6IHRoaXMucmVzb3VyY2UubGF5b3V0SWRcbiAgICAgICAgfVxuICAgICAgICApLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKHJlc291cmNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4gICAgICAgICAgICBpZiAocmVzb3VyY2UuX3ZnaXMpIHtcbiAgICAgICAgICAgICAgaWYgKHJlc291cmNlLl92Z2lzLmV2ZW50SWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1ldGFDb250ZXh0LnZnaXBFdmVudElkID0gcmVzb3VyY2UuX3ZnaXMuZXZlbnRJZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVzb3VyY2UubGF5b3V0SWQgJiYgcmVzb3VyY2UuX3ZnaXMubGF5b3V0SWQgIT09IHRoaXMuY3VycmVudExheW91dElkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkTWV0YWRhdGEocmVzb3VyY2UuX3ZnaXMubGF5b3V0SWQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgaW4gcmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAocmVzb3VyY2VbcF0gIT09ICd1bmRlZmluZWQnKSAmJiAodGhpcy5maWVsZE5hbWVzLmluZGV4T2YocCkgIT09IC0xIHx8IHAgPT09ICdfdmdpcycpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbFtwXSA9IHJlc291cmNlW3BdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5idXN5O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChyZXNvdXJjZUVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYWxFcnJvciA9IHJlc291cmNlRXJyb3IuZXJyb3IgPyByZXNvdXJjZUVycm9yLmVycm9yLm1lc3NhZ2UgfHwgcmVzb3VyY2VFcnJvci5tZXNzYWdlIDogcmVzb3VyY2VFcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYnVzeTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcmNlVWlVcGRhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5yZXNvdXJjZS5yZWYgJiYgdGhpcy5yZXNvdXJjZS5yZWYuYWN0aXZpdHkpIHsgLy8gcmV1c2UgZmFpbGVkIGF1dG9hY3Rpdml0aWVzIGRhdGFcbiAgICAgICAgZm9yIChjb25zdCBwIGluIHRoaXMucmVzb3VyY2UucmVmLmFjdGl2aXR5KSB7XG4gICAgICAgICAgaWYgKHRoaXMucmVzb3VyY2UucmVmLmFjdGl2aXR5ICYmIHRoaXMuZmllbGROYW1lcy5pbmRleE9mKHApICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbFtwXSA9IHRoaXMucmVzb3VyY2UucmVmLmFjdGl2aXR5W3BdOyAvLyBWR0lTLTcyMTUgKGNvcHkgb25seSB2YWxpZCBmaWVsZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnBlcmZvcm1BdXRvRmlsbCgpO1xuICAgIH1cbiAgfVxuXG4gIHBlcmZvcm1BdXRvRmlsbCgpIHtcbiAgICB0aGlzLm1ldGFNc2dTZXJ2aWNlLnNlbmRNZXNzYWdlKFxuICAgICAgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ2F1dG9GaWxsJyxcbiAgICAgICAgaW50ZWdyYXRpb246IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICByZXNvdXJjZVR5cGU6IHRoaXMucmVzb3VyY2VUeXBlLFxuICAgICAgICByZXNvdXJjZTogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm1vZGVsKSksXG4gICAgICAgIGZpZWxkczogdGhpcy5uaWNlRmllbGRzLFxuICAgICAgICBldmVudDogdGhpcy5tZXRhQ29udGV4dC5jb250ZXh0LFxuICAgICAgICBwcm9maWxlOiB0aGlzLm1ldGFDb250ZXh0LnByb2ZpbGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlXVxuICAgICAgfSxcbiAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoIXJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBhZnAgaW4gcmVzcG9uc2UuYXV0b0ZpbGwpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbFthZnBdKSB7XG4gICAgICAgICAgICAgIHRoaXMubW9kZWxbYWZwXSA9IHJlc3BvbnNlLmF1dG9GaWxsW2FmcF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGdldEZpZWxkc01hcCgpIHtcbiAgICBpZiAodGhpcy5tZXRhLmZpZWxkc01hcCkge1xuICAgICAgdGhpcy5maWVsZHNNYXAgPSB0aGlzLm1ldGEuZmllbGRzTWFwO1xuICAgICAgdGhpcy5tYXJrQ29udGFjdGFibGVzKCk7XG4gICAgICB0aGlzLmJ1aWxkQ29udGFjdHNTdWdnZXN0aW9ucygpO1xuICAgICAgaWYgKCF0aGlzLnJlc291cmNlLmV4dGVybmFsSWQpIHtcbiAgICAgICAgdGhpcy5idWlsZFN1YmplY3RUZW1wbGF0ZSgpO1xuICAgICAgICB0aGlzLmV4ZWNUcmFuc2Zvcm1lcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1ldGFNc2dTZXJ2aWNlLnNlbmRNZXNzYWdlKFxuICAgICAgICB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgeyBhY3Rpb246ICdmaWVsZHNNYXAnLCBpbnRlZ3JhdGlvbjogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIHJlc291cmNlVHlwZTogdGhpcy5yZXNvdXJjZVR5cGUgfSxcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKCFyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgdGhpcy5maWVsZHNNYXAgPSByZXNwb25zZS5maWVsZHNNYXA7XG4gICAgICAgICAgICB0aGlzLm1hcmtDb250YWN0YWJsZXMoKTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRDb250YWN0c1N1Z2dlc3Rpb25zKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVzb3VyY2UuZXh0ZXJuYWxJZCkge1xuICAgICAgICAgICAgICB0aGlzLmJ1aWxkU3ViamVjdFRlbXBsYXRlKCk7XG4gICAgICAgICAgICAgIHRoaXMuZXhlY1RyYW5zZm9ybWVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdObyBmaWVsZHMgbWFwJywgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIHRoaXMucmVzb3VyY2VUeXBlLCByZXNwb25zZS5lcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5SZXNvdXJjZU1lbnUoKSB7XG4gICAgdGhpcy5yZXNvdXJjZU1lbnVWaXNpYmxlID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbk1lbnVDbGlja291dCk7XG4gICAgfSwgMTApO1xuICB9XG5cbiAgY2xvc2UocmVzdWx0Pykge1xuICAgIHRoaXMuZG9uZS5lbWl0KHJlc3VsdCk7XG4gIH1cblxuICBzaG93UGFyc2VkRXJyb3IocmVzb3VyY2VGb3JtLCBwYXJzZWRFcnJvcikge1xuICAgIHRoaXMuZm9ybUVycm9ycyA9IHBhcnNlZEVycm9yLm1lc3NhZ2UgfHwgJ1RoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIG9uZSBvciBtb3JlIGZpZWxkcyc7XG4gICAgaWYgKHBhcnNlZEVycm9yLmVycm9ycyAmJiBwYXJzZWRFcnJvci5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZvcm1FcnJvcnMgKz0gYCAoJHtwYXJzZWRFcnJvci5lcnJvcnMubWFwKGUgPT4gZS5tZXNzYWdlKS5qb2luKCcsICcpfSlgO1xuICAgICAgZm9yIChjb25zdCBwZSBvZiBwYXJzZWRFcnJvci5lcnJvcnMpIHtcbiAgICAgICAgaWYgKHJlc291cmNlRm9ybS5jb250cm9sc1twZS5maWVsZF0pIHtcbiAgICAgICAgICByZXNvdXJjZUZvcm0uY29udHJvbHNbcGUuZmllbGRdLnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUsIGN1c3RvbTogcGUubWVzc2FnZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpcnN0SW52YWxpZDogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuVmx0LWZvcm1fX2VsZW1lbnQtLWVycm9yIC5tYWluOm5vdCguc3RhbmRhbG9uZSknKTtcbiAgICAgICAgaWYgKGZpcnN0SW52YWxpZCkge1xuICAgICAgICAgIGZpcnN0SW52YWxpZC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdWJtaXQocmVzb3VyY2VGb3JtKSB7XG4gICAgZGVsZXRlIHRoaXMuZm9ybUVycm9ycztcbiAgICByZXNvdXJjZUZvcm0uZm9ybS5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgIGlmIChyZXNvdXJjZUZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgICBpZiAodGhpcy5tZXRhQ29udGV4dC52Z2lwRXZlbnRJZCkge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwuX3ZnaXMpIHtcbiAgICAgICAgICB0aGlzLm1vZGVsLl92Z2lzID0ge1xuICAgICAgICAgICAgY29ubmVjdG9yOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgICAgIHJlc291cmNlVHlwZTogdGhpcy5yZXNvdXJjZVR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9kZWwuX3ZnaXMubGF5b3V0SWQgPSB0aGlzLmN1cnJlbnRMYXlvdXRJZDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgLy8gdGhpcy5tb2RlbC5fdmdpcy50aW1lWm9uZU9mZnNldEluTWludXRlcyA9IDA7IC8vIHdlIGFyZSBub3QgcHJvdmlkaW5nIHRpbWV6b25lIGFueW1vcmUgKGFzIFYzKSwgaW5zdGVhZCB0aGUgJ3RpbWUnIGFuZCAnZGF0ZScgb2JqZWN0cyBhcmUgY29udmVydGVkIHNvIHRoZSBVVEMgdGltZS9kYXRlIGlzIGNvcnJlY3RcbiAgICAgICAgdGhpcy5tb2RlbC5fdmdpcy5ldmVudElkID0gdGhpcy5tZXRhQ29udGV4dC52Z2lwRXZlbnRJZDtcbiAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuICAgICAgfVxuICAgICAgdGhpcy5zZXJ2aWNlLnNhdmUodGhpcy5tb2RlbCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm1vZGVsID0gcmVzdWx0O1xuICAgICAgICB0aGlzLnJlc291cmNlLmV4dGVybmFsSWQgPSByZXN1bHQuX3ZnaXMuZXh0ZXJuYWxJZDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgICAgICB0aGlzLnJlc291cmNlVnJuID0gYHZybjp2Z2lzOiR7dGhpcy5pbnRlZ3JhdGlvbkNvZGUudG9Mb3dlckNhc2UoKX06JHt0aGlzLnJlc291cmNlLnJlc291cmNlVHlwZX06JHt0aGlzLnJlc291cmNlLmV4dGVybmFsSWR9YDtcbiAgICAgICAgdGhpcy5pc1BlcnNpc3RlbnQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNsb3NlKHJlc3VsdCk7XG4gICAgICAgIHRoaXMuZWRpdCA9IGZhbHNlO1xuICAgICAgICBkZWxldGUgdGhpcy5idXN5O1xuICAgICAgfSwgKGVycm9yUmVzdWx0KSA9PiB7XG4gICAgICAgIGlmICgoZXJyb3JSZXN1bHQuc3RhdHVzID09PSA0MjIgJiYgZXJyb3JSZXN1bHQuZXJyb3IgJiYgIWVycm9yUmVzdWx0LmVycm9yLmVycm9ycyAmJiBlcnJvclJlc3VsdC5lcnJvci5pbnRlZ3JhdGlvbkVycm9yKVxuICAgICAgICAgIHx8IChlcnJvclJlc3VsdC5lcnJvciAmJiBlcnJvclJlc3VsdC5lcnJvci5lcnJvcnMgJiYgZXJyb3JSZXN1bHQuZXJyb3IuZXJyb3JzLmxlbmd0aCAmJiAhZXJyb3JSZXN1bHQuZXJyb3IuZXJyb3JzWzBdLmZpZWxkKVxuICAgICAgICAgIC8vIGJhY2tlbmQgaW1wbGVtZW50ZWQgZXJyb3IgcGFyc2luZyBidXQgYnJva2VuIFZHSVMtNzM2NlxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSAnVGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggb25lIG9yIG1vcmUgZmllbGRzJztcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5tZXRhTXNnU2VydmljZS5zZW5kTWVzc2FnZShcbiAgICAgICAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdwYXJzZUVycm9yTWVzc2FnZScsXG4gICAgICAgICAgICAgICAgaW50ZWdyYXRpb25Db2RlOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZVR5cGU6IGVycm9yUmVzdWx0LmVycm9yLnJlc291cmNlVHlwZSxcbiAgICAgICAgICAgICAgICByYXdFcnJvcjogZXJyb3JSZXN1bHQuZXJyb3IuaW50ZWdyYXRpb25FcnJvcixcbiAgICAgICAgICAgICAgICBwcm9maWxlOiB0aGlzLm1ldGFDb250ZXh0LnByb2ZpbGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlLnRvVXBwZXJDYXNlKCldXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5wYXJzZWRFcnJvcikge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93UGFyc2VkRXJyb3IocmVzb3VyY2VGb3JtLCByZXNwb25zZS5wYXJzZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignTm8gZXJyb3IgcGFyc2VyIGZvcicsIHRoaXMuaW50ZWdyYXRpb25Db2RlLCBlcnJvclJlc3VsdC5lcnJvci5pbnRlZ3JhdGlvbkVycm9yKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUVycm9ycyA9IGVycm9yUmVzdWx0LmVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcuLi4uJywgZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3JSZXN1bHQuc3RhdHVzID09PSA0MjIpIHtcbiAgICAgICAgICB0aGlzLnNob3dQYXJzZWRFcnJvcihyZXNvdXJjZUZvcm0sIGVycm9yUmVzdWx0LmVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSBlcnJvclJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgdGhpcy5idXN5O1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybUVycm9ycyA9IE9iamVjdC5rZXlzKHJlc291cmNlRm9ybS5jb250cm9scylcbiAgICAgICAgLmZpbHRlcigoYykgPT4gcmVzb3VyY2VGb3JtLmNvbnRyb2xzW2NdLmludmFsaWQpXG4gICAgICAgIC5tYXAoKGYpID0+ICh0aGlzLm5pY2VGaWVsZHNbZl0gPyAodGhpcy5uaWNlRmllbGRzW2ZdLmxhYmVsIHx8IGYpIDogZikpLmpvaW4oJywgJyk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSBgZm9ybVtuYW1lPVwiJHt0aGlzLnJlc291cmNlVHlwZX1cIl0gLlZsdC1mb3JtX19lbGVtZW50LS1lcnJvciAubWFpbjpub3QoLnN0YW5kYWxvbmUpYDtcbiAgICAgICAgY29uc3QgZmlyc3RJbnZhbGlkOiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICBpZiAoZmlyc3RJbnZhbGlkKSB7XG4gICAgICAgICAgZmlyc3RJbnZhbGlkLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRm9ybUVycm9ycygpIHtcbiAgICBkZWxldGUgdGhpcy5mb3JtRXJyb3JzO1xuICB9XG5cbiAgb25Gb3JtQ2hhbmdlKCkge1xuICAgIHRoaXMucmVzb3VyY2VDaGFuZ2VkLm5leHQoSlNPTi5zdHJpbmdpZnkodGhpcy5tb2RlbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1lbnVDbGlja291dCA9ICgpID0+IHtcbiAgICBkZWxldGUgdGhpcy5yZXNvdXJjZU1lbnVWaXNpYmxlO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbk1lbnVDbGlja291dCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzdWdnZXN0RmllbGRQcm9wZXJ0eShrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgZmllbGROYW1lcyA9IHRoaXMuZmllbGROYW1lcztcbiAgICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICAgIGNvbnN0IG5lc3RNYXRjaCA9IGtleS5tYXRjaCgvKFxcUyspXFxbXFxkXFxdXFwuKFxcUyspLyk7XG4gICAgICAgIGlmIChuZXN0TWF0Y2ggJiYgZmllbGROYW1lcy5pbmRleE9mKG5lc3RNYXRjaFsxXSkgIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbFtuZXN0TWF0Y2hbMV1dID0gW107XG4gICAgICAgICAgY29uc3QgbmVzdEtleXM6IGFueSA9IHt9O1xuICAgICAgICAgIG5lc3RLZXlzW25lc3RNYXRjaFsyXV0gPSB2YWx1ZTtcbiAgICAgICAgICB0aGlzLm1vZGVsW25lc3RNYXRjaFsxXV0ucHVzaChuZXN0S2V5cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGROYW1lcy5pbmRleE9mKGtleSkgIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGV4ZWNUcmFuc2Zvcm1lcigpIHtcbiAgICBpZiAodGhpcy5tZXRhQ29udGV4dCAmJiB0aGlzLmZpZWxkc01hcCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAucGhvbmVOdW1iZXIsIHRoaXMubWV0YUNvbnRleHQucGhvbmVOdW1iZXIpO1xuICAgICAgICBpZiAodGhpcy5maWVsZHNNYXAuZmlyc3ROYW1lIHx8IHRoaXMuZmllbGRzTWFwLmxhc3ROYW1lKSB7XG4gICAgICAgICAgY29uc3QgbmFtZXMgPSAodGhpcy5tZXRhQ29udGV4dC5kaXNwbGF5TmFtZSB8fCAnJykuc3BsaXQoJyAnKTtcbiAgICAgICAgICB0aGlzLnN1Z2dlc3RGaWVsZFByb3BlcnR5KHRoaXMuZmllbGRzTWFwLmZpcnN0TmFtZSwgbmFtZXNbMF0pO1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAubGFzdE5hbWUsIG5hbWVzWzFdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpZWxkc01hcC5kaXNwbGF5TmFtZSkge1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAuZGlzcGxheU5hbWUsIHRoaXMubWV0YUNvbnRleHQuZGlzcGxheU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFya0NvbnRhY3RhYmxlcygpIHtcbiAgICBpZiAodGhpcy5maWVsZHNNYXAuY29udGFjdGFibGVzICYmIHRoaXMuZmllbGRzTWFwLmNvbnRhY3RhYmxlcy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmZpZWxkc01hcC5jb250YWN0YWJsZXMpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLm5pY2VGaWVsZHNbY107XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWVsZCwgJyRpc0NvbnRhY3RhYmxlJywge1xuICAgICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFN1YmplY3RUZW1wbGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMubW9kZWxbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0gJiYgdGhpcy5maWVsZHNNYXAuc3ViamVjdCAmJiB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0pIHtcbiAgICAgIGxldCBzdWJqZWN0VGVtcGxhdGU6IHN0cmluZztcbiAgICAgIGlmICh0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdCkge1xuICAgICAgICBzdWJqZWN0VGVtcGxhdGUgPSB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdC5pZCB8fCB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZV0pIHtcbiAgICAgICAgY29uc3QgcHJvZmlsZSA9IHRoaXMubWV0YUNvbnRleHQucHJvZmlsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdIHx8IHt9O1xuICAgICAgICBzdWJqZWN0VGVtcGxhdGUgPSBwcm9maWxlLmRlZmF1bHRTdWJqZWN0ID9cbiAgICAgICAgICBwcm9maWxlLmRlZmF1bHRTdWJqZWN0WygodGhpcy5tZXRhQ29udGV4dC5jb250ZXh0IHx8ICdDQUxMJykudHlwZSB8fCAnJykudG9VcHBlckNhc2UoKV0gOlxuICAgICAgICAgIHByb2ZpbGUuYWN0aXZpdHlEZWZhdWx0U3ViamVjdFRlbXBsYXRlO1xuICAgICAgfVxuICAgICAgaWYgKHN1YmplY3RUZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLm1vZGVsW3RoaXMuZmllbGRzTWFwLnN1YmplY3RdID0gdGVtcGxhdGVCdWlsZGVyKHRoaXMubWV0YUNvbnRleHQsIHN1YmplY3RUZW1wbGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbnRhY3RzU3VnZ2VzdGlvbnMoKSB7XG4gICAgLy8gbGV0IGhhc0RlZmF1bHRDb250YWN0ID0gZmFsc2U7XG4gICAgaWYgKHRoaXMubWV0YUNvbnRleHQuY29udGFjdGFibGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlXSAmJiB0aGlzLm1ldGEubGF5b3V0ICYmIHRoaXMubWV0YS5sYXlvdXQuc2VjdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLm1ldGEubGF5b3V0LnNlY3Rpb25zKSB7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiAocy5maWVsZHMgfHwgW10pKSB7XG4gICAgICAgICAgaWYgKGYudHlwZSA9PT0gJ3JlZmVyZW5jZScpIHtcbiAgICAgICAgICAgIGlmICghZi5zdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICBmLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmLnN1Z2dlc3Rpb25zID0gZi5zdWdnZXN0aW9ucy5maWx0ZXIoc2cgPT4gIXNnLmF1dG8pOyAvLyBrZWVwIG1ldGEgc3VnZ2VzdGlvbnMgaWYgYW55XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZWZUeXBlcyA9IChmLnJlZmVyZW5jZS5sZW5ndGggPyBmLnJlZmVyZW5jZSA6IFtmLnJlZmVyZW5jZV0pLm1hcChyID0+IHIubmFtZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5tZXRhQ29udGV4dC5jb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdKSB7XG4gICAgICAgICAgICAgIGlmIChyZWZUeXBlcy5pbmRleE9mKGMucmVzb3VyY2VUeXBlIHx8IGMudHlwZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRMYWJlbCA9IGMuZGlzcGxheU5hbWUgfHwgYy5uYW1lO1xuICAgICAgICAgICAgICAgIGlmIChjLnBob25lTnVtYmVycykge1xuICAgICAgICAgICAgICAgICAgdExhYmVsICs9ICgnIOKchicgKyBjLnBob25lTnVtYmVycy5tYXAocCA9PiBwLnBob25lTnVtYmVyKS5qb2luKCcsJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmLnN1Z2dlc3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgaWQ6IGMuZXh0ZXJuYWxJZCB8fCBjLmlkZW50aWZpZXIgfHwgYy5pZCxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiB0TGFiZWwsXG4gICAgICAgICAgICAgICAgICB0eXBlOiBjLnJlc291cmNlVHlwZSB8fCBjLnR5cGUsXG4gICAgICAgICAgICAgICAgICBhdXRvOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgodGhpcy5maWVsZHNNYXAuY29udGFjdGFibGVzIHx8IFtdKS5pbmRleE9mKGYubmFtZSkgIT09IC0xKSB7IC8vIGV2YWx1YXRlIHVzYWJpbGl0eT9cbiAgICAgICAgICAgICAgZi5hbHdheXNWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIChcbiAgICAgICAgICAgIC8vICAgIWhhc0RlZmF1bHRDb250YWN0ICYmIHRoaXMubWV0YUNvbnRleHQuZGVmYXVsdENvbnRhY3RhYmxlc1t0aGlzLmludGVncmF0aW9uQ29kZV1cbiAgICAgICAgICAgIC8vICAgJiYgcmVmVHlwZXMuaW5kZXhPZih0aGlzLm1ldGFDb250ZXh0LmRlZmF1bHRDb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdLnR5cGUpICE9PSAtMVxuICAgICAgICAgICAgLy8gKSB7XG4gICAgICAgICAgICAvLyAgIHRoaXMucmVzb3VyY2VbZi5uYW1lXSA9IHRoaXMubWV0YUNvbnRleHQuZGVmYXVsdENvbnRhY3RhYmxlc1t0aGlzLmludGVncmF0aW9uQ29kZV07XG4gICAgICAgICAgICAvLyAgIGhhc0RlZmF1bHRDb250YWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAoIWhhc0RlZmF1bHRDb250YWN0ICYmIHRoaXMuZmllbGRzTWFwLmNvbnRhY3RhYmxlcyAmJiBmLnN1Z2dlc3Rpb25zICYmIGYuc3VnZ2VzdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyAgIGlmICh0aGlzLmZpZWxkc01hcC5jb250YWN0YWJsZXMuaW5kZXhPZihmLm5hbWUpICE9PSAtMSAmJiAhZi5kZWZhdWx0KSB7XG4gICAgICAgICAgICAvLyAgICAgZi5kZWZhdWx0ID0gZi5zdWdnZXN0aW9uc1swXTtcbiAgICAgICAgICAgIC8vICAgICBoYXNEZWZhdWx0Q29udGFjdCA9IHRydWU7XG4gICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGFjdHNTdWdnZXN0aW9uc0RvbmUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlUaGVtZSgpIHtcbiAgICBjb25zdCBtZXRhVGhlbWUgPSB0aGlzLnRoZW1lID09PSAnZGFyaycgPyBtZXRhRGFyayA6IG1ldGFMaWdodDtcbiAgICBjb25zb2xlLmxvZygncmVzb3VyY2UgYXBwbHkgdGhlbWUnLCB0aGlzLnRoZW1lKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtZXRhVGhlbWUucHJvcGVydGllcykpIHtcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIG1ldGFUaGVtZS5wcm9wZXJ0aWVzW2tleV0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9yY2VVaVVwZGF0ZSgpIHsgLy8gaU9TIHdlYnZpZXcgZG9lcyBub3QgdXBkYXRlIHRoZSBVSSBhZnRlciBhc3ljIGNoYW5nZXMuIFRlbXAgZml4IDooXG4gICAgLy8gdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnRzJyk7XG4gICAgZS5pbml0RXZlbnQoJ2NsaWNrJywgdHJ1ZSwgZmFsc2UpO1xuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGUpO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPSdnZW5lcmFsRXJyb3InIGNsYXNzPVwiVmx0LWNhbGxvdXQgVmx0LWNhbGxvdXQtLWNyaXRpY2FsXCIgc3R5bGU9J292ZXJmbG93OiBhdXRvOyBtYXJnaW46IDIwcHg7Jz5cblx0PGk+PC9pPlxuXHQ8ZGl2IGNsYXNzPVwiVmx0LWNhbGxvdXRfX2NvbnRlbnRcIj5cblx0XHQ8cD57e2dlbmVyYWxFcnJvcn19PC9wPlxuXHQ8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj0nIW1ldGEnIGNsYXNzPVwiVmx0LXByb2dyZXNzXCI+XG5cdDxkaXYgY2xhc3M9XCJWbHQtcHJvZ3Jlc3NfX2JhclwiIFtuZ0NsYXNzXT1cInsgbG9hZGluZzogbWV0YUxvYWRpbmcgfVwiIHJvbGU9XCJwcm9ncmVzc2JhclwiIGFyaWEtdmFsdWVtaW49XCIwXCIgYXJpYS12YWx1ZXRleHQ9XCJMb2FkaW5nIE1ldGFkYXRhXCIgYXJpYS12YWx1ZW1heD1cIjEwMFwiPjwvZGl2PlxuPC9kaXY+XG48Zm9ybSBbdmdpcE1ldGFGb3JtQXV0b2ZvY3VzXT0nIXJlc291cmNlIHx8ICFyZXNvdXJjZS5leHRlcm5hbElkJyAqbmdJZj0nbWV0YSAmJiAhZ2VuZXJhbEVycm9yJyAjcmVzb3VyY2VGb3JtPVwibmdGb3JtXCIgW25hbWVdPSdyZXNvdXJjZS5yZXNvdXJjZVR5cGUnIChuZ1N1Ym1pdCk9J3N1Ym1pdChyZXNvdXJjZUZvcm0pJyAoY2hhbmdlKT0nb25Gb3JtQ2hhbmdlKCknIG5vdmFsaWRhdGU+XG5cdDxkaXYgY2xhc3M9J2Zvcm0tY29udGVudCcgc3R5bGU9J292ZXJmbG93OiBoaWRkZW47Jz5cblx0XHQ8ZGl2IFtuZ0NsYXNzXT1cInsgJ1ZsdC1jYWxsb3V0LS1kaXNtaXNzZWQnOiAhZm9ybUVycm9ycyB9XCIgY2xhc3M9XCJWbHQtY2FsbG91dCBWbHQtY2FsbG91dC0tYmFubmVyIFZsdC1jYWxsb3V0LS1jcml0aWNhbFwiPlxuXHRcdFx0PGk+PC9pPlxuXHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1jYWxsb3V0X19jb250ZW50XCIgc3R5bGU9XCJtYXJnaW4tdG9wOiBhdXRvO1wiPlxuXHRcdFx0XHQ8cD5UaGVyZSBpcyBhIHByb2JsZW0gd2l0aCBvbmUgb3IgbW9yZSBmaWVsZHM8L3A+XG5cdFx0XHRcdDxzbWFsbCBzdHlsZT0nZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAxLjBlbTsnICpuZ0lmPSdmb3JtRXJyb3JzJz57eyBmb3JtRXJyb3JzLm1lc3NhZ2UgfHwgZm9ybUVycm9ycyB9fTwvc21hbGw+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz1cIlZsdC1jYWxsb3V0X19kaXNtaXNzXCIgKGNsaWNrKT0nY2xlYXJGb3JtRXJyb3JzKCknIGFyaWEtbGFiZWw9XCJEaXNtaXNzXCI+PC9idXR0b24+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cIlZsdC1jYXJkX19jb250ZW50XCIgc3R5bGU9J21pbi1oZWlnaHQ6IDQwcHg7Jz5cblx0XHRcdDx2Z2lwLW1ldGEtbGF5b3V0ICpuZ0lmPSdlZGl0JyBbbWV0YV09J21ldGEubGF5b3V0JyBbcmVzb3VyY2VdPSdtb2RlbCcgW3ByZXZpZXddPSdmYWxzZScgW2ludGVncmF0aW9uXT0nbWV0YS5pbnRlZ3JhdGlvbicgW3R5cGVdPSdyZXNvdXJjZS5yZXNvdXJjZVR5cGUnIHRoZW1lPSdpbmhlcml0Jz48L3ZnaXAtbWV0YS1sYXlvdXQ+XG5cdFx0XHQ8dmdpcC1tZXRhLWxheW91dCAqbmdJZj0nIWVkaXQnIFttZXRhXT0nbWV0YS5sYXlvdXQnIFtyZXNvdXJjZV09J21vZGVsJyBbcHJldmlld109J3RydWUnIFtpbnRlZ3JhdGlvbl09J21ldGEuaW50ZWdyYXRpb24nIFt0eXBlXT0ncmVzb3VyY2UucmVzb3VyY2VUeXBlJyB0aGVtZT0naW5oZXJpdCcgW2F0dHIuZGF0YS12cm5dPSdyZXNvdXJjZVZybic+PC92Z2lwLW1ldGEtbGF5b3V0PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblx0PGRpdiBjbGFzcz1cIlZsdC1jYXJkX19mb290ZXJcIj5cblx0XHQ8YnV0dG9uIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zZWNvbmRhcnkgVmx0LWJ0bi0tYXBwIFZsdC1idG4tLW91dGxpbmVcIiB0eXBlPSdidXR0b24nIGFyaWEtbGFiZWw9J0NhbmNlbCcgKGNsaWNrKT0nY2xvc2UoKSc+XG5cdFx0XHR7eyBlZGl0ID8gJ0NhbmNlbCcgOiAnQ2xvc2UnIH19XG5cdFx0PC9idXR0b24+XG5cdFx0PGJ1dHRvbiAqbmdJZj0nZWRpdCcgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLWFwcFwiIFtuZ0NsYXNzXT1cInsgJ1ZsdC1idG4tLXByaW1hcnknOiBpc1BlcnNpc3RlbnQsICdWbHQtYnRuLS1zZWNvbmRhcnknOiAhaXNQZXJzaXN0ZW50IH1cIiB0eXBlPSdzdWJtaXQnPlxuXHRcdFx0e3sgKHJlc291cmNlICYmIHJlc291cmNlLmV4dGVybmFsSWQpID8gJ1VwZGF0ZScgOiAnQ3JlYXRlJyB9fVxuXHRcdDwvYnV0dG9uPlxuXHRcdDxidXR0b24gKGNsaWNrKT0nc2V0RWRpdE1vZGUoKScgKm5nSWY9JyFlZGl0ICYmIGlzRWRpdGFibGUnIFtkaXNhYmxlZF09JyFpc0VkaXRhYmxlJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tYXBwIFZsdC1idG4tLXByaW1hcnlcIiB0eXBlPSdidXR0b24nIGFyaWEtbGFiZWw9J0VkaXQnPlxuXHRcdFx0RWRpdFxuXHRcdDwvYnV0dG9uPlxuXHRcdDxkaXYgc3R5bGU9J21hcmdpbi1yaWdodDogOHB4OyBmbGV4OiAxOyc+XG5cdFx0XHQ8ZGl2ICpuZ0lmPSdtZXRhLmF2YWlsYWJsZUxheW91dHMgJiYgbWV0YS5hdmFpbGFibGVMYXlvdXRzLmxlbmd0aCcgY2xhc3M9XCJWbHQtZm9ybV9fZWxlbWVudCBWbHQtZm9ybV9fZWxlbWVudC0tYmlnXCIgc3R5bGU9J3BhZGRpbmc6IDA7IG1hcmdpbjogLThweCAtMThweCAtOHB4IDA7Jz5cblx0XHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1zZWxlY3RcIj5cblx0XHRcdFx0XHQ8bGFiZWwgc3R5bGU9J2FsbDogaW5oZXJpdDsnPlxuXHRcdFx0XHRcdFx0PHNlbGVjdCBzdHlsZT0nYm9yZGVyOiAwOyBtYXJnaW4tdG9wOiAzcHg7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OycgKGNoYW5nZSk9J2NoYW5nZUxheW91dCgpJyBbKG5nTW9kZWwpXT0nY3VycmVudExheW91dElkJyBbbmdNb2RlbE9wdGlvbnNdPSd7IHN0YW5kYWxvbmU6IHRydWUgfScgW2Rpc2FibGVkXT0naXNQZXJzaXN0ZW50Jz5cblx0XHRcdFx0XHRcdFx0PG9wdGlvbiBzZWxlY3RlZCBkaXNhYmxlZD5TZWxlY3QgbGF5b3V0PC9vcHRpb24+XG5cdFx0XHRcdFx0XHRcdDxvcHRpb24gKm5nRm9yPSdsZXQgbGF5b3V0IG9mIG1ldGEuYXZhaWxhYmxlTGF5b3V0cycgW25nVmFsdWVdPSdsYXlvdXQuaWQnPnt7bGF5b3V0Lm5hbWV9fTwvb3B0aW9uPlxuXHRcdFx0XHRcdFx0PC9zZWxlY3Q+XG5cdFx0XHRcdFx0XHQ8bGFiZWw+TGF5b3V0PC9sYWJlbD4gPCEtLSBlc2xpbnQtZGlzYWJsZS1saW5lIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9sYWJlbC1oYXMtYXNzb2NpYXRlZC1jb250cm9sIC0tPlxuXHRcdFx0XHRcdDwvbGFiZWw+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93biByZXNvdXJjZS1tZW51XCIgW25nQ2xhc3NdPVwieyAnVmx0LWRyb3Bkb3duLS1leHBhbmRlZCc6IHJlc291cmNlTWVudVZpc2libGUgfVwiIHN0eWxlPSdtYXJnaW4tbGVmdDogMnB4Oyc+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19wYW5lbFwiIHN0eWxlPSdib3R0b206IDQwcHg7IHJpZ2h0OiAtNHB4OyB0b3A6IGluaXRpYWw7Jz5cblx0XHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fcGFuZWxfX2NvbnRlbnRcIj5cblx0XHRcdFx0XHQ8YSBocmVmPScjJyBjbGFzcz1cIlZsdC1kcm9wZG93bl9fbGlua1wiIChjbGljayk9J2xvYWRNZXRhZGF0YShjdXJyZW50TGF5b3V0SWQsIHRydWUsICRldmVudCknPlxuXHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0PHN2ZyBjbGFzcz0nVmx0LWljb24gVmx0LWljb24tLXNtYWxsZXInPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1yZWZyZXNoXCIvPjwvc3ZnPiZuYnNwOyZuYnNwO1JlZnJlc2ggbWV0YWRhdGFcblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvYT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3RyaWdnZXJcIj5cblx0XHRcdFx0PGJ1dHRvbiB0eXBlPSdidXR0b24nIChjbGljayk9J29wZW5SZXNvdXJjZU1lbnUoKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLWxpbmtcIiBhcmlhLWxhYmVsPSdSZXNvdXJjZSBtZW51Jz5cblx0XHRcdFx0XHQ8c3ZnIGNsYXNzPSdWbHQtaWNvbiBWbHQtaWNvbi0tc21hbGwnIHN0eWxlPSdtYXJnaW46IDA7Jz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tbW9yZS12LW5lZ2F0aXZlXCIvPjwvc3ZnPlxuXHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZm9ybT5cbjxkaXYgY2xhc3M9J2J1c3ktbWFzaycgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGJ1c3kgfVwiPlxuXHQ8ZGl2IHN0eWxlPSdoZWlnaHQ6IDEwMCU7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyc+XG5cdFx0PGRpdiBjbGFzcz1cIlZsdC1zcGlubmVyXCI+PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -23,6 +23,14 @@ export class MetaContextService {
23
23
  }
24
24
  }
25
25
  }
26
+ setOnClick2Dial(callback) {
27
+ if (typeof (callback) === 'function') {
28
+ this.onClick2Dial = callback;
29
+ }
30
+ else {
31
+ delete this.onClick2Dial;
32
+ }
33
+ }
26
34
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: MetaContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
27
35
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: MetaContextService, providedIn: 'root' }); }
28
36
  }
@@ -32,4 +40,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.11", ngImpo
32
40
  providedIn: 'root'
33
41
  }]
34
42
  }], ctorParameters: function () { return []; } });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvc2VydmljZXMvbWV0YUNvbnRleHQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sa0JBQWtCO0lBYTdCO1FBVkEsd0JBQW1CLEdBQXFDLEVBQUUsQ0FBQztRQUMzRCxZQUFPLEdBQXFDLEVBQUUsQ0FBQztRQUMvQyxpQkFBWSxHQUFxQyxFQUFFLENBQUM7UUFDcEQsYUFBUSxHQUFxQyxFQUFFLENBQUM7SUFTaEQsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUFRO1FBQ1YsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUN4QztZQUNELElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3hDO1NBQ0Y7SUFDSCxDQUFDOytHQTFCVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEBBdXRob3I6IEFsZXhhbmRlci5WYW5nZWxvdkB2b25hZ2UuY29tXG4gKiBARGF0ZTogMjAxOS0wOS0xOSAxNzozNToxOVxuICogQExhc3QgTW9kaWZpZWQgYnk6IEFsZXhhbmRlci5WYW5nZWxvdkB2b25hZ2UuY29tXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDIwLTAzLTA2IDEwOjEwOjA5XG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNZXRhQ29udGV4dFNlcnZpY2Uge1xuICBwaG9uZU51bWJlcjogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBkZWZhdWx0Q29udGFjdGFibGVzOiB7W2ludGVncmF0aW9uQ29kZTogc3RyaW5nXTogYW55fSA9IHt9O1xuICB3b3JrZXJzOiB7W2ludGVncmF0aW9uQ29kZTogc3RyaW5nXTogYW55fSA9IHt9O1xuICBjb250YWN0YWJsZXM6IHtbaW50ZWdyYXRpb25Db2RlOiBzdHJpbmddOiBhbnl9ID0ge307XG4gIHByb2ZpbGVzOiB7W2ludGVncmF0aW9uQ29kZTogc3RyaW5nXTogYW55fSA9IHt9O1xuICB2Z2lwRXZlbnRJZDogc3RyaW5nO1xuICB2Z2lwVXNlcklkOiBzdHJpbmc7XG4gIGNvbnRleHQ6IGFueTtcbiAgdWlkOiBzdHJpbmc7XG4gIHN1YmplY3Q6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHtcblxuICB9XG5cbiAgc2V0KGNvbnRleHQ/KSB7XG4gICAgaWYgKGNvbnRleHQpIHtcbiAgICAgIGlmIChjb250ZXh0LnBob25lTnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGhvbmVOdW1iZXIgPSBjb250ZXh0LnBob25lTnVtYmVyO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRleHQuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5TmFtZSA9IGNvbnRleHQuZGlzcGxheU5hbWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvc2VydmljZXMvbWV0YUNvbnRleHQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sa0JBQWtCO0lBYzdCO1FBWEEsd0JBQW1CLEdBQXFDLEVBQUUsQ0FBQztRQUMzRCxZQUFPLEdBQXFDLEVBQUUsQ0FBQztRQUMvQyxpQkFBWSxHQUFxQyxFQUFFLENBQUM7UUFDcEQsYUFBUSxHQUFxQyxFQUFFLENBQUM7SUFVaEQsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUFRO1FBQ1YsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUN4QztZQUNELElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO2FBQ3hDO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLFFBQTZDO1FBQzNELElBQUksT0FBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFVBQVUsRUFBRTtZQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztTQUM5QjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQzsrR0FuQ1Usa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBAQXV0aG9yOiBBbGV4YW5kZXIuVmFuZ2Vsb3ZAdm9uYWdlLmNvbVxuICogQERhdGU6IDIwMTktMDktMTkgMTc6MzU6MTlcbiAqIEBMYXN0IE1vZGlmaWVkIGJ5OiBBbGV4YW5kZXIuVmFuZ2Vsb3ZAdm9uYWdlLmNvbVxuICogQExhc3QgTW9kaWZpZWQgdGltZTogMjAyMC0wMy0wNiAxMDoxMDowOVxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTWV0YUNvbnRleHRTZXJ2aWNlIHtcbiAgcGhvbmVOdW1iZXI6IHN0cmluZztcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgZGVmYXVsdENvbnRhY3RhYmxlczoge1tpbnRlZ3JhdGlvbkNvZGU6IHN0cmluZ106IGFueX0gPSB7fTtcbiAgd29ya2Vyczoge1tpbnRlZ3JhdGlvbkNvZGU6IHN0cmluZ106IGFueX0gPSB7fTtcbiAgY29udGFjdGFibGVzOiB7W2ludGVncmF0aW9uQ29kZTogc3RyaW5nXTogYW55fSA9IHt9O1xuICBwcm9maWxlczoge1tpbnRlZ3JhdGlvbkNvZGU6IHN0cmluZ106IGFueX0gPSB7fTtcbiAgdmdpcEV2ZW50SWQ6IHN0cmluZztcbiAgdmdpcFVzZXJJZDogc3RyaW5nO1xuICBjb250ZXh0OiBhbnk7XG4gIHVpZDogc3RyaW5nO1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIG9uQ2xpY2syRGlhbDogKHBob25lTnVtYmVyLCB2cm4/OiBzdHJpbmcpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoKSB7XG5cbiAgfVxuXG4gIHNldChjb250ZXh0Pykge1xuICAgIGlmIChjb250ZXh0KSB7XG4gICAgICBpZiAoY29udGV4dC5waG9uZU51bWJlcikge1xuICAgICAgICB0aGlzLnBob25lTnVtYmVyID0gY29udGV4dC5waG9uZU51bWJlcjtcbiAgICAgIH1cbiAgICAgIGlmIChjb250ZXh0LmRpc3BsYXlOYW1lKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSBjb250ZXh0LmRpc3BsYXlOYW1lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldE9uQ2xpY2syRGlhbChjYWxsYmFjazogKHBob25lTnVtYmVyLCB2cm4/OiBzdHJpbmcpID0+IHZvaWQpIHtcbiAgICBpZiAodHlwZW9mKGNhbGxiYWNrKSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5vbkNsaWNrMkRpYWwgPSBjYWxsYmFjaztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMub25DbGljazJEaWFsO1xuICAgIH1cbiAgfVxufVxuIl19