@eqproject/eqp-dynamic-module 2.10.104 → 2.11.1

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 (65) hide show
  1. package/README.md +35 -15
  2. package/esm2020/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +2 -2
  3. package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +26 -26
  4. package/esm2020/lib/components/private/action-button-creator/action-button-creator.component.mjs +4 -4
  5. package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +18 -18
  6. package/esm2020/lib/components/private/add-formula-field/add-formula-field.component.mjs +7 -7
  7. package/esm2020/lib/components/private/dbg-templates/list-value-dbg-template/list-value-dbg-template.component.mjs +4 -4
  8. package/esm2020/lib/components/private/dbgetter/dbgetter.component.mjs +5 -5
  9. package/esm2020/lib/components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component.mjs +5 -5
  10. package/esm2020/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.mjs +5 -5
  11. package/esm2020/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.mjs +10 -10
  12. package/esm2020/lib/components/private/field-templates/date-field-template/date-field-template.component.mjs +3 -3
  13. package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +11 -11
  14. package/esm2020/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.mjs +16 -9
  15. package/esm2020/lib/components/private/field-templates/text-field-template/text-field-template.component.mjs +6 -6
  16. package/esm2020/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.mjs +6 -6
  17. package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +5 -5
  18. package/esm2020/lib/components/private/form-records/hlist-form-record/hlist-form-record.component.mjs +16 -16
  19. package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +19 -19
  20. package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +18 -18
  21. package/esm2020/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.mjs +32 -9
  22. package/esm2020/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.mjs +7 -7
  23. package/esm2020/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.mjs +8 -8
  24. package/esm2020/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.mjs +4 -4
  25. package/esm2020/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.mjs +7 -7
  26. package/esm2020/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.mjs +18 -11
  27. package/esm2020/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.mjs +7 -7
  28. package/esm2020/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.mjs +7 -7
  29. package/esm2020/lib/components/private/graphs/graphs.component.mjs +4 -4
  30. package/esm2020/lib/components/private/tmw-image-drawer/tmw-image-drawer.component.mjs +5 -5
  31. package/esm2020/lib/components/private/tmw-image-marker/tmw-image-marker.component.mjs +6 -6
  32. package/esm2020/lib/components/private/trigger-creator/trigger-creator.component.mjs +8 -10
  33. package/esm2020/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.mjs +5 -5
  34. package/esm2020/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.mjs +5 -5
  35. package/esm2020/lib/components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component.mjs +4 -4
  36. package/esm2020/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.mjs +15 -8
  37. package/esm2020/lib/components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component.mjs +7 -7
  38. package/esm2020/lib/components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component.mjs +7 -7
  39. package/esm2020/lib/eqp-dynamic-module.module.mjs +22 -44
  40. package/esm2020/lib/models/dynAttachment.mjs +1 -1
  41. package/fesm2015/eqproject-eqp-dynamic-module.mjs +275 -253
  42. package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
  43. package/fesm2020/eqproject-eqp-dynamic-module.mjs +274 -253
  44. package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
  45. package/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.d.ts +1 -1
  46. package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +8 -8
  47. package/lib/components/private/add-form-field/add-form-field.component.d.ts +14 -14
  48. package/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.d.ts +2 -2
  49. package/lib/components/private/field-templates/date-field-template/date-field-template.component.d.ts +1 -1
  50. package/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.d.ts +2 -2
  51. package/lib/components/private/form-records/hlist-form-record/hlist-form-record.component.d.ts +11 -11
  52. package/lib/components/private/form-records/list-form-record/list-form-record.component.d.ts +11 -11
  53. package/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.d.ts +9 -9
  54. package/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.d.ts +4 -3
  55. package/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.d.ts +1 -1
  56. package/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.d.ts +1 -1
  57. package/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.d.ts +1 -1
  58. package/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.d.ts +3 -3
  59. package/lib/components/private/trigger-creator/trigger-creator.component.d.ts +0 -2
  60. package/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.d.ts +1 -1
  61. package/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.d.ts +1 -1
  62. package/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.d.ts +3 -3
  63. package/lib/eqp-dynamic-module.module.d.ts +9 -26
  64. package/lib/models/dynAttachment.d.ts +2 -2
  65. package/package.json +8 -15
@@ -2,7 +2,7 @@ import { Component, Input } from '@angular/core';
2
2
  import { ListValueElement } from '../../dbgetter/dbgetter.component';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/common";
5
- import * as i2 from "@eqproject/eqp-select";
5
+ import * as i2 from "tmw-select";
6
6
  export class ListValueDbgTemplateComponent {
7
7
  constructor() {
8
8
  this.arrayData = new Array();
@@ -28,13 +28,13 @@ export class ListValueDbgTemplateComponent {
28
28
  }
29
29
  }
30
30
  ListValueDbgTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListValueDbgTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
31
- ListValueDbgTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ListValueDbgTemplateComponent, selector: "list-value-dbg-template", inputs: { field: "field", record: "record" }, ngImport: i0, template: "<eqp-select *ngIf=\"loaded\" [(ngModelInput)]=\"arrayData\" [arrayData]=\"arrayData\"\r\n [arrayKeyProperty]=\"'Value'\" [arrayValueProperty]=\"'Key'\"\r\n [isRequired]=\"field.Required\" [isDisabled]=\"true\" [showCancelButton]=\"false\"\r\n [isMultiSelect]=\"true\">\r\n</eqp-select>", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.EqpSelectComponent, selector: "eqp-select", inputs: ["placeholder", "enumData", "enumDataToExclude", "arrayData", "arrayKeyProperty", "arrayValueProperty", "ngModelOptions", "ngModelInput", "formGroupInput", "formControlNameInput", "isRequired", "isDisabled", "isMultiLanguage", "multilanguagePrefixKey", "isAlphabeticalOrderable", "suffixIcon", "prefixIcon", "isMultiSelect", "includeFullObject", "showCancelButton", "isSearchable", "searchText", "noResultSearchText", "data"], outputs: ["ngModelInputChange"] }] });
31
+ ListValueDbgTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ListValueDbgTemplateComponent, selector: "list-value-dbg-template", inputs: { field: "field", record: "record" }, ngImport: i0, template: "<tmw-select *ngIf=\"loaded\" [(ngModelInput)]=\"arrayData\" [arrayData]=\"arrayData\"\r\n [arrayKeyProperty]=\"'Value'\" [arrayValueProperty]=\"'Key'\"\r\n [isRequired]=\"field.Required\" [isDisabled]=\"true\" [showCancelButton]=\"false\"\r\n [isMultiSelect]=\"true\">\r\n</tmw-select>", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TmwSelectComponent, selector: "tmw-select", inputs: ["placeholder", "arrayData", "arrayKeyProperty", "arrayValueProperty", "includeFullObject", "enumData", "enumDataToExclude", "isMultiLanguage", "multilanguagePrefixKey", "isMultiSelect", "isRequired", "isDisabled", "showCancelButton", "isSearchable", "searchText", "noResultSearchText", "toolbarButtons", "showAddButton", "ngModelOptions", "ngModelInput", "formGroupInput", "formControlNameInput"], outputs: ["ngModelInputChange"] }] });
32
32
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListValueDbgTemplateComponent, decorators: [{
33
33
  type: Component,
34
- args: [{ selector: 'list-value-dbg-template', template: "<eqp-select *ngIf=\"loaded\" [(ngModelInput)]=\"arrayData\" [arrayData]=\"arrayData\"\r\n [arrayKeyProperty]=\"'Value'\" [arrayValueProperty]=\"'Key'\"\r\n [isRequired]=\"field.Required\" [isDisabled]=\"true\" [showCancelButton]=\"false\"\r\n [isMultiSelect]=\"true\">\r\n</eqp-select>" }]
34
+ args: [{ selector: 'list-value-dbg-template', template: "<tmw-select *ngIf=\"loaded\" [(ngModelInput)]=\"arrayData\" [arrayData]=\"arrayData\"\r\n [arrayKeyProperty]=\"'Value'\" [arrayValueProperty]=\"'Key'\"\r\n [isRequired]=\"field.Required\" [isDisabled]=\"true\" [showCancelButton]=\"false\"\r\n [isMultiSelect]=\"true\">\r\n</tmw-select>" }]
35
35
  }], propDecorators: { field: [{
36
36
  type: Input
37
37
  }], record: [{
38
38
  type: Input
39
39
  }] } });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12YWx1ZS1kYmctdGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2RiZy10ZW1wbGF0ZXMvbGlzdC12YWx1ZS1kYmctdGVtcGxhdGUvbGlzdC12YWx1ZS1kYmctdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2RiZy10ZW1wbGF0ZXMvbGlzdC12YWx1ZS1kYmctdGVtcGxhdGUvbGlzdC12YWx1ZS1kYmctdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7QUFRckUsTUFBTSxPQUFPLDZCQUE2QjtJQUwxQztRQVVFLGNBQVMsR0FBNEIsSUFBSSxLQUFLLEVBQW9CLENBQUM7UUFDbkUsV0FBTSxHQUFZLEtBQUssQ0FBQztLQXNCekI7SUFwQkMsUUFBUTtRQUVOLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBQztZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQztnQkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUFFO1lBQ25ILElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzdDLElBQUksV0FBVyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDekMsV0FBVyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUM1QixXQUFXLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ2xDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDOUIsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLFdBQVcsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7OzJIQTFCVSw2QkFBNkI7K0dBQTdCLDZCQUE2Qiw2R0NWMUMsd1NBSWE7NEZETUEsNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLHlCQUF5Qjs4QkFNMUIsS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9kYmdldHRlci9kYmdldHRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMaXN0VmFsdWVGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbGlzdFZhbHVlRmllbGQubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaXN0LXZhbHVlLWRiZy10ZW1wbGF0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3QtdmFsdWUtZGJnLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9saXN0LXZhbHVlLWRiZy10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXN0VmFsdWVEYmdUZW1wbGF0ZUNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIGZpZWxkOiBMaXN0VmFsdWVGaWVsZDtcclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZDtcclxuXHJcbiAgYXJyYXlEYXRhOiBBcnJheTxMaXN0VmFsdWVFbGVtZW50PiA9IG5ldyBBcnJheTxMaXN0VmFsdWVFbGVtZW50PigpO1xyXG4gIGxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBuZ09uSW5pdCgpe1xyXG5cclxuICAgIGlmICh0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICE9IG51bGwpe1xyXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSkpeyB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gW3RoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV1dOyB9XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0uZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICB2YXIgcHVzaEVsZW1lbnQgPSBuZXcgTGlzdFZhbHVlRWxlbWVudCgpO1xyXG4gICAgICAgIHB1c2hFbGVtZW50LklEID0gZWxlbWVudC5JRDtcclxuICAgICAgICBwdXNoRWxlbWVudC5GaWVsZCA9IGVsZW1lbnQuRmllbGQ7XHJcbiAgICAgICAgcHVzaEVsZW1lbnQuS2V5ID0gZWxlbWVudC5LZXk7XHJcbiAgICAgICAgcHVzaEVsZW1lbnQuU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHB1c2hFbGVtZW50LlZhbHVlID0gZWxlbWVudC5WYWx1ZTtcclxuICAgICAgICB0aGlzLmFycmF5RGF0YS5wdXNoKHB1c2hFbGVtZW50KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJMaXN0VmFsdWVEYmdUZW1wbGF0ZUNvbXBvbmVudFwiLCB0aGlzLmFycmF5RGF0YSk7XHJcblxyXG4gICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGVxcC1zZWxlY3QgKm5nSWY9XCJsb2FkZWRcIiBbKG5nTW9kZWxJbnB1dCldPVwiYXJyYXlEYXRhXCIgW2FycmF5RGF0YV09XCJhcnJheURhdGFcIlxyXG4gICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ1ZhbHVlJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ0tleSdcIlxyXG4gICAgW2lzUmVxdWlyZWRdPVwiZmllbGQuUmVxdWlyZWRcIiBbaXNEaXNhYmxlZF09XCJ0cnVlXCIgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgW2lzTXVsdGlTZWxlY3RdPVwidHJ1ZVwiPlxyXG48L2VxcC1zZWxlY3Q+Il19
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12YWx1ZS1kYmctdGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2RiZy10ZW1wbGF0ZXMvbGlzdC12YWx1ZS1kYmctdGVtcGxhdGUvbGlzdC12YWx1ZS1kYmctdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2RiZy10ZW1wbGF0ZXMvbGlzdC12YWx1ZS1kYmctdGVtcGxhdGUvbGlzdC12YWx1ZS1kYmctdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7QUFRckUsTUFBTSxPQUFPLDZCQUE2QjtJQUwxQztRQVVFLGNBQVMsR0FBNEIsSUFBSSxLQUFLLEVBQW9CLENBQUM7UUFDbkUsV0FBTSxHQUFZLEtBQUssQ0FBQztLQXNCekI7SUFwQkMsUUFBUTtRQUVOLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBQztZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQztnQkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUFFO1lBQ25ILElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzdDLElBQUksV0FBVyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDekMsV0FBVyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUM1QixXQUFXLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ2xDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDOUIsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLFdBQVcsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7OzJIQTFCVSw2QkFBNkI7K0dBQTdCLDZCQUE2Qiw2R0NWMUMsd1NBSWE7NEZETUEsNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLHlCQUF5Qjs4QkFNMUIsS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9kYmdldHRlci9kYmdldHRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMaXN0VmFsdWVGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbGlzdFZhbHVlRmllbGQubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaXN0LXZhbHVlLWRiZy10ZW1wbGF0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3QtdmFsdWUtZGJnLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9saXN0LXZhbHVlLWRiZy10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXN0VmFsdWVEYmdUZW1wbGF0ZUNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIGZpZWxkOiBMaXN0VmFsdWVGaWVsZDtcclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZDtcclxuXHJcbiAgYXJyYXlEYXRhOiBBcnJheTxMaXN0VmFsdWVFbGVtZW50PiA9IG5ldyBBcnJheTxMaXN0VmFsdWVFbGVtZW50PigpO1xyXG4gIGxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBuZ09uSW5pdCgpe1xyXG5cclxuICAgIGlmICh0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICE9IG51bGwpe1xyXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSkpeyB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gW3RoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV1dOyB9XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0uZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICB2YXIgcHVzaEVsZW1lbnQgPSBuZXcgTGlzdFZhbHVlRWxlbWVudCgpO1xyXG4gICAgICAgIHB1c2hFbGVtZW50LklEID0gZWxlbWVudC5JRDtcclxuICAgICAgICBwdXNoRWxlbWVudC5GaWVsZCA9IGVsZW1lbnQuRmllbGQ7XHJcbiAgICAgICAgcHVzaEVsZW1lbnQuS2V5ID0gZWxlbWVudC5LZXk7XHJcbiAgICAgICAgcHVzaEVsZW1lbnQuU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHB1c2hFbGVtZW50LlZhbHVlID0gZWxlbWVudC5WYWx1ZTtcclxuICAgICAgICB0aGlzLmFycmF5RGF0YS5wdXNoKHB1c2hFbGVtZW50KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJMaXN0VmFsdWVEYmdUZW1wbGF0ZUNvbXBvbmVudFwiLCB0aGlzLmFycmF5RGF0YSk7XHJcblxyXG4gICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPHRtdy1zZWxlY3QgKm5nSWY9XCJsb2FkZWRcIiBbKG5nTW9kZWxJbnB1dCldPVwiYXJyYXlEYXRhXCIgW2FycmF5RGF0YV09XCJhcnJheURhdGFcIlxyXG4gICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ1ZhbHVlJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ0tleSdcIlxyXG4gICAgW2lzUmVxdWlyZWRdPVwiZmllbGQuUmVxdWlyZWRcIiBbaXNEaXNhYmxlZF09XCJ0cnVlXCIgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgW2lzTXVsdGlTZWxlY3RdPVwidHJ1ZVwiPlxyXG48L3Rtdy1zZWxlY3Q+Il19
@@ -3,8 +3,8 @@ import { FieldTypeEnum } from '../../../models/baseField.model';
3
3
  import { GlobalService } from '../../../services/global.service';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/common/http";
6
- import * as i2 from "@angular/material/icon";
7
- import * as i3 from "@angular/common";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "tmw-icons";
8
8
  import * as i4 from "@angular/cdk/drag-drop";
9
9
  import * as i5 from "../../../directives/dynamic-loader/dynamic-loader.directive";
10
10
  export class DbgetterComponent {
@@ -438,10 +438,10 @@ export class DbgetterComponent {
438
438
  }
439
439
  }
440
440
  DbgetterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DbgetterComponent, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Component });
441
- DbgetterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DbgetterComponent, selector: "dbgetter", inputs: { configurations: "configurations", form: "form", field: "field", record: "record", inConfig: "inConfig", DirectlyOpenTable: "DirectlyOpenTable", QueryEditorComponent: "QueryEditorComponent", data: "data" }, outputs: { out: "out", selectedValue: "selectedValue", doReload: "doReload" }, ngImport: i0, template: "<div>\r\n <ng-template [appDynamicLoader] [data]=\"QueryEditorComponent\" (out)=\"onExternalSQLResultOut($event);\" *ngIf=\"QueryEditorComponent != null && relationsLoaded && reload\"></ng-template>\r\n</div>\r\n\r\n<div class=\"floatingtable draggable\" cdkDrag *ngIf=\"showTable\">\r\n <div class=\"header\">\r\n <div class=\"left\"><mat-icon (click)=\"close()\">close</mat-icon></div>\r\n <div class=\"left\"><mat-icon (click)=\"delete()\">delete</mat-icon></div>\r\n <div class=\"right\"><mat-icon>drag_indicator</mat-icon></div>\r\n </div>\r\n\r\n <div class=\"info\">\r\n <span *ngIf=\"!isMultiselect\">Seleziona il valore da registrare.</span>\r\n <span *ngIf=\"isMultiselect && multiselectPhase == 1\">Seleziona una colonna</span>\r\n <span *ngIf=\"isMultiselect && multiselectPhase == 2 && selectedColumn != null && field.DataGetter.DataGetterColumnForce == null\">Hai selezionato: <b>{{selectedColumn.split(\"__\")[1]}}</b>.</span>\r\n <span *ngIf=\"isMultiselect && multiselectPhase == 2\">Seleziona almeno un elemento presente sotto alla colonna selezionata</span> \r\n <span *ngIf=\"isMultiselect && multiselectPhase == 2 && selectedElements.length > 0\">\r\n <button class=\"btn btn-primary btn-confirm\" (click)=\"confirmSelection()\">\r\n <mat-icon >check</mat-icon> Conferma selezione\r\n </button>\r\n </span>\r\n </div>\r\n\r\n \r\n <table class=\"table\" [ngClass]=\"{'table-notforced': field.FieldType != fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce == null, 'table-forced': field.FieldType != fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce != null, 'table-multiselect-notforced': field.FieldType == fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce == null, 'table-multiselect-forced': field.FieldType == fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce != null}\">\r\n <tr><th *ngFor=\"let key of keys; let first = first\" (click)=\"selectColumn(key)\" id=\"headcol-{{key}}\">\r\n <span *ngIf=\"first\">{{key}}</span>\r\n <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n </th></tr>\r\n <tr *ngFor=\"let row of data\" class=\"rows\">\r\n <td *ngFor=\"let key of keys\" (click)=\"selectValue(row, key)\" id=\"col-{{key}}-id-{{row['ID']}}\">\r\n <!-- \r\n <span *ngIf=\"row[key] != null && row[key].toString().length <= 100\" [innerHTML]=\"row[key]\">\r\n\r\n </span> \r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n </span>\r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n ...\r\n </span>\r\n -->\r\n\r\n <span [innerHTML]=\"row[key]\">\r\n\r\n </span>\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n <!-- \r\n <table class=\"table table-notforced\" *ngIf=\"field.DataGetter.DataGetterColumnForce == null\">\r\n <tr><th *ngFor=\"let key of keys; let first = first\">\r\n <span *ngIf=\"first\">{{key}}</span>\r\n <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n </th></tr>\r\n <tr *ngFor=\"let row of data\" class=\"rows\">\r\n <td *ngFor=\"let key of keys\" (click)=\"selectValueNotForced(row[key])\">\r\n {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n ...\r\n </span>\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n <table class=\"table table-forced\" *ngIf=\"field.DataGetter.DataGetterColumnForce != null\">\r\n <tr><th *ngFor=\"let key of keys; let first = first\">\r\n <span *ngIf=\"first\">{{key}}</span>\r\n <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n </th></tr>\r\n <tr *ngFor=\"let row of data\" class=\"rows\" (click)=\"selectValueForced(row)\">\r\n <td *ngFor=\"let key of keys\">\r\n {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n ...\r\n </span>\r\n </td>\r\n </tr>\r\n </table>\r\n -->\r\n\r\n</div>\r\n\r\n<span *ngIf=\"value != null\">{{value}}</span>\r\n\r\n<button class=\"btn btn-primary btn-arrow-down\" (click)=\"activateTable()\" *ngIf=\"multipleValuesToChoose\">\r\n <mat-icon>keyboard_arrow_down</mat-icon>\r\n</button>\r\n<button class=\"btn btn-primary btn-arrow-down\" (click)=\"reloadData()\" *ngIf=\"field.DataGetter.DataGetterHasResetButton\">\r\n <mat-icon>loop</mat-icon>\r\n</button>", styles: [".floatingtable{position:fixed;bottom:10%;left:10%;width:80%;height:80%;background-color:#fff;border:1px solid black;border-radius:10px;margin:0;z-index:9000000000;padding:2px;overflow-x:hidden}.floatingtable .header{cursor:move;display:flex;justify-content:flex-start;height:40px;background-color:#4fa2c0;color:#fff;align-items:center;font-size:19px;padding-right:15px}.floatingtable .header>*{margin-right:10px}.floatingtable .header .left mat-icon{position:relative;top:5px;left:5px;cursor:pointer!important}.floatingtable .header .right mat-icon{position:relative;top:5px;left:5px}.floatingtable .table{width:calc(100% - 40px)!important;margin:20px!important;border:1px solid black}.floatingtable .table td,.floatingtable .table th{padding:2px!important}.floatingtable .table th{cursor:pointer}.floatingtable .table.table-notforced{width:99%;margin:0 5px}.floatingtable .table.table-notforced td,.floatingtable .table.table-notforced th{padding:2px 2px 2px 0}.floatingtable .table.table-notforced td span,.floatingtable .table.table-notforced th span{padding:0!important}.floatingtable .table.table-notforced td:hover{cursor:pointer;background-color:#d3d3d3;color:#000}.floatingtable .table.table-forced{width:99%;margin:0 5px}.floatingtable .table.table-forced td,.floatingtable .table.table-forced th{padding:2px 2px 2px 0}.floatingtable .table.table-forced td span,.floatingtable .table.table-forced th span{padding:0!important}.floatingtable .table.table-forced tr.rows:hover{cursor:pointer;background-color:#d3d3d3;color:#000}.floatingtable .table.table-multiselect-notforced{width:99%;margin:0 5px}.floatingtable .table.table-multiselect-notforced td,.floatingtable .table.table-multiselect-notforced th{padding:2px 2px 2px 0}.floatingtable .table.table-multiselect-notforced td span,.floatingtable .table.table-multiselect-notforced th span{padding:0!important}.floatingtable .table.table-multiselect-notforced td:hover{cursor:pointer;background-color:#d3d3d3;color:#000}.floatingtable .table.table-multiselect-forced{width:99%;margin:0 5px}.floatingtable .table.table-multiselect-forced td,.floatingtable .table.table-multiselect-forced th{padding:2px 2px 2px 0}.floatingtable .table.table-multiselect-forced td span,.floatingtable .table.table-multiselect-forced th span{padding:0!important}.floatingtable .table.table-multiselect-forced tr.rows:hover{cursor:pointer;background-color:#d3d3d3;color:#000}.btn-small{margin:0;padding:0 16px}.btn-arrow-down{margin-right:2px}.info{background-color:#080841;color:#fff;padding:10px}.row-selected,.row-selected span{background-color:#8ab784!important;color:#0e3f07!important;font-weight:700}.btn-confirm{margin-left:15px}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i5.DynamicLoaderDirective, selector: "[appDynamicLoader]", inputs: ["data"], outputs: ["out"] }] });
441
+ DbgetterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DbgetterComponent, selector: "dbgetter", inputs: { configurations: "configurations", form: "form", field: "field", record: "record", inConfig: "inConfig", DirectlyOpenTable: "DirectlyOpenTable", QueryEditorComponent: "QueryEditorComponent", data: "data" }, outputs: { out: "out", selectedValue: "selectedValue", doReload: "doReload" }, ngImport: i0, template: "<div>\r\n <ng-template [appDynamicLoader] [data]=\"QueryEditorComponent\" (out)=\"onExternalSQLResultOut($event);\" *ngIf=\"QueryEditorComponent != null && relationsLoaded && reload\"></ng-template>\r\n</div>\r\n\r\n<div class=\"floatingtable draggable\" cdkDrag *ngIf=\"showTable\">\r\n <div class=\"header\">\r\n <div class=\"left\"><tmw-icon class=\"mat-icon\" (click)=\"close()\" name=\"x\"></tmw-icon></div>\r\n <div class=\"left\"><tmw-icon class=\"mat-icon\" (click)=\"delete()\" name=\"trash\"></tmw-icon></div>\r\n <div class=\"right\"><tmw-icon class=\"mat-icon\" name=\"grip-vertical\"></tmw-icon></div>\r\n </div>\r\n\r\n <div class=\"info\">\r\n <span *ngIf=\"!isMultiselect\">Seleziona il valore da registrare.</span>\r\n <span *ngIf=\"isMultiselect && multiselectPhase == 1\">Seleziona una colonna</span>\r\n <span *ngIf=\"isMultiselect && multiselectPhase == 2 && selectedColumn != null && field.DataGetter.DataGetterColumnForce == null\">Hai selezionato: <b>{{selectedColumn.split(\"__\")[1]}}</b>.</span>\r\n <span *ngIf=\"isMultiselect && multiselectPhase == 2\">Seleziona almeno un elemento presente sotto alla colonna selezionata</span> \r\n <span *ngIf=\"isMultiselect && multiselectPhase == 2 && selectedElements.length > 0\">\r\n <button class=\"btn btn-primary btn-confirm\" (click)=\"confirmSelection()\">\r\n <tmw-icon class=\"mat-icon\" name=\"check\"></tmw-icon> Conferma selezione\r\n </button>\r\n </span>\r\n </div>\r\n\r\n \r\n <table class=\"table\" [ngClass]=\"{'table-notforced': field.FieldType != fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce == null, 'table-forced': field.FieldType != fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce != null, 'table-multiselect-notforced': field.FieldType == fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce == null, 'table-multiselect-forced': field.FieldType == fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce != null}\">\r\n <tr><th *ngFor=\"let key of keys; let first = first\" (click)=\"selectColumn(key)\" id=\"headcol-{{key}}\">\r\n <span *ngIf=\"first\">{{key}}</span>\r\n <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n </th></tr>\r\n <tr *ngFor=\"let row of data\" class=\"rows\">\r\n <td *ngFor=\"let key of keys\" (click)=\"selectValue(row, key)\" id=\"col-{{key}}-id-{{row['ID']}}\">\r\n <!-- \r\n <span *ngIf=\"row[key] != null && row[key].toString().length <= 100\" [innerHTML]=\"row[key]\">\r\n\r\n </span> \r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n </span>\r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n ...\r\n </span>\r\n -->\r\n\r\n <span [innerHTML]=\"row[key]\">\r\n\r\n </span>\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n <!-- \r\n <table class=\"table table-notforced\" *ngIf=\"field.DataGetter.DataGetterColumnForce == null\">\r\n <tr><th *ngFor=\"let key of keys; let first = first\">\r\n <span *ngIf=\"first\">{{key}}</span>\r\n <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n </th></tr>\r\n <tr *ngFor=\"let row of data\" class=\"rows\">\r\n <td *ngFor=\"let key of keys\" (click)=\"selectValueNotForced(row[key])\">\r\n {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n ...\r\n </span>\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n <table class=\"table table-forced\" *ngIf=\"field.DataGetter.DataGetterColumnForce != null\">\r\n <tr><th *ngFor=\"let key of keys; let first = first\">\r\n <span *ngIf=\"first\">{{key}}</span>\r\n <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n </th></tr>\r\n <tr *ngFor=\"let row of data\" class=\"rows\" (click)=\"selectValueForced(row)\">\r\n <td *ngFor=\"let key of keys\">\r\n {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n ...\r\n </span>\r\n </td>\r\n </tr>\r\n </table>\r\n -->\r\n\r\n</div>\r\n\r\n<span *ngIf=\"value != null\">{{value}}</span>\r\n\r\n<button class=\"btn btn-primary btn-arrow-down\" (click)=\"activateTable()\" *ngIf=\"multipleValuesToChoose\">\r\n <tmw-icon class=\"mat-icon\" name=\"chevron-down\"></tmw-icon>\r\n</button>\r\n<button class=\"btn btn-primary btn-arrow-down\" (click)=\"reloadData()\" *ngIf=\"field.DataGetter.DataGetterHasResetButton\">\r\n <tmw-icon class=\"mat-icon\" name=\"loop\"></tmw-icon>\r\n</button>", styles: [".floatingtable{position:fixed;bottom:10%;left:10%;width:80%;height:80%;background-color:#fff;border:1px solid black;border-radius:10px;margin:0;z-index:9000000000;padding:2px;overflow-x:hidden}.floatingtable .header{cursor:move;display:flex;justify-content:flex-start;height:40px;background-color:#4fa2c0;color:#fff;align-items:center;font-size:19px;padding-right:15px}.floatingtable .header>*{margin-right:10px}.floatingtable .header .left mat-icon{position:relative;top:5px;left:5px;cursor:pointer!important}.floatingtable .header .right mat-icon{position:relative;top:5px;left:5px}.floatingtable .table{width:calc(100% - 40px)!important;margin:20px!important;border:1px solid black}.floatingtable .table td,.floatingtable .table th{padding:2px!important}.floatingtable .table th{cursor:pointer}.floatingtable .table.table-notforced{width:99%;margin:0 5px}.floatingtable .table.table-notforced td,.floatingtable .table.table-notforced th{padding:2px 2px 2px 0}.floatingtable .table.table-notforced td span,.floatingtable .table.table-notforced th span{padding:0!important}.floatingtable .table.table-notforced td:hover{cursor:pointer;background-color:#d3d3d3;color:#000}.floatingtable .table.table-forced{width:99%;margin:0 5px}.floatingtable .table.table-forced td,.floatingtable .table.table-forced th{padding:2px 2px 2px 0}.floatingtable .table.table-forced td span,.floatingtable .table.table-forced th span{padding:0!important}.floatingtable .table.table-forced tr.rows:hover{cursor:pointer;background-color:#d3d3d3;color:#000}.floatingtable .table.table-multiselect-notforced{width:99%;margin:0 5px}.floatingtable .table.table-multiselect-notforced td,.floatingtable .table.table-multiselect-notforced th{padding:2px 2px 2px 0}.floatingtable .table.table-multiselect-notforced td span,.floatingtable .table.table-multiselect-notforced th span{padding:0!important}.floatingtable .table.table-multiselect-notforced td:hover{cursor:pointer;background-color:#d3d3d3;color:#000}.floatingtable .table.table-multiselect-forced{width:99%;margin:0 5px}.floatingtable .table.table-multiselect-forced td,.floatingtable .table.table-multiselect-forced th{padding:2px 2px 2px 0}.floatingtable .table.table-multiselect-forced td span,.floatingtable .table.table-multiselect-forced th span{padding:0!important}.floatingtable .table.table-multiselect-forced tr.rows:hover{cursor:pointer;background-color:#d3d3d3;color:#000}.btn-small{margin:0;padding:0 16px}.btn-arrow-down{margin-right:2px}.info{background-color:#080841;color:#fff;padding:10px}.row-selected,.row-selected span{background-color:#8ab784!important;color:#0e3f07!important;font-weight:700}.btn-confirm{margin-left:15px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TmwIconComponent, selector: "tmw-icon", inputs: ["name", "size", "ariaLabel", "variant", "strokeWidth"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i5.DynamicLoaderDirective, selector: "[appDynamicLoader]", inputs: ["data"], outputs: ["out"] }] });
442
442
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DbgetterComponent, decorators: [{
443
443
  type: Component,
444
- args: [{ selector: 'dbgetter', template: "<div>\r\n <ng-template [appDynamicLoader] [data]=\"QueryEditorComponent\" (out)=\"onExternalSQLResultOut($event);\" *ngIf=\"QueryEditorComponent != null && relationsLoaded && reload\"></ng-template>\r\n</div>\r\n\r\n<div class=\"floatingtable draggable\" cdkDrag *ngIf=\"showTable\">\r\n <div class=\"header\">\r\n <div class=\"left\"><mat-icon (click)=\"close()\">close</mat-icon></div>\r\n <div class=\"left\"><mat-icon (click)=\"delete()\">delete</mat-icon></div>\r\n <div class=\"right\"><mat-icon>drag_indicator</mat-icon></div>\r\n </div>\r\n\r\n <div class=\"info\">\r\n <span *ngIf=\"!isMultiselect\">Seleziona il valore da registrare.</span>\r\n <span *ngIf=\"isMultiselect && multiselectPhase == 1\">Seleziona una colonna</span>\r\n <span *ngIf=\"isMultiselect && multiselectPhase == 2 && selectedColumn != null && field.DataGetter.DataGetterColumnForce == null\">Hai selezionato: <b>{{selectedColumn.split(\"__\")[1]}}</b>.</span>\r\n <span *ngIf=\"isMultiselect && multiselectPhase == 2\">Seleziona almeno un elemento presente sotto alla colonna selezionata</span> \r\n <span *ngIf=\"isMultiselect && multiselectPhase == 2 && selectedElements.length > 0\">\r\n <button class=\"btn btn-primary btn-confirm\" (click)=\"confirmSelection()\">\r\n <mat-icon >check</mat-icon> Conferma selezione\r\n </button>\r\n </span>\r\n </div>\r\n\r\n \r\n <table class=\"table\" [ngClass]=\"{'table-notforced': field.FieldType != fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce == null, 'table-forced': field.FieldType != fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce != null, 'table-multiselect-notforced': field.FieldType == fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce == null, 'table-multiselect-forced': field.FieldType == fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce != null}\">\r\n <tr><th *ngFor=\"let key of keys; let first = first\" (click)=\"selectColumn(key)\" id=\"headcol-{{key}}\">\r\n <span *ngIf=\"first\">{{key}}</span>\r\n <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n </th></tr>\r\n <tr *ngFor=\"let row of data\" class=\"rows\">\r\n <td *ngFor=\"let key of keys\" (click)=\"selectValue(row, key)\" id=\"col-{{key}}-id-{{row['ID']}}\">\r\n <!-- \r\n <span *ngIf=\"row[key] != null && row[key].toString().length <= 100\" [innerHTML]=\"row[key]\">\r\n\r\n </span> \r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n </span>\r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n ...\r\n </span>\r\n -->\r\n\r\n <span [innerHTML]=\"row[key]\">\r\n\r\n </span>\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n <!-- \r\n <table class=\"table table-notforced\" *ngIf=\"field.DataGetter.DataGetterColumnForce == null\">\r\n <tr><th *ngFor=\"let key of keys; let first = first\">\r\n <span *ngIf=\"first\">{{key}}</span>\r\n <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n </th></tr>\r\n <tr *ngFor=\"let row of data\" class=\"rows\">\r\n <td *ngFor=\"let key of keys\" (click)=\"selectValueNotForced(row[key])\">\r\n {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n ...\r\n </span>\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n <table class=\"table table-forced\" *ngIf=\"field.DataGetter.DataGetterColumnForce != null\">\r\n <tr><th *ngFor=\"let key of keys; let first = first\">\r\n <span *ngIf=\"first\">{{key}}</span>\r\n <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n </th></tr>\r\n <tr *ngFor=\"let row of data\" class=\"rows\" (click)=\"selectValueForced(row)\">\r\n <td *ngFor=\"let key of keys\">\r\n {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n ...\r\n </span>\r\n </td>\r\n </tr>\r\n </table>\r\n -->\r\n\r\n</div>\r\n\r\n<span *ngIf=\"value != null\">{{value}}</span>\r\n\r\n<button class=\"btn btn-primary btn-arrow-down\" (click)=\"activateTable()\" *ngIf=\"multipleValuesToChoose\">\r\n <mat-icon>keyboard_arrow_down</mat-icon>\r\n</button>\r\n<button class=\"btn btn-primary btn-arrow-down\" (click)=\"reloadData()\" *ngIf=\"field.DataGetter.DataGetterHasResetButton\">\r\n <mat-icon>loop</mat-icon>\r\n</button>", styles: [".floatingtable{position:fixed;bottom:10%;left:10%;width:80%;height:80%;background-color:#fff;border:1px solid black;border-radius:10px;margin:0;z-index:9000000000;padding:2px;overflow-x:hidden}.floatingtable .header{cursor:move;display:flex;justify-content:flex-start;height:40px;background-color:#4fa2c0;color:#fff;align-items:center;font-size:19px;padding-right:15px}.floatingtable .header>*{margin-right:10px}.floatingtable .header .left mat-icon{position:relative;top:5px;left:5px;cursor:pointer!important}.floatingtable .header .right mat-icon{position:relative;top:5px;left:5px}.floatingtable .table{width:calc(100% - 40px)!important;margin:20px!important;border:1px solid black}.floatingtable .table td,.floatingtable .table th{padding:2px!important}.floatingtable .table th{cursor:pointer}.floatingtable .table.table-notforced{width:99%;margin:0 5px}.floatingtable .table.table-notforced td,.floatingtable .table.table-notforced th{padding:2px 2px 2px 0}.floatingtable .table.table-notforced td span,.floatingtable .table.table-notforced th span{padding:0!important}.floatingtable .table.table-notforced td:hover{cursor:pointer;background-color:#d3d3d3;color:#000}.floatingtable .table.table-forced{width:99%;margin:0 5px}.floatingtable .table.table-forced td,.floatingtable .table.table-forced th{padding:2px 2px 2px 0}.floatingtable .table.table-forced td span,.floatingtable .table.table-forced th span{padding:0!important}.floatingtable .table.table-forced tr.rows:hover{cursor:pointer;background-color:#d3d3d3;color:#000}.floatingtable .table.table-multiselect-notforced{width:99%;margin:0 5px}.floatingtable .table.table-multiselect-notforced td,.floatingtable .table.table-multiselect-notforced th{padding:2px 2px 2px 0}.floatingtable .table.table-multiselect-notforced td span,.floatingtable .table.table-multiselect-notforced th span{padding:0!important}.floatingtable .table.table-multiselect-notforced td:hover{cursor:pointer;background-color:#d3d3d3;color:#000}.floatingtable .table.table-multiselect-forced{width:99%;margin:0 5px}.floatingtable .table.table-multiselect-forced td,.floatingtable .table.table-multiselect-forced th{padding:2px 2px 2px 0}.floatingtable .table.table-multiselect-forced td span,.floatingtable .table.table-multiselect-forced th span{padding:0!important}.floatingtable .table.table-multiselect-forced tr.rows:hover{cursor:pointer;background-color:#d3d3d3;color:#000}.btn-small{margin:0;padding:0 16px}.btn-arrow-down{margin-right:2px}.info{background-color:#080841;color:#fff;padding:10px}.row-selected,.row-selected span{background-color:#8ab784!important;color:#0e3f07!important;font-weight:700}.btn-confirm{margin-left:15px}\n"] }]
444
+ args: [{ selector: 'dbgetter', template: "<div>\r\n <ng-template [appDynamicLoader] [data]=\"QueryEditorComponent\" (out)=\"onExternalSQLResultOut($event);\" *ngIf=\"QueryEditorComponent != null && relationsLoaded && reload\"></ng-template>\r\n</div>\r\n\r\n<div class=\"floatingtable draggable\" cdkDrag *ngIf=\"showTable\">\r\n <div class=\"header\">\r\n <div class=\"left\"><tmw-icon class=\"mat-icon\" (click)=\"close()\" name=\"x\"></tmw-icon></div>\r\n <div class=\"left\"><tmw-icon class=\"mat-icon\" (click)=\"delete()\" name=\"trash\"></tmw-icon></div>\r\n <div class=\"right\"><tmw-icon class=\"mat-icon\" name=\"grip-vertical\"></tmw-icon></div>\r\n </div>\r\n\r\n <div class=\"info\">\r\n <span *ngIf=\"!isMultiselect\">Seleziona il valore da registrare.</span>\r\n <span *ngIf=\"isMultiselect && multiselectPhase == 1\">Seleziona una colonna</span>\r\n <span *ngIf=\"isMultiselect && multiselectPhase == 2 && selectedColumn != null && field.DataGetter.DataGetterColumnForce == null\">Hai selezionato: <b>{{selectedColumn.split(\"__\")[1]}}</b>.</span>\r\n <span *ngIf=\"isMultiselect && multiselectPhase == 2\">Seleziona almeno un elemento presente sotto alla colonna selezionata</span> \r\n <span *ngIf=\"isMultiselect && multiselectPhase == 2 && selectedElements.length > 0\">\r\n <button class=\"btn btn-primary btn-confirm\" (click)=\"confirmSelection()\">\r\n <tmw-icon class=\"mat-icon\" name=\"check\"></tmw-icon> Conferma selezione\r\n </button>\r\n </span>\r\n </div>\r\n\r\n \r\n <table class=\"table\" [ngClass]=\"{'table-notforced': field.FieldType != fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce == null, 'table-forced': field.FieldType != fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce != null, 'table-multiselect-notforced': field.FieldType == fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce == null, 'table-multiselect-forced': field.FieldType == fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce != null}\">\r\n <tr><th *ngFor=\"let key of keys; let first = first\" (click)=\"selectColumn(key)\" id=\"headcol-{{key}}\">\r\n <span *ngIf=\"first\">{{key}}</span>\r\n <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n </th></tr>\r\n <tr *ngFor=\"let row of data\" class=\"rows\">\r\n <td *ngFor=\"let key of keys\" (click)=\"selectValue(row, key)\" id=\"col-{{key}}-id-{{row['ID']}}\">\r\n <!-- \r\n <span *ngIf=\"row[key] != null && row[key].toString().length <= 100\" [innerHTML]=\"row[key]\">\r\n\r\n </span> \r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n </span>\r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n ...\r\n </span>\r\n -->\r\n\r\n <span [innerHTML]=\"row[key]\">\r\n\r\n </span>\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n <!-- \r\n <table class=\"table table-notforced\" *ngIf=\"field.DataGetter.DataGetterColumnForce == null\">\r\n <tr><th *ngFor=\"let key of keys; let first = first\">\r\n <span *ngIf=\"first\">{{key}}</span>\r\n <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n </th></tr>\r\n <tr *ngFor=\"let row of data\" class=\"rows\">\r\n <td *ngFor=\"let key of keys\" (click)=\"selectValueNotForced(row[key])\">\r\n {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n ...\r\n </span>\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n <table class=\"table table-forced\" *ngIf=\"field.DataGetter.DataGetterColumnForce != null\">\r\n <tr><th *ngFor=\"let key of keys; let first = first\">\r\n <span *ngIf=\"first\">{{key}}</span>\r\n <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n </th></tr>\r\n <tr *ngFor=\"let row of data\" class=\"rows\" (click)=\"selectValueForced(row)\">\r\n <td *ngFor=\"let key of keys\">\r\n {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n ...\r\n </span>\r\n </td>\r\n </tr>\r\n </table>\r\n -->\r\n\r\n</div>\r\n\r\n<span *ngIf=\"value != null\">{{value}}</span>\r\n\r\n<button class=\"btn btn-primary btn-arrow-down\" (click)=\"activateTable()\" *ngIf=\"multipleValuesToChoose\">\r\n <tmw-icon class=\"mat-icon\" name=\"chevron-down\"></tmw-icon>\r\n</button>\r\n<button class=\"btn btn-primary btn-arrow-down\" (click)=\"reloadData()\" *ngIf=\"field.DataGetter.DataGetterHasResetButton\">\r\n <tmw-icon class=\"mat-icon\" name=\"loop\"></tmw-icon>\r\n</button>", styles: [".floatingtable{position:fixed;bottom:10%;left:10%;width:80%;height:80%;background-color:#fff;border:1px solid black;border-radius:10px;margin:0;z-index:9000000000;padding:2px;overflow-x:hidden}.floatingtable .header{cursor:move;display:flex;justify-content:flex-start;height:40px;background-color:#4fa2c0;color:#fff;align-items:center;font-size:19px;padding-right:15px}.floatingtable .header>*{margin-right:10px}.floatingtable .header .left mat-icon{position:relative;top:5px;left:5px;cursor:pointer!important}.floatingtable .header .right mat-icon{position:relative;top:5px;left:5px}.floatingtable .table{width:calc(100% - 40px)!important;margin:20px!important;border:1px solid black}.floatingtable .table td,.floatingtable .table th{padding:2px!important}.floatingtable .table th{cursor:pointer}.floatingtable .table.table-notforced{width:99%;margin:0 5px}.floatingtable .table.table-notforced td,.floatingtable .table.table-notforced th{padding:2px 2px 2px 0}.floatingtable .table.table-notforced td span,.floatingtable .table.table-notforced th span{padding:0!important}.floatingtable .table.table-notforced td:hover{cursor:pointer;background-color:#d3d3d3;color:#000}.floatingtable .table.table-forced{width:99%;margin:0 5px}.floatingtable .table.table-forced td,.floatingtable .table.table-forced th{padding:2px 2px 2px 0}.floatingtable .table.table-forced td span,.floatingtable .table.table-forced th span{padding:0!important}.floatingtable .table.table-forced tr.rows:hover{cursor:pointer;background-color:#d3d3d3;color:#000}.floatingtable .table.table-multiselect-notforced{width:99%;margin:0 5px}.floatingtable .table.table-multiselect-notforced td,.floatingtable .table.table-multiselect-notforced th{padding:2px 2px 2px 0}.floatingtable .table.table-multiselect-notforced td span,.floatingtable .table.table-multiselect-notforced th span{padding:0!important}.floatingtable .table.table-multiselect-notforced td:hover{cursor:pointer;background-color:#d3d3d3;color:#000}.floatingtable .table.table-multiselect-forced{width:99%;margin:0 5px}.floatingtable .table.table-multiselect-forced td,.floatingtable .table.table-multiselect-forced th{padding:2px 2px 2px 0}.floatingtable .table.table-multiselect-forced td span,.floatingtable .table.table-multiselect-forced th span{padding:0!important}.floatingtable .table.table-multiselect-forced tr.rows:hover{cursor:pointer;background-color:#d3d3d3;color:#000}.btn-small{margin:0;padding:0 16px}.btn-arrow-down{margin-right:2px}.info{background-color:#080841;color:#fff;padding:10px}.row-selected,.row-selected span{background-color:#8ab784!important;color:#0e3f07!important;font-weight:700}.btn-confirm{margin-left:15px}\n"] }]
445
445
  }], ctorParameters: function () { return [{ type: i1.HttpClient }]; }, propDecorators: { configurations: [{
446
446
  type: Input
447
447
  }], form: [{
@@ -474,4 +474,4 @@ export var QueryEditorModeEnum;
474
474
  QueryEditorModeEnum[QueryEditorModeEnum["COMPOSER"] = 2] = "COMPOSER";
475
475
  QueryEditorModeEnum[QueryEditorModeEnum["RESULT"] = 3] = "RESULT";
476
476
  })(QueryEditorModeEnum || (QueryEditorModeEnum = {}));
477
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGJnZXR0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2RiZ2V0dGVyL2RiZ2V0dGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9kYmdldHRlci9kYmdldHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3ZFLE9BQU8sRUFBaUMsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7O0FBT2pFLE1BQU0sT0FBTyxpQkFBaUI7SUF1QzVCLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFyQ2pDLG1CQUFjLEdBQStCLElBQUksQ0FBQztRQUlsRCxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyx5QkFBb0IsR0FBK0IsSUFBSSxDQUFDLENBQUMsbUNBQW1DO1FBQzVGLFNBQUksR0FBUSxJQUFJLENBQUMsQ0FBQyx3Q0FBd0M7UUFFekQsUUFBRyxHQUEyQixJQUFJLFlBQVksRUFBWSxDQUFDO1FBQzNELGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDM0QsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRWhFLFNBQUksR0FBa0IsSUFBSSxDQUFDO1FBQzNCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFHeEIsY0FBUyxHQUFZLEtBQUssQ0FBQztR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QUFNOztBQTBmVCxNQUFNLE9BQU8sZ0JBQWdCO0NBUzVCO0FBRUQsNkJBQTZCO0FBQzdCLE1BQU0sQ0FBTixJQUFZLG1CQUlYO0FBSkQsV0FBWSxtQkFBbUI7SUFDN0IsNkVBQWtCLENBQUE7SUFDbEIscUVBQWMsQ0FBQTtJQUNkLGlFQUFZLENBQUE7QUFDZCxDQUFDLEVBSlcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUk5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhLCBldmVudE91dCB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvZHluYW1pYy1sb2FkZXIvZHluYW1pYy1sb2FkZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFzZUZpZWxkLCBEYXRhR2V0dGVyVHlwZUVudW0sIEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGJnZXR0ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYmdldHRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGJnZXR0ZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGJnZXR0ZXJDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm07XHJcbiAgQElucHV0KCkgZmllbGQ6IGFueTsgLy8gU29ubyBjb3N0cmV0dG8gYSBtZXR0ZXJlIGFueSBwZXIgZ2VzdGlyZSBpIGNhbXBpIGRpIHRpcG8gZWxlbmNvIGdlbmVyaWNvIGNoZSBoYW5ubyB1bmEgc3RydXR0dXJhIHVuIHBvJyBkaXZlcnNhLCBhbHRyaW1lbnRpIGRvdnJlaSBmYXJlIHVuIGNhc2lubyBkaSBjYXN0IGUgbm9uIG5lIHZhbGUgbGEgcGVuYVxyXG4gIEBJbnB1dCgpIHJlY29yZDogUmVjb3JkO1xyXG4gIEBJbnB1dCgpIGluQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgRGlyZWN0bHlPcGVuVGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBRdWVyeUVkaXRvckNvbXBvbmVudDogRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGEgPSBudWxsOyAvLyBMJ2ludGVybyBjb21wb25lbnRlIHF1ZXJ5IEVkaXRvclxyXG4gIEBJbnB1dCgpIGRhdGE6IGFueSA9IG51bGw7IC8vIExvIGZhY2NpYW1vIGZ1bnppb25hcmUgdGlwbyBFUVAtVEFCTEVcclxuXHJcbiAgQE91dHB1dCgpIG91dDogRXZlbnRFbWl0dGVyPGV2ZW50T3V0PiA9IG5ldyBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkVmFsdWU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGRvUmVsb2FkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpOyAgXHJcblxyXG4gIGtleXM6IEFycmF5PHN0cmluZz4gPSBudWxsO1xyXG4gIGxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZhbHVlOiBhbnk7XHJcblxyXG4gIHNob3dUYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBoYXZlUXVlc3Rpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGF2ZVJlbGF0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHJlbG9hZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgbXVsdGlwbGVWYWx1ZXNUb0Nob29zZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpbnRlcnZhbDogYW55O1xyXG5cclxuICByZWxhdGlvbnM6IEFycmF5PHtmaWVsZDogc3RyaW5nLCBsb2FkZWQ6IGJvb2xlYW4sIGFjdHVhbHZhbHVlOiBhbnl9PiA9IG5ldyBBcnJheTx7ZmllbGQ6IHN0cmluZywgbG9hZGVkOiBib29sZWFuLCBhY3R1YWx2YWx1ZTogYW55fT4oKTtcclxuICByZWxhdGlvbnNMb2FkZWQ6IGJvb2xlYW47XHJcbiAgYmFja3VwUXVlc3Rpb25GaWVsZHM6IEFycmF5PHN0cmluZz4gPSBudWxsO1xyXG5cclxuICBpc011bHRpc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgbXVsdGlzZWxlY3RQaGFzZTogbnVtYmVyID0gMTtcclxuICBzZWxlY3RlZENvbHVtbjogc3RyaW5nID0gXCJcIjtcclxuICBzZWxlY3RlZEVsZW1lbnRzOiBBcnJheTxMaXN0VmFsdWVFbGVtZW50PiA9IG5ldyBBcnJheTxMaXN0VmFsdWVFbGVtZW50PigpO1xyXG5cclxuICBmaWVsZFR5cGVFbnVtID0gRmllbGRUeXBlRW51bTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiLS0tIElOU0lERSBEQkdFVFRFUiAtLS1cIik7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKG51bGwsIHRoaXMuZm9ybSk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKG51bGwsIHRoaXMucmVjb3JkKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2cobnVsbCwgdGhpcy5maWVsZCk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKG51bGwsIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQpO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIi0tLSBJTlNJREUgREJHRVRURVIgLS0tXCIpO1xyXG5cclxuICAgICAgLy8gSW5pemlvIFJldHJvY29tcGF0aWJpbGl0w6BcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJIYXNSZXNldEJ1dHRvbiA9PT0gXCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJIYXNSZXNldEJ1dHRvbiA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEZpbmUgUmV0cm9jb21wYXRpYmlsaXTDoFxyXG5cclxuICAgICAgLy8gSW5pemlvIE5vcm1hbGl6emF6aW9uZSBWMiAoT21uaXNlYXJjaCBBSSDigJQgRGF0YUdldHRlckNvZGVWZXJzaW9uPTIpXHJcbiAgICAgIC8vIElsIERhdGFHZXR0ZXJWYWx1ZSBWMiBhbm5pZGEgaWwgcXVlcnkgY29uZmlnIGluIHF1ZXJ5Q29tbWFuZERhdGFiYXNlQ29uZmlndXJhdGlvbi5cclxuICAgICAgLy8gUGVyIGV2aXRhcmUgZGkgZHVwbGljYXJlIHR1dHRhIGxhIGxvZ2ljYSwgdW53cmFwcGlhbW8gaW4tcGxhY2UgYWwgZm9ybWF0byBWMVxyXG4gICAgICAvLyBjb3PDrCBpbCByZXN0byBkZWwgY29kaWNlIHJpbWFuZSBpbnZhcmlhdG8uXHJcbiAgICAgIGNvbnN0IGlzVjIgPSB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlPy5EYXRhR2V0dGVyQ29kZVZlcnNpb24gPT09IDI7XHJcbiAgICAgIGlmIChpc1YyKSB7XHJcbiAgICAgICAgY29uc3QgdjJ3cmFwcGVyID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZTtcclxuICAgICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID0gdjJ3cmFwcGVyLnF1ZXJ5Q29tbWFuZERhdGFiYXNlQ29uZmlndXJhdGlvbjtcclxuICAgICAgICAvLyBEYXRhR2V0dGVyQ29sdW1uRm9yY2UgaW4gVjIgcHXDsiBzdGFyZSBuZWxsJ29nZ2V0dG8gaW50ZXJubyDigJQgcHJvcGFnYWxvIHNlIG1hbmNhIGFsbCdlc3Rlcm5vXHJcbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlICYmIHYyd3JhcHBlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPSB2MndyYXBwZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBGaW5lIE5vcm1hbGl6emF6aW9uZSBWMlxyXG5cclxuICAgICAgLy8gSW5pemlvOiBUYWJlbGxhIG11bHRpc2VsZWN0P1xyXG5cclxuICAgICAgaWYgKHRoaXMuZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0VsZW5jbyBnZW5lcmljbyddKXtcclxuICAgICAgICB0aGlzLmlzTXVsdGlzZWxlY3QgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSAhPSBudWxsKXtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW4gPSB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlLmtleTtcclxuICAgICAgICAgIHRoaXMubXVsdGlzZWxlY3RQaGFzZSA9IDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdOyAgICBcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnRzID09IG51bGwpeyB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBuZXcgQXJyYXk8TGlzdFZhbHVlRWxlbWVudD4oKTsgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBGaW5lOiBUYWJlbGxhIG11bHRpc2VsZWN0P1xyXG5cclxuICAgIGlmICh0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50ICE9IG51bGwpe1xyXG4gICAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5tb2RlID0gUXVlcnlFZGl0b3JNb2RlRW51bS5SRVNVTFQ7XHJcbiAgICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmZpZWxkID0gdGhpcy5maWVsZDtcclxuICAgICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcucmVjb3JkID0gdGhpcy5yZWNvcmQ7XHJcbiAgICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmluQ29uZmlnID0gdGhpcy5pbkNvbmZpZztcclxuXHJcbiAgICAgIC8vIFYyOiBpbCBRdWVyeUVkaXRvciBpbiBSRVNVTFQgbW9kZSByaWNldmUgaWwgcXVlcnlDb25maWcgZSBpbCB2ZXJzaW9uIGZsYWdcclxuICAgICAgaWYgKGlzVjIpIHtcclxuICAgICAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5sb2FkUXVlcnlTdGF0dXNlcyA9IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWU7XHJcbiAgICAgICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcuRGF0YUdldHRlckNvZGVWZXJzaW9uID0gMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUub3BlbmVkRmllbGRzLmZpbmQoeCA9PiB0eXBlb2YgeC5RdWVyeVByb3BlcnR5VmFsdWUgIT09IFwib2JqZWN0XCIgJiYgeC5RdWVyeVByb3BlcnR5VmFsdWUgPT0gJz8nKSAhPSBudWxsKXtcclxuICAgICAgICBcclxuICAgICAgICAvLyBJbCBjYW1wbyBoYSBhbG1lbm8gdW4gdmFsb3JlIGNvbiBcIj9cIlxyXG4gICAgICAgIHRoaXMuaGF2ZVF1ZXN0aW9ucyA9IHRydWU7XHJcblxyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJDSEVDS0lORyBCQUNLVVBTIE9QRU5FRCBGSUVMRFMuLi4uXCIsIHRoaXMuYmFja3VwUXVlc3Rpb25GaWVsZHMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5iYWNrdXBRdWVzdGlvbkZpZWxkcyA9PSBudWxsKXtcclxuICAgICAgICAgIHRoaXMuYmFja3VwUXVlc3Rpb25GaWVsZHMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZS5vcGVuZWRGaWVsZHMuZm9yRWFjaCgocnFmKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFja3VwUXVlc3Rpb25GaWVsZHMucHVzaChycWYuUHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZS5vcGVuZWRGaWVsZHMuZmluZCh4ID0+IHR5cGVvZiB4LlF1ZXJ5UHJvcGVydHlWYWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB4LlF1ZXJ5UHJvcGVydHlWYWx1ZS5pbmRleE9mKCchJykgIT0gLTEpICE9IG51bGwpe1xyXG5cclxuICAgICAgICAvLyBJbCBjYW1wbyBoYSBhbG1lbm8gdW4gdmFsb3JlIGNvbiBcIiFub21lcmVsYXppb25lXCJcclxuICAgICAgICB0aGlzLmhhdmVSZWxhdGlvbnMgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlLm9wZW5lZEZpZWxkcy5maWx0ZXIoeCA9PiB4LlF1ZXJ5UHJvcGVydHlWYWx1ZS5pbmRleE9mKCchJykgIT0gLTEpLmZvckVhY2goKGZpZWxkV2l0aFJlbGF0aW9uKSA9PiB7XHJcblxyXG4gICAgICAgICAgdmFyIGZpZWxkUmVsYXRlZCA9IGZpZWxkV2l0aFJlbGF0aW9uLlF1ZXJ5UHJvcGVydHlWYWx1ZS5yZXBsYWNlKFwiIVwiLFwiXCIpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdID09IG51bGwpe1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwidGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSBFJyBOVUxMXCIsIHRoaXMuZmllbGQuTmFtZSwgZmllbGRSZWxhdGVkLCB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRpb25zLnB1c2goe2ZpZWxkOiBmaWVsZFJlbGF0ZWQsIGxvYWRlZDogZmFsc2UsIGFjdHVhbHZhbHVlOiB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdfSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tSZWxhdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwidGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSBDSEVDS1wiLCB0aGlzLmZpZWxkLk5hbWUsIGZpZWxkUmVsYXRlZCwgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSwgdGhpcy5yZWNvcmQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRSZWxhdGlvbiA9IHRoaXMucmVsYXRpb25zLmZpbmQoeCA9PiB4LmZpZWxkID09IGZpZWxkUmVsYXRlZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFJlbGF0aW9uICE9IG51bGwpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gR2VzdGlvbmUgZGVpIGNhbWJpIGRpIHZhbG9yZSBkZWkgY2FtcGkgcmVsYXppb25hdGlcclxuICAgICAgICAgICAgICAgICAgLy8gSWwgY2FtcG8gcmVsYXppb25hdG8gSU5JWklBTE1FTlRFIE5PTiBFJyBOVUxMLCBlIGNhbWJpYSB2YWxvcmUgaW4gcXVhbGNvc2EgY2hlIE5PTiBFJyBOVUxMXHJcbiAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UmVsYXRpb24uYWN0dWFsdmFsdWUgIT0gbnVsbCAmJiB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdICE9IG51bGwgJiYgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSAhPSBjdXJyZW50UmVsYXRpb24uYWN0dWFsdmFsdWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJ0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdIEhBIENBTUJJQVRPIFZBTE9SRSEhXCIsIHRoaXMuZmllbGQuTmFtZSwgZmllbGRSZWxhdGVkLCB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlbGF0aW9uLmFjdHVhbHZhbHVlID0gdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVsYXRpb24ubG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZFdpdGhSZWxhdGlvbi5RdWVyeVByb3BlcnR5VmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIElsIGNhbXBvIHJlbGF6aW9uYXRvIElOSVpJQUxNRU5URSBOT04gRScgTlVMTCwgZSBjYW1iaWEgdmFsb3JlIElOIE5VTExcclxuICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudFJlbGF0aW9uLmFjdHVhbHZhbHVlICE9IG51bGwgJiYgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwidGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSBFJyBUT1JOQVRPIEFEIEVTU0VSRSBOVUxMISEgOihcIiwgdGhpcy5maWVsZC5OYW1lLCBmaWVsZFJlbGF0ZWQsIHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0sIHRoaXMucmVjb3JkKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVsYXRpb24uYWN0dWFsdmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWxhdGlvbi5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkV2l0aFJlbGF0aW9uLlF1ZXJ5UHJvcGVydHlWYWx1ZSA9IFwiIVwiK2ZpZWxkUmVsYXRlZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVjdXBlcm8gQmFja3VwXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWNrdXBRdWVzdGlvbkZpZWxkcy5mb3JFYWNoKChib2YpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUub3BlbmVkRmllbGRzLmZpbmQoeCA9PiB4LlByb3BlcnR5TmFtZSA9PSBib2YpLlF1ZXJ5UHJvcGVydHlWYWx1ZSA9IFwiP1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZENvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBJbCBjYW1wbyByZWxhemlvbmF0byBJTklaSUFMTUVOVEUgRScgTlVMTCwgZSBjYW1iaWEgdmFsb3JlXHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRSZWxhdGlvbi5hY3R1YWx2YWx1ZSA9PSBudWxsICYmIHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gTk9OIEUnIFBJVScgTlVMTCEhIDopXCIsIHRoaXMuZmllbGQuTmFtZSwgZmllbGRSZWxhdGVkLCB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlbGF0aW9uLmFjdHVhbHZhbHVlID0gdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVsYXRpb24ubG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZFdpdGhSZWxhdGlvbi5RdWVyeVByb3BlcnR5VmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tSZWxhdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sMjAwKTtcclxuXHJcblxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gTk9OIEUnIE5VTEwhISA6KVwiLCB0aGlzLmZpZWxkLk5hbWUsIGZpZWxkUmVsYXRlZCwgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSwgdGhpcy5yZWNvcmQpO1xyXG4gICAgICAgICAgICBmaWVsZFdpdGhSZWxhdGlvbi5RdWVyeVByb3BlcnR5VmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdICE9IG51bGwgPyB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdIDogJyc7XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRpb25zLnB1c2goe2ZpZWxkOiBmaWVsZFJlbGF0ZWQsIGxvYWRlZDogdHJ1ZSwgYWN0dWFsdmFsdWU6IHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF19KTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja1JlbGF0aW9ucygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgfSk7ICAgICAgICBcclxuXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRoaXMuaGF2ZVJlbGF0aW9ucyl7XHJcbiAgICAgICAgdGhpcy5yZWxhdGlvbnNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9ICAgICBcclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGF0YSA9PSBudWxsKXtcclxuXHJcbiAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQoJy4vYXNzZXRzL21vY2t1cHMvbW9ja2VkRnJvbVF1ZXJ5RWRpdG9yX1JFU1VMVF9NQU5ZX05VTUVSSUMudHh0Jywge3Jlc3BvbnNlVHlwZTogJ3RleHQnfSlcclxuICAgICAgLnN1YnNjcmliZShtb2NrZWRGcm9tUXVlcnlFZGl0b3IgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UobW9ja2VkRnJvbVF1ZXJ5RWRpdG9yKTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBKU09OLnBhcnNlKHRoaXMuZGF0YS5yZXN1bHQpO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc1Jlc3VsdCh0aGlzLmRhdGEsW10pO1xyXG4gICAgICAgfSk7ICAgICAgXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHJlbG9hZENvbXBvbmVudCgpe1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJFTE9BRCBDT01QT05FTlQgQ0FMTEVEXCIsIHRoaXMucmVjb3JkLCB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5yZWNvcmQpO1xyXG5cclxuICAgIHRoaXMucmVsb2FkID0gZmFsc2U7XHJcbiAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5yZWNvcmQgPSB0aGlzLnJlY29yZDtcclxuICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmZpZWxkID0gdGhpcy5maWVsZDtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5yZWxvYWQgPSB0cnVlOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiUkVMT0FERUQgUVVFUllFRElUT1JcIik7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSwgMzAwMCk7IFxyXG4gIH1cclxuXHJcbiAgY2hlY2tSZWxhdGlvbnMoKXtcclxuICAgIHRoaXMucmVsYXRpb25zTG9hZGVkID0gdGhpcy5yZWxhdGlvbnMuZmluZCh4ID0+IHgubG9hZGVkKSAhPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgb25FeHRlcm5hbFNRTFJlc3VsdE91dChldjogZXZlbnRPdXQpe1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJSaXN1bHRhdG8gZGVsbCdlbGFib3JhemlvbmUgZGVsIHF1ZXJ5IGVkaXRvcjogb25FeHRlcm5hbFNRTFJlc3VsdE91dFwiLCBldik7XHJcblxyXG4gICAgaWYgKGV2LkJlaGF2aW91cnMuaW5kZXhPZihcInNlbmQtb3V0XCIpICE9IC0xKXsgdGhpcy5vdXQuZW1pdChldik7IH1cclxuXHJcbiAgICB0aGlzLmRhdGEgPSBKU09OLnBhcnNlKGV2LlBhcmFtcy5yZXN1bHQpO1xyXG4gICAgdGhpcy5wcm9jZXNzUmVzdWx0KHRoaXMuZGF0YSxldi5CZWhhdmlvdXJzKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcm9jZXNzUmVzdWx0KGRhdGE6IGFueSwgYmVoYXZpb3VyczogQXJyYXk8c3RyaW5nPiA9IFtdKXtcclxuICAgIFxyXG4gICAgLy9kYXRhIMOoIGwnYXJyYXkgZGVpIHJlY29yZCB0b3JuYXRpIGRhbCBkYlxyXG5cclxuICAgIC8vIHNlIGhvIGRlbGxlIHJpc3Bvc3RlXHJcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgIC8vIGNvbnRyb2xsbyBxdWFudGkgYXR0cmlidXRpIGhhIGxhIHJpc3Bvc3RhXHJcbiAgICAgIHRoaXMua2V5cyA9IE9iamVjdC5rZXlzKGRhdGFbMF0pO1xyXG5cclxuICAgICAgLy8gc2UgaG8gc29sYW1lbnRlIGwnSUQgZSBpbCBjYW1wbyBzY2VsdG8gZWQgaG8gdW5hIHNvbGEgcmlzcG9zdGEgcHJlbmRvIGlsIHZhbG9yZSBkaXJldHRhbWVudGVcclxuICAgICAgaWYgKHRoaXMua2V5cy5sZW5ndGggPT0gMiAmJiBkYXRhLmxlbmd0aCA9PSAxKXtcclxuICAgICAgICAvLyBTZSBobyB1biBzb2xvIG9jY2hpZXR0byBzZWxlemlvbmF0byBlIGxhIHF1ZXJ5IHJlc3RpdHVpc2NlIHVuIHNvbG8gdmFsb3JlLCBsbyBidXR0byBmdW9yaSBhdXRvbWF0aWNhbWVudGVcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibmVsbGEgcmlzcG9zdGEgaG8gc29sYW1lbnRlIGwnSUQgZSBpbCBjYW1wbyBzY2VsdG8gZWQgaG8gdW5hIHNvbGEgcmlzcG9zdGFcIik7XHJcbiAgICAgICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlzZWxlY3Qpe1xyXG4gICAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIm5vbiBtdWx0aXNlbGVjdFwiKTtcclxuICAgICAgICAgIC8vIE5vbiDDqCBtdWx0aXNlbGVjdFxyXG4gICAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGRhdGFbMF1bdGhpcy5rZXlzWzFdXTtcclxuXHJcbiAgICAgICAgICAvLyBDb211bnF1ZSBzaWEgY2kgcG9ydGlhbW8gZGlldHJvIGwnSUQgZGVsbGEgc2VsZXppb25lIGNvbiB1biBjYW1wbyBjdXN0b20sIHB1w7Igc2VtcHJlIHNlcnZpcmVcclxuICAgICAgICAgIGlmKGRhdGFbMF0uaGFzT3duUHJvcGVydHkoXCJJRFwiKSl7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXMgPT0gbnVsbCl7IHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtcyA9IHt9OyB9XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtc1t0aGlzLmZpZWxkLk5hbWUrXCJfX19fSURcIl0gPSBkYXRhWzBdWydJRCddO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5lbWl0KFtkYXRhWzBdW3RoaXMua2V5c1sxXV0sZGF0YVswXVsnSUQnXV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibXVsdGlzZWxlY3RcIik7XHJcbiAgICAgICAgICAvLyBFJyB1biBlbGVuY28gZ2VuZXJpY28gZGJnZXR0ZXIgbXVsdGlzZWxlY3RcclxuICAgICAgICAgIC8vIGRldm8gZmFyZ2xpIGxhIHNydXR0dXJhIGRlbCBkYXRvXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBuZXcgQXJyYXk8TGlzdFZhbHVlRWxlbWVudD4oKTtcclxuICAgICAgICAgIHZhciBzZWxlY3RlZEVsZW1lbnQgPSBuZXcgTGlzdFZhbHVlRWxlbWVudCgpO1xyXG4gICAgICAgICAgc2VsZWN0ZWRFbGVtZW50LklEID0gZGF0YVswXVsnSUQnXTtcclxuICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC5GaWVsZCA9IHRoaXMua2V5c1sxXTtcclxuICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC5LZXkgPSBkYXRhWzBdW3RoaXMua2V5c1sxXV07XHJcbiAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQuVmFsdWUgPSBkYXRhWzBdW3RoaXMua2V5c1sxXV07XHJcblxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzLnB1c2goc2VsZWN0ZWRFbGVtZW50KTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5lbWl0KFt0aGlzLnNlbGVjdGVkRWxlbWVudHNdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEubGVuZ3RoID09IDEgJiYgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSAhPSBudWxsKXtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaG8gdW5hIHNvbGEgcmlzcG9zdGEgZWQgaG8gdW5hIGNvbG9ubmEgZGEgY3VpIMOoIGZvcnphdG8gaWwgcmVjdXBlcm8gZGVsIHZhbG9yZVwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuXHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc011bHRpc2VsZWN0KXtcclxuICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJub24gbXVsdGlzZWxlY3RcIik7XHJcbiAgICAgICAgICAvLyBOb24gw6ggbXVsdGlzZWxlY3RcclxuICAgICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBkYXRhWzBdW3RoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2Uua2V5XTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5lbWl0KFtkYXRhWzBdW3RoaXMua2V5c1sxXSxkYXRhWzBdWydJRCddXV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibXVsdGlzZWxlY3RcIik7XHJcbiAgICAgICAgICAvLyBFJyB1biBlbGVuY28gZ2VuZXJpY28gZGJnZXR0ZXIgbXVsdGlzZWxlY3RcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IG5ldyBBcnJheTxMaXN0VmFsdWVFbGVtZW50PigpO1xyXG4gICAgICAgICAgdmFyIHNlbGVjdGVkRWxlbWVudCA9IG5ldyBMaXN0VmFsdWVFbGVtZW50KCk7XHJcbiAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQuSUQgPSBkYXRhWzBdWydJRCddO1xyXG4gICAgICAgICAgc2VsZWN0ZWRFbGVtZW50LkZpZWxkID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZS5rZXk7XHJcblxyXG4gICAgICAgICAgaWYgKHR5cGVvZiBkYXRhWzBdW3RoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2Uua2V5XSAhPT0gXCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC5LZXkgPSBkYXRhWzBdW3RoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2Uua2V5XTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50LlZhbHVlID0gZGF0YVswXVt0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlLmtleV07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBkYSBcIlVzZXJzX05hbWVfX05vbWVcIiBhIFwiVXNlcnNfTmFtZV9OYW1lX19Ob21lXCJcclxuICAgICAgICAgICAgdmFyIHBhcnQxID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZS5rZXkuc3BsaXQoXCJfX1wiKVswXS5zcGxpdChcIl9cIilbMV07IC8vIE5hbWVcclxuICAgICAgICAgICAgdmFyIGRlcGFydGVkID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZS5rZXkuc3BsaXQoXCJfX1wiKTtcclxuICAgICAgICAgICAgZGVwYXJ0ZWRbMF0gPSBkZXBhcnRlZFswXSArIFwiX1wiICsgcGFydDE7XHJcbiAgICAgICAgICAgIHZhciByZWNvbnN0cnVjdGVkS2V5ID0gZGVwYXJ0ZWQuam9pbihcIl9fXCIpO1xyXG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQuS2V5ID0gZGF0YVswXVtyZWNvbnN0cnVjdGVkS2V5XTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50LlZhbHVlID0gZGF0YVswXVtyZWNvbnN0cnVjdGVkS2V5XTsgICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMucHVzaChzZWxlY3RlZEVsZW1lbnQpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlLmVtaXQoW3RoaXMuc2VsZWN0ZWRFbGVtZW50c10pOyAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaG8gcGnDuSBkaSB1bmEgcmlzcG9zdGFcIik7XHJcblxyXG4gICAgICAgIHRoaXMubXVsdGlwbGVWYWx1ZXNUb0Nob29zZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKGJlaGF2aW91cnMuaW5kZXhPZihcIm1hbmFnZS1xdWVzdGlvbi1pbi1kYmdldHRlclwiKSAhPSAtMSl7XHJcbiAgICAgICAgICB0aGlzLnNob3dUYWJsZSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICBpZiAoIXRoaXMuRGlyZWN0bHlPcGVuVGFibGUpe1xyXG4gICAgICAgICAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93VGFibGUgPSB0cnVlOyAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgXHJcbiAgICB9XHJcbiAgICBcclxuICB9XHJcblxyXG4gIHNlbGVjdFZhbHVlKHJvdywga2V5KXtcclxuICAgIHZhciBrZXl1c2VkO1xyXG4gICAgdmFyIHZhbHVlID0gcm93W2tleV07XHJcblxyXG4gICAgdmFyIHZhbHVlVG9CZVNldCA9IFwiXCI7XHJcblxyXG4gICAgaWYgKCF0aGlzLmZpZWxkLklzTXVsdGlDaG9pY2hlKXtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi50YWJsZS50YWJsZS1tdWx0aXNlbGVjdC1mb3JjZWQgPiB0clwiKS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICAgICAgcm93LmNsYXNzTGlzdC5yZW1vdmUoXCJyb3ctc2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IG5ldyBBcnJheTxMaXN0VmFsdWVFbGVtZW50PigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9PSBudWxsKXtcclxuICAgICAgdmFsdWVUb0JlU2V0ID0gdmFsdWU7XHJcbiAgICAgIGtleXVzZWQgPSBrZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocm93Lmhhc093blByb3BlcnR5KHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2Uua2V5KSl7XHJcbiAgICAgICAgdmFsdWVUb0JlU2V0ID0gcm93W3RoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2Uua2V5XTtcclxuICAgICAgICBrZXl1c2VkID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZS5rZXk7XHJcbiAgICAgIH0gZWxzZSBpZiAocm93Lmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICB2YWx1ZVRvQmVTZXQgPSByb3dba2V5XTtcclxuICAgICAgICBrZXl1c2VkID0ga2V5OyAgICAgICAgXHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWx1ZVRvQmVTZXQgPT0gbnVsbCl7IHZhbHVlVG9CZVNldCA9IFwiXCI7IH1cclxuXHJcblxyXG4gICAgLy8gQ29tdW5xdWUgc2lhIGNpIHBvcnRpYW1vIGRpZXRybyBsJ0lEIGRlbGxhIHNlbGV6aW9uZSBjb24gdW4gY2FtcG8gY3VzdG9tLCBwdcOyIHNlbXByZSBzZXJ2aXJlXHJcbiAgICBpZihyb3cuaGFzT3duUHJvcGVydHkoXCJJRFwiKSl7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXMgPT0gbnVsbCl7IHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtcyA9IHt9OyB9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtc1t0aGlzLmZpZWxkLk5hbWUrXCJfX19fSURcIl0gPSByb3dbJ0lEJ107XHJcbiAgICB9XHJcbiAgICBcclxuXHJcbiAgICAvL0VxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLlN1Y2Nlc3MoXCJVbiBzb2xvIHJpc3VsdGF0byB0cm92YXRvLCDDqCBzdGF0byBpbnNlcml0byBpbiBhdXRvbWF0aWNvXCIpO1xyXG5cclxuICAgIGlmICghdGhpcy5pc011bHRpc2VsZWN0KXtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIm5vbiBtdWx0aXNlbGVjdFwiKTtcclxuICAgICAgLy8gTm9uIMOoIG11bHRpc2VsZWN0XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSB2YWx1ZVRvQmVTZXQ7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5lbWl0KFt2YWx1ZVRvQmVTZXQscm93WydJRCddXSk7ICAgIFxyXG4gICAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImhvIG11bHRpc2VsZWN0XCIpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50cyAhPSBudWxsICYmICFBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWRFbGVtZW50cykpeyB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBbdGhpcy5zZWxlY3RlZEVsZW1lbnRzXTsgfVxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnRzID09IG51bGwpeyB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBuZXcgQXJyYXk8TGlzdFZhbHVlRWxlbWVudD4oKTsgfVxyXG4gICAgICBcclxuXHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudHMuZmluZCh4ID0+IHguSUQgPT0gcm93WydJRCddKSA9PSBudWxsKXtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaG8gcGnDuSBkaSB1bmEgcmlzcG9zdGFcIik7XHJcblxyXG4gICAgICAgIC8vIEUnIHVuIGVsZW5jbyBnZW5lcmljbyBkYmdldHRlciBtdWx0aXNlbGVjdFxyXG4gICAgICAgIHZhciBzZWxlY3RlZEVsZW1lbnQgPSBuZXcgTGlzdFZhbHVlRWxlbWVudCgpO1xyXG4gICAgICAgIHNlbGVjdGVkRWxlbWVudC5JRCA9IHJvd1snSUQnXTtcclxuICAgICAgICBzZWxlY3RlZEVsZW1lbnQuU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHNlbGVjdGVkRWxlbWVudC5GaWVsZCA9IGtleXVzZWQ7XHJcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50LktleSA9IHZhbHVlVG9CZVNldDtcclxuICAgICAgICBzZWxlY3RlZEVsZW1lbnQuS2V5U1YgPSBrZXk7XHJcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50LktleVVzZWRTViA9IGtleXVzZWQ7XHJcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50LlZhbHVlID0gdmFsdWVUb0JlU2V0O1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMucHVzaChzZWxlY3RlZEVsZW1lbnQpO1xyXG5cclxuICAgICAgICB2YXIgY29ycmVzcG9uZGluZ0NvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29sLVwiK2tleXVzZWQrXCItaWQtXCIrcm93WydJRCddKTtcclxuICAgICAgICBpZiAoY29ycmVzcG9uZGluZ0NvbCA9PSBudWxsKXsgY29ycmVzcG9uZGluZ0NvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29sLVwiK2tleStcIi1pZC1cIityb3dbJ0lEJ10pOyB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPT0gbnVsbCl7XHJcbiAgICAgICAgICAgY29ycmVzcG9uZGluZ0NvbC5jbGFzc0xpc3QuYWRkKFwicm93LXNlbGVjdGVkXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb3JyZXNwb25kaW5nQ29sLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInJvdy1zZWxlY3RlZFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5maW5kSW5kZXgoeCA9PiB4LklEID09IHJvd1snSUQnXSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzLnNwbGljZShpbmRleCwxKTtcclxuXHJcbiAgICAgICAgdmFyIGNvcnJlc3BvbmRpbmdDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbC1cIitrZXl1c2VkK1wiLWlkLVwiK3Jvd1snSUQnXSk7XHJcbiAgICAgICAgaWYgKGNvcnJlc3BvbmRpbmdDb2wgPT0gbnVsbCl7IGNvcnJlc3BvbmRpbmdDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbC1cIitrZXkrXCItaWQtXCIrcm93WydJRCddKTsgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9PSBudWxsKXtcclxuICAgICAgICAgIGNvcnJlc3BvbmRpbmdDb2wuY2xhc3NMaXN0LnJlbW92ZShcInJvdy1zZWxlY3RlZFwiKTsgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb3JyZXNwb25kaW5nQ29sLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcInJvdy1zZWxlY3RlZFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgLy90aGlzLnNlbGVjdGVkVmFsdWUuZW1pdChbdGhpcy5zZWxlY3RlZEVsZW1lbnRzXSk7ICAgIFxyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgcmVuZGVyU2VsZWN0ZWQoKXtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9PSBudWxsKXsgdGhpcy5zZWxlY3RlZEVsZW1lbnRzID0gbmV3IEFycmF5PExpc3RWYWx1ZUVsZW1lbnQ+KCk7IH1cclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwicmVuZGVyU2VsZWN0ZWRcIiwgdGhpcy5zZWxlY3RlZEVsZW1lbnRzKTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDApe1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaCgoc2VsZWN0ZWRFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgdmFyIGNvcnJlc3BvbmRpbmdDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbC1cIitzZWxlY3RlZEVsZW1lbnQuRmllbGQrXCItaWQtXCIrc2VsZWN0ZWRFbGVtZW50LklEKTtcclxuICAgICAgICBpZiAoY29ycmVzcG9uZGluZ0NvbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9PSBudWxsKXtcclxuICAgICAgICAgICAgY29ycmVzcG9uZGluZ0NvbC5jbGFzc0xpc3QuYWRkKFwicm93LXNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29ycmVzcG9uZGluZ0NvbC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJyb3ctc2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvcnJlc3BvbmRpbmdDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbC1cIitzZWxlY3RlZEVsZW1lbnQuS2V5U1YrXCItaWQtXCIrc2VsZWN0ZWRFbGVtZW50LklEKTtcclxuICAgICAgICAgIGlmIChjb3JyZXNwb25kaW5nQ29sICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0NvbC5jbGFzc0xpc3QuYWRkKFwicm93LXNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmdDb2wucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwicm93LXNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgIHtcclxuICAgICAgICAgICAgY29ycmVzcG9uZGluZ0NvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29sLVwiK3NlbGVjdGVkRWxlbWVudC5LZXkrXCItaWQtXCIrc2VsZWN0ZWRFbGVtZW50LklEKTtcclxuICAgICAgICAgICAgaWYgKGNvcnJlc3BvbmRpbmdDb2wgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0NvbC5jbGFzc0xpc3QuYWRkKFwicm93LXNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nQ29sLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInJvdy1zZWxlY3RlZFwiKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGNsb3NlKCl7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUuZW1pdChbXCIqKioqQ0xPU0UqKioqXCIsMF0pO1xyXG4gICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuICB9XHJcbiAgXHJcbiAgZGVsZXRlKCl7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUuZW1pdChbbnVsbCwwXSk7XHJcbiAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xyXG4gIH0gIFxyXG5cclxuICBhY3RpdmF0ZVRhYmxlKCl7XHJcbiAgICB0aGlzLnNob3dUYWJsZSA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZW5kZXJTZWxlY3RlZCgpO1xyXG4gICAgfSwyMDApO1xyXG4gIH1cclxuXHJcbiAgcmVsb2FkRGF0YSgpe1xyXG4gICAgdGhpcy5kb1JlbG9hZC5lbWl0KG51bGwpO1xyXG4gIH0gIFxyXG5cclxuICBzZWxlY3RDb2x1bW4oa2V5KXtcclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID09IG51bGwpe1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uID0ga2V5O1xyXG4gICAgICB0aGlzLm11bHRpc2VsZWN0UGhhc2UgPSAyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uZmlybVNlbGVjdGlvbigpe1xyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlLmVtaXQoW3RoaXMuc2VsZWN0ZWRFbGVtZW50c10pOyBcclxuICAgIHRoaXMuc2hvd1RhYmxlID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdFZhbHVlRWxlbWVudCB7XHJcbiAgSUQ6IHN0cmluZyB8IG51bWJlcjtcclxuICBTZWxlY3RlZDogYm9vbGVhbjtcclxuICBGaWVsZDogc3RyaW5nO1xyXG4gIEtleTogc3RyaW5nO1xyXG4gIEtleVNWOiBzdHJpbmc7XHJcbiAgS2V5VXNlZFNWOiBzdHJpbmc7XHJcbiAgVmFsdWU6IHN0cmluZztcclxuXHJcbn1cclxuXHJcbi8vIE8gY29zw6wgbyBzY2hpYW50YXRvIGEgbWFub1xyXG5leHBvcnQgZW51bSBRdWVyeUVkaXRvck1vZGVFbnVtIHtcclxuICBcIkNPTkZJR1VSQVRPUlwiID0gMSxcclxuICBcIkNPTVBPU0VSXCIgPSAyLFxyXG4gIFwiUkVTVUxUXCIgPSAzXHJcbn0iLCI8ZGl2PlxyXG4gICAgPG5nLXRlbXBsYXRlIFthcHBEeW5hbWljTG9hZGVyXSBbZGF0YV09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiIChvdXQpPVwib25FeHRlcm5hbFNRTFJlc3VsdE91dCgkZXZlbnQpO1wiICpuZ0lmPVwiUXVlcnlFZGl0b3JDb21wb25lbnQgIT0gbnVsbCAmJiByZWxhdGlvbnNMb2FkZWQgJiYgcmVsb2FkXCI+PC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiZmxvYXRpbmd0YWJsZSBkcmFnZ2FibGVcIiBjZGtEcmFnICpuZ0lmPVwic2hvd1RhYmxlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj48bWF0LWljb24gKGNsaWNrKT1cImNsb3NlKClcIj5jbG9zZTwvbWF0LWljb24+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj48bWF0LWljb24gKGNsaWNrKT1cImRlbGV0ZSgpXCI+ZGVsZXRlPC9tYXQtaWNvbj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj48bWF0LWljb24+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImluZm9cIj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc011bHRpc2VsZWN0XCI+U2VsZXppb25hIGlsIHZhbG9yZSBkYSByZWdpc3RyYXJlLjwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzTXVsdGlzZWxlY3QgJiYgbXVsdGlzZWxlY3RQaGFzZSA9PSAxXCI+U2VsZXppb25hIHVuYSBjb2xvbm5hPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNNdWx0aXNlbGVjdCAmJiBtdWx0aXNlbGVjdFBoYXNlID09IDIgJiYgc2VsZWN0ZWRDb2x1bW4gIT0gbnVsbCAmJiBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9PSBudWxsXCI+SGFpIHNlbGV6aW9uYXRvOiA8Yj57e3NlbGVjdGVkQ29sdW1uLnNwbGl0KFwiX19cIilbMV19fTwvYj4uPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNNdWx0aXNlbGVjdCAmJiBtdWx0aXNlbGVjdFBoYXNlID09IDJcIj5TZWxlemlvbmEgYWxtZW5vIHVuIGVsZW1lbnRvIHByZXNlbnRlIHNvdHRvIGFsbGEgY29sb25uYSBzZWxlemlvbmF0YTwvc3Bhbj4gICAgICAgIFxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNNdWx0aXNlbGVjdCAmJiBtdWx0aXNlbGVjdFBoYXNlID09IDIgJiYgc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWNvbmZpcm1cIiAoY2xpY2spPVwiY29uZmlybVNlbGVjdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gPmNoZWNrPC9tYXQtaWNvbj4gQ29uZmVybWEgc2VsZXppb25lXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIFxyXG4gICAgPHRhYmxlIGNsYXNzPVwidGFibGVcIiBbbmdDbGFzc109XCJ7J3RhYmxlLW5vdGZvcmNlZCc6IGZpZWxkLkZpZWxkVHlwZSAhPSBmaWVsZFR5cGVFbnVtWydFbGVuY28gZ2VuZXJpY28nXSAmJiBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9PSBudWxsLCAndGFibGUtZm9yY2VkJzogZmllbGQuRmllbGRUeXBlICE9IGZpZWxkVHlwZUVudW1bJ0VsZW5jbyBnZW5lcmljbyddICYmIGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlICE9IG51bGwsICd0YWJsZS1tdWx0aXNlbGVjdC1ub3Rmb3JjZWQnOiBmaWVsZC5GaWVsZFR5cGUgPT0gZmllbGRUeXBlRW51bVsnRWxlbmNvIGdlbmVyaWNvJ10gICYmIGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID09IG51bGwsICd0YWJsZS1tdWx0aXNlbGVjdC1mb3JjZWQnOiBmaWVsZC5GaWVsZFR5cGUgPT0gZmllbGRUeXBlRW51bVsnRWxlbmNvIGdlbmVyaWNvJ10gICYmIGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlICE9IG51bGx9XCI+XHJcbiAgICAgICAgPHRyPjx0aCAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXM7IGxldCBmaXJzdCA9IGZpcnN0XCIgKGNsaWNrKT1cInNlbGVjdENvbHVtbihrZXkpXCIgaWQ9XCJoZWFkY29sLXt7a2V5fX1cIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaXJzdFwiPnt7a2V5fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZpcnN0XCI+e3trZXkuc3BsaXQoXCJfX1wiKVsxXX19PC9zcGFuPlxyXG4gICAgICAgIDwvdGg+PC90cj5cclxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhXCIgY2xhc3M9XCJyb3dzXCI+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXNcIiAoY2xpY2spPVwic2VsZWN0VmFsdWUocm93LCBrZXkpXCIgaWQ9XCJjb2wte3trZXl9fS1pZC17e3Jvd1snSUQnXX19XCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dba2V5XSAhPSBudWxsICYmIHJvd1trZXldLnRvU3RyaW5nKCkubGVuZ3RoIDw9IDEwMFwiIFtpbm5lckhUTUxdPVwicm93W2tleV1cIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+IFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dba2V5XSAhPSBudWxsICYmIHJvd1trZXldLnRvU3RyaW5nKCkubGVuZ3RoID4gMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tyb3dba2V5XSAhPSBudWxsID8gcm93W2tleV0udG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwxMDApIDogJyd9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dba2V5XSAhPSBudWxsICYmIHJvd1trZXldLnRvU3RyaW5nKCkubGVuZ3RoID4gMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cInJvd1trZXldXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG5cclxuICAgIDwhLS0gXHJcbiAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ub3Rmb3JjZWRcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID09IG51bGxcIj5cclxuICAgICAgICA8dHI+PHRoICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5czsgbGV0IGZpcnN0ID0gZmlyc3RcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaXJzdFwiPnt7a2V5fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZpcnN0XCI+e3trZXkuc3BsaXQoXCJfX1wiKVsxXX19PC9zcGFuPlxyXG4gICAgICAgIDwvdGg+PC90cj5cclxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhXCIgY2xhc3M9XCJyb3dzXCI+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXNcIiAoY2xpY2spPVwic2VsZWN0VmFsdWVOb3RGb3JjZWQocm93W2tleV0pXCI+XHJcbiAgICAgICAgICAgICAgICB7e3Jvd1trZXldICE9IG51bGwgPyByb3dba2V5XS50b1N0cmluZygpLnN1YnN0cmluZygwLDEwMCkgOiAnJ319XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvd1trZXldICE9IG51bGwgJiYgcm93W2tleV0udG9TdHJpbmcoKS5sZW5ndGggPiAxMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAuLi5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC90YWJsZT5cclxuXHJcbiAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1mb3JjZWRcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlICE9IG51bGxcIj5cclxuICAgICAgICA8dHI+PHRoICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5czsgbGV0IGZpcnN0ID0gZmlyc3RcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaXJzdFwiPnt7a2V5fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZpcnN0XCI+e3trZXkuc3BsaXQoXCJfX1wiKVsxXX19PC9zcGFuPlxyXG4gICAgICAgIDwvdGg+PC90cj5cclxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhXCIgY2xhc3M9XCJyb3dzXCIgKGNsaWNrKT1cInNlbGVjdFZhbHVlRm9yY2VkKHJvdylcIj5cclxuICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5c1wiPlxyXG4gICAgICAgICAgICAgICAge3tyb3dba2V5XSAhPSBudWxsID8gcm93W2tleV0udG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwxMDApIDogJyd9fVxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dba2V5XSAhPSBudWxsICYmIHJvd1trZXldLnRvU3RyaW5nKCkubGVuZ3RoID4gMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgIDwvdGFibGU+XHJcbiAgICAtLT5cclxuXHJcbjwvZGl2PlxyXG5cclxuPHNwYW4gKm5nSWY9XCJ2YWx1ZSAhPSBudWxsXCI+e3t2YWx1ZX19PC9zcGFuPlxyXG5cclxuPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tYXJyb3ctZG93blwiIChjbGljayk9XCJhY3RpdmF0ZVRhYmxlKClcIiAqbmdJZj1cIm11bHRpcGxlVmFsdWVzVG9DaG9vc2VcIj5cclxuICAgIDxtYXQtaWNvbj5rZXlib2FyZF9hcnJvd19kb3duPC9tYXQtaWNvbj5cclxuPC9idXR0b24+XHJcbjxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWFycm93LWRvd25cIiAoY2xpY2spPVwicmVsb2FkRGF0YSgpXCIgKm5nSWY9XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJIYXNSZXNldEJ1dHRvblwiPlxyXG4gICAgPG1hdC1pY29uPmxvb3A8L21hdC1pY29uPlxyXG48L2J1dHRvbj4iXX0=
477
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGJnZXR0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2RiZ2V0dGVyL2RiZ2V0dGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9kYmdldHRlci9kYmdldHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3ZFLE9BQU8sRUFBaUMsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7O0FBT2pFLE1BQU0sT0FBTyxpQkFBaUI7SUF1QzVCLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFyQ2pDLG1CQUFjLEdBQStCLElBQUksQ0FBQztRQUlsRCxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyx5QkFBb0IsR0FBK0IsSUFBSSxDQUFDLENBQUMsbUNBQW1DO1FBQzVGLFNBQUksR0FBUSxJQUFJLENBQUMsQ0FBQyx3Q0FBd0M7UUFFekQsUUFBRyxHQUEyQixJQUFJLFlBQVksRUFBWSxDQUFDO1FBQzNELGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDM0QsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRWhFLFNBQUksR0FBa0IsSUFBSSxDQUFDO1FBQzNCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFHeEIsY0FBUyxHQUFZLEtBQUssQ0FBQztR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QUFNOztBQTBmVCxNQUFNLE9BQU8sZ0JBQWdCO0NBUzVCO0FBRUQsNkJBQTZCO0FBQzdCLE1BQU0sQ0FBTixJQUFZLG1CQUlYO0FBSkQsV0FBWSxtQkFBbUI7SUFDN0IsNkVBQWtCLENBQUE7SUFDbEIscUVBQWMsQ0FBQTtJQUNkLGlFQUFZLENBQUE7QUFDZCxDQUFDLEVBSlcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUk5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhLCBldmVudE91dCB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvZHluYW1pYy1sb2FkZXIvZHluYW1pYy1sb2FkZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFzZUZpZWxkLCBEYXRhR2V0dGVyVHlwZUVudW0sIEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGJnZXR0ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYmdldHRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGJnZXR0ZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGJnZXR0ZXJDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm07XHJcbiAgQElucHV0KCkgZmllbGQ6IGFueTsgLy8gU29ubyBjb3N0cmV0dG8gYSBtZXR0ZXJlIGFueSBwZXIgZ2VzdGlyZSBpIGNhbXBpIGRpIHRpcG8gZWxlbmNvIGdlbmVyaWNvIGNoZSBoYW5ubyB1bmEgc3RydXR0dXJhIHVuIHBvJyBkaXZlcnNhLCBhbHRyaW1lbnRpIGRvdnJlaSBmYXJlIHVuIGNhc2lubyBkaSBjYXN0IGUgbm9uIG5lIHZhbGUgbGEgcGVuYVxyXG4gIEBJbnB1dCgpIHJlY29yZDogUmVjb3JkO1xyXG4gIEBJbnB1dCgpIGluQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgRGlyZWN0bHlPcGVuVGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBRdWVyeUVkaXRvckNvbXBvbmVudDogRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGEgPSBudWxsOyAvLyBMJ2ludGVybyBjb21wb25lbnRlIHF1ZXJ5IEVkaXRvclxyXG4gIEBJbnB1dCgpIGRhdGE6IGFueSA9IG51bGw7IC8vIExvIGZhY2NpYW1vIGZ1bnppb25hcmUgdGlwbyBFUVAtVEFCTEVcclxuXHJcbiAgQE91dHB1dCgpIG91dDogRXZlbnRFbWl0dGVyPGV2ZW50T3V0PiA9IG5ldyBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkVmFsdWU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGRvUmVsb2FkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpOyAgXHJcblxyXG4gIGtleXM6IEFycmF5PHN0cmluZz4gPSBudWxsO1xyXG4gIGxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZhbHVlOiBhbnk7XHJcblxyXG4gIHNob3dUYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBoYXZlUXVlc3Rpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGF2ZVJlbGF0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHJlbG9hZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgbXVsdGlwbGVWYWx1ZXNUb0Nob29zZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpbnRlcnZhbDogYW55O1xyXG5cclxuICByZWxhdGlvbnM6IEFycmF5PHtmaWVsZDogc3RyaW5nLCBsb2FkZWQ6IGJvb2xlYW4sIGFjdHVhbHZhbHVlOiBhbnl9PiA9IG5ldyBBcnJheTx7ZmllbGQ6IHN0cmluZywgbG9hZGVkOiBib29sZWFuLCBhY3R1YWx2YWx1ZTogYW55fT4oKTtcclxuICByZWxhdGlvbnNMb2FkZWQ6IGJvb2xlYW47XHJcbiAgYmFja3VwUXVlc3Rpb25GaWVsZHM6IEFycmF5PHN0cmluZz4gPSBudWxsO1xyXG5cclxuICBpc011bHRpc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgbXVsdGlzZWxlY3RQaGFzZTogbnVtYmVyID0gMTtcclxuICBzZWxlY3RlZENvbHVtbjogc3RyaW5nID0gXCJcIjtcclxuICBzZWxlY3RlZEVsZW1lbnRzOiBBcnJheTxMaXN0VmFsdWVFbGVtZW50PiA9IG5ldyBBcnJheTxMaXN0VmFsdWVFbGVtZW50PigpO1xyXG5cclxuICBmaWVsZFR5cGVFbnVtID0gRmllbGRUeXBlRW51bTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiLS0tIElOU0lERSBEQkdFVFRFUiAtLS1cIik7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKG51bGwsIHRoaXMuZm9ybSk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKG51bGwsIHRoaXMucmVjb3JkKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2cobnVsbCwgdGhpcy5maWVsZCk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKG51bGwsIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQpO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIi0tLSBJTlNJREUgREJHRVRURVIgLS0tXCIpO1xyXG5cclxuICAgICAgLy8gSW5pemlvIFJldHJvY29tcGF0aWJpbGl0w6BcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJIYXNSZXNldEJ1dHRvbiA9PT0gXCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJIYXNSZXNldEJ1dHRvbiA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEZpbmUgUmV0cm9jb21wYXRpYmlsaXTDoFxyXG5cclxuICAgICAgLy8gSW5pemlvIE5vcm1hbGl6emF6aW9uZSBWMiAoT21uaXNlYXJjaCBBSSDigJQgRGF0YUdldHRlckNvZGVWZXJzaW9uPTIpXHJcbiAgICAgIC8vIElsIERhdGFHZXR0ZXJWYWx1ZSBWMiBhbm5pZGEgaWwgcXVlcnkgY29uZmlnIGluIHF1ZXJ5Q29tbWFuZERhdGFiYXNlQ29uZmlndXJhdGlvbi5cclxuICAgICAgLy8gUGVyIGV2aXRhcmUgZGkgZHVwbGljYXJlIHR1dHRhIGxhIGxvZ2ljYSwgdW53cmFwcGlhbW8gaW4tcGxhY2UgYWwgZm9ybWF0byBWMVxyXG4gICAgICAvLyBjb3PDrCBpbCByZXN0byBkZWwgY29kaWNlIHJpbWFuZSBpbnZhcmlhdG8uXHJcbiAgICAgIGNvbnN0IGlzVjIgPSB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlPy5EYXRhR2V0dGVyQ29kZVZlcnNpb24gPT09IDI7XHJcbiAgICAgIGlmIChpc1YyKSB7XHJcbiAgICAgICAgY29uc3QgdjJ3cmFwcGVyID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZTtcclxuICAgICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlID0gdjJ3cmFwcGVyLnF1ZXJ5Q29tbWFuZERhdGFiYXNlQ29uZmlndXJhdGlvbjtcclxuICAgICAgICAvLyBEYXRhR2V0dGVyQ29sdW1uRm9yY2UgaW4gVjIgcHXDsiBzdGFyZSBuZWxsJ29nZ2V0dG8gaW50ZXJubyDigJQgcHJvcGFnYWxvIHNlIG1hbmNhIGFsbCdlc3Rlcm5vXHJcbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlICYmIHYyd3JhcHBlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UpIHtcclxuICAgICAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPSB2MndyYXBwZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBGaW5lIE5vcm1hbGl6emF6aW9uZSBWMlxyXG5cclxuICAgICAgLy8gSW5pemlvOiBUYWJlbGxhIG11bHRpc2VsZWN0P1xyXG5cclxuICAgICAgaWYgKHRoaXMuZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0VsZW5jbyBnZW5lcmljbyddKXtcclxuICAgICAgICB0aGlzLmlzTXVsdGlzZWxlY3QgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSAhPSBudWxsKXtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW4gPSB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlLmtleTtcclxuICAgICAgICAgIHRoaXMubXVsdGlzZWxlY3RQaGFzZSA9IDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdOyAgICBcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnRzID09IG51bGwpeyB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBuZXcgQXJyYXk8TGlzdFZhbHVlRWxlbWVudD4oKTsgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBGaW5lOiBUYWJlbGxhIG11bHRpc2VsZWN0P1xyXG5cclxuICAgIGlmICh0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50ICE9IG51bGwpe1xyXG4gICAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5tb2RlID0gUXVlcnlFZGl0b3JNb2RlRW51bS5SRVNVTFQ7XHJcbiAgICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmZpZWxkID0gdGhpcy5maWVsZDtcclxuICAgICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcucmVjb3JkID0gdGhpcy5yZWNvcmQ7XHJcbiAgICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmluQ29uZmlnID0gdGhpcy5pbkNvbmZpZztcclxuXHJcbiAgICAgIC8vIFYyOiBpbCBRdWVyeUVkaXRvciBpbiBSRVNVTFQgbW9kZSByaWNldmUgaWwgcXVlcnlDb25maWcgZSBpbCB2ZXJzaW9uIGZsYWdcclxuICAgICAgaWYgKGlzVjIpIHtcclxuICAgICAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5sb2FkUXVlcnlTdGF0dXNlcyA9IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWU7XHJcbiAgICAgICAgdGhpcy5RdWVyeUVkaXRvckNvbXBvbmVudC5pbnB1dFBhcmFtcy5jb25maWcuRGF0YUdldHRlckNvZGVWZXJzaW9uID0gMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUub3BlbmVkRmllbGRzLmZpbmQoeCA9PiB0eXBlb2YgeC5RdWVyeVByb3BlcnR5VmFsdWUgIT09IFwib2JqZWN0XCIgJiYgeC5RdWVyeVByb3BlcnR5VmFsdWUgPT0gJz8nKSAhPSBudWxsKXtcclxuICAgICAgICBcclxuICAgICAgICAvLyBJbCBjYW1wbyBoYSBhbG1lbm8gdW4gdmFsb3JlIGNvbiBcIj9cIlxyXG4gICAgICAgIHRoaXMuaGF2ZVF1ZXN0aW9ucyA9IHRydWU7XHJcblxyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJDSEVDS0lORyBCQUNLVVBTIE9QRU5FRCBGSUVMRFMuLi4uXCIsIHRoaXMuYmFja3VwUXVlc3Rpb25GaWVsZHMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5iYWNrdXBRdWVzdGlvbkZpZWxkcyA9PSBudWxsKXtcclxuICAgICAgICAgIHRoaXMuYmFja3VwUXVlc3Rpb25GaWVsZHMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZS5vcGVuZWRGaWVsZHMuZm9yRWFjaCgocnFmKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFja3VwUXVlc3Rpb25GaWVsZHMucHVzaChycWYuUHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZS5vcGVuZWRGaWVsZHMuZmluZCh4ID0+IHR5cGVvZiB4LlF1ZXJ5UHJvcGVydHlWYWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB4LlF1ZXJ5UHJvcGVydHlWYWx1ZS5pbmRleE9mKCchJykgIT0gLTEpICE9IG51bGwpe1xyXG5cclxuICAgICAgICAvLyBJbCBjYW1wbyBoYSBhbG1lbm8gdW4gdmFsb3JlIGNvbiBcIiFub21lcmVsYXppb25lXCJcclxuICAgICAgICB0aGlzLmhhdmVSZWxhdGlvbnMgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclZhbHVlLm9wZW5lZEZpZWxkcy5maWx0ZXIoeCA9PiB4LlF1ZXJ5UHJvcGVydHlWYWx1ZS5pbmRleE9mKCchJykgIT0gLTEpLmZvckVhY2goKGZpZWxkV2l0aFJlbGF0aW9uKSA9PiB7XHJcblxyXG4gICAgICAgICAgdmFyIGZpZWxkUmVsYXRlZCA9IGZpZWxkV2l0aFJlbGF0aW9uLlF1ZXJ5UHJvcGVydHlWYWx1ZS5yZXBsYWNlKFwiIVwiLFwiXCIpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdID09IG51bGwpe1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwidGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSBFJyBOVUxMXCIsIHRoaXMuZmllbGQuTmFtZSwgZmllbGRSZWxhdGVkLCB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRpb25zLnB1c2goe2ZpZWxkOiBmaWVsZFJlbGF0ZWQsIGxvYWRlZDogZmFsc2UsIGFjdHVhbHZhbHVlOiB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdfSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tSZWxhdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwidGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSBDSEVDS1wiLCB0aGlzLmZpZWxkLk5hbWUsIGZpZWxkUmVsYXRlZCwgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSwgdGhpcy5yZWNvcmQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRSZWxhdGlvbiA9IHRoaXMucmVsYXRpb25zLmZpbmQoeCA9PiB4LmZpZWxkID09IGZpZWxkUmVsYXRlZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFJlbGF0aW9uICE9IG51bGwpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gR2VzdGlvbmUgZGVpIGNhbWJpIGRpIHZhbG9yZSBkZWkgY2FtcGkgcmVsYXppb25hdGlcclxuICAgICAgICAgICAgICAgICAgLy8gSWwgY2FtcG8gcmVsYXppb25hdG8gSU5JWklBTE1FTlRFIE5PTiBFJyBOVUxMLCBlIGNhbWJpYSB2YWxvcmUgaW4gcXVhbGNvc2EgY2hlIE5PTiBFJyBOVUxMXHJcbiAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UmVsYXRpb24uYWN0dWFsdmFsdWUgIT0gbnVsbCAmJiB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdICE9IG51bGwgJiYgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSAhPSBjdXJyZW50UmVsYXRpb24uYWN0dWFsdmFsdWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJ0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdIEhBIENBTUJJQVRPIFZBTE9SRSEhXCIsIHRoaXMuZmllbGQuTmFtZSwgZmllbGRSZWxhdGVkLCB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlbGF0aW9uLmFjdHVhbHZhbHVlID0gdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVsYXRpb24ubG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZFdpdGhSZWxhdGlvbi5RdWVyeVByb3BlcnR5VmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIElsIGNhbXBvIHJlbGF6aW9uYXRvIElOSVpJQUxNRU5URSBOT04gRScgTlVMTCwgZSBjYW1iaWEgdmFsb3JlIElOIE5VTExcclxuICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudFJlbGF0aW9uLmFjdHVhbHZhbHVlICE9IG51bGwgJiYgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwidGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSBFJyBUT1JOQVRPIEFEIEVTU0VSRSBOVUxMISEgOihcIiwgdGhpcy5maWVsZC5OYW1lLCBmaWVsZFJlbGF0ZWQsIHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0sIHRoaXMucmVjb3JkKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVsYXRpb24uYWN0dWFsdmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWxhdGlvbi5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkV2l0aFJlbGF0aW9uLlF1ZXJ5UHJvcGVydHlWYWx1ZSA9IFwiIVwiK2ZpZWxkUmVsYXRlZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVjdXBlcm8gQmFja3VwXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWNrdXBRdWVzdGlvbkZpZWxkcy5mb3JFYWNoKChib2YpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUub3BlbmVkRmllbGRzLmZpbmQoeCA9PiB4LlByb3BlcnR5TmFtZSA9PSBib2YpLlF1ZXJ5UHJvcGVydHlWYWx1ZSA9IFwiP1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZENvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBJbCBjYW1wbyByZWxhemlvbmF0byBJTklaSUFMTUVOVEUgRScgTlVMTCwgZSBjYW1iaWEgdmFsb3JlXHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRSZWxhdGlvbi5hY3R1YWx2YWx1ZSA9PSBudWxsICYmIHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gTk9OIEUnIFBJVScgTlVMTCEhIDopXCIsIHRoaXMuZmllbGQuTmFtZSwgZmllbGRSZWxhdGVkLCB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdLCB0aGlzLnJlY29yZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlbGF0aW9uLmFjdHVhbHZhbHVlID0gdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVsYXRpb24ubG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZFdpdGhSZWxhdGlvbi5RdWVyeVByb3BlcnR5VmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tSZWxhdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sMjAwKTtcclxuXHJcblxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF0gTk9OIEUnIE5VTEwhISA6KVwiLCB0aGlzLmZpZWxkLk5hbWUsIGZpZWxkUmVsYXRlZCwgdGhpcy5yZWNvcmRbZmllbGRSZWxhdGVkXSwgdGhpcy5yZWNvcmQpO1xyXG4gICAgICAgICAgICBmaWVsZFdpdGhSZWxhdGlvbi5RdWVyeVByb3BlcnR5VmFsdWUgPSB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdICE9IG51bGwgPyB0aGlzLnJlY29yZFtmaWVsZFJlbGF0ZWRdIDogJyc7XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRpb25zLnB1c2goe2ZpZWxkOiBmaWVsZFJlbGF0ZWQsIGxvYWRlZDogdHJ1ZSwgYWN0dWFsdmFsdWU6IHRoaXMucmVjb3JkW2ZpZWxkUmVsYXRlZF19KTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja1JlbGF0aW9ucygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgfSk7ICAgICAgICBcclxuXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRoaXMuaGF2ZVJlbGF0aW9ucyl7XHJcbiAgICAgICAgdGhpcy5yZWxhdGlvbnNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9ICAgICBcclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGF0YSA9PSBudWxsKXtcclxuXHJcbiAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQoJy4vYXNzZXRzL21vY2t1cHMvbW9ja2VkRnJvbVF1ZXJ5RWRpdG9yX1JFU1VMVF9NQU5ZX05VTUVSSUMudHh0Jywge3Jlc3BvbnNlVHlwZTogJ3RleHQnfSlcclxuICAgICAgLnN1YnNjcmliZShtb2NrZWRGcm9tUXVlcnlFZGl0b3IgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IEpTT04ucGFyc2UobW9ja2VkRnJvbVF1ZXJ5RWRpdG9yKTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBKU09OLnBhcnNlKHRoaXMuZGF0YS5yZXN1bHQpO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc1Jlc3VsdCh0aGlzLmRhdGEsW10pO1xyXG4gICAgICAgfSk7ICAgICAgXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHJlbG9hZENvbXBvbmVudCgpe1xyXG4gICAgLy9jb25zb2xlLmxvZyhcIlJFTE9BRCBDT01QT05FTlQgQ0FMTEVEXCIsIHRoaXMucmVjb3JkLCB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5yZWNvcmQpO1xyXG5cclxuICAgIHRoaXMucmVsb2FkID0gZmFsc2U7XHJcbiAgICB0aGlzLlF1ZXJ5RWRpdG9yQ29tcG9uZW50LmlucHV0UGFyYW1zLmNvbmZpZy5yZWNvcmQgPSB0aGlzLnJlY29yZDtcclxuICAgIHRoaXMuUXVlcnlFZGl0b3JDb21wb25lbnQuaW5wdXRQYXJhbXMuY29uZmlnLmZpZWxkID0gdGhpcy5maWVsZDtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5yZWxvYWQgPSB0cnVlOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiUkVMT0FERUQgUVVFUllFRElUT1JcIik7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSwgMzAwMCk7IFxyXG4gIH1cclxuXHJcbiAgY2hlY2tSZWxhdGlvbnMoKXtcclxuICAgIHRoaXMucmVsYXRpb25zTG9hZGVkID0gdGhpcy5yZWxhdGlvbnMuZmluZCh4ID0+IHgubG9hZGVkKSAhPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgb25FeHRlcm5hbFNRTFJlc3VsdE91dChldjogZXZlbnRPdXQpe1xyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJSaXN1bHRhdG8gZGVsbCdlbGFib3JhemlvbmUgZGVsIHF1ZXJ5IGVkaXRvcjogb25FeHRlcm5hbFNRTFJlc3VsdE91dFwiLCBldik7XHJcblxyXG4gICAgaWYgKGV2LkJlaGF2aW91cnMuaW5kZXhPZihcInNlbmQtb3V0XCIpICE9IC0xKXsgdGhpcy5vdXQuZW1pdChldik7IH1cclxuXHJcbiAgICB0aGlzLmRhdGEgPSBKU09OLnBhcnNlKGV2LlBhcmFtcy5yZXN1bHQpO1xyXG4gICAgdGhpcy5wcm9jZXNzUmVzdWx0KHRoaXMuZGF0YSxldi5CZWhhdmlvdXJzKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcm9jZXNzUmVzdWx0KGRhdGE6IGFueSwgYmVoYXZpb3VyczogQXJyYXk8c3RyaW5nPiA9IFtdKXtcclxuICAgIFxyXG4gICAgLy9kYXRhIMOoIGwnYXJyYXkgZGVpIHJlY29yZCB0b3JuYXRpIGRhbCBkYlxyXG5cclxuICAgIC8vIHNlIGhvIGRlbGxlIHJpc3Bvc3RlXHJcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgIC8vIGNvbnRyb2xsbyBxdWFudGkgYXR0cmlidXRpIGhhIGxhIHJpc3Bvc3RhXHJcbiAgICAgIHRoaXMua2V5cyA9IE9iamVjdC5rZXlzKGRhdGFbMF0pO1xyXG5cclxuICAgICAgLy8gc2UgaG8gc29sYW1lbnRlIGwnSUQgZSBpbCBjYW1wbyBzY2VsdG8gZWQgaG8gdW5hIHNvbGEgcmlzcG9zdGEgcHJlbmRvIGlsIHZhbG9yZSBkaXJldHRhbWVudGVcclxuICAgICAgaWYgKHRoaXMua2V5cy5sZW5ndGggPT0gMiAmJiBkYXRhLmxlbmd0aCA9PSAxKXtcclxuICAgICAgICAvLyBTZSBobyB1biBzb2xvIG9jY2hpZXR0byBzZWxlemlvbmF0byBlIGxhIHF1ZXJ5IHJlc3RpdHVpc2NlIHVuIHNvbG8gdmFsb3JlLCBsbyBidXR0byBmdW9yaSBhdXRvbWF0aWNhbWVudGVcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibmVsbGEgcmlzcG9zdGEgaG8gc29sYW1lbnRlIGwnSUQgZSBpbCBjYW1wbyBzY2VsdG8gZWQgaG8gdW5hIHNvbGEgcmlzcG9zdGFcIik7XHJcbiAgICAgICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlzZWxlY3Qpe1xyXG4gICAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIm5vbiBtdWx0aXNlbGVjdFwiKTtcclxuICAgICAgICAgIC8vIE5vbiDDqCBtdWx0aXNlbGVjdFxyXG4gICAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGRhdGFbMF1bdGhpcy5rZXlzWzFdXTtcclxuXHJcbiAgICAgICAgICAvLyBDb211bnF1ZSBzaWEgY2kgcG9ydGlhbW8gZGlldHJvIGwnSUQgZGVsbGEgc2VsZXppb25lIGNvbiB1biBjYW1wbyBjdXN0b20sIHB1w7Igc2VtcHJlIHNlcnZpcmVcclxuICAgICAgICAgIGlmKGRhdGFbMF0uaGFzT3duUHJvcGVydHkoXCJJRFwiKSl7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXMgPT0gbnVsbCl7IHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtcyA9IHt9OyB9XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtc1t0aGlzLmZpZWxkLk5hbWUrXCJfX19fSURcIl0gPSBkYXRhWzBdWydJRCddO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5lbWl0KFtkYXRhWzBdW3RoaXMua2V5c1sxXV0sZGF0YVswXVsnSUQnXV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibXVsdGlzZWxlY3RcIik7XHJcbiAgICAgICAgICAvLyBFJyB1biBlbGVuY28gZ2VuZXJpY28gZGJnZXR0ZXIgbXVsdGlzZWxlY3RcclxuICAgICAgICAgIC8vIGRldm8gZmFyZ2xpIGxhIHNydXR0dXJhIGRlbCBkYXRvXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBuZXcgQXJyYXk8TGlzdFZhbHVlRWxlbWVudD4oKTtcclxuICAgICAgICAgIHZhciBzZWxlY3RlZEVsZW1lbnQgPSBuZXcgTGlzdFZhbHVlRWxlbWVudCgpO1xyXG4gICAgICAgICAgc2VsZWN0ZWRFbGVtZW50LklEID0gZGF0YVswXVsnSUQnXTtcclxuICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC5GaWVsZCA9IHRoaXMua2V5c1sxXTtcclxuICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC5LZXkgPSBkYXRhWzBdW3RoaXMua2V5c1sxXV07XHJcbiAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQuVmFsdWUgPSBkYXRhWzBdW3RoaXMua2V5c1sxXV07XHJcblxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzLnB1c2goc2VsZWN0ZWRFbGVtZW50KTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5lbWl0KFt0aGlzLnNlbGVjdGVkRWxlbWVudHNdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEubGVuZ3RoID09IDEgJiYgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSAhPSBudWxsKXtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaG8gdW5hIHNvbGEgcmlzcG9zdGEgZWQgaG8gdW5hIGNvbG9ubmEgZGEgY3VpIMOoIGZvcnphdG8gaWwgcmVjdXBlcm8gZGVsIHZhbG9yZVwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuXHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc011bHRpc2VsZWN0KXtcclxuICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJub24gbXVsdGlzZWxlY3RcIik7XHJcbiAgICAgICAgICAvLyBOb24gw6ggbXVsdGlzZWxlY3RcclxuICAgICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBkYXRhWzBdW3RoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2Uua2V5XTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5lbWl0KFtkYXRhWzBdW3RoaXMua2V5c1sxXSxkYXRhWzBdWydJRCddXV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibXVsdGlzZWxlY3RcIik7XHJcbiAgICAgICAgICAvLyBFJyB1biBlbGVuY28gZ2VuZXJpY28gZGJnZXR0ZXIgbXVsdGlzZWxlY3RcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IG5ldyBBcnJheTxMaXN0VmFsdWVFbGVtZW50PigpO1xyXG4gICAgICAgICAgdmFyIHNlbGVjdGVkRWxlbWVudCA9IG5ldyBMaXN0VmFsdWVFbGVtZW50KCk7XHJcbiAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQuSUQgPSBkYXRhWzBdWydJRCddO1xyXG4gICAgICAgICAgc2VsZWN0ZWRFbGVtZW50LkZpZWxkID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZS5rZXk7XHJcblxyXG4gICAgICAgICAgaWYgKHR5cGVvZiBkYXRhWzBdW3RoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2Uua2V5XSAhPT0gXCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC5LZXkgPSBkYXRhWzBdW3RoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2Uua2V5XTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50LlZhbHVlID0gZGF0YVswXVt0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlLmtleV07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBkYSBcIlVzZXJzX05hbWVfX05vbWVcIiBhIFwiVXNlcnNfTmFtZV9OYW1lX19Ob21lXCJcclxuICAgICAgICAgICAgdmFyIHBhcnQxID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZS5rZXkuc3BsaXQoXCJfX1wiKVswXS5zcGxpdChcIl9cIilbMV07IC8vIE5hbWVcclxuICAgICAgICAgICAgdmFyIGRlcGFydGVkID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZS5rZXkuc3BsaXQoXCJfX1wiKTtcclxuICAgICAgICAgICAgZGVwYXJ0ZWRbMF0gPSBkZXBhcnRlZFswXSArIFwiX1wiICsgcGFydDE7XHJcbiAgICAgICAgICAgIHZhciByZWNvbnN0cnVjdGVkS2V5ID0gZGVwYXJ0ZWQuam9pbihcIl9fXCIpO1xyXG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQuS2V5ID0gZGF0YVswXVtyZWNvbnN0cnVjdGVkS2V5XTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50LlZhbHVlID0gZGF0YVswXVtyZWNvbnN0cnVjdGVkS2V5XTsgICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMucHVzaChzZWxlY3RlZEVsZW1lbnQpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlLmVtaXQoW3RoaXMuc2VsZWN0ZWRFbGVtZW50c10pOyAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaG8gcGnDuSBkaSB1bmEgcmlzcG9zdGFcIik7XHJcblxyXG4gICAgICAgIHRoaXMubXVsdGlwbGVWYWx1ZXNUb0Nob29zZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKGJlaGF2aW91cnMuaW5kZXhPZihcIm1hbmFnZS1xdWVzdGlvbi1pbi1kYmdldHRlclwiKSAhPSAtMSl7XHJcbiAgICAgICAgICB0aGlzLnNob3dUYWJsZSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICBpZiAoIXRoaXMuRGlyZWN0bHlPcGVuVGFibGUpe1xyXG4gICAgICAgICAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93VGFibGUgPSB0cnVlOyAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgXHJcbiAgICB9XHJcbiAgICBcclxuICB9XHJcblxyXG4gIHNlbGVjdFZhbHVlKHJvdywga2V5KXtcclxuICAgIHZhciBrZXl1c2VkO1xyXG4gICAgdmFyIHZhbHVlID0gcm93W2tleV07XHJcblxyXG4gICAgdmFyIHZhbHVlVG9CZVNldCA9IFwiXCI7XHJcblxyXG4gICAgaWYgKCF0aGlzLmZpZWxkLklzTXVsdGlDaG9pY2hlKXtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi50YWJsZS50YWJsZS1tdWx0aXNlbGVjdC1mb3JjZWQgPiB0clwiKS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICAgICAgcm93LmNsYXNzTGlzdC5yZW1vdmUoXCJyb3ctc2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IG5ldyBBcnJheTxMaXN0VmFsdWVFbGVtZW50PigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9PSBudWxsKXtcclxuICAgICAgdmFsdWVUb0JlU2V0ID0gdmFsdWU7XHJcbiAgICAgIGtleXVzZWQgPSBrZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocm93Lmhhc093blByb3BlcnR5KHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2Uua2V5KSl7XHJcbiAgICAgICAgdmFsdWVUb0JlU2V0ID0gcm93W3RoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2Uua2V5XTtcclxuICAgICAgICBrZXl1c2VkID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZS5rZXk7XHJcbiAgICAgIH0gZWxzZSBpZiAocm93Lmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICB2YWx1ZVRvQmVTZXQgPSByb3dba2V5XTtcclxuICAgICAgICBrZXl1c2VkID0ga2V5OyAgICAgICAgXHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWx1ZVRvQmVTZXQgPT0gbnVsbCl7IHZhbHVlVG9CZVNldCA9IFwiXCI7IH1cclxuXHJcblxyXG4gICAgLy8gQ29tdW5xdWUgc2lhIGNpIHBvcnRpYW1vIGRpZXRybyBsJ0lEIGRlbGxhIHNlbGV6aW9uZSBjb24gdW4gY2FtcG8gY3VzdG9tLCBwdcOyIHNlbXByZSBzZXJ2aXJlXHJcbiAgICBpZihyb3cuaGFzT3duUHJvcGVydHkoXCJJRFwiKSl7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXMgPT0gbnVsbCl7IHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtcyA9IHt9OyB9XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtc1t0aGlzLmZpZWxkLk5hbWUrXCJfX19fSURcIl0gPSByb3dbJ0lEJ107XHJcbiAgICB9XHJcbiAgICBcclxuXHJcbiAgICAvL0VxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLlN1Y2Nlc3MoXCJVbiBzb2xvIHJpc3VsdGF0byB0cm92YXRvLCDDqCBzdGF0byBpbnNlcml0byBpbiBhdXRvbWF0aWNvXCIpO1xyXG5cclxuICAgIGlmICghdGhpcy5pc011bHRpc2VsZWN0KXtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIm5vbiBtdWx0aXNlbGVjdFwiKTtcclxuICAgICAgLy8gTm9uIMOoIG11bHRpc2VsZWN0XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSB2YWx1ZVRvQmVTZXQ7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZS5lbWl0KFt2YWx1ZVRvQmVTZXQscm93WydJRCddXSk7ICAgIFxyXG4gICAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImhvIG11bHRpc2VsZWN0XCIpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50cyAhPSBudWxsICYmICFBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWRFbGVtZW50cykpeyB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBbdGhpcy5zZWxlY3RlZEVsZW1lbnRzXTsgfVxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnRzID09IG51bGwpeyB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSBuZXcgQXJyYXk8TGlzdFZhbHVlRWxlbWVudD4oKTsgfVxyXG4gICAgICBcclxuXHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudHMuZmluZCh4ID0+IHguSUQgPT0gcm93WydJRCddKSA9PSBudWxsKXtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaG8gcGnDuSBkaSB1bmEgcmlzcG9zdGFcIik7XHJcblxyXG4gICAgICAgIC8vIEUnIHVuIGVsZW5jbyBnZW5lcmljbyBkYmdldHRlciBtdWx0aXNlbGVjdFxyXG4gICAgICAgIHZhciBzZWxlY3RlZEVsZW1lbnQgPSBuZXcgTGlzdFZhbHVlRWxlbWVudCgpO1xyXG4gICAgICAgIHNlbGVjdGVkRWxlbWVudC5JRCA9IHJvd1snSUQnXTtcclxuICAgICAgICBzZWxlY3RlZEVsZW1lbnQuU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHNlbGVjdGVkRWxlbWVudC5GaWVsZCA9IGtleXVzZWQ7XHJcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50LktleSA9IHZhbHVlVG9CZVNldDtcclxuICAgICAgICBzZWxlY3RlZEVsZW1lbnQuS2V5U1YgPSBrZXk7XHJcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50LktleVVzZWRTViA9IGtleXVzZWQ7XHJcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50LlZhbHVlID0gdmFsdWVUb0JlU2V0O1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMucHVzaChzZWxlY3RlZEVsZW1lbnQpO1xyXG5cclxuICAgICAgICB2YXIgY29ycmVzcG9uZGluZ0NvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29sLVwiK2tleXVzZWQrXCItaWQtXCIrcm93WydJRCddKTtcclxuICAgICAgICBpZiAoY29ycmVzcG9uZGluZ0NvbCA9PSBudWxsKXsgY29ycmVzcG9uZGluZ0NvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29sLVwiK2tleStcIi1pZC1cIityb3dbJ0lEJ10pOyB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPT0gbnVsbCl7XHJcbiAgICAgICAgICAgY29ycmVzcG9uZGluZ0NvbC5jbGFzc0xpc3QuYWRkKFwicm93LXNlbGVjdGVkXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb3JyZXNwb25kaW5nQ29sLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInJvdy1zZWxlY3RlZFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5maW5kSW5kZXgoeCA9PiB4LklEID09IHJvd1snSUQnXSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzLnNwbGljZShpbmRleCwxKTtcclxuXHJcbiAgICAgICAgdmFyIGNvcnJlc3BvbmRpbmdDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbC1cIitrZXl1c2VkK1wiLWlkLVwiK3Jvd1snSUQnXSk7XHJcbiAgICAgICAgaWYgKGNvcnJlc3BvbmRpbmdDb2wgPT0gbnVsbCl7IGNvcnJlc3BvbmRpbmdDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbC1cIitrZXkrXCItaWQtXCIrcm93WydJRCddKTsgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9PSBudWxsKXtcclxuICAgICAgICAgIGNvcnJlc3BvbmRpbmdDb2wuY2xhc3NMaXN0LnJlbW92ZShcInJvdy1zZWxlY3RlZFwiKTsgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb3JyZXNwb25kaW5nQ29sLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcInJvdy1zZWxlY3RlZFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgLy90aGlzLnNlbGVjdGVkVmFsdWUuZW1pdChbdGhpcy5zZWxlY3RlZEVsZW1lbnRzXSk7ICAgIFxyXG4gICAgICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgcmVuZGVyU2VsZWN0ZWQoKXtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9PSBudWxsKXsgdGhpcy5zZWxlY3RlZEVsZW1lbnRzID0gbmV3IEFycmF5PExpc3RWYWx1ZUVsZW1lbnQ+KCk7IH1cclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwicmVuZGVyU2VsZWN0ZWRcIiwgdGhpcy5zZWxlY3RlZEVsZW1lbnRzKTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDApe1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaCgoc2VsZWN0ZWRFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgdmFyIGNvcnJlc3BvbmRpbmdDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbC1cIitzZWxlY3RlZEVsZW1lbnQuRmllbGQrXCItaWQtXCIrc2VsZWN0ZWRFbGVtZW50LklEKTtcclxuICAgICAgICBpZiAoY29ycmVzcG9uZGluZ0NvbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9PSBudWxsKXtcclxuICAgICAgICAgICAgY29ycmVzcG9uZGluZ0NvbC5jbGFzc0xpc3QuYWRkKFwicm93LXNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29ycmVzcG9uZGluZ0NvbC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJyb3ctc2VsZWN0ZWRcIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvcnJlc3BvbmRpbmdDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbC1cIitzZWxlY3RlZEVsZW1lbnQuS2V5U1YrXCItaWQtXCIrc2VsZWN0ZWRFbGVtZW50LklEKTtcclxuICAgICAgICAgIGlmIChjb3JyZXNwb25kaW5nQ29sICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0NvbC5jbGFzc0xpc3QuYWRkKFwicm93LXNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmdDb2wucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwicm93LXNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgIHtcclxuICAgICAgICAgICAgY29ycmVzcG9uZGluZ0NvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29sLVwiK3NlbGVjdGVkRWxlbWVudC5LZXkrXCItaWQtXCIrc2VsZWN0ZWRFbGVtZW50LklEKTtcclxuICAgICAgICAgICAgaWYgKGNvcnJlc3BvbmRpbmdDb2wgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZ0NvbC5jbGFzc0xpc3QuYWRkKFwicm93LXNlbGVjdGVkXCIpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nQ29sLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInJvdy1zZWxlY3RlZFwiKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGNsb3NlKCl7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUuZW1pdChbXCIqKioqQ0xPU0UqKioqXCIsMF0pO1xyXG4gICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuICB9XHJcbiAgXHJcbiAgZGVsZXRlKCl7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUuZW1pdChbbnVsbCwwXSk7XHJcbiAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xyXG4gIH0gIFxyXG5cclxuICBhY3RpdmF0ZVRhYmxlKCl7XHJcbiAgICB0aGlzLnNob3dUYWJsZSA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZW5kZXJTZWxlY3RlZCgpO1xyXG4gICAgfSwyMDApO1xyXG4gIH1cclxuXHJcbiAgcmVsb2FkRGF0YSgpe1xyXG4gICAgdGhpcy5kb1JlbG9hZC5lbWl0KG51bGwpO1xyXG4gIH0gIFxyXG5cclxuICBzZWxlY3RDb2x1bW4oa2V5KXtcclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbHVtbkZvcmNlID09IG51bGwpe1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uID0ga2V5O1xyXG4gICAgICB0aGlzLm11bHRpc2VsZWN0UGhhc2UgPSAyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uZmlybVNlbGVjdGlvbigpe1xyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlLmVtaXQoW3RoaXMuc2VsZWN0ZWRFbGVtZW50c10pOyBcclxuICAgIHRoaXMuc2hvd1RhYmxlID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdFZhbHVlRWxlbWVudCB7XHJcbiAgSUQ6IHN0cmluZyB8IG51bWJlcjtcclxuICBTZWxlY3RlZDogYm9vbGVhbjtcclxuICBGaWVsZDogc3RyaW5nO1xyXG4gIEtleTogc3RyaW5nO1xyXG4gIEtleVNWOiBzdHJpbmc7XHJcbiAgS2V5VXNlZFNWOiBzdHJpbmc7XHJcbiAgVmFsdWU6IHN0cmluZztcclxuXHJcbn1cclxuXHJcbi8vIE8gY29zw6wgbyBzY2hpYW50YXRvIGEgbWFub1xyXG5leHBvcnQgZW51bSBRdWVyeUVkaXRvck1vZGVFbnVtIHtcclxuICBcIkNPTkZJR1VSQVRPUlwiID0gMSxcclxuICBcIkNPTVBPU0VSXCIgPSAyLFxyXG4gIFwiUkVTVUxUXCIgPSAzXHJcbn0iLCI8ZGl2PlxyXG4gICAgPG5nLXRlbXBsYXRlIFthcHBEeW5hbWljTG9hZGVyXSBbZGF0YV09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiIChvdXQpPVwib25FeHRlcm5hbFNRTFJlc3VsdE91dCgkZXZlbnQpO1wiICpuZ0lmPVwiUXVlcnlFZGl0b3JDb21wb25lbnQgIT0gbnVsbCAmJiByZWxhdGlvbnNMb2FkZWQgJiYgcmVsb2FkXCI+PC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiZmxvYXRpbmd0YWJsZSBkcmFnZ2FibGVcIiBjZGtEcmFnICpuZ0lmPVwic2hvd1RhYmxlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj48dG13LWljb24gY2xhc3M9XCJtYXQtaWNvblwiIChjbGljayk9XCJjbG9zZSgpXCIgbmFtZT1cInhcIj48L3Rtdy1pY29uPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+PHRtdy1pY29uIGNsYXNzPVwibWF0LWljb25cIiAoY2xpY2spPVwiZGVsZXRlKClcIiBuYW1lPVwidHJhc2hcIj48L3Rtdy1pY29uPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPjx0bXctaWNvbiBjbGFzcz1cIm1hdC1pY29uXCIgbmFtZT1cImdyaXAtdmVydGljYWxcIj48L3Rtdy1pY29uPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImluZm9cIj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc011bHRpc2VsZWN0XCI+U2VsZXppb25hIGlsIHZhbG9yZSBkYSByZWdpc3RyYXJlLjwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzTXVsdGlzZWxlY3QgJiYgbXVsdGlzZWxlY3RQaGFzZSA9PSAxXCI+U2VsZXppb25hIHVuYSBjb2xvbm5hPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNNdWx0aXNlbGVjdCAmJiBtdWx0aXNlbGVjdFBoYXNlID09IDIgJiYgc2VsZWN0ZWRDb2x1bW4gIT0gbnVsbCAmJiBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9PSBudWxsXCI+SGFpIHNlbGV6aW9uYXRvOiA8Yj57e3NlbGVjdGVkQ29sdW1uLnNwbGl0KFwiX19cIilbMV19fTwvYj4uPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNNdWx0aXNlbGVjdCAmJiBtdWx0aXNlbGVjdFBoYXNlID09IDJcIj5TZWxlemlvbmEgYWxtZW5vIHVuIGVsZW1lbnRvIHByZXNlbnRlIHNvdHRvIGFsbGEgY29sb25uYSBzZWxlemlvbmF0YTwvc3Bhbj4gICAgICAgIFxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXNNdWx0aXNlbGVjdCAmJiBtdWx0aXNlbGVjdFBoYXNlID09IDIgJiYgc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWNvbmZpcm1cIiAoY2xpY2spPVwiY29uZmlybVNlbGVjdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICA8dG13LWljb24gY2xhc3M9XCJtYXQtaWNvblwiIG5hbWU9XCJjaGVja1wiPjwvdG13LWljb24+IENvbmZlcm1hIHNlbGV6aW9uZVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICBcclxuICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlXCIgW25nQ2xhc3NdPVwieyd0YWJsZS1ub3Rmb3JjZWQnOiBmaWVsZC5GaWVsZFR5cGUgIT0gZmllbGRUeXBlRW51bVsnRWxlbmNvIGdlbmVyaWNvJ10gJiYgZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ29sdW1uRm9yY2UgPT0gbnVsbCwgJ3RhYmxlLWZvcmNlZCc6IGZpZWxkLkZpZWxkVHlwZSAhPSBmaWVsZFR5cGVFbnVtWydFbGVuY28gZ2VuZXJpY28nXSAmJiBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSAhPSBudWxsLCAndGFibGUtbXVsdGlzZWxlY3Qtbm90Zm9yY2VkJzogZmllbGQuRmllbGRUeXBlID09IGZpZWxkVHlwZUVudW1bJ0VsZW5jbyBnZW5lcmljbyddICAmJiBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9PSBudWxsLCAndGFibGUtbXVsdGlzZWxlY3QtZm9yY2VkJzogZmllbGQuRmllbGRUeXBlID09IGZpZWxkVHlwZUVudW1bJ0VsZW5jbyBnZW5lcmljbyddICAmJiBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSAhPSBudWxsfVwiPlxyXG4gICAgICAgIDx0cj48dGggKm5nRm9yPVwibGV0IGtleSBvZiBrZXlzOyBsZXQgZmlyc3QgPSBmaXJzdFwiIChjbGljayk9XCJzZWxlY3RDb2x1bW4oa2V5KVwiIGlkPVwiaGVhZGNvbC17e2tleX19XCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlyc3RcIj57e2tleX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaXJzdFwiPnt7a2V5LnNwbGl0KFwiX19cIilbMV19fTwvc3Bhbj5cclxuICAgICAgICA8L3RoPjwvdHI+XHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YVwiIGNsYXNzPVwicm93c1wiPlxyXG4gICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlzXCIgKGNsaWNrKT1cInNlbGVjdFZhbHVlKHJvdywga2V5KVwiIGlkPVwiY29sLXt7a2V5fX0taWQte3tyb3dbJ0lEJ119fVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBcclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93W2tleV0gIT0gbnVsbCAmJiByb3dba2V5XS50b1N0cmluZygpLmxlbmd0aCA8PSAxMDBcIiBbaW5uZXJIVE1MXT1cInJvd1trZXldXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPiBcclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93W2tleV0gIT0gbnVsbCAmJiByb3dba2V5XS50b1N0cmluZygpLmxlbmd0aCA+IDEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7cm93W2tleV0gIT0gbnVsbCA/IHJvd1trZXldLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsMTAwKSA6ICcnfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93W2tleV0gIT0gbnVsbCAmJiByb3dba2V5XS50b1N0cmluZygpLmxlbmd0aCA+IDEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIC4uLlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJyb3dba2V5XVwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC90YWJsZT5cclxuXHJcbiAgICA8IS0tIFxyXG4gICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtbm90Zm9yY2VkXCIgKm5nSWY9XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSA9PSBudWxsXCI+XHJcbiAgICAgICAgPHRyPjx0aCAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXM7IGxldCBmaXJzdCA9IGZpcnN0XCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlyc3RcIj57e2tleX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaXJzdFwiPnt7a2V5LnNwbGl0KFwiX19cIilbMV19fTwvc3Bhbj5cclxuICAgICAgICA8L3RoPjwvdHI+XHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YVwiIGNsYXNzPVwicm93c1wiPlxyXG4gICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlzXCIgKGNsaWNrKT1cInNlbGVjdFZhbHVlTm90Rm9yY2VkKHJvd1trZXldKVwiPlxyXG4gICAgICAgICAgICAgICAge3tyb3dba2V5XSAhPSBudWxsID8gcm93W2tleV0udG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwxMDApIDogJyd9fVxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dba2V5XSAhPSBudWxsICYmIHJvd1trZXldLnRvU3RyaW5nKCkubGVuZ3RoID4gMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgIDwvdGFibGU+XHJcblxyXG4gICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtZm9yY2VkXCIgKm5nSWY9XCJmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZSAhPSBudWxsXCI+XHJcbiAgICAgICAgPHRyPjx0aCAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXM7IGxldCBmaXJzdCA9IGZpcnN0XCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlyc3RcIj57e2tleX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmaXJzdFwiPnt7a2V5LnNwbGl0KFwiX19cIilbMV19fTwvc3Bhbj5cclxuICAgICAgICA8L3RoPjwvdHI+XHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YVwiIGNsYXNzPVwicm93c1wiIChjbGljayk9XCJzZWxlY3RWYWx1ZUZvcmNlZChyb3cpXCI+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXNcIj5cclxuICAgICAgICAgICAgICAgIHt7cm93W2tleV0gIT0gbnVsbCA/IHJvd1trZXldLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsMTAwKSA6ICcnfX1cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93W2tleV0gIT0gbnVsbCAmJiByb3dba2V5XS50b1N0cmluZygpLmxlbmd0aCA+IDEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIC4uLlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG4gICAgLS0+XHJcblxyXG48L2Rpdj5cclxuXHJcbjxzcGFuICpuZ0lmPVwidmFsdWUgIT0gbnVsbFwiPnt7dmFsdWV9fTwvc3Bhbj5cclxuXHJcbjxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWFycm93LWRvd25cIiAoY2xpY2spPVwiYWN0aXZhdGVUYWJsZSgpXCIgKm5nSWY9XCJtdWx0aXBsZVZhbHVlc1RvQ2hvb3NlXCI+XHJcbiAgICA8dG13LWljb24gY2xhc3M9XCJtYXQtaWNvblwiIG5hbWU9XCJjaGV2cm9uLWRvd25cIj48L3Rtdy1pY29uPlxyXG48L2J1dHRvbj5cclxuPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tYXJyb3ctZG93blwiIChjbGljayk9XCJyZWxvYWREYXRhKClcIiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckhhc1Jlc2V0QnV0dG9uXCI+XHJcbiAgICA8dG13LWljb24gY2xhc3M9XCJtYXQtaWNvblwiIG5hbWU9XCJsb29wXCI+PC90bXctaWNvbj5cclxuPC9idXR0b24+Il19
@@ -6,8 +6,8 @@ import * as i1 from "@angular/forms";
6
6
  import * as i2 from "@angular/material/input";
7
7
  import * as i3 from "@angular/material/form-field";
8
8
  import * as i4 from "@angular/material/slide-toggle";
9
- import * as i5 from "@angular/material/icon";
10
- import * as i6 from "@angular/common";
9
+ import * as i5 from "@angular/common";
10
+ import * as i6 from "tmw-icons";
11
11
  import * as i7 from "../../../directives/speech-to-text/speech-to-text.directive";
12
12
  export class DynamicModuleFieldExtraFixComponent {
13
13
  constructor(formBuilder) {
@@ -32,10 +32,10 @@ export class DynamicModuleFieldExtraFixComponent {
32
32
  }
33
33
  }
34
34
  DynamicModuleFieldExtraFixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicModuleFieldExtraFixComponent, deps: [{ token: i1.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component });
35
- DynamicModuleFieldExtraFixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DynamicModuleFieldExtraFixComponent, selector: "dynamic-module-field-extra-fix", inputs: { fieldExtraConfig: "fieldExtraConfig", form: "form", field: "field", endPointConfiguration: "endPointConfiguration" }, outputs: { configValueChange: "configValueChange" }, ngImport: i0, template: "\r\n\r\n<div [formGroup]=\"formExtraGroup\">\r\n\r\n <mat-form-field appearance=\"outline\" *ngIf=\"fieldExtraConfig.FieldConfigType == FieldTypeEnum['Campo di testo'] && loaded\">\r\n <mat-label class=\"pt-1\">\r\n {{ fieldExtraConfig.FieldConfigLabel }}\r\n </mat-label>\r\n <input\r\n matInput\r\n [formControlName]=\"'element'\"\r\n [(ngModel)]=\"FieldExtraValues.FieldConfigValue\"\r\n />\r\n\r\n <mat-icon\r\n matSuffix\r\n SpeechToText\r\n [(bindedText)]=\"FieldExtraValues.FieldConfigValue\"\r\n style=\"cursor: pointer\">keyboard_voice</mat-icon>\r\n </mat-form-field>\r\n\r\n <mat-slide-toggle color=\"primary\" *ngIf=\"fieldExtraConfig.FieldConfigType == FieldTypeEnum['Booleano'] && loaded\"\r\n [formControlName]=\"'element'\"\r\n [(ngModel)]=\"FieldExtraValues.FieldConfigValue\">\r\n {{ fieldExtraConfig.FieldConfigLabel }}\r\n </mat-slide-toggle>\r\n\r\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i4.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i7.SpeechToTextDirective, selector: "[SpeechToText]", inputs: ["bindedText"], outputs: ["bindedTextChange"] }] });
35
+ DynamicModuleFieldExtraFixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DynamicModuleFieldExtraFixComponent, selector: "dynamic-module-field-extra-fix", inputs: { fieldExtraConfig: "fieldExtraConfig", form: "form", field: "field", endPointConfiguration: "endPointConfiguration" }, outputs: { configValueChange: "configValueChange" }, ngImport: i0, template: "\r\n\r\n<div [formGroup]=\"formExtraGroup\">\r\n\r\n <mat-form-field appearance=\"outline\" *ngIf=\"fieldExtraConfig.FieldConfigType == FieldTypeEnum['Campo di testo'] && loaded\">\r\n <mat-label class=\"pt-1\">\r\n {{ fieldExtraConfig.FieldConfigLabel }}\r\n </mat-label>\r\n <input\r\n matInput\r\n [formControlName]=\"'element'\"\r\n [(ngModel)]=\"FieldExtraValues.FieldConfigValue\"\r\n />\r\n\r\n <tmw-icon class=\"mat-icon\"\r\n matSuffix\r\n SpeechToText\r\n [(bindedText)]=\"FieldExtraValues.FieldConfigValue\"\r\n style=\"cursor: pointer\" name=\"microphone\"></tmw-icon>\r\n </mat-form-field>\r\n\r\n <mat-slide-toggle color=\"primary\" *ngIf=\"fieldExtraConfig.FieldConfigType == FieldTypeEnum['Booleano'] && loaded\"\r\n [formControlName]=\"'element'\"\r\n [(ngModel)]=\"FieldExtraValues.FieldConfigValue\">\r\n {{ fieldExtraConfig.FieldConfigLabel }}\r\n </mat-slide-toggle>\r\n\r\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i4.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.TmwIconComponent, selector: "tmw-icon", inputs: ["name", "size", "ariaLabel", "variant", "strokeWidth"] }, { kind: "directive", type: i7.SpeechToTextDirective, selector: "[SpeechToText]", inputs: ["bindedText"], outputs: ["bindedTextChange"] }] });
36
36
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicModuleFieldExtraFixComponent, decorators: [{
37
37
  type: Component,
38
- args: [{ selector: 'dynamic-module-field-extra-fix', template: "\r\n\r\n<div [formGroup]=\"formExtraGroup\">\r\n\r\n <mat-form-field appearance=\"outline\" *ngIf=\"fieldExtraConfig.FieldConfigType == FieldTypeEnum['Campo di testo'] && loaded\">\r\n <mat-label class=\"pt-1\">\r\n {{ fieldExtraConfig.FieldConfigLabel }}\r\n </mat-label>\r\n <input\r\n matInput\r\n [formControlName]=\"'element'\"\r\n [(ngModel)]=\"FieldExtraValues.FieldConfigValue\"\r\n />\r\n\r\n <mat-icon\r\n matSuffix\r\n SpeechToText\r\n [(bindedText)]=\"FieldExtraValues.FieldConfigValue\"\r\n style=\"cursor: pointer\">keyboard_voice</mat-icon>\r\n </mat-form-field>\r\n\r\n <mat-slide-toggle color=\"primary\" *ngIf=\"fieldExtraConfig.FieldConfigType == FieldTypeEnum['Booleano'] && loaded\"\r\n [formControlName]=\"'element'\"\r\n [(ngModel)]=\"FieldExtraValues.FieldConfigValue\">\r\n {{ fieldExtraConfig.FieldConfigLabel }}\r\n </mat-slide-toggle>\r\n\r\n</div>" }]
38
+ args: [{ selector: 'dynamic-module-field-extra-fix', template: "\r\n\r\n<div [formGroup]=\"formExtraGroup\">\r\n\r\n <mat-form-field appearance=\"outline\" *ngIf=\"fieldExtraConfig.FieldConfigType == FieldTypeEnum['Campo di testo'] && loaded\">\r\n <mat-label class=\"pt-1\">\r\n {{ fieldExtraConfig.FieldConfigLabel }}\r\n </mat-label>\r\n <input\r\n matInput\r\n [formControlName]=\"'element'\"\r\n [(ngModel)]=\"FieldExtraValues.FieldConfigValue\"\r\n />\r\n\r\n <tmw-icon class=\"mat-icon\"\r\n matSuffix\r\n SpeechToText\r\n [(bindedText)]=\"FieldExtraValues.FieldConfigValue\"\r\n style=\"cursor: pointer\" name=\"microphone\"></tmw-icon>\r\n </mat-form-field>\r\n\r\n <mat-slide-toggle color=\"primary\" *ngIf=\"fieldExtraConfig.FieldConfigType == FieldTypeEnum['Booleano'] && loaded\"\r\n [formControlName]=\"'element'\"\r\n [(ngModel)]=\"FieldExtraValues.FieldConfigValue\">\r\n {{ fieldExtraConfig.FieldConfigLabel }}\r\n </mat-slide-toggle>\r\n\r\n</div>" }]
39
39
  }], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }]; }, propDecorators: { fieldExtraConfig: [{
40
40
  type: Input
41
41
  }], form: [{
@@ -47,4 +47,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
47
47
  }], configValueChange: [{
48
48
  type: Output
49
49
  }] } });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1tb2R1bGUtZmllbGQtZXh0cmEtZml4LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9keW5hbWljLW1vZHVsZS1maWVsZC1leHRyYS1maXgvZHluYW1pYy1tb2R1bGUtZmllbGQtZXh0cmEtZml4LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9keW5hbWljLW1vZHVsZS1maWVsZC1leHRyYS1maXgvZHluYW1pYy1tb2R1bGUtZmllbGQtZXh0cmEtZml4LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFvQixnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRzVGLE9BQU8sRUFBYSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7O0FBUTNFLE1BQU0sT0FBTyxtQ0FBbUM7SUFjOUMsWUFDVSxXQUErQjtRQUEvQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFSL0Isc0JBQWlCLEdBQW1DLElBQUksWUFBWSxFQUFvQixDQUFDO1FBRW5HLGtCQUFhLEdBQUcsYUFBYSxDQUFDO1FBQzlCLHFCQUFnQixHQUFxQixJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDNUQsV0FBTSxHQUFZLEtBQUssQ0FBQztJQUtyQixDQUFDO0lBRUosUUFBUTtRQUVOLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsMEJBQTBCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztRQUVoTyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFDO1lBQ3JFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUN0SjtRQUVELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDM0MsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDO1NBQ2xELENBQUMsQ0FBQztJQUNQLENBQUM7O2lJQWxDVSxtQ0FBbUM7cUhBQW5DLG1DQUFtQywyUENaaEQsczhCQTJCTTs0RkRmTyxtQ0FBbUM7a0JBTC9DLFNBQVM7K0JBQ0UsZ0NBQWdDO3lHQU1qQyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRUksaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRmllbGRFeHRyYUNvbmZpZywgRmllbGRFeHRyYVZhbHVlcyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maWVsZEV4dHJhQ29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgRW5kUG9pbnRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2R5bmFtaWMtbW9kdWxlLWZpZWxkLWV4dHJhLWZpeCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtbW9kdWxlLWZpZWxkLWV4dHJhLWZpeC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZHluYW1pYy1tb2R1bGUtZmllbGQtZXh0cmEtZml4LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNNb2R1bGVGaWVsZEV4dHJhRml4Q29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgZmllbGRFeHRyYUNvbmZpZzogRmllbGRFeHRyYUNvbmZpZztcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtO1xyXG4gIEBJbnB1dCgpIGZpZWxkOiBCYXNlRmllbGQ7XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcblxyXG4gIEBPdXRwdXQoKSBjb25maWdWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPEZpZWxkRXh0cmFWYWx1ZXM+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWVsZEV4dHJhVmFsdWVzPigpO1xyXG5cclxuICBGaWVsZFR5cGVFbnVtID0gRmllbGRUeXBlRW51bTtcclxuICBGaWVsZEV4dHJhVmFsdWVzOiBGaWVsZEV4dHJhVmFsdWVzID0gbmV3IEZpZWxkRXh0cmFWYWx1ZXMoKTtcclxuICBsb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmb3JtRXh0cmFHcm91cDogVW50eXBlZEZvcm1Hcm91cDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXJcclxuICApIHt9ICBcclxuXHJcbiAgbmdPbkluaXQoKXtcclxuXHJcbiAgICB0aGlzLkZpZWxkRXh0cmFWYWx1ZXMgPSB0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMuZmluZCh4ID0+IHguRmllbGRDb25maWdDb2RlID09IHRoaXMuZmllbGRFeHRyYUNvbmZpZy5GaWVsZENvbmZpZ0NvZGUgJiYgKHguRmllbGRDb25maWdQYXJlbnRGaWVsZENvZGUgPT0gdGhpcy5maWVsZC5OYW1lIHx8IHguRmllbGRDb25maWdQYXJlbnRGaWVsZENvZGUgPT09IHVuZGVmaW5lZCkpO1xyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkRXh0cmFDb25maWcuRmllbGRDb25maWdUeXBlID09IEZpZWxkVHlwZUVudW1bJ0Jvb2xlYW5vJ10pe1xyXG4gICAgICB0aGlzLkZpZWxkRXh0cmFWYWx1ZXMuRmllbGRDb25maWdWYWx1ZSA9IHRoaXMuRmllbGRFeHRyYVZhbHVlcy5GaWVsZENvbmZpZ1ZhbHVlID09IFwiZmFsc2VcIiB8fCAhdGhpcy5GaWVsZEV4dHJhVmFsdWVzLkZpZWxkQ29uZmlnVmFsdWUgPyBmYWxzZSA6IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb25maWd1cmVGb3JtKCk7XHJcbiAgICB0aGlzLmxvYWRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBjb25maWd1cmVGb3JtKCl7XHJcbiAgICAgIHRoaXMuZm9ybUV4dHJhR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICBlbGVtZW50OiBbdGhpcy5GaWVsZEV4dHJhVmFsdWVzLkZpZWxkQ29uZmlnVmFsdWVdXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiXHJcblxyXG48ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybUV4dHJhR3JvdXBcIj5cclxuXHJcbiAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgKm5nSWY9XCJmaWVsZEV4dHJhQ29uZmlnLkZpZWxkQ29uZmlnVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydDYW1wbyBkaSB0ZXN0byddICYmIGxvYWRlZFwiPlxyXG4gICAgICA8bWF0LWxhYmVsIGNsYXNzPVwicHQtMVwiPlxyXG4gICAgICAgIHt7IGZpZWxkRXh0cmFDb25maWcuRmllbGRDb25maWdMYWJlbCB9fVxyXG4gICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidlbGVtZW50J1wiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJGaWVsZEV4dHJhVmFsdWVzLkZpZWxkQ29uZmlnVmFsdWVcIlxyXG4gICAgICAvPlxyXG5cclxuICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgU3BlZWNoVG9UZXh0XHJcbiAgICAgICAgWyhiaW5kZWRUZXh0KV09XCJGaWVsZEV4dHJhVmFsdWVzLkZpZWxkQ29uZmlnVmFsdWVcIlxyXG4gICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCI+a2V5Ym9hcmRfdm9pY2U8L21hdC1pY29uPlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gIDxtYXQtc2xpZGUtdG9nZ2xlIGNvbG9yPVwicHJpbWFyeVwiICpuZ0lmPVwiZmllbGRFeHRyYUNvbmZpZy5GaWVsZENvbmZpZ1R5cGUgPT0gRmllbGRUeXBlRW51bVsnQm9vbGVhbm8nXSAmJiBsb2FkZWRcIlxyXG4gIFtmb3JtQ29udHJvbE5hbWVdPVwiJ2VsZW1lbnQnXCJcclxuICBbKG5nTW9kZWwpXT1cIkZpZWxkRXh0cmFWYWx1ZXMuRmllbGRDb25maWdWYWx1ZVwiPlxyXG4gIHt7IGZpZWxkRXh0cmFDb25maWcuRmllbGRDb25maWdMYWJlbCB9fVxyXG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuXHJcbjwvZGl2PiJdfQ==
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1tb2R1bGUtZmllbGQtZXh0cmEtZml4LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9keW5hbWljLW1vZHVsZS1maWVsZC1leHRyYS1maXgvZHluYW1pYy1tb2R1bGUtZmllbGQtZXh0cmEtZml4LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9keW5hbWljLW1vZHVsZS1maWVsZC1leHRyYS1maXgvZHluYW1pYy1tb2R1bGUtZmllbGQtZXh0cmEtZml4LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFvQixnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRzVGLE9BQU8sRUFBYSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7O0FBUTNFLE1BQU0sT0FBTyxtQ0FBbUM7SUFjOUMsWUFDVSxXQUErQjtRQUEvQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFSL0Isc0JBQWlCLEdBQW1DLElBQUksWUFBWSxFQUFvQixDQUFDO1FBRW5HLGtCQUFhLEdBQUcsYUFBYSxDQUFDO1FBQzlCLHFCQUFnQixHQUFxQixJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDNUQsV0FBTSxHQUFZLEtBQUssQ0FBQztJQUtyQixDQUFDO0lBRUosUUFBUTtRQUVOLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsMEJBQTBCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztRQUVoTyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFDO1lBQ3JFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUN0SjtRQUVELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDM0MsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDO1NBQ2xELENBQUMsQ0FBQztJQUNQLENBQUM7O2lJQWxDVSxtQ0FBbUM7cUhBQW5DLG1DQUFtQywyUENaaEQsKzlCQTJCTTs0RkRmTyxtQ0FBbUM7a0JBTC9DLFNBQVM7K0JBQ0UsZ0NBQWdDO3lHQU1qQyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRUksaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRmllbGRFeHRyYUNvbmZpZywgRmllbGRFeHRyYVZhbHVlcyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maWVsZEV4dHJhQ29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgRW5kUG9pbnRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2R5bmFtaWMtbW9kdWxlLWZpZWxkLWV4dHJhLWZpeCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtbW9kdWxlLWZpZWxkLWV4dHJhLWZpeC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZHluYW1pYy1tb2R1bGUtZmllbGQtZXh0cmEtZml4LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNNb2R1bGVGaWVsZEV4dHJhRml4Q29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgZmllbGRFeHRyYUNvbmZpZzogRmllbGRFeHRyYUNvbmZpZztcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtO1xyXG4gIEBJbnB1dCgpIGZpZWxkOiBCYXNlRmllbGQ7XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcblxyXG4gIEBPdXRwdXQoKSBjb25maWdWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPEZpZWxkRXh0cmFWYWx1ZXM+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWVsZEV4dHJhVmFsdWVzPigpO1xyXG5cclxuICBGaWVsZFR5cGVFbnVtID0gRmllbGRUeXBlRW51bTtcclxuICBGaWVsZEV4dHJhVmFsdWVzOiBGaWVsZEV4dHJhVmFsdWVzID0gbmV3IEZpZWxkRXh0cmFWYWx1ZXMoKTtcclxuICBsb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmb3JtRXh0cmFHcm91cDogVW50eXBlZEZvcm1Hcm91cDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXJcclxuICApIHt9ICBcclxuXHJcbiAgbmdPbkluaXQoKXtcclxuXHJcbiAgICB0aGlzLkZpZWxkRXh0cmFWYWx1ZXMgPSB0aGlzLmZvcm0uRmxkRXh0cmFDb25maWdWYWx1ZXMuZmluZCh4ID0+IHguRmllbGRDb25maWdDb2RlID09IHRoaXMuZmllbGRFeHRyYUNvbmZpZy5GaWVsZENvbmZpZ0NvZGUgJiYgKHguRmllbGRDb25maWdQYXJlbnRGaWVsZENvZGUgPT0gdGhpcy5maWVsZC5OYW1lIHx8IHguRmllbGRDb25maWdQYXJlbnRGaWVsZENvZGUgPT09IHVuZGVmaW5lZCkpO1xyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkRXh0cmFDb25maWcuRmllbGRDb25maWdUeXBlID09IEZpZWxkVHlwZUVudW1bJ0Jvb2xlYW5vJ10pe1xyXG4gICAgICB0aGlzLkZpZWxkRXh0cmFWYWx1ZXMuRmllbGRDb25maWdWYWx1ZSA9IHRoaXMuRmllbGRFeHRyYVZhbHVlcy5GaWVsZENvbmZpZ1ZhbHVlID09IFwiZmFsc2VcIiB8fCAhdGhpcy5GaWVsZEV4dHJhVmFsdWVzLkZpZWxkQ29uZmlnVmFsdWUgPyBmYWxzZSA6IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb25maWd1cmVGb3JtKCk7XHJcbiAgICB0aGlzLmxvYWRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBjb25maWd1cmVGb3JtKCl7XHJcbiAgICAgIHRoaXMuZm9ybUV4dHJhR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICBlbGVtZW50OiBbdGhpcy5GaWVsZEV4dHJhVmFsdWVzLkZpZWxkQ29uZmlnVmFsdWVdXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiXHJcblxyXG48ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybUV4dHJhR3JvdXBcIj5cclxuXHJcbiAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgKm5nSWY9XCJmaWVsZEV4dHJhQ29uZmlnLkZpZWxkQ29uZmlnVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydDYW1wbyBkaSB0ZXN0byddICYmIGxvYWRlZFwiPlxyXG4gICAgICA8bWF0LWxhYmVsIGNsYXNzPVwicHQtMVwiPlxyXG4gICAgICAgIHt7IGZpZWxkRXh0cmFDb25maWcuRmllbGRDb25maWdMYWJlbCB9fVxyXG4gICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidlbGVtZW50J1wiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJGaWVsZEV4dHJhVmFsdWVzLkZpZWxkQ29uZmlnVmFsdWVcIlxyXG4gICAgICAvPlxyXG5cclxuICAgICAgPHRtdy1pY29uIGNsYXNzPVwibWF0LWljb25cIlxyXG4gICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgIFNwZWVjaFRvVGV4dFxyXG4gICAgICAgIFsoYmluZGVkVGV4dCldPVwiRmllbGRFeHRyYVZhbHVlcy5GaWVsZENvbmZpZ1ZhbHVlXCJcclxuICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIG5hbWU9XCJtaWNyb3Bob25lXCI+PC90bXctaWNvbj5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICA8bWF0LXNsaWRlLXRvZ2dsZSBjb2xvcj1cInByaW1hcnlcIiAqbmdJZj1cImZpZWxkRXh0cmFDb25maWcuRmllbGRDb25maWdUeXBlID09IEZpZWxkVHlwZUVudW1bJ0Jvb2xlYW5vJ10gJiYgbG9hZGVkXCJcclxuICBbZm9ybUNvbnRyb2xOYW1lXT1cIidlbGVtZW50J1wiXHJcbiAgWyhuZ01vZGVsKV09XCJGaWVsZEV4dHJhVmFsdWVzLkZpZWxkQ29uZmlnVmFsdWVcIj5cclxuICB7eyBmaWVsZEV4dHJhQ29uZmlnLkZpZWxkQ29uZmlnTGFiZWwgfX1cclxuICA8L21hdC1zbGlkZS10b2dnbGU+XHJcblxyXG48L2Rpdj4iXX0=