@po-ui/ng-components 18.19.1 → 18.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/esm2022/lib/components/po-field/po-combo/po-combo.component.mjs +41 -41
  2. package/esm2022/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.mjs +23 -23
  3. package/esm2022/lib/components/po-field/po-lookup/po-lookup.component.mjs +47 -38
  4. package/esm2022/lib/po.module.mjs +1 -1
  5. package/esm2022/lib/services/po-theme/enum/po-theme-a11y.enum.mjs +30 -0
  6. package/esm2022/lib/services/po-theme/enum/po-theme-type.enum.mjs +4 -1
  7. package/esm2022/lib/services/po-theme/helpers/accessibilities/po-theme-default-aa.constant.mjs +14 -0
  8. package/esm2022/lib/services/po-theme/helpers/accessibilities/po-theme-default-aaa.constant.mjs +18 -0
  9. package/esm2022/lib/services/po-theme/helpers/po-theme-poui.constant.mjs +29 -13
  10. package/esm2022/lib/services/po-theme/helpers/types/po-theme-dark-defaults.constant.mjs +210 -0
  11. package/esm2022/lib/services/po-theme/helpers/types/po-theme-light-defaults.constant.mjs +114 -0
  12. package/esm2022/lib/services/po-theme/index.mjs +7 -4
  13. package/esm2022/lib/services/po-theme/interfaces/po-theme.interface.mjs +1 -1
  14. package/esm2022/lib/services/po-theme/po-theme.service.mjs +216 -32
  15. package/fesm2022/po-ui-ng-components.mjs +626 -372
  16. package/fesm2022/po-ui-ng-components.mjs.map +1 -1
  17. package/lib/services/po-theme/enum/po-theme-a11y.enum.d.ts +28 -0
  18. package/lib/services/po-theme/enum/po-theme-type.enum.d.ts +3 -0
  19. package/lib/services/po-theme/helpers/accessibilities/po-theme-default-aa.constant.d.ts +10 -0
  20. package/lib/services/po-theme/helpers/accessibilities/po-theme-default-aaa.constant.d.ts +14 -0
  21. package/lib/services/po-theme/helpers/po-theme-poui.constant.d.ts +5 -1
  22. package/lib/services/po-theme/helpers/{po-theme-dark-defaults.constant.d.ts → types/po-theme-dark-defaults.constant.d.ts} +4 -11
  23. package/lib/services/po-theme/helpers/types/po-theme-light-defaults.constant.d.ts +25 -0
  24. package/lib/services/po-theme/index.d.ts +6 -3
  25. package/lib/services/po-theme/interfaces/po-theme.interface.d.ts +18 -5
  26. package/lib/services/po-theme/po-theme.service.d.ts +90 -10
  27. package/package.json +4 -4
  28. package/po-ui-ng-components-18.20.0.tgz +0 -0
  29. package/schematics/ng-add/index.js +1 -1
  30. package/schematics/ng-update/v14/index.js +1 -1
  31. package/schematics/ng-update/v15/index.js +1 -1
  32. package/schematics/ng-update/v16/index.js +1 -1
  33. package/schematics/ng-update/v17/index.js +1 -1
  34. package/schematics/ng-update/v18/index.js +2 -2
  35. package/schematics/ng-update/v2/index.js +1 -1
  36. package/schematics/ng-update/v3/index.js +1 -1
  37. package/schematics/ng-update/v4/index.js +1 -1
  38. package/schematics/ng-update/v5/index.js +1 -1
  39. package/schematics/ng-update/v6/index.js +1 -1
  40. package/esm2022/lib/services/po-theme/helpers/po-theme-dark-defaults.constant.mjs +0 -203
  41. package/esm2022/lib/services/po-theme/helpers/po-theme-light-defaults.constant.mjs +0 -134
  42. package/lib/services/po-theme/helpers/po-theme-light-defaults.constant.d.ts +0 -41
  43. package/po-ui-ng-components-18.19.1.tgz +0 -0
@@ -19,17 +19,17 @@ const _c1 = ["endDateInput"];
19
19
  const _c2 = ["startDateInput"];
20
20
  const _c3 = ["iconCalendar"];
21
21
  const _c4 = ["calendarPicker"];
22
- function PoDatepickerRangeComponent_po_clean_12_Template(rf, ctx) { if (rf & 1) {
22
+ function PoDatepickerRangeComponent_po_clean_14_Template(rf, ctx) { if (rf & 1) {
23
23
  const _r2 = i0.ɵɵgetCurrentView();
24
- i0.ɵɵelementStart(0, "po-clean", 16);
25
- i0.ɵɵlistener("p-change-event", function PoDatepickerRangeComponent_po_clean_12_Template_po_clean_p_change_event_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.clear()); });
24
+ i0.ɵɵelementStart(0, "po-clean", 18);
25
+ i0.ɵɵlistener("p-change-event", function PoDatepickerRangeComponent_po_clean_14_Template_po_clean_p_change_event_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.clear()); });
26
26
  i0.ɵɵelementEnd();
27
27
  } }
28
- function PoDatepickerRangeComponent_ng_container_17_Template(rf, ctx) { if (rf & 1) {
28
+ function PoDatepickerRangeComponent_ng_container_19_Template(rf, ctx) { if (rf & 1) {
29
29
  const _r4 = i0.ɵɵgetCurrentView();
30
30
  i0.ɵɵelementContainerStart(0);
31
- i0.ɵɵelementStart(1, "div", 17, 4)(3, "po-calendar", 18);
32
- i0.ɵɵlistener("ngModelChange", function PoDatepickerRangeComponent_ng_container_17_Template_po_calendar_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onCalendarChange($event)); });
31
+ i0.ɵɵelementStart(1, "div", 19, 4)(3, "po-calendar", 20);
32
+ i0.ɵɵlistener("ngModelChange", function PoDatepickerRangeComponent_ng_container_19_Template_po_calendar_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onCalendarChange($event)); });
33
33
  i0.ɵɵelementEnd()();
34
34
  i0.ɵɵelementContainerEnd();
35
35
  } if (rf & 2) {
@@ -474,30 +474,30 @@ export class PoDatepickerRangeComponent extends PoDatepickerRangeBaseComponent {
474
474
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.startDateInput = _t.first);
475
475
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.iconCalendar = _t.first);
476
476
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.calendarPicker = _t.first);
477
- } }, features: [i0.ɵɵProvidersFeature(providers), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 18, vars: 30, consts: [["dateRangeField", ""], ["startDateInput", ""], ["endDateInput", ""], ["iconCalendar", ""], ["calendarPicker", ""], [3, "p-disabled", "p-label", "p-optional", "p-required", "p-show-required"], [1, "po-datepicker-range-field", "po-input"], [1, "po-datepicker-range-start-date"], ["maxlength", "10", "type", "text", 1, "po-datepicker-range-input", 3, "blur", "focus", "keydown", "keyup", "click", "autocomplete", "disabled", "name", "readonly"], [1, "po-datepicker-range-separator"], [1, "po-datepicker-range-end-date"], [1, "po-datepicker-range-icon"], ["class", "po-icon-input", 3, "p-change-event", 4, "ngIf"], [3, "click", "p-icon"], [3, "p-help", "p-disabled", "p-error-pattern"], [4, "ngIf"], [1, "po-icon-input", 3, "p-change-event"], [1, "po-calendar-range-picker"], ["p-mode", "range", 3, "ngModelChange", "ngModel", "p-max-date", "p-min-date", "p-locale"]], template: function PoDatepickerRangeComponent_Template(rf, ctx) { if (rf & 1) {
477
+ } }, features: [i0.ɵɵProvidersFeature(providers), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 20, vars: 30, consts: [["dateRangeField", ""], ["startDateInput", ""], ["endDateInput", ""], ["iconCalendar", ""], ["calendarPicker", ""], [3, "p-disabled", "p-label", "p-optional", "p-required", "p-show-required"], [1, "po-field-container-content"], [1, "po-field-container-input"], [1, "po-datepicker-range-field", "po-input"], [1, "po-datepicker-range-start-date"], ["maxlength", "10", "type", "text", 1, "po-datepicker-range-input", 3, "blur", "focus", "keydown", "keyup", "click", "autocomplete", "disabled", "name", "readonly"], [1, "po-datepicker-range-separator"], [1, "po-datepicker-range-end-date"], [1, "po-datepicker-range-icon"], ["class", "po-icon-input", 3, "p-change-event", 4, "ngIf"], [3, "click", "p-icon"], [3, "p-help", "p-disabled", "p-error-pattern"], [4, "ngIf"], [1, "po-icon-input", 3, "p-change-event"], [1, "po-calendar-range-picker"], ["p-mode", "range", 3, "ngModelChange", "ngModel", "p-max-date", "p-min-date", "p-locale"]], template: function PoDatepickerRangeComponent_Template(rf, ctx) { if (rf & 1) {
478
478
  const _r1 = i0.ɵɵgetCurrentView();
479
- i0.ɵɵelementStart(0, "po-field-container", 5)(1, "div", 6, 0)(3, "div", 7)(4, "input", 8, 1);
480
- i0.ɵɵlistener("blur", function PoDatepickerRangeComponent_Template_input_blur_4_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onBlur($event)); })("focus", function PoDatepickerRangeComponent_Template_input_focus_4_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onFocus($event)); })("keydown", function PoDatepickerRangeComponent_Template_input_keydown_4_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeydown($event)); })("keyup", function PoDatepickerRangeComponent_Template_input_keyup_4_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeyup($event)); })("click", function PoDatepickerRangeComponent_Template_input_click_4_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.eventOnClick($event)); });
479
+ i0.ɵɵelementStart(0, "po-field-container", 5)(1, "div", 6)(2, "div", 7)(3, "div", 8, 0)(5, "div", 9)(6, "input", 10, 1);
480
+ i0.ɵɵlistener("blur", function PoDatepickerRangeComponent_Template_input_blur_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onBlur($event)); })("focus", function PoDatepickerRangeComponent_Template_input_focus_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onFocus($event)); })("keydown", function PoDatepickerRangeComponent_Template_input_keydown_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeydown($event)); })("keyup", function PoDatepickerRangeComponent_Template_input_keyup_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeyup($event)); })("click", function PoDatepickerRangeComponent_Template_input_click_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.eventOnClick($event)); });
481
481
  i0.ɵɵelementEnd()();
482
- i0.ɵɵelementStart(6, "div", 9);
483
- i0.ɵɵtext(7, "-");
482
+ i0.ɵɵelementStart(8, "div", 11);
483
+ i0.ɵɵtext(9, "-");
484
484
  i0.ɵɵelementEnd();
485
- i0.ɵɵelementStart(8, "div", 10)(9, "input", 8, 2);
486
- i0.ɵɵlistener("blur", function PoDatepickerRangeComponent_Template_input_blur_9_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onBlur($event)); })("focus", function PoDatepickerRangeComponent_Template_input_focus_9_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onFocus($event)); })("keydown", function PoDatepickerRangeComponent_Template_input_keydown_9_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeydown($event)); })("keyup", function PoDatepickerRangeComponent_Template_input_keyup_9_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeyup($event)); })("click", function PoDatepickerRangeComponent_Template_input_click_9_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.eventOnClick($event)); });
485
+ i0.ɵɵelementStart(10, "div", 12)(11, "input", 10, 2);
486
+ i0.ɵɵlistener("blur", function PoDatepickerRangeComponent_Template_input_blur_11_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onBlur($event)); })("focus", function PoDatepickerRangeComponent_Template_input_focus_11_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onFocus($event)); })("keydown", function PoDatepickerRangeComponent_Template_input_keydown_11_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeydown($event)); })("keyup", function PoDatepickerRangeComponent_Template_input_keyup_11_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeyup($event)); })("click", function PoDatepickerRangeComponent_Template_input_click_11_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.eventOnClick($event)); });
487
487
  i0.ɵɵelementEnd()();
488
- i0.ɵɵelementStart(11, "div", 11);
489
- i0.ɵɵtemplate(12, PoDatepickerRangeComponent_po_clean_12_Template, 1, 0, "po-clean", 12);
488
+ i0.ɵɵelementStart(13, "div", 13);
489
+ i0.ɵɵtemplate(14, PoDatepickerRangeComponent_po_clean_14_Template, 1, 0, "po-clean", 14);
490
490
  i0.ɵɵelementEnd();
491
- i0.ɵɵelementStart(13, "div", 11)(14, "po-icon", 13, 3);
492
- i0.ɵɵlistener("click", function PoDatepickerRangeComponent_Template_po_icon_click_14_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.toggleCalendar()); });
493
- i0.ɵɵelementEnd()()();
494
- i0.ɵɵelement(16, "po-field-container-bottom", 14);
491
+ i0.ɵɵelementStart(15, "div", 13)(16, "po-icon", 15, 3);
492
+ i0.ɵɵlistener("click", function PoDatepickerRangeComponent_Template_po_icon_click_16_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.toggleCalendar()); });
493
+ i0.ɵɵelementEnd()()()()();
494
+ i0.ɵɵelement(18, "po-field-container-bottom", 16);
495
495
  i0.ɵɵelementEnd();
496
- i0.ɵɵtemplate(17, PoDatepickerRangeComponent_ng_container_17_Template, 4, 4, "ng-container", 15);
496
+ i0.ɵɵtemplate(19, PoDatepickerRangeComponent_ng_container_19_Template, 4, 4, "ng-container", 17);
497
497
  } if (rf & 2) {
498
498
  i0.ɵɵclassProp("po-date-picker-container-disabled", ctx.disabled);
499
499
  i0.ɵɵproperty("p-disabled", ctx.disabled)("p-label", ctx.label)("p-optional", ctx.optional)("p-required", ctx.required)("p-show-required", ctx.showRequired);
500
- i0.ɵɵadvance();
500
+ i0.ɵɵadvance(3);
501
501
  i0.ɵɵclassProp("po-datepicker-range-field-disabled", ctx.disabled);
502
502
  i0.ɵɵattribute("disabled", ctx.disabled);
503
503
  i0.ɵɵadvance(3);
@@ -519,7 +519,7 @@ export class PoDatepickerRangeComponent extends PoDatepickerRangeBaseComponent {
519
519
  }
520
520
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoDatepickerRangeComponent, [{
521
521
  type: Component,
522
- args: [{ selector: 'po-datepicker-range', providers: providers, changeDetection: ChangeDetectionStrategy.OnPush, template: "<po-field-container\n [class.po-date-picker-container-disabled]=\"disabled\"\n [p-disabled]=\"disabled\"\n [p-label]=\"label\"\n [p-optional]=\"optional\"\n [p-required]=\"required\"\n [p-show-required]=\"showRequired\"\n>\n <div\n #dateRangeField\n class=\"po-datepicker-range-field po-input\"\n [class.po-datepicker-range-field-disabled]=\"disabled\"\n [attr.disabled]=\"disabled\"\n >\n <div class=\"po-datepicker-range-start-date\">\n <input\n #startDateInput\n class=\"po-datepicker-range-input\"\n maxlength=\"10\"\n type=\"text\"\n [attr.aria-label]=\"label\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [name]=\"startDateInputName\"\n [readonly]=\"readonly\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\"\n (click)=\"eventOnClick($event)\"\n />\n </div>\n\n <div class=\"po-datepicker-range-separator\">-</div>\n\n <div class=\"po-datepicker-range-end-date\">\n <input\n #endDateInput\n class=\"po-datepicker-range-input\"\n maxlength=\"10\"\n type=\"text\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [name]=\"endDateInputName\"\n [readonly]=\"readonly\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\"\n (click)=\"eventOnClick($event)\"\n />\n </div>\n\n <div class=\"po-datepicker-range-icon\">\n <po-clean class=\"po-icon-input\" *ngIf=\"enableCleaner\" (p-change-event)=\"clear()\"></po-clean>\n </div>\n\n <div class=\"po-datepicker-range-icon\">\n <po-icon\n #iconCalendar\n [p-icon]=\"!disabled || !readonly ? 'ICON_CALENDAR po-clickable' : 'ICON_CALENDAR'\"\n class=\"po-field-icon {{ disabled ? 'po-icon-input-disabled' : 'po-icon-input' }}\"\n [class.po-field-icon-disabled]=\"disabled || readonly\"\n (click)=\"toggleCalendar()\"\n >\n </po-icon>\n </div>\n </div>\n\n <po-field-container-bottom\n [p-help]=\"help\"\n [p-disabled]=\"disabled\"\n [p-error-pattern]=\"getErrorMessage\"\n ></po-field-container-bottom>\n</po-field-container>\n\n<ng-container *ngIf=\"isCalendarVisible\">\n <div #calendarPicker class=\"po-calendar-range-picker\">\n <po-calendar\n p-mode=\"range\"\n [ngModel]=\"dateRange\"\n [p-max-date]=\"maxDate\"\n [p-min-date]=\"minDate\"\n [p-locale]=\"locale\"\n (ngModelChange)=\"onCalendarChange($event)\"\n ></po-calendar>\n </div>\n</ng-container>\n" }]
522
+ args: [{ selector: 'po-datepicker-range', providers: providers, changeDetection: ChangeDetectionStrategy.OnPush, template: "<po-field-container\n [class.po-date-picker-container-disabled]=\"disabled\"\n [p-disabled]=\"disabled\"\n [p-label]=\"label\"\n [p-optional]=\"optional\"\n [p-required]=\"required\"\n [p-show-required]=\"showRequired\"\n>\n <div class=\"po-field-container-content\">\n <div class=\"po-field-container-input\">\n <div\n #dateRangeField\n class=\"po-datepicker-range-field po-input\"\n [class.po-datepicker-range-field-disabled]=\"disabled\"\n [attr.disabled]=\"disabled\"\n >\n <div class=\"po-datepicker-range-start-date\">\n <input\n #startDateInput\n class=\"po-datepicker-range-input\"\n maxlength=\"10\"\n type=\"text\"\n [attr.aria-label]=\"label\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [name]=\"startDateInputName\"\n [readonly]=\"readonly\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\"\n (click)=\"eventOnClick($event)\"\n />\n </div>\n\n <div class=\"po-datepicker-range-separator\">-</div>\n\n <div class=\"po-datepicker-range-end-date\">\n <input\n #endDateInput\n class=\"po-datepicker-range-input\"\n maxlength=\"10\"\n type=\"text\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [name]=\"endDateInputName\"\n [readonly]=\"readonly\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\"\n (click)=\"eventOnClick($event)\"\n />\n </div>\n\n <div class=\"po-datepicker-range-icon\">\n <po-clean class=\"po-icon-input\" *ngIf=\"enableCleaner\" (p-change-event)=\"clear()\"></po-clean>\n </div>\n\n <div class=\"po-datepicker-range-icon\">\n <po-icon\n #iconCalendar\n [p-icon]=\"!disabled || !readonly ? 'ICON_CALENDAR po-clickable' : 'ICON_CALENDAR'\"\n class=\"po-field-icon {{ disabled ? 'po-icon-input-disabled' : 'po-icon-input' }}\"\n [class.po-field-icon-disabled]=\"disabled || readonly\"\n (click)=\"toggleCalendar()\"\n >\n </po-icon>\n </div>\n </div>\n </div>\n </div>\n\n <po-field-container-bottom\n [p-help]=\"help\"\n [p-disabled]=\"disabled\"\n [p-error-pattern]=\"getErrorMessage\"\n ></po-field-container-bottom>\n</po-field-container>\n\n<ng-container *ngIf=\"isCalendarVisible\">\n <div #calendarPicker class=\"po-calendar-range-picker\">\n <po-calendar\n p-mode=\"range\"\n [ngModel]=\"dateRange\"\n [p-max-date]=\"maxDate\"\n [p-min-date]=\"minDate\"\n [p-locale]=\"locale\"\n (ngModelChange)=\"onCalendarChange($event)\"\n ></po-calendar>\n </div>\n</ng-container>\n" }]
523
523
  }], () => [{ type: i0.ChangeDetectorRef }, { type: i1.PoControlPositionService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i2.PoLanguageService }, { type: i3.PoDateService }, { type: i0.ElementRef }], { dateRangeField: [{
524
524
  type: ViewChild,
525
525
  args: ['dateRangeField', { read: ElementRef, static: true }]
@@ -537,4 +537,4 @@ export class PoDatepickerRangeComponent extends PoDatepickerRangeBaseComponent {
537
537
  args: ['calendarPicker', { read: ElementRef }]
538
538
  }] }); })();
539
539
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PoDatepickerRangeComponent, { className: "PoDatepickerRangeComponent", filePath: "lib/components/po-field/po-datepicker-range/po-datepicker-range.component.ts", lineNumber: 82 }); })();
540
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGF0ZXBpY2tlci1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tZGF0ZXBpY2tlci1yYW5nZS9wby1kYXRlcGlja2VyLXJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1kYXRlcGlja2VyLXJhbmdlL3BvLWRhdGVwaWNrZXItcmFuZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUVWLFNBQVMsRUFNVCx1QkFBdUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBRy9HLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR3RGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDZ0N6RCxvQ0FBaUY7SUFBM0IsZ05BQWtCLGNBQU8sS0FBQztJQUFDLGlCQUFXOzs7O0lBc0JsRyw2QkFBd0M7SUFFcEMsQUFERixrQ0FBc0Qsc0JBUW5EO0lBREMsMk5BQWlCLCtCQUF3QixLQUFDO0lBRTlDLEFBREcsaUJBQWMsRUFDWDs7OztJQU5GLGVBQXFCO0lBR3JCLEFBREEsQUFEQSxBQURBLDBDQUFxQiw4QkFDQyw4QkFDQSwyQkFDSDs7QUQzRHpCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIsTUFB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QVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBQ1YsY0FBYztrQkFBaEUsU0FBUzttQkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7O2tGQVJ0QywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgUmVuZGVyZXIyLFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uQ2hhbmdlcyxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi8uLi9zZXJ2aWNlcy9wby1jb250cm9sLXBvc2l0aW9uL3BvLWNvbnRyb2wtcG9zaXRpb24uc2VydmljZSc7XG5cbmltcG9ydCB7IFBvRGF0ZXBpY2tlclJhbmdlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWRhdGVwaWNrZXItcmFuZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvRGF0ZXBpY2tlclJhbmdlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb0RhdGVTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi8uLi9zZXJ2aWNlcy9wby1kYXRlL3BvLWRhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcmVwbGFjZUZvcm1hdFNlcGFyYXRvciB9IGZyb20gJy4vLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5cbmNvbnN0IGFycm93TGVmdEtleSA9IDM3O1xuY29uc3QgYXJyb3dSaWdodEtleSA9IDM5O1xuY29uc3QgYmFja3NwYWNlS2V5ID0gODtcbmNvbnN0IHBvRGF0ZXBpY2tlclJhbmdlRGF0ZUxlbmd0aERlZmF1bHQgPSAxMDtcblxuY29uc3QgcG9DYWxlbmRhckNvbnRlbnRPZmZzZXQgPSA4O1xuY29uc3QgcG9DYWxlbmRhclBvc2l0aW9uRGVmYXVsdCA9ICdib3R0b20tbGVmdCc7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5jb25zdCBwcm92aWRlcnMgPSBbXG4gIHtcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbiAgfSxcbiAge1xuICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG4gIH0sXG4gIFBvQ29udHJvbFBvc2l0aW9uU2VydmljZVxuXTtcbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvRGF0ZXBpY2tlclJhbmdlQmFzZUNvbXBvbmVudFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWNcIiB0aXRsZT1cIlBPIERhdGVwaWNrZXIgUmFuZ2UgQmFzaWNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWMvc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNpYy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNpYy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kYXRlcGlja2VyLXJhbmdlLWxhYnNcIiB0aXRsZT1cIlBPIERhdGVwaWNrZXIgUmFuZ2UgTGFic1wiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWxhYnMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWxhYnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnNcIiB0aXRsZT1cIlBPIERhdGVwaWNrZXIgUmFuZ2UgLSBWYWNhdGlvbnMgU3VnZ2VzdGlvblwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMvc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtXCIgdGl0bGU9XCJQTyBEYXRlcGlja2VyIFJhbmdlIC0gVmFjYXRpb25zIFJlYWN0aXZlIEZvcm1cIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zLXJlYWN0aXZlLWZvcm0uY29tcG9uZW50Lmh0bWxcIj5cbiAqICA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC50c1wiPlxuICogIDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tZGF0ZXBpY2tlci1yYW5nZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wby1kYXRlcGlja2VyLXJhbmdlLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudFxuICBleHRlbmRzIFBvRGF0ZXBpY2tlclJhbmdlQmFzZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXNcbntcbiAgQFZpZXdDaGlsZCgnZGF0ZVJhbmdlRmllbGQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBkYXRlUmFuZ2VGaWVsZDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZW5kRGF0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgZW5kRGF0ZUlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzdGFydERhdGVJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHN0YXJ0RGF0ZUlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdpY29uQ2FsZW5kYXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpY29uQ2FsZW5kYXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyUGlja2VyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNhbGVuZGFyUGlja2VyOiBFbGVtZW50UmVmO1xuXG4gIGlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjbGlja0xpc3RlbmVyO1xuICBwcml2YXRlIGV2ZW50UmVzaXplTGlzdGVuZXI7XG4gIHByaXZhdGUgcG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50OiBFbGVtZW50UmVmPGFueT47XG5cbiAgZ2V0IGF1dG9jb21wbGV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub0F1dG9jb21wbGV0ZSA/ICdvZmYnIDogJ29uJztcbiAgfVxuXG4gIGdldCBlbmFibGVDbGVhbmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsZWFuICYmICh0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUgfHwgdGhpcy5lbmREYXRlSW5wdXRWYWx1ZSkgJiYgIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHk7XG4gIH1cblxuICBnZXQgZW5kRGF0ZUlucHV0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnZW5kLWRhdGUnO1xuICB9XG5cbiAgZ2V0IGVuZERhdGVJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZW5kRGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICBnZXQgZ2V0RXJyb3JNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZmllbGRFcnJvck1lc3NhZ2UgJiYgIXRoaXMuZXJyb3JNZXNzYWdlICYmIHRoaXMuaGFzSW52YWxpZENsYXNzKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpZWxkRXJyb3JNZXNzYWdlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lcnJvck1lc3NhZ2UgIT09ICcnICYmIHRoaXMuaGFzSW52YWxpZENsYXNzKCkgPyB0aGlzLmVycm9yTWVzc2FnZSA6ICcnO1xuICB9XG5cbiAgZ2V0IGlzRGF0ZVJhbmdlSW5wdXRVbmNvbXBsZXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5lbmREYXRlSW5wdXRWYWx1ZS5sZW5ndGggPCBwb0RhdGVwaWNrZXJSYW5nZURhdGVMZW5ndGhEZWZhdWx0ICYmXG4gICAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUubGVuZ3RoIDwgcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdFxuICAgICk7XG4gIH1cblxuICBnZXQgaXNEaXJ0eURhdGVSYW5nZUlucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuZERhdGVJbnB1dFZhbHVlLmxlbmd0aCA+IDAgfHwgdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXQgc3RhcnREYXRlSW5wdXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdzdGFydC1kYXRlJztcbiAgfVxuXG4gIGdldCBzdGFydERhdGVJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBjb250cm9sUG9zaXRpb246IFBvQ29udHJvbFBvc2l0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBwb0xhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2UsXG4gICAgcG9EYXRlU2VydmljZTogUG9EYXRlU2VydmljZSxcbiAgICBwb0RhdGVwaWNrZXJSYW5nZUVsZW1lbnQ6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgc3VwZXIoY2hhbmdlRGV0ZWN0b3IsIHBvRGF0ZVNlcnZpY2UsIHBvTGFuZ3VhZ2VTZXJ2aWNlKTtcbiAgICB0aGlzLnBvRGF0ZXBpY2tlclJhbmdlRWxlbWVudCA9IHBvRGF0ZXBpY2tlclJhbmdlRWxlbWVudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRLZXlDb2RlKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2g7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGFyZ2V0RWxlbWVudChldmVudDogYW55KSB7XG4gICAgcmV0dXJuIGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICB9XG5cbiAgc3RhdGljIGlzVmFsaWRLZXkoa2V5Q29kZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0ga2V5Q29kZSA+PSA0OCAmJiBrZXlDb2RlIDw9IDU3O1xuICAgIGNvbnN0IGlzTnVtZXJpY051bXBhZEtleSA9IGtleUNvZGUgPj0gOTYgJiYga2V5Q29kZSA8PSAxMDU7XG5cbiAgICByZXR1cm4gaXNOdW1lcmljS2V5IHx8IGlzTnVtZXJpY051bXBhZEtleTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBDbGFzc2UgZGUgbcOhc2NhcmFcbiAgICB0aGlzLnBvTWFza09iamVjdCA9IHRoaXMuYnVpbGRNYXNrKFxuICAgICAgcmVwbGFjZUZvcm1hdFNlcGFyYXRvcih0aGlzLmZvcm1hdCwgdGhpcy5wb0xhbmd1YWdlU2VydmljZS5nZXREYXRlU2VwYXJhdG9yKHRoaXMubG9jYWxlKSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLm1pbkRhdGUgfHwgY2hhbmdlcy5tYXhEYXRlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5sb2NhbGUpIHtcbiAgICAgIGlmICh0aGlzLmRhdGVSYW5nZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNjcmVlbkJ5TW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgfVxuICAgICAgdGhpcy5wb01hc2tPYmplY3QgPSB0aGlzLmJ1aWxkTWFzayhcbiAgICAgICAgcmVwbGFjZUZvcm1hdFNlcGFyYXRvcih0aGlzLmZvcm1hdCwgdGhpcy5wb0xhbmd1YWdlU2VydmljZS5nZXREYXRlU2VwYXJhdG9yKHRoaXMubG9jYWxlKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMucmVzZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oKTtcbiAgICB0aGlzLmRhdGVSYW5nZSA9IHsgc3RhcnQ6ICcnLCBlbmQ6ICcnIH07XG5cbiAgICB0aGlzLnVwZGF0ZVNjcmVlbkJ5TW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICB9XG5cbiAgZXZlbnRPbkNsaWNrKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5wb01hc2tPYmplY3QuY2xpY2soJGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW7Dp8OjbyBxdWUgYXRyaWJ1aSBmb2NvIGFvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIFBhcmEgdXRpbGl6w6EtbGEgw6kgbmVjZXNzw6FyaW8gdGVyIGEgaW5zdMOibmNpYSBkbyBjb21wb25lbnRlIG5vIERPTSwgcG9kZW5kbyBzZXIgdXRpbGl6YWRvIG8gVmlld0NoaWxkIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKlxuICAgKiBgYGBcbiAgICogaW1wb3J0IHsgUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQgfSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XG4gICAqXG4gICAqIC4uLlxuICAgKlxuICAgKiBAVmlld0NoaWxkKFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBkYXRlcGlja2VyUmFuZ2U6IFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50O1xuICAgKlxuICAgKiBmb2N1c0RhdGVwaWNrZXJSYW5nZSgpIHtcbiAgICogICB0aGlzLmRhdGVwaWNrZXJSYW5nZS5mb2N1cygpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBvbkJsdXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkTW9kZWw/LigpO1xuICAgIGNvbnN0IGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQgPSBldmVudC50YXJnZXQubmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWU7XG5cbiAgICB0aGlzLnVwZGF0ZU1vZGVsQnlTY3JlZW4oaXNTdGFydERhdGVUYXJnZXRFdmVudCk7XG5cbiAgICB0aGlzLnJlbW92ZUZvY3VzRnJvbURhdGVQaWNrZXJSYW5nZUZpZWxkKCk7XG4gIH1cblxuICBvbkNhbGVuZGFyQ2hhbmdlKHsgc3RhcnQsIGVuZCB9KSB7XG4gICAgY29uc3QgaXNTdGFydERhdGVUYXJnZXRFdmVudCA9IHN0YXJ0ICYmICFlbmQ7XG5cbiAgICB0aGlzLnVwZGF0ZVNjcmVlbkJ5TW9kZWwoeyBzdGFydDogc3RhcnQgfHwgJycsIGVuZDogZW5kIHx8ICcnIH0pO1xuICAgIHRoaXMudXBkYXRlTW9kZWxCeVNjcmVlbihpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50LCBzdGFydCB8fCAnJywgZW5kIHx8ICcnKTtcblxuICAgIGlmIChzdGFydCAmJiBlbmQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LCAzMDApO1xuICAgIH1cbiAgfVxuXG4gIG9uRm9jdXMoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuYXBwbHlGb2N1c09uRGF0ZVBpY2tlclJhbmdlRmllbGQoKTtcbiAgICB0aGlzLnBvTWFza09iamVjdC5yZXNldFBvc2l0aW9ucyhldmVudCk7XG4gIH1cblxuICBvbktleWRvd24oZXZlbnQ/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2V0Rm9jdXNPbkJhY2tzcGFjZShldmVudCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnNldEZvY3VzT25CYWNrc3BhY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb01hc2tPYmplY3Qua2V5ZG93bihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgb25LZXl1cChldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50ID0gZXZlbnQudGFyZ2V0Lm5hbWUgPT09IHRoaXMuc3RhcnREYXRlSW5wdXROYW1lO1xuXG4gICAgdGhpcy5zZXRGb2N1cyhldmVudCk7XG4gICAgdGhpcy5wb01hc2tPYmplY3Qua2V5dXAoZXZlbnQpO1xuICAgIHRoaXMudXBkYXRlTW9kZWxXaGVuQ29tcGxldGUoaXNTdGFydERhdGVUYXJnZXRFdmVudCwgdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLCB0aGlzLmVuZERhdGVJbnB1dFZhbHVlKTtcbiAgfVxuXG4gIHJlc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKCkge1xuICAgIHRoaXMuaXNTdGFydERhdGVSYW5nZUlucHV0VmFsaWQgPSB0cnVlO1xuICAgIHRoaXMuaXNEYXRlUmFuZ2VJbnB1dEZvcm1hdFZhbGlkID0gdHJ1ZTtcbiAgfVxuXG4gIHRvZ2dsZUNhbGVuZGFyKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlID0gIXRoaXMuaXNDYWxlbmRhclZpc2libGU7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBpZiAodGhpcy5pc0NhbGVuZGFyVmlzaWJsZSkge1xuICAgICAgdGhpcy5zZXRDYWxlbmRhclBvc2l0aW9uKCk7XG4gICAgICB0aGlzLmluaXRpYWxpemVMaXN0ZW5lcnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVTY3JlZW5CeU1vZGVsKG1vZGVsOiBQb0RhdGVwaWNrZXJSYW5nZSkge1xuICAgIGNvbnN0IGRhdGVSYW5nZSA9IHsgc3RhcnQ6IG1vZGVsLnN0YXJ0IGFzIHN0cmluZywgZW5kOiBtb2RlbC5lbmQgYXMgc3RyaW5nIH07XG4gICAgY29uc3QgaXNTdGFydERhdGVWYWxpZCA9IHRoaXMucG9EYXRlU2VydmljZS5pc0RhdGVSYW5nZVZhbGlkKGRhdGVSYW5nZS5lbmQsIGRhdGVSYW5nZS5zdGFydCk7XG4gICAgY29uc3QgaXNEYXRlVmFsaWQgPSBkYXRlID0+ICF0aGlzLmRhdGVGb3JtYXRGYWlsZWQoZGF0ZSkgJiYgaXNTdGFydERhdGVWYWxpZDtcblxuICAgIGNvbnN0IGVuZERhdGVGb3JtYXRlZCA9IGlzRGF0ZVZhbGlkKGRhdGVSYW5nZS5lbmQpID8gdGhpcy5mb3JtYXRNb2RlbFRvU2NyZWVuKGRhdGVSYW5nZS5lbmQpIDogJyc7XG4gICAgY29uc3Qgc3RhcnREYXRlRm9ybWF0ZWQgPSBpc0RhdGVWYWxpZChkYXRlUmFuZ2Uuc3RhcnQpID8gdGhpcy5mb3JtYXRNb2RlbFRvU2NyZWVuKGRhdGVSYW5nZS5zdGFydCkgOiAnJztcblxuICAgIHRoaXMuZW5kRGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBlbmREYXRlRm9ybWF0ZWQ7XG4gICAgdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gc3RhcnREYXRlRm9ybWF0ZWQ7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Rm9jdXNPbkRhdGVQaWNrZXJSYW5nZUZpZWxkKCkge1xuICAgIHRoaXMuZGF0ZVJhbmdlRmllbGQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdwby1kYXRlcGlja2VyLXJhbmdlLWZpZWxkLWZvY3VzZWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RGF0ZShmb3JtYXQ6IHN0cmluZywgZGF5OiBzdHJpbmcgPSAnJywgbW9udGg6IHN0cmluZyA9ICcnLCB5ZWFyOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgbGV0IGRhdGVGb3JtYXR0ZWQgPSByZXBsYWNlRm9ybWF0U2VwYXJhdG9yKFxuICAgICAgZm9ybWF0IHx8IHRoaXMuZm9ybWF0LFxuICAgICAgdGhpcy5wb0xhbmd1YWdlU2VydmljZS5nZXREYXRlU2VwYXJhdG9yKHRoaXMubG9jYWxlKVxuICAgICk7XG5cbiAgICBkYXkgPSBkYXkgJiYgZGF5LmluY2x1ZGVzKCdUJykgPyBkYXkuc2xpY2UoMCwgMikgOiBkYXk7XG5cbiAgICBkYXRlRm9ybWF0dGVkID0gZGF0ZUZvcm1hdHRlZC5yZXBsYWNlKCdkZCcsICgnMCcgKyBkYXkpLnNsaWNlKC0yKSk7XG4gICAgZGF0ZUZvcm1hdHRlZCA9IGRhdGVGb3JtYXR0ZWQucmVwbGFjZSgnbW0nLCAoJzAnICsgbW9udGgpLnNsaWNlKC0yKSk7XG4gICAgZGF0ZUZvcm1hdHRlZCA9IGRhdGVGb3JtYXR0ZWQucmVwbGFjZSgneXl5eScsIFN0cmluZyh5ZWFyKSk7XG5cbiAgICByZXR1cm4gZGF0ZUZvcm1hdHRlZDtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0U2NyZWVuVG9Nb2RlbCh2YWx1ZTogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHZhbHVlLnNwbGl0KHRoaXMucG9MYW5ndWFnZVNlcnZpY2UuZ2V0RGF0ZVNlcGFyYXRvcih0aGlzLmxvY2FsZSkpO1xuXG4gICAgcmV0dXJuIHZhbHVlID8gdGhpcy5mb3JtYXREYXRlKCd5eXl5LW1tLWRkJywgZGF5LCBtb250aCwgeWVhcikgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TW9kZWxUb1NjcmVlbih2YWx1ZTogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IHZhbHVlLnNwbGl0KCctJyk7XG5cbiAgICByZXR1cm4gdmFsdWUgPyB0aGlzLmZvcm1hdERhdGUodGhpcy5mb3JtYXQsIGRheSwgbW9udGgsIHllYXIpIDogJyc7XG4gIH1cblxuICBwcml2YXRlIGdldERhdGVSYW5nZUZvcm1hdFZhbGlkYXRpb24oXG4gICAgc3RhcnREYXRlOiBzdHJpbmcsXG4gICAgZW5kRGF0ZTogc3RyaW5nLFxuICAgIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQ6IGJvb2xlYW5cbiAgKTogeyBpc1ZhbGlkOiBib29sZWFuOyBkYXRlUmFuZ2VNb2RlbDogUG9EYXRlcGlja2VyUmFuZ2UgfSB7XG4gICAgdGhpcy5zZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oc3RhcnREYXRlLCBlbmREYXRlKTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDpcbiAgICAgICAgdGhpcy5pc0RhdGVSYW5nZUlucHV0Rm9ybWF0VmFsaWQgJiYgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCAmJiB0aGlzLnZlcmlmeVZhbGlkRGF0ZShzdGFydERhdGUsIGVuZERhdGUpLFxuICAgICAgZGF0ZVJhbmdlTW9kZWw6IHRoaXMuZ2V0VmFsaWRhdGVkTW9kZWwoc3RhcnREYXRlLCBlbmREYXRlLCBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldFZhbGlkYXRlZE1vZGVsKHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcsIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQ6IGJvb2xlYW4pOiBQb0RhdGVwaWNrZXJSYW5nZSB7XG4gICAgY29uc3QgZGF0ZVJhbmdlTW9kZWwgPSB7IHN0YXJ0OiAnJywgZW5kOiAnJyB9O1xuXG4gICAgZGF0ZVJhbmdlTW9kZWwuZW5kID1cbiAgICAgIChpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50IHx8IHRoaXMuaXNTdGFydERhdGVSYW5nZUlucHV0VmFsaWQpICYmICF0aGlzLmRhdGVGb3JtYXRGYWlsZWQoZW5kRGF0ZSkgPyBlbmREYXRlIDogJyc7XG5cbiAgICBkYXRlUmFuZ2VNb2RlbC5zdGFydCA9XG4gICAgICAoIWlzU3RhcnREYXRlVGFyZ2V0RXZlbnQgfHwgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCkgJiYgIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChzdGFydERhdGUpXG4gICAgICAgID8gc3RhcnREYXRlXG4gICAgICAgIDogJyc7XG5cbiAgICByZXR1cm4gZGF0ZVJhbmdlTW9kZWw7XG4gIH1cblxuICBwcml2YXRlIGhhc0F0dHJDYWxlbmRhcihlbGVtZW50KSB7XG4gICAgY29uc3QgYXR0ckNhbGVuZGFyID0gJ2F0dHItY2FsZW5kYXInO1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ/Lmhhc0F0dHJpYnV0ZShhdHRyQ2FsZW5kYXIpIHx8IGVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/Lmhhc0F0dHJpYnV0ZShhdHRyQ2FsZW5kYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNJbnZhbGlkQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1pbnZhbGlkJykgJiZcbiAgICAgIHRoaXMucG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1kaXJ0eScpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUxpc3RlbmVycygpIHtcbiAgICB0aGlzLmNsaWNrTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnY2xpY2snLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIHRoaXMud2FzQ2xpY2tlZE9uUGlja2VyKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAncmVzaXplJywgKCkgPT4ge1xuICAgICAgdGhpcy5pc0NhbGVuZGFyVmlzaWJsZSA9IGZhbHNlO1xuICAgIH0pO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VxdWFsQmVmb3JlVmFsdWUoc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZCAmJiBlbmREYXRlID09PSB0aGlzLmRhdGVSYW5nZS5lbmQgJiYgc3RhcnREYXRlID09PSB0aGlzLmRhdGVSYW5nZS5zdGFydDtcbiAgfVxuXG4gIHByaXZhdGUgaXNTZXRGb2N1c09uQmFja3NwYWNlKGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgZXZlbnQudGFyZ2V0Lm5hbWUgPT09IHRoaXMuZW5kRGF0ZUlucHV0TmFtZSAmJlxuICAgICAgdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQgPT09IDAgJiZcbiAgICAgIGV2ZW50LmtleUNvZGUgPT09IGJhY2tzcGFjZUtleVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uU2Nyb2xsID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlKSB7XG4gICAgICB0aGlzLmNvbnRyb2xQb3NpdGlvbi5hZGp1c3RQb3NpdGlvbihwb0NhbGVuZGFyUG9zaXRpb25EZWZhdWx0KTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSByZW1vdmVGb2N1c0Zyb21EYXRlUGlja2VyUmFuZ2VGaWVsZCgpIHtcbiAgICB0aGlzLmRhdGVSYW5nZUZpZWxkLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgncG8tZGF0ZXBpY2tlci1yYW5nZS1maWVsZC1mb2N1c2VkJyk7XG4gIH1cblxuICBwcml2YXRlIHNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbihzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCA9IHRoaXMucG9EYXRlU2VydmljZS5pc0RhdGVSYW5nZVZhbGlkKGVuZERhdGUsIHN0YXJ0RGF0ZSk7XG5cbiAgICB0aGlzLmlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZCA9ICF0aGlzLmRhdGVGb3JtYXRGYWlsZWQoc3RhcnREYXRlKSAmJiAhdGhpcy5kYXRlRm9ybWF0RmFpbGVkKGVuZERhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1cyhldmVudDogYW55KSB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQuZ2V0VGFyZ2V0RWxlbWVudChldmVudCk7XG4gICAgY29uc3Qga2V5Q29kZSA9IFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50LmdldEtleUNvZGUoZXZlbnQpO1xuICAgIGNvbnN0IGlucHV0TmFtZSA9IGlucHV0RWxlbWVudFsnbmFtZSddO1xuXG4gICAgdGhpcy5zZXRGb2N1c09uQXJyb3dMZWZ0KGtleUNvZGUsIGlucHV0TmFtZSk7XG4gICAgdGhpcy5zZXRGb2N1c09uQXJyb3dSaWdodChrZXlDb2RlLCBpbnB1dE5hbWUsIGlucHV0RWxlbWVudCk7XG4gICAgdGhpcy5zZXRGb2N1c09uU3RhcnREYXRlQ29tcGxldGVkKGtleUNvZGUsIGlucHV0TmFtZSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzQW5kUG9zaXRpb24ocG9zaXRpb246IG51bWJlciwgaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmLCBzZWxlY3Rpb25SYW5nZTogbnVtYmVyKSB7XG4gICAgdGhpcy5mb2N1c09uRWxlbWVudChpbnB1dEVsZW1lbnQpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25SYW5nZSwgc2VsZWN0aW9uUmFuZ2UpO1xuICAgICAgdGhpcy5wb01hc2tPYmplY3QuaW5pdGlhbFBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICB0aGlzLnBvTWFza09iamVjdC5maW5hbFBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzT25FbGVtZW50KGlucHV0RWxlbWVudDogRWxlbWVudFJlZikge1xuICAgIGlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUxpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5jbGlja0xpc3RlbmVyKSB7XG4gICAgICB0aGlzLmNsaWNrTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyKSB7XG4gICAgICB0aGlzLmV2ZW50UmVzaXplTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHNldENhbGVuZGFyUG9zaXRpb24oKSB7XG4gICAgdGhpcy5jb250cm9sUG9zaXRpb24uc2V0RWxlbWVudHMoXG4gICAgICB0aGlzLmNhbGVuZGFyUGlja2VyLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBwb0NhbGVuZGFyQ29udGVudE9mZnNldCxcbiAgICAgIHRoaXMuZGF0ZVJhbmdlRmllbGQsXG4gICAgICBbJ2JvdHRvbS1sZWZ0JywgJ2JvdHRvbS1yaWdodCcsICd0b3AtbGVmdCcsICd0b3AtcmlnaHQnXSxcbiAgICAgIGZhbHNlLFxuICAgICAgdHJ1ZVxuICAgICk7XG5cbiAgICB0aGlzLmNvbnRyb2xQb3NpdGlvbi5hZGp1c3RQb3NpdGlvbihwb0NhbGVuZGFyUG9zaXRpb25EZWZhdWx0KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNPbkFycm93TGVmdChrZXlDb2RlOiBudW1iZXIsIGlucHV0TmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNDdXJzb3JBdFN0YXJ0T2ZJbnB1dCA9IHRoaXMuZW5kRGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDA7XG5cbiAgICBpZiAoaW5wdXROYW1lID09PSB0aGlzLmVuZERhdGVJbnB1dE5hbWUgJiYgaXNDdXJzb3JBdFN0YXJ0T2ZJbnB1dCAmJiBrZXlDb2RlID09PSBhcnJvd0xlZnRLZXkpIHtcbiAgICAgIGNvbnN0IGlucHV0TGVuZ3RoID0gdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLmxlbmd0aDtcbiAgICAgIHRoaXMuc2V0Rm9jdXNBbmRQb3NpdGlvbihpbnB1dExlbmd0aCwgdGhpcy5zdGFydERhdGVJbnB1dCwgaW5wdXRMZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNPbkFycm93UmlnaHQoa2V5Q29kZTogbnVtYmVyLCBpbnB1dE5hbWU6IHN0cmluZywgaW5wdXRFbGVtZW50OiBhbnkpIHtcbiAgICBjb25zdCBpc0N1cnNvckF0RW5kT2ZJbnB1dCA9IHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gaW5wdXRFbGVtZW50LnZhbHVlLmxlbmd0aDtcblxuICAgIGlmIChpbnB1dE5hbWUgPT09IHRoaXMuc3RhcnREYXRlSW5wdXROYW1lICYmIGlzQ3Vyc29yQXRFbmRPZklucHV0ICYmIGtleUNvZGUgPT09IGFycm93UmlnaHRLZXkpIHtcbiAgICAgIHRoaXMuc2V0Rm9jdXNBbmRQb3NpdGlvbigwLCB0aGlzLmVuZERhdGVJbnB1dCwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c09uQmFja3NwYWNlKCkge1xuICAgIGNvbnN0IGlucHV0TGVuZ3RoID0gdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLmxlbmd0aDtcblxuICAgIHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuc3RhcnREYXRlSW5wdXRWYWx1ZS5zbGljZSgwLCAtMSk7XG4gICAgdGhpcy5zZXRGb2N1c0FuZFBvc2l0aW9uKGlucHV0TGVuZ3RoLCB0aGlzLnN0YXJ0RGF0ZUlucHV0LCBpbnB1dExlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzT25TdGFydERhdGVDb21wbGV0ZWQoa2V5Q29kZTogbnVtYmVyLCBpbnB1dE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGlzTGFzdEtleVByZXNzZWQgPSB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IHBvRGF0ZXBpY2tlclJhbmdlRGF0ZUxlbmd0aERlZmF1bHQ7XG4gICAgY29uc3QgaXNOZXdEYXRlQ29tcGxldGVkID1cbiAgICAgIHRoaXMuc3RhcnREYXRlSW5wdXRWYWx1ZS5sZW5ndGggPT09IHBvRGF0ZXBpY2tlclJhbmdlRGF0ZUxlbmd0aERlZmF1bHQgJiYgaXNMYXN0S2V5UHJlc3NlZDtcbiAgICBjb25zdCBpc1ZhbGlkS2V5ID0gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQuaXNWYWxpZEtleShrZXlDb2RlKTtcblxuICAgIGlmIChpbnB1dE5hbWUgPT09IHRoaXMuc3RhcnREYXRlSW5wdXROYW1lICYmIGlzTmV3RGF0ZUNvbXBsZXRlZCAmJiBpc1ZhbGlkS2V5KSB7XG4gICAgICB0aGlzLnNldEZvY3VzQW5kUG9zaXRpb24oMCwgdGhpcy5lbmREYXRlSW5wdXQsIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTW9kZWxXaGVuQ29tcGxldGUoaXNTdGFydERhdGVUYXJnZXRFdmVudDogYm9vbGVhbiwgc3RhcnREYXRlLCBlbmREYXRlKSB7XG4gICAgY29uc3QgZW5kRGF0ZUZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U2NyZWVuVG9Nb2RlbChlbmREYXRlKTtcbiAgICBjb25zdCBzdGFydERhdGVGb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFNjcmVlblRvTW9kZWwoc3RhcnREYXRlKTtcbiAgICBjb25zdCBkYXRlRm9ybWF0VmFsaWRhdGlvbiA9IHRoaXMuZ2V0RGF0ZVJhbmdlRm9ybWF0VmFsaWRhdGlvbihcbiAgICAgIHN0YXJ0RGF0ZUZvcm1hdHRlZCxcbiAgICAgIGVuZERhdGVGb3JtYXR0ZWQsXG4gICAgICBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50XG4gICAgKTtcblxuICAgIGlmICh0aGlzLmlzRXF1YWxCZWZvcmVWYWx1ZShzdGFydERhdGVGb3JtYXR0ZWQsIGVuZERhdGVGb3JtYXR0ZWQpKSB7XG4gICAgICB0aGlzLnJlc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKCk7XG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0VmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IHsgc3RhcnQ6IHN0YXJ0RGF0ZUZvcm1hdHRlZCwgZW5kOiBlbmREYXRlRm9ybWF0dGVkIH07XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh7IC4uLnRoaXMuZGF0ZVJhbmdlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTW9kZWxCeVNjcmVlbihpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50OiBib29sZWFuLCBzdGFydERhdGU/LCBlbmREYXRlPykge1xuICAgIGNvbnN0IGVuZERhdGVGb3JtYXR0ZWQgPSBlbmREYXRlIHx8IHRoaXMuZm9ybWF0U2NyZWVuVG9Nb2RlbCh0aGlzLmVuZERhdGVJbnB1dFZhbHVlKTtcbiAgICBjb25zdCBzdGFydERhdGVGb3JtYXR0ZWQgPSBzdGFydERhdGUgfHwgdGhpcy5mb3JtYXRTY3JlZW5Ub01vZGVsKHRoaXMuc3RhcnREYXRlSW5wdXRWYWx1ZSk7XG4gICAgaWYgKHRoaXMuaXNEYXRlUmFuZ2VJbnB1dFVuY29tcGxldGVkICYmIHRoaXMuaXNEaXJ0eURhdGVSYW5nZUlucHV0KSB7XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0VxdWFsQmVmb3JlVmFsdWUoc3RhcnREYXRlRm9ybWF0dGVkLCBlbmREYXRlRm9ybWF0dGVkKSkge1xuICAgICAgdGhpcy5yZXNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbigpO1xuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlRm9ybWF0VmFsaWRhdGlvbiA9IHRoaXMuZ2V0RGF0ZVJhbmdlRm9ybWF0VmFsaWRhdGlvbihcbiAgICAgIHN0YXJ0RGF0ZUZvcm1hdHRlZCxcbiAgICAgIGVuZERhdGVGb3JtYXR0ZWQsXG4gICAgICBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50XG4gICAgKTtcblxuICAgIGlmIChkYXRlRm9ybWF0VmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IHsgc3RhcnQ6IHN0YXJ0RGF0ZUZvcm1hdHRlZCwgZW5kOiBlbmREYXRlRm9ybWF0dGVkIH07XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh7IC4uLnRoaXMuZGF0ZVJhbmdlIH0pO1xuICAgIH1cblxuICAgIGlmICghZGF0ZUZvcm1hdFZhbGlkYXRpb24uaXNWYWxpZCAmJiB0aGlzLnZlcmlmeUZvcm1hdHRlZERhdGVzKHN0YXJ0RGF0ZUZvcm1hdHRlZCwgZW5kRGF0ZUZvcm1hdHRlZCkpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0geyAuLi5kYXRlRm9ybWF0VmFsaWRhdGlvbi5kYXRlUmFuZ2VNb2RlbCB9O1xuICAgICAgdGhpcy51cGRhdGVNb2RlbChkYXRlRm9ybWF0VmFsaWRhdGlvbi5kYXRlUmFuZ2VNb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlGb3JtYXR0ZWREYXRlcyhzdGFydDogc3RyaW5nLCBlbmQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXN0YXJ0IHx8ICEhZW5kO1xuICB9XG5cbiAgcHJpdmF0ZSB3YXNDbGlja2VkT25QaWNrZXIoZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNDYWxlbmRhclZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5jYWxlbmRhclBpY2tlci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICF0aGlzLmljb25DYWxlbmRhci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICF0aGlzLmhhc0F0dHJDYWxlbmRhcihldmVudC50YXJnZXQpXG4gICAgKSB7XG4gICAgICB0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxwby1maWVsZC1jb250YWluZXJcbiAgW2NsYXNzLnBvLWRhdGUtcGlja2VyLWNvbnRhaW5lci1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFtwLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW3AtbGFiZWxdPVwibGFiZWxcIlxuICBbcC1vcHRpb25hbF09XCJvcHRpb25hbFwiXG4gIFtwLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgW3Atc2hvdy1yZXF1aXJlZF09XCJzaG93UmVxdWlyZWRcIlxuPlxuICA8ZGl2XG4gICAgI2RhdGVSYW5nZUZpZWxkXG4gICAgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWZpZWxkIHBvLWlucHV0XCJcbiAgICBbY2xhc3MucG8tZGF0ZXBpY2tlci1yYW5nZS1maWVsZC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2Utc3RhcnQtZGF0ZVwiPlxuICAgICAgPGlucHV0XG4gICAgICAgICNzdGFydERhdGVJbnB1dFxuICAgICAgICBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtaW5wdXRcIlxuICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiXG4gICAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW25hbWVdPVwic3RhcnREYXRlSW5wdXROYW1lXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIlxuICAgICAgICAoa2V5dXApPVwib25LZXl1cCgkZXZlbnQpXCJcbiAgICAgICAgKGNsaWNrKT1cImV2ZW50T25DbGljaygkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1zZXBhcmF0b3JcIj4tPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1lbmQtZGF0ZVwiPlxuICAgICAgPGlucHV0XG4gICAgICAgICNlbmREYXRlSW5wdXRcbiAgICAgICAgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWlucHV0XCJcbiAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW25hbWVdPVwiZW5kRGF0ZUlucHV0TmFtZVwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgKGtleXVwKT1cIm9uS2V5dXAoJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJldmVudE9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtaWNvblwiPlxuICAgICAgPHBvLWNsZWFuIGNsYXNzPVwicG8taWNvbi1pbnB1dFwiICpuZ0lmPVwiZW5hYmxlQ2xlYW5lclwiIChwLWNoYW5nZS1ldmVudCk9XCJjbGVhcigpXCI+PC9wby1jbGVhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWljb25cIj5cbiAgICAgIDxwby1pY29uXG4gICAgICAgICNpY29uQ2FsZW5kYXJcbiAgICAgICAgW3AtaWNvbl09XCIhZGlzYWJsZWQgfHwgIXJlYWRvbmx5ID8gJ0lDT05fQ0FMRU5EQVIgcG8tY2xpY2thYmxlJyA6ICdJQ09OX0NBTEVOREFSJ1wiXG4gICAgICAgIGNsYXNzPVwicG8tZmllbGQtaWNvbiB7eyBkaXNhYmxlZCA/ICdwby1pY29uLWlucHV0LWRpc2FibGVkJyA6ICdwby1pY29uLWlucHV0JyB9fVwiXG4gICAgICAgIFtjbGFzcy5wby1maWVsZC1pY29uLWRpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNhbGVuZGFyKClcIlxuICAgICAgPlxuICAgICAgPC9wby1pY29uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8cG8tZmllbGQtY29udGFpbmVyLWJvdHRvbVxuICAgIFtwLWhlbHBdPVwiaGVscFwiXG4gICAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtwLWVycm9yLXBhdHRlcm5dPVwiZ2V0RXJyb3JNZXNzYWdlXCJcbiAgPjwvcG8tZmllbGQtY29udGFpbmVyLWJvdHRvbT5cbjwvcG8tZmllbGQtY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiaXNDYWxlbmRhclZpc2libGVcIj5cbiAgPGRpdiAjY2FsZW5kYXJQaWNrZXIgY2xhc3M9XCJwby1jYWxlbmRhci1yYW5nZS1waWNrZXJcIj5cbiAgICA8cG8tY2FsZW5kYXJcbiAgICAgIHAtbW9kZT1cInJhbmdlXCJcbiAgICAgIFtuZ01vZGVsXT1cImRhdGVSYW5nZVwiXG4gICAgICBbcC1tYXgtZGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgIFtwLW1pbi1kYXRlXT1cIm1pbkRhdGVcIlxuICAgICAgW3AtbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNhbGVuZGFyQ2hhbmdlKCRldmVudClcIlxuICAgID48L3BvLWNhbGVuZGFyPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
540
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGF0ZXBpY2tlci1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tZGF0ZXBpY2tlci1yYW5nZS9wby1kYXRlcGlja2VyLXJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1kYXRlcGlja2VyLXJhbmdlL3BvLWRhdGVwaWNrZXItcmFuZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUVWLFNBQVMsRUFNVCx1QkFBdUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBRy9HLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBR3RGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDa0NyRCxvQ0FBaUY7SUFBM0IsZ05BQWtCLGNBQU8sS0FBQztJQUFDLGlCQUFXOzs7O0lBd0J0Ryw2QkFBd0M7SUFFcEMsQUFERixrQ0FBc0Qsc0JBUW5EO0lBREMsMk5BQWlCLCtCQUF3QixLQUFDO0lBRTlDLEFBREcsaUJBQWMsRUFDWDs7OztJQU5GLGVBQXFCO0lBR3JCLEFBREEsQUFEQSxBQURBLDBDQUFxQiw4QkFDQyw4QkFDQSwyQkFDSDs7QUQvRHpCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIsTUFB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QTFFLFNBQVM7bUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBQ1YsY0FBYztrQkFBaEUsU0FBUzttQkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7O2tGQVJ0QywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgUmVuZGVyZXIyLFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uQ2hhbmdlcyxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi8uLi9zZXJ2aWNlcy9wby1jb250cm9sLXBvc2l0aW9uL3BvLWNvbnRyb2wtcG9zaXRpb24uc2VydmljZSc7XG5cbmltcG9ydCB7IFBvRGF0ZXBpY2tlclJhbmdlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWRhdGVwaWNrZXItcmFuZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvRGF0ZXBpY2tlclJhbmdlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb0RhdGVTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi8uLi9zZXJ2aWNlcy9wby1kYXRlL3BvLWRhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcmVwbGFjZUZvcm1hdFNlcGFyYXRvciB9IGZyb20gJy4vLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5cbmNvbnN0IGFycm93TGVmdEtleSA9IDM3O1xuY29uc3QgYXJyb3dSaWdodEtleSA9IDM5O1xuY29uc3QgYmFja3NwYWNlS2V5ID0gODtcbmNvbnN0IHBvRGF0ZXBpY2tlclJhbmdlRGF0ZUxlbmd0aERlZmF1bHQgPSAxMDtcblxuY29uc3QgcG9DYWxlbmRhckNvbnRlbnRPZmZzZXQgPSA4O1xuY29uc3QgcG9DYWxlbmRhclBvc2l0aW9uRGVmYXVsdCA9ICdib3R0b20tbGVmdCc7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5jb25zdCBwcm92aWRlcnMgPSBbXG4gIHtcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbiAgfSxcbiAge1xuICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG4gIH0sXG4gIFBvQ29udHJvbFBvc2l0aW9uU2VydmljZVxuXTtcbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvRGF0ZXBpY2tlclJhbmdlQmFzZUNvbXBvbmVudFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWNcIiB0aXRsZT1cIlBPIERhdGVwaWNrZXIgUmFuZ2UgQmFzaWNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWMvc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNpYy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1iYXNpYy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kYXRlcGlja2VyLXJhbmdlLWxhYnNcIiB0aXRsZT1cIlBPIERhdGVwaWNrZXIgUmFuZ2UgTGFic1wiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWxhYnMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWxhYnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnNcIiB0aXRsZT1cIlBPIERhdGVwaWNrZXIgUmFuZ2UgLSBWYWNhdGlvbnMgU3VnZ2VzdGlvblwiPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMvc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtXCIgdGl0bGU9XCJQTyBEYXRlcGlja2VyIFJhbmdlIC0gVmFjYXRpb25zIFJlYWN0aXZlIEZvcm1cIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zLXJlYWN0aXZlLWZvcm0uY29tcG9uZW50Lmh0bWxcIj5cbiAqICA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC50c1wiPlxuICogIDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tZGF0ZXBpY2tlci1yYW5nZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wby1kYXRlcGlja2VyLXJhbmdlLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudFxuICBleHRlbmRzIFBvRGF0ZXBpY2tlclJhbmdlQmFzZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXNcbntcbiAgQFZpZXdDaGlsZCgnZGF0ZVJhbmdlRmllbGQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBkYXRlUmFuZ2VGaWVsZDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZW5kRGF0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgZW5kRGF0ZUlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzdGFydERhdGVJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHN0YXJ0RGF0ZUlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdpY29uQ2FsZW5kYXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpY29uQ2FsZW5kYXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyUGlja2VyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNhbGVuZGFyUGlja2VyOiBFbGVtZW50UmVmO1xuXG4gIGlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjbGlja0xpc3RlbmVyO1xuICBwcml2YXRlIGV2ZW50UmVzaXplTGlzdGVuZXI7XG4gIHByaXZhdGUgcG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50OiBFbGVtZW50UmVmPGFueT47XG5cbiAgZ2V0IGF1dG9jb21wbGV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub0F1dG9jb21wbGV0ZSA/ICdvZmYnIDogJ29uJztcbiAgfVxuXG4gIGdldCBlbmFibGVDbGVhbmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsZWFuICYmICh0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUgfHwgdGhpcy5lbmREYXRlSW5wdXRWYWx1ZSkgJiYgIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHk7XG4gIH1cblxuICBnZXQgZW5kRGF0ZUlucHV0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnZW5kLWRhdGUnO1xuICB9XG5cbiAgZ2V0IGVuZERhdGVJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZW5kRGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICBnZXQgZ2V0RXJyb3JNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZmllbGRFcnJvck1lc3NhZ2UgJiYgIXRoaXMuZXJyb3JNZXNzYWdlICYmIHRoaXMuaGFzSW52YWxpZENsYXNzKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpZWxkRXJyb3JNZXNzYWdlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lcnJvck1lc3NhZ2UgIT09ICcnICYmIHRoaXMuaGFzSW52YWxpZENsYXNzKCkgPyB0aGlzLmVycm9yTWVzc2FnZSA6ICcnO1xuICB9XG5cbiAgZ2V0IGlzRGF0ZVJhbmdlSW5wdXRVbmNvbXBsZXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5lbmREYXRlSW5wdXRWYWx1ZS5sZW5ndGggPCBwb0RhdGVwaWNrZXJSYW5nZURhdGVMZW5ndGhEZWZhdWx0ICYmXG4gICAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUubGVuZ3RoIDwgcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdFxuICAgICk7XG4gIH1cblxuICBnZXQgaXNEaXJ0eURhdGVSYW5nZUlucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuZERhdGVJbnB1dFZhbHVlLmxlbmd0aCA+IDAgfHwgdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXQgc3RhcnREYXRlSW5wdXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdzdGFydC1kYXRlJztcbiAgfVxuXG4gIGdldCBzdGFydERhdGVJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBjb250cm9sUG9zaXRpb246IFBvQ29udHJvbFBvc2l0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBwb0xhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2UsXG4gICAgcG9EYXRlU2VydmljZTogUG9EYXRlU2VydmljZSxcbiAgICBwb0RhdGVwaWNrZXJSYW5nZUVsZW1lbnQ6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgc3VwZXIoY2hhbmdlRGV0ZWN0b3IsIHBvRGF0ZVNlcnZpY2UsIHBvTGFuZ3VhZ2VTZXJ2aWNlKTtcbiAgICB0aGlzLnBvRGF0ZXBpY2tlclJhbmdlRWxlbWVudCA9IHBvRGF0ZXBpY2tlclJhbmdlRWxlbWVudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRLZXlDb2RlKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2g7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGFyZ2V0RWxlbWVudChldmVudDogYW55KSB7XG4gICAgcmV0dXJuIGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICB9XG5cbiAgc3RhdGljIGlzVmFsaWRLZXkoa2V5Q29kZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0ga2V5Q29kZSA+PSA0OCAmJiBrZXlDb2RlIDw9IDU3O1xuICAgIGNvbnN0IGlzTnVtZXJpY051bXBhZEtleSA9IGtleUNvZGUgPj0gOTYgJiYga2V5Q29kZSA8PSAxMDU7XG5cbiAgICByZXR1cm4gaXNOdW1lcmljS2V5IHx8IGlzTnVtZXJpY051bXBhZEtleTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBDbGFzc2UgZGUgbcOhc2NhcmFcbiAgICB0aGlzLnBvTWFza09iamVjdCA9IHRoaXMuYnVpbGRNYXNrKFxuICAgICAgcmVwbGFjZUZvcm1hdFNlcGFyYXRvcih0aGlzLmZvcm1hdCwgdGhpcy5wb0xhbmd1YWdlU2VydmljZS5nZXREYXRlU2VwYXJhdG9yKHRoaXMubG9jYWxlKSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLm1pbkRhdGUgfHwgY2hhbmdlcy5tYXhEYXRlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5sb2NhbGUpIHtcbiAgICAgIGlmICh0aGlzLmRhdGVSYW5nZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNjcmVlbkJ5TW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgfVxuICAgICAgdGhpcy5wb01hc2tPYmplY3QgPSB0aGlzLmJ1aWxkTWFzayhcbiAgICAgICAgcmVwbGFjZUZvcm1hdFNlcGFyYXRvcih0aGlzLmZvcm1hdCwgdGhpcy5wb0xhbmd1YWdlU2VydmljZS5nZXREYXRlU2VwYXJhdG9yKHRoaXMubG9jYWxlKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMucmVzZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oKTtcbiAgICB0aGlzLmRhdGVSYW5nZSA9IHsgc3RhcnQ6ICcnLCBlbmQ6ICcnIH07XG5cbiAgICB0aGlzLnVwZGF0ZVNjcmVlbkJ5TW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICB9XG5cbiAgZXZlbnRPbkNsaWNrKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5wb01hc2tPYmplY3QuY2xpY2soJGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW7Dp8OjbyBxdWUgYXRyaWJ1aSBmb2NvIGFvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIFBhcmEgdXRpbGl6w6EtbGEgw6kgbmVjZXNzw6FyaW8gdGVyIGEgaW5zdMOibmNpYSBkbyBjb21wb25lbnRlIG5vIERPTSwgcG9kZW5kbyBzZXIgdXRpbGl6YWRvIG8gVmlld0NoaWxkIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKlxuICAgKiBgYGBcbiAgICogaW1wb3J0IHsgUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQgfSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XG4gICAqXG4gICAqIC4uLlxuICAgKlxuICAgKiBAVmlld0NoaWxkKFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBkYXRlcGlja2VyUmFuZ2U6IFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50O1xuICAgKlxuICAgKiBmb2N1c0RhdGVwaWNrZXJSYW5nZSgpIHtcbiAgICogICB0aGlzLmRhdGVwaWNrZXJSYW5nZS5mb2N1cygpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBvbkJsdXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkTW9kZWw/LigpO1xuICAgIGNvbnN0IGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQgPSBldmVudC50YXJnZXQubmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWU7XG5cbiAgICB0aGlzLnVwZGF0ZU1vZGVsQnlTY3JlZW4oaXNTdGFydERhdGVUYXJnZXRFdmVudCk7XG5cbiAgICB0aGlzLnJlbW92ZUZvY3VzRnJvbURhdGVQaWNrZXJSYW5nZUZpZWxkKCk7XG4gIH1cblxuICBvbkNhbGVuZGFyQ2hhbmdlKHsgc3RhcnQsIGVuZCB9KSB7XG4gICAgY29uc3QgaXNTdGFydERhdGVUYXJnZXRFdmVudCA9IHN0YXJ0ICYmICFlbmQ7XG5cbiAgICB0aGlzLnVwZGF0ZVNjcmVlbkJ5TW9kZWwoeyBzdGFydDogc3RhcnQgfHwgJycsIGVuZDogZW5kIHx8ICcnIH0pO1xuICAgIHRoaXMudXBkYXRlTW9kZWxCeVNjcmVlbihpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50LCBzdGFydCB8fCAnJywgZW5kIHx8ICcnKTtcblxuICAgIGlmIChzdGFydCAmJiBlbmQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LCAzMDApO1xuICAgIH1cbiAgfVxuXG4gIG9uRm9jdXMoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuYXBwbHlGb2N1c09uRGF0ZVBpY2tlclJhbmdlRmllbGQoKTtcbiAgICB0aGlzLnBvTWFza09iamVjdC5yZXNldFBvc2l0aW9ucyhldmVudCk7XG4gIH1cblxuICBvbktleWRvd24oZXZlbnQ/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2V0Rm9jdXNPbkJhY2tzcGFjZShldmVudCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnNldEZvY3VzT25CYWNrc3BhY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb01hc2tPYmplY3Qua2V5ZG93bihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgb25LZXl1cChldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50ID0gZXZlbnQudGFyZ2V0Lm5hbWUgPT09IHRoaXMuc3RhcnREYXRlSW5wdXROYW1lO1xuXG4gICAgdGhpcy5zZXRGb2N1cyhldmVudCk7XG4gICAgdGhpcy5wb01hc2tPYmplY3Qua2V5dXAoZXZlbnQpO1xuICAgIHRoaXMudXBkYXRlTW9kZWxXaGVuQ29tcGxldGUoaXNTdGFydERhdGVUYXJnZXRFdmVudCwgdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLCB0aGlzLmVuZERhdGVJbnB1dFZhbHVlKTtcbiAgfVxuXG4gIHJlc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKCkge1xuICAgIHRoaXMuaXNTdGFydERhdGVSYW5nZUlucHV0VmFsaWQgPSB0cnVlO1xuICAgIHRoaXMuaXNEYXRlUmFuZ2VJbnB1dEZvcm1hdFZhbGlkID0gdHJ1ZTtcbiAgfVxuXG4gIHRvZ2dsZUNhbGVuZGFyKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlID0gIXRoaXMuaXNDYWxlbmRhclZpc2libGU7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBpZiAodGhpcy5pc0NhbGVuZGFyVmlzaWJsZSkge1xuICAgICAgdGhpcy5zZXRDYWxlbmRhclBvc2l0aW9uKCk7XG4gICAgICB0aGlzLmluaXRpYWxpemVMaXN0ZW5lcnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVTY3JlZW5CeU1vZGVsKG1vZGVsOiBQb0RhdGVwaWNrZXJSYW5nZSkge1xuICAgIGNvbnN0IGRhdGVSYW5nZSA9IHsgc3RhcnQ6IG1vZGVsLnN0YXJ0IGFzIHN0cmluZywgZW5kOiBtb2RlbC5lbmQgYXMgc3RyaW5nIH07XG4gICAgY29uc3QgaXNTdGFydERhdGVWYWxpZCA9IHRoaXMucG9EYXRlU2VydmljZS5pc0RhdGVSYW5nZVZhbGlkKGRhdGVSYW5nZS5lbmQsIGRhdGVSYW5nZS5zdGFydCk7XG4gICAgY29uc3QgaXNEYXRlVmFsaWQgPSBkYXRlID0+ICF0aGlzLmRhdGVGb3JtYXRGYWlsZWQoZGF0ZSkgJiYgaXNTdGFydERhdGVWYWxpZDtcblxuICAgIGNvbnN0IGVuZERhdGVGb3JtYXRlZCA9IGlzRGF0ZVZhbGlkKGRhdGVSYW5nZS5lbmQpID8gdGhpcy5mb3JtYXRNb2RlbFRvU2NyZWVuKGRhdGVSYW5nZS5lbmQpIDogJyc7XG4gICAgY29uc3Qgc3RhcnREYXRlRm9ybWF0ZWQgPSBpc0RhdGVWYWxpZChkYXRlUmFuZ2Uuc3RhcnQpID8gdGhpcy5mb3JtYXRNb2RlbFRvU2NyZWVuKGRhdGVSYW5nZS5zdGFydCkgOiAnJztcblxuICAgIHRoaXMuZW5kRGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBlbmREYXRlRm9ybWF0ZWQ7XG4gICAgdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gc3RhcnREYXRlRm9ybWF0ZWQ7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Rm9jdXNPbkRhdGVQaWNrZXJSYW5nZUZpZWxkKCkge1xuICAgIHRoaXMuZGF0ZVJhbmdlRmllbGQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdwby1kYXRlcGlja2VyLXJhbmdlLWZpZWxkLWZvY3VzZWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RGF0ZShmb3JtYXQ6IHN0cmluZywgZGF5OiBzdHJpbmcgPSAnJywgbW9udGg6IHN0cmluZyA9ICcnLCB5ZWFyOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgbGV0IGRhdGVGb3JtYXR0ZWQgPSByZXBsYWNlRm9ybWF0U2VwYXJhdG9yKFxuICAgICAgZm9ybWF0IHx8IHRoaXMuZm9ybWF0LFxuICAgICAgdGhpcy5wb0xhbmd1YWdlU2VydmljZS5nZXREYXRlU2VwYXJhdG9yKHRoaXMubG9jYWxlKVxuICAgICk7XG5cbiAgICBkYXkgPSBkYXkgJiYgZGF5LmluY2x1ZGVzKCdUJykgPyBkYXkuc2xpY2UoMCwgMikgOiBkYXk7XG5cbiAgICBkYXRlRm9ybWF0dGVkID0gZGF0ZUZvcm1hdHRlZC5yZXBsYWNlKCdkZCcsICgnMCcgKyBkYXkpLnNsaWNlKC0yKSk7XG4gICAgZGF0ZUZvcm1hdHRlZCA9IGRhdGVGb3JtYXR0ZWQucmVwbGFjZSgnbW0nLCAoJzAnICsgbW9udGgpLnNsaWNlKC0yKSk7XG4gICAgZGF0ZUZvcm1hdHRlZCA9IGRhdGVGb3JtYXR0ZWQucmVwbGFjZSgneXl5eScsIFN0cmluZyh5ZWFyKSk7XG5cbiAgICByZXR1cm4gZGF0ZUZvcm1hdHRlZDtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0U2NyZWVuVG9Nb2RlbCh2YWx1ZTogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHZhbHVlLnNwbGl0KHRoaXMucG9MYW5ndWFnZVNlcnZpY2UuZ2V0RGF0ZVNlcGFyYXRvcih0aGlzLmxvY2FsZSkpO1xuXG4gICAgcmV0dXJuIHZhbHVlID8gdGhpcy5mb3JtYXREYXRlKCd5eXl5LW1tLWRkJywgZGF5LCBtb250aCwgeWVhcikgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TW9kZWxUb1NjcmVlbih2YWx1ZTogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IHZhbHVlLnNwbGl0KCctJyk7XG5cbiAgICByZXR1cm4gdmFsdWUgPyB0aGlzLmZvcm1hdERhdGUodGhpcy5mb3JtYXQsIGRheSwgbW9udGgsIHllYXIpIDogJyc7XG4gIH1cblxuICBwcml2YXRlIGdldERhdGVSYW5nZUZvcm1hdFZhbGlkYXRpb24oXG4gICAgc3RhcnREYXRlOiBzdHJpbmcsXG4gICAgZW5kRGF0ZTogc3RyaW5nLFxuICAgIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQ6IGJvb2xlYW5cbiAgKTogeyBpc1ZhbGlkOiBib29sZWFuOyBkYXRlUmFuZ2VNb2RlbDogUG9EYXRlcGlja2VyUmFuZ2UgfSB7XG4gICAgdGhpcy5zZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oc3RhcnREYXRlLCBlbmREYXRlKTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDpcbiAgICAgICAgdGhpcy5pc0RhdGVSYW5nZUlucHV0Rm9ybWF0VmFsaWQgJiYgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCAmJiB0aGlzLnZlcmlmeVZhbGlkRGF0ZShzdGFydERhdGUsIGVuZERhdGUpLFxuICAgICAgZGF0ZVJhbmdlTW9kZWw6IHRoaXMuZ2V0VmFsaWRhdGVkTW9kZWwoc3RhcnREYXRlLCBlbmREYXRlLCBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldFZhbGlkYXRlZE1vZGVsKHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcsIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQ6IGJvb2xlYW4pOiBQb0RhdGVwaWNrZXJSYW5nZSB7XG4gICAgY29uc3QgZGF0ZVJhbmdlTW9kZWwgPSB7IHN0YXJ0OiAnJywgZW5kOiAnJyB9O1xuXG4gICAgZGF0ZVJhbmdlTW9kZWwuZW5kID1cbiAgICAgIChpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50IHx8IHRoaXMuaXNTdGFydERhdGVSYW5nZUlucHV0VmFsaWQpICYmICF0aGlzLmRhdGVGb3JtYXRGYWlsZWQoZW5kRGF0ZSkgPyBlbmREYXRlIDogJyc7XG5cbiAgICBkYXRlUmFuZ2VNb2RlbC5zdGFydCA9XG4gICAgICAoIWlzU3RhcnREYXRlVGFyZ2V0RXZlbnQgfHwgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCkgJiYgIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChzdGFydERhdGUpXG4gICAgICAgID8gc3RhcnREYXRlXG4gICAgICAgIDogJyc7XG5cbiAgICByZXR1cm4gZGF0ZVJhbmdlTW9kZWw7XG4gIH1cblxuICBwcml2YXRlIGhhc0F0dHJDYWxlbmRhcihlbGVtZW50KSB7XG4gICAgY29uc3QgYXR0ckNhbGVuZGFyID0gJ2F0dHItY2FsZW5kYXInO1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ/Lmhhc0F0dHJpYnV0ZShhdHRyQ2FsZW5kYXIpIHx8IGVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/Lmhhc0F0dHJpYnV0ZShhdHRyQ2FsZW5kYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNJbnZhbGlkQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1pbnZhbGlkJykgJiZcbiAgICAgIHRoaXMucG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1kaXJ0eScpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUxpc3RlbmVycygpIHtcbiAgICB0aGlzLmNsaWNrTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnY2xpY2snLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIHRoaXMud2FzQ2xpY2tlZE9uUGlja2VyKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAncmVzaXplJywgKCkgPT4ge1xuICAgICAgdGhpcy5pc0NhbGVuZGFyVmlzaWJsZSA9IGZhbHNlO1xuICAgIH0pO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VxdWFsQmVmb3JlVmFsdWUoc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZCAmJiBlbmREYXRlID09PSB0aGlzLmRhdGVSYW5nZS5lbmQgJiYgc3RhcnREYXRlID09PSB0aGlzLmRhdGVSYW5nZS5zdGFydDtcbiAgfVxuXG4gIHByaXZhdGUgaXNTZXRGb2N1c09uQmFja3NwYWNlKGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgZXZlbnQudGFyZ2V0Lm5hbWUgPT09IHRoaXMuZW5kRGF0ZUlucHV0TmFtZSAmJlxuICAgICAgdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQgPT09IDAgJiZcbiAgICAgIGV2ZW50LmtleUNvZGUgPT09IGJhY2tzcGFjZUtleVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uU2Nyb2xsID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlKSB7XG4gICAgICB0aGlzLmNvbnRyb2xQb3NpdGlvbi5hZGp1c3RQb3NpdGlvbihwb0NhbGVuZGFyUG9zaXRpb25EZWZhdWx0KTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSByZW1vdmVGb2N1c0Zyb21EYXRlUGlja2VyUmFuZ2VGaWVsZCgpIHtcbiAgICB0aGlzLmRhdGVSYW5nZUZpZWxkLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgncG8tZGF0ZXBpY2tlci1yYW5nZS1maWVsZC1mb2N1c2VkJyk7XG4gIH1cblxuICBwcml2YXRlIHNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbihzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCA9IHRoaXMucG9EYXRlU2VydmljZS5pc0RhdGVSYW5nZVZhbGlkKGVuZERhdGUsIHN0YXJ0RGF0ZSk7XG5cbiAgICB0aGlzLmlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZCA9ICF0aGlzLmRhdGVGb3JtYXRGYWlsZWQoc3RhcnREYXRlKSAmJiAhdGhpcy5kYXRlRm9ybWF0RmFpbGVkKGVuZERhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1cyhldmVudDogYW55KSB7XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQuZ2V0VGFyZ2V0RWxlbWVudChldmVudCk7XG4gICAgY29uc3Qga2V5Q29kZSA9IFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50LmdldEtleUNvZGUoZXZlbnQpO1xuICAgIGNvbnN0IGlucHV0TmFtZSA9IGlucHV0RWxlbWVudFsnbmFtZSddO1xuXG4gICAgdGhpcy5zZXRGb2N1c09uQXJyb3dMZWZ0KGtleUNvZGUsIGlucHV0TmFtZSk7XG4gICAgdGhpcy5zZXRGb2N1c09uQXJyb3dSaWdodChrZXlDb2RlLCBpbnB1dE5hbWUsIGlucHV0RWxlbWVudCk7XG4gICAgdGhpcy5zZXRGb2N1c09uU3RhcnREYXRlQ29tcGxldGVkKGtleUNvZGUsIGlucHV0TmFtZSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzQW5kUG9zaXRpb24ocG9zaXRpb246IG51bWJlciwgaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmLCBzZWxlY3Rpb25SYW5nZTogbnVtYmVyKSB7XG4gICAgdGhpcy5mb2N1c09uRWxlbWVudChpbnB1dEVsZW1lbnQpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25SYW5nZSwgc2VsZWN0aW9uUmFuZ2UpO1xuICAgICAgdGhpcy5wb01hc2tPYmplY3QuaW5pdGlhbFBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICB0aGlzLnBvTWFza09iamVjdC5maW5hbFBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzT25FbGVtZW50KGlucHV0RWxlbWVudDogRWxlbWVudFJlZikge1xuICAgIGlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUxpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5jbGlja0xpc3RlbmVyKSB7XG4gICAgICB0aGlzLmNsaWNrTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyKSB7XG4gICAgICB0aGlzLmV2ZW50UmVzaXplTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHNldENhbGVuZGFyUG9zaXRpb24oKSB7XG4gICAgdGhpcy5jb250cm9sUG9zaXRpb24uc2V0RWxlbWVudHMoXG4gICAgICB0aGlzLmNhbGVuZGFyUGlja2VyLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBwb0NhbGVuZGFyQ29udGVudE9mZnNldCxcbiAgICAgIHRoaXMuZGF0ZVJhbmdlRmllbGQsXG4gICAgICBbJ2JvdHRvbS1sZWZ0JywgJ2JvdHRvbS1yaWdodCcsICd0b3AtbGVmdCcsICd0b3AtcmlnaHQnXSxcbiAgICAgIGZhbHNlLFxuICAgICAgdHJ1ZVxuICAgICk7XG5cbiAgICB0aGlzLmNvbnRyb2xQb3NpdGlvbi5hZGp1c3RQb3NpdGlvbihwb0NhbGVuZGFyUG9zaXRpb25EZWZhdWx0KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNPbkFycm93TGVmdChrZXlDb2RlOiBudW1iZXIsIGlucHV0TmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNDdXJzb3JBdFN0YXJ0T2ZJbnB1dCA9IHRoaXMuZW5kRGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDA7XG5cbiAgICBpZiAoaW5wdXROYW1lID09PSB0aGlzLmVuZERhdGVJbnB1dE5hbWUgJiYgaXNDdXJzb3JBdFN0YXJ0T2ZJbnB1dCAmJiBrZXlDb2RlID09PSBhcnJvd0xlZnRLZXkpIHtcbiAgICAgIGNvbnN0IGlucHV0TGVuZ3RoID0gdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLmxlbmd0aDtcbiAgICAgIHRoaXMuc2V0Rm9jdXNBbmRQb3NpdGlvbihpbnB1dExlbmd0aCwgdGhpcy5zdGFydERhdGVJbnB1dCwgaW5wdXRMZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNPbkFycm93UmlnaHQoa2V5Q29kZTogbnVtYmVyLCBpbnB1dE5hbWU6IHN0cmluZywgaW5wdXRFbGVtZW50OiBhbnkpIHtcbiAgICBjb25zdCBpc0N1cnNvckF0RW5kT2ZJbnB1dCA9IHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gaW5wdXRFbGVtZW50LnZhbHVlLmxlbmd0aDtcblxuICAgIGlmIChpbnB1dE5hbWUgPT09IHRoaXMuc3RhcnREYXRlSW5wdXROYW1lICYmIGlzQ3Vyc29yQXRFbmRPZklucHV0ICYmIGtleUNvZGUgPT09IGFycm93UmlnaHRLZXkpIHtcbiAgICAgIHRoaXMuc2V0Rm9jdXNBbmRQb3NpdGlvbigwLCB0aGlzLmVuZERhdGVJbnB1dCwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c09uQmFja3NwYWNlKCkge1xuICAgIGNvbnN0IGlucHV0TGVuZ3RoID0gdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLmxlbmd0aDtcblxuICAgIHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuc3RhcnREYXRlSW5wdXRWYWx1ZS5zbGljZSgwLCAtMSk7XG4gICAgdGhpcy5zZXRGb2N1c0FuZFBvc2l0aW9uKGlucHV0TGVuZ3RoLCB0aGlzLnN0YXJ0RGF0ZUlucHV0LCBpbnB1dExlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzT25TdGFydERhdGVDb21wbGV0ZWQoa2V5Q29kZTogbnVtYmVyLCBpbnB1dE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGlzTGFzdEtleVByZXNzZWQgPSB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IHBvRGF0ZXBpY2tlclJhbmdlRGF0ZUxlbmd0aERlZmF1bHQ7XG4gICAgY29uc3QgaXNOZXdEYXRlQ29tcGxldGVkID1cbiAgICAgIHRoaXMuc3RhcnREYXRlSW5wdXRWYWx1ZS5sZW5ndGggPT09IHBvRGF0ZXBpY2tlclJhbmdlRGF0ZUxlbmd0aERlZmF1bHQgJiYgaXNMYXN0S2V5UHJlc3NlZDtcbiAgICBjb25zdCBpc1ZhbGlkS2V5ID0gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQuaXNWYWxpZEtleShrZXlDb2RlKTtcblxuICAgIGlmIChpbnB1dE5hbWUgPT09IHRoaXMuc3RhcnREYXRlSW5wdXROYW1lICYmIGlzTmV3RGF0ZUNvbXBsZXRlZCAmJiBpc1ZhbGlkS2V5KSB7XG4gICAgICB0aGlzLnNldEZvY3VzQW5kUG9zaXRpb24oMCwgdGhpcy5lbmREYXRlSW5wdXQsIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTW9kZWxXaGVuQ29tcGxldGUoaXNTdGFydERhdGVUYXJnZXRFdmVudDogYm9vbGVhbiwgc3RhcnREYXRlLCBlbmREYXRlKSB7XG4gICAgY29uc3QgZW5kRGF0ZUZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U2NyZWVuVG9Nb2RlbChlbmREYXRlKTtcbiAgICBjb25zdCBzdGFydERhdGVGb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFNjcmVlblRvTW9kZWwoc3RhcnREYXRlKTtcbiAgICBjb25zdCBkYXRlRm9ybWF0VmFsaWRhdGlvbiA9IHRoaXMuZ2V0RGF0ZVJhbmdlRm9ybWF0VmFsaWRhdGlvbihcbiAgICAgIHN0YXJ0RGF0ZUZvcm1hdHRlZCxcbiAgICAgIGVuZERhdGVGb3JtYXR0ZWQsXG4gICAgICBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50XG4gICAgKTtcblxuICAgIGlmICh0aGlzLmlzRXF1YWxCZWZvcmVWYWx1ZShzdGFydERhdGVGb3JtYXR0ZWQsIGVuZERhdGVGb3JtYXR0ZWQpKSB7XG4gICAgICB0aGlzLnJlc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKCk7XG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0VmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IHsgc3RhcnQ6IHN0YXJ0RGF0ZUZvcm1hdHRlZCwgZW5kOiBlbmREYXRlRm9ybWF0dGVkIH07XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh7IC4uLnRoaXMuZGF0ZVJhbmdlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTW9kZWxCeVNjcmVlbihpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50OiBib29sZWFuLCBzdGFydERhdGU/LCBlbmREYXRlPykge1xuICAgIGNvbnN0IGVuZERhdGVGb3JtYXR0ZWQgPSBlbmREYXRlIHx8IHRoaXMuZm9ybWF0U2NyZWVuVG9Nb2RlbCh0aGlzLmVuZERhdGVJbnB1dFZhbHVlKTtcbiAgICBjb25zdCBzdGFydERhdGVGb3JtYXR0ZWQgPSBzdGFydERhdGUgfHwgdGhpcy5mb3JtYXRTY3JlZW5Ub01vZGVsKHRoaXMuc3RhcnREYXRlSW5wdXRWYWx1ZSk7XG4gICAgaWYgKHRoaXMuaXNEYXRlUmFuZ2VJbnB1dFVuY29tcGxldGVkICYmIHRoaXMuaXNEaXJ0eURhdGVSYW5nZUlucHV0KSB7XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0VxdWFsQmVmb3JlVmFsdWUoc3RhcnREYXRlRm9ybWF0dGVkLCBlbmREYXRlRm9ybWF0dGVkKSkge1xuICAgICAgdGhpcy5yZXNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbigpO1xuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlRm9ybWF0VmFsaWRhdGlvbiA9IHRoaXMuZ2V0RGF0ZVJhbmdlRm9ybWF0VmFsaWRhdGlvbihcbiAgICAgIHN0YXJ0RGF0ZUZvcm1hdHRlZCxcbiAgICAgIGVuZERhdGVGb3JtYXR0ZWQsXG4gICAgICBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50XG4gICAgKTtcblxuICAgIGlmIChkYXRlRm9ybWF0VmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IHsgc3RhcnQ6IHN0YXJ0RGF0ZUZvcm1hdHRlZCwgZW5kOiBlbmREYXRlRm9ybWF0dGVkIH07XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh7IC4uLnRoaXMuZGF0ZVJhbmdlIH0pO1xuICAgIH1cblxuICAgIGlmICghZGF0ZUZvcm1hdFZhbGlkYXRpb24uaXNWYWxpZCAmJiB0aGlzLnZlcmlmeUZvcm1hdHRlZERhdGVzKHN0YXJ0RGF0ZUZvcm1hdHRlZCwgZW5kRGF0ZUZvcm1hdHRlZCkpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0geyAuLi5kYXRlRm9ybWF0VmFsaWRhdGlvbi5kYXRlUmFuZ2VNb2RlbCB9O1xuICAgICAgdGhpcy51cGRhdGVNb2RlbChkYXRlRm9ybWF0VmFsaWRhdGlvbi5kYXRlUmFuZ2VNb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlGb3JtYXR0ZWREYXRlcyhzdGFydDogc3RyaW5nLCBlbmQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXN0YXJ0IHx8ICEhZW5kO1xuICB9XG5cbiAgcHJpdmF0ZSB3YXNDbGlja2VkT25QaWNrZXIoZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNDYWxlbmRhclZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5jYWxlbmRhclBpY2tlci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICF0aGlzLmljb25DYWxlbmRhci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICF0aGlzLmhhc0F0dHJDYWxlbmRhcihldmVudC50YXJnZXQpXG4gICAgKSB7XG4gICAgICB0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxwby1maWVsZC1jb250YWluZXJcbiAgW2NsYXNzLnBvLWRhdGUtcGlja2VyLWNvbnRhaW5lci1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFtwLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW3AtbGFiZWxdPVwibGFiZWxcIlxuICBbcC1vcHRpb25hbF09XCJvcHRpb25hbFwiXG4gIFtwLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgW3Atc2hvdy1yZXF1aXJlZF09XCJzaG93UmVxdWlyZWRcIlxuPlxuICA8ZGl2IGNsYXNzPVwicG8tZmllbGQtY29udGFpbmVyLWNvbnRlbnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwicG8tZmllbGQtY29udGFpbmVyLWlucHV0XCI+XG4gICAgICA8ZGl2XG4gICAgICAgICNkYXRlUmFuZ2VGaWVsZFxuICAgICAgICBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtZmllbGQgcG8taW5wdXRcIlxuICAgICAgICBbY2xhc3MucG8tZGF0ZXBpY2tlci1yYW5nZS1maWVsZC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2Utc3RhcnQtZGF0ZVwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3N0YXJ0RGF0ZUlucHV0XG4gICAgICAgICAgICBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtaW5wdXRcIlxuICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW25hbWVdPVwic3RhcnREYXRlSW5wdXROYW1lXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXl1cCk9XCJvbktleXVwKCRldmVudClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImV2ZW50T25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1zZXBhcmF0b3JcIj4tPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtZW5kLWRhdGVcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNlbmREYXRlSW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1pbnB1dFwiXG4gICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW25hbWVdPVwiZW5kRGF0ZUlucHV0TmFtZVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5dXApPVwib25LZXl1cCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJldmVudE9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtaWNvblwiPlxuICAgICAgICAgIDxwby1jbGVhbiBjbGFzcz1cInBvLWljb24taW5wdXRcIiAqbmdJZj1cImVuYWJsZUNsZWFuZXJcIiAocC1jaGFuZ2UtZXZlbnQpPVwiY2xlYXIoKVwiPjwvcG8tY2xlYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWljb25cIj5cbiAgICAgICAgICA8cG8taWNvblxuICAgICAgICAgICAgI2ljb25DYWxlbmRhclxuICAgICAgICAgICAgW3AtaWNvbl09XCIhZGlzYWJsZWQgfHwgIXJlYWRvbmx5ID8gJ0lDT05fQ0FMRU5EQVIgcG8tY2xpY2thYmxlJyA6ICdJQ09OX0NBTEVOREFSJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInBvLWZpZWxkLWljb24ge3sgZGlzYWJsZWQgPyAncG8taWNvbi1pbnB1dC1kaXNhYmxlZCcgOiAncG8taWNvbi1pbnB1dCcgfX1cIlxuICAgICAgICAgICAgW2NsYXNzLnBvLWZpZWxkLWljb24tZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNhbGVuZGFyKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L3BvLWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxwby1maWVsZC1jb250YWluZXItYm90dG9tXG4gICAgW3AtaGVscF09XCJoZWxwXCJcbiAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3AtZXJyb3ItcGF0dGVybl09XCJnZXRFcnJvck1lc3NhZ2VcIlxuICA+PC9wby1maWVsZC1jb250YWluZXItYm90dG9tPlxuPC9wby1maWVsZC1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJpc0NhbGVuZGFyVmlzaWJsZVwiPlxuICA8ZGl2ICNjYWxlbmRhclBpY2tlciBjbGFzcz1cInBvLWNhbGVuZGFyLXJhbmdlLXBpY2tlclwiPlxuICAgIDxwby1jYWxlbmRhclxuICAgICAgcC1tb2RlPVwicmFuZ2VcIlxuICAgICAgW25nTW9kZWxdPVwiZGF0ZVJhbmdlXCJcbiAgICAgIFtwLW1heC1kYXRlXT1cIm1heERhdGVcIlxuICAgICAgW3AtbWluLWRhdGVdPVwibWluRGF0ZVwiXG4gICAgICBbcC1sb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2FsZW5kYXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgPjwvcG8tY2FsZW5kYXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=