@eqproject/eqp-dynamic-module 2.10.34 → 2.10.37

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 (20) hide show
  1. package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +3 -3
  2. package/esm2020/lib/components/private/action-button-creator/action-button-creator.component.mjs +11 -4
  3. package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +3 -3
  4. package/esm2020/lib/components/private/dbgetter/dbgetter.component.mjs +7 -1
  5. package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +1 -1
  6. package/esm2020/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.mjs +36 -15
  7. package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +2 -2
  8. package/esm2020/lib/components/private/graphs/graph/graph.component.mjs +7 -7
  9. package/esm2020/lib/directives/dynamic-loader/dynamic-loader.directive.mjs +5 -5
  10. package/esm2020/lib/directives/speech-to-text/speech-to-text.directive.mjs +4 -4
  11. package/esm2020/lib/services/utilityHelper.services.mjs +7 -7
  12. package/fesm2015/eqproject-eqp-dynamic-module.mjs +76 -42
  13. package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
  14. package/fesm2020/eqproject-eqp-dynamic-module.mjs +76 -42
  15. package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
  16. package/lib/components/private/action-button-creator/action-button-creator.component.d.ts +2 -1
  17. package/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.d.ts +6 -1
  18. package/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.d.ts +1 -1
  19. package/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.d.ts +1 -1
  20. package/package.json +1 -1
@@ -288,12 +288,18 @@ export class DbgetterComponent {
288
288
  selectedElement.Value = valueToBeSet;
289
289
  this.selectedElements.push(selectedElement);
290
290
  var correspondingCol = document.getElementById("col-" + keyused + "-id-" + row['ID']);
291
+ if (correspondingCol == null) {
292
+ correspondingCol = document.getElementById("col-" + key + "-id-" + row['ID']);
293
+ }
291
294
  correspondingCol.classList.add("row-selected");
292
295
  }
293
296
  else {
294
297
  var index = this.selectedElements.findIndex(x => x.ID == row['ID']);
295
298
  this.selectedElements.splice(index, 1);
296
299
  var correspondingCol = document.getElementById("col-" + keyused + "-id-" + row['ID']);
300
+ if (correspondingCol == null) {
301
+ correspondingCol = document.getElementById("col-" + key + "-id-" + row['ID']);
302
+ }
297
303
  correspondingCol.classList.remove("row-selected");
298
304
  }
299
305
  //this.selectedValue.emit([this.selectedElements]);
@@ -376,4 +382,4 @@ export var QueryEditorModeEnum;
376
382
  QueryEditorModeEnum[QueryEditorModeEnum["COMPOSER"] = 2] = "COMPOSER";
377
383
  QueryEditorModeEnum[QueryEditorModeEnum["RESULT"] = 3] = "RESULT";
378
384
  })(QueryEditorModeEnum || (QueryEditorModeEnum = {}));
379
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGJnZXR0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2RiZ2V0dGVyL2RiZ2V0dGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9kYmdldHRlci9kYmdldHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3ZFLE9BQU8sRUFBaUMsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7O0FBT2pFLE1BQU0sT0FBTyxpQkFBaUI7SUF1QzVCLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFyQ2pDLG1CQUFjLEdBQStCLElBQUksQ0FBQztRQUlsRCxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyx5QkFBb0IsR0FBK0IsSUFBSSxDQUFDLENBQUMsbUNBQW1DO1FBQzVGLFNBQUksR0FBUSxJQUFJLENBQUMsQ0FBQyx3Q0FBd0M7UUFFekQsUUFBRyxHQUEyQixJQUFJLFlBQVksRUFBWSxDQUFDO1FBQzNELGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDM0QsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRWhFLFNBQUksR0FBa0IsSUFBSSxDQUFDO1FBQzNCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFHeEIsY0FBUyxHQUFZLEtBQUssQ0FBQztR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QUFjLENBQUE7SUFDZCxpRUFBWSxDQUFBO0FBQ2QsQ0FBQyxFQUpXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFJOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2R5bmFtaWMtbG9hZGVyL2R5bmFtaWMtbG9hZGVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRGF0YUdldHRlclR5cGVFbnVtLCBGaWVsZFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2RiZ2V0dGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGJnZXR0ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RiZ2V0dGVyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIERiZ2V0dGVyQ29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnID0gbnVsbDtcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtO1xyXG4gIEBJbnB1dCgpIGZpZWxkOiBCYXNlRmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBEaXJlY3RseU9wZW5UYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIFF1ZXJ5RWRpdG9yQ29tcG9uZW50OiBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSA9IG51bGw7IC8vIEwnaW50ZXJvIGNvbXBvbmVudGUgcXVlcnkgRWRpdG9yXHJcbiAgQElucHV0KCkgZGF0YTogYW55ID0gbnVsbDsgLy8gTG8gZmFjY2lhbW8gZnVuemlvbmFyZSB0aXBvIEVRUC1UQUJMRVxyXG5cclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRWYWx1ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZG9SZWxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7ICBcclxuXHJcbiAga2V5czogQXJyYXk8c3RyaW5nPiA9IG51bGw7XHJcbiAgbG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmFsdWU6IGFueTtcclxuXHJcbiAgc2hvd1RhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGhhdmVRdWVzdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoYXZlUmVsYXRpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcmVsb2FkOiBib29sZWFuID0gdHJ1ZTtcclxuICBtdWx0aXBsZVZhbHVlc1RvQ2hvb3NlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGludGVydmFsOiBhbnk7XHJcblxyXG4gIHJlbGF0aW9uczogQXJyYXk8e2ZpZWxkOiBzdHJpbmcsIGxvYWRlZDogYm9vbGVhbiwgYWN0dWFsdmFsdWU6IGFueX0+ID0gbmV3IEFycmF5PHtmaWVsZDogc3RyaW5nLCBsb2FkZWQ6IGJvb2xlYW4sIGFjdHVhbHZhbHVlOiBhbnl9PigpO1xyXG4gIHJlbGF0aW9uc0xvYWRlZDogYm9vbGVhbjtcclxuICBiYWNrdXBRdWVzdGlvbkZpZWxkczogQXJyYXk8c3RyaW5nPiA9IG51bGw7XHJcblxyXG4gIGlzTXVsdGlzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtdWx0aXNlbGVjdFBoYXNlOiBudW1iZXIgPSAxO1xyXG4gIHNlbGVjdGVkQ29sdW1uOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHNlbGVjdGVkRWxlbWVudHM6IEFycmF5PExpc3RWYWx1ZUVsZW1lbnQ+ID0gbmV3IEFycmF5PExpc3RWYWx1ZUVsZW1lbnQ+KCk7XHJcblxyXG4gIGZpZWxkVHlwZUVudW0gPSBGaWVsZFR5cGVFbnVtO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCItLS0gSU5TSURFIERCR0VUVEVSIC0tLVwiKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2cobnVsbCwgdGhpcy5mb3JtKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2cobnVsbCwgdGhpcy5yZWNvcmQpO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhudWxsLCB0aGlzLmZpZWxkKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2cobnVsbCwgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudCk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiLS0tIElOU0lERSBEQkdFVFRFUiAtLS1cIik7XHJcblxyXG4gICAgICAvLyBJbml6aW8gUmV0cm9jb21wYXRpYmlsaXTDoFxyXG5cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckhhc1Jlc2V0QnV0dG9uID09PSBcInVuZGVmaW5lZFwiKXtcclxuICAgICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckhhc1Jlc2V0QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgfSAgICAgXHJcblxyXG4gICAgICAvLyBGaW5lIFJldHJvY29tcGF0aWJpbGl0w6AgICAgXHJcblxyXG4gICAgICAvLyBJbml6aW86IFRhYmVsbGEgbXVsdGlzZWxlY3Q/XHJcblxyXG4gICAgICBpZiAodGhpcy5maWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnRWxlbmNvIGdlbmVyaWNvJ10pe1xyXG4gICAgICAgIHRoaXMuaXNNdWx0aXNlbGVjdCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlICE9IG51bGwpe1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbiA9IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2Uua2V5O1xyXG4gICAgICAgICAgdGhpcy5tdWx0aXNlbGVjdFBoYXNlID0gMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV07ICAgIFxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudHMgPT0gbnVsbCl7IHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IG5ldyBBcnJheTxMaXN0VmFsdWVFbGVtZW50PigpOyB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEZpbmU6IFRhYmVsbGEgbXVsdGlzZWxlY3Q/XHJcblxyXG4gICAgaWYgKHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQgIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLm1vZGUgPSBRdWVyeUVkaXRvck1vZGVFbnVtLlJFU1VMVDtcclxuICAgICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcuZmllbGQgPSB0aGlzLmZpZWxkO1xyXG4gICAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5yZWNvcmQgPSB0aGlzLnJlY29yZDtcclxuICAgICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcuaW5Db25maWcgPSB0aGlzLmluQ29uZmlnO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUub3BlbmVkRmllbGRzLmZpbmQoeCA9PiB0eXBlb2YgeC5RdWVyeVByb3BlcnR5VmFsdWUgIT09IFwib2JqZWN0XCIgJiYgeC5RdWVyeVByb3BlcnR5VmFsdWUgPT0gJz8nKSAhPSBudWxsKXtcclxuICAgICAgICBcclxuICAgICAgICAvLyBJbCBjYW1wbyBoYSBhbG1lbm8gdW4gdmFsb3JlIGNvbiBcIj9cIlxyXG4gICAgICAgIHRoaXMuaGF2ZVF1ZXN0aW9ucyA9IHRydWU7XHJcblxyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJDSEVDS0lORyBCQUNLVVBTIE9QRU5FRCBGSUVMRFMuLi4uXCIsIHRoaXMuYmFja3VwUXVlc3Rpb25GaWVsZHMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5iYWNrdXBRdWVzdGlvbkZpZWxkcyA9PSBudWxsKXtcclxuICAgICAgICAgIHRoaXMuYmFja3VwUXVlc3Rpb25GaWVsZHMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZS5vcGVuZWRGaWVsZHMuZm9yRWFjaCgocnFmKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFja3VwUXVlc3Rpb25GaWVsZHMucHVzaChycWYuUHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZS5vcGVuZWRGaWVsZHMuZmluZCh4ID0+IHR5cGVvZiB4LlF1ZXJ5UHJvcGVydHlWYWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB4LlF1ZXJ5UHJvcGVydHlWYWx1ZS5pbmRleE9mKCchJykgIT0gLTEpICE9IG51bGwpe1xyXG5cclxuICAgICAgICAvLyBJbCBjYW1wbyBoYSBhbG1lbm8gdW4gdmFsb3JlIGNvbiBcIiFub21lcmVsYXppb25lXCJcclxuICAgICAgICB0aGlzLmhhdmVSZWxhdGlvbnMgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlLm9wZW5lZEZpZWxkcy5maWx0ZXIoeCA9PiB4LlF1ZXJ5UHJvcGVydHlWYWx1ZS5pbmRleE9mKCchJykgIT0gLTEpLmZvckVhY2goKGZpZWxkV2l0aFJlbGF0aW9uKSA9PiB7XHJcblxyXG4gICAgICAgICAgdmFyIGZpZWxkUmVsYXRlZCA9IGZpZWxkV2l0aFJlbGF0aW9uLlF1ZXJ5UHJvcGVydHlWYWx1ZS5yZXBsYWNlKFwiIVwiLFwiXCIpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdID09IG51bGwpe1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwidGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSBFJyBOVUxMXCIsIHRoaXMuZmllbGQuTmFtZSwgZmllbGRSZWxhdGVkLCB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRpb25zLnB1c2goe2ZpZWxkOiBmaWVsZFJlbGF0ZWQsIGxvYWRlZDogZmFsc2UsIGFjdHVhbHZhbHVlOiB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdfSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tSZWxhdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwidGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSBDSEVDS1wiLCB0aGlzLmZpZWxkLk5hbWUsIGZpZWxkUmVsYXRlZCwgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSwgdGhpcy5yZWNvcmQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRSZWxhdGlvbiA9IHRoaXMucmVsYXRpb25zLmZpbmQoeCA9PiB4LmZpZWxkID09IGZpZWxkUmVsYXRlZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFJlbGF0aW9uICE9IG51bGwpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gR2VzdGlvbmUgZGVpIGNhbWJpIGRpIHZhbG9yZSBkZWkgY2FtcGkgcmVsYXppb25hdGlcclxuICAgICAgICAgICAgICAgICAgLy8gSWwgY2FtcG8gcmVsYXppb25hdG8gSU5JWklBTE1FTlRFIE5PTiBFJyBOVUxMLCBlIGNhbWJpYSB2YWxvcmUgaW4gcXVhbGNvc2EgY2hlIE5PTiBFJyBOVUxMXHJcbiAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UmVsYXRpb24uYWN0dWFsdmFsdWUgIT0gbnVsbCAmJiB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdICE9IG51bGwgJiYgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSAhPSBjdXJyZW50UmVsYXRpb24uYWN0dWFsdmFsdWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJ0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdIEhBIENBTUJJQVRPIFZBTE9SRSEhXCIsIHRoaXMuZmllbGQuTmFtZSwgZmllbGRSZWxhdGVkLCB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlbGF0aW9uLmFjdHVhbHZhbHVlID0gdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVsYXRpb24ubG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZFdpdGhSZWxhdGlvbi5RdWVyeVByb3BlcnR5VmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIElsIGNhbXBvIHJlbGF6aW9uYXRvIElOSVpJQUxNRU5URSBOT04gRScgTlVMTCwgZSBjYW1iaWEgdmFsb3JlIElOIE5VTExcclxuICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudFJlbGF0aW9uLmFjdHVhbHZhbHVlICE9IG51bGwgJiYgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwidGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSBFJyBUT1JOQVRPIEFEIEVTU0VSRSBOVUxMISEgOihcIiwgdGhpcy5maWVsZC5OYW1lLCBmaWVsZFJlbGF0ZWQsIHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0sIHRoaXMucmVjb3JkKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVsYXRpb24uYWN0dWFsdmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWxhdGlvbi5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkV2l0aFJlbGF0aW9uLlF1ZXJ5UHJvcGVydHlWYWx1ZSA9IFwiIVwiK2ZpZWxkUmVsYXRlZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVjdXBlcm8gQmFja3VwXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWNrdXBRdWVzdGlvbkZpZWxkcy5mb3JFYWNoKChib2YpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUub3BlbmVkRmllbGRzLmZpbmQoeCA9PiB4LlByb3BlcnR5TmFtZSA9PSBib2YpLlF1ZXJ5UHJvcGVydHlWYWx1ZSA9IFwiP1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZENvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBJbCBjYW1wbyByZWxhemlvbmF0byBJTklaSUFMTUVOVEUgRScgTlVMTCwgZSBjYW1iaWEgdmFsb3JlXHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRSZWxhdGlvbi5hY3R1YWx2YWx1ZSA9PSBudWxsICYmIHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gTk9OIEUnIFBJVScgTlVMTCEhIDopXCIsIHRoaXMuZmllbGQuTmFtZSwgZmllbGRSZWxhdGVkLCB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlbGF0aW9uLmFjdHVhbHZhbHVlID0gdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVsYXRpb24ubG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZFdpdGhSZWxhdGlvbi5RdWVyeVByb3BlcnR5VmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tSZWxhdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sMjAwKTtcclxuXHJcblxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gTk9OIEUnIE5VTEwhISA6KVwiLCB0aGlzLmZpZWxkLk5hbWUsIGZpZWxkUmVsYXRlZCwgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSwgdGhpcy5yZWNvcmQpO1xyXG4gICAgICAgICAgICBmaWVsZFdpdGhSZWxhdGlvbi5RdWVyeVByb3BlcnR5VmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdICE9IG51bGwgPyB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdIDogJyc7XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRpb25zLnB1c2goe2ZpZWxkOiBmaWVsZFJlbGF0ZWQsIGxvYWRlZDogdHJ1ZSwgYWN0dWFsdmFsdWU6IHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF19KTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja1JlbGF0aW9ucygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgfSk7ICAgICAgICBcclxuXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRoaXMuaGF2ZVJlbGF0aW9ucyl7XHJcbiAgICAgICAgdGhpcy5yZWxhdGlvbnNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9ICAgICBcclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGF0YSA9PSBudWxsKXtcclxuXHJcbiAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQoJy4vYXNzZXRzL21vY2t1cHMvbW9ja2VkRnJvbVF1ZXJ5RWRpdG9yX1JFU1VMVF9NQU5ZX05VTUVSSUMudHh0Jywge3Jlc3BvbnNlVHlwZTogJ3RleHQnfSlcclxuICAgICAgLnN1YnNjcmliZShtb2NrZWRGcm9tUXVlcnlFZGl0b3IgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UobW9ja2VkRnJvbVF1ZXJ5RWRpdG9yKTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBKU09OLnBhcnNlKHRoaXMuZGF0YS5yZXN1bHQpO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc1Jlc3VsdCh0aGlzLmRhdGEsW10pO1xyXG4gICAgICAgfSk7ICAgICAgXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHJlbG9hZENvbXBvbmVudCgpe1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJFTE9BRCBDT01QT05FTlQgQ0FMTEVEXCIsIHRoaXMucmVjb3JkLCB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5yZWNvcmQpO1xyXG5cclxuICAgIHRoaXMucmVsb2FkID0gZmFsc2U7XHJcbiAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5yZWNvcmQgPSB0aGlzLnJlY29yZDtcclxuICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmZpZWxkID0gdGhpcy5maWVsZDtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5yZWxvYWQgPSB0cnVlOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiUkVMT0FERUQgUVVFUllFRElUT1JcIik7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSwgMzAwMCk7IFxyXG4gIH1cclxuXHJcbiAgY2hlY2tSZWxhdGlvbnMoKXtcclxuICAgIHRoaXMucmVsYXRpb25zTG9hZGVkID0gdGhpcy5yZWxhdGlvbnMuZmluZCh4ID0+IHgubG9hZGVkKSAhPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgb25FeHRlcm5hbFNRTFJlc3VsdE91dChldjogZXZlbnRPdXQpe1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJSaXN1bHRhdG8gZGVsbCdlbGFib3JhemlvbmUgZGVsIHF1ZXJ5IGVkaXRvcjogb25FeHRlcm5hbFNRTFJlc3VsdE91dFwiLCBldik7XHJcblxyXG4gICAgaWYgKGV2LkJlaGF2aW91cnMuaW5kZXhPZihcInNlbmQtb3V0XCIpICE9IC0xKXsgdGhpcy5vdXQuZW1pdChldik7IH1cclxuXHJcbiAgICB0aGlzLmRhdGEgPSBKU09OLnBhcnNlKGV2LlBhcmFtcy5yZXN1bHQpO1xyXG4gICAgdGhpcy5wcm9jZXNzUmVzdWx0KHRoaXMuZGF0YSxldi5CZWhhdmlvdXJzKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcm9jZXNzUmVzdWx0KGRhdGE6IGFueSwgYmVoYXZpb3VyczogQXJyYXk8c3RyaW5nPiA9IFtdKXtcclxuICAgIFxyXG4gICAgLy9kYXRhIMOoIGwnYXJyYXkgZGVpIHJlY29yZCB0b3JuYXRpIGRhbCBkYlxyXG5cclxuICAgIC8vIHNlIGhvIGRlbGxlIHJpc3Bvc3RlXHJcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgIC8vIGNvbnRyb2xsbyBxdWFudGkgYXR0cmlidXRpIGhhIGxhIHJpc3Bvc3RhXHJcbiAgICAgIHRoaXMua2V5cyA9IE9iamVjdC5rZXlzKGRhdGFbMF0pO1xyXG5cclxuICAgICAgLy8gc2UgaG8gc29sYW1lbnRlIGwnSUQgZSBpbCBjYW1wbyBzY2VsdG8gZWQgaG8gdW5hIHNvbGEgcmlzcG9zdGEgcHJlbmRvIGlsIHZhbG9yZSBkaXJldHRhbWVudGVcclxuICAgICAgaWYgKHRoaXMua2V5cy5sZW5ndGggPT0gMiAmJiBkYXRhLmxlbmd0aCA9PSAxKXtcclxuICAgICAgICAvLyBTZSBobyB1biBzb2xvIG9jY2hpZXR0byBzZWxlemlvbmF0byBlIGxhIHF1ZXJ5IHJlc3RpdHVpc2NlIHVuIHNvbG8gdmFsb3JlLCBsbyBidXR0byBmdW9yaSBhdXRvbWF0aWNhbWVudGVcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibmVsbGEgcmlzcG9zdGEgaG8gc29sYW1lbnRlIGwnSUQgZSBpbCBjYW1wbyBzY2VsdG8gZWQgaG8gdW5hIHNvbGEgcmlzcG9zdGFcIik7XHJcbiAgICAgICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlzZWxlY3Qpe1xyXG4gICAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIm5vbiBtdWx0aXNlbGVjdFwiKTtcclxuICAgICAgICAgIC8vIE5vbiDDqCBtdWx0aXNlbGVjdFxyXG4gICAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGRhdGFbMF1bdGhpcy5rZXlzWzFdXTtcclxuXHJcbiAgICAgICAgICAvLyBDb211bnF1ZSBzaWEgY2kgcG9ydGlhbW8gZGlldHJvIGwnSUQgZGVsbGEgc2VsZXppb25lIGNvbiB1biBjYW1wbyBjdXN0b20sIHB1w7Igc2VtcHJlIHNlcnZpcmVcclxuICAgICAgICAgIGlmKGRhdGFbMF0uaGFzT3duUHJvcGVydHkoXCJJRFwiKSl7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXMgPT0gbnVsbCl7IHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtcyA9IHt9OyB9XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtc1t0aGlzLmZpZWxkLk5hbWUrXCJfX19fSURcIl0gPSBkYXRhWzBdWydJRCddO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5lbWl0KFtkYXRhWzBdW3RoaXMua2V5c1sxXV0sZGF0YVswXVsnSUQnXV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibXVsdGlzZWxlY3RcIik7XHJcbiAgICAgICAgICAvLyBFJyB1biBlbGVuY28gZ2VuZXJpY28gZGJnZXR0ZXIgbXVsdGlzZWxlY3RcclxuICAgICAgICAgIC8vIGRldm8gZmFyZ2xpIGxhIHNydXR0dXJhIGRlbCBkYXRvXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBuZXcgQXJyYXk8TGlzdFZhbHVlRWxlbWVudD4oKTtcclxuICAgICAgICAgIHZhciBzZWxlY3RlZEVsZW1lbnQgPSBuZXcgTGlzdFZhbHVlRWxlbWVudCgpO1xyXG4gICAgICAgICAgc2VsZWN0ZWRFbGVtZW50LklEID0gZGF0YVswXVsnSUQnXTtcclxuICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC5GaWVsZCA9IHRoaXMua2V5c1sxXTtcclxuICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC5LZXkgPSBkYXRhWzBdW3RoaXMua2V5c1sxXV07XHJcbiAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQuVmFsdWUgPSBkYXRhWzBdW3RoaXMua2V5c1sxXV07XHJcblxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzLnB1c2goc2VsZWN0ZWRFbGVtZW50KTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5lbWl0KFt0aGlzLnNlbGVjdGVkRWxlbWVudHNdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEubGVuZ3RoID09IDEgJiYgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSAhPSBudWxsKXtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaG8gdW5hIHNvbGEgcmlzcG9zdGEgZWQgaG8gdW5hIGNvbG9ubmEgZGEgY3VpIMOoIGZvcnphdG8gaWwgcmVjdXBlcm8gZGVsIHZhbG9yZVwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuXHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc011bHRpc2VsZWN0KXtcclxuICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJub24gbXVsdGlzZWxlY3RcIik7XHJcbiAgICAgICAgICAvLyBOb24gw6ggbXVsdGlzZWxlY3RcclxuICAgICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBkYXRhWzBdW3RoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2Uua2V5XTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5lbWl0KFtkYXRhWzBdW3RoaXMua2V5c1sxXSxkYXRhWzBdWydJRCddXV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibXVsdGlzZWxlY3RcIik7XHJcbiAgICAgICAgICAvLyBFJyB1biBlbGVuY28gZ2VuZXJpY28gZGJnZXR0ZXIgbXVsdGlzZWxlY3RcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IG5ldyBBcnJheTxMaXN0VmFsdWVFbGVtZW50PigpO1xyXG4gICAgICAgICAgdmFyIHNlbGVjdGVkRWxlbWVudCA9IG5ldyBMaXN0VmFsdWVFbGVtZW50KCk7XHJcbiAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQuSUQgPSBkYXRhWzBdWydJRCddO1xyXG4gICAgICAgICAgc2VsZWN0ZWRFbGVtZW50LkZpZWxkID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZS5rZXk7XHJcbiAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQuS2V5ID0gZGF0YVswXVt0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlLmtleV07XHJcbiAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQuVmFsdWUgPSBkYXRhWzBdW3RoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2Uua2V5XTtcclxuXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMucHVzaChzZWxlY3RlZEVsZW1lbnQpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlLmVtaXQoW3RoaXMuc2VsZWN0ZWRFbGVtZW50c10pOyAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaG8gcGnDuSBkaSB1bmEgcmlzcG9zdGFcIik7XHJcblxyXG4gICAgICAgIHRoaXMubXVsdGlwbGVWYWx1ZXNUb0Nob29zZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKGJlaGF2aW91cnMuaW5kZXhPZihcIm1hbmFnZS1xdWVzdGlvbi1pbi1kYmdldHRlclwiKSAhPSAtMSl7XHJcbiAgICAgICAgICB0aGlzLnNob3dUYWJsZSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICBpZiAoIXRoaXMuRGlyZWN0bHlPcGVuVGFibGUpe1xyXG4gICAgICAgICAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93VGFibGUgPSB0cnVlOyAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgXHJcbiAgICB9XHJcbiAgICBcclxuICB9XHJcblxyXG4gIHNlbGVjdFZhbHVlKHJvdywga2V5KXtcclxuICAgIHZhciBrZXl1c2VkO1xyXG4gICAgdmFyIHZhbHVlID0gcm93W2tleV07XHJcblxyXG4gICAgdmFyIHZhbHVlVG9CZVNldCA9IFwiXCI7XHJcblxyXG4gICAgaWYodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9PSBudWxsKXtcclxuICAgICAgdmFsdWVUb0JlU2V0ID0gdmFsdWU7XHJcbiAgICAgIGtleXVzZWQgPSBrZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YWx1ZVRvQmVTZXQgPSByb3dbdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZS5rZXldO1xyXG4gICAgICBrZXl1c2VkID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZS5rZXk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbHVlVG9CZVNldCA9PSBudWxsKXsgdmFsdWVUb0JlU2V0ID0gXCJcIjsgfVxyXG5cclxuXHJcbiAgICAvLyBDb211bnF1ZSBzaWEgY2kgcG9ydGlhbW8gZGlldHJvIGwnSUQgZGVsbGEgc2VsZXppb25lIGNvbiB1biBjYW1wbyBjdXN0b20sIHB1w7Igc2VtcHJlIHNlcnZpcmVcclxuICAgIGlmKHJvdy5oYXNPd25Qcm9wZXJ0eShcIklEXCIpKXtcclxuICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtcyA9PSBudWxsKXsgdGhpcy5jb25maWd1cmF0aW9ucy5hZGRpdGlvbmFsUGFyYW1zID0ge307IH1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5hZGRpdGlvbmFsUGFyYW1zW3RoaXMuZmllbGQuTmFtZStcIl9fX19JRFwiXSA9IHJvd1snSUQnXTtcclxuICAgIH1cclxuICAgIFxyXG5cclxuICAgIC8vRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuU3VjY2VzcyhcIlVuIHNvbG8gcmlzdWx0YXRvIHRyb3ZhdG8sIMOoIHN0YXRvIGluc2VyaXRvIGluIGF1dG9tYXRpY29cIik7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzTXVsdGlzZWxlY3Qpe1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibm9uIG11bHRpc2VsZWN0XCIpO1xyXG4gICAgICAvLyBOb24gw6ggbXVsdGlzZWxlY3RcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IHZhbHVlVG9CZVNldDtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlLmVtaXQoW3ZhbHVlVG9CZVNldCxyb3dbJ0lEJ11dKTsgICAgXHJcbiAgICAgIHRoaXMuc2hvd1RhYmxlID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaG8gbXVsdGlzZWxlY3RcIik7XHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnRzLmZpbmQoeCA9PiB4LklEID09IHJvd1snSUQnXSkgPT0gbnVsbCl7XHJcbiAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImhvIHBpw7kgZGkgdW5hIHJpc3Bvc3RhXCIpO1xyXG5cclxuICAgICAgICAvLyBFJyB1biBlbGVuY28gZ2VuZXJpY28gZGJnZXR0ZXIgbXVsdGlzZWxlY3RcclxuICAgICAgICB2YXIgc2VsZWN0ZWRFbGVtZW50ID0gbmV3IExpc3RWYWx1ZUVsZW1lbnQoKTtcclxuICAgICAgICBzZWxlY3RlZEVsZW1lbnQuSUQgPSByb3dbJ0lEJ107XHJcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50LlNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICBzZWxlY3RlZEVsZW1lbnQuRmllbGQgPSBrZXl1c2VkO1xyXG4gICAgICAgIHNlbGVjdGVkRWxlbWVudC5LZXkgPSB2YWx1ZVRvQmVTZXQ7XHJcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50LlZhbHVlID0gdmFsdWVUb0JlU2V0O1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMucHVzaChzZWxlY3RlZEVsZW1lbnQpO1xyXG5cclxuICAgICAgICB2YXIgY29ycmVzcG9uZGluZ0NvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29sLVwiK2tleXVzZWQrXCItaWQtXCIrcm93WydJRCddKTtcclxuICAgICAgICBjb3JyZXNwb25kaW5nQ29sLmNsYXNzTGlzdC5hZGQoXCJyb3ctc2VsZWN0ZWRcIik7XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5maW5kSW5kZXgoeCA9PiB4LklEID09IHJvd1snSUQnXSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzLnNwbGljZShpbmRleCwxKTtcclxuXHJcbiAgICAgICAgdmFyIGNvcnJlc3BvbmRpbmdDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbC1cIitrZXl1c2VkK1wiLWlkLVwiK3Jvd1snSUQnXSk7XHJcbiAgICAgICAgY29ycmVzcG9uZGluZ0NvbC5jbGFzc0xpc3QucmVtb3ZlKFwicm93LXNlbGVjdGVkXCIpOyAgICAgICAgXHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICAvL3RoaXMuc2VsZWN0ZWRWYWx1ZS5lbWl0KFt0aGlzLnNlbGVjdGVkRWxlbWVudHNdKTsgICAgXHJcbiAgICAgICAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgfVxyXG5cclxuICByZW5kZXJTZWxlY3RlZCgpe1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV07XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnRzID09IG51bGwpeyB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBuZXcgQXJyYXk8TGlzdFZhbHVlRWxlbWVudD4oKTsgfVxyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJyZW5kZXJTZWxlY3RlZFwiLCB0aGlzLnNlbGVjdGVkRWxlbWVudHMpO1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID4gMCl7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5mb3JFYWNoKChzZWxlY3RlZEVsZW1lbnQpID0+IHtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbC1cIitzZWxlY3RlZEVsZW1lbnQuRmllbGQrXCItaWQtXCIrc2VsZWN0ZWRFbGVtZW50LklEKS5jbGFzc0xpc3QuYWRkKFwicm93LXNlbGVjdGVkXCIpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBjbG9zZSgpe1xyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlLmVtaXQoW1wiKioqKkNMT1NFKioqKlwiLDBdKTtcclxuICAgIHRoaXMuc2hvd1RhYmxlID0gZmFsc2U7XHJcbiAgfVxyXG4gIFxyXG4gIGRlbGV0ZSgpe1xyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlLmVtaXQoW251bGwsMF0pO1xyXG4gICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuICB9ICBcclxuXHJcbiAgYWN0aXZhdGVUYWJsZSgpe1xyXG4gICAgdGhpcy5zaG93VGFibGUgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVuZGVyU2VsZWN0ZWQoKTtcclxuICAgIH0sMjAwKTtcclxuICB9XHJcblxyXG4gIHJlbG9hZERhdGEoKXtcclxuICAgIHRoaXMuZG9SZWxvYWQuZW1pdChudWxsKTtcclxuICB9ICBcclxuXHJcbiAgc2VsZWN0Q29sdW1uKGtleSl7XHJcbiAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9PSBudWxsKXtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbiA9IGtleTtcclxuICAgICAgdGhpcy5tdWx0aXNlbGVjdFBoYXNlID0gMjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbmZpcm1TZWxlY3Rpb24oKXtcclxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5lbWl0KFt0aGlzLnNlbGVjdGVkRWxlbWVudHNdKTsgXHJcbiAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExpc3RWYWx1ZUVsZW1lbnQge1xyXG4gIElEOiBzdHJpbmcgfCBudW1iZXI7XHJcbiAgU2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgRmllbGQ6IHN0cmluZztcclxuICBLZXk6IHN0cmluZztcclxuICBWYWx1ZTogc3RyaW5nO1xyXG5cclxufVxyXG5cclxuLy8gTyBjb3PDrCBvIHNjaGlhbnRhdG8gYSBtYW5vXHJcbmV4cG9ydCBlbnVtIFF1ZXJ5RWRpdG9yTW9kZUVudW0ge1xyXG4gIFwiQ09ORklHVVJBVE9SXCIgPSAxLFxyXG4gIFwiQ09NUE9TRVJcIiA9IDIsXHJcbiAgXCJSRVNVTFRcIiA9IDNcclxufSIsIjxkaXY+XHJcbiAgICA8bmctdGVtcGxhdGUgW2FwcER5bmFtaWNMb2FkZXJdIFtkYXRhXT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCIgKG91dCk9XCJvbkV4dGVybmFsU1FMUmVzdWx0T3V0KCRldmVudCk7XCIgKm5nSWY9XCJRdWVyeUVkaXRvckNvbXBvbmVudCAhPSBudWxsICYmIHJlbGF0aW9uc0xvYWRlZCAmJiByZWxvYWRcIj48L25nLXRlbXBsYXRlPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJmbG9hdGluZ3RhYmxlIGRyYWdnYWJsZVwiIGNka0RyYWcgKm5nSWY9XCJzaG93VGFibGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPjxtYXQtaWNvbiAoY2xpY2spPVwiY2xvc2UoKVwiPmNsb3NlPC9tYXQtaWNvbj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPjxtYXQtaWNvbiAoY2xpY2spPVwiZGVsZXRlKClcIj5kZWxldGU8L21hdC1pY29uPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPjxtYXQtaWNvbj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5mb1wiPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzTXVsdGlzZWxlY3RcIj5TZWxlemlvbmEgaWwgdmFsb3JlIGRhIHJlZ2lzdHJhcmUuPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNNdWx0aXNlbGVjdCAmJiBtdWx0aXNlbGVjdFBoYXNlID09IDFcIj5TZWxlemlvbmEgdW5hIGNvbG9ubmE8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc011bHRpc2VsZWN0ICYmIG11bHRpc2VsZWN0UGhhc2UgPT0gMiAmJiBzZWxlY3RlZENvbHVtbiAhPSBudWxsICYmIGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID09IG51bGxcIj5IYWkgc2VsZXppb25hdG86IDxiPnt7c2VsZWN0ZWRDb2x1bW4uc3BsaXQoXCJfX1wiKVsxXX19PC9iPi48L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc011bHRpc2VsZWN0ICYmIG11bHRpc2VsZWN0UGhhc2UgPT0gMlwiPlNlbGV6aW9uYSBhbG1lbm8gdW4gZWxlbWVudG8gcHJlc2VudGUgc290dG8gYWxsYSBjb2xvbm5hIHNlbGV6aW9uYXRhPC9zcGFuPiAgICAgICAgXHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc011bHRpc2VsZWN0ICYmIG11bHRpc2VsZWN0UGhhc2UgPT0gMiAmJiBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tY29uZmlybVwiIChjbGljayk9XCJjb25maXJtU2VsZWN0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiA+Y2hlY2s8L21hdC1pY29uPiBDb25mZXJtYSBzZWxlemlvbmVcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgXHJcbiAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZVwiIFtuZ0NsYXNzXT1cInsndGFibGUtbm90Zm9yY2VkJzogZmllbGQuRmllbGRUeXBlICE9IGZpZWxkVHlwZUVudW1bJ0VsZW5jbyBnZW5lcmljbyddICYmIGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID09IG51bGwsICd0YWJsZS1mb3JjZWQnOiBmaWVsZC5GaWVsZFR5cGUgIT0gZmllbGRUeXBlRW51bVsnRWxlbmNvIGdlbmVyaWNvJ10gJiYgZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgIT0gbnVsbCwgJ3RhYmxlLW11bHRpc2VsZWN0LW5vdGZvcmNlZCc6IGZpZWxkLkZpZWxkVHlwZSA9PSBmaWVsZFR5cGVFbnVtWydFbGVuY28gZ2VuZXJpY28nXSAgJiYgZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPT0gbnVsbCwgJ3RhYmxlLW11bHRpc2VsZWN0LWZvcmNlZCc6IGZpZWxkLkZpZWxkVHlwZSA9PSBmaWVsZFR5cGVFbnVtWydFbGVuY28gZ2VuZXJpY28nXSAgJiYgZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgIT0gbnVsbH1cIj5cclxuICAgICAgICA8dHI+PHRoICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5czsgbGV0IGZpcnN0ID0gZmlyc3RcIiAoY2xpY2spPVwic2VsZWN0Q29sdW1uKGtleSlcIiBpZD1cImhlYWRjb2wte3trZXl9fVwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpcnN0XCI+e3trZXl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZmlyc3RcIj57e2tleS5zcGxpdChcIl9fXCIpWzFdfX08L3NwYW4+XHJcbiAgICAgICAgPC90aD48L3RyPlxyXG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIGRhdGFcIiBjbGFzcz1cInJvd3NcIj5cclxuICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5c1wiIChjbGljayk9XCJzZWxlY3RWYWx1ZShyb3csIGtleSlcIiBpZD1cImNvbC17e2tleX19LWlkLXt7cm93WydJRCddfX1cIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gXHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvd1trZXldICE9IG51bGwgJiYgcm93W2tleV0udG9TdHJpbmcoKS5sZW5ndGggPD0gMTAwXCIgW2lubmVySFRNTF09XCJyb3dba2V5XVwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj4gXHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvd1trZXldICE9IG51bGwgJiYgcm93W2tleV0udG9TdHJpbmcoKS5sZW5ndGggPiAxMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e3Jvd1trZXldICE9IG51bGwgPyByb3dba2V5XS50b1N0cmluZygpLnN1YnN0cmluZygwLDEwMCkgOiAnJ319XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvd1trZXldICE9IG51bGwgJiYgcm93W2tleV0udG9TdHJpbmcoKS5sZW5ndGggPiAxMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAuLi5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwicm93W2tleV1cIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgIDwvdGFibGU+XHJcblxyXG4gICAgPCEtLSBcclxuICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLW5vdGZvcmNlZFwiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPT0gbnVsbFwiPlxyXG4gICAgICAgIDx0cj48dGggKm5nRm9yPVwibGV0IGtleSBvZiBrZXlzOyBsZXQgZmlyc3QgPSBmaXJzdFwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpcnN0XCI+e3trZXl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZmlyc3RcIj57e2tleS5zcGxpdChcIl9fXCIpWzFdfX08L3NwYW4+XHJcbiAgICAgICAgPC90aD48L3RyPlxyXG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIGRhdGFcIiBjbGFzcz1cInJvd3NcIj5cclxuICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5c1wiIChjbGljayk9XCJzZWxlY3RWYWx1ZU5vdEZvcmNlZChyb3dba2V5XSlcIj5cclxuICAgICAgICAgICAgICAgIHt7cm93W2tleV0gIT0gbnVsbCA/IHJvd1trZXldLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsMTAwKSA6ICcnfX1cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93W2tleV0gIT0gbnVsbCAmJiByb3dba2V5XS50b1N0cmluZygpLmxlbmd0aCA+IDEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIC4uLlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG5cclxuICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWZvcmNlZFwiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgIT0gbnVsbFwiPlxyXG4gICAgICAgIDx0cj48dGggKm5nRm9yPVwibGV0IGtleSBvZiBrZXlzOyBsZXQgZmlyc3QgPSBmaXJzdFwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpcnN0XCI+e3trZXl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZmlyc3RcIj57e2tleS5zcGxpdChcIl9fXCIpWzFdfX08L3NwYW4+XHJcbiAgICAgICAgPC90aD48L3RyPlxyXG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIGRhdGFcIiBjbGFzcz1cInJvd3NcIiAoY2xpY2spPVwic2VsZWN0VmFsdWVGb3JjZWQocm93KVwiPlxyXG4gICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlzXCI+XHJcbiAgICAgICAgICAgICAgICB7e3Jvd1trZXldICE9IG51bGwgPyByb3dba2V5XS50b1N0cmluZygpLnN1YnN0cmluZygwLDEwMCkgOiAnJ319XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvd1trZXldICE9IG51bGwgJiYgcm93W2tleV0udG9TdHJpbmcoKS5sZW5ndGggPiAxMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAuLi5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC90YWJsZT5cclxuICAgIC0tPlxyXG5cclxuPC9kaXY+XHJcblxyXG48c3BhbiAqbmdJZj1cInZhbHVlICE9IG51bGxcIj57e3ZhbHVlfX08L3NwYW4+XHJcblxyXG48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1hcnJvdy1kb3duXCIgKGNsaWNrKT1cImFjdGl2YXRlVGFibGUoKVwiICpuZ0lmPVwibXVsdGlwbGVWYWx1ZXNUb0Nob29zZVwiPlxyXG4gICAgPG1hdC1pY29uPmtleWJvYXJkX2Fycm93X2Rvd248L21hdC1pY29uPlxyXG48L2J1dHRvbj5cclxuPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tYXJyb3ctZG93blwiIChjbGljayk9XCJyZWxvYWREYXRhKClcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckhhc1Jlc2V0QnV0dG9uXCI+XHJcbiAgICA8bWF0LWljb24+bG9vcDwvbWF0LWljb24+XHJcbjwvYnV0dG9uPiJdfQ==
385
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGJnZXR0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2RiZ2V0dGVyL2RiZ2V0dGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9kYmdldHRlci9kYmdldHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3ZFLE9BQU8sRUFBaUMsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7O0FBT2pFLE1BQU0sT0FBTyxpQkFBaUI7SUF1QzVCLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFyQ2pDLG1CQUFjLEdBQStCLElBQUksQ0FBQztRQUlsRCxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyx5QkFBb0IsR0FBK0IsSUFBSSxDQUFDLENBQUMsbUNBQW1DO1FBQzVGLFNBQUksR0FBUSxJQUFJLENBQUMsQ0FBQyx3Q0FBd0M7UUFFekQsUUFBRyxHQUEyQixJQUFJLFlBQVksRUFBWSxDQUFDO1FBQzNELGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDM0QsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRWhFLFNBQUksR0FBa0IsSUFBSSxDQUFDO1FBQzNCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFHeEIsY0FBUyxHQUFZLEtBQUssQ0FBQztR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O2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUksR0FBRztzQkFBWixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTs7QUErWlQsTUFBTSxPQUFPLGdCQUFnQjtDQU81QjtBQUVELDZCQUE2QjtBQUM3QixNQUFNLENBQU4sSUFBWSxtQkFJWDtBQUpELFdBQVksbUJBQW1CO0lBQzdCLDZFQUFrQixDQUFBO0lBQ2xCLHFFQUFjLENBQUE7SUFDZCxpRUFBWSxDQUFBO0FBQ2QsQ0FBQyxFQUpXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFJOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2R5bmFtaWMtbG9hZGVyL2R5bmFtaWMtbG9hZGVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRGF0YUdldHRlclR5cGVFbnVtLCBGaWVsZFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2RiZ2V0dGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGJnZXR0ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RiZ2V0dGVyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIERiZ2V0dGVyQ29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnID0gbnVsbDtcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtO1xyXG4gIEBJbnB1dCgpIGZpZWxkOiBCYXNlRmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBEaXJlY3RseU9wZW5UYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIFF1ZXJ5RWRpdG9yQ29tcG9uZW50OiBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSA9IG51bGw7IC8vIEwnaW50ZXJvIGNvbXBvbmVudGUgcXVlcnkgRWRpdG9yXHJcbiAgQElucHV0KCkgZGF0YTogYW55ID0gbnVsbDsgLy8gTG8gZmFjY2lhbW8gZnVuemlvbmFyZSB0aXBvIEVRUC1UQUJMRVxyXG5cclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRWYWx1ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZG9SZWxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7ICBcclxuXHJcbiAga2V5czogQXJyYXk8c3RyaW5nPiA9IG51bGw7XHJcbiAgbG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmFsdWU6IGFueTtcclxuXHJcbiAgc2hvd1RhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGhhdmVRdWVzdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoYXZlUmVsYXRpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcmVsb2FkOiBib29sZWFuID0gdHJ1ZTtcclxuICBtdWx0aXBsZVZhbHVlc1RvQ2hvb3NlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGludGVydmFsOiBhbnk7XHJcblxyXG4gIHJlbGF0aW9uczogQXJyYXk8e2ZpZWxkOiBzdHJpbmcsIGxvYWRlZDogYm9vbGVhbiwgYWN0dWFsdmFsdWU6IGFueX0+ID0gbmV3IEFycmF5PHtmaWVsZDogc3RyaW5nLCBsb2FkZWQ6IGJvb2xlYW4sIGFjdHVhbHZhbHVlOiBhbnl9PigpO1xyXG4gIHJlbGF0aW9uc0xvYWRlZDogYm9vbGVhbjtcclxuICBiYWNrdXBRdWVzdGlvbkZpZWxkczogQXJyYXk8c3RyaW5nPiA9IG51bGw7XHJcblxyXG4gIGlzTXVsdGlzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtdWx0aXNlbGVjdFBoYXNlOiBudW1iZXIgPSAxO1xyXG4gIHNlbGVjdGVkQ29sdW1uOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHNlbGVjdGVkRWxlbWVudHM6IEFycmF5PExpc3RWYWx1ZUVsZW1lbnQ+ID0gbmV3IEFycmF5PExpc3RWYWx1ZUVsZW1lbnQ+KCk7XHJcblxyXG4gIGZpZWxkVHlwZUVudW0gPSBGaWVsZFR5cGVFbnVtO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCItLS0gSU5TSURFIERCR0VUVEVSIC0tLVwiKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2cobnVsbCwgdGhpcy5mb3JtKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2cobnVsbCwgdGhpcy5yZWNvcmQpO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhudWxsLCB0aGlzLmZpZWxkKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2cobnVsbCwgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudCk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiLS0tIElOU0lERSBEQkdFVFRFUiAtLS1cIik7XHJcblxyXG4gICAgICAvLyBJbml6aW8gUmV0cm9jb21wYXRpYmlsaXTDoFxyXG5cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckhhc1Jlc2V0QnV0dG9uID09PSBcInVuZGVmaW5lZFwiKXtcclxuICAgICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckhhc1Jlc2V0QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgfSAgICAgXHJcblxyXG4gICAgICAvLyBGaW5lIFJldHJvY29tcGF0aWJpbGl0w6AgICAgXHJcblxyXG4gICAgICAvLyBJbml6aW86IFRhYmVsbGEgbXVsdGlzZWxlY3Q/XHJcblxyXG4gICAgICBpZiAodGhpcy5maWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnRWxlbmNvIGdlbmVyaWNvJ10pe1xyXG4gICAgICAgIHRoaXMuaXNNdWx0aXNlbGVjdCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlICE9IG51bGwpe1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbiA9IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2Uua2V5O1xyXG4gICAgICAgICAgdGhpcy5tdWx0aXNlbGVjdFBoYXNlID0gMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV07ICAgIFxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudHMgPT0gbnVsbCl7IHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IG5ldyBBcnJheTxMaXN0VmFsdWVFbGVtZW50PigpOyB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEZpbmU6IFRhYmVsbGEgbXVsdGlzZWxlY3Q/XHJcblxyXG4gICAgaWYgKHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQgIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLm1vZGUgPSBRdWVyeUVkaXRvck1vZGVFbnVtLlJFU1VMVDtcclxuICAgICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcuZmllbGQgPSB0aGlzLmZpZWxkO1xyXG4gICAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5yZWNvcmQgPSB0aGlzLnJlY29yZDtcclxuICAgICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcuaW5Db25maWcgPSB0aGlzLmluQ29uZmlnO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUub3BlbmVkRmllbGRzLmZpbmQoeCA9PiB0eXBlb2YgeC5RdWVyeVByb3BlcnR5VmFsdWUgIT09IFwib2JqZWN0XCIgJiYgeC5RdWVyeVByb3BlcnR5VmFsdWUgPT0gJz8nKSAhPSBudWxsKXtcclxuICAgICAgICBcclxuICAgICAgICAvLyBJbCBjYW1wbyBoYSBhbG1lbm8gdW4gdmFsb3JlIGNvbiBcIj9cIlxyXG4gICAgICAgIHRoaXMuaGF2ZVF1ZXN0aW9ucyA9IHRydWU7XHJcblxyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJDSEVDS0lORyBCQUNLVVBTIE9QRU5FRCBGSUVMRFMuLi4uXCIsIHRoaXMuYmFja3VwUXVlc3Rpb25GaWVsZHMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5iYWNrdXBRdWVzdGlvbkZpZWxkcyA9PSBudWxsKXtcclxuICAgICAgICAgIHRoaXMuYmFja3VwUXVlc3Rpb25GaWVsZHMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZS5vcGVuZWRGaWVsZHMuZm9yRWFjaCgocnFmKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFja3VwUXVlc3Rpb25GaWVsZHMucHVzaChycWYuUHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZS5vcGVuZWRGaWVsZHMuZmluZCh4ID0+IHR5cGVvZiB4LlF1ZXJ5UHJvcGVydHlWYWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB4LlF1ZXJ5UHJvcGVydHlWYWx1ZS5pbmRleE9mKCchJykgIT0gLTEpICE9IG51bGwpe1xyXG5cclxuICAgICAgICAvLyBJbCBjYW1wbyBoYSBhbG1lbm8gdW4gdmFsb3JlIGNvbiBcIiFub21lcmVsYXppb25lXCJcclxuICAgICAgICB0aGlzLmhhdmVSZWxhdGlvbnMgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlLm9wZW5lZEZpZWxkcy5maWx0ZXIoeCA9PiB4LlF1ZXJ5UHJvcGVydHlWYWx1ZS5pbmRleE9mKCchJykgIT0gLTEpLmZvckVhY2goKGZpZWxkV2l0aFJlbGF0aW9uKSA9PiB7XHJcblxyXG4gICAgICAgICAgdmFyIGZpZWxkUmVsYXRlZCA9IGZpZWxkV2l0aFJlbGF0aW9uLlF1ZXJ5UHJvcGVydHlWYWx1ZS5yZXBsYWNlKFwiIVwiLFwiXCIpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdID09IG51bGwpe1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwidGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSBFJyBOVUxMXCIsIHRoaXMuZmllbGQuTmFtZSwgZmllbGRSZWxhdGVkLCB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRpb25zLnB1c2goe2ZpZWxkOiBmaWVsZFJlbGF0ZWQsIGxvYWRlZDogZmFsc2UsIGFjdHVhbHZhbHVlOiB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdfSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tSZWxhdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwidGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSBDSEVDS1wiLCB0aGlzLmZpZWxkLk5hbWUsIGZpZWxkUmVsYXRlZCwgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSwgdGhpcy5yZWNvcmQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRSZWxhdGlvbiA9IHRoaXMucmVsYXRpb25zLmZpbmQoeCA9PiB4LmZpZWxkID09IGZpZWxkUmVsYXRlZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFJlbGF0aW9uICE9IG51bGwpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gR2VzdGlvbmUgZGVpIGNhbWJpIGRpIHZhbG9yZSBkZWkgY2FtcGkgcmVsYXppb25hdGlcclxuICAgICAgICAgICAgICAgICAgLy8gSWwgY2FtcG8gcmVsYXppb25hdG8gSU5JWklBTE1FTlRFIE5PTiBFJyBOVUxMLCBlIGNhbWJpYSB2YWxvcmUgaW4gcXVhbGNvc2EgY2hlIE5PTiBFJyBOVUxMXHJcbiAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UmVsYXRpb24uYWN0dWFsdmFsdWUgIT0gbnVsbCAmJiB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdICE9IG51bGwgJiYgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSAhPSBjdXJyZW50UmVsYXRpb24uYWN0dWFsdmFsdWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJ0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdIEhBIENBTUJJQVRPIFZBTE9SRSEhXCIsIHRoaXMuZmllbGQuTmFtZSwgZmllbGRSZWxhdGVkLCB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlbGF0aW9uLmFjdHVhbHZhbHVlID0gdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVsYXRpb24ubG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZFdpdGhSZWxhdGlvbi5RdWVyeVByb3BlcnR5VmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIElsIGNhbXBvIHJlbGF6aW9uYXRvIElOSVpJQUxNRU5URSBOT04gRScgTlVMTCwgZSBjYW1iaWEgdmFsb3JlIElOIE5VTExcclxuICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudFJlbGF0aW9uLmFjdHVhbHZhbHVlICE9IG51bGwgJiYgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwidGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSBFJyBUT1JOQVRPIEFEIEVTU0VSRSBOVUxMISEgOihcIiwgdGhpcy5maWVsZC5OYW1lLCBmaWVsZFJlbGF0ZWQsIHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0sIHRoaXMucmVjb3JkKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVsYXRpb24uYWN0dWFsdmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWxhdGlvbi5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkV2l0aFJlbGF0aW9uLlF1ZXJ5UHJvcGVydHlWYWx1ZSA9IFwiIVwiK2ZpZWxkUmVsYXRlZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVjdXBlcm8gQmFja3VwXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWNrdXBRdWVzdGlvbkZpZWxkcy5mb3JFYWNoKChib2YpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUub3BlbmVkRmllbGRzLmZpbmQoeCA9PiB4LlByb3BlcnR5TmFtZSA9PSBib2YpLlF1ZXJ5UHJvcGVydHlWYWx1ZSA9IFwiP1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZENvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBJbCBjYW1wbyByZWxhemlvbmF0byBJTklaSUFMTUVOVEUgRScgTlVMTCwgZSBjYW1iaWEgdmFsb3JlXHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRSZWxhdGlvbi5hY3R1YWx2YWx1ZSA9PSBudWxsICYmIHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gTk9OIEUnIFBJVScgTlVMTCEhIDopXCIsIHRoaXMuZmllbGQuTmFtZSwgZmllbGRSZWxhdGVkLCB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlbGF0aW9uLmFjdHVhbHZhbHVlID0gdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVsYXRpb24ubG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZFdpdGhSZWxhdGlvbi5RdWVyeVByb3BlcnR5VmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tSZWxhdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sMjAwKTtcclxuXHJcblxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gTk9OIEUnIE5VTEwhISA6KVwiLCB0aGlzLmZpZWxkLk5hbWUsIGZpZWxkUmVsYXRlZCwgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSwgdGhpcy5yZWNvcmQpO1xyXG4gICAgICAgICAgICBmaWVsZFdpdGhSZWxhdGlvbi5RdWVyeVByb3BlcnR5VmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdICE9IG51bGwgPyB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdIDogJyc7XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRpb25zLnB1c2goe2ZpZWxkOiBmaWVsZFJlbGF0ZWQsIGxvYWRlZDogdHJ1ZSwgYWN0dWFsdmFsdWU6IHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF19KTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja1JlbGF0aW9ucygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgfSk7ICAgICAgICBcclxuXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRoaXMuaGF2ZVJlbGF0aW9ucyl7XHJcbiAgICAgICAgdGhpcy5yZWxhdGlvbnNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9ICAgICBcclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGF0YSA9PSBudWxsKXtcclxuXHJcbiAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQoJy4vYXNzZXRzL21vY2t1cHMvbW9ja2VkRnJvbVF1ZXJ5RWRpdG9yX1JFU1VMVF9NQU5ZX05VTUVSSUMudHh0Jywge3Jlc3BvbnNlVHlwZTogJ3RleHQnfSlcclxuICAgICAgLnN1YnNjcmliZShtb2NrZWRGcm9tUXVlcnlFZGl0b3IgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UobW9ja2VkRnJvbVF1ZXJ5RWRpdG9yKTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBKU09OLnBhcnNlKHRoaXMuZGF0YS5yZXN1bHQpO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc1Jlc3VsdCh0aGlzLmRhdGEsW10pO1xyXG4gICAgICAgfSk7ICAgICAgXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHJlbG9hZENvbXBvbmVudCgpe1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJFTE9BRCBDT01QT05FTlQgQ0FMTEVEXCIsIHRoaXMucmVjb3JkLCB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5yZWNvcmQpO1xyXG5cclxuICAgIHRoaXMucmVsb2FkID0gZmFsc2U7XHJcbiAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5yZWNvcmQgPSB0aGlzLnJlY29yZDtcclxuICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmZpZWxkID0gdGhpcy5maWVsZDtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5yZWxvYWQgPSB0cnVlOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiUkVMT0FERUQgUVVFUllFRElUT1JcIik7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSwgMzAwMCk7IFxyXG4gIH1cclxuXHJcbiAgY2hlY2tSZWxhdGlvbnMoKXtcclxuICAgIHRoaXMucmVsYXRpb25zTG9hZGVkID0gdGhpcy5yZWxhdGlvbnMuZmluZCh4ID0+IHgubG9hZGVkKSAhPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgb25FeHRlcm5hbFNRTFJlc3VsdE91dChldjogZXZlbnRPdXQpe1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJSaXN1bHRhdG8gZGVsbCdlbGFib3JhemlvbmUgZGVsIHF1ZXJ5IGVkaXRvcjogb25FeHRlcm5hbFNRTFJlc3VsdE91dFwiLCBldik7XHJcblxyXG4gICAgaWYgKGV2LkJlaGF2aW91cnMuaW5kZXhPZihcInNlbmQtb3V0XCIpICE9IC0xKXsgdGhpcy5vdXQuZW1pdChldik7IH1cclxuXHJcbiAgICB0aGlzLmRhdGEgPSBKU09OLnBhcnNlKGV2LlBhcmFtcy5yZXN1bHQpO1xyXG4gICAgdGhpcy5wcm9jZXNzUmVzdWx0KHRoaXMuZGF0YSxldi5CZWhhdmlvdXJzKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcm9jZXNzUmVzdWx0KGRhdGE6IGFueSwgYmVoYXZpb3VyczogQXJyYXk8c3RyaW5nPiA9IFtdKXtcclxuICAgIFxyXG4gICAgLy9kYXRhIMOoIGwnYXJyYXkgZGVpIHJlY29yZCB0b3JuYXRpIGRhbCBkYlxyXG5cclxuICAgIC8vIHNlIGhvIGRlbGxlIHJpc3Bvc3RlXHJcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgIC8vIGNvbnRyb2xsbyBxdWFudGkgYXR0cmlidXRpIGhhIGxhIHJpc3Bvc3RhXHJcbiAgICAgIHRoaXMua2V5cyA9IE9iamVjdC5rZXlzKGRhdGFbMF0pO1xyXG5cclxuICAgICAgLy8gc2UgaG8gc29sYW1lbnRlIGwnSUQgZSBpbCBjYW1wbyBzY2VsdG8gZWQgaG8gdW5hIHNvbGEgcmlzcG9zdGEgcHJlbmRvIGlsIHZhbG9yZSBkaXJldHRhbWVudGVcclxuICAgICAgaWYgKHRoaXMua2V5cy5sZW5ndGggPT0gMiAmJiBkYXRhLmxlbmd0aCA9PSAxKXtcclxuICAgICAgICAvLyBTZSBobyB1biBzb2xvIG9jY2hpZXR0byBzZWxlemlvbmF0byBlIGxhIHF1ZXJ5IHJlc3RpdHVpc2NlIHVuIHNvbG8gdmFsb3JlLCBsbyBidXR0byBmdW9yaSBhdXRvbWF0aWNhbWVudGVcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibmVsbGEgcmlzcG9zdGEgaG8gc29sYW1lbnRlIGwnSUQgZSBpbCBjYW1wbyBzY2VsdG8gZWQgaG8gdW5hIHNvbGEgcmlzcG9zdGFcIik7XHJcbiAgICAgICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlzZWxlY3Qpe1xyXG4gICAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIm5vbiBtdWx0aXNlbGVjdFwiKTtcclxuICAgICAgICAgIC8vIE5vbiDDqCBtdWx0aXNlbGVjdFxyXG4gICAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGRhdGFbMF1bdGhpcy5rZXlzWzFdXTtcclxuXHJcbiAgICAgICAgICAvLyBDb211bnF1ZSBzaWEgY2kgcG9ydGlhbW8gZGlldHJvIGwnSUQgZGVsbGEgc2VsZXppb25lIGNvbiB1biBjYW1wbyBjdXN0b20sIHB1w7Igc2VtcHJlIHNlcnZpcmVcclxuICAgICAgICAgIGlmKGRhdGFbMF0uaGFzT3duUHJvcGVydHkoXCJJRFwiKSl7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXMgPT0gbnVsbCl7IHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtcyA9IHt9OyB9XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtc1t0aGlzLmZpZWxkLk5hbWUrXCJfX19fSURcIl0gPSBkYXRhWzBdWydJRCddO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5lbWl0KFtkYXRhWzBdW3RoaXMua2V5c1sxXV0sZGF0YVswXVsnSUQnXV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibXVsdGlzZWxlY3RcIik7XHJcbiAgICAgICAgICAvLyBFJyB1biBlbGVuY28gZ2VuZXJpY28gZGJnZXR0ZXIgbXVsdGlzZWxlY3RcclxuICAgICAgICAgIC8vIGRldm8gZmFyZ2xpIGxhIHNydXR0dXJhIGRlbCBkYXRvXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBuZXcgQXJyYXk8TGlzdFZhbHVlRWxlbWVudD4oKTtcclxuICAgICAgICAgIHZhciBzZWxlY3RlZEVsZW1lbnQgPSBuZXcgTGlzdFZhbHVlRWxlbWVudCgpO1xyXG4gICAgICAgICAgc2VsZWN0ZWRFbGVtZW50LklEID0gZGF0YVswXVsnSUQnXTtcclxuICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC5GaWVsZCA9IHRoaXMua2V5c1sxXTtcclxuICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC5LZXkgPSBkYXRhWzBdW3RoaXMua2V5c1sxXV07XHJcbiAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQuVmFsdWUgPSBkYXRhWzBdW3RoaXMua2V5c1sxXV07XHJcblxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzLnB1c2goc2VsZWN0ZWRFbGVtZW50KTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5lbWl0KFt0aGlzLnNlbGVjdGVkRWxlbWVudHNdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEubGVuZ3RoID09IDEgJiYgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSAhPSBudWxsKXtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaG8gdW5hIHNvbGEgcmlzcG9zdGEgZWQgaG8gdW5hIGNvbG9ubmEgZGEgY3VpIMOoIGZvcnphdG8gaWwgcmVjdXBlcm8gZGVsIHZhbG9yZVwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuXHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc011bHRpc2VsZWN0KXtcclxuICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJub24gbXVsdGlzZWxlY3RcIik7XHJcbiAgICAgICAgICAvLyBOb24gw6ggbXVsdGlzZWxlY3RcclxuICAgICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBkYXRhWzBdW3RoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2Uua2V5XTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5lbWl0KFtkYXRhWzBdW3RoaXMua2V5c1sxXSxkYXRhWzBdWydJRCddXV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibXVsdGlzZWxlY3RcIik7XHJcbiAgICAgICAgICAvLyBFJyB1biBlbGVuY28gZ2VuZXJpY28gZGJnZXR0ZXIgbXVsdGlzZWxlY3RcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IG5ldyBBcnJheTxMaXN0VmFsdWVFbGVtZW50PigpO1xyXG4gICAgICAgICAgdmFyIHNlbGVjdGVkRWxlbWVudCA9IG5ldyBMaXN0VmFsdWVFbGVtZW50KCk7XHJcbiAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQuSUQgPSBkYXRhWzBdWydJRCddO1xyXG4gICAgICAgICAgc2VsZWN0ZWRFbGVtZW50LkZpZWxkID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZS5rZXk7XHJcbiAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQuS2V5ID0gZGF0YVswXVt0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlLmtleV07XHJcbiAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQuVmFsdWUgPSBkYXRhWzBdW3RoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2Uua2V5XTtcclxuXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMucHVzaChzZWxlY3RlZEVsZW1lbnQpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlLmVtaXQoW3RoaXMuc2VsZWN0ZWRFbGVtZW50c10pOyAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaG8gcGnDuSBkaSB1bmEgcmlzcG9zdGFcIik7XHJcblxyXG4gICAgICAgIHRoaXMubXVsdGlwbGVWYWx1ZXNUb0Nob29zZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKGJlaGF2aW91cnMuaW5kZXhPZihcIm1hbmFnZS1xdWVzdGlvbi1pbi1kYmdldHRlclwiKSAhPSAtMSl7XHJcbiAgICAgICAgICB0aGlzLnNob3dUYWJsZSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICBpZiAoIXRoaXMuRGlyZWN0bHlPcGVuVGFibGUpe1xyXG4gICAgICAgICAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93VGFibGUgPSB0cnVlOyAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgXHJcbiAgICB9XHJcbiAgICBcclxuICB9XHJcblxyXG4gIHNlbGVjdFZhbHVlKHJvdywga2V5KXtcclxuICAgIHZhciBrZXl1c2VkO1xyXG4gICAgdmFyIHZhbHVlID0gcm93W2tleV07XHJcblxyXG4gICAgdmFyIHZhbHVlVG9CZVNldCA9IFwiXCI7XHJcblxyXG4gICAgaWYodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9PSBudWxsKXtcclxuICAgICAgdmFsdWVUb0JlU2V0ID0gdmFsdWU7XHJcbiAgICAgIGtleXVzZWQgPSBrZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YWx1ZVRvQmVTZXQgPSByb3dbdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZS5rZXldO1xyXG4gICAgICBrZXl1c2VkID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZS5rZXk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbHVlVG9CZVNldCA9PSBudWxsKXsgdmFsdWVUb0JlU2V0ID0gXCJcIjsgfVxyXG5cclxuXHJcbiAgICAvLyBDb211bnF1ZSBzaWEgY2kgcG9ydGlhbW8gZGlldHJvIGwnSUQgZGVsbGEgc2VsZXppb25lIGNvbiB1biBjYW1wbyBjdXN0b20sIHB1w7Igc2VtcHJlIHNlcnZpcmVcclxuICAgIGlmKHJvdy5oYXNPd25Qcm9wZXJ0eShcIklEXCIpKXtcclxuICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtcyA9PSBudWxsKXsgdGhpcy5jb25maWd1cmF0aW9ucy5hZGRpdGlvbmFsUGFyYW1zID0ge307IH1cclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5hZGRpdGlvbmFsUGFyYW1zW3RoaXMuZmllbGQuTmFtZStcIl9fX19JRFwiXSA9IHJvd1snSUQnXTtcclxuICAgIH1cclxuICAgIFxyXG5cclxuICAgIC8vRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuU3VjY2VzcyhcIlVuIHNvbG8gcmlzdWx0YXRvIHRyb3ZhdG8sIMOoIHN0YXRvIGluc2VyaXRvIGluIGF1dG9tYXRpY29cIik7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzTXVsdGlzZWxlY3Qpe1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibm9uIG11bHRpc2VsZWN0XCIpO1xyXG4gICAgICAvLyBOb24gw6ggbXVsdGlzZWxlY3RcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IHZhbHVlVG9CZVNldDtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlLmVtaXQoW3ZhbHVlVG9CZVNldCxyb3dbJ0lEJ11dKTsgICAgXHJcbiAgICAgIHRoaXMuc2hvd1RhYmxlID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaG8gbXVsdGlzZWxlY3RcIik7XHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnRzLmZpbmQoeCA9PiB4LklEID09IHJvd1snSUQnXSkgPT0gbnVsbCl7XHJcbiAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImhvIHBpw7kgZGkgdW5hIHJpc3Bvc3RhXCIpO1xyXG5cclxuICAgICAgICAvLyBFJyB1biBlbGVuY28gZ2VuZXJpY28gZGJnZXR0ZXIgbXVsdGlzZWxlY3RcclxuICAgICAgICB2YXIgc2VsZWN0ZWRFbGVtZW50ID0gbmV3IExpc3RWYWx1ZUVsZW1lbnQoKTtcclxuICAgICAgICBzZWxlY3RlZEVsZW1lbnQuSUQgPSByb3dbJ0lEJ107XHJcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50LlNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICBzZWxlY3RlZEVsZW1lbnQuRmllbGQgPSBrZXl1c2VkO1xyXG4gICAgICAgIHNlbGVjdGVkRWxlbWVudC5LZXkgPSB2YWx1ZVRvQmVTZXQ7XHJcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50LlZhbHVlID0gdmFsdWVUb0JlU2V0O1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMucHVzaChzZWxlY3RlZEVsZW1lbnQpO1xyXG5cclxuICAgICAgICB2YXIgY29ycmVzcG9uZGluZ0NvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29sLVwiK2tleXVzZWQrXCItaWQtXCIrcm93WydJRCddKTtcclxuICAgICAgICBpZiAoY29ycmVzcG9uZGluZ0NvbCA9PSBudWxsKXsgY29ycmVzcG9uZGluZ0NvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29sLVwiK2tleStcIi1pZC1cIityb3dbJ0lEJ10pOyB9XHJcbiAgICAgICAgY29ycmVzcG9uZGluZ0NvbC5jbGFzc0xpc3QuYWRkKFwicm93LXNlbGVjdGVkXCIpO1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnNlbGVjdGVkRWxlbWVudHMuZmluZEluZGV4KHggPT4geC5JRCA9PSByb3dbJ0lEJ10pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5zcGxpY2UoaW5kZXgsMSk7XHJcblxyXG4gICAgICAgIHZhciBjb3JyZXNwb25kaW5nQ29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb2wtXCIra2V5dXNlZCtcIi1pZC1cIityb3dbJ0lEJ10pO1xyXG4gICAgICAgIGlmIChjb3JyZXNwb25kaW5nQ29sID09IG51bGwpeyBjb3JyZXNwb25kaW5nQ29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb2wtXCIra2V5K1wiLWlkLVwiK3Jvd1snSUQnXSk7IH1cclxuICAgICAgICBjb3JyZXNwb25kaW5nQ29sLmNsYXNzTGlzdC5yZW1vdmUoXCJyb3ctc2VsZWN0ZWRcIik7ICAgICAgICBcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8vdGhpcy5zZWxlY3RlZFZhbHVlLmVtaXQoW3RoaXMuc2VsZWN0ZWRFbGVtZW50c10pOyAgICBcclxuICAgICAgICAgICAgXHJcbiAgICB9XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHJlbmRlclNlbGVjdGVkKCl7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudHMgPT0gbnVsbCl7IHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IG5ldyBBcnJheTxMaXN0VmFsdWVFbGVtZW50PigpOyB9XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcInJlbmRlclNlbGVjdGVkXCIsIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwKXtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzLmZvckVhY2goKHNlbGVjdGVkRWxlbWVudCkgPT4ge1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29sLVwiK3NlbGVjdGVkRWxlbWVudC5GaWVsZCtcIi1pZC1cIitzZWxlY3RlZEVsZW1lbnQuSUQpLmNsYXNzTGlzdC5hZGQoXCJyb3ctc2VsZWN0ZWRcIik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGNsb3NlKCl7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUuZW1pdChbXCIqKioqQ0xPU0UqKioqXCIsMF0pO1xyXG4gICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuICB9XHJcbiAgXHJcbiAgZGVsZXRlKCl7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUuZW1pdChbbnVsbCwwXSk7XHJcbiAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xyXG4gIH0gIFxyXG5cclxuICBhY3RpdmF0ZVRhYmxlKCl7XHJcbiAgICB0aGlzLnNob3dUYWJsZSA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZW5kZXJTZWxlY3RlZCgpO1xyXG4gICAgfSwyMDApO1xyXG4gIH1cclxuXHJcbiAgcmVsb2FkRGF0YSgpe1xyXG4gICAgdGhpcy5kb1JlbG9hZC5lbWl0KG51bGwpO1xyXG4gIH0gIFxyXG5cclxuICBzZWxlY3RDb2x1bW4oa2V5KXtcclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID09IG51bGwpe1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uID0ga2V5O1xyXG4gICAgICB0aGlzLm11bHRpc2VsZWN0UGhhc2UgPSAyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uZmlybVNlbGVjdGlvbigpe1xyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlLmVtaXQoW3RoaXMuc2VsZWN0ZWRFbGVtZW50c10pOyBcclxuICAgIHRoaXMuc2hvd1RhYmxlID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdFZhbHVlRWxlbWVudCB7XHJcbiAgSUQ6IHN0cmluZyB8IG51bWJlcjtcclxuICBTZWxlY3RlZDogYm9vbGVhbjtcclxuICBGaWVsZDogc3RyaW5nO1xyXG4gIEtleTogc3RyaW5nO1xyXG4gIFZhbHVlOiBzdHJpbmc7XHJcblxyXG59XHJcblxyXG4vLyBPIGNvc8OsIG8gc2NoaWFudGF0byBhIG1hbm9cclxuZXhwb3J0IGVudW0gUXVlcnlFZGl0b3JNb2RlRW51bSB7XHJcbiAgXCJDT05GSUdVUkFUT1JcIiA9IDEsXHJcbiAgXCJDT01QT1NFUlwiID0gMixcclxuICBcIlJFU1VMVFwiID0gM1xyXG59IiwiPGRpdj5cclxuICAgIDxuZy10ZW1wbGF0ZSBbYXBwRHluYW1pY0xvYWRlcl0gW2RhdGFdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIiAob3V0KT1cIm9uRXh0ZXJuYWxTUUxSZXN1bHRPdXQoJGV2ZW50KTtcIiAqbmdJZj1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50ICE9IG51bGwgJiYgcmVsYXRpb25zTG9hZGVkICYmIHJlbG9hZFwiPjwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImZsb2F0aW5ndGFibGUgZHJhZ2dhYmxlXCIgY2RrRHJhZyAqbmdJZj1cInNob3dUYWJsZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+PG1hdC1pY29uIChjbGljayk9XCJjbG9zZSgpXCI+Y2xvc2U8L21hdC1pY29uPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+PG1hdC1pY29uIChjbGljayk9XCJkZWxldGUoKVwiPmRlbGV0ZTwvbWF0LWljb24+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+PG1hdC1pY29uPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJpbmZvXCI+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNNdWx0aXNlbGVjdFwiPlNlbGV6aW9uYSBpbCB2YWxvcmUgZGEgcmVnaXN0cmFyZS48L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc011bHRpc2VsZWN0ICYmIG11bHRpc2VsZWN0UGhhc2UgPT0gMVwiPlNlbGV6aW9uYSB1bmEgY29sb25uYTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzTXVsdGlzZWxlY3QgJiYgbXVsdGlzZWxlY3RQaGFzZSA9PSAyICYmIHNlbGVjdGVkQ29sdW1uICE9IG51bGwgJiYgZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPT0gbnVsbFwiPkhhaSBzZWxlemlvbmF0bzogPGI+e3tzZWxlY3RlZENvbHVtbi5zcGxpdChcIl9fXCIpWzFdfX08L2I+Ljwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzTXVsdGlzZWxlY3QgJiYgbXVsdGlzZWxlY3RQaGFzZSA9PSAyXCI+U2VsZXppb25hIGFsbWVubyB1biBlbGVtZW50byBwcmVzZW50ZSBzb3R0byBhbGxhIGNvbG9ubmEgc2VsZXppb25hdGE8L3NwYW4+ICAgICAgICBcclxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzTXVsdGlzZWxlY3QgJiYgbXVsdGlzZWxlY3RQaGFzZSA9PSAyICYmIHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1jb25maXJtXCIgKGNsaWNrKT1cImNvbmZpcm1TZWxlY3Rpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uID5jaGVjazwvbWF0LWljb24+IENvbmZlcm1hIHNlbGV6aW9uZVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICBcclxuICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlXCIgW25nQ2xhc3NdPVwieyd0YWJsZS1ub3Rmb3JjZWQnOiBmaWVsZC5GaWVsZFR5cGUgIT0gZmllbGRUeXBlRW51bVsnRWxlbmNvIGdlbmVyaWNvJ10gJiYgZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPT0gbnVsbCwgJ3RhYmxlLWZvcmNlZCc6IGZpZWxkLkZpZWxkVHlwZSAhPSBmaWVsZFR5cGVFbnVtWydFbGVuY28gZ2VuZXJpY28nXSAmJiBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSAhPSBudWxsLCAndGFibGUtbXVsdGlzZWxlY3Qtbm90Zm9yY2VkJzogZmllbGQuRmllbGRUeXBlID09IGZpZWxkVHlwZUVudW1bJ0VsZW5jbyBnZW5lcmljbyddICAmJiBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9PSBudWxsLCAndGFibGUtbXVsdGlzZWxlY3QtZm9yY2VkJzogZmllbGQuRmllbGRUeXBlID09IGZpZWxkVHlwZUVudW1bJ0VsZW5jbyBnZW5lcmljbyddICAmJiBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSAhPSBudWxsfVwiPlxyXG4gICAgICAgIDx0cj48dGggKm5nRm9yPVwibGV0IGtleSBvZiBrZXlzOyBsZXQgZmlyc3QgPSBmaXJzdFwiIChjbGljayk9XCJzZWxlY3RDb2x1bW4oa2V5KVwiIGlkPVwiaGVhZGNvbC17e2tleX19XCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlyc3RcIj57e2tleX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaXJzdFwiPnt7a2V5LnNwbGl0KFwiX19cIilbMV19fTwvc3Bhbj5cclxuICAgICAgICA8L3RoPjwvdHI+XHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YVwiIGNsYXNzPVwicm93c1wiPlxyXG4gICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlzXCIgKGNsaWNrKT1cInNlbGVjdFZhbHVlKHJvdywga2V5KVwiIGlkPVwiY29sLXt7a2V5fX0taWQte3tyb3dbJ0lEJ119fVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBcclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93W2tleV0gIT0gbnVsbCAmJiByb3dba2V5XS50b1N0cmluZygpLmxlbmd0aCA8PSAxMDBcIiBbaW5uZXJIVE1MXT1cInJvd1trZXldXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPiBcclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93W2tleV0gIT0gbnVsbCAmJiByb3dba2V5XS50b1N0cmluZygpLmxlbmd0aCA+IDEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7cm93W2tleV0gIT0gbnVsbCA/IHJvd1trZXldLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsMTAwKSA6ICcnfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93W2tleV0gIT0gbnVsbCAmJiByb3dba2V5XS50b1N0cmluZygpLmxlbmd0aCA+IDEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIC4uLlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJyb3dba2V5XVwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC90YWJsZT5cclxuXHJcbiAgICA8IS0tIFxyXG4gICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtbm90Zm9yY2VkXCIgKm5nSWY9XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9PSBudWxsXCI+XHJcbiAgICAgICAgPHRyPjx0aCAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXM7IGxldCBmaXJzdCA9IGZpcnN0XCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlyc3RcIj57e2tleX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaXJzdFwiPnt7a2V5LnNwbGl0KFwiX19cIilbMV19fTwvc3Bhbj5cclxuICAgICAgICA8L3RoPjwvdHI+XHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YVwiIGNsYXNzPVwicm93c1wiPlxyXG4gICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlzXCIgKGNsaWNrKT1cInNlbGVjdFZhbHVlTm90Rm9yY2VkKHJvd1trZXldKVwiPlxyXG4gICAgICAgICAgICAgICAge3tyb3dba2V5XSAhPSBudWxsID8gcm93W2tleV0udG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwxMDApIDogJyd9fVxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dba2V5XSAhPSBudWxsICYmIHJvd1trZXldLnRvU3RyaW5nKCkubGVuZ3RoID4gMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgIDwvdGFibGU+XHJcblxyXG4gICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtZm9yY2VkXCIgKm5nSWY9XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSAhPSBudWxsXCI+XHJcbiAgICAgICAgPHRyPjx0aCAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXM7IGxldCBmaXJzdCA9IGZpcnN0XCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlyc3RcIj57e2tleX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaXJzdFwiPnt7a2V5LnNwbGl0KFwiX19cIilbMV19fTwvc3Bhbj5cclxuICAgICAgICA8L3RoPjwvdHI+XHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YVwiIGNsYXNzPVwicm93c1wiIChjbGljayk9XCJzZWxlY3RWYWx1ZUZvcmNlZChyb3cpXCI+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXNcIj5cclxuICAgICAgICAgICAgICAgIHt7cm93W2tleV0gIT0gbnVsbCA/IHJvd1trZXldLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsMTAwKSA6ICcnfX1cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93W2tleV0gIT0gbnVsbCAmJiByb3dba2V5XS50b1N0cmluZygpLmxlbmd0aCA+IDEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIC4uLlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG4gICAgLS0+XHJcblxyXG48L2Rpdj5cclxuXHJcbjxzcGFuICpuZ0lmPVwidmFsdWUgIT0gbnVsbFwiPnt7dmFsdWV9fTwvc3Bhbj5cclxuXHJcbjxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWFycm93LWRvd25cIiAoY2xpY2spPVwiYWN0aXZhdGVUYWJsZSgpXCIgKm5nSWY9XCJtdWx0aXBsZVZhbHVlc1RvQ2hvb3NlXCI+XHJcbiAgICA8bWF0LWljb24+a2V5Ym9hcmRfYXJyb3dfZG93bjwvbWF0LWljb24+XHJcbjwvYnV0dG9uPlxyXG48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1hcnJvdy1kb3duXCIgKGNsaWNrKT1cInJlbG9hZERhdGEoKVwiICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVySGFzUmVzZXRCdXR0b25cIj5cclxuICAgIDxtYXQtaWNvbj5sb29wPC9tYXQtaWNvbj5cclxuPC9idXR0b24+Il19
@@ -326,7 +326,7 @@ export class DynamicModuleFieldFixComponent {
326
326
  }
327
327
  }
328
328
  DynamicModuleFieldFixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicModuleFieldFixComponent, deps: [{ token: i1.MatDialog }, { token: i2.UtilityHelperService }], target: i0.ɵɵFactoryTarget.Component });
329
- DynamicModuleFieldFixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DynamicModuleFieldFixComponent, selector: "dynamic-module-field-fix", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", field: "field", form: "form", record: "record", formulaObject: "formulaObject", inConfig: "inConfig", userID: "userID", QueryEditorComponent: "QueryEditorComponent" }, outputs: { recordChange: "recordChange", out: "out", fireTrigger: "fireTrigger" }, viewQueries: [{ propertyName: "dialogInnerFormRecord", first: true, predicate: ["dialogInnerFormRecord"], descendants: true, static: true }, { propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }, { propertyName: "listInnerFormRecords", predicate: ["listInnerFormRecords"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record, forcedValues: null }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row datagetter\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"DBGetterFieldsLoaded\" [ngTemplateOutlet]=\"fieldsDBGTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n <dbgetter \r\n *ngIf=\"loadedDBGetter\"\r\n class=\"dbgetter\"\r\n [configurations]=\"configurations\"\r\n [hidden]=\"!field.InListView\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (doReload)=\"reloadDBGetter()\"\r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <action-button-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Bottone azione']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (fireTrigger)=\"onFireTrigger($event)\">\r\n </action-button-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>\r\n\r\n<ng-template #fieldsDBGTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <list-value-dbg-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-dbg-template>\r\n \r\n \r\n <!-- Non gestiti (funzionano a culo) -->\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template> \r\n \r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template> \r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template> \r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template> \r\n\r\n\r\n\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}.datagetter .col-12{position:relative}.datagetter .dbgetter{position:absolute;right:13px;top:6px}\n"], dependencies: [{ kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.TextFieldTemplateComponent, selector: "text-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i6.BooleanFieldTemplateComponent, selector: "boolean-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: i7.DateFieldTemplateComponent, selector: "date-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i8.TextareaFieldTemplateComponent, selector: "textarea-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: i9.NumericFieldTemplateComponent, selector: "numeric-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i10.ListValueFieldTemplateComponent, selector: "list-value-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i11.AttachmentFieldTemplateComponent, selector: "attachment-field-template", inputs: ["onlyImages", "field", "record", "formulaObject", "inConfig"], outputs: ["recordChange", "onAttachmentsChange"] }, { kind: "component", type: i12.ImageFieldTemplateComponent, selector: "image-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageDraw"] }, { kind: "component", type: i13.ListFormRecordComponent, selector: "list-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons", "actionButtons", "contestualizationParams"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.ImageFieldSelectorTemplateComponent, selector: "image-field-selector-template", inputs: ["record", "formulaObject", "field", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i15.LabelFieldTemplateComponent, selector: "label-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i16.ImageWithMarkersFieldTemplateComponent, selector: "image-with-markers-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageMark"] }, { kind: "component", type: i17.DbgetterComponent, selector: "dbgetter", inputs: ["configurations", "form", "field", "record", "inConfig", "DirectlyOpenTable", "QueryEditorComponent", "data"], outputs: ["out", "selectedValue", "doReload"] }, { kind: "component", type: i18.ActionButtonFieldTemplateComponent, selector: "action-button-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["fireTrigger"] }, { kind: "component", type: i19.ListValueDbgTemplateComponent, selector: "list-value-dbg-template", inputs: ["field", "record"] }] });
329
+ DynamicModuleFieldFixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DynamicModuleFieldFixComponent, selector: "dynamic-module-field-fix", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", field: "field", form: "form", record: "record", formulaObject: "formulaObject", inConfig: "inConfig", userID: "userID", QueryEditorComponent: "QueryEditorComponent" }, outputs: { recordChange: "recordChange", out: "out", fireTrigger: "fireTrigger" }, viewQueries: [{ propertyName: "dialogInnerFormRecord", first: true, predicate: ["dialogInnerFormRecord"], descendants: true, static: true }, { propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }, { propertyName: "listInnerFormRecords", predicate: ["listInnerFormRecords"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record, forcedValues: null }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row datagetter\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"DBGetterFieldsLoaded\" [ngTemplateOutlet]=\"fieldsDBGTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n <dbgetter \r\n *ngIf=\"loadedDBGetter\"\r\n class=\"dbgetter\"\r\n [configurations]=\"configurations\"\r\n [hidden]=\"!field.InListView\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (doReload)=\"reloadDBGetter()\"\r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <action-button-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Bottone azione']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (fireTrigger)=\"onFireTrigger($event)\">\r\n </action-button-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>\r\n\r\n<ng-template #fieldsDBGTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <list-value-dbg-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-dbg-template>\r\n \r\n \r\n <!-- Non gestiti (funzionano a culo) -->\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template> \r\n \r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template> \r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template> \r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template> \r\n\r\n\r\n\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}.datagetter .col-12{position:relative}.datagetter .dbgetter{position:absolute;right:13px;top:6px}\n"], dependencies: [{ kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.TextFieldTemplateComponent, selector: "text-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i6.BooleanFieldTemplateComponent, selector: "boolean-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: i7.DateFieldTemplateComponent, selector: "date-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i8.TextareaFieldTemplateComponent, selector: "textarea-field-template", inputs: ["field", "record", "formulaObject"], outputs: ["recordChange"] }, { kind: "component", type: i9.NumericFieldTemplateComponent, selector: "numeric-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i10.ListValueFieldTemplateComponent, selector: "list-value-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i11.AttachmentFieldTemplateComponent, selector: "attachment-field-template", inputs: ["onlyImages", "field", "record", "formulaObject", "inConfig"], outputs: ["recordChange", "onAttachmentsChange"] }, { kind: "component", type: i12.ImageFieldTemplateComponent, selector: "image-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageDraw"] }, { kind: "component", type: i13.ListFormRecordComponent, selector: "list-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons", "actionButtons", "contestualizationParams"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.ImageFieldSelectorTemplateComponent, selector: "image-field-selector-template", inputs: ["record", "formulaObject", "field", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i15.LabelFieldTemplateComponent, selector: "label-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i16.ImageWithMarkersFieldTemplateComponent, selector: "image-with-markers-field-template", inputs: ["endPointConfiguration", "record", "formulaObject", "field", "inConfig"], outputs: ["recordChange", "imageMark"] }, { kind: "component", type: i17.DbgetterComponent, selector: "dbgetter", inputs: ["configurations", "form", "field", "record", "inConfig", "DirectlyOpenTable", "QueryEditorComponent", "data"], outputs: ["out", "selectedValue", "doReload"] }, { kind: "component", type: i18.ActionButtonFieldTemplateComponent, selector: "action-button-field-template", inputs: ["field", "record", "formulaObject", "inConfig"], outputs: ["fireTrigger", "recordChange"] }, { kind: "component", type: i19.ListValueDbgTemplateComponent, selector: "list-value-dbg-template", inputs: ["field", "record"] }] });
330
330
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicModuleFieldFixComponent, decorators: [{
331
331
  type: Component,
332
332
  args: [{ selector: 'dynamic-module-field-fix', template: "<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record, forcedValues: null }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row datagetter\">\r\n <div class=\"col-12\">\r\n <ng-container *ngIf=\"DBGetterFieldsLoaded\" [ngTemplateOutlet]=\"fieldsDBGTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n <dbgetter \r\n *ngIf=\"loadedDBGetter\"\r\n class=\"dbgetter\"\r\n [configurations]=\"configurations\"\r\n [hidden]=\"!field.InListView\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (doReload)=\"reloadDBGetter()\"\r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <action-button-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Bottone azione']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (fireTrigger)=\"onFireTrigger($event)\">\r\n </action-button-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>\r\n\r\n<ng-template #fieldsDBGTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <list-value-dbg-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-dbg-template>\r\n \r\n \r\n <!-- Non gestiti (funzionano a culo) -->\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template> \r\n \r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template> \r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template> \r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template> \r\n\r\n\r\n\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}.datagetter .col-12{position:relative}.datagetter .dbgetter{position:absolute;right:13px;top:6px}\n"] }]
@@ -10,6 +10,7 @@ export class ActionButtonFieldTemplateComponent {
10
10
  this.formulaObject = {};
11
11
  this.inConfig = false;
12
12
  this.fireTrigger = new EventEmitter();
13
+ this.recordChange = new EventEmitter();
13
14
  }
14
15
  ngOnInit() {
15
16
  this.updateField();
@@ -31,19 +32,26 @@ export class ActionButtonFieldTemplateComponent {
31
32
  GlobalService.debugLog("btn InListView - " + this.field.InListView);
32
33
  }
33
34
  generateAction(actionButton) {
34
- var fireTrigger = new FireTrigger();
35
- fireTrigger.trigger = new Trigger();
36
- fireTrigger.trigger.CID = actionButton.ButtonCode;
37
- fireTrigger.trigger.conditions = null;
38
- fireTrigger.trigger.description = actionButton.Label;
39
- fireTrigger.trigger.execution = actionButton.execution;
40
- fireTrigger.trigger.formulas = actionButton.formulas;
41
- fireTrigger.form = null; // Verrà impostato a livello superiore
42
- fireTrigger.formulas = actionButton.formulas;
43
- fireTrigger.record = this.record;
44
- fireTrigger.userPatient = null; // Verrà impostato a livello superiore
45
- fireTrigger.userMedicalExamination = null;
46
- this.evaluateFormulasAndFireTrigger(fireTrigger);
35
+ if (actionButton.execution == 'execute_formula') {
36
+ // caso esecuzione semplice
37
+ let res = UtilityHelperService.EvaluateFieldFormula(actionButton.formulas[0].value, this.record, this.formulaObject);
38
+ this.onRecordValueChange();
39
+ }
40
+ else {
41
+ var fireTrigger = new FireTrigger();
42
+ fireTrigger.trigger = new Trigger();
43
+ fireTrigger.trigger.CID = actionButton.ButtonCode;
44
+ fireTrigger.trigger.conditions = null;
45
+ fireTrigger.trigger.description = actionButton.Label;
46
+ fireTrigger.trigger.execution = actionButton.execution;
47
+ fireTrigger.trigger.formulas = actionButton.formulas;
48
+ fireTrigger.form = null; // Verrà impostato a livello superiore
49
+ fireTrigger.formulas = actionButton.formulas;
50
+ fireTrigger.record = this.record;
51
+ fireTrigger.userPatient = null; // Verrà impostato a livello superiore
52
+ fireTrigger.userMedicalExamination = null;
53
+ this.evaluateFormulasAndFireTrigger(fireTrigger);
54
+ }
47
55
  }
48
56
  evaluateFormulasAndFireTrigger(triggerToFire) {
49
57
  const formulas = JSON.parse(JSON.stringify(triggerToFire.formulas));
@@ -79,9 +87,20 @@ export class ActionButtonFieldTemplateComponent {
79
87
  triggerToFire.formulas = evaluatedFormulas;
80
88
  this.fireTrigger.emit(triggerToFire);
81
89
  }
90
+ /**
91
+ * Metodo per emettere l'evento che il valore del record è cambiato.
92
+ */
93
+ onRecordValueChange() {
94
+ if (!this.field.Formula) {
95
+ this.recordChange.emit(this.record);
96
+ }
97
+ if (!this.field.VisibleIf) {
98
+ this.recordChange.emit(this.record);
99
+ }
100
+ }
82
101
  }
83
102
  ActionButtonFieldTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ActionButtonFieldTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
84
- ActionButtonFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ActionButtonFieldTemplateComponent, selector: "action-button-field-template", inputs: { field: "field", record: "record", formulaObject: "formulaObject", inConfig: "inConfig" }, outputs: { fireTrigger: "fireTrigger" }, ngImport: i0, template: "<button [ngStyle]=\"FieldstyleObj\" class=\"btn btn-primary\" (click)=\"generateAction(field)\">\r\n <mat-icon *ngIf=\"field.Icon\">{{field.Icon}}</mat-icon> {{field.ButtonLabel}}\r\n</button>", styles: [""], dependencies: [{ kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
103
+ ActionButtonFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ActionButtonFieldTemplateComponent, selector: "action-button-field-template", inputs: { field: "field", record: "record", formulaObject: "formulaObject", inConfig: "inConfig" }, outputs: { fireTrigger: "fireTrigger", recordChange: "recordChange" }, ngImport: i0, template: "<button [ngStyle]=\"FieldstyleObj\" class=\"btn btn-primary\" (click)=\"generateAction(field)\">\r\n <mat-icon *ngIf=\"field.Icon\">{{field.Icon}}</mat-icon> {{field.ButtonLabel}}\r\n</button>", styles: [""], dependencies: [{ kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
85
104
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ActionButtonFieldTemplateComponent, decorators: [{
86
105
  type: Component,
87
106
  args: [{ selector: 'action-button-field-template', template: "<button [ngStyle]=\"FieldstyleObj\" class=\"btn btn-primary\" (click)=\"generateAction(field)\">\r\n <mat-icon *ngIf=\"field.Icon\">{{field.Icon}}</mat-icon> {{field.ButtonLabel}}\r\n</button>" }]
@@ -95,5 +114,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
95
114
  type: Input
96
115
  }], fireTrigger: [{
97
116
  type: Output
117
+ }], recordChange: [{
118
+ type: Output
98
119
  }] } });
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUvYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUvYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFakcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7O0FBT3BFLE1BQU0sT0FBTyxrQ0FBa0M7SUFZN0M7UUFQUyxrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUN4QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRXpCLGdCQUFXLEdBQThCLElBQUksWUFBWSxFQUFlLENBQUM7SUFJbkUsQ0FBQztJQUVqQixRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsVUFB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QUMsQ0FBQztJQUN2QyxDQUFDOztnSUE1R1Usa0NBQWtDO29IQUFsQyxrQ0FBa0MsaU5DWi9DLHFNQUVTOzRGRFVJLGtDQUFrQztrQkFMOUMsU0FBUzsrQkFDRSw4QkFBOEI7MEVBTy9CLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgRmlyZVRyaWdnZXIsIFRyaWdnZXIsIFRyaWdnZXJQcm9wZXJ0eVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3RyaWdnZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBBY3Rpb25CdXR0b25GaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvYWN0aW9uQnV0dG9uLm1vZGVsJztcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uRmllbGRUZW1wbGF0ZUNvbXBvbmVudCB7XHJcblxyXG4gIC8vdmFyaWFiaWxpIGVzdGVybmUgcGVyIGwnaW5wdXQgZGVpIGNhbXBpXHJcbiAgQElucHV0KCkgZmllbGQ6IEFjdGlvbkJ1dHRvbkZpZWxkO1xyXG4gIEBJbnB1dCgpIHJlY29yZDogUmVjb3JkO1xyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGluQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBmaXJlVHJpZ2dlcjogRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+KCk7XHJcblxyXG4gIEZpZWxkc3R5bGVPYmo6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB0aGlzLmluaXRTdHlsZXMoKTtcclxuICB9XHJcbiAgaW5pdFN0eWxlcygpIHtcclxuICAgIC8vRnVuemlvbmUgcGVyIHBhcnNhcmUgaWwgY2FtcG8gc3R5bGVjc3MgZGVsbCdvZ2dldHRvIGZpZWxkIGVkIGFwcGxpY2FybG8gYWxsJ2h0bWxcclxuICAgIGlmICh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLkZpZWxkc3R5bGVPYmogPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkZWwgY2FtcG8gcXVhbmRvIHF1ZXN0byDDqCByYXBwcmVzZW50YXRvIGRhIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuVmlzaWJsZUlmKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuSW5MaXN0VmlldyA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuVmlzaWJsZUlmLCB0aGlzLnJlY29yZCwgdGhpcy5mb3JtdWxhT2JqZWN0KTtcclxuICAgIH1cclxuICAgIHRoaXMuZmllbGQuSW5MaXN0VmlldyA9IHRoaXMuZmllbGQuSW5MaXN0VmlldyA/IHRydWUgOiBmYWxzZTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJidG4gSW5MaXN0VmlldyAtIFwiICsgdGhpcy5maWVsZC5Jbkxpc3RWaWV3KVxyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVBY3Rpb24oYWN0aW9uQnV0dG9uOiBBY3Rpb25CdXR0b25GaWVsZCkge1xyXG4gICAgdmFyIGZpcmVUcmlnZ2VyOiBGaXJlVHJpZ2dlciA9IG5ldyBGaXJlVHJpZ2dlcigpO1xyXG5cclxuICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIgPSBuZXcgVHJpZ2dlcigpO1xyXG4gICAgZmlyZVRyaWdnZXIudHJpZ2dlci5DSUQgPSBhY3Rpb25CdXR0b24uQnV0dG9uQ29kZTtcclxuICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIuY29uZGl0aW9ucyA9IG51bGw7XHJcbiAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmRlc2NyaXB0aW9uID0gYWN0aW9uQnV0dG9uLkxhYmVsO1xyXG4gICAgZmlyZVRyaWdnZXIudHJpZ2dlci5leGVjdXRpb24gPSBhY3Rpb25CdXR0b24uZXhlY3V0aW9uO1xyXG4gICAgZmlyZVRyaWdnZXIudHJpZ2dlci5mb3JtdWxhcyA9IGFjdGlvbkJ1dHRvbi5mb3JtdWxhcztcclxuXHJcbiAgICBmaXJlVHJpZ2dlci5mb3JtID0gbnVsbDsgLy8gVmVycsOgIGltcG9zdGF0byBhIGxpdmVsbG8gc3VwZXJpb3JlXHJcbiAgICBmaXJlVHJpZ2dlci5mb3JtdWxhcyA9IGFjdGlvbkJ1dHRvbi5mb3JtdWxhcztcclxuICAgIGZpcmVUcmlnZ2VyLnJlY29yZCA9IHRoaXMucmVjb3JkO1xyXG4gICAgZmlyZVRyaWdnZXIudXNlclBhdGllbnQgPSBudWxsOyAgLy8gVmVycsOgIGltcG9zdGF0byBhIGxpdmVsbG8gc3VwZXJpb3JlXHJcbiAgICBmaXJlVHJpZ2dlci51c2VyTWVkaWNhbEV4YW1pbmF0aW9uID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLmV2YWx1YXRlRm9ybXVsYXNBbmRGaXJlVHJpZ2dlcihmaXJlVHJpZ2dlcik7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZUZvcm11bGFzQW5kRmlyZVRyaWdnZXIodHJpZ2dlclRvRmlyZTogRmlyZVRyaWdnZXIpIHtcclxuXHJcbiAgICBjb25zdCBmb3JtdWxhcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodHJpZ2dlclRvRmlyZS5mb3JtdWxhcykpO1xyXG4gICAgY29uc3QgZXZhbHVhdGVkRm9ybXVsYXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTsgLy8gT2dnZXR0byBhc3NvY2lhdGl2b1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gZXZhbHVhdGUgZm9ybXVsYXMgXCIsIGZvcm11bGFzKTtcclxuICAgIGlmIChmb3JtdWxhcyAmJiBPYmplY3Qua2V5cyhmb3JtdWxhcykubGVuZ3RoID4gMCkge1xyXG4gICAgICBPYmplY3Qua2V5cyhmb3JtdWxhcykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZm9ybXVsYU9iaiA9IGZvcm11bGFzW2tleV07XHJcbiAgICAgICAgY29uc3QgZm9ybXVsYSA9IGZvcm11bGFPYmoudmFsdWU7XHJcbiAgICAgICAgbGV0IHRlbXA7XHJcblxyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gZm9ybXVsYXNba2V5XSBcIiwgZm9ybXVsYU9iaik7XHJcblxyXG4gICAgICAgIGlmIChmb3JtdWxhT2JqLnR5cGUgPT0gVHJpZ2dlclByb3BlcnR5VHlwZUVudW0uRE1NT0RVTEUpIHsgIC8vIGFzc2Vnbm8gaWQvY29kZSBkZWwgbW9kdWxvIHNlbGV6aW9uYXRvXHJcbiAgICAgICAgICB0ZW1wID0gZm9ybXVsYTtcclxuICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gYXNzaWduZWQgRE1NT0RVTEUgLSBpZC9jb2RlIFwiLCBmb3JtdWxhKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtdWxhT2JqLnR5cGUgPT0gVHJpZ2dlclByb3BlcnR5VHlwZUVudW0uRFJPUERPV05fTElTVCkge1xyXG4gICAgICAgICAgLy8gc2UgbGEgcHJvcHJpZXTDoCBub24gZXNpc3RlIMOoIGFzc2VnbmF0byB2YWx1ZSAtIG1vZGlmaWNhIGRpIHVuYSBjb25maWd1cmF6aW9uZSBkaWNoaWFyYXRhIGluIHByZWNlZGVuemEgY29tZSBzdHJpbmdcclxuXHJcbiAgICAgICAgICB0ZW1wID1cclxuICAgICAgICAgICAgZm9ybXVsYU9iaj8uc2VsZWN0ZWRBbGxvd2VkVmFsdWU/LmtleSA/IGZvcm11bGFPYmouc2VsZWN0ZWRBbGxvd2VkVmFsdWUua2V5XHJcbiAgICAgICAgICAgICAgOiAoXHJcbiAgICAgICAgICAgICAgICBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYShcclxuICAgICAgICAgICAgICAgICAgZm9ybXVsYSxcclxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvcmQsXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybXVsYU9iamVjdFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG5cclxuICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gYXNzaWduZWQgRFJPUERPV05fTElTVC0gIHNlbGVjdGVkQWxsb3dlZFZhbHVlIFwiLCBmb3JtdWxhT2JqLnNlbGVjdGVkQWxsb3dlZFZhbHVlKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIHBhc3NvIGFsbCdldmFsIHF1YW5kbyDDqCBzdHJpbmdhIGUgYXNzZWdubyBpbCB2YWxvcmUgY2FsY29sYXRvXHJcbiAgICAgICAgICB0ZW1wID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoXHJcbiAgICAgICAgICAgIGZvcm11bGEsXHJcbiAgICAgICAgICAgIHRoaXMucmVjb3JkLFxyXG4gICAgICAgICAgICB0aGlzLmZvcm11bGFPYmplY3RcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGFzc2lnbmVkIC0gLnZhbHVlICBmb3JtdWxhIFwiLCBmb3JtdWxhKTtcclxuICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gYXNzaWduZWQgPiB2YWx1ZSAgZm9ybXVsYU9iai50eXBlIFwiLCBmb3JtdWxhT2JqKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBldmFsdWF0ZWRGb3JtdWxhc1tmb3JtdWxhT2JqLmtleV0gPSB0ZW1wO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGFzc2lnbmVkLSAgZXZhbHVhdGVkRm9ybXVsYXMgXCIsIGV2YWx1YXRlZEZvcm11bGFzKTtcclxuICAgIHRyaWdnZXJUb0ZpcmUuZm9ybXVsYXMgPSBldmFsdWF0ZWRGb3JtdWxhcztcclxuICAgIHRoaXMuZmlyZVRyaWdnZXIuZW1pdCh0cmlnZ2VyVG9GaXJlKTtcclxuICB9XHJcblxyXG5cclxuXHJcbn1cclxuIiwiPGJ1dHRvbiBbbmdTdHlsZV09XCJGaWVsZHN0eWxlT2JqXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiZ2VuZXJhdGVBY3Rpb24oZmllbGQpXCI+XHJcbiAgICA8bWF0LWljb24gKm5nSWY9XCJmaWVsZC5JY29uXCI+e3tmaWVsZC5JY29ufX08L21hdC1pY29uPiB7e2ZpZWxkLkJ1dHRvbkxhYmVsfX1cclxuPC9idXR0b24+Il19
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUvYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2FjdGlvbi1idXR0b24tZmllbGQtdGVtcGxhdGUvYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFakcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7O0FBT3BFLE1BQU0sT0FBTyxrQ0FBa0M7SUFhN0M7UUFSUyxrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUN4QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRXpCLGdCQUFXLEdBQThCLElBQUksWUFBWSxFQUFlLENBQUM7UUFDekUsaUJBQVksR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUkxRCxDQUFDO0lBRWpCLFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxD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QUFDO29CQUMvRSxhQUFhLENBQUMsUUFBUSxDQUFDLG9EQUFvRCxFQUFFLFVBQVUsQ0FBQyxDQUFDO2lCQUUxRjtnQkFFRCxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzNDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxhQUFhLENBQUMsUUFBUSxDQUFDLCtDQUErQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDM0YsYUFBYSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBR0Q7O09BRUc7SUFDSCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDOztnSUFwSVUsa0NBQWtDO29IQUFsQyxrQ0FBa0MsK09DWi9DLHFNQUVTOzRGRFVJLGtDQUFrQztrQkFMOUMsU0FBUzsrQkFDRSw4QkFBOEI7MEVBTy9CLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBGaXJlVHJpZ2dlciwgVHJpZ2dlciwgVHJpZ2dlclByb3BlcnR5VHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvdHJpZ2dlci5tb2RlbCc7XHJcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbkZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9hY3Rpb25CdXR0b24ubW9kZWwnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhY3Rpb24tYnV0dG9uLWZpZWxkLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWN0aW9uLWJ1dHRvbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25CdXR0b25GaWVsZFRlbXBsYXRlQ29tcG9uZW50IHtcclxuXHJcbiAgLy92YXJpYWJpbGkgZXN0ZXJuZSBwZXIgbCdpbnB1dCBkZWkgY2FtcGlcclxuICBASW5wdXQoKSBmaWVsZDogQWN0aW9uQnV0dG9uRmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQElucHV0KCkgZm9ybXVsYU9iamVjdDogYW55ID0ge307XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIGZpcmVUcmlnZ2VyOiBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4oKTtcclxuICBAT3V0cHV0KCkgcmVjb3JkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG5cclxuICBGaWVsZHN0eWxlT2JqOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgdGhpcy5pbml0U3R5bGVzKCk7XHJcbiAgfVxyXG4gIGluaXRTdHlsZXMoKSB7XHJcbiAgICAvL0Z1bnppb25lIHBlciBwYXJzYXJlIGlsIGNhbXBvIHN0eWxlY3NzIGRlbGwnb2dnZXR0byBmaWVsZCBlZCBhcHBsaWNhcmxvIGFsbCdodG1sXHJcbiAgICBpZiAodGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IG51bGwgfHwgdGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTICE9IHVuZGVmaW5lZClcclxuICAgICAgdGhpcy5GaWVsZHN0eWxlT2JqID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuaW5pdFN0eWxlcyh0aGlzLmZpZWxkLkZpZWxkc3R5bGVDU1MpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZGVsIGNhbXBvIHF1YW5kbyBxdWVzdG8gw6ggcmFwcHJlc2VudGF0byBkYSB1bmEgZm9ybXVsYS5cclxuICAgKi9cclxuICB1cGRhdGVGaWVsZCgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLlZpc2libGVJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLlZpc2libGVJZiwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiYnRuIEluTGlzdFZpZXcgLSBcIiArIHRoaXMuZmllbGQuSW5MaXN0VmlldylcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlQWN0aW9uKGFjdGlvbkJ1dHRvbjogQWN0aW9uQnV0dG9uRmllbGQpIHtcclxuICAgIGlmIChhY3Rpb25CdXR0b24uZXhlY3V0aW9uID09ICdleGVjdXRlX2Zvcm11bGEnKSB7XHJcbiAgICAgIC8vIGNhc28gZXNlY3V6aW9uZSBzZW1wbGljZVxyXG4gICAgICBsZXQgcmVzID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoXHJcbiAgICAgICAgYWN0aW9uQnV0dG9uLmZvcm11bGFzWzBdLnZhbHVlLFxyXG4gICAgICAgIHRoaXMucmVjb3JkLFxyXG4gICAgICAgIHRoaXMuZm9ybXVsYU9iamVjdFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLm9uUmVjb3JkVmFsdWVDaGFuZ2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhciBmaXJlVHJpZ2dlcjogRmlyZVRyaWdnZXIgPSBuZXcgRmlyZVRyaWdnZXIoKTtcclxuXHJcbiAgICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIgPSBuZXcgVHJpZ2dlcigpO1xyXG4gICAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLkNJRCA9IGFjdGlvbkJ1dHRvbi5CdXR0b25Db2RlO1xyXG4gICAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmNvbmRpdGlvbnMgPSBudWxsO1xyXG4gICAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmRlc2NyaXB0aW9uID0gYWN0aW9uQnV0dG9uLkxhYmVsO1xyXG4gICAgICBmaXJlVHJpZ2dlci50cmlnZ2VyLmV4ZWN1dGlvbiA9IGFjdGlvbkJ1dHRvbi5leGVjdXRpb247XHJcbiAgICAgIGZpcmVUcmlnZ2VyLnRyaWdnZXIuZm9ybXVsYXMgPSBhY3Rpb25CdXR0b24uZm9ybXVsYXM7XHJcblxyXG4gICAgICBmaXJlVHJpZ2dlci5mb3JtID0gbnVsbDsgLy8gVmVycsOgIGltcG9zdGF0byBhIGxpdmVsbG8gc3VwZXJpb3JlXHJcbiAgICAgIGZpcmVUcmlnZ2VyLmZvcm11bGFzID0gYWN0aW9uQnV0dG9uLmZvcm11bGFzO1xyXG4gICAgICBmaXJlVHJpZ2dlci5yZWNvcmQgPSB0aGlzLnJlY29yZDtcclxuICAgICAgZmlyZVRyaWdnZXIudXNlclBhdGllbnQgPSBudWxsOyAgLy8gVmVycsOgIGltcG9zdGF0byBhIGxpdmVsbG8gc3VwZXJpb3JlXHJcbiAgICAgIGZpcmVUcmlnZ2VyLnVzZXJNZWRpY2FsRXhhbWluYXRpb24gPSBudWxsO1xyXG5cclxuICAgICAgdGhpcy5ldmFsdWF0ZUZvcm11bGFzQW5kRmlyZVRyaWdnZXIoZmlyZVRyaWdnZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVGb3JtdWxhc0FuZEZpcmVUcmlnZ2VyKHRyaWdnZXJUb0ZpcmU6IEZpcmVUcmlnZ2VyKSB7XHJcblxyXG4gICAgY29uc3QgZm9ybXVsYXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRyaWdnZXJUb0ZpcmUuZm9ybXVsYXMpKTtcclxuICAgIGNvbnN0IGV2YWx1YXRlZEZvcm11bGFzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307IC8vIE9nZ2V0dG8gYXNzb2NpYXRpdm9cclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGV2YWx1YXRlIGZvcm11bGFzIFwiLCBmb3JtdWxhcyk7XHJcbiAgICBpZiAoZm9ybXVsYXMgJiYgT2JqZWN0LmtleXMoZm9ybXVsYXMpLmxlbmd0aCA+IDApIHtcclxuICAgICAgT2JqZWN0LmtleXMoZm9ybXVsYXMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZvcm11bGFPYmogPSBmb3JtdWxhc1trZXldO1xyXG4gICAgICAgIGNvbnN0IGZvcm11bGEgPSBmb3JtdWxhT2JqLnZhbHVlO1xyXG4gICAgICAgIGxldCB0ZW1wO1xyXG5cclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGZvcm11bGFzW2tleV0gXCIsIGZvcm11bGFPYmopO1xyXG5cclxuICAgICAgICBpZiAoZm9ybXVsYU9iai50eXBlID09IFRyaWdnZXJQcm9wZXJ0eVR5cGVFbnVtLkRNTU9EVUxFKSB7ICAvLyBhc3NlZ25vIGlkL2NvZGUgZGVsIG1vZHVsbyBzZWxlemlvbmF0b1xyXG4gICAgICAgICAgdGVtcCA9IGZvcm11bGE7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGFzc2lnbmVkIERNTU9EVUxFIC0gaWQvY29kZSBcIiwgZm9ybXVsYSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybXVsYU9iai50eXBlID09IFRyaWdnZXJQcm9wZXJ0eVR5cGVFbnVtLkRST1BET1dOX0xJU1QpIHtcclxuICAgICAgICAgIC8vIHNlIGxhIHByb3ByaWV0w6Agbm9uIGVzaXN0ZSDDqCBhc3NlZ25hdG8gdmFsdWUgLSBtb2RpZmljYSBkaSB1bmEgY29uZmlndXJhemlvbmUgZGljaGlhcmF0YSBpbiBwcmVjZWRlbnphIGNvbWUgc3RyaW5nXHJcblxyXG4gICAgICAgICAgdGVtcCA9XHJcbiAgICAgICAgICAgIGZvcm11bGFPYmo/LnNlbGVjdGVkQWxsb3dlZFZhbHVlPy5rZXkgPyBmb3JtdWxhT2JqLnNlbGVjdGVkQWxsb3dlZFZhbHVlLmtleVxyXG4gICAgICAgICAgICAgIDogKFxyXG4gICAgICAgICAgICAgICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoXHJcbiAgICAgICAgICAgICAgICAgIGZvcm11bGEsXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkLFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZvcm11bGFPYmplY3RcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICApO1xyXG5cclxuXHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGFzc2lnbmVkIERST1BET1dOX0xJU1QtICBzZWxlY3RlZEFsbG93ZWRWYWx1ZSBcIiwgZm9ybXVsYU9iai5zZWxlY3RlZEFsbG93ZWRWYWx1ZSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBwYXNzbyBhbGwnZXZhbCBxdWFuZG8gw6ggc3RyaW5nYSBlIGFzc2Vnbm8gaWwgdmFsb3JlIGNhbGNvbGF0b1xyXG4gICAgICAgICAgdGVtcCA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKFxyXG4gICAgICAgICAgICBmb3JtdWxhLFxyXG4gICAgICAgICAgICB0aGlzLnJlY29yZCxcclxuICAgICAgICAgICAgdGhpcy5mb3JtdWxhT2JqZWN0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNoZWNrVHJpZ2dlcnMgLSBhc3NpZ25lZCAtIC52YWx1ZSAgZm9ybXVsYSBcIiwgZm9ybXVsYSk7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGFzc2lnbmVkID4gdmFsdWUgIGZvcm11bGFPYmoudHlwZSBcIiwgZm9ybXVsYU9iaik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXZhbHVhdGVkRm9ybXVsYXNbZm9ybXVsYU9iai5rZXldID0gdGVtcDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNoZWNrVHJpZ2dlcnMgLSBhc3NpZ25lZC0gIGV2YWx1YXRlZEZvcm11bGFzIFwiLCBldmFsdWF0ZWRGb3JtdWxhcyk7XHJcbiAgICB0cmlnZ2VyVG9GaXJlLmZvcm11bGFzID0gZXZhbHVhdGVkRm9ybXVsYXM7XHJcbiAgICB0aGlzLmZpcmVUcmlnZ2VyLmVtaXQodHJpZ2dlclRvRmlyZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBlbWV0dGVyZSBsJ2V2ZW50byBjaGUgaWwgdmFsb3JlIGRlbCByZWNvcmQgw6ggY2FtYmlhdG8uXHJcbiAgICovXHJcbiAgb25SZWNvcmRWYWx1ZUNoYW5nZSgpIHtcclxuICAgIGlmICghdGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmZpZWxkLlZpc2libGVJZikge1xyXG4gICAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxidXR0b24gW25nU3R5bGVdPVwiRmllbGRzdHlsZU9ialwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImdlbmVyYXRlQWN0aW9uKGZpZWxkKVwiPlxyXG4gICAgPG1hdC1pY29uICpuZ0lmPVwiZmllbGQuSWNvblwiPnt7ZmllbGQuSWNvbn19PC9tYXQtaWNvbj4ge3tmaWVsZC5CdXR0b25MYWJlbH19XHJcbjwvYnV0dG9uPiJdfQ==