@hmcts/ccd-case-ui-toolkit 7.1.69-exui-2703-rc2 → 7.1.69

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.
@@ -15,8 +15,8 @@ import * as i3 from "../../services/order/order.service";
15
15
  import * as i4 from "../../services/jurisdiction/jurisdiction.service";
16
16
  import * as i5 from "../../services/alert/alert.service";
17
17
  import * as i6 from "../../services/window/window.service";
18
- function WorkbasketFiltersComponent_option_20_Template(rf, ctx) { if (rf & 1) {
19
- i0.ɵɵelementStart(0, "option", 14);
18
+ function WorkbasketFiltersComponent_option_9_Template(rf, ctx) { if (rf & 1) {
19
+ i0.ɵɵelementStart(0, "option", 11);
20
20
  i0.ɵɵtext(1);
21
21
  i0.ɵɵpipe(2, "rpxTranslate");
22
22
  i0.ɵɵelementEnd();
@@ -25,8 +25,8 @@ function WorkbasketFiltersComponent_option_20_Template(rf, ctx) { if (rf & 1) {
25
25
  i0.ɵɵadvance();
26
26
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 2, "Select a value"));
27
27
  } }
28
- function WorkbasketFiltersComponent_option_21_Template(rf, ctx) { if (rf & 1) {
29
- i0.ɵɵelementStart(0, "option", 14);
28
+ function WorkbasketFiltersComponent_option_10_Template(rf, ctx) { if (rf & 1) {
29
+ i0.ɵɵelementStart(0, "option", 11);
30
30
  i0.ɵɵtext(1);
31
31
  i0.ɵɵpipe(2, "rpxTranslate");
32
32
  i0.ɵɵelementEnd();
@@ -36,8 +36,8 @@ function WorkbasketFiltersComponent_option_21_Template(rf, ctx) { if (rf & 1) {
36
36
  i0.ɵɵadvance();
37
37
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 2, j_r1.name));
38
38
  } }
39
- function WorkbasketFiltersComponent_option_27_Template(rf, ctx) { if (rf & 1) {
40
- i0.ɵɵelementStart(0, "option", 14);
39
+ function WorkbasketFiltersComponent_option_16_Template(rf, ctx) { if (rf & 1) {
40
+ i0.ɵɵelementStart(0, "option", 11);
41
41
  i0.ɵɵtext(1);
42
42
  i0.ɵɵpipe(2, "rpxTranslate");
43
43
  i0.ɵɵelementEnd();
@@ -46,8 +46,8 @@ function WorkbasketFiltersComponent_option_27_Template(rf, ctx) { if (rf & 1) {
46
46
  i0.ɵɵadvance();
47
47
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 2, "Select a value"));
48
48
  } }
49
- function WorkbasketFiltersComponent_option_28_Template(rf, ctx) { if (rf & 1) {
50
- i0.ɵɵelementStart(0, "option", 14);
49
+ function WorkbasketFiltersComponent_option_17_Template(rf, ctx) { if (rf & 1) {
50
+ i0.ɵɵelementStart(0, "option", 11);
51
51
  i0.ɵɵtext(1);
52
52
  i0.ɵɵpipe(2, "rpxTranslate");
53
53
  i0.ɵɵelementEnd();
@@ -57,8 +57,8 @@ function WorkbasketFiltersComponent_option_28_Template(rf, ctx) { if (rf & 1) {
57
57
  i0.ɵɵadvance();
58
58
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 2, ct_r2.name));
59
59
  } }
60
- function WorkbasketFiltersComponent_option_37_Template(rf, ctx) { if (rf & 1) {
61
- i0.ɵɵelementStart(0, "option", 14);
60
+ function WorkbasketFiltersComponent_option_26_Template(rf, ctx) { if (rf & 1) {
61
+ i0.ɵɵelementStart(0, "option", 11);
62
62
  i0.ɵɵtext(1);
63
63
  i0.ɵɵpipe(2, "rpxTranslate");
64
64
  i0.ɵɵelementEnd();
@@ -68,10 +68,10 @@ function WorkbasketFiltersComponent_option_37_Template(rf, ctx) { if (rf & 1) {
68
68
  i0.ɵɵadvance();
69
69
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 2, cs_r3.name));
70
70
  } }
71
- function WorkbasketFiltersComponent_ng_container_38_div_2_Template(rf, ctx) { if (rf & 1) {
71
+ function WorkbasketFiltersComponent_ng_container_27_div_2_Template(rf, ctx) { if (rf & 1) {
72
72
  const _r4 = i0.ɵɵgetCurrentView();
73
- i0.ɵɵelementStart(0, "div", 5)(1, "ccd-field-write", 20);
74
- i0.ɵɵlistener("keyup.enter", function WorkbasketFiltersComponent_ng_container_38_div_2_Template_ccd_field_write_keyup_enter_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r4 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r4.apply(null)); });
73
+ i0.ɵɵelementStart(0, "div", 2)(1, "ccd-field-write", 18);
74
+ i0.ɵɵlistener("keyup.enter", function WorkbasketFiltersComponent_ng_container_27_div_2_Template_ccd_field_write_keyup_enter_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r4 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r4.apply(null)); });
75
75
  i0.ɵɵelementEnd()();
76
76
  } if (rf & 2) {
77
77
  const workbasketInput_r6 = ctx.$implicit;
@@ -79,10 +79,10 @@ function WorkbasketFiltersComponent_ng_container_38_div_2_Template(rf, ctx) { if
79
79
  i0.ɵɵadvance();
80
80
  i0.ɵɵproperty("caseField", workbasketInput_r6.field)("formGroup", ctx_r4.formGroup)("isExpanded", true)("isInSearchBlock", true);
81
81
  } }
82
- function WorkbasketFiltersComponent_ng_container_38_Template(rf, ctx) { if (rf & 1) {
83
- i0.ɵɵelementContainerStart(0, 17);
84
- i0.ɵɵelementStart(1, "div", 18);
85
- i0.ɵɵtemplate(2, WorkbasketFiltersComponent_ng_container_38_div_2_Template, 2, 4, "div", 19);
82
+ function WorkbasketFiltersComponent_ng_container_27_Template(rf, ctx) { if (rf & 1) {
83
+ i0.ɵɵelementContainerStart(0, 15);
84
+ i0.ɵɵelementStart(1, "div", 16);
85
+ i0.ɵɵtemplate(2, WorkbasketFiltersComponent_ng_container_27_div_2_Template, 2, 4, "div", 17);
86
86
  i0.ɵɵelementEnd();
87
87
  i0.ɵɵelementContainerEnd();
88
88
  } if (rf & 2) {
@@ -125,15 +125,6 @@ export class WorkbasketFiltersComponent {
125
125
  this.alertService = alertService;
126
126
  this.windowService = windowService;
127
127
  }
128
- scrollToTop() {
129
- (function smoothscroll() {
130
- const currentScroll = document.documentElement.scrollTop || document.body.scrollTop;
131
- if (currentScroll > 0) {
132
- window.requestAnimationFrame(smoothscroll);
133
- window.scrollTo(0, currentScroll - (currentScroll / 8));
134
- }
135
- })();
136
- }
137
128
  ngOnInit() {
138
129
  this.selected = {};
139
130
  this.route.queryParams.subscribe(params => {
@@ -394,78 +385,62 @@ export class WorkbasketFiltersComponent {
394
385
  }
395
386
  }
396
387
  static ɵfac = function WorkbasketFiltersComponent_Factory(t) { return new (t || WorkbasketFiltersComponent)(i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i2.WorkbasketInputFilterService), i0.ɵɵdirectiveInject(i3.OrderService), i0.ɵɵdirectiveInject(i4.JurisdictionService), i0.ɵɵdirectiveInject(i5.AlertService), i0.ɵɵdirectiveInject(i6.WindowService)); };
397
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: WorkbasketFiltersComponent, selectors: [["ccd-workbasket-filters"]], inputs: { jurisdictions: "jurisdictions", defaults: "defaults" }, outputs: { onApply: "onApply", onReset: "onReset" }, decls: 45, vars: 55, consts: [["id", "filters", 1, "global-display"], [1, "form-group", "flex"], ["aria-label", "Filters", 1, "heading-h2"], ["type", "button", 1, "button", "workbasket-filters-apply", 3, "click", "disabled", "title"], ["type", "button", 1, "button", "button-secondary", 3, "click", "title"], [1, "form-group"], ["for", "wb-jurisdiction", 1, "form-label"], ["id", "wb-jurisdiction", "name", "jurisdiction", "aria-controls", "search-result", 1, "form-control", "form-control-3-4", "ccd-dropdown", 3, "ngModelChange", "change", "ngModel"], [3, "ngValue", 4, "ngIf"], [3, "ngValue", 4, "ngFor", "ngForOf"], ["for", "wb-case-type", 1, "form-label"], ["id", "wb-case-type", "name", "case-type", "aria-controls", "search-result", 1, "form-control", "form-control-3-4", "ccd-dropdown", 3, "ngModelChange", "change", "ngModel", "disabled"], ["for", "wb-case-state", 1, "form-label"], ["id", "wb-case-state", "name", "state", "aria-controls", "search-result", 1, "form-control", "form-control-3-4", "ccd-dropdown", 3, "ngModelChange", "ngModel", "disabled"], [3, "ngValue"], ["ccdConditionalShowForm", "", 3, "formGroup", "contextFields", 4, "ngIf"], ["type", "button", 1, "button", 3, "click", "title"], ["ccdConditionalShowForm", "", 3, "formGroup", "contextFields"], ["id", "dynamicFilters"], ["class", "form-group", 4, "ngFor", "ngForOf"], [3, "keyup.enter", "caseField", "formGroup", "isExpanded", "isInSearchBlock"]], template: function WorkbasketFiltersComponent_Template(rf, ctx) { if (rf & 1) {
398
- i0.ɵɵelementStart(0, "form", 0)(1, "div", 1)(2, "fieldset", 2);
399
- i0.ɵɵtext(3);
400
- i0.ɵɵpipe(4, "rpxTranslate");
388
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: WorkbasketFiltersComponent, selectors: [["ccd-workbasket-filters"]], inputs: { jurisdictions: "jurisdictions", defaults: "defaults" }, outputs: { onApply: "onApply", onReset: "onReset" }, decls: 39, vars: 46, consts: [["aria-label", "Filters", 1, "heading-h2"], [1, "global-display"], [1, "form-group"], ["for", "wb-jurisdiction", 1, "form-label"], ["id", "wb-jurisdiction", "name", "jurisdiction", "aria-controls", "search-result", 1, "form-control", "form-control-3-4", "ccd-dropdown", 3, "ngModelChange", "change", "ngModel"], [3, "ngValue", 4, "ngIf"], [3, "ngValue", 4, "ngFor", "ngForOf"], ["for", "wb-case-type", 1, "form-label"], ["id", "wb-case-type", "name", "case-type", "aria-controls", "search-result", 1, "form-control", "form-control-3-4", "ccd-dropdown", 3, "ngModelChange", "change", "ngModel", "disabled"], ["for", "wb-case-state", 1, "form-label"], ["id", "wb-case-state", "name", "state", "aria-controls", "search-result", 1, "form-control", "form-control-3-4", "ccd-dropdown", 3, "ngModelChange", "ngModel", "disabled"], [3, "ngValue"], ["ccdConditionalShowForm", "", 3, "formGroup", "contextFields", 4, "ngIf"], ["type", "button", 1, "button", "workbasket-filters-apply", 3, "click", "disabled", "title"], ["type", "button", 1, "button", "button-secondary", 3, "click", "title"], ["ccdConditionalShowForm", "", 3, "formGroup", "contextFields"], ["id", "dynamicFilters"], ["class", "form-group", 4, "ngFor", "ngForOf"], [3, "keyup.enter", "caseField", "formGroup", "isExpanded", "isInSearchBlock"]], template: function WorkbasketFiltersComponent_Template(rf, ctx) { if (rf & 1) {
389
+ i0.ɵɵelementStart(0, "h2", 0);
390
+ i0.ɵɵtext(1);
391
+ i0.ɵɵpipe(2, "rpxTranslate");
401
392
  i0.ɵɵelementEnd();
402
- i0.ɵɵelementStart(5, "button", 3);
403
- i0.ɵɵpipe(6, "rpxTranslate");
393
+ i0.ɵɵelementStart(3, "form", 1)(4, "div", 2)(5, "label", 3);
394
+ i0.ɵɵtext(6);
404
395
  i0.ɵɵpipe(7, "rpxTranslate");
405
- i0.ɵɵlistener("click", function WorkbasketFiltersComponent_Template_button_click_5_listener() { return ctx.apply(true); });
406
- i0.ɵɵtext(8);
407
- i0.ɵɵpipe(9, "rpxTranslate");
408
396
  i0.ɵɵelementEnd();
409
- i0.ɵɵelementStart(10, "button", 4);
410
- i0.ɵɵpipe(11, "rpxTranslate");
411
- i0.ɵɵpipe(12, "rpxTranslate");
412
- i0.ɵɵlistener("click", function WorkbasketFiltersComponent_Template_button_click_10_listener() { return ctx.reset(); });
397
+ i0.ɵɵelementStart(8, "select", 4);
398
+ i0.ɵɵtwoWayListener("ngModelChange", function WorkbasketFiltersComponent_Template_select_ngModelChange_8_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.selected.jurisdiction, $event) || (ctx.selected.jurisdiction = $event); return $event; });
399
+ i0.ɵɵlistener("change", function WorkbasketFiltersComponent_Template_select_change_8_listener() { return ctx.onJurisdictionIdChange(); });
400
+ i0.ɵɵtemplate(9, WorkbasketFiltersComponent_option_9_Template, 3, 4, "option", 5)(10, WorkbasketFiltersComponent_option_10_Template, 3, 4, "option", 6);
401
+ i0.ɵɵelementEnd()();
402
+ i0.ɵɵelementStart(11, "div", 2)(12, "label", 7);
413
403
  i0.ɵɵtext(13);
414
404
  i0.ɵɵpipe(14, "rpxTranslate");
415
- i0.ɵɵelementEnd()();
416
- i0.ɵɵelementStart(15, "div", 5)(16, "label", 6);
417
- i0.ɵɵtext(17);
418
- i0.ɵɵpipe(18, "rpxTranslate");
419
405
  i0.ɵɵelementEnd();
420
- i0.ɵɵelementStart(19, "select", 7);
421
- i0.ɵɵtwoWayListener("ngModelChange", function WorkbasketFiltersComponent_Template_select_ngModelChange_19_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.selected.jurisdiction, $event) || (ctx.selected.jurisdiction = $event); return $event; });
422
- i0.ɵɵlistener("change", function WorkbasketFiltersComponent_Template_select_change_19_listener() { return ctx.onJurisdictionIdChange(); });
423
- i0.ɵɵtemplate(20, WorkbasketFiltersComponent_option_20_Template, 3, 4, "option", 8)(21, WorkbasketFiltersComponent_option_21_Template, 3, 4, "option", 9);
406
+ i0.ɵɵelementStart(15, "select", 8);
407
+ i0.ɵɵtwoWayListener("ngModelChange", function WorkbasketFiltersComponent_Template_select_ngModelChange_15_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.selected.caseType, $event) || (ctx.selected.caseType = $event); return $event; });
408
+ i0.ɵɵlistener("change", function WorkbasketFiltersComponent_Template_select_change_15_listener() { return ctx.onCaseTypeIdChange(); });
409
+ i0.ɵɵtemplate(16, WorkbasketFiltersComponent_option_16_Template, 3, 4, "option", 5)(17, WorkbasketFiltersComponent_option_17_Template, 3, 4, "option", 6);
424
410
  i0.ɵɵelementEnd()();
425
- i0.ɵɵelementStart(22, "div", 5)(23, "label", 10);
411
+ i0.ɵɵelementStart(18, "div", 2)(19, "label", 9);
412
+ i0.ɵɵtext(20);
413
+ i0.ɵɵpipe(21, "rpxTranslate");
414
+ i0.ɵɵelementEnd();
415
+ i0.ɵɵelementStart(22, "select", 10);
416
+ i0.ɵɵtwoWayListener("ngModelChange", function WorkbasketFiltersComponent_Template_select_ngModelChange_22_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.selected.caseState, $event) || (ctx.selected.caseState = $event); return $event; });
417
+ i0.ɵɵelementStart(23, "option", 11);
426
418
  i0.ɵɵtext(24);
427
419
  i0.ɵɵpipe(25, "rpxTranslate");
428
420
  i0.ɵɵelementEnd();
429
- i0.ɵɵelementStart(26, "select", 11);
430
- i0.ɵɵtwoWayListener("ngModelChange", function WorkbasketFiltersComponent_Template_select_ngModelChange_26_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.selected.caseType, $event) || (ctx.selected.caseType = $event); return $event; });
431
- i0.ɵɵlistener("change", function WorkbasketFiltersComponent_Template_select_change_26_listener() { return ctx.onCaseTypeIdChange(); });
432
- i0.ɵɵtemplate(27, WorkbasketFiltersComponent_option_27_Template, 3, 4, "option", 8)(28, WorkbasketFiltersComponent_option_28_Template, 3, 4, "option", 9);
421
+ i0.ɵɵtemplate(26, WorkbasketFiltersComponent_option_26_Template, 3, 4, "option", 6);
433
422
  i0.ɵɵelementEnd()();
434
- i0.ɵɵelementStart(29, "div", 5)(30, "label", 12);
423
+ i0.ɵɵtemplate(27, WorkbasketFiltersComponent_ng_container_27_Template, 3, 3, "ng-container", 12);
424
+ i0.ɵɵelementStart(28, "button", 13);
425
+ i0.ɵɵpipe(29, "rpxTranslate");
426
+ i0.ɵɵpipe(30, "rpxTranslate");
427
+ i0.ɵɵlistener("click", function WorkbasketFiltersComponent_Template_button_click_28_listener() { return ctx.apply(true); });
435
428
  i0.ɵɵtext(31);
436
429
  i0.ɵɵpipe(32, "rpxTranslate");
437
430
  i0.ɵɵelementEnd();
438
- i0.ɵɵelementStart(33, "select", 13);
439
- i0.ɵɵtwoWayListener("ngModelChange", function WorkbasketFiltersComponent_Template_select_ngModelChange_33_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.selected.caseState, $event) || (ctx.selected.caseState = $event); return $event; });
440
- i0.ɵɵelementStart(34, "option", 14);
441
- i0.ɵɵtext(35);
431
+ i0.ɵɵtext(33, " \u00A0\u00A0\u00A0 ");
432
+ i0.ɵɵelementStart(34, "button", 14);
433
+ i0.ɵɵpipe(35, "rpxTranslate");
442
434
  i0.ɵɵpipe(36, "rpxTranslate");
443
- i0.ɵɵelementEnd();
444
- i0.ɵɵtemplate(37, WorkbasketFiltersComponent_option_37_Template, 3, 4, "option", 9);
435
+ i0.ɵɵlistener("click", function WorkbasketFiltersComponent_Template_button_click_34_listener() { return ctx.reset(); });
436
+ i0.ɵɵtext(37);
437
+ i0.ɵɵpipe(38, "rpxTranslate");
445
438
  i0.ɵɵelementEnd()();
446
- i0.ɵɵtemplate(38, WorkbasketFiltersComponent_ng_container_38_Template, 3, 3, "ng-container", 15);
447
- i0.ɵɵelementStart(39, "div", 5)(40, "button", 16);
448
- i0.ɵɵpipe(41, "rpxTranslate");
449
- i0.ɵɵpipe(42, "rpxTranslate");
450
- i0.ɵɵlistener("click", function WorkbasketFiltersComponent_Template_button_click_40_listener() { return ctx.scrollToTop(); });
451
- i0.ɵɵtext(43);
452
- i0.ɵɵpipe(44, "rpxTranslate");
453
- i0.ɵɵelementEnd()()();
454
439
  } if (rf & 2) {
455
- i0.ɵɵadvance(3);
456
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 27, "Filters"));
457
- i0.ɵɵadvance(2);
458
- i0.ɵɵproperty("disabled", ctx.isApplyButtonDisabled())("title", i0.ɵɵpipeBind1(6, 29, "Apply filter"));
459
- i0.ɵɵattribute("aria-label", i0.ɵɵpipeBind1(7, 31, "Apply filter"));
460
- i0.ɵɵadvance(3);
461
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(9, 33, "Apply"), " ");
462
- i0.ɵɵadvance(2);
463
- i0.ɵɵproperty("title", i0.ɵɵpipeBind1(11, 35, "Reset filter"));
464
- i0.ɵɵattribute("aria-label", i0.ɵɵpipeBind1(12, 37, "Reset filter"));
465
- i0.ɵɵadvance(3);
466
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(14, 39, "Reset"), " ");
467
- i0.ɵɵadvance(4);
468
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(18, 41, "Jurisdiction"));
440
+ i0.ɵɵadvance();
441
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 24, "Filters"));
442
+ i0.ɵɵadvance(5);
443
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(7, 26, "Jurisdiction"));
469
444
  i0.ɵɵadvance(2);
470
445
  i0.ɵɵtwoWayProperty("ngModel", ctx.selected.jurisdiction);
471
446
  i0.ɵɵadvance();
@@ -473,7 +448,7 @@ export class WorkbasketFiltersComponent {
473
448
  i0.ɵɵadvance();
474
449
  i0.ɵɵproperty("ngForOf", ctx.jurisdictions);
475
450
  i0.ɵɵadvance(3);
476
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(25, 43, "Case type"));
451
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(14, 28, "Case type"));
477
452
  i0.ɵɵadvance(2);
478
453
  i0.ɵɵtwoWayProperty("ngModel", ctx.selected.caseType);
479
454
  i0.ɵɵproperty("disabled", ctx.isCaseTypesDropdownDisabled());
@@ -482,28 +457,33 @@ export class WorkbasketFiltersComponent {
482
457
  i0.ɵɵadvance();
483
458
  i0.ɵɵproperty("ngForOf", ctx.selectedJurisdictionCaseTypes);
484
459
  i0.ɵɵadvance(3);
485
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(32, 45, "State"));
460
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(21, 30, "State"));
486
461
  i0.ɵɵadvance(2);
487
462
  i0.ɵɵtwoWayProperty("ngModel", ctx.selected.caseState);
488
463
  i0.ɵɵproperty("disabled", ctx.isCaseStatesDropdownDisabled());
489
464
  i0.ɵɵadvance();
490
465
  i0.ɵɵproperty("ngValue", null);
491
466
  i0.ɵɵadvance();
492
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(36, 47, "Any"));
467
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(25, 32, "Any"));
493
468
  i0.ɵɵadvance(2);
494
469
  i0.ɵɵproperty("ngForOf", ctx.selectedCaseTypeStates);
495
470
  i0.ɵɵadvance();
496
471
  i0.ɵɵproperty("ngIf", ctx.isSearchableAndWorkbasketInputsReady());
497
- i0.ɵɵadvance(2);
498
- i0.ɵɵproperty("title", i0.ɵɵpipeBind1(41, 49, "Back to top"));
499
- i0.ɵɵattribute("aria-label", i0.ɵɵpipeBind1(42, 51, "Back to top"));
472
+ i0.ɵɵadvance();
473
+ i0.ɵɵproperty("disabled", ctx.isApplyButtonDisabled())("title", i0.ɵɵpipeBind1(29, 34, "Apply filter"));
474
+ i0.ɵɵattribute("aria-label", i0.ɵɵpipeBind1(30, 36, "Apply filter"));
475
+ i0.ɵɵadvance(3);
476
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(32, 38, "Apply"), " ");
477
+ i0.ɵɵadvance(3);
478
+ i0.ɵɵproperty("title", i0.ɵɵpipeBind1(35, 40, "Reset filter"));
479
+ i0.ɵɵattribute("aria-label", i0.ɵɵpipeBind1(36, 42, "Reset filter"));
500
480
  i0.ɵɵadvance(3);
501
- i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(44, 53, "Back to top"), " ");
502
- } }, styles: ["div[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{font-family:nta,Arial,sans-serif;font-weight:400;text-transform:none;font-size:11pt;line-height:1.2727272727}@media (min-width: 641px){div[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{font-size:12pt;line-height:1.3333333333}}.form-group[_ngcontent-%COMP%]{margin-bottom:7px}.form-group.flex[_ngcontent-%COMP%]{display:flex}.form-group.flex[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin:1rem .25rem .25rem;height:2.5rem}.ccd-dropdown[_ngcontent-%COMP%]{width:100%}span.heading-medium[_ngcontent-%COMP%]{margin-top:0}"] });
481
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(38, 44, "Reset"), " ");
482
+ } }, styles: ["div[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{font-family:nta,Arial,sans-serif;font-weight:400;text-transform:none;font-size:11pt;line-height:1.2727272727}@media (min-width: 641px){div[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{font-size:12pt;line-height:1.3333333333}}.form-group[_ngcontent-%COMP%]{margin-bottom:7px}.ccd-dropdown[_ngcontent-%COMP%]{width:100%}span.heading-medium[_ngcontent-%COMP%]{margin-top:0}"] });
503
483
  }
504
484
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WorkbasketFiltersComponent, [{
505
485
  type: Component,
506
- args: [{ selector: 'ccd-workbasket-filters', template: "<form id=\"filters\" class=\"global-display\">\n <div class=\"form-group flex\">\n <fieldset class=\"heading-h2\" aria-label=\"Filters\">{{'Filters' | rpxTranslate }}</fieldset>\n <button type=\"button\" class=\"button workbasket-filters-apply\" (click)=\"apply(true)\" [disabled]=\"isApplyButtonDisabled()\"\n [title]=\"'Apply filter' | rpxTranslate\" [attr.aria-label]=\"'Apply filter' | rpxTranslate\">\n {{'Apply' | rpxTranslate}}\n </button>\n <button type=\"button\" (click)=\"reset()\" class=\"button button-secondary\"\n [title]=\"'Reset filter' | rpxTranslate\" [attr.aria-label]=\"'Reset filter' | rpxTranslate\">\n {{'Reset' | rpxTranslate}}\n </button>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-jurisdiction\">{{'Jurisdiction' | rpxTranslate}}</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-jurisdiction\"\n name=\"jurisdiction\" [(ngModel)]=\"selected.jurisdiction\" aria-controls=\"search-result\"\n (change)=\"onJurisdictionIdChange()\">\n <option *ngIf=\"!workbasketDefaults\" [ngValue]=\"null\">{{'Select a value' | rpxTranslate}}</option>\n <option *ngFor=\"let j of jurisdictions\" [ngValue]=\"j\">{{j.name | rpxTranslate}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-case-type\">{{'Case type' | rpxTranslate}}</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-case-type\"\n name=\"case-type\" [(ngModel)]=\"selected.caseType\" [disabled]=\"isCaseTypesDropdownDisabled()\"\n (change)=\"onCaseTypeIdChange()\" aria-controls=\"search-result\">\n <option *ngIf=\"!workbasketDefaults\" [ngValue]=\"null\">{{'Select a value' | rpxTranslate}}</option>\n <option *ngFor=\"let ct of selectedJurisdictionCaseTypes\" [ngValue]=\"ct\">{{ct.name | rpxTranslate}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-case-state\">{{'State' | rpxTranslate}}</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-case-state\"\n name=\"state\" [(ngModel)]=\"selected.caseState\" [disabled]=\"isCaseStatesDropdownDisabled()\"\n aria-controls=\"search-result\">\n <option [ngValue]=\"null\">{{'Any' | rpxTranslate}}</option>\n <option *ngFor=\"let cs of selectedCaseTypeStates\" [ngValue]=\"cs\">{{cs.name | rpxTranslate}}</option>\n </select>\n </div>\n\n <ng-container ccdConditionalShowForm *ngIf=\"isSearchableAndWorkbasketInputsReady()\" [formGroup]=\"formGroup\" [contextFields]=\"caseFields\">\n <div id=\"dynamicFilters\">\n <div class=\"form-group\" *ngFor=\"let workbasketInput of workbasketInputs\">\n <ccd-field-write [caseField]=\"workbasketInput.field\" [formGroup]=\"formGroup\" [isExpanded]=\"true\" [isInSearchBlock]=\"true\" (keyup.enter)=\"apply(null)\">\n </ccd-field-write>\n </div>\n </div>\n </ng-container>\n\n <div class=\"form-group\">\n <button type=\"button\" class=\"button\" (click)=\"scrollToTop()\"\n [title]=\"'Back to top' | rpxTranslate\" [attr.aria-label]=\"'Back to top' | rpxTranslate\">{{'Back to top' | rpxTranslate}}\n </button>\n </div>\n</form>\n", styles: ["div select{font-family:nta,Arial,sans-serif;font-weight:400;text-transform:none;font-size:11pt;line-height:1.2727272727}@media (min-width: 641px){div select{font-size:12pt;line-height:1.3333333333}}.form-group{margin-bottom:7px}.form-group.flex{display:flex}.form-group.flex button{margin:1rem .25rem .25rem;height:2.5rem}.ccd-dropdown{width:100%}span.heading-medium{margin-top:0}\n"] }]
486
+ args: [{ selector: 'ccd-workbasket-filters', template: "<h2 class=\"heading-h2\" aria-label=\"Filters\">{{'Filters' | rpxTranslate }}</h2>\n\n<form class=\"global-display\">\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-jurisdiction\">{{'Jurisdiction' | rpxTranslate}}</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-jurisdiction\"\n name=\"jurisdiction\" [(ngModel)]=\"selected.jurisdiction\" aria-controls=\"search-result\"\n (change)=\"onJurisdictionIdChange()\">\n <option *ngIf=\"!workbasketDefaults\" [ngValue]=\"null\">{{'Select a value' | rpxTranslate}}</option>\n <option *ngFor=\"let j of jurisdictions\" [ngValue]=\"j\">{{j.name | rpxTranslate}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-case-type\">{{'Case type' | rpxTranslate}}</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-case-type\"\n name=\"case-type\" [(ngModel)]=\"selected.caseType\" [disabled]=\"isCaseTypesDropdownDisabled()\"\n (change)=\"onCaseTypeIdChange()\" aria-controls=\"search-result\">\n <option *ngIf=\"!workbasketDefaults\" [ngValue]=\"null\">{{'Select a value' | rpxTranslate}}</option>\n <option *ngFor=\"let ct of selectedJurisdictionCaseTypes\" [ngValue]=\"ct\">{{ct.name | rpxTranslate}}</option>\n </select>\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"wb-case-state\">{{'State' | rpxTranslate}}</label>\n <select class=\"form-control form-control-3-4 ccd-dropdown\" id=\"wb-case-state\"\n name=\"state\" [(ngModel)]=\"selected.caseState\" [disabled]=\"isCaseStatesDropdownDisabled()\"\n aria-controls=\"search-result\">\n <option [ngValue]=\"null\">{{'Any' | rpxTranslate}}</option>\n <option *ngFor=\"let cs of selectedCaseTypeStates\" [ngValue]=\"cs\">{{cs.name | rpxTranslate}}</option>\n </select>\n </div>\n\n <ng-container ccdConditionalShowForm *ngIf=\"isSearchableAndWorkbasketInputsReady()\" [formGroup]=\"formGroup\" [contextFields]=\"caseFields\">\n <div id=\"dynamicFilters\">\n <div class=\"form-group\" *ngFor=\"let workbasketInput of workbasketInputs\">\n <ccd-field-write [caseField]=\"workbasketInput.field\" [formGroup]=\"formGroup\" [isExpanded]=\"true\" [isInSearchBlock]=\"true\" (keyup.enter)=\"apply(null)\">\n </ccd-field-write>\n </div>\n </div>\n </ng-container>\n\n <button type=\"button\" class=\"button workbasket-filters-apply\" (click)=\"apply(true)\" [disabled]=\"isApplyButtonDisabled()\"\n [title]=\"'Apply filter' | rpxTranslate\" [attr.aria-label]=\"'Apply filter' | rpxTranslate\">\n {{'Apply' | rpxTranslate}}\n </button> &nbsp;&nbsp;&nbsp;\n <button type=\"button\" (click)=\"reset()\" class=\"button button-secondary\"\n [title]=\"'Reset filter' | rpxTranslate\" [attr.aria-label]=\"'Reset filter' | rpxTranslate\">\n {{'Reset' | rpxTranslate}}\n </button>\n</form>\n", styles: ["div select{font-family:nta,Arial,sans-serif;font-weight:400;text-transform:none;font-size:11pt;line-height:1.2727272727}@media (min-width: 641px){div select{font-size:12pt;line-height:1.3333333333}}.form-group{margin-bottom:7px}.ccd-dropdown{width:100%}span.heading-medium{margin-top:0}\n"] }]
507
487
  }], () => [{ type: i1.ActivatedRoute }, { type: i2.WorkbasketInputFilterService }, { type: i3.OrderService }, { type: i4.JurisdictionService }, { type: i5.AlertService }, { type: i6.WindowService }], { jurisdictions: [{
508
488
  type: Input
509
489
  }], defaults: [{
@@ -514,4 +494,4 @@ export class WorkbasketFiltersComponent {
514
494
  type: Output
515
495
  }] }); })();
516
496
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WorkbasketFiltersComponent, { className: "WorkbasketFiltersComponent", filePath: "lib/shared/components/workbasket-filters/workbasket-filters.component.ts", lineNumber: 26 }); })();
517
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Jhc2tldC1maWx0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy93b3JrYmFza2V0LWZpbHRlcnMvd29ya2Jhc2tldC1maWx0ZXJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy93b3JrYmFza2V0LWZpbHRlcnMvd29ya2Jhc2tldC1maWx0ZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFDekUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQzs7Ozs7Ozs7O0lDSW5HLGtDQUFxRDtJQUFBLFlBQW1DOztJQUFBLGlCQUFTOztJQUE3RCw4QkFBZ0I7SUFBQyxjQUFtQztJQUFu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QS9CLHFEQUErQjtZQUFDLDREQUEwQztZQUV4RixjQUF5QjtZQUF6Qiw4Q0FBeUI7WUFDWCxjQUFnQztZQUFoQywyREFBZ0M7WUFLWCxlQUEwQjtZQUExQixxREFBMEI7WUFFbkQsZUFBZ0M7WUFBaEMsc0RBQWdDO1lBQUMsNkRBQTJDO1lBRXZGLGNBQWdCO1lBQWhCLDhCQUFnQjtZQUFDLGNBQXdCO1lBQXhCLG1EQUF3QjtZQUMxQixlQUF5QjtZQUF6QixvREFBeUI7WUFJZCxjQUE0QztZQUE1QyxpRUFBNEM7WUFXMUUsZUFBc0M7WUFBdEMsNkRBQXNDOztZQUFrRCxlQUM5RjtZQUQ4RixxRUFDOUY7OztpRkQ5QlMsMEJBQTBCO2NBTHRDLFNBQVM7MkJBQ0Usd0JBQXdCOzhNQVczQixhQUFhO2tCQURuQixLQUFLO1lBSUMsUUFBUTtrQkFEZCxLQUFLO1lBSUMsT0FBTztrQkFEYixNQUFNO1lBSUEsT0FBTztrQkFEYixNQUFNOztrRkFmSSwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2FzZUZpZWxkIH0gZnJvbSAnLi4vLi4vZG9tYWluL2RlZmluaXRpb24vY2FzZS1maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBDYXNlU3RhdGUgfSBmcm9tICcuLi8uLi9kb21haW4vZGVmaW5pdGlvbi9jYXNlLXN0YXRlLm1vZGVsJztcbmltcG9ydCB7IENhc2VUeXBlTGl0ZSB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2Nhc2UtdHlwZS1saXRlLm1vZGVsJztcbmltcG9ydCB7IEp1cmlzZGljdGlvbiB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2p1cmlzZGljdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBXb3JrYmFza2V0SW5wdXRNb2RlbCB9IGZyb20gJy4uLy4uL2RvbWFpbi93b3JrYmFza2V0L3dvcmtiYXNrZXQtaW5wdXQubW9kZWwnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpZWxkcy9maWVsZHMudXRpbHMnO1xuaW1wb3J0IHsgSnVyaXNkaWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2p1cmlzZGljdGlvbi9qdXJpc2RpY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBPcmRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vcmRlci9vcmRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFdpbmRvd1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93aW5kb3cvd2luZG93LnNlcnZpY2UnO1xuaW1wb3J0IHsgV29ya2Jhc2tldElucHV0RmlsdGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dvcmtiYXNrZXQvd29ya2Jhc2tldC1pbnB1dC1maWx0ZXIuc2VydmljZSc7XG5cbmNvbnN0IEZPUk1fR1JPVVBfVkFMX0xPQ19TVE9SQUdFID0gJ3dvcmtiYXNrZXQtZmlsdGVyLWZvcm0tZ3JvdXAtdmFsdWUnO1xuY29uc3QgU0FWRURfUVVFUllfUEFSQU1fTE9DX1NUT1JBR0UgPSAnc2F2ZWRRdWVyeVBhcmFtcyc7XG5jb25zdCBSRUdJT05fTElTVF9BTkRfRlJDX0ZJTFRFUiA9ICdyZWdpb25MaXN0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLXdvcmtiYXNrZXQtZmlsdGVycycsXG4gIHRlbXBsYXRlVXJsOiAnLi93b3JrYmFza2V0LWZpbHRlcnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93b3JrYmFza2V0LWZpbHRlcnMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBXb3JrYmFza2V0RmlsdGVyc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUEFSQU1fSlVSSVNESUNUSU9OID0gJ2p1cmlzZGljdGlvbic7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUEFSQU1fQ0FTRV9UWVBFID0gJ2Nhc2UtdHlwZSc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUEFSQU1fQ0FTRV9TVEFURSA9ICdjYXNlLXN0YXRlJztcbiAgcHVibGljIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBqdXJpc2RpY3Rpb25zOiBKdXJpc2RpY3Rpb25bXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZGVmYXVsdHM7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvbkFwcGx5OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIG9uUmVzZXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyB3b3JrYmFza2V0SW5wdXRzOiBXb3JrYmFza2V0SW5wdXRNb2RlbFtdO1xuICBwdWJsaWMgd29ya2Jhc2tldElucHV0c1JlYWR5OiBib29sZWFuO1xuXG4gIHB1YmxpYyB3b3JrYmFza2V0RGVmYXVsdHM6IGJvb2xlYW47XG5cbiAgcHVibGljIHNlbGVjdGVkOiB7XG4gICAgaW5pdD86IGJvb2xlYW4sXG4gICAganVyaXNkaWN0aW9uPzogSnVyaXNkaWN0aW9uLFxuICAgIGNhc2VUeXBlPzogQ2FzZVR5cGVMaXRlLFxuICAgIGNhc2VTdGF0ZT86IENhc2VTdGF0ZSxcbiAgICBmb3JtR3JvdXA/OiBGb3JtR3JvdXAsXG4gICAgcGFnZT86IG51bWJlcixcbiAgICBtZXRhZGF0YUZpZWxkcz86IHN0cmluZ1tdXG4gIH07XG5cbiAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgcHVibGljIHNlbGVjdGVkSnVyaXNkaWN0aW9uQ2FzZVR5cGVzPzogQ2FzZVR5cGVMaXRlW107XG4gIHB1YmxpYyBzZWxlY3RlZENhc2VUeXBlU3RhdGVzPzogQ2FzZVN0YXRlW107XG5cbiAgcHVibGljIGluaXRpYWxpc2VkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSB3b3JrYmFza2V0SW5wdXRGaWx0ZXJTZXJ2aWNlOiBXb3JrYmFza2V0SW5wdXRGaWx0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3JkZXJTZXJ2aWNlOiBPcmRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBqdXJpc2RpY3Rpb25TZXJ2aWNlOiBKdXJpc2RpY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3dTZXJ2aWNlOiBXaW5kb3dTZXJ2aWNlKSB7XG4gIH1cblxuICBwdWJsaWMgc2Nyb2xsVG9Ub3AoKSB7XG4gICAgKGZ1bmN0aW9uIHNtb290aHNjcm9sbCgpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRTY3JvbGwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wO1xuICAgICAgaWYgKGN1cnJlbnRTY3JvbGwgPiAwKSB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc21vb3Roc2Nyb2xsKTtcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIGN1cnJlbnRTY3JvbGwgLSAoY3VycmVudFNjcm9sbCAvIDgpKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSB7fTtcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgaWYgKCF0aGlzLmluaXRpYWxpc2VkIHx8ICFwYXJhbXMgfHwgIU9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuaW5pdEZpbHRlcnMoZmFsc2UpO1xuICAgICAgICB0aGlzLmluaXRpYWxpc2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseShpbml0OiBib29sZWFuKTogdm9pZCB7XG4gICAgLy8gU2F2ZSBmaWx0ZXJzIGFzIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGN1cnJlbnQgcm91dGVcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHt9O1xuICAgIGlmICh0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbikge1xuICAgICAgcXVlcnlQYXJhbXNbV29ya2Jhc2tldEZpbHRlcnNDb21wb25lbnQuUEFSQU1fSlVSSVNESUNUSU9OXSA9IHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uLmlkO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZC5jYXNlVHlwZSkge1xuICAgICAgcXVlcnlQYXJhbXNbV29ya2Jhc2tldEZpbHRlcnNDb21wb25lbnQuUEFSQU1fQ0FTRV9UWVBFXSA9IHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUuaWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGVkLmNhc2VTdGF0ZSkge1xuICAgICAgcXVlcnlQYXJhbXNbV29ya2Jhc2tldEZpbHRlcnNDb21wb25lbnQuUEFSQU1fQ0FTRV9TVEFURV0gPSB0aGlzLnNlbGVjdGVkLmNhc2VTdGF0ZS5pZDtcbiAgICB9XG4gICAgLy8gd2l0aG91dCBleHBsaWNpdGx5IHByZXNlcnZpbmcgYWxlcnRzIGFueSBtZXNzYWdlIG9uIHRoZSBwYWdlXG4gICAgLy8gd291bGQgYmUgY2xlYXJlZCBvdXQgYmVjYXVzZSBvZiB0aGlzIGluaXRpYWwgbmF2aWdhdGlvbi5cbiAgICAvLyBUaGUgYWJvdmUgaXMgb25seSB0cnVlIGlmIG5vIGFsZXJ0cyB3ZXJlIHNldCBwcmlvciB0byBsb2FkaW5nIGNhc2UgbGlzdCBwYWdlLlxuICAgIGlmICghdGhpcy5hbGVydFNlcnZpY2UuaXNQcmVzZXJ2ZUFsZXJ0cygpKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zZXRQcmVzZXJ2ZUFsZXJ0cyghdGhpcy5pbml0aWFsaXNlZCk7XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkLmZvcm1Hcm91cCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oRk9STV9HUk9VUF9WQUxfTE9DX1NUT1JBR0UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlIGZvcm0gZ3JvdXAgZmlsdGVyc1xuICAgICAgdGhpcy51cGRhdGVGb3JtR3JvdXBGaWx0ZXJzKCk7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWQuZm9ybUdyb3VwID0gdGhpcy5mb3JtR3JvdXA7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWQuaW5pdCA9IGluaXQ7XG4gICAgdGhpcy5zZWxlY3RlZC5wYWdlID0gMTtcbiAgICB0aGlzLnNlbGVjdGVkLm1ldGFkYXRhRmllbGRzID0gdGhpcy5nZXRNZXRhZGF0YUZpZWxkcygpO1xuICAgIGlmIChpbml0KSB7XG4gICAgICB0aGlzLndpbmRvd1NlcnZpY2Uuc2V0TG9jYWxTdG9yYWdlKFNBVkVEX1FVRVJZX1BBUkFNX0xPQ19TVE9SQUdFLCBKU09OLnN0cmluZ2lmeShxdWVyeVBhcmFtcykpO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEZpbmQgYWxsIFwic3BlY2lhbCBjYXNlXCIgSnVkaWNpYWxVc2VyIEZvcm1Db250cm9sIGtleXMgYW5kIHJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgZnJvbSB0aGVcbiAgICAgICAgLy8gRm9ybUdyb3VwIHZhbHVlIGJlY2F1c2UgdGhlc2UgdmFsdWVzIGFyZSBub3QgaW50ZW5kZWQgdG8gYmUgc3RvcmVkIGFuZCBzdWJzZXF1ZW50bHkgcGFzc2VkIGFzIHF1ZXJ5IHN0cmluZ1xuICAgICAgICAvLyBwYXJhbWV0ZXJzIHdoZW4gY2FsbGluZyBzZWFyY2hDYXNlcyBBUEkgZW5kcG9pbnRcbiAgICAgICAgY29uc3QganVkaWNpYWxVc2VyQ29udHJvbFZhbHVlc1RvUmVtb3ZlID1cbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykuZmlsdGVyKChrZXkpID0+IGtleS5lbmRzV2l0aCgnX2p1ZGljaWFsVXNlckNvbnRyb2wnKSk7XG4gICAgICAgIGp1ZGljaWFsVXNlckNvbnRyb2xWYWx1ZXNUb1JlbW92ZS5mb3JFYWNoKChjb250cm9sS2V5KSA9PiBkZWxldGUgdGhpcy5mb3JtR3JvdXAudmFsdWVbY29udHJvbEtleV0pO1xuICAgICAgICB0aGlzLndpbmRvd1NlcnZpY2Uuc2V0TG9jYWxTdG9yYWdlKEZPUk1fR1JPVVBfVkFMX0xPQ19TVE9SQUdFLCBKU09OLnN0cmluZ2lmeSh0aGlzLmZvcm1Hcm91cC52YWx1ZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBBbm5vdW5jZSBzZWxlY3RlZCBqdXJpc2RpY3Rpb24gdmlhIEp1cmlzZGljdGlvblNlcnZpY2VcbiAgICBpZiAodGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24pIHtcbiAgICAgIC8vIFNldCB0aGUgc2VsZWN0ZWQgY2FzZSB0eXBlIGFzIHRoZSBjdXJyZW50IGNhc2UgdHlwZSBvZiB0aGUgc2VsZWN0ZWQganVyaXNkaWN0aW9uXG4gICAgICB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbi5jdXJyZW50Q2FzZVR5cGUgPSB0aGlzLnNlbGVjdGVkLmNhc2VUeXBlO1xuICAgICAgdGhpcy5qdXJpc2RpY3Rpb25TZXJ2aWNlLmFubm91bmNlU2VsZWN0ZWRKdXJpc2RpY3Rpb24odGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24pO1xuICAgIH1cbiAgICAvLyBBcHBseSBmaWx0ZXJzXG4gICAgdGhpcy5vbkFwcGx5LmVtaXQoeyBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCwgcXVlcnlQYXJhbXMgfSk7XG4gICAgdGhpcy5zZXRGb2N1c1RvVG9wKCk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy53aW5kb3dTZXJ2aWNlLnJlbW92ZUxvY2FsU3RvcmFnZShGT1JNX0dST1VQX1ZBTF9MT0NfU1RPUkFHRSk7XG4gICAgdGhpcy53aW5kb3dTZXJ2aWNlLnJlbW92ZUxvY2FsU3RvcmFnZShTQVZFRF9RVUVSWV9QQVJBTV9MT0NfU1RPUkFHRSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlc2V0RmllbGRzV2hlbk5vRGVmYXVsdHMoKTtcbiAgICAgIHRoaXMub25SZXNldC5lbWl0KHRydWUpO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TWV0YWRhdGFGaWVsZHMoKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLndvcmtiYXNrZXRJbnB1dHMpIHtcbiAgICAgIHJldHVybiB0aGlzLndvcmtiYXNrZXRJbnB1dHNcbiAgICAgICAgLmZpbHRlcih3b3JrYmFza2V0SW5wdXQgPT4gd29ya2Jhc2tldElucHV0LmZpZWxkLm1ldGFkYXRhID09PSB0cnVlKVxuICAgICAgICAubWFwKHdvcmtiYXNrZXRJbnB1dCA9PiB3b3JrYmFza2V0SW5wdXQuZmllbGQuaWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkp1cmlzZGljdGlvbklkQ2hhbmdlKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbikge1xuICAgICAgdGhpcy5qdXJpc2RpY3Rpb25TZXJ2aWNlLmFubm91bmNlU2VsZWN0ZWRKdXJpc2RpY3Rpb24odGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24pO1xuICAgICAgdGhpcy5zZWxlY3RlZEp1cmlzZGljdGlvbkNhc2VUeXBlcyA9IHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uLmNhc2VUeXBlcy5sZW5ndGggPiAwID8gdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24uY2FzZVR5cGVzIDogbnVsbDtcbiAgICAgIC8vIExpbmUgd2FzIHRvbyBsb25nIGZvciBsaW50aW5nIHNvIHJlZmFjdG9yZWQgaXQuXG4gICAgICBpZiAodGhpcy53b3JrYmFza2V0RGVmYXVsdHMgJiYgdGhpcy5zZWxlY3RlZEp1cmlzZGljdGlvbkNhc2VUeXBlcykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkLmNhc2VUeXBlID0gdGhpcy5zZWxlY3RlZEp1cmlzZGljdGlvbkNhc2VUeXBlc1swXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNlbGVjdGVkLmNhc2VTdGF0ZSA9IG51bGw7XG4gICAgICB0aGlzLmNsZWFyV29ya2Jhc2tldElucHV0cygpO1xuXG4gICAgICBpZiAoIXRoaXMuaXNBcHBseUJ1dHRvbkRpc2FibGVkKCkpIHtcbiAgICAgICAgdGhpcy5vbkNhc2VUeXBlSWRDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNldENhc2VUeXBlKCk7XG4gICAgICB0aGlzLnJlc2V0Q2FzZVN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uQ2FzZVR5cGVJZENoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZC5jYXNlVHlwZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENhc2VUeXBlU3RhdGVzID0gdGhpcy5zb3J0U3RhdGVzKHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUuc3RhdGVzKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuY2FzZVN0YXRlID0gbnVsbDtcbiAgICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgICB0aGlzLmNsZWFyV29ya2Jhc2tldElucHV0cygpO1xuICAgICAgaWYgKCF0aGlzLmlzQXBwbHlCdXR0b25EaXNhYmxlZCgpKSB7XG4gICAgICAgIHRoaXMud29ya2Jhc2tldElucHV0RmlsdGVyU2VydmljZS5nZXRXb3JrYmFza2V0SW5wdXRzKHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uLmlkLCB0aGlzLnNlbGVjdGVkLmNhc2VUeXBlLmlkKS5waXBlKFxuICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgKS5zdWJzY3JpYmUod29ya2Jhc2tldElucHV0cyA9PiB7XG4gICAgICAgICAgdGhpcy53b3JrYmFza2V0SW5wdXRzUmVhZHkgPSB0cnVlO1xuICAgICAgICAgIHRoaXMud29ya2Jhc2tldElucHV0cyA9IHdvcmtiYXNrZXRJbnB1dHNcbiAgICAgICAgICAgIC5zb3J0KHRoaXMub3JkZXJTZXJ2aWNlLnNvcnRBc2MpO1xuICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMud2luZG93U2VydmljZS5nZXRMb2NhbFN0b3JhZ2UoRk9STV9HUk9VUF9WQUxfTE9DX1NUT1JBR0UpO1xuXG4gICAgICAgICAgd29ya2Jhc2tldElucHV0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uZmllbGQuZWxlbWVudFBhdGgpIHtcbiAgICAgICAgICAgICAgaXRlbS5maWVsZC5pZCA9IGAke2l0ZW0uZmllbGQuaWR9LiR7aXRlbS5maWVsZC5lbGVtZW50UGF0aH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbS5maWVsZC5sYWJlbCA9IGl0ZW0ubGFiZWw7XG4gICAgICAgICAgICBpZiAoZm9ybVZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNlYXJjaEZvcm1WYWx1ZU9iamVjdCA9IEpTT04ucGFyc2UoZm9ybVZhbHVlKTtcbiAgICAgICAgICAgICAgaXRlbS5maWVsZC52YWx1ZSA9IHNlYXJjaEZvcm1WYWx1ZU9iamVjdFtpdGVtLmZpZWxkLmlkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmdldENhc2VGaWVsZHMoKTtcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdXb3JrYmFza2V0IGlucHV0IGZpZWxkcyByZXF1ZXN0IHdpbGwgYmUgZGlzY2FyZGVkIHJlYXNvbjogJywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc2V0Q2FzZVN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzQ2FzZVR5cGVzRHJvcGRvd25EaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXM7XG4gIH1cblxuICBwdWJsaWMgaXNDYXNlU3RhdGVzRHJvcGRvd25EaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUgfHwgISh0aGlzLnNlbGVjdGVkLmNhc2VUeXBlLnN0YXRlcyAmJiB0aGlzLnNlbGVjdGVkLmNhc2VUeXBlLnN0YXRlcy5sZW5ndGggPiAwKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0FwcGx5QnV0dG9uRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24gJiYgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSk7XG4gIH1cblxuICBwdWJsaWMgaXNTZWFyY2hhYmxlQW5kV29ya2Jhc2tldElucHV0c1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbiAmJiB0aGlzLnNlbGVjdGVkLmNhc2VUeXBlICYmIHRoaXMud29ya2Jhc2tldElucHV0c1JlYWR5O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY2xlYXIgdGhlIHByZXZpb3VzbHkgdXNlZFxuICAgKiBmb3JtIGdyb3VwIGNvbnRyb2wgZmlsdGVyIHZhbHVlcyB0byBtYWtlIHN1cmUgb25seSB0aGVcbiAgICogY3VycmVudGx5IHNlbGVjdGVkIGZvcm0gZ3JvdXAgY29udHJvbCBmaWx0ZXIgdmFsdWVzIGFyZSBwcmVzZW50LlxuICAgKlxuICAgKiBIYXMgYmVlbiBpbXBsZW1lbnRlZCBmb3IgJ1JlZ2lvbiBhbmQgRlJDIGZpbHRlcnMnIGFuZCBjYW4gYmUgZXh0ZW5kZWRcbiAgICogaW4gZnV0dXJlIHRvIGluY29ycG9yYXRlIG90aGVyIGR5bmFtaWMgZmlsdGVycy5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGVGb3JtR3JvdXBGaWx0ZXJzKCk6IHZvaWQge1xuICAgIC8vIFJlYWQgdGhlIGZvcm0gZ3JvdXAgbG9jYWwgc3RvcmFnZVxuICAgIGNvbnN0IGZvcm1Hcm91cExTID0gSlNPTi5wYXJzZSh0aGlzLndpbmRvd1NlcnZpY2UuZ2V0TG9jYWxTdG9yYWdlKEZPUk1fR1JPVVBfVkFMX0xPQ19TVE9SQUdFKSk7XG5cbiAgICAvLyBGb3JtIGdyb3VwIGxvY2FsIHN0b3JhZ2UgaXMgYXZhaWxhYmxlIGFuZCBjb250YWlucyByZWdpb25MaXN0IHByb3BlcnR5XG4gICAgaWYgKCEhZm9ybUdyb3VwTFMgJiYgZm9ybUdyb3VwTFMuaGFzT3duUHJvcGVydHkoUkVHSU9OX0xJU1RfQU5EX0ZSQ19GSUxURVIpKSB7XG4gICAgICBpZiAodGhpcy5mb3JtR3JvdXAuZ2V0KFJFR0lPTl9MSVNUX0FORF9GUkNfRklMVEVSKSkge1xuICAgICAgICAvLyBJZiByZWdpb25MaXN0IHZhbHVlIGRvZXMgbm90IG1hdGNoIGJldHdlZW4gbG9jYWwgc3RvcmFnZSBhbmQgZm9ybSBncm91cFxuICAgICAgICAvLyB0aGVuIHRoZSBmaWx0ZXIgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCBhbmQgd2UgbmVlZCB0byBjbGVhciB0aGUgb2xkIGZpbHRlciB2YWx1ZXNcbiAgICAgICAgaWYgKGZvcm1Hcm91cExTW1JFR0lPTl9MSVNUX0FORF9GUkNfRklMVEVSXSAhPT0gdGhpcy5mb3JtR3JvdXAuZ2V0KFJFR0lPTl9MSVNUX0FORF9GUkNfRklMVEVSKS52YWx1ZSkge1xuICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGZvcm1Hcm91cExTKSB7XG4gICAgICAgICAgICBpZiAoZm9ybUdyb3VwTFMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1Hcm91cExTW2tleV07XG4gICAgICAgICAgICAgIC8vIENsZWFyIHRoZSBmaWx0ZXIgZm9ybSBncm91cCBjb250cm9sIHZhbHVlcyBpZiBpdCBoYXMgYSB2YWx1ZSBpbiBsb2NhbCBzdG9yYWdlXG4gICAgICAgICAgICAgIC8vIFRoZSByZWdpb25MaXN0IGZvcm0gZ3JvdXAgY29udHJvbCB2YWx1ZSBzaG91bGQgYmUgaWdub3JlZCBhcyBpdCBhbHdheXMgY29udGFpbiB0aGUgbGF0ZXN0IHZhbHVlXG4gICAgICAgICAgICAgIGlmIChrZXkgIT09IFJFR0lPTl9MSVNUX0FORF9GUkNfRklMVEVSICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGtleSkuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNvcnRTdGF0ZXMoc3RhdGVzOiBDYXNlU3RhdGVbXSkge1xuICAgIHJldHVybiBzdGF0ZXMuc29ydCh0aGlzLm9yZGVyU2VydmljZS5zb3J0QXNjKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gaW5pdGlhbGlzZSBmaWx0ZXJzIGJhc2VkIG9uIHF1ZXJ5IHBhcmFtZXRlcnMgb3Igd29ya2Jhc2tldCBkZWZhdWx0cy5cbiAgICogUXVlcnkgcGFyYW1ldGVycywgd2hlbiBhdmFpbGFibGUsIHRha2UgcHJlY2VkZW5jZSBvdmVyIHdvcmtiYXNrZXQgZGVmYXVsdHMuXG4gICAqL1xuICBwcml2YXRlIGluaXRGaWx0ZXJzKGluaXQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBzYXZlZFF1ZXJ5UGFyYW1zID0gdGhpcy53aW5kb3dTZXJ2aWNlLmdldExvY2FsU3RvcmFnZShTQVZFRF9RVUVSWV9QQVJBTV9MT0NfU1RPUkFHRSk7XG4gICAgY29uc3Qgcm91dGVTbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCA9IHRoaXMucm91dGUuc25hcHNob3Q7XG4gICAgaWYgKHNhdmVkUXVlcnlQYXJhbXMpIHtcbiAgICAgIHJvdXRlU25hcHNob3QucXVlcnlQYXJhbXMgPSBKU09OLnBhcnNlKHNhdmVkUXVlcnlQYXJhbXMpO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZEp1cmlzZGljdGlvbklkID0gcm91dGVTbmFwc2hvdC5xdWVyeVBhcmFtc1tXb3JrYmFza2V0RmlsdGVyc0NvbXBvbmVudC5QQVJBTV9KVVJJU0RJQ1RJT05dIHx8XG4gICAgICAodGhpcy5kZWZhdWx0cyAmJiB0aGlzLmRlZmF1bHRzLmp1cmlzZGljdGlvbl9pZCk7XG4gICAgaWYgKHNlbGVjdGVkSnVyaXNkaWN0aW9uSWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uID0gdGhpcy5qdXJpc2RpY3Rpb25zLmZpbmQoaiA9PiBzZWxlY3RlZEp1cmlzZGljdGlvbklkID09PSBqLmlkKTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbiAmJiB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbi5jYXNlVHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSnVyaXNkaWN0aW9uQ2FzZVR5cGVzID0gdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24uY2FzZVR5cGVzO1xuICAgICAgICB0aGlzLnNlbGVjdGVkLmNhc2VUeXBlID0gdGhpcy5zZWxlY3RDYXNlVHlwZSh0aGlzLnNlbGVjdGVkLCB0aGlzLnNlbGVjdGVkSnVyaXNkaWN0aW9uQ2FzZVR5cGVzLCByb3V0ZVNuYXBzaG90KTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUpIHtcbiAgICAgICAgICB0aGlzLm9uQ2FzZVR5cGVJZENoYW5nZSgpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuY2FzZVN0YXRlID0gdGhpcy5zZWxlY3RDYXNlU3RhdGUodGhpcy5zZWxlY3RlZC5jYXNlVHlwZSwgcm91dGVTbmFwc2hvdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53b3JrYmFza2V0RGVmYXVsdHMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbiA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuYXBwbHkoaW5pdCk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdENhc2VTdGF0ZShjYXNlVHlwZTogQ2FzZVR5cGVMaXRlLCByb3V0ZVNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogQ2FzZVN0YXRlIHtcbiAgICBsZXQgY2FzZVN0YXRlO1xuICAgIGlmIChjYXNlVHlwZSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRDYXNlU3RhdGVJZCA9IHRoaXMuc2VsZWN0Q2FzZVN0YXRlSWRGcm9tUXVlcnlPckRlZmF1bHRzKHJvdXRlU25hcHNob3QsICh0aGlzLmRlZmF1bHRzICYmIHRoaXMuZGVmYXVsdHMuc3RhdGVfaWQpKTtcbiAgICAgIGNhc2VTdGF0ZSA9IGNhc2VUeXBlLnN0YXRlcy5maW5kKGN0ID0+IHNlbGVjdGVkQ2FzZVN0YXRlSWQgPT09IGN0LmlkKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhc2VTdGF0ZSA/IGNhc2VTdGF0ZSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdENhc2VTdGF0ZUlkRnJvbVF1ZXJ5T3JEZWZhdWx0cyhyb3V0ZVNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBkZWZhdWx0Q2FzZVN0YXRlSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJvdXRlU25hcHNob3QucXVlcnlQYXJhbXNbV29ya2Jhc2tldEZpbHRlcnNDb21wb25lbnQuUEFSQU1fQ0FTRV9TVEFURV0gfHwgZGVmYXVsdENhc2VTdGF0ZUlkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RDYXNlVHlwZShzZWxlY3RlZDogYW55LCBjYXNlVHlwZXM6IENhc2VUeXBlTGl0ZVtdLCByb3V0ZVNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogQ2FzZVR5cGVMaXRlIHtcbiAgICBsZXQgY2FzZVR5cGU7XG4gICAgaWYgKHNlbGVjdGVkLmp1cmlzZGljdGlvbikge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRDYXNlVHlwZUlkID0gdGhpcy5zZWxlY3RDYXNlVHlwZUlkRnJvbVF1ZXJ5T3JEZWZhdWx0cyhyb3V0ZVNuYXBzaG90LCAodGhpcy5kZWZhdWx0cyAmJiB0aGlzLmRlZmF1bHRzLmNhc2VfdHlwZV9pZCkpO1xuICAgICAgY2FzZVR5cGUgPSBjYXNlVHlwZXMuZmluZChjdCA9PiBzZWxlY3RlZENhc2VUeXBlSWQgPT09IGN0LmlkKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhc2VUeXBlID8gY2FzZVR5cGUgOiBjYXNlVHlwZXNbMF07XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdENhc2VUeXBlSWRGcm9tUXVlcnlPckRlZmF1bHRzKHJvdXRlU25hcHNob3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIGRlZmF1bHRDYXNlVHlwZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiByb3V0ZVNuYXBzaG90LnF1ZXJ5UGFyYW1zW1dvcmtiYXNrZXRGaWx0ZXJzQ29tcG9uZW50LlBBUkFNX0NBU0VfVFlQRV0gfHwgZGVmYXVsdENhc2VUeXBlSWQ7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RmllbGRzV2hlbk5vRGVmYXVsdHMoKSB7XG4gICAgdGhpcy5yZXNldENhc2VTdGF0ZSgpO1xuICAgIHRoaXMucmVzZXRDYXNlVHlwZSgpO1xuICAgIHRoaXMuY2xlYXJXb3JrYmFza2V0SW5wdXRzKCk7XG4gICAgdGhpcy53b3JrYmFza2V0RGVmYXVsdHMgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbiA9IG51bGw7XG4gICAgdGhpcy5pbml0aWFsaXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuaW5pdEZpbHRlcnModHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyV29ya2Jhc2tldElucHV0cygpIHtcbiAgICB0aGlzLndvcmtiYXNrZXRJbnB1dHNSZWFkeSA9IGZhbHNlO1xuICAgIHRoaXMud29ya2Jhc2tldElucHV0cyA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldENhc2VTdGF0ZSgpIHtcbiAgICB0aGlzLmRlZmF1bHRzLnN0YXRlX2lkID0gbnVsbDtcbiAgICB0aGlzLnNlbGVjdGVkLmNhc2VTdGF0ZSA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZENhc2VUeXBlU3RhdGVzID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRDYXNlVHlwZSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkLmNhc2VUeXBlID0gdW5kZWZpbmVkOyAvLyBvcHRpb24gc2hvdWxkIGJlIGJsYW5rIHJhdGhlciB0aGFuIFwiU2VsZWN0IGEgdmFsdWVcIiBpbiBjYXNlIG9mIHJlc2V0LlxuICAgIHRoaXMuc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXMgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c1RvVG9wKCkge1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcblxuICAgIGNvbnN0IHRvcENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWFyY2gtcmVzdWx0LWhlYWRpbmdfX3RleHQnKTtcbiAgICBpZiAodG9wQ29udGFpbmVyKSB7XG4gICAgICB0b3BDb250YWluZXIuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENhc2VGaWVsZHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud29ya2Jhc2tldElucHV0cykge1xuICAgICAgdGhpcy5jYXNlRmllbGRzID0gdGhpcy53b3JrYmFza2V0SW5wdXRzLm1hcChpdGVtID0+IEZpZWxkc1V0aWxzLmNvbnZlcnRUb0Nhc2VGaWVsZChpdGVtLmZpZWxkKSk7XG4gICAgfVxuICB9XG59XG4iLCI8Zm9ybSBpZD1cImZpbHRlcnNcIiBjbGFzcz1cImdsb2JhbC1kaXNwbGF5XCI+XG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZsZXhcIj5cbiAgICA8ZmllbGRzZXQgY2xhc3M9XCJoZWFkaW5nLWgyXCIgYXJpYS1sYWJlbD1cIkZpbHRlcnNcIj57eydGaWx0ZXJzJyB8IHJweFRyYW5zbGF0ZSB9fTwvZmllbGRzZXQ+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidXR0b24gd29ya2Jhc2tldC1maWx0ZXJzLWFwcGx5XCIgKGNsaWNrKT1cImFwcGx5KHRydWUpXCIgW2Rpc2FibGVkXT1cImlzQXBwbHlCdXR0b25EaXNhYmxlZCgpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInQXBwbHkgZmlsdGVyJyB8IHJweFRyYW5zbGF0ZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FwcGx5IGZpbHRlcicgfCBycHhUcmFuc2xhdGVcIj5cbiAgICAgIHt7J0FwcGx5JyB8IHJweFRyYW5zbGF0ZX19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInJlc2V0KClcIiBjbGFzcz1cImJ1dHRvbiBidXR0b24tc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInUmVzZXQgZmlsdGVyJyB8IHJweFRyYW5zbGF0ZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1Jlc2V0IGZpbHRlcicgfCBycHhUcmFuc2xhdGVcIj5cbiAgICAgIHt7J1Jlc2V0JyB8IHJweFRyYW5zbGF0ZX19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cIndiLWp1cmlzZGljdGlvblwiPnt7J0p1cmlzZGljdGlvbicgfCBycHhUcmFuc2xhdGV9fTwvbGFiZWw+XG4gICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtMy00IGNjZC1kcm9wZG93blwiIGlkPVwid2ItanVyaXNkaWN0aW9uXCJcbiAgICAgICAgICAgIG5hbWU9XCJqdXJpc2RpY3Rpb25cIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkLmp1cmlzZGljdGlvblwiIGFyaWEtY29udHJvbHM9XCJzZWFyY2gtcmVzdWx0XCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25KdXJpc2RpY3Rpb25JZENoYW5nZSgpXCI+XG4gICAgICA8b3B0aW9uICpuZ0lmPVwiIXdvcmtiYXNrZXREZWZhdWx0c1wiIFtuZ1ZhbHVlXT1cIm51bGxcIj57eydTZWxlY3QgYSB2YWx1ZScgfCBycHhUcmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaiBvZiBqdXJpc2RpY3Rpb25zXCIgW25nVmFsdWVdPVwialwiPnt7ai5uYW1lIHwgcnB4VHJhbnNsYXRlfX08L29wdGlvbj5cbiAgICA8L3NlbGVjdD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwid2ItY2FzZS10eXBlXCI+e3snQ2FzZSB0eXBlJyB8IHJweFRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC0zLTQgY2NkLWRyb3Bkb3duXCIgaWQ9XCJ3Yi1jYXNlLXR5cGVcIlxuICAgICAgICAgICAgbmFtZT1cImNhc2UtdHlwZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWQuY2FzZVR5cGVcIiBbZGlzYWJsZWRdPVwiaXNDYXNlVHlwZXNEcm9wZG93bkRpc2FibGVkKClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNhc2VUeXBlSWRDaGFuZ2UoKVwiIGFyaWEtY29udHJvbHM9XCJzZWFyY2gtcmVzdWx0XCI+XG4gICAgICA8b3B0aW9uICpuZ0lmPVwiIXdvcmtiYXNrZXREZWZhdWx0c1wiIFtuZ1ZhbHVlXT1cIm51bGxcIj57eydTZWxlY3QgYSB2YWx1ZScgfCBycHhUcmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY3Qgb2Ygc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXNcIiBbbmdWYWx1ZV09XCJjdFwiPnt7Y3QubmFtZSB8IHJweFRyYW5zbGF0ZX19PC9vcHRpb24+XG4gICAgPC9zZWxlY3Q+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cIndiLWNhc2Utc3RhdGVcIj57eydTdGF0ZScgfCBycHhUcmFuc2xhdGV9fTwvbGFiZWw+XG4gICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtMy00IGNjZC1kcm9wZG93blwiIGlkPVwid2ItY2FzZS1zdGF0ZVwiXG4gICAgICAgICAgICBuYW1lPVwic3RhdGVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkLmNhc2VTdGF0ZVwiIFtkaXNhYmxlZF09XCJpc0Nhc2VTdGF0ZXNEcm9wZG93bkRpc2FibGVkKClcIlxuICAgICAgICAgICAgYXJpYS1jb250cm9scz1cInNlYXJjaC1yZXN1bHRcIj5cbiAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwibnVsbFwiPnt7J0FueScgfCBycHhUcmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY3Mgb2Ygc2VsZWN0ZWRDYXNlVHlwZVN0YXRlc1wiIFtuZ1ZhbHVlXT1cImNzXCI+e3tjcy5uYW1lIHwgcnB4VHJhbnNsYXRlfX08L29wdGlvbj5cbiAgICA8L3NlbGVjdD5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciBjY2RDb25kaXRpb25hbFNob3dGb3JtICpuZ0lmPVwiaXNTZWFyY2hhYmxlQW5kV29ya2Jhc2tldElucHV0c1JlYWR5KClcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIFtjb250ZXh0RmllbGRzXT1cImNhc2VGaWVsZHNcIj5cbiAgICA8ZGl2IGlkPVwiZHluYW1pY0ZpbHRlcnNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nRm9yPVwibGV0IHdvcmtiYXNrZXRJbnB1dCBvZiB3b3JrYmFza2V0SW5wdXRzXCI+XG4gICAgICAgIDxjY2QtZmllbGQtd3JpdGUgW2Nhc2VGaWVsZF09XCJ3b3JrYmFza2V0SW5wdXQuZmllbGRcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIFtpc0V4cGFuZGVkXT1cInRydWVcIiBbaXNJblNlYXJjaEJsb2NrXT1cInRydWVcIiAoa2V5dXAuZW50ZXIpPVwiYXBwbHkobnVsbClcIj5cbiAgICAgICAgPC9jY2QtZmllbGQtd3JpdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJzY3JvbGxUb1RvcCgpXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0JhY2sgdG8gdG9wJyB8IHJweFRyYW5zbGF0ZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0JhY2sgdG8gdG9wJyB8IHJweFRyYW5zbGF0ZVwiPnt7J0JhY2sgdG8gdG9wJyB8IHJweFRyYW5zbGF0ZX19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19
497
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Jhc2tldC1maWx0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy93b3JrYmFza2V0LWZpbHRlcnMvd29ya2Jhc2tldC1maWx0ZXJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy93b3JrYmFza2V0LWZpbHRlcnMvd29ya2Jhc2tldC1maWx0ZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFDekUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQzs7Ozs7Ozs7O0lDTm5HLGtDQUFxRDtJQUFBLFlBQW1DOztJQUFBLGlCQUFTOztJQUE3RCw4QkFBZ0I7SUFBQyxjQUFtQztJQUFu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bnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDYXNlRmllbGQgfSBmcm9tICcuLi8uLi9kb21haW4vZGVmaW5pdGlvbi9jYXNlLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7IENhc2VTdGF0ZSB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2Nhc2Utc3RhdGUubW9kZWwnO1xuaW1wb3J0IHsgQ2FzZVR5cGVMaXRlIH0gZnJvbSAnLi4vLi4vZG9tYWluL2RlZmluaXRpb24vY2FzZS10eXBlLWxpdGUubW9kZWwnO1xuaW1wb3J0IHsgSnVyaXNkaWN0aW9uIH0gZnJvbSAnLi4vLi4vZG9tYWluL2RlZmluaXRpb24vanVyaXNkaWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IFdvcmtiYXNrZXRJbnB1dE1vZGVsIH0gZnJvbSAnLi4vLi4vZG9tYWluL3dvcmtiYXNrZXQvd29ya2Jhc2tldC1pbnB1dC5tb2RlbCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbGVydC9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmllbGRzL2ZpZWxkcy51dGlscyc7XG5pbXBvcnQgeyBKdXJpc2RpY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvanVyaXNkaWN0aW9uL2p1cmlzZGljdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29yZGVyL29yZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2luZG93U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dpbmRvdy93aW5kb3cuc2VydmljZSc7XG5pbXBvcnQgeyBXb3JrYmFza2V0SW5wdXRGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd29ya2Jhc2tldC93b3JrYmFza2V0LWlucHV0LWZpbHRlci5zZXJ2aWNlJztcblxuY29uc3QgRk9STV9HUk9VUF9WQUxfTE9DX1NUT1JBR0UgPSAnd29ya2Jhc2tldC1maWx0ZXItZm9ybS1ncm91cC12YWx1ZSc7XG5jb25zdCBTQVZFRF9RVUVSWV9QQVJBTV9MT0NfU1RPUkFHRSA9ICdzYXZlZFF1ZXJ5UGFyYW1zJztcbmNvbnN0IFJFR0lPTl9MSVNUX0FORF9GUkNfRklMVEVSID0gJ3JlZ2lvbkxpc3QnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2Qtd29ya2Jhc2tldC1maWx0ZXJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dvcmtiYXNrZXQtZmlsdGVycy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dvcmtiYXNrZXQtZmlsdGVycy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFdvcmtiYXNrZXRGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQQVJBTV9KVVJJU0RJQ1RJT04gPSAnanVyaXNkaWN0aW9uJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQQVJBTV9DQVNFX1RZUEUgPSAnY2FzZS10eXBlJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQQVJBTV9DQVNFX1NUQVRFID0gJ2Nhc2Utc3RhdGUnO1xuICBwdWJsaWMgY2FzZUZpZWxkczogQ2FzZUZpZWxkW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIGp1cmlzZGljdGlvbnM6IEp1cmlzZGljdGlvbltdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkZWZhdWx0cztcblxuICBAT3V0cHV0KClcbiAgcHVibGljIG9uQXBwbHk6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25SZXNldDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIHdvcmtiYXNrZXRJbnB1dHM6IFdvcmtiYXNrZXRJbnB1dE1vZGVsW107XG4gIHB1YmxpYyB3b3JrYmFza2V0SW5wdXRzUmVhZHk6IGJvb2xlYW47XG5cbiAgcHVibGljIHdvcmtiYXNrZXREZWZhdWx0czogYm9vbGVhbjtcblxuICBwdWJsaWMgc2VsZWN0ZWQ6IHtcbiAgICBpbml0PzogYm9vbGVhbixcbiAgICBqdXJpc2RpY3Rpb24/OiBKdXJpc2RpY3Rpb24sXG4gICAgY2FzZVR5cGU/OiBDYXNlVHlwZUxpdGUsXG4gICAgY2FzZVN0YXRlPzogQ2FzZVN0YXRlLFxuICAgIGZvcm1Hcm91cD86IEZvcm1Hcm91cCxcbiAgICBwYWdlPzogbnVtYmVyLFxuICAgIG1ldGFkYXRhRmllbGRzPzogc3RyaW5nW11cbiAgfTtcblxuICBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcblxuICBwdWJsaWMgc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXM/OiBDYXNlVHlwZUxpdGVbXTtcbiAgcHVibGljIHNlbGVjdGVkQ2FzZVR5cGVTdGF0ZXM/OiBDYXNlU3RhdGVbXTtcblxuICBwdWJsaWMgaW5pdGlhbGlzZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdvcmtiYXNrZXRJbnB1dEZpbHRlclNlcnZpY2U6IFdvcmtiYXNrZXRJbnB1dEZpbHRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcmRlclNlcnZpY2U6IE9yZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGp1cmlzZGljdGlvblNlcnZpY2U6IEp1cmlzZGljdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvd1NlcnZpY2U6IFdpbmRvd1NlcnZpY2UpIHtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkID0ge307XG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgIGlmICghdGhpcy5pbml0aWFsaXNlZCB8fCAhcGFyYW1zIHx8ICFPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmluaXRGaWx0ZXJzKGZhbHNlKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXNlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHkoaW5pdDogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIFNhdmUgZmlsdGVycyBhcyBxdWVyeSBwYXJhbWV0ZXJzIGZvciBjdXJyZW50IHJvdXRlXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7fTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24pIHtcbiAgICAgIHF1ZXJ5UGFyYW1zW1dvcmtiYXNrZXRGaWx0ZXJzQ29tcG9uZW50LlBBUkFNX0pVUklTRElDVElPTl0gPSB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbi5pZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUpIHtcbiAgICAgIHF1ZXJ5UGFyYW1zW1dvcmtiYXNrZXRGaWx0ZXJzQ29tcG9uZW50LlBBUkFNX0NBU0VfVFlQRV0gPSB0aGlzLnNlbGVjdGVkLmNhc2VUeXBlLmlkO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZC5jYXNlU3RhdGUpIHtcbiAgICAgIHF1ZXJ5UGFyYW1zW1dvcmtiYXNrZXRGaWx0ZXJzQ29tcG9uZW50LlBBUkFNX0NBU0VfU1RBVEVdID0gdGhpcy5zZWxlY3RlZC5jYXNlU3RhdGUuaWQ7XG4gICAgfVxuICAgIC8vIHdpdGhvdXQgZXhwbGljaXRseSBwcmVzZXJ2aW5nIGFsZXJ0cyBhbnkgbWVzc2FnZSBvbiB0aGUgcGFnZVxuICAgIC8vIHdvdWxkIGJlIGNsZWFyZWQgb3V0IGJlY2F1c2Ugb2YgdGhpcyBpbml0aWFsIG5hdmlnYXRpb24uXG4gICAgLy8gVGhlIGFib3ZlIGlzIG9ubHkgdHJ1ZSBpZiBubyBhbGVydHMgd2VyZSBzZXQgcHJpb3IgdG8gbG9hZGluZyBjYXNlIGxpc3QgcGFnZS5cbiAgICBpZiAoIXRoaXMuYWxlcnRTZXJ2aWNlLmlzUHJlc2VydmVBbGVydHMoKSkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2V0UHJlc2VydmVBbGVydHMoIXRoaXMuaW5pdGlhbGlzZWQpO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZC5mb3JtR3JvdXAgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKEZPUk1fR1JPVVBfVkFMX0xPQ19TVE9SQUdFKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZSBmb3JtIGdyb3VwIGZpbHRlcnNcbiAgICAgIHRoaXMudXBkYXRlRm9ybUdyb3VwRmlsdGVycygpO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkLmZvcm1Hcm91cCA9IHRoaXMuZm9ybUdyb3VwO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkLmluaXQgPSBpbml0O1xuICAgIHRoaXMuc2VsZWN0ZWQucGFnZSA9IDE7XG4gICAgdGhpcy5zZWxlY3RlZC5tZXRhZGF0YUZpZWxkcyA9IHRoaXMuZ2V0TWV0YWRhdGFGaWVsZHMoKTtcbiAgICBpZiAoaW5pdCkge1xuICAgICAgdGhpcy53aW5kb3dTZXJ2aWNlLnNldExvY2FsU3RvcmFnZShTQVZFRF9RVUVSWV9QQVJBTV9MT0NfU1RPUkFHRSwgSlNPTi5zdHJpbmdpZnkocXVlcnlQYXJhbXMpKTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBGaW5kIGFsbCBcInNwZWNpYWwgY2FzZVwiIEp1ZGljaWFsVXNlciBGb3JtQ29udHJvbCBrZXlzIGFuZCByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZyb20gdGhlXG4gICAgICAgIC8vIEZvcm1Hcm91cCB2YWx1ZSBiZWNhdXNlIHRoZXNlIHZhbHVlcyBhcmUgbm90IGludGVuZGVkIHRvIGJlIHN0b3JlZCBhbmQgc3Vic2VxdWVudGx5IHBhc3NlZCBhcyBxdWVyeSBzdHJpbmdcbiAgICAgICAgLy8gcGFyYW1ldGVycyB3aGVuIGNhbGxpbmcgc2VhcmNoQ2FzZXMgQVBJIGVuZHBvaW50XG4gICAgICAgIGNvbnN0IGp1ZGljaWFsVXNlckNvbnRyb2xWYWx1ZXNUb1JlbW92ZSA9XG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAuY29udHJvbHMpLmZpbHRlcigoa2V5KSA9PiBrZXkuZW5kc1dpdGgoJ19qdWRpY2lhbFVzZXJDb250cm9sJykpO1xuICAgICAgICBqdWRpY2lhbFVzZXJDb250cm9sVmFsdWVzVG9SZW1vdmUuZm9yRWFjaCgoY29udHJvbEtleSkgPT4gZGVsZXRlIHRoaXMuZm9ybUdyb3VwLnZhbHVlW2NvbnRyb2xLZXldKTtcbiAgICAgICAgdGhpcy53aW5kb3dTZXJ2aWNlLnNldExvY2FsU3RvcmFnZShGT1JNX0dST1VQX1ZBTF9MT0NfU1RPUkFHRSwgSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtR3JvdXAudmFsdWUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQW5ub3VuY2Ugc2VsZWN0ZWQganVyaXNkaWN0aW9uIHZpYSBKdXJpc2RpY3Rpb25TZXJ2aWNlXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uKSB7XG4gICAgICAvLyBTZXQgdGhlIHNlbGVjdGVkIGNhc2UgdHlwZSBhcyB0aGUgY3VycmVudCBjYXNlIHR5cGUgb2YgdGhlIHNlbGVjdGVkIGp1cmlzZGljdGlvblxuICAgICAgdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24uY3VycmVudENhc2VUeXBlID0gdGhpcy5zZWxlY3RlZC5jYXNlVHlwZTtcbiAgICAgIHRoaXMuanVyaXNkaWN0aW9uU2VydmljZS5hbm5vdW5jZVNlbGVjdGVkSnVyaXNkaWN0aW9uKHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uKTtcbiAgICB9XG4gICAgLy8gQXBwbHkgZmlsdGVyc1xuICAgIHRoaXMub25BcHBseS5lbWl0KHsgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWQsIHF1ZXJ5UGFyYW1zIH0pO1xuICAgIHRoaXMuc2V0Rm9jdXNUb1RvcCgpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMud2luZG93U2VydmljZS5yZW1vdmVMb2NhbFN0b3JhZ2UoRk9STV9HUk9VUF9WQUxfTE9DX1NUT1JBR0UpO1xuICAgIHRoaXMud2luZG93U2VydmljZS5yZW1vdmVMb2NhbFN0b3JhZ2UoU0FWRURfUVVFUllfUEFSQU1fTE9DX1NUT1JBR0UpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNldEZpZWxkc1doZW5Ob0RlZmF1bHRzKCk7XG4gICAgICB0aGlzLm9uUmVzZXQuZW1pdCh0cnVlKTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgcHVibGljIGdldE1ldGFkYXRhRmllbGRzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAodGhpcy53b3JrYmFza2V0SW5wdXRzKSB7XG4gICAgICByZXR1cm4gdGhpcy53b3JrYmFza2V0SW5wdXRzXG4gICAgICAgIC5maWx0ZXIod29ya2Jhc2tldElucHV0ID0+IHdvcmtiYXNrZXRJbnB1dC5maWVsZC5tZXRhZGF0YSA9PT0gdHJ1ZSlcbiAgICAgICAgLm1hcCh3b3JrYmFza2V0SW5wdXQgPT4gd29ya2Jhc2tldElucHV0LmZpZWxkLmlkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25KdXJpc2RpY3Rpb25JZENoYW5nZSgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24pIHtcbiAgICAgIHRoaXMuanVyaXNkaWN0aW9uU2VydmljZS5hbm5vdW5jZVNlbGVjdGVkSnVyaXNkaWN0aW9uKHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXMgPSB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbi5jYXNlVHlwZXMubGVuZ3RoID4gMCA/IHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uLmNhc2VUeXBlcyA6IG51bGw7XG4gICAgICAvLyBMaW5lIHdhcyB0b28gbG9uZyBmb3IgbGludGluZyBzbyByZWZhY3RvcmVkIGl0LlxuICAgICAgaWYgKHRoaXMud29ya2Jhc2tldERlZmF1bHRzICYmIHRoaXMuc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXMpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSA9IHRoaXMuc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXNbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkLmNhc2VUeXBlID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZWxlY3RlZC5jYXNlU3RhdGUgPSBudWxsO1xuICAgICAgdGhpcy5jbGVhcldvcmtiYXNrZXRJbnB1dHMoKTtcblxuICAgICAgaWYgKCF0aGlzLmlzQXBwbHlCdXR0b25EaXNhYmxlZCgpKSB7XG4gICAgICAgIHRoaXMub25DYXNlVHlwZUlkQ2hhbmdlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzZXRDYXNlVHlwZSgpO1xuICAgICAgdGhpcy5yZXNldENhc2VTdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkNhc2VUeXBlSWRDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDYXNlVHlwZVN0YXRlcyA9IHRoaXMuc29ydFN0YXRlcyh0aGlzLnNlbGVjdGVkLmNhc2VUeXBlLnN0YXRlcyk7XG4gICAgICB0aGlzLnNlbGVjdGVkLmNhc2VTdGF0ZSA9IG51bGw7XG4gICAgICB0aGlzLmZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICAgICAgdGhpcy5jbGVhcldvcmtiYXNrZXRJbnB1dHMoKTtcbiAgICAgIGlmICghdGhpcy5pc0FwcGx5QnV0dG9uRGlzYWJsZWQoKSkge1xuICAgICAgICB0aGlzLndvcmtiYXNrZXRJbnB1dEZpbHRlclNlcnZpY2UuZ2V0V29ya2Jhc2tldElucHV0cyh0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbi5pZCwgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZS5pZCkucGlwZShcbiAgICAgICAgICB0YWtlKDEpXG4gICAgICAgICkuc3Vic2NyaWJlKHdvcmtiYXNrZXRJbnB1dHMgPT4ge1xuICAgICAgICAgIHRoaXMud29ya2Jhc2tldElucHV0c1JlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLndvcmtiYXNrZXRJbnB1dHMgPSB3b3JrYmFza2V0SW5wdXRzXG4gICAgICAgICAgICAuc29ydCh0aGlzLm9yZGVyU2VydmljZS5zb3J0QXNjKTtcbiAgICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLndpbmRvd1NlcnZpY2UuZ2V0TG9jYWxTdG9yYWdlKEZPUk1fR1JPVVBfVkFMX0xPQ19TVE9SQUdFKTtcblxuICAgICAgICAgIHdvcmtiYXNrZXRJbnB1dHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmZpZWxkLmVsZW1lbnRQYXRoKSB7XG4gICAgICAgICAgICAgIGl0ZW0uZmllbGQuaWQgPSBgJHtpdGVtLmZpZWxkLmlkfS4ke2l0ZW0uZmllbGQuZWxlbWVudFBhdGh9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW0uZmllbGQubGFiZWwgPSBpdGVtLmxhYmVsO1xuICAgICAgICAgICAgaWYgKGZvcm1WYWx1ZSkge1xuICAgICAgICAgICAgICBjb25zdCBzZWFyY2hGb3JtVmFsdWVPYmplY3QgPSBKU09OLnBhcnNlKGZvcm1WYWx1ZSk7XG4gICAgICAgICAgICAgIGl0ZW0uZmllbGQudmFsdWUgPSBzZWFyY2hGb3JtVmFsdWVPYmplY3RbaXRlbS5maWVsZC5pZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5nZXRDYXNlRmllbGRzKCk7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnV29ya2Jhc2tldCBpbnB1dCBmaWVsZHMgcmVxdWVzdCB3aWxsIGJlIGRpc2NhcmRlZCByZWFzb246ICcsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNldENhc2VTdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0Nhc2VUeXBlc0Ryb3Bkb3duRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnNlbGVjdGVkSnVyaXNkaWN0aW9uQ2FzZVR5cGVzO1xuICB9XG5cbiAgcHVibGljIGlzQ2FzZVN0YXRlc0Ryb3Bkb3duRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnNlbGVjdGVkLmNhc2VUeXBlIHx8ICEodGhpcy5zZWxlY3RlZC5jYXNlVHlwZS5zdGF0ZXMgJiYgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZS5zdGF0ZXMubGVuZ3RoID4gMCk7XG4gIH1cblxuICBwdWJsaWMgaXNBcHBseUJ1dHRvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uICYmIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUpO1xuICB9XG5cbiAgcHVibGljIGlzU2VhcmNoYWJsZUFuZFdvcmtiYXNrZXRJbnB1dHNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24gJiYgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSAmJiB0aGlzLndvcmtiYXNrZXRJbnB1dHNSZWFkeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNsZWFyIHRoZSBwcmV2aW91c2x5IHVzZWRcbiAgICogZm9ybSBncm91cCBjb250cm9sIGZpbHRlciB2YWx1ZXMgdG8gbWFrZSBzdXJlIG9ubHkgdGhlXG4gICAqIGN1cnJlbnRseSBzZWxlY3RlZCBmb3JtIGdyb3VwIGNvbnRyb2wgZmlsdGVyIHZhbHVlcyBhcmUgcHJlc2VudC5cbiAgICpcbiAgICogSGFzIGJlZW4gaW1wbGVtZW50ZWQgZm9yICdSZWdpb24gYW5kIEZSQyBmaWx0ZXJzJyBhbmQgY2FuIGJlIGV4dGVuZGVkXG4gICAqIGluIGZ1dHVyZSB0byBpbmNvcnBvcmF0ZSBvdGhlciBkeW5hbWljIGZpbHRlcnMuXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlRm9ybUdyb3VwRmlsdGVycygpOiB2b2lkIHtcbiAgICAvLyBSZWFkIHRoZSBmb3JtIGdyb3VwIGxvY2FsIHN0b3JhZ2VcbiAgICBjb25zdCBmb3JtR3JvdXBMUyA9IEpTT04ucGFyc2UodGhpcy53aW5kb3dTZXJ2aWNlLmdldExvY2FsU3RvcmFnZShGT1JNX0dST1VQX1ZBTF9MT0NfU1RPUkFHRSkpO1xuXG4gICAgLy8gRm9ybSBncm91cCBsb2NhbCBzdG9yYWdlIGlzIGF2YWlsYWJsZSBhbmQgY29udGFpbnMgcmVnaW9uTGlzdCBwcm9wZXJ0eVxuICAgIGlmICghIWZvcm1Hcm91cExTICYmIGZvcm1Hcm91cExTLmhhc093blByb3BlcnR5KFJFR0lPTl9MSVNUX0FORF9GUkNfRklMVEVSKSkge1xuICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwLmdldChSRUdJT05fTElTVF9BTkRfRlJDX0ZJTFRFUikpIHtcbiAgICAgICAgLy8gSWYgcmVnaW9uTGlzdCB2YWx1ZSBkb2VzIG5vdCBtYXRjaCBiZXR3ZWVuIGxvY2FsIHN0b3JhZ2UgYW5kIGZvcm0gZ3JvdXBcbiAgICAgICAgLy8gdGhlbiB0aGUgZmlsdGVyIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgYW5kIHdlIG5lZWQgdG8gY2xlYXIgdGhlIG9sZCBmaWx0ZXIgdmFsdWVzXG4gICAgICAgIGlmIChmb3JtR3JvdXBMU1tSRUdJT05fTElTVF9BTkRfRlJDX0ZJTFRFUl0gIT09IHRoaXMuZm9ybUdyb3VwLmdldChSRUdJT05fTElTVF9BTkRfRlJDX0ZJTFRFUikudmFsdWUpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBmb3JtR3JvdXBMUykge1xuICAgICAgICAgICAgaWYgKGZvcm1Hcm91cExTLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmb3JtR3JvdXBMU1trZXldO1xuICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgZmlsdGVyIGZvcm0gZ3JvdXAgY29udHJvbCB2YWx1ZXMgaWYgaXQgaGFzIGEgdmFsdWUgaW4gbG9jYWwgc3RvcmFnZVxuICAgICAgICAgICAgICAvLyBUaGUgcmVnaW9uTGlzdCBmb3JtIGdyb3VwIGNvbnRyb2wgdmFsdWUgc2hvdWxkIGJlIGlnbm9yZWQgYXMgaXQgYWx3YXlzIGNvbnRhaW4gdGhlIGxhdGVzdCB2YWx1ZVxuICAgICAgICAgICAgICBpZiAoa2V5ICE9PSBSRUdJT05fTElTVF9BTkRfRlJDX0ZJTFRFUiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChrZXkpLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzb3J0U3RhdGVzKHN0YXRlczogQ2FzZVN0YXRlW10pIHtcbiAgICByZXR1cm4gc3RhdGVzLnNvcnQodGhpcy5vcmRlclNlcnZpY2Uuc29ydEFzYyk7XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIGluaXRpYWxpc2UgZmlsdGVycyBiYXNlZCBvbiBxdWVyeSBwYXJhbWV0ZXJzIG9yIHdvcmtiYXNrZXQgZGVmYXVsdHMuXG4gICAqIFF1ZXJ5IHBhcmFtZXRlcnMsIHdoZW4gYXZhaWxhYmxlLCB0YWtlIHByZWNlZGVuY2Ugb3ZlciB3b3JrYmFza2V0IGRlZmF1bHRzLlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0RmlsdGVycyhpbml0OiBib29sZWFuKSB7XG4gICAgY29uc3Qgc2F2ZWRRdWVyeVBhcmFtcyA9IHRoaXMud2luZG93U2VydmljZS5nZXRMb2NhbFN0b3JhZ2UoU0FWRURfUVVFUllfUEFSQU1fTE9DX1NUT1JBR0UpO1xuICAgIGNvbnN0IHJvdXRlU25hcHNob3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgPSB0aGlzLnJvdXRlLnNuYXBzaG90O1xuICAgIGlmIChzYXZlZFF1ZXJ5UGFyYW1zKSB7XG4gICAgICByb3V0ZVNuYXBzaG90LnF1ZXJ5UGFyYW1zID0gSlNPTi5wYXJzZShzYXZlZFF1ZXJ5UGFyYW1zKTtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRKdXJpc2RpY3Rpb25JZCA9IHJvdXRlU25hcHNob3QucXVlcnlQYXJhbXNbV29ya2Jhc2tldEZpbHRlcnNDb21wb25lbnQuUEFSQU1fSlVSSVNESUNUSU9OXSB8fFxuICAgICAgKHRoaXMuZGVmYXVsdHMgJiYgdGhpcy5kZWZhdWx0cy5qdXJpc2RpY3Rpb25faWQpO1xuICAgIGlmIChzZWxlY3RlZEp1cmlzZGljdGlvbklkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbiA9IHRoaXMuanVyaXNkaWN0aW9ucy5maW5kKGogPT4gc2VsZWN0ZWRKdXJpc2RpY3Rpb25JZCA9PT0gai5pZCk7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24gJiYgdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24uY2FzZVR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEp1cmlzZGljdGlvbkNhc2VUeXBlcyA9IHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uLmNhc2VUeXBlcztcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSA9IHRoaXMuc2VsZWN0Q2FzZVR5cGUodGhpcy5zZWxlY3RlZCwgdGhpcy5zZWxlY3RlZEp1cmlzZGljdGlvbkNhc2VUeXBlcywgcm91dGVTbmFwc2hvdCk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkLmNhc2VUeXBlKSB7XG4gICAgICAgICAgdGhpcy5vbkNhc2VUeXBlSWRDaGFuZ2UoKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkLmNhc2VTdGF0ZSA9IHRoaXMuc2VsZWN0Q2FzZVN0YXRlKHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUsIHJvdXRlU25hcHNob3QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud29ya2Jhc2tldERlZmF1bHRzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24gPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5KGluaXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RDYXNlU3RhdGUoY2FzZVR5cGU6IENhc2VUeXBlTGl0ZSwgcm91dGVTbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IENhc2VTdGF0ZSB7XG4gICAgbGV0IGNhc2VTdGF0ZTtcbiAgICBpZiAoY2FzZVR5cGUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2FzZVN0YXRlSWQgPSB0aGlzLnNlbGVjdENhc2VTdGF0ZUlkRnJvbVF1ZXJ5T3JEZWZhdWx0cyhyb3V0ZVNuYXBzaG90LCAodGhpcy5kZWZhdWx0cyAmJiB0aGlzLmRlZmF1bHRzLnN0YXRlX2lkKSk7XG4gICAgICBjYXNlU3RhdGUgPSBjYXNlVHlwZS5zdGF0ZXMuZmluZChjdCA9PiBzZWxlY3RlZENhc2VTdGF0ZUlkID09PSBjdC5pZCk7XG4gICAgfVxuICAgIHJldHVybiBjYXNlU3RhdGUgPyBjYXNlU3RhdGUgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RDYXNlU3RhdGVJZEZyb21RdWVyeU9yRGVmYXVsdHMocm91dGVTbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgZGVmYXVsdENhc2VTdGF0ZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiByb3V0ZVNuYXBzaG90LnF1ZXJ5UGFyYW1zW1dvcmtiYXNrZXRGaWx0ZXJzQ29tcG9uZW50LlBBUkFNX0NBU0VfU1RBVEVdIHx8IGRlZmF1bHRDYXNlU3RhdGVJZDtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0Q2FzZVR5cGUoc2VsZWN0ZWQ6IGFueSwgY2FzZVR5cGVzOiBDYXNlVHlwZUxpdGVbXSwgcm91dGVTbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IENhc2VUeXBlTGl0ZSB7XG4gICAgbGV0IGNhc2VUeXBlO1xuICAgIGlmIChzZWxlY3RlZC5qdXJpc2RpY3Rpb24pIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2FzZVR5cGVJZCA9IHRoaXMuc2VsZWN0Q2FzZVR5cGVJZEZyb21RdWVyeU9yRGVmYXVsdHMocm91dGVTbmFwc2hvdCwgKHRoaXMuZGVmYXVsdHMgJiYgdGhpcy5kZWZhdWx0cy5jYXNlX3R5cGVfaWQpKTtcbiAgICAgIGNhc2VUeXBlID0gY2FzZVR5cGVzLmZpbmQoY3QgPT4gc2VsZWN0ZWRDYXNlVHlwZUlkID09PSBjdC5pZCk7XG4gICAgfVxuICAgIHJldHVybiBjYXNlVHlwZSA/IGNhc2VUeXBlIDogY2FzZVR5cGVzWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RDYXNlVHlwZUlkRnJvbVF1ZXJ5T3JEZWZhdWx0cyhyb3V0ZVNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBkZWZhdWx0Q2FzZVR5cGVJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcm91dGVTbmFwc2hvdC5xdWVyeVBhcmFtc1tXb3JrYmFza2V0RmlsdGVyc0NvbXBvbmVudC5QQVJBTV9DQVNFX1RZUEVdIHx8IGRlZmF1bHRDYXNlVHlwZUlkO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEZpZWxkc1doZW5Ob0RlZmF1bHRzKCkge1xuICAgIHRoaXMucmVzZXRDYXNlU3RhdGUoKTtcbiAgICB0aGlzLnJlc2V0Q2FzZVR5cGUoKTtcbiAgICB0aGlzLmNsZWFyV29ya2Jhc2tldElucHV0cygpO1xuICAgIHRoaXMud29ya2Jhc2tldERlZmF1bHRzID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24gPSBudWxsO1xuICAgIHRoaXMuaW5pdGlhbGlzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmluaXRGaWx0ZXJzKHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhcldvcmtiYXNrZXRJbnB1dHMoKSB7XG4gICAgdGhpcy53b3JrYmFza2V0SW5wdXRzUmVhZHkgPSBmYWxzZTtcbiAgICB0aGlzLndvcmtiYXNrZXRJbnB1dHMgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRDYXNlU3RhdGUoKSB7XG4gICAgdGhpcy5kZWZhdWx0cy5zdGF0ZV9pZCA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZC5jYXNlU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRDYXNlVHlwZVN0YXRlcyA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0Q2FzZVR5cGUoKSB7XG4gICAgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSA9IHVuZGVmaW5lZDsgLy8gb3B0aW9uIHNob3VsZCBiZSBibGFuayByYXRoZXIgdGhhbiBcIlNlbGVjdCBhIHZhbHVlXCIgaW4gY2FzZSBvZiByZXNldC5cbiAgICB0aGlzLnNlbGVjdGVkSnVyaXNkaWN0aW9uQ2FzZVR5cGVzID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNUb1RvcCgpIHtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG5cbiAgICBjb25zdCB0b3BDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VhcmNoLXJlc3VsdC1oZWFkaW5nX190ZXh0Jyk7XG4gICAgaWYgKHRvcENvbnRhaW5lcikge1xuICAgICAgdG9wQ29udGFpbmVyLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYXNlRmllbGRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLndvcmtiYXNrZXRJbnB1dHMpIHtcbiAgICAgIHRoaXMuY2FzZUZpZWxkcyA9IHRoaXMud29ya2Jhc2tldElucHV0cy5tYXAoaXRlbSA9PiBGaWVsZHNVdGlscy5jb252ZXJ0VG9DYXNlRmllbGQoaXRlbS5maWVsZCkpO1xuICAgIH1cbiAgfVxufVxuIiwiPGgyIGNsYXNzPVwiaGVhZGluZy1oMlwiIGFyaWEtbGFiZWw9XCJGaWx0ZXJzXCI+e3snRmlsdGVycycgfCBycHhUcmFuc2xhdGUgfX08L2gyPlxuXG48Zm9ybSBjbGFzcz1cImdsb2JhbC1kaXNwbGF5XCI+XG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cIndiLWp1cmlzZGljdGlvblwiPnt7J0p1cmlzZGljdGlvbicgfCBycHhUcmFuc2xhdGV9fTwvbGFiZWw+XG4gICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtMy00IGNjZC1kcm9wZG93blwiIGlkPVwid2ItanVyaXNkaWN0aW9uXCJcbiAgICAgICAgICAgIG5hbWU9XCJqdXJpc2RpY3Rpb25cIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkLmp1cmlzZGljdGlvblwiIGFyaWEtY29udHJvbHM9XCJzZWFyY2gtcmVzdWx0XCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25KdXJpc2RpY3Rpb25JZENoYW5nZSgpXCI+XG4gICAgICA8b3B0aW9uICpuZ0lmPVwiIXdvcmtiYXNrZXREZWZhdWx0c1wiIFtuZ1ZhbHVlXT1cIm51bGxcIj57eydTZWxlY3QgYSB2YWx1ZScgfCBycHhUcmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaiBvZiBqdXJpc2RpY3Rpb25zXCIgW25nVmFsdWVdPVwialwiPnt7ai5uYW1lIHwgcnB4VHJhbnNsYXRlfX08L29wdGlvbj5cbiAgICA8L3NlbGVjdD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwid2ItY2FzZS10eXBlXCI+e3snQ2FzZSB0eXBlJyB8IHJweFRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC0zLTQgY2NkLWRyb3Bkb3duXCIgaWQ9XCJ3Yi1jYXNlLXR5cGVcIlxuICAgICAgICAgICAgbmFtZT1cImNhc2UtdHlwZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWQuY2FzZVR5cGVcIiBbZGlzYWJsZWRdPVwiaXNDYXNlVHlwZXNEcm9wZG93bkRpc2FibGVkKClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNhc2VUeXBlSWRDaGFuZ2UoKVwiIGFyaWEtY29udHJvbHM9XCJzZWFyY2gtcmVzdWx0XCI+XG4gICAgICA8b3B0aW9uICpuZ0lmPVwiIXdvcmtiYXNrZXREZWZhdWx0c1wiIFtuZ1ZhbHVlXT1cIm51bGxcIj57eydTZWxlY3QgYSB2YWx1ZScgfCBycHhUcmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY3Qgb2Ygc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXNcIiBbbmdWYWx1ZV09XCJjdFwiPnt7Y3QubmFtZSB8IHJweFRyYW5zbGF0ZX19PC9vcHRpb24+XG4gICAgPC9zZWxlY3Q+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cIndiLWNhc2Utc3RhdGVcIj57eydTdGF0ZScgfCBycHhUcmFuc2xhdGV9fTwvbGFiZWw+XG4gICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtMy00IGNjZC1kcm9wZG93blwiIGlkPVwid2ItY2FzZS1zdGF0ZVwiXG4gICAgICAgICAgICBuYW1lPVwic3RhdGVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkLmNhc2VTdGF0ZVwiIFtkaXNhYmxlZF09XCJpc0Nhc2VTdGF0ZXNEcm9wZG93bkRpc2FibGVkKClcIlxuICAgICAgICAgICAgYXJpYS1jb250cm9scz1cInNlYXJjaC1yZXN1bHRcIj5cbiAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwibnVsbFwiPnt7J0FueScgfCBycHhUcmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY3Mgb2Ygc2VsZWN0ZWRDYXNlVHlwZVN0YXRlc1wiIFtuZ1ZhbHVlXT1cImNzXCI+e3tjcy5uYW1lIHwgcnB4VHJhbnNsYXRlfX08L29wdGlvbj5cbiAgICA8L3NlbGVjdD5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciBjY2RDb25kaXRpb25hbFNob3dGb3JtICpuZ0lmPVwiaXNTZWFyY2hhYmxlQW5kV29ya2Jhc2tldElucHV0c1JlYWR5KClcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIFtjb250ZXh0RmllbGRzXT1cImNhc2VGaWVsZHNcIj5cbiAgICA8ZGl2IGlkPVwiZHluYW1pY0ZpbHRlcnNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nRm9yPVwibGV0IHdvcmtiYXNrZXRJbnB1dCBvZiB3b3JrYmFza2V0SW5wdXRzXCI+XG4gICAgICAgIDxjY2QtZmllbGQtd3JpdGUgW2Nhc2VGaWVsZF09XCJ3b3JrYmFza2V0SW5wdXQuZmllbGRcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIFtpc0V4cGFuZGVkXT1cInRydWVcIiBbaXNJblNlYXJjaEJsb2NrXT1cInRydWVcIiAoa2V5dXAuZW50ZXIpPVwiYXBwbHkobnVsbClcIj5cbiAgICAgICAgPC9jY2QtZmllbGQtd3JpdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidXR0b24gd29ya2Jhc2tldC1maWx0ZXJzLWFwcGx5XCIgKGNsaWNrKT1cImFwcGx5KHRydWUpXCIgW2Rpc2FibGVkXT1cImlzQXBwbHlCdXR0b25EaXNhYmxlZCgpXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0FwcGx5IGZpbHRlcicgfCBycHhUcmFuc2xhdGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidBcHBseSBmaWx0ZXInIHwgcnB4VHJhbnNsYXRlXCI+XG4gICAge3snQXBwbHknIHwgcnB4VHJhbnNsYXRlfX1cbiAgPC9idXR0b24+ICZuYnNwOyZuYnNwOyZuYnNwO1xuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVzZXQoKVwiIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1zZWNvbmRhcnlcIlxuICAgICAgICAgIFt0aXRsZV09XCInUmVzZXQgZmlsdGVyJyB8IHJweFRyYW5zbGF0ZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1Jlc2V0IGZpbHRlcicgfCBycHhUcmFuc2xhdGVcIj5cbiAgICB7eydSZXNldCcgfCBycHhUcmFuc2xhdGV9fVxuICA8L2J1dHRvbj5cbjwvZm9ybT5cbiJdfQ==