@hmcts/ccd-case-ui-toolkit 7.1.51-ongoing-accessibility → 7.1.51-ongoing-accessibility-v1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/esm2022/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.mjs +154 -33
  2. package/esm2022/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.mjs +103 -43
  3. package/esm2022/lib/shared/components/case-editor/case-editor.module.mjs +7 -4
  4. package/esm2022/lib/shared/components/case-editor/services/case-flag-state.service.mjs +7 -1
  5. package/esm2022/lib/shared/components/case-list/case-list.component.mjs +6 -6
  6. package/esm2022/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.mjs +14 -4
  7. package/esm2022/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.mjs +15 -5
  8. package/esm2022/lib/shared/components/palette/base-field/abstract-field-write-journey.component.mjs +95 -0
  9. package/esm2022/lib/shared/components/palette/base-field/abstract-journey.component.mjs +81 -0
  10. package/esm2022/lib/shared/components/palette/base-field/index.mjs +3 -1
  11. package/esm2022/lib/shared/components/palette/case-file-view/components/case-file-view-folder-selector/case-file-view-folder-selector.component.mjs +6 -6
  12. package/esm2022/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.mjs +30 -21
  13. package/esm2022/lib/shared/components/palette/case-flag/components/case-flag-summary-list/case-flag-summary-list.component.mjs +3 -3
  14. package/esm2022/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.mjs +25 -22
  15. package/esm2022/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.mjs +154 -36
  16. package/esm2022/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.mjs +33 -29
  17. package/esm2022/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.mjs +33 -28
  18. package/esm2022/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.mjs +177 -71
  19. package/esm2022/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.mjs +32 -28
  20. package/esm2022/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.mjs +123 -105
  21. package/esm2022/lib/shared/components/palette/case-flag/read-case-flag-field.component.mjs +31 -4
  22. package/esm2022/lib/shared/components/palette/case-flag/write-case-flag-field.component.mjs +147 -33
  23. package/esm2022/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.mjs +44 -23
  24. package/esm2022/lib/shared/components/palette/linked-cases/components/check-your-answers/check-your-answers.component.mjs +31 -9
  25. package/esm2022/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.mjs +84 -50
  26. package/esm2022/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.mjs +13 -9
  27. package/esm2022/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.mjs +84 -44
  28. package/esm2022/lib/shared/components/palette/linked-cases/services/linked-cases.service.mjs +25 -2
  29. package/esm2022/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.mjs +110 -30
  30. package/esm2022/lib/shared/components/palette/palette.module.mjs +2 -2
  31. package/esm2022/lib/shared/domain/index.mjs +2 -1
  32. package/esm2022/lib/shared/domain/journey/index.mjs +3 -0
  33. package/esm2022/lib/shared/domain/journey/journey-instigator.model.mjs +2 -0
  34. package/esm2022/lib/shared/domain/journey/journey.model.mjs +2 -0
  35. package/esm2022/lib/shared/pipes/complex/ccd-page-fields.pipe.mjs +2 -2
  36. package/esm2022/lib/shared/services/index.mjs +2 -1
  37. package/esm2022/lib/shared/services/journey/index.mjs +2 -0
  38. package/esm2022/lib/shared/services/journey/multipage-component-state.service.mjs +117 -0
  39. package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs +1865 -789
  40. package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
  41. package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts +19 -3
  42. package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts.map +1 -1
  43. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts +11 -2
  44. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts.map +1 -1
  45. package/lib/shared/components/case-editor/case-editor.module.d.ts.map +1 -1
  46. package/lib/shared/components/case-editor/services/case-flag-state.service.d.ts +3 -0
  47. package/lib/shared/components/case-editor/services/case-flag-state.service.d.ts.map +1 -1
  48. package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts +2 -1
  49. package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts.map +1 -1
  50. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts +5 -1
  51. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts.map +1 -1
  52. package/lib/shared/components/palette/base-field/abstract-field-write-journey.component.d.ts +30 -0
  53. package/lib/shared/components/palette/base-field/abstract-field-write-journey.component.d.ts.map +1 -0
  54. package/lib/shared/components/palette/base-field/abstract-journey.component.d.ts +27 -0
  55. package/lib/shared/components/palette/base-field/abstract-journey.component.d.ts.map +1 -0
  56. package/lib/shared/components/palette/base-field/index.d.ts +2 -0
  57. package/lib/shared/components/palette/base-field/index.d.ts.map +1 -1
  58. package/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.d.ts +4 -2
  59. package/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.d.ts.map +1 -1
  60. package/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.d.ts +4 -2
  61. package/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.d.ts.map +1 -1
  62. package/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.d.ts +16 -4
  63. package/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.d.ts.map +1 -1
  64. package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.d.ts +6 -3
  65. package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.d.ts.map +1 -1
  66. package/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.d.ts +5 -2
  67. package/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.d.ts.map +1 -1
  68. package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts +21 -6
  69. package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts.map +1 -1
  70. package/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.d.ts +5 -2
  71. package/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.d.ts.map +1 -1
  72. package/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.d.ts +7 -3
  73. package/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.d.ts.map +1 -1
  74. package/lib/shared/components/palette/case-flag/read-case-flag-field.component.d.ts +1 -0
  75. package/lib/shared/components/palette/case-flag/read-case-flag-field.component.d.ts.map +1 -1
  76. package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts +18 -6
  77. package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts.map +1 -1
  78. package/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.d.ts +6 -4
  79. package/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.d.ts.map +1 -1
  80. package/lib/shared/components/palette/linked-cases/components/check-your-answers/check-your-answers.component.d.ts +8 -3
  81. package/lib/shared/components/palette/linked-cases/components/check-your-answers/check-your-answers.component.d.ts.map +1 -1
  82. package/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.d.ts +8 -3
  83. package/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.d.ts.map +1 -1
  84. package/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.d.ts +5 -2
  85. package/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.d.ts.map +1 -1
  86. package/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.d.ts +9 -3
  87. package/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.d.ts.map +1 -1
  88. package/lib/shared/components/palette/linked-cases/services/linked-cases.service.d.ts +8 -0
  89. package/lib/shared/components/palette/linked-cases/services/linked-cases.service.d.ts.map +1 -1
  90. package/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.d.ts +10 -3
  91. package/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.d.ts.map +1 -1
  92. package/lib/shared/domain/index.d.ts +1 -0
  93. package/lib/shared/domain/index.d.ts.map +1 -1
  94. package/lib/shared/domain/journey/index.d.ts +3 -0
  95. package/lib/shared/domain/journey/index.d.ts.map +1 -0
  96. package/lib/shared/domain/journey/journey-instigator.model.d.ts +5 -0
  97. package/lib/shared/domain/journey/journey-instigator.model.d.ts.map +1 -0
  98. package/lib/shared/domain/journey/journey.model.d.ts +19 -0
  99. package/lib/shared/domain/journey/journey.model.d.ts.map +1 -0
  100. package/lib/shared/services/index.d.ts +1 -0
  101. package/lib/shared/services/index.d.ts.map +1 -1
  102. package/lib/shared/services/journey/index.d.ts +2 -0
  103. package/lib/shared/services/journey/index.d.ts.map +1 -0
  104. package/lib/shared/services/journey/multipage-component-state.service.d.ts +26 -0
  105. package/lib/shared/services/journey/multipage-component-state.service.d.ts.map +1 -0
  106. package/package.json +1 -1
@@ -2,9 +2,10 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { FormControl, FormGroup } from '@angular/forms';
3
3
  import { catchError, switchMap } from 'rxjs/operators';
4
4
  import { FlagType } from '../../../../../domain/case-flag';
5
- import { CaseFlagRefdataService } from '../../../../../services';
5
+ import { CaseFlagRefdataService, MultipageComponentStateService } from '../../../../../services';
6
6
  import { RefdataCaseFlagType } from '../../../../../services/case-flag/refdata-case-flag-type.enum';
7
7
  import { CaseFlagFieldState, CaseFlagFormFields, CaseFlagWizardStepTitle, SelectFlagTypeErrorMessage } from '../../enums';
8
+ import { AbstractJourneyComponent } from '../../../base-field/abstract-journey.component';
8
9
  import { SearchLanguageInterpreterControlNames } from '../search-language-interpreter/search-language-interpreter-control-names.enum';
9
10
  import * as i0 from "@angular/core";
10
11
  import * as i1 from "../../../../../services";
@@ -29,7 +30,7 @@ function SelectFlagTypeComponent_ng_container_0_ng_template_6_Template(rf, ctx)
29
30
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(1, 1, ctx_r0.cachedFlagType, "name"), " ");
30
31
  } }
31
32
  function SelectFlagTypeComponent_ng_container_0_div_8_Template(rf, ctx) { if (rf & 1) {
32
- i0.ɵɵelementStart(0, "div", 13)(1, "span", 14);
33
+ i0.ɵɵelementStart(0, "div", 12)(1, "span", 13);
33
34
  i0.ɵɵtext(2);
34
35
  i0.ɵɵpipe(3, "rpxTranslate");
35
36
  i0.ɵɵelementEnd();
@@ -44,9 +45,9 @@ function SelectFlagTypeComponent_ng_container_0_div_8_Template(rf, ctx) { if (rf
44
45
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5, 4, ctx_r0.flagTypeNotSelectedErrorMessage), " ");
45
46
  } }
46
47
  function SelectFlagTypeComponent_ng_container_0_div_10_Template(rf, ctx) { if (rf & 1) {
47
- i0.ɵɵelementStart(0, "div", 15);
48
- i0.ɵɵelement(1, "input", 16);
49
- i0.ɵɵelementStart(2, "label", 17);
48
+ i0.ɵɵelementStart(0, "div", 14);
49
+ i0.ɵɵelement(1, "input", 15);
50
+ i0.ɵɵelementStart(2, "label", 16);
50
51
  i0.ɵɵtext(3);
51
52
  i0.ɵɵpipe(4, "flagFieldDisplay");
52
53
  i0.ɵɵelementEnd()();
@@ -63,7 +64,7 @@ function SelectFlagTypeComponent_ng_container_0_div_10_Template(rf, ctx) { if (r
63
64
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(4, 8, flagType_r2, "name"), " ");
64
65
  } }
65
66
  function SelectFlagTypeComponent_ng_container_0_div_11_div_6_Template(rf, ctx) { if (rf & 1) {
66
- i0.ɵɵelementStart(0, "div", 23)(1, "span", 14);
67
+ i0.ɵɵelementStart(0, "div", 22)(1, "span", 13);
67
68
  i0.ɵɵtext(2);
68
69
  i0.ɵɵpipe(3, "rpxTranslate");
69
70
  i0.ɵɵelementEnd();
@@ -78,9 +79,9 @@ function SelectFlagTypeComponent_ng_container_0_div_11_div_6_Template(rf, ctx) {
78
79
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5, 4, ctx_r0.flagTypeErrorMessage), " ");
79
80
  } }
80
81
  function SelectFlagTypeComponent_ng_container_0_div_11_div_8_Template(rf, ctx) { if (rf & 1) {
81
- i0.ɵɵelementStart(0, "div", 24);
82
- i0.ɵɵelement(1, "input", 25);
83
- i0.ɵɵelementStart(2, "label", 26);
82
+ i0.ɵɵelementStart(0, "div", 23);
83
+ i0.ɵɵelement(1, "input", 24);
84
+ i0.ɵɵelementStart(2, "label", 25);
84
85
  i0.ɵɵtext(3);
85
86
  i0.ɵɵpipe(4, "rpxTranslate");
86
87
  i0.ɵɵelementEnd()();
@@ -92,14 +93,14 @@ function SelectFlagTypeComponent_ng_container_0_div_11_div_8_Template(rf, ctx) {
92
93
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 3, "This flag should only be visible to HMCTS Staff"), " ");
93
94
  } }
94
95
  function SelectFlagTypeComponent_ng_container_0_div_11_Template(rf, ctx) { if (rf & 1) {
95
- i0.ɵɵelementStart(0, "div", 18)(1, "div", 4)(2, "label", 19);
96
+ i0.ɵɵelementStart(0, "div", 17)(1, "div", 3)(2, "label", 18);
96
97
  i0.ɵɵtext(3);
97
98
  i0.ɵɵpipe(4, "rpxTranslate");
98
99
  i0.ɵɵpipe(5, "rpxTranslate");
99
100
  i0.ɵɵelementEnd();
100
- i0.ɵɵtemplate(6, SelectFlagTypeComponent_ng_container_0_div_11_div_6_Template, 6, 6, "div", 20);
101
- i0.ɵɵelement(7, "input", 21);
102
- i0.ɵɵtemplate(8, SelectFlagTypeComponent_ng_container_0_div_11_div_8_Template, 5, 5, "div", 22);
101
+ i0.ɵɵtemplate(6, SelectFlagTypeComponent_ng_container_0_div_11_div_6_Template, 6, 6, "div", 19);
102
+ i0.ɵɵelement(7, "input", 20);
103
+ i0.ɵɵtemplate(8, SelectFlagTypeComponent_ng_container_0_div_11_div_8_Template, 5, 5, "div", 21);
103
104
  i0.ɵɵelementEnd()();
104
105
  } if (rf & 2) {
105
106
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -115,13 +116,13 @@ function SelectFlagTypeComponent_ng_container_0_div_11_Template(rf, ctx) { if (r
115
116
  i0.ɵɵproperty("ngIf", !ctx_r0.isDisplayContextParameterExternal && !ctx_r0.isCaseLevelFlag && ctx_r0.isDisplayContextParameter2Point1Enabled);
116
117
  } }
117
118
  function SelectFlagTypeComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
118
- i0.ɵɵelementContainerStart(0, 3);
119
- i0.ɵɵelementStart(1, "div", 4)(2, "fieldset", 5)(3, "legend", 6)(4, "h1", 7);
120
- i0.ɵɵtemplate(5, SelectFlagTypeComponent_ng_container_0_ng_container_5_Template, 4, 5, "ng-container", 8)(6, SelectFlagTypeComponent_ng_container_0_ng_template_6_Template, 2, 4, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
119
+ i0.ɵɵelementContainerStart(0, 2);
120
+ i0.ɵɵelementStart(1, "div", 3)(2, "fieldset", 4)(3, "legend", 5)(4, "h1", 6);
121
+ i0.ɵɵtemplate(5, SelectFlagTypeComponent_ng_container_0_ng_container_5_Template, 4, 5, "ng-container", 7)(6, SelectFlagTypeComponent_ng_container_0_ng_template_6_Template, 2, 4, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
121
122
  i0.ɵɵelementEnd()();
122
- i0.ɵɵtemplate(8, SelectFlagTypeComponent_ng_container_0_div_8_Template, 6, 6, "div", 9);
123
- i0.ɵɵelementStart(9, "div", 10);
124
- i0.ɵɵtemplate(10, SelectFlagTypeComponent_ng_container_0_div_10_Template, 5, 11, "div", 11)(11, SelectFlagTypeComponent_ng_container_0_div_11_Template, 9, 15, "div", 12);
123
+ i0.ɵɵtemplate(8, SelectFlagTypeComponent_ng_container_0_div_8_Template, 6, 6, "div", 8);
124
+ i0.ɵɵelementStart(9, "div", 9);
125
+ i0.ɵɵtemplate(10, SelectFlagTypeComponent_ng_container_0_div_10_Template, 5, 11, "div", 10)(11, SelectFlagTypeComponent_ng_container_0_div_11_Template, 9, 15, "div", 11);
125
126
  i0.ɵɵelementEnd()()();
126
127
  i0.ɵɵelementContainerEnd();
127
128
  } if (rf & 2) {
@@ -131,7 +132,7 @@ function SelectFlagTypeComponent_ng_container_0_Template(rf, ctx) { if (rf & 1)
131
132
  i0.ɵɵadvance();
132
133
  i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(8, _c0, ctx_r0.flagTypeNotSelectedErrorMessage.length > 0));
133
134
  i0.ɵɵadvance(4);
134
- i0.ɵɵproperty("ngIf", !ctx_r0.cachedFlagType)("ngIfElse", priorFlagTypeSelected_r4);
135
+ i0.ɵɵproperty("ngIf", !ctx_r0.cachedFlagType || ctx_r0.subJourneyIndex == 0)("ngIfElse", priorFlagTypeSelected_r4);
135
136
  i0.ɵɵadvance(3);
136
137
  i0.ɵɵproperty("ngIf", ctx_r0.flagTypeNotSelectedErrorMessage.length > 0);
137
138
  i0.ɵɵadvance(2);
@@ -139,18 +140,7 @@ function SelectFlagTypeComponent_ng_container_0_Template(rf, ctx) { if (rf & 1)
139
140
  i0.ɵɵadvance();
140
141
  i0.ɵɵproperty("ngIf", ctx_r0.otherFlagTypeSelected);
141
142
  } }
142
- function SelectFlagTypeComponent_div_1_Template(rf, ctx) { if (rf & 1) {
143
- const _r5 = i0.ɵɵgetCurrentView();
144
- i0.ɵɵelementStart(0, "div", 27)(1, "button", 28);
145
- i0.ɵɵlistener("click", function SelectFlagTypeComponent_div_1_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onNext()); });
146
- i0.ɵɵtext(2);
147
- i0.ɵɵpipe(3, "rpxTranslate");
148
- i0.ɵɵelementEnd()();
149
- } if (rf & 2) {
150
- i0.ɵɵadvance(2);
151
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 1, "Next"));
152
- } }
153
- export class SelectFlagTypeComponent {
143
+ export class SelectFlagTypeComponent extends AbstractJourneyComponent {
154
144
  caseFlagRefdataService;
155
145
  formGroup;
156
146
  jurisdiction;
@@ -161,6 +151,7 @@ export class SelectFlagTypeComponent {
161
151
  selectedFlagsLocation;
162
152
  caseFlagStateEmitter = new EventEmitter();
163
153
  flagCommentsOptionalEmitter = new EventEmitter();
154
+ flagTypeSubJourneyEmitter = new EventEmitter();
164
155
  flagTypes;
165
156
  errorMessages;
166
157
  flagTypeNotSelectedErrorMessage = '';
@@ -172,6 +163,8 @@ export class SelectFlagTypeComponent {
172
163
  flagTypeControlChangesSubscription;
173
164
  caseFlagFormField = CaseFlagFormFields;
174
165
  isCaseLevelFlag = false;
166
+ cachedRDFlagTypes;
167
+ subJourneyIndex = 0;
175
168
  maxCharactersForOtherFlagType = 80;
176
169
  // Code for "Other" flag type as defined in Reference Data
177
170
  otherFlagTypeCode = 'OT0001';
@@ -179,17 +172,21 @@ export class SelectFlagTypeComponent {
179
172
  get caseFlagWizardStepTitle() {
180
173
  return CaseFlagWizardStepTitle;
181
174
  }
175
+ constructor(caseFlagRefdataService, pageStateService) {
176
+ super(pageStateService);
177
+ this.caseFlagRefdataService = caseFlagRefdataService;
178
+ this.handleBackButtonSubJourney = this.handleBackButtonSubJourney.bind(this);
179
+ }
182
180
  get selectedFlagType() {
183
181
  return this.formGroup.get(CaseFlagFormFields.FLAG_TYPE)?.value;
184
182
  }
185
183
  get otherFlagTypeSelected() {
186
184
  return this.formGroup.get(CaseFlagFormFields.FLAG_TYPE)?.value?.flagCode === this.otherFlagTypeCode;
187
185
  }
188
- constructor(caseFlagRefdataService) {
189
- this.caseFlagRefdataService = caseFlagRefdataService;
190
- }
191
186
  ngOnInit() {
192
187
  this.isCaseLevelFlag = this.selectedFlagsLocation?.flags?.flagsCaseFieldId === this.caseLevelCaseFlagsFieldId;
188
+ this.flagTypeSubJourneyEmitter.emit(this.subJourneyIndex);
189
+ this.addState(this.subJourneyIndex);
193
190
  this.flagTypes = [];
194
191
  const flagType = this.isCaseLevelFlag ? RefdataCaseFlagType.CASE : RefdataCaseFlagType.PARTY;
195
192
  this.formGroup.addControl(CaseFlagFormFields.FLAG_TYPE, new FormControl(''));
@@ -198,7 +195,7 @@ export class SelectFlagTypeComponent {
198
195
  this.formGroup.addControl(CaseFlagFormFields.IS_VISIBLE_INTERNALLY_ONLY, new FormControl(false));
199
196
  // Should clear descriptionControlName if flagTypeControlName is changed
200
197
  this.flagTypeControlChangesSubscription = this.formGroup.get(CaseFlagFormFields.FLAG_TYPE)?.valueChanges
201
- .subscribe(_ => {
198
+ .subscribe((_) => {
202
199
  this.formGroup.get(CaseFlagFormFields.OTHER_FLAG_DESCRIPTION)?.setValue('');
203
200
  this.cachedPath = [];
204
201
  // required to clear language interpreter
@@ -212,8 +209,8 @@ export class SelectFlagTypeComponent {
212
209
  this.flagRefdata$ = this.caseFlagRefdataService
213
210
  .getCaseFlagsRefdata(this.hmctsServiceId, flagType, true, this.isDisplayContextParameterExternal)
214
211
  .subscribe({
215
- next: flagTypes => this.processFlagTypes(flagTypes),
216
- error: error => this.onRefdataError(error)
212
+ next: (flagTypes) => this.processFlagTypes(flagTypes),
213
+ error: (error) => this.onRefdataError(error)
217
214
  });
218
215
  }
219
216
  else {
@@ -221,43 +218,122 @@ export class SelectFlagTypeComponent {
221
218
  this.flagRefdata$ = this.caseFlagRefdataService.getHmctsServiceDetailsByCaseType(this.caseTypeId)
222
219
  .pipe(
223
220
  // If an error occurs retrieving HMCTS service details by case type ID, try by service name instead
224
- catchError(_ => this.caseFlagRefdataService.getHmctsServiceDetailsByServiceName(this.jurisdiction)),
221
+ catchError((_) => this.caseFlagRefdataService.getHmctsServiceDetailsByServiceName(this.jurisdiction)),
225
222
  // Use switchMap to return an inner Observable of the flag types data, having received the service details
226
223
  // including service_code. This avoids having nested `subscribe`s, which is an anti-pattern!
227
- switchMap(serviceDetails => this.caseFlagRefdataService.getCaseFlagsRefdata(serviceDetails[0].service_code, flagType, true, this.isDisplayContextParameterExternal)))
224
+ switchMap((serviceDetails) => this.caseFlagRefdataService.getCaseFlagsRefdata(serviceDetails[0].service_code, flagType, true, this.isDisplayContextParameterExternal)))
228
225
  .subscribe({
229
- next: flagTypes => this.processFlagTypes(flagTypes),
230
- error: error => this.onRefdataError(error)
226
+ next: (flagTypes) => this.processFlagTypes(flagTypes),
227
+ error: (error) => this.onRefdataError(error)
231
228
  });
232
229
  }
230
+ this.addState(this.subJourneyIndex);
231
+ window.addEventListener('popstate', this.handleBackButtonSubJourney);
232
+ }
233
+ handleBackButtonSubJourney(event) {
234
+ event.preventDefault();
235
+ this.previous();
236
+ }
237
+ addState(data, url) {
238
+ history.pushState('1' + data, '', url);
233
239
  }
234
240
  ngOnDestroy() {
235
241
  this.flagRefdata$?.unsubscribe();
236
242
  this.flagTypeControlChangesSubscription?.unsubscribe();
243
+ // check if the user has an existing path when navigating away from the page
244
+ // if so we may need to ensure the values are set correctly.
245
+ this.checkForExistingPath();
246
+ window.removeEventListener('popstate', this.handleBackButtonSubJourney);
247
+ }
248
+ checkForExistingPath() {
249
+ // Restore values from cachedPath
250
+ if (this.subJourneyIndex <= 0) {
251
+ // check if the user is navigating to the previous page in the jounrey.
252
+ // in this situation we need to restore the full path for data retention across pages.
253
+ if (this.cachedPath && this.cachedPath.length > 0) {
254
+ this.cachedPath.forEach((flagType) => {
255
+ if (flagType) {
256
+ this.formGroup.get(CaseFlagFormFields.FLAG_TYPE)?.setValue(flagType, { emitEvent: false });
257
+ }
258
+ });
259
+ }
260
+ }
237
261
  }
238
262
  onNext() {
239
- // Validate form
240
263
  this.validateForm();
241
- // Return case flag field state, whether the selected flag type (if any) is a parent or not, error messages,
242
- // flag name, path, hearing relevant indicator, code, and "list of values" (if any) to the parent
264
+ this.emitCaseFlagState();
265
+ this.emitFlagCommentsOptional();
266
+ this.handleFlagTypeSelection();
267
+ this.flagTypeSubJourneyEmitter.emit(this.subJourneyIndex);
268
+ this.addState(this.subJourneyIndex);
269
+ }
270
+ emitCaseFlagState() {
243
271
  this.caseFlagStateEmitter.emit({
244
272
  currentCaseFlagFieldState: CaseFlagFieldState.FLAG_TYPE,
245
273
  isParentFlagType: this.selectedFlagType ? this.selectedFlagType.isParent : null,
246
274
  errorMessages: this.errorMessages
247
275
  });
248
- // Emit "flag comments optional" event if the user selects a child flag type where comments are not mandatory
276
+ }
277
+ emitFlagCommentsOptional() {
249
278
  if (this.selectedFlagType && !this.selectedFlagType.isParent && !this.selectedFlagType.flagComment) {
250
279
  this.flagCommentsOptionalEmitter.emit(null);
251
280
  }
252
- // If the selected flag type is a parent, load the list of child flag types and reset the current selection
281
+ }
282
+ handleFlagTypeSelection() {
253
283
  if (this.selectedFlagType?.isParent) {
254
- // Cache the current flag type selection before it is reset - this is needed for displaying its name as the title
255
- // when displaying the next set of child flags
256
- this.cachedFlagType = this.selectedFlagType;
257
- this.flagTypes = this.selectedFlagType.childFlags;
284
+ this.loadChildFlagTypes();
285
+ }
286
+ else {
287
+ this.completeSubJourney();
288
+ }
289
+ }
290
+ loadChildFlagTypes() {
291
+ this.cachedFlagType = this.selectedFlagType;
292
+ this.flagTypes = this.selectedFlagType.childFlags;
293
+ if (this.cachedPath.length !== 0 && this.cachedPath[this.subJourneyIndex] === this.selectedFlagType) {
294
+ this.formGroup.get(CaseFlagFormFields.FLAG_TYPE)?.setValue(this.cachedPath[this.subJourneyIndex + 1], { emitEvent: false });
295
+ }
296
+ else {
258
297
  this.cachedPath?.shift();
259
- this.formGroup.get(CaseFlagFormFields.FLAG_TYPE)?.setValue(this.cachedPath?.length ? this.cachedPath[0] : null, { emitEvent: false });
298
+ const value = this.cachedPath?.length ? this.cachedPath[0] : null;
299
+ this.formGroup.get(CaseFlagFormFields.FLAG_TYPE)?.setValue(value, { emitEvent: false });
300
+ }
301
+ this.subJourneyIndex++;
302
+ }
303
+ completeSubJourney() {
304
+ const currentSelectedFlag = this.formGroup.controls.flagType;
305
+ const addedFlagValue = this.selectedFlagsLocation?.caseField?.value?.details;
306
+ if (addedFlagValue && (addedFlagValue[Object.keys(addedFlagValue).length]?.name !== currentSelectedFlag.value.name)) {
307
+ this.selectedFlagsLocation['caseField'].value.details.pop();
308
+ this.selectedFlagsLocation['caseField'].formatted_value?.details.pop();
309
+ }
310
+ }
311
+ // Simplified version of the onPrevious method with optimized code
312
+ onPrevious() {
313
+ if (this.cachedFlagType) {
314
+ if (this.cachedFlagType.Path?.length === 1) {
315
+ this.formGroup.get(CaseFlagFormFields.FLAG_TYPE)?.setValue(this.cachedFlagType, { emitEvent: false });
316
+ this.flagTypes = this.cachedRDFlagTypes[0].childFlags;
317
+ }
318
+ else {
319
+ let currentPath = this.cachedRDFlagTypes[0];
320
+ const pathToSearch = this.cachedFlagType.Path.slice(1);
321
+ for (const pathElement of pathToSearch) {
322
+ const foundFlag = currentPath.childFlags.find((flag) => flag.name === pathElement);
323
+ if (foundFlag) {
324
+ currentPath = foundFlag;
325
+ }
326
+ }
327
+ this.formGroup.get(CaseFlagFormFields.FLAG_TYPE)?.setValue(this.cachedFlagType, { emitEvent: false });
328
+ this.flagTypes = currentPath.childFlags;
329
+ this.cachedFlagType = currentPath;
330
+ }
331
+ }
332
+ this.subJourneyIndex = Math.max(0, this.subJourneyIndex - 1);
333
+ if (this.subJourneyIndex === 0) {
334
+ this.flagTypes = this.flagTypes.filter((flag) => this.isDisplayContextParameterExternal ? flag.flagCode !== this.otherFlagTypeCode : true);
260
335
  }
336
+ this.flagTypeSubJourneyEmitter.emit(this.subJourneyIndex);
261
337
  }
262
338
  // Identity function for trackBy use by *ngFor for flagTypes in HTML template
263
339
  identifyFlagType(_, flagType) {
@@ -296,19 +372,36 @@ export class SelectFlagTypeComponent {
296
372
  }
297
373
  }
298
374
  processFlagTypes(flagTypes) {
299
- // First (and only) object in the returned array should be the top-level "Party" flag type
300
- // The "Other" flag type should be removed from the top level if the user is external
301
- this.flagTypes = flagTypes[0].childFlags.filter((flag) => this.isDisplayContextParameterExternal ? flag.flagCode !== this.otherFlagTypeCode : true);
375
+ const prevJourneyPage = this.multipageComponentStateService.getJourneyCollection()[0];
376
+ const { journeyPreviousPageNumber, journeyPageNumber } = prevJourneyPage;
377
+ this.cachedRDFlagTypes = flagTypes;
378
+ if (this.selectedFlagType && (journeyPreviousPageNumber > journeyPageNumber)) {
379
+ const selectedFlagType = this.selectedFlagType;
380
+ const pathToSearch = selectedFlagType.Path.slice(1);
381
+ let currentPath = flagTypes[0];
382
+ for (const pathElement of pathToSearch) {
383
+ const foundFlag = currentPath.childFlags.find((flag) => flag.name === pathElement);
384
+ if (foundFlag) {
385
+ currentPath = foundFlag;
386
+ }
387
+ }
388
+ this.flagTypes = currentPath.childFlags;
389
+ this.cachedFlagType = currentPath;
390
+ }
391
+ else {
392
+ this.flagTypes = flagTypes[0].childFlags.filter((flag) => this.isDisplayContextParameterExternal ? flag.flagCode !== this.otherFlagTypeCode : true);
393
+ }
302
394
  const formControl = this.formGroup.get(CaseFlagFormFields.FLAG_TYPE);
303
395
  if (formControl?.value) {
304
- // Cache Path based on existing flagCode -- needed for nested choices
305
- const [foundFlagType, path] = FlagType.searchPathByFlagTypeObject(formControl.value, this.flagTypes);
306
- this.cachedPath = [
307
- ...path,
308
- foundFlagType
309
- ];
310
- formControl.setValue(this.cachedPath[0], { emitEvent: false });
396
+ const [foundFlagType, path] = FlagType.searchPathByFlagTypeObject(formControl.value, this.cachedRDFlagTypes[0].childFlags);
397
+ this.cachedPath = [...path, foundFlagType];
398
+ formControl.setValue((this.selectedFlagType && (journeyPreviousPageNumber > journeyPageNumber)) ? this.cachedPath[this.cachedPath.length - 1] : this.cachedPath[0], { emitEvent: false });
399
+ if (this.cachedPath.length !== 0 && (journeyPreviousPageNumber > journeyPageNumber)) {
400
+ this.subJourneyIndex = this.cachedPath.length - 1;
401
+ }
311
402
  }
403
+ this.flagTypeSubJourneyEmitter.emit(this.subJourneyIndex);
404
+ this.addState(this.subJourneyIndex);
312
405
  }
313
406
  onRefdataError(error) {
314
407
  // Set error flag on component to remove the "Next" button (user cannot proceed with flag creation)
@@ -318,19 +411,30 @@ export class SelectFlagTypeComponent {
318
411
  // Return case flag field state and error messages to the parent
319
412
  this.caseFlagStateEmitter.emit({ currentCaseFlagFieldState: CaseFlagFieldState.FLAG_TYPE, errorMessages: this.errorMessages });
320
413
  }
321
- static ɵfac = function SelectFlagTypeComponent_Factory(t) { return new (t || SelectFlagTypeComponent)(i0.ɵɵdirectiveInject(i1.CaseFlagRefdataService)); };
322
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SelectFlagTypeComponent, selectors: [["ccd-select-flag-type"]], inputs: { formGroup: "formGroup", jurisdiction: "jurisdiction", caseTypeId: "caseTypeId", hmctsServiceId: "hmctsServiceId", isDisplayContextParameterExternal: "isDisplayContextParameterExternal", isDisplayContextParameter2Point1Enabled: "isDisplayContextParameter2Point1Enabled", selectedFlagsLocation: "selectedFlagsLocation" }, outputs: { caseFlagStateEmitter: "caseFlagStateEmitter", flagCommentsOptionalEmitter: "flagCommentsOptionalEmitter" }, decls: 2, vars: 2, consts: [["priorFlagTypeSelected", ""], [3, "formGroup", 4, "ngIf"], ["class", "govuk-button-group", 4, "ngIf"], [3, "formGroup"], [1, "govuk-form-group", 3, "ngClass"], ["aria-describedby", "flag-type-heading", 1, "govuk-fieldset"], [1, "govuk-fieldset__legend", "govuk-fieldset__legend--m"], ["id", "flag-type-heading", 1, "govuk-fieldset__heading", "govuk-!-margin-bottom-1"], [4, "ngIf", "ngIfElse"], ["id", "flag-type-not-selected-error-message", "class", "govuk-error-message", 4, "ngIf"], ["data-module", "govuk-radios", "id", "conditional-radios-list", 1, "govuk-radios", "govuk-radios--conditional"], ["class", "govuk-radios__item", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["class", "govuk-radios__conditional", "id", "conditional-flagType", 4, "ngIf"], ["id", "flag-type-not-selected-error-message", 1, "govuk-error-message"], [1, "govuk-visually-hidden"], [1, "govuk-radios__item"], ["type", "radio", 1, "govuk-radios__input", 3, "id", "name", "value", "formControlName"], [1, "govuk-label", "govuk-radios__label", 3, "for"], ["id", "conditional-flagType", 1, "govuk-radios__conditional"], ["for", "other-flag-type-description", 1, "govuk-label"], ["id", "flag-type-error-message", "class", "govuk-error-message", 4, "ngIf"], ["id", "other-flag-type-description", "type", "text", 1, "govuk-input", "govuk-!-width-one-half", 3, "ngClass", "name", "formControlName"], ["class", "govuk-checkboxes__item govuk-!-margin-top-4", 4, "ngIf"], ["id", "flag-type-error-message", 1, "govuk-error-message"], [1, "govuk-checkboxes__item", "govuk-!-margin-top-4"], ["id", "is-visible-externally", "type", "checkbox", 1, "govuk-checkboxes__input", 3, "name", "formControlName"], ["for", "is-visible-externally", 1, "govuk-label", "govuk-checkboxes__label"], [1, "govuk-button-group"], ["type", "button", 1, "button", "button-primary", 3, "click"]], template: function SelectFlagTypeComponent_Template(rf, ctx) { if (rf & 1) {
323
- i0.ɵɵtemplate(0, SelectFlagTypeComponent_ng_container_0_Template, 12, 10, "ng-container", 1)(1, SelectFlagTypeComponent_div_1_Template, 4, 3, "div", 2);
414
+ next() {
415
+ this.onNext();
416
+ this.addState(this.subJourneyIndex);
417
+ if (this.errorMessages.length === 0) {
418
+ super.next();
419
+ }
420
+ }
421
+ previous() {
422
+ this.onPrevious();
423
+ if (this.subJourneyIndex <= 0) {
424
+ super.previous();
425
+ }
426
+ }
427
+ static ɵfac = function SelectFlagTypeComponent_Factory(t) { return new (t || SelectFlagTypeComponent)(i0.ɵɵdirectiveInject(i1.CaseFlagRefdataService), i0.ɵɵdirectiveInject(i1.MultipageComponentStateService)); };
428
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SelectFlagTypeComponent, selectors: [["ccd-select-flag-type"]], inputs: { formGroup: "formGroup", jurisdiction: "jurisdiction", caseTypeId: "caseTypeId", hmctsServiceId: "hmctsServiceId", isDisplayContextParameterExternal: "isDisplayContextParameterExternal", isDisplayContextParameter2Point1Enabled: "isDisplayContextParameter2Point1Enabled", selectedFlagsLocation: "selectedFlagsLocation" }, outputs: { caseFlagStateEmitter: "caseFlagStateEmitter", flagCommentsOptionalEmitter: "flagCommentsOptionalEmitter", flagTypeSubJourneyEmitter: "flagTypeSubJourneyEmitter" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["priorFlagTypeSelected", ""], [3, "formGroup", 4, "ngIf"], [3, "formGroup"], [1, "govuk-form-group", 3, "ngClass"], ["aria-describedby", "flag-type-heading", 1, "govuk-fieldset"], [1, "govuk-fieldset__legend", "govuk-fieldset__legend--m"], ["id", "flag-type-heading", 1, "govuk-fieldset__heading", "govuk-!-margin-bottom-1"], [4, "ngIf", "ngIfElse"], ["id", "flag-type-not-selected-error-message", "class", "govuk-error-message", 4, "ngIf"], ["data-module", "govuk-radios", "id", "conditional-radios-list", 1, "govuk-radios", "govuk-radios--conditional"], ["class", "govuk-radios__item", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["class", "govuk-radios__conditional", "id", "conditional-flagType", 4, "ngIf"], ["id", "flag-type-not-selected-error-message", 1, "govuk-error-message"], [1, "govuk-visually-hidden"], [1, "govuk-radios__item"], ["type", "radio", 1, "govuk-radios__input", 3, "id", "name", "value", "formControlName"], [1, "govuk-label", "govuk-radios__label", 3, "for"], ["id", "conditional-flagType", 1, "govuk-radios__conditional"], ["for", "other-flag-type-description", 1, "govuk-label"], ["id", "flag-type-error-message", "class", "govuk-error-message", 4, "ngIf"], ["id", "other-flag-type-description", "type", "text", 1, "govuk-input", "govuk-!-width-one-half", 3, "ngClass", "name", "formControlName"], ["class", "govuk-checkboxes__item govuk-!-margin-top-4", 4, "ngIf"], ["id", "flag-type-error-message", 1, "govuk-error-message"], [1, "govuk-checkboxes__item", "govuk-!-margin-top-4"], ["id", "is-visible-externally", "type", "checkbox", 1, "govuk-checkboxes__input", 3, "name", "formControlName"], ["for", "is-visible-externally", 1, "govuk-label", "govuk-checkboxes__label"]], template: function SelectFlagTypeComponent_Template(rf, ctx) { if (rf & 1) {
429
+ i0.ɵɵtemplate(0, SelectFlagTypeComponent_ng_container_0_Template, 12, 10, "ng-container", 1);
324
430
  } if (rf & 2) {
325
431
  i0.ɵɵproperty("ngIf", ctx.flagTypes == null ? null : ctx.flagTypes.length);
326
- i0.ɵɵadvance();
327
- i0.ɵɵproperty("ngIf", !ctx.refdataError);
328
432
  } }, styles: [".hidden[_ngcontent-%COMP%]{display:none}.validation-error[_ngcontent-%COMP%]{cursor:pointer;text-decoration:underline;color:#d4351c}"] });
329
433
  }
330
434
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SelectFlagTypeComponent, [{
331
435
  type: Component,
332
- args: [{ selector: 'ccd-select-flag-type', template: "<ng-container *ngIf=\"flagTypes?.length\" [formGroup]=\"formGroup\">\n <div class=\"govuk-form-group\" [ngClass]=\"{'form-group-error': flagTypeNotSelectedErrorMessage.length > 0}\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"flag-type-heading\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--m\">\n <h1 id=\"flag-type-heading\" class=\"govuk-fieldset__heading govuk-!-margin-bottom-1\">\n <ng-container *ngIf=\"!cachedFlagType; else priorFlagTypeSelected\">\n {{\n isDisplayContextParameterExternal\n ? (caseFlagWizardStepTitle.SELECT_CASE_FLAG_EXTERNAL | rpxTranslate)\n : (caseFlagWizardStepTitle.SELECT_CASE_FLAG | rpxTranslate)\n }}\n </ng-container>\n <ng-template #priorFlagTypeSelected>\n {{cachedFlagType | flagFieldDisplay:'name'}}\n </ng-template>\n </h1>\n </legend>\n <div id=\"flag-type-not-selected-error-message\" class=\"govuk-error-message\"\n *ngIf=\"flagTypeNotSelectedErrorMessage.length > 0\">\n <span class=\"govuk-visually-hidden\">{{'Error:' | rpxTranslate}}</span> {{flagTypeNotSelectedErrorMessage | rpxTranslate}}\n </div>\n <div class=\"govuk-radios govuk-radios--conditional\" data-module=\"govuk-radios\" id=\"conditional-radios-list\">\n <div class=\"govuk-radios__item\" *ngFor=\"let flagType of flagTypes; index as i; trackBy: identifyFlagType\">\n <input class=\"govuk-radios__input\" id=\"flag-type-{{i}}\" [name]=\"caseFlagFormField.FLAG_TYPE\"\n type=\"radio\" [value]=\"flagType\"\n [formControlName]=\"caseFlagFormField.FLAG_TYPE\"/>\n <label class=\"govuk-label govuk-radios__label\" for=\"flag-type-{{i}}\">\n {{flagType | flagFieldDisplay:'name'}}\n </label>\n </div>\n <div class=\"govuk-radios__conditional\" *ngIf=\"otherFlagTypeSelected\" id=\"conditional-flagType\">\n <div class=\"govuk-form-group\" [ngClass]=\"{'form-group-error': flagTypeErrorMessage.length > 0}\">\n <label class=\"govuk-label\" for=\"other-flag-type-description\">\n {{\n isDisplayContextParameterExternal\n ? (caseFlagWizardStepTitle.OTHER_FLAG_TYPE_DESCRIPTION_EXTERNAL | rpxTranslate)\n : (caseFlagWizardStepTitle.OTHER_FLAG_TYPE_DESCRIPTION | rpxTranslate)\n }}\n </label>\n <div id=\"flag-type-error-message\" class=\"govuk-error-message\" *ngIf=\"flagTypeErrorMessage.length > 0\">\n <span class=\"govuk-visually-hidden\">{{'Error:' | rpxTranslate}}</span> {{flagTypeErrorMessage | rpxTranslate}}\n </div>\n <input class=\"govuk-input govuk-!-width-one-half\"\n [ngClass]=\"{'govuk-input--error': flagTypeErrorMessage.length > 0}\"\n id=\"other-flag-type-description\" [name]=\"caseFlagFormField.OTHER_FLAG_DESCRIPTION\" type=\"text\"\n [formControlName]=\"caseFlagFormField.OTHER_FLAG_DESCRIPTION\"/>\n <div class=\"govuk-checkboxes__item govuk-!-margin-top-4\"\n *ngIf=\"!isDisplayContextParameterExternal && !isCaseLevelFlag && isDisplayContextParameter2Point1Enabled\">\n <input class=\"govuk-checkboxes__input\" id=\"is-visible-externally\" type=\"checkbox\"\n [name]=\"caseFlagFormField.IS_VISIBLE_INTERNALLY_ONLY\" [formControlName]=\"caseFlagFormField.IS_VISIBLE_INTERNALLY_ONLY\">\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"is-visible-externally\">\n {{'This flag should only be visible to HMCTS Staff' | rpxTranslate}}\n </label>\n </div>\n </div>\n </div>\n </div>\n </fieldset>\n </div>\n</ng-container>\n\n<div class=\"govuk-button-group\" *ngIf=\"!refdataError\">\n <button class=\"button button-primary\" type=\"button\" (click)=\"onNext()\">{{'Next' | rpxTranslate}}</button>\n</div>\n", styles: [".hidden{display:none}.validation-error{cursor:pointer;text-decoration:underline;color:#d4351c}\n"] }]
333
- }], () => [{ type: i1.CaseFlagRefdataService }], { formGroup: [{
436
+ args: [{ selector: 'ccd-select-flag-type', template: "<ng-container *ngIf=\"flagTypes?.length\" [formGroup]=\"formGroup\">\n <div class=\"govuk-form-group\" [ngClass]=\"{'form-group-error': flagTypeNotSelectedErrorMessage.length > 0}\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"flag-type-heading\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--m\">\n <h1 id=\"flag-type-heading\" class=\"govuk-fieldset__heading govuk-!-margin-bottom-1\">\n <ng-container *ngIf=\"!cachedFlagType || subJourneyIndex == 0; else priorFlagTypeSelected\">\n {{\n isDisplayContextParameterExternal\n ? (caseFlagWizardStepTitle.SELECT_CASE_FLAG_EXTERNAL | rpxTranslate)\n : (caseFlagWizardStepTitle.SELECT_CASE_FLAG | rpxTranslate)\n }}\n </ng-container>\n <ng-template #priorFlagTypeSelected>\n {{cachedFlagType | flagFieldDisplay:'name'}}\n </ng-template>\n </h1>\n </legend>\n <div id=\"flag-type-not-selected-error-message\" class=\"govuk-error-message\"\n *ngIf=\"flagTypeNotSelectedErrorMessage.length > 0\">\n <span class=\"govuk-visually-hidden\">{{'Error:' | rpxTranslate}}</span> {{flagTypeNotSelectedErrorMessage |\n rpxTranslate}}\n </div>\n <div class=\"govuk-radios govuk-radios--conditional\" data-module=\"govuk-radios\" id=\"conditional-radios-list\">\n <div class=\"govuk-radios__item\" *ngFor=\"let flagType of flagTypes; index as i; trackBy: identifyFlagType\">\n <input class=\"govuk-radios__input\" id=\"flag-type-{{i}}\" [name]=\"caseFlagFormField.FLAG_TYPE\" type=\"radio\"\n [value]=\"flagType\" [formControlName]=\"caseFlagFormField.FLAG_TYPE\" />\n <label class=\"govuk-label govuk-radios__label\" for=\"flag-type-{{i}}\">\n {{flagType | flagFieldDisplay:'name'}}\n </label>\n </div>\n <div class=\"govuk-radios__conditional\" *ngIf=\"otherFlagTypeSelected\" id=\"conditional-flagType\">\n <div class=\"govuk-form-group\" [ngClass]=\"{'form-group-error': flagTypeErrorMessage.length > 0}\">\n <label class=\"govuk-label\" for=\"other-flag-type-description\">\n {{\n isDisplayContextParameterExternal\n ? (caseFlagWizardStepTitle.OTHER_FLAG_TYPE_DESCRIPTION_EXTERNAL | rpxTranslate)\n : (caseFlagWizardStepTitle.OTHER_FLAG_TYPE_DESCRIPTION | rpxTranslate)\n }}\n </label>\n <div id=\"flag-type-error-message\" class=\"govuk-error-message\" *ngIf=\"flagTypeErrorMessage.length > 0\">\n <span class=\"govuk-visually-hidden\">{{'Error:' | rpxTranslate}}</span> {{flagTypeErrorMessage |\n rpxTranslate}}\n </div>\n <input class=\"govuk-input govuk-!-width-one-half\"\n [ngClass]=\"{'govuk-input--error': flagTypeErrorMessage.length > 0}\" id=\"other-flag-type-description\"\n [name]=\"caseFlagFormField.OTHER_FLAG_DESCRIPTION\" type=\"text\"\n [formControlName]=\"caseFlagFormField.OTHER_FLAG_DESCRIPTION\" />\n <div class=\"govuk-checkboxes__item govuk-!-margin-top-4\"\n *ngIf=\"!isDisplayContextParameterExternal && !isCaseLevelFlag && isDisplayContextParameter2Point1Enabled\">\n <input class=\"govuk-checkboxes__input\" id=\"is-visible-externally\" type=\"checkbox\"\n [name]=\"caseFlagFormField.IS_VISIBLE_INTERNALLY_ONLY\"\n [formControlName]=\"caseFlagFormField.IS_VISIBLE_INTERNALLY_ONLY\">\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"is-visible-externally\">\n {{'This flag should only be visible to HMCTS Staff' | rpxTranslate}}\n </label>\n </div>\n </div>\n </div>\n </div>\n </fieldset>\n </div>\n</ng-container>", styles: [".hidden{display:none}.validation-error{cursor:pointer;text-decoration:underline;color:#d4351c}\n"] }]
437
+ }], () => [{ type: i1.CaseFlagRefdataService }, { type: i1.MultipageComponentStateService }], { formGroup: [{
334
438
  type: Input
335
439
  }], jurisdiction: [{
336
440
  type: Input
@@ -348,6 +452,8 @@ export class SelectFlagTypeComponent {
348
452
  type: Output
349
453
  }], flagCommentsOptionalEmitter: [{
350
454
  type: Output
455
+ }], flagTypeSubJourneyEmitter: [{
456
+ type: Output
351
457
  }] }); })();
352
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SelectFlagTypeComponent, { className: "SelectFlagTypeComponent", filePath: "lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.ts", lineNumber: 18 }); })();
353
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWZsYWctdHlwZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvcGFsZXR0ZS9jYXNlLWZsYWcvY29tcG9uZW50cy9zZWxlY3QtZmxhZy10eXBlL3NlbGVjdC1mbGFnLXR5cGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL2NvbXBvbmVudHMvc2VsZWN0LWZsYWctdHlwZS9zZWxlY3QtZmxhZy10eXBlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFcEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFILE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLCtFQUErRSxDQUFDOzs7Ozs7SUNMNUgsNkJBQWtFO0lBQ2hFLFlBS0Y7Ozs7OztJQUxFLGNBS0Y7SUFMRSxrT0FLRjs7O0lBRUUsWUFDRjs7OztJQURFLG9GQUNGOzs7SUFLRixBQUZGLCtCQUNxRCxlQUNmO0lBQUEsWUFBMkI7O0lBQUEsaUJBQU87SUFBQyxZQUN6RTs7SUFBQSxpQkFBTTs7O0lBRGdDLGVBQTJCO0lBQTNCLG9EQUEyQjtJQUFRLGVBQ3pFO0lBRHlFLDZGQUN6RTs7O0lBRUUsK0JBQTBHO0lBQ3hHLDRCQUVtRDtJQUNuRCxpQ0FBcUU7SUFDbkUsWUFDRjs7SUFDRixBQURFLGlCQUFRLEVBQ0o7Ozs7O0lBTitCLGNBQW9CO0lBQXBCLHVEQUFvQjtJQUVyRCxBQURhLEFBRHlDLHlEQUFvQyxzQkFDM0QsdURBQ2dCO0lBQ0YsY0FBcUI7SUFBckIsd0RBQXFCO0lBQ2xFLGNBQ0Y7SUFERSwwRUFDRjs7O0lBWUksQUFERiwrQkFBc0csZUFDaEU7SUFBQSxZQUEyQjs7SUFBQSxpQkFBTztJQUFDLFlBQ3pFOztJQUFBLGlCQUFNOzs7SUFEZ0MsZUFBMkI7SUFBM0Isb0RBQTJCO0lBQVEsZUFDekU7SUFEeUUsa0ZBQ3pFOzs7SUFLQSwrQkFDNEc7SUFDMUcsNEJBQ3lIO0lBQ3pILGlDQUErRTtJQUM3RSxZQUNGOztJQUNGLEFBREUsaUJBQVEsRUFDSjs7O0lBSkYsY0FBcUQ7SUFBQyxBQUF0RCwwRUFBcUQsd0VBQWlFO0lBRXRILGVBQ0Y7SUFERSx3R0FDRjs7O0lBcEJGLEFBREYsQUFERiwrQkFBK0YsYUFDRyxnQkFDakM7SUFDM0QsWUFLRjs7O0lBQUEsaUJBQVE7SUFDUiwrRkFBc0c7SUFHdEcsNEJBR2dFO0lBQ2hFLCtGQUM0RztJQVFoSCxBQURFLGlCQUFNLEVBQ0Y7OztJQXhCMEIsY0FBaUU7SUFBakUsNkZBQWlFO0lBRTNGLGVBS0Y7SUFMRSx3UEFLRjtJQUMrRCxlQUFxQztJQUFyQyw2REFBcUM7SUFJbEcsY0FBbUU7SUFFbkUsQUFEaUMsQUFEakMsNkZBQW1FLHlEQUNlLG9FQUN0QjtJQUUzRCxjQUF1RztJQUF2Ryw2SUFBdUc7OztJQS9DdEgsZ0NBQWdFO0lBSXhELEFBREYsQUFERixBQURGLDhCQUEyRyxrQkFDbkMsZ0JBQ0gsWUFDb0I7SUFRakYsQUFQQSx5R0FBa0UsMkhBTzlCO0lBSXhDLEFBREUsaUJBQUssRUFDRTtJQUNULHVGQUNxRDtJQUdyRCwrQkFBNEc7SUFTMUcsQUFSQSwyRkFBMEcsOEVBUVg7SUE0QnJHLEFBREUsQUFERSxpQkFBTSxFQUNHLEVBQ1A7Ozs7O0lBMURnQyw0Q0FBdUI7SUFDL0IsY0FBNEU7SUFBNUUsdUdBQTRFO0lBSW5GLGVBQXVCO0lBQUEsQUFBdkIsNkNBQXVCLHNDQUEwQjtJQWFqRSxlQUFnRDtJQUFoRCx3RUFBZ0Q7SUFJSSxlQUFjO0lBQVksQUFBMUIsMENBQWMseUNBQXFDO0lBUWhFLGNBQTJCO0lBQTNCLG1EQUEyQjs7OztJQWdDekUsQUFERiwrQkFBc0QsaUJBQ21CO0lBQW5CLG1MQUFTLGVBQVEsS0FBQztJQUFDLFlBQXlCOztJQUNsRyxBQURrRyxpQkFBUyxFQUNyRzs7SUFEbUUsZUFBeUI7SUFBekIsa0RBQXlCOztBRDdDbEcsTUFBTSxPQUFPLHVCQUF1QjtJQXlETDtJQXZEdEIsU0FBUyxDQUFZO0lBR3JCLFlBQVksQ0FBUztJQUdyQixVQUFVLENBQVM7SUFHbkIsY0FBYyxDQUFTO0lBR3ZCLGlDQUFpQyxHQUFHLEtBQUssQ0FBQztJQUcxQyx1Q0FBdUMsR0FBRyxLQUFLLENBQUM7SUFHaEQscUJBQXFCLENBQXlCO0lBRzlDLG9CQUFvQixHQUFnQyxJQUFJLFlBQVksRUFBaUIsQ0FBQztJQUd0RiwyQkFBMkIsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUVwRSxTQUFTLENBQWE7SUFDdEIsYUFBYSxDQUFpQjtJQUM5QiwrQkFBK0IsR0FBRyxFQUFFLENBQUM7SUFDckMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0lBQzFCLFlBQVksQ0FBZTtJQUMzQixZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLFVBQVUsQ0FBdUI7SUFDakMsY0FBYyxDQUFXO0lBQ3pCLGtDQUFrQyxDQUFlO0lBQ2pELGlCQUFpQixHQUFHLGtCQUFrQixDQUFDO0lBQ3ZDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFFZCw2QkFBNkIsR0FBRyxFQUFFLENBQUM7SUFDcEQsMERBQTBEO0lBQ3pDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQztJQUM3Qix5QkFBeUIsR0FBRyxXQUFXLENBQUM7SUFFekQsSUFBVyx1QkFBdUI7UUFDaEMsT0FBTyx1QkFBdUIsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDakUsQ0FBQztJQUVELElBQVcscUJBQXFCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsS0FBSyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDdEcsQ0FBQztJQUVELFlBQTZCLHNCQUE4QztRQUE5QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO0lBQUksQ0FBQztJQUV6RSxRQUFRO1FBQ2IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixLQUFLLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztRQUM5RyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQztRQUU3RixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFGLHNGQUFzRjtRQUN0RixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRWpHLHdFQUF3RTtRQUN4RSxJQUFJLENBQUMsa0NBQWtDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsWUFBWTthQUNyRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUVyQix5Q0FBeUM7WUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7Z0JBQ3hCLENBQUMscUNBQXFDLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFO2dCQUNoRSxDQUFDLHFDQUFxQyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsRUFBRTthQUNsRSxDQUFDLENBQUM7UUFDTCxDQUFDLENBQ0YsQ0FBQztRQUVGLHFGQUFxRjtRQUNyRixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxzQkFBc0I7aUJBQzVDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsaUNBQWlDLENBQUM7aUJBQ2hHLFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO2dCQUNuRCxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQzthQUMzQyxDQUFDLENBQUM7UUFDUCxDQUFDO2FBQU0sQ0FBQztZQUNOLCtIQUErSDtZQUMvSCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUM5RixJQUFJO1lBQ0gsbUdBQW1HO1lBQ25HLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxtQ0FBbUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbkcsMEdBQTBHO1lBQzFHLDRGQUE0RjtZQUM1RixTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQ2xILElBQUksRUFBRSxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUNqRDtpQkFDQSxTQUFTLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztnQkFDbkQsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7YUFDM0MsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNILENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFTSxNQUFNO1FBQ1gsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQiw0R0FBNEc7UUFDNUcsaUdBQWlHO1FBQ2pHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7WUFDN0IseUJBQXlCLEVBQUUsa0JBQWtCLENBQUMsU0FBUztZQUN2RCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDL0UsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQ2xDLENBQUMsQ0FBQztRQUNILDZHQUE2RztRQUM3RyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQsMkdBQTJHO1FBQzNHLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLGlIQUFpSDtZQUNqSCw4Q0FBOEM7WUFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDNUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDO1lBQ2xELElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4SSxDQUFDO0lBQ0gsQ0FBQztJQUVELDZFQUE2RTtJQUN0RSxnQkFBZ0IsQ0FBQyxDQUFTLEVBQUUsUUFBa0I7UUFDbkQsT0FBTyxHQUFHLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckUsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLCtCQUErQixHQUFHLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMzQix5RUFBeUU7WUFDekUsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN4QixZQUFZLEdBQUcsMEJBQTBCLENBQUMsNkJBQTZCLENBQUM7WUFDMUUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFlBQVksR0FBSSxJQUFJLENBQUMsaUNBQWlDO29CQUN0RCxDQUFDLENBQUMsMEJBQTBCLENBQUMsK0JBQStCO29CQUM1RCxDQUFDLENBQUMsMEJBQTBCLENBQUMsc0JBQXNCLENBQUM7WUFDdEQsQ0FBQztZQUNELElBQUksQ0FBQywrQkFBK0IsR0FBRyxZQUFZLENBQUM7WUFDcEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLENBQUMsQ0FBQztRQUN4RyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMvQixNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLEVBQUUsS0FBSyxDQUFDO1lBQ3RHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGlDQUFpQztvQkFDaEUsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLDhCQUE4QjtvQkFDM0QsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLHFCQUFxQixDQUFDO2dCQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLENBQUMsQ0FBQztZQUM5SCxDQUFDO1lBQ0QsSUFBSSx3QkFBd0IsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7Z0JBQ3pFLElBQUksQ0FBQyxvQkFBb0IsR0FBRywwQkFBMEIsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDaEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLDBCQUEwQixDQUFDLHdCQUF3QixFQUFFLEVBQUUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLENBQUMsQ0FBQztZQUN4SixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxTQUFxQjtRQUM1QywwRkFBMEY7UUFDMUYscUZBQXFGO1FBQ3JGLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUN2RCxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1RixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRSxJQUFJLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN2QixxRUFBcUU7WUFDckUsTUFBTSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsMEJBQTBCLENBQUMsV0FBVyxDQUFDLEtBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pILElBQUksQ0FBQyxVQUFVLEdBQUc7Z0JBQ2hCLEdBQUcsSUFBSTtnQkFDUCxhQUFhO2FBQ2QsQ0FBQztZQUNGLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQVU7UUFDL0IsbUdBQW1HO1FBQ25HLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZHLGdFQUFnRTtRQUNoRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNqSSxDQUFDO2lGQTNNVSx1QkFBdUI7NkRBQXZCLHVCQUF1QjtZQzRDcEMsQUE3REEsNEZBQWdFLDJEQTZEVjs7WUE3RHZDLDBFQUF1QjtZQTZETCxjQUFtQjtZQUFuQix3Q0FBbUI7OztpRkQ1Q3ZDLHVCQUF1QjtjQUxuQyxTQUFTOzJCQUNFLHNCQUFzQjt1REFNekIsU0FBUztrQkFEZixLQUFLO1lBSUMsWUFBWTtrQkFEbEIsS0FBSztZQUlDLFVBQVU7a0JBRGhCLEtBQUs7WUFJQyxjQUFjO2tCQURwQixLQUFLO1lBSUMsaUNBQWlDO2tCQUR2QyxLQUFLO1lBSUMsdUNBQXVDO2tCQUQ3QyxLQUFLO1lBSUMscUJBQXFCO2tCQUQzQixLQUFLO1lBSUMsb0JBQW9CO2tCQUQxQixNQUFNO1lBSUEsMkJBQTJCO2tCQURqQyxNQUFNOztrRkF6QkksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRmxhZ1R5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kb21haW4vY2FzZS1mbGFnJztcbmltcG9ydCB7IENhc2VGbGFnUmVmZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBSZWZkYXRhQ2FzZUZsYWdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZXMvY2FzZS1mbGFnL3JlZmRhdGEtY2FzZS1mbGFnLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBDYXNlRmxhZ1N0YXRlLCBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIH0gZnJvbSAnLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IENhc2VGbGFnRmllbGRTdGF0ZSwgQ2FzZUZsYWdGb3JtRmllbGRzLCBDYXNlRmxhZ1dpemFyZFN0ZXBUaXRsZSwgU2VsZWN0RmxhZ1R5cGVFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBTZWFyY2hMYW5ndWFnZUludGVycHJldGVyQ29udHJvbE5hbWVzIH0gZnJvbSAnLi4vc2VhcmNoLWxhbmd1YWdlLWludGVycHJldGVyL3NlYXJjaC1sYW5ndWFnZS1pbnRlcnByZXRlci1jb250cm9sLW5hbWVzLmVudW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2Qtc2VsZWN0LWZsYWctdHlwZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtZmxhZy10eXBlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LWZsYWctdHlwZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdEZsYWdUeXBlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKVxuICBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGp1cmlzZGljdGlvbjogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjYXNlVHlwZUlkOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGhtY3RzU2VydmljZUlkOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyMlBvaW50MUVuYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2VsZWN0ZWRGbGFnc0xvY2F0aW9uOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY2FzZUZsYWdTdGF0ZUVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxDYXNlRmxhZ1N0YXRlPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FzZUZsYWdTdGF0ZT4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGZsYWdDb21tZW50c09wdGlvbmFsRW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIGZsYWdUeXBlczogRmxhZ1R5cGVbXTtcbiAgcHVibGljIGVycm9yTWVzc2FnZXM6IEVycm9yTWVzc2FnZVtdO1xuICBwdWJsaWMgZmxhZ1R5cGVOb3RTZWxlY3RlZEVycm9yTWVzc2FnZSA9ICcnO1xuICBwdWJsaWMgZmxhZ1R5cGVFcnJvck1lc3NhZ2UgPSAnJztcbiAgcHVibGljIGZsYWdSZWZkYXRhJDogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgcmVmZGF0YUVycm9yID0gZmFsc2U7XG4gIHB1YmxpYyBjYWNoZWRQYXRoOiAoRmxhZ1R5cGUgfCBmYWxzZSlbXTtcbiAgcHVibGljIGNhY2hlZEZsYWdUeXBlOiBGbGFnVHlwZTtcbiAgcHVibGljIGZsYWdUeXBlQ29udHJvbENoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNhc2VGbGFnRm9ybUZpZWxkID0gQ2FzZUZsYWdGb3JtRmllbGRzO1xuICBwdWJsaWMgaXNDYXNlTGV2ZWxGbGFnID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtYXhDaGFyYWN0ZXJzRm9yT3RoZXJGbGFnVHlwZSA9IDgwO1xuICAvLyBDb2RlIGZvciBcIk90aGVyXCIgZmxhZyB0eXBlIGFzIGRlZmluZWQgaW4gUmVmZXJlbmNlIERhdGFcbiAgcHJpdmF0ZSByZWFkb25seSBvdGhlckZsYWdUeXBlQ29kZSA9ICdPVDAwMDEnO1xuICBwcml2YXRlIHJlYWRvbmx5IGNhc2VMZXZlbENhc2VGbGFnc0ZpZWxkSWQgPSAnY2FzZUZsYWdzJztcblxuICBwdWJsaWMgZ2V0IGNhc2VGbGFnV2l6YXJkU3RlcFRpdGxlKCk6IHR5cGVvZiBDYXNlRmxhZ1dpemFyZFN0ZXBUaXRsZSB7XG4gICAgcmV0dXJuIENhc2VGbGFnV2l6YXJkU3RlcFRpdGxlO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZEZsYWdUeXBlKCk6IEZsYWdUeXBlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuRkxBR19UWVBFKT8udmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG90aGVyRmxhZ1R5cGVTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5GTEFHX1RZUEUpPy52YWx1ZT8uZmxhZ0NvZGUgPT09IHRoaXMub3RoZXJGbGFnVHlwZUNvZGU7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNhc2VGbGFnUmVmZGF0YVNlcnZpY2U6IENhc2VGbGFnUmVmZGF0YVNlcnZpY2UpIHsgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ2FzZUxldmVsRmxhZyA9IHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uPy5mbGFncz8uZmxhZ3NDYXNlRmllbGRJZCA9PT0gdGhpcy5jYXNlTGV2ZWxDYXNlRmxhZ3NGaWVsZElkO1xuICAgIHRoaXMuZmxhZ1R5cGVzID0gW107XG4gICAgY29uc3QgZmxhZ1R5cGUgPSB0aGlzLmlzQ2FzZUxldmVsRmxhZyA/IFJlZmRhdGFDYXNlRmxhZ1R5cGUuQ0FTRSA6IFJlZmRhdGFDYXNlRmxhZ1R5cGUuUEFSVFk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKENhc2VGbGFnRm9ybUZpZWxkcy5GTEFHX1RZUEUsIG5ldyBGb3JtQ29udHJvbCgnJykpO1xuICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woQ2FzZUZsYWdGb3JtRmllbGRzLk9USEVSX0ZMQUdfREVTQ1JJUFRJT04sIG5ldyBGb3JtQ29udHJvbCgnJykpO1xuICAgIC8vIEZvcm1Db250cm9sIGlzIGxpbmtlZCB0byBhIGNoZWNrYm94IGlucHV0IGVsZW1lbnQsIHNvIGluaXRpYWwgdmFsdWUgc2hvdWxkIGJlIGZhbHNlXG4gICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbChDYXNlRmxhZ0Zvcm1GaWVsZHMuSVNfVklTSUJMRV9JTlRFUk5BTExZX09OTFksIG5ldyBGb3JtQ29udHJvbChmYWxzZSkpO1xuXG4gICAgLy8gU2hvdWxkIGNsZWFyIGRlc2NyaXB0aW9uQ29udHJvbE5hbWUgaWYgZmxhZ1R5cGVDb250cm9sTmFtZSBpcyBjaGFuZ2VkXG4gICAgdGhpcy5mbGFnVHlwZUNvbnRyb2xDaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5GTEFHX1RZUEUpPy52YWx1ZUNoYW5nZXNcbiAgICAgIC5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuT1RIRVJfRkxBR19ERVNDUklQVElPTik/LnNldFZhbHVlKCcnKTtcbiAgICAgICAgdGhpcy5jYWNoZWRQYXRoID0gW107XG5cbiAgICAgICAgLy8gcmVxdWlyZWQgdG8gY2xlYXIgbGFuZ3VhZ2UgaW50ZXJwcmV0ZXJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgW1NlYXJjaExhbmd1YWdlSW50ZXJwcmV0ZXJDb250cm9sTmFtZXMuTEFOR1VBR0VfU0VBUkNIX1RFUk1dOiAnJyxcbiAgICAgICAgICBbU2VhcmNoTGFuZ3VhZ2VJbnRlcnByZXRlckNvbnRyb2xOYW1lcy5NQU5VQUxfTEFOR1VBR0VfRU5UUlldOiAnJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gSWYgaG1jdHNTZXJ2aWNlSWQgaXMgcHJlc2VudCwgdXNlIHRoaXMgdG8gcmV0cmlldmUgdGhlIHJlbGV2YW50IGxpc3Qgb2YgZmxhZyB0eXBlc1xuICAgIGlmICh0aGlzLmhtY3RzU2VydmljZUlkKSB7XG4gICAgICB0aGlzLmZsYWdSZWZkYXRhJCA9IHRoaXMuY2FzZUZsYWdSZWZkYXRhU2VydmljZVxuICAgICAgICAuZ2V0Q2FzZUZsYWdzUmVmZGF0YSh0aGlzLmhtY3RzU2VydmljZUlkLCBmbGFnVHlwZSwgdHJ1ZSwgdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWwpXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IGZsYWdUeXBlcyA9PiB0aGlzLnByb2Nlc3NGbGFnVHlwZXMoZmxhZ1R5cGVzKSxcbiAgICAgICAgICBlcnJvcjogZXJyb3IgPT4gdGhpcy5vblJlZmRhdGFFcnJvcihlcnJvcilcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVsc2UsIEhNQ1RTIHNlcnZpY2UgY29kZSBpcyByZXF1aXJlZCB0byByZXRyaWV2ZSB0aGUgcmVsZXZhbnQgbGlzdCBvZiBmbGFnIHR5cGVzOyBhdHRlbXB0IHRvIG9idGFpbiBpdCBieSBjYXNlIHR5cGUgSUQgZmlyc3RcbiAgICAgIHRoaXMuZmxhZ1JlZmRhdGEkID0gdGhpcy5jYXNlRmxhZ1JlZmRhdGFTZXJ2aWNlLmdldEhtY3RzU2VydmljZURldGFpbHNCeUNhc2VUeXBlKHRoaXMuY2FzZVR5cGVJZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gSWYgYW4gZXJyb3Igb2NjdXJzIHJldHJpZXZpbmcgSE1DVFMgc2VydmljZSBkZXRhaWxzIGJ5IGNhc2UgdHlwZSBJRCwgdHJ5IGJ5IHNlcnZpY2UgbmFtZSBpbnN0ZWFkXG4gICAgICAgICAgY2F0Y2hFcnJvcihfID0+IHRoaXMuY2FzZUZsYWdSZWZkYXRhU2VydmljZS5nZXRIbWN0c1NlcnZpY2VEZXRhaWxzQnlTZXJ2aWNlTmFtZSh0aGlzLmp1cmlzZGljdGlvbikpLFxuICAgICAgICAgIC8vIFVzZSBzd2l0Y2hNYXAgdG8gcmV0dXJuIGFuIGlubmVyIE9ic2VydmFibGUgb2YgdGhlIGZsYWcgdHlwZXMgZGF0YSwgaGF2aW5nIHJlY2VpdmVkIHRoZSBzZXJ2aWNlIGRldGFpbHNcbiAgICAgICAgICAvLyBpbmNsdWRpbmcgc2VydmljZV9jb2RlLiBUaGlzIGF2b2lkcyBoYXZpbmcgbmVzdGVkIGBzdWJzY3JpYmVgcywgd2hpY2ggaXMgYW4gYW50aS1wYXR0ZXJuIVxuICAgICAgICAgIHN3aXRjaE1hcChzZXJ2aWNlRGV0YWlscyA9PiB0aGlzLmNhc2VGbGFnUmVmZGF0YVNlcnZpY2UuZ2V0Q2FzZUZsYWdzUmVmZGF0YShzZXJ2aWNlRGV0YWlsc1swXS5zZXJ2aWNlX2NvZGUsIGZsYWdUeXBlLFxuICAgICAgICAgICAgdHJ1ZSwgdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWwpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IGZsYWdUeXBlcyA9PiB0aGlzLnByb2Nlc3NGbGFnVHlwZXMoZmxhZ1R5cGVzKSxcbiAgICAgICAgICBlcnJvcjogZXJyb3IgPT4gdGhpcy5vblJlZmRhdGFFcnJvcihlcnJvcilcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZmxhZ1JlZmRhdGEkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZmxhZ1R5cGVDb250cm9sQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk5leHQoKTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGUgZm9ybVxuICAgIHRoaXMudmFsaWRhdGVGb3JtKCk7XG4gICAgLy8gUmV0dXJuIGNhc2UgZmxhZyBmaWVsZCBzdGF0ZSwgd2hldGhlciB0aGUgc2VsZWN0ZWQgZmxhZyB0eXBlIChpZiBhbnkpIGlzIGEgcGFyZW50IG9yIG5vdCwgZXJyb3IgbWVzc2FnZXMsXG4gICAgLy8gZmxhZyBuYW1lLCBwYXRoLCBoZWFyaW5nIHJlbGV2YW50IGluZGljYXRvciwgY29kZSwgYW5kIFwibGlzdCBvZiB2YWx1ZXNcIiAoaWYgYW55KSB0byB0aGUgcGFyZW50XG4gICAgdGhpcy5jYXNlRmxhZ1N0YXRlRW1pdHRlci5lbWl0KHtcbiAgICAgIGN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGU6IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEUsXG4gICAgICBpc1BhcmVudEZsYWdUeXBlOiB0aGlzLnNlbGVjdGVkRmxhZ1R5cGUgPyB0aGlzLnNlbGVjdGVkRmxhZ1R5cGUuaXNQYXJlbnQgOiBudWxsLFxuICAgICAgZXJyb3JNZXNzYWdlczogdGhpcy5lcnJvck1lc3NhZ2VzXG4gICAgfSk7XG4gICAgLy8gRW1pdCBcImZsYWcgY29tbWVudHMgb3B0aW9uYWxcIiBldmVudCBpZiB0aGUgdXNlciBzZWxlY3RzIGEgY2hpbGQgZmxhZyB0eXBlIHdoZXJlIGNvbW1lbnRzIGFyZSBub3QgbWFuZGF0b3J5XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGbGFnVHlwZSAmJiAhdGhpcy5zZWxlY3RlZEZsYWdUeXBlLmlzUGFyZW50ICYmICF0aGlzLnNlbGVjdGVkRmxhZ1R5cGUuZmxhZ0NvbW1lbnQpIHtcbiAgICAgIHRoaXMuZmxhZ0NvbW1lbnRzT3B0aW9uYWxFbWl0dGVyLmVtaXQobnVsbCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHNlbGVjdGVkIGZsYWcgdHlwZSBpcyBhIHBhcmVudCwgbG9hZCB0aGUgbGlzdCBvZiBjaGlsZCBmbGFnIHR5cGVzIGFuZCByZXNldCB0aGUgY3VycmVudCBzZWxlY3Rpb25cbiAgICBpZiAodGhpcy5zZWxlY3RlZEZsYWdUeXBlPy5pc1BhcmVudCkge1xuICAgICAgLy8gQ2FjaGUgdGhlIGN1cnJlbnQgZmxhZyB0eXBlIHNlbGVjdGlvbiBiZWZvcmUgaXQgaXMgcmVzZXQgLSB0aGlzIGlzIG5lZWRlZCBmb3IgZGlzcGxheWluZyBpdHMgbmFtZSBhcyB0aGUgdGl0bGVcbiAgICAgIC8vIHdoZW4gZGlzcGxheWluZyB0aGUgbmV4dCBzZXQgb2YgY2hpbGQgZmxhZ3NcbiAgICAgIHRoaXMuY2FjaGVkRmxhZ1R5cGUgPSB0aGlzLnNlbGVjdGVkRmxhZ1R5cGU7XG4gICAgICB0aGlzLmZsYWdUeXBlcyA9IHRoaXMuc2VsZWN0ZWRGbGFnVHlwZS5jaGlsZEZsYWdzO1xuICAgICAgdGhpcy5jYWNoZWRQYXRoPy5zaGlmdCgpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5GTEFHX1RZUEUpPy5zZXRWYWx1ZSh0aGlzLmNhY2hlZFBhdGg/Lmxlbmd0aCA/IHRoaXMuY2FjaGVkUGF0aFswXSA6IG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBJZGVudGl0eSBmdW5jdGlvbiBmb3IgdHJhY2tCeSB1c2UgYnkgKm5nRm9yIGZvciBmbGFnVHlwZXMgaW4gSFRNTCB0ZW1wbGF0ZVxuICBwdWJsaWMgaWRlbnRpZnlGbGFnVHlwZShfOiBudW1iZXIsIGZsYWdUeXBlOiBGbGFnVHlwZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2ZsYWdUeXBlLmZsYWdDb2RlfV8ke2ZsYWdUeXBlLm5hbWV9XyR7ZmxhZ1R5cGUubmFtZV9jeX1gO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5mbGFnVHlwZU5vdFNlbGVjdGVkRXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5mbGFnVHlwZUVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IFtdO1xuXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRmxhZ1R5cGUpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIGFueSBwcmlvciBmbGFnIHR5cGUgc2VsZWN0aW9uIHRoZW4gdGhlIG1lc3NhZ2Ugd2lsbCBkaWZmZXJcbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnJztcbiAgICAgIGlmICh0aGlzLmNhY2hlZEZsYWdUeXBlKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IFNlbGVjdEZsYWdUeXBlRXJyb3JNZXNzYWdlLkZMQUdfVFlQRV9PUFRJT05fTk9UX1NFTEVDVEVEO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlICA9IHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXG4gICAgICAgID8gU2VsZWN0RmxhZ1R5cGVFcnJvck1lc3NhZ2UuRkxBR19UWVBFX05PVF9TRUxFQ1RFRF9FWFRFUk5BTFxuICAgICAgICA6IFNlbGVjdEZsYWdUeXBlRXJyb3JNZXNzYWdlLkZMQUdfVFlQRV9OT1RfU0VMRUNURUQ7XG4gICAgICB9XG4gICAgICB0aGlzLmZsYWdUeXBlTm90U2VsZWN0ZWRFcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7IHRpdGxlOiAnJywgZGVzY3JpcHRpb246IGVycm9yTWVzc2FnZSwgZmllbGRJZDogJ2NvbmRpdGlvbmFsLXJhZGlvcy1saXN0JyB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3RoZXJGbGFnVHlwZVNlbGVjdGVkKSB7XG4gICAgICBjb25zdCBvdGhlckZsYWdUeXBlRGVzY3JpcHRpb24gPSB0aGlzLmZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLk9USEVSX0ZMQUdfREVTQ1JJUFRJT04pPy52YWx1ZTtcbiAgICAgIGlmICghb3RoZXJGbGFnVHlwZURlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuZmxhZ1R5cGVFcnJvck1lc3NhZ2UgPSB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbFxuICAgICAgICAgID8gU2VsZWN0RmxhZ1R5cGVFcnJvck1lc3NhZ2UuRkxBR19UWVBFX05PVF9FTlRFUkVEX0VYVEVSTkFMXG4gICAgICAgICAgOiBTZWxlY3RGbGFnVHlwZUVycm9yTWVzc2FnZS5GTEFHX1RZUEVfTk9UX0VOVEVSRUQ7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlcy5wdXNoKHsgdGl0bGU6ICcnLCBkZXNjcmlwdGlvbjogYCR7dGhpcy5mbGFnVHlwZUVycm9yTWVzc2FnZX1gLCBmaWVsZElkOiAnb3RoZXItZmxhZy10eXBlLWRlc2NyaXB0aW9uJyB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChvdGhlckZsYWdUeXBlRGVzY3JpcHRpb24ubGVuZ3RoID4gdGhpcy5tYXhDaGFyYWN0ZXJzRm9yT3RoZXJGbGFnVHlwZSkge1xuICAgICAgICB0aGlzLmZsYWdUeXBlRXJyb3JNZXNzYWdlID0gU2VsZWN0RmxhZ1R5cGVFcnJvck1lc3NhZ2UuRkxBR19UWVBFX0xJTUlUX0VYQ0VFREVEO1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7IHRpdGxlOiAnJywgZGVzY3JpcHRpb246IGAke1NlbGVjdEZsYWdUeXBlRXJyb3JNZXNzYWdlLkZMQUdfVFlQRV9MSU1JVF9FWENFRURFRH1gLCBmaWVsZElkOiAnb3RoZXItZmxhZy10eXBlLWRlc2NyaXB0aW9uJyB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NGbGFnVHlwZXMoZmxhZ1R5cGVzOiBGbGFnVHlwZVtdKTogdm9pZCB7XG4gICAgLy8gRmlyc3QgKGFuZCBvbmx5KSBvYmplY3QgaW4gdGhlIHJldHVybmVkIGFycmF5IHNob3VsZCBiZSB0aGUgdG9wLWxldmVsIFwiUGFydHlcIiBmbGFnIHR5cGVcbiAgICAvLyBUaGUgXCJPdGhlclwiIGZsYWcgdHlwZSBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSB0b3AgbGV2ZWwgaWYgdGhlIHVzZXIgaXMgZXh0ZXJuYWxcbiAgICB0aGlzLmZsYWdUeXBlcyA9IGZsYWdUeXBlc1swXS5jaGlsZEZsYWdzLmZpbHRlcigoZmxhZykgPT5cbiAgICAgIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsID8gZmxhZy5mbGFnQ29kZSAhPT0gdGhpcy5vdGhlckZsYWdUeXBlQ29kZSA6IHRydWUpO1xuXG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkZMQUdfVFlQRSk7XG4gICAgaWYgKGZvcm1Db250cm9sPy52YWx1ZSkge1xuICAgICAgLy8gQ2FjaGUgUGF0aCBiYXNlZCBvbiBleGlzdGluZyBmbGFnQ29kZSAtLSBuZWVkZWQgZm9yIG5lc3RlZCBjaG9pY2VzXG4gICAgICBjb25zdCBbZm91bmRGbGFnVHlwZSwgcGF0aF0gPSBGbGFnVHlwZS5zZWFyY2hQYXRoQnlGbGFnVHlwZU9iamVjdChmb3JtQ29udHJvbC52YWx1ZSBhcyBGbGFnVHlwZSwgdGhpcy5mbGFnVHlwZXMpO1xuICAgICAgdGhpcy5jYWNoZWRQYXRoID0gW1xuICAgICAgICAuLi5wYXRoLFxuICAgICAgICBmb3VuZEZsYWdUeXBlXG4gICAgICBdO1xuICAgICAgZm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5jYWNoZWRQYXRoWzBdLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvblJlZmRhdGFFcnJvcihlcnJvcjogYW55KTogdm9pZCB7XG4gICAgLy8gU2V0IGVycm9yIGZsYWcgb24gY29tcG9uZW50IHRvIHJlbW92ZSB0aGUgXCJOZXh0XCIgYnV0dG9uICh1c2VyIGNhbm5vdCBwcm9jZWVkIHdpdGggZmxhZyBjcmVhdGlvbilcbiAgICB0aGlzLnJlZmRhdGFFcnJvciA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gW107XG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzLnB1c2goeyB0aXRsZTogJycsIGRlc2NyaXB0aW9uOiBlcnJvci5tZXNzYWdlLCBmaWVsZElkOiAnY29uZGl0aW9uYWwtcmFkaW9zLWxpc3QnIH0pO1xuICAgIC8vIFJldHVybiBjYXNlIGZsYWcgZmllbGQgc3RhdGUgYW5kIGVycm9yIG1lc3NhZ2VzIHRvIHRoZSBwYXJlbnRcbiAgICB0aGlzLmNhc2VGbGFnU3RhdGVFbWl0dGVyLmVtaXQoeyBjdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlOiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19UWVBFLCBlcnJvck1lc3NhZ2VzOiB0aGlzLmVycm9yTWVzc2FnZXMgfSk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJmbGFnVHlwZXM/Lmxlbmd0aFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgW25nQ2xhc3NdPVwieydmb3JtLWdyb3VwLWVycm9yJzogZmxhZ1R5cGVOb3RTZWxlY3RlZEVycm9yTWVzc2FnZS5sZW5ndGggPiAwfVwiPlxuICAgIDxmaWVsZHNldCBjbGFzcz1cImdvdnVrLWZpZWxkc2V0XCIgYXJpYS1kZXNjcmliZWRieT1cImZsYWctdHlwZS1oZWFkaW5nXCI+XG4gICAgICA8bGVnZW5kIGNsYXNzPVwiZ292dWstZmllbGRzZXRfX2xlZ2VuZCBnb3Z1ay1maWVsZHNldF9fbGVnZW5kLS1tXCI+XG4gICAgICAgIDxoMSBpZD1cImZsYWctdHlwZS1oZWFkaW5nXCIgY2xhc3M9XCJnb3Z1ay1maWVsZHNldF9faGVhZGluZyBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tMVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY2FjaGVkRmxhZ1R5cGU7IGVsc2UgcHJpb3JGbGFnVHlwZVNlbGVjdGVkXCI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICBpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxcbiAgICAgICAgICAgICAgICA/IChjYXNlRmxhZ1dpemFyZFN0ZXBUaXRsZS5TRUxFQ1RfQ0FTRV9GTEFHX0VYVEVSTkFMIHwgcnB4VHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgIDogKGNhc2VGbGFnV2l6YXJkU3RlcFRpdGxlLlNFTEVDVF9DQVNFX0ZMQUcgfCBycHhUcmFuc2xhdGUpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcHJpb3JGbGFnVHlwZVNlbGVjdGVkPlxuICAgICAgICAgICAge3tjYWNoZWRGbGFnVHlwZSB8IGZsYWdGaWVsZERpc3BsYXk6J25hbWUnfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2gxPlxuICAgICAgPC9sZWdlbmQ+XG4gICAgICA8ZGl2IGlkPVwiZmxhZy10eXBlLW5vdC1zZWxlY3RlZC1lcnJvci1tZXNzYWdlXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1tZXNzYWdlXCJcbiAgICAgICAgKm5nSWY9XCJmbGFnVHlwZU5vdFNlbGVjdGVkRXJyb3JNZXNzYWdlLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay12aXN1YWxseS1oaWRkZW5cIj57eydFcnJvcjonIHwgcnB4VHJhbnNsYXRlfX08L3NwYW4+IHt7ZmxhZ1R5cGVOb3RTZWxlY3RlZEVycm9yTWVzc2FnZSB8IHJweFRyYW5zbGF0ZX19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1yYWRpb3MgZ292dWstcmFkaW9zLS1jb25kaXRpb25hbFwiIGRhdGEtbW9kdWxlPVwiZ292dWstcmFkaW9zXCIgaWQ9XCJjb25kaXRpb25hbC1yYWRpb3MtbGlzdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zX19pdGVtXCIgKm5nRm9yPVwibGV0IGZsYWdUeXBlIG9mIGZsYWdUeXBlczsgaW5kZXggYXMgaTsgdHJhY2tCeTogaWRlbnRpZnlGbGFnVHlwZVwiPlxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImdvdnVrLXJhZGlvc19faW5wdXRcIiBpZD1cImZsYWctdHlwZS17e2l9fVwiIFtuYW1lXT1cImNhc2VGbGFnRm9ybUZpZWxkLkZMQUdfVFlQRVwiXG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIiBbdmFsdWVdPVwiZmxhZ1R5cGVcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjYXNlRmxhZ0Zvcm1GaWVsZC5GTEFHX1RZUEVcIi8+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstcmFkaW9zX19sYWJlbFwiIGZvcj1cImZsYWctdHlwZS17e2l9fVwiPlxuICAgICAgICAgICAge3tmbGFnVHlwZSB8IGZsYWdGaWVsZERpc3BsYXk6J25hbWUnfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc19fY29uZGl0aW9uYWxcIiAqbmdJZj1cIm90aGVyRmxhZ1R5cGVTZWxlY3RlZFwiIGlkPVwiY29uZGl0aW9uYWwtZmxhZ1R5cGVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiIFtuZ0NsYXNzXT1cInsnZm9ybS1ncm91cC1lcnJvcic6IGZsYWdUeXBlRXJyb3JNZXNzYWdlLmxlbmd0aCA+IDB9XCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbFwiIGZvcj1cIm90aGVyLWZsYWctdHlwZS1kZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIGlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbFxuICAgICAgICAgICAgICAgICAgPyAoY2FzZUZsYWdXaXphcmRTdGVwVGl0bGUuT1RIRVJfRkxBR19UWVBFX0RFU0NSSVBUSU9OX0VYVEVSTkFMIHwgcnB4VHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgICAgOiAoY2FzZUZsYWdXaXphcmRTdGVwVGl0bGUuT1RIRVJfRkxBR19UWVBFX0RFU0NSSVBUSU9OIHwgcnB4VHJhbnNsYXRlKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJmbGFnLXR5cGUtZXJyb3ItbWVzc2FnZVwiIGNsYXNzPVwiZ292dWstZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiZmxhZ1R5cGVFcnJvck1lc3NhZ2UubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXZpc3VhbGx5LWhpZGRlblwiPnt7J0Vycm9yOicgfCBycHhUcmFuc2xhdGV9fTwvc3Bhbj4ge3tmbGFnVHlwZUVycm9yTWVzc2FnZSB8IHJweFRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImdvdnVrLWlucHV0IGdvdnVrLSEtd2lkdGgtb25lLWhhbGZcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2dvdnVrLWlucHV0LS1lcnJvcic6IGZsYWdUeXBlRXJyb3JNZXNzYWdlLmxlbmd0aCA+IDB9XCJcbiAgICAgICAgICAgICAgaWQ9XCJvdGhlci1mbGFnLXR5cGUtZGVzY3JpcHRpb25cIiBbbmFtZV09XCJjYXNlRmxhZ0Zvcm1GaWVsZC5PVEhFUl9GTEFHX0RFU0NSSVBUSU9OXCIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNhc2VGbGFnRm9ybUZpZWxkLk9USEVSX0ZMQUdfREVTQ1JJUFRJT05cIi8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstY2hlY2tib3hlc19faXRlbSBnb3Z1ay0hLW1hcmdpbi10b3AtNFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbCAmJiAhaXNDYXNlTGV2ZWxGbGFnICYmIGlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIyUG9pbnQxRW5hYmxlZFwiPlxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJnb3Z1ay1jaGVja2JveGVzX19pbnB1dFwiIGlkPVwiaXMtdmlzaWJsZS1leHRlcm5hbGx5XCIgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJjYXNlRmxhZ0Zvcm1GaWVsZC5JU19WSVNJQkxFX0lOVEVSTkFMTFlfT05MWVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY2FzZUZsYWdGb3JtRmllbGQuSVNfVklTSUJMRV9JTlRFUk5BTExZX09OTFlcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstY2hlY2tib3hlc19fbGFiZWxcIiBmb3I9XCJpcy12aXNpYmxlLWV4dGVybmFsbHlcIj5cbiAgICAgICAgICAgICAgICB7eydUaGlzIGZsYWcgc2hvdWxkIG9ubHkgYmUgdmlzaWJsZSB0byBITUNUUyBTdGFmZicgfCBycHhUcmFuc2xhdGV9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9maWVsZHNldD5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi1ncm91cFwiICpuZ0lmPVwiIXJlZmRhdGFFcnJvclwiPlxuICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbk5leHQoKVwiPnt7J05leHQnIHwgcnB4VHJhbnNsYXRlfX08L2J1dHRvbj5cbjwvZGl2PlxuIl19
458
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SelectFlagTypeComponent, { className: "SelectFlagTypeComponent", filePath: "lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.ts", lineNumber: 19 }); })();
459
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWZsYWctdHlwZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvcGFsZXR0ZS9jYXNlLWZsYWcvY29tcG9uZW50cy9zZWxlY3QtZmxhZy10eXBlL3NlbGVjdC1mbGFnLXR5cGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL2NvbXBvbmVudHMvc2VsZWN0LWZsYWctdHlwZS9zZWxlY3QtZmxhZy10eXBlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLDhCQUE4QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFcEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxxQ0FBcUMs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UUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDOUIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO2lGQXhVVSx1QkFBdUI7NkRBQXZCLHVCQUF1QjtZQ2xCcEMsNEZBQWdFOztZQUFqRCwwRUFBdUI7OztpRkRrQnpCLHVCQUF1QjtjQUxuQyxTQUFTOzJCQUNFLHNCQUFzQjtvR0FNekIsU0FBUztrQkFEZixLQUFLO1lBSUMsWUFBWTtrQkFEbEIsS0FBSztZQUlDLFVBQVU7a0JBRGhCLEtBQUs7WUFJQyxjQUFjO2tCQURwQixLQUFLO1lBSUMsaUNBQWlDO2tCQUR2QyxLQUFLO1lBSUMsdUNBQXVDO2tCQUQ3QyxLQUFLO1lBSUMscUJBQXFCO2tCQUQzQixLQUFLO1lBSUMsb0JBQW9CO2tCQUQxQixNQUFNO1lBSUEsMkJBQTJCO2tCQURqQyxNQUFNO1lBSUEseUJBQXlCO2tCQUQvQixNQUFNOztrRkE1QkksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UsIEpvdXJuZXkgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRmxhZ1R5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kb21haW4vY2FzZS1mbGFnJztcbmltcG9ydCB7IENhc2VGbGFnUmVmZGF0YVNlcnZpY2UsIE11bHRpcGFnZUNvbXBvbmVudFN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IFJlZmRhdGFDYXNlRmxhZ1R5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcy9jYXNlLWZsYWcvcmVmZGF0YS1jYXNlLWZsYWctdHlwZS5lbnVtJztcbmltcG9ydCB7IENhc2VGbGFnU3RhdGUsIEZsYWdzV2l0aEZvcm1Hcm91cFBhdGggfSBmcm9tICcuLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgQ2FzZUZsYWdGaWVsZFN0YXRlLCBDYXNlRmxhZ0Zvcm1GaWVsZHMsIENhc2VGbGFnV2l6YXJkU3RlcFRpdGxlLCBTZWxlY3RGbGFnVHlwZUVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IEFic3RyYWN0Sm91cm5leUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Jhc2UtZmllbGQvYWJzdHJhY3Qtam91cm5leS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoTGFuZ3VhZ2VJbnRlcnByZXRlckNvbnRyb2xOYW1lcyB9IGZyb20gJy4uL3NlYXJjaC1sYW5ndWFnZS1pbnRlcnByZXRlci9zZWFyY2gtbGFuZ3VhZ2UtaW50ZXJwcmV0ZXItY29udHJvbC1uYW1lcy5lbnVtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLXNlbGVjdC1mbGFnLXR5cGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LWZsYWctdHlwZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC1mbGFnLXR5cGUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RGbGFnVHlwZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Sm91cm5leUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBKb3VybmV5IHtcbiAgQElucHV0KClcbiAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBqdXJpc2RpY3Rpb246IHN0cmluZztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY2FzZVR5cGVJZDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBobWN0c1NlcnZpY2VJZDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWwgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNlbGVjdGVkRmxhZ3NMb2NhdGlvbjogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aDtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGNhc2VGbGFnU3RhdGVFbWl0dGVyOiBFdmVudEVtaXR0ZXI8Q2FzZUZsYWdTdGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPENhc2VGbGFnU3RhdGU+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBmbGFnQ29tbWVudHNPcHRpb25hbEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgZmxhZ1R5cGVTdWJKb3VybmV5RW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIGZsYWdUeXBlczogRmxhZ1R5cGVbXTtcbiAgcHVibGljIGVycm9yTWVzc2FnZXM6IEVycm9yTWVzc2FnZVtdO1xuICBwdWJsaWMgZmxhZ1R5cGVOb3RTZWxlY3RlZEVycm9yTWVzc2FnZSA9ICcnO1xuICBwdWJsaWMgZmxhZ1R5cGVFcnJvck1lc3NhZ2UgPSAnJztcbiAgcHVibGljIGZsYWdSZWZkYXRhJDogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgcmVmZGF0YUVycm9yID0gZmFsc2U7XG4gIHB1YmxpYyBjYWNoZWRQYXRoOiAoRmxhZ1R5cGUgfCBmYWxzZSlbXTtcbiAgcHVibGljIGNhY2hlZEZsYWdUeXBlOiBGbGFnVHlwZTtcbiAgcHVibGljIGZsYWdUeXBlQ29udHJvbENoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNhc2VGbGFnRm9ybUZpZWxkID0gQ2FzZUZsYWdGb3JtRmllbGRzO1xuICBwdWJsaWMgaXNDYXNlTGV2ZWxGbGFnID0gZmFsc2U7XG4gIHB1YmxpYyBjYWNoZWRSREZsYWdUeXBlczogRmxhZ1R5cGVbXTtcbiAgcHVibGljIHN1YkpvdXJuZXlJbmRleDogbnVtYmVyID0gMDtcblxuICBwcml2YXRlIHJlYWRvbmx5IG1heENoYXJhY3RlcnNGb3JPdGhlckZsYWdUeXBlID0gODA7XG4gIC8vIENvZGUgZm9yIFwiT3RoZXJcIiBmbGFnIHR5cGUgYXMgZGVmaW5lZCBpbiBSZWZlcmVuY2UgRGF0YVxuICBwcml2YXRlIHJlYWRvbmx5IG90aGVyRmxhZ1R5cGVDb2RlID0gJ09UMDAwMSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FzZUxldmVsQ2FzZUZsYWdzRmllbGRJZCA9ICdjYXNlRmxhZ3MnO1xuXG4gIHB1YmxpYyBnZXQgY2FzZUZsYWdXaXphcmRTdGVwVGl0bGUoKTogdHlwZW9mIENhc2VGbGFnV2l6YXJkU3RlcFRpdGxlIHtcbiAgICByZXR1cm4gQ2FzZUZsYWdXaXphcmRTdGVwVGl0bGU7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjYXNlRmxhZ1JlZmRhdGFTZXJ2aWNlOiBDYXNlRmxhZ1JlZmRhdGFTZXJ2aWNlLCBwYWdlU3RhdGVTZXJ2aWNlOiBNdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2UpIHtcbiAgICBzdXBlcihwYWdlU3RhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLmhhbmRsZUJhY2tCdXR0b25TdWJKb3VybmV5ID0gdGhpcy5oYW5kbGVCYWNrQnV0dG9uU3ViSm91cm5leS5iaW5kKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZEZsYWdUeXBlKCk6IEZsYWdUeXBlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuRkxBR19UWVBFKT8udmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG90aGVyRmxhZ1R5cGVTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5GTEFHX1RZUEUpPy52YWx1ZT8uZmxhZ0NvZGUgPT09IHRoaXMub3RoZXJGbGFnVHlwZUNvZGU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc0Nhc2VMZXZlbEZsYWcgPSB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbj8uZmxhZ3M/LmZsYWdzQ2FzZUZpZWxkSWQgPT09IHRoaXMuY2FzZUxldmVsQ2FzZUZsYWdzRmllbGRJZDtcbiAgICB0aGlzLmZsYWdUeXBlU3ViSm91cm5leUVtaXR0ZXIuZW1pdCh0aGlzLnN1YkpvdXJuZXlJbmRleCk7XG4gICAgdGhpcy5hZGRTdGF0ZSh0aGlzLnN1YkpvdXJuZXlJbmRleCk7XG4gICAgdGhpcy5mbGFnVHlwZXMgPSBbXTtcbiAgICBjb25zdCBmbGFnVHlwZSA9IHRoaXMuaXNDYXNlTGV2ZWxGbGFnID8gUmVmZGF0YUNhc2VGbGFnVHlwZS5DQVNFIDogUmVmZGF0YUNhc2VGbGFnVHlwZS5QQVJUWTtcbiAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKENhc2VGbGFnRm9ybUZpZWxkcy5GTEFHX1RZUEUsIG5ldyBGb3JtQ29udHJvbCgnJykpO1xuICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woQ2FzZUZsYWdGb3JtRmllbGRzLk9USEVSX0ZMQUdfREVTQ1JJUFRJT04sIG5ldyBGb3JtQ29udHJvbCgnJykpO1xuICAgIC8vIEZvcm1Db250cm9sIGlzIGxpbmtlZCB0byBhIGNoZWNrYm94IGlucHV0IGVsZW1lbnQsIHNvIGluaXRpYWwgdmFsdWUgc2hvdWxkIGJlIGZhbHNlXG4gICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbChDYXNlRmxhZ0Zvcm1GaWVsZHMuSVNfVklTSUJMRV9JTlRFUk5BTExZX09OTFksIG5ldyBGb3JtQ29udHJvbChmYWxzZSkpO1xuXG4gICAgLy8gU2hvdWxkIGNsZWFyIGRlc2NyaXB0aW9uQ29udHJvbE5hbWUgaWYgZmxhZ1R5cGVDb250cm9sTmFtZSBpcyBjaGFuZ2VkXG4gICAgdGhpcy5mbGFnVHlwZUNvbnRyb2xDaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5GTEFHX1RZUEUpPy52YWx1ZUNoYW5nZXNcbiAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5PVEhFUl9GTEFHX0RFU0NSSVBUSU9OKT8uc2V0VmFsdWUoJycpO1xuICAgICAgICB0aGlzLmNhY2hlZFBhdGggPSBbXTtcblxuICAgICAgICAvLyByZXF1aXJlZCB0byBjbGVhciBsYW5ndWFnZSBpbnRlcnByZXRlclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHtcbiAgICAgICAgICBbU2VhcmNoTGFuZ3VhZ2VJbnRlcnByZXRlckNvbnRyb2xOYW1lcy5MQU5HVUFHRV9TRUFSQ0hfVEVSTV06ICcnLFxuICAgICAgICAgIFtTZWFyY2hMYW5ndWFnZUludGVycHJldGVyQ29udHJvbE5hbWVzLk1BTlVBTF9MQU5HVUFHRV9FTlRSWV06ICcnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgKTtcblxuICAgIC8vIElmIGhtY3RzU2VydmljZUlkIGlzIHByZXNlbnQsIHVzZSB0aGlzIHRvIHJldHJpZXZlIHRoZSByZWxldmFudCBsaXN0IG9mIGZsYWcgdHlwZXNcbiAgICBpZiAodGhpcy5obWN0c1NlcnZpY2VJZCkge1xuICAgICAgdGhpcy5mbGFnUmVmZGF0YSQgPSB0aGlzLmNhc2VGbGFnUmVmZGF0YVNlcnZpY2VcbiAgICAgICAgLmdldENhc2VGbGFnc1JlZmRhdGEodGhpcy5obWN0c1NlcnZpY2VJZCwgZmxhZ1R5cGUsIHRydWUsIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoZmxhZ1R5cGVzKSA9PiB0aGlzLnByb2Nlc3NGbGFnVHlwZXMoZmxhZ1R5cGVzKSxcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB0aGlzLm9uUmVmZGF0YUVycm9yKGVycm9yKVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWxzZSwgSE1DVFMgc2VydmljZSBjb2RlIGlzIHJlcXVpcmVkIHRvIHJldHJpZXZlIHRoZSByZWxldmFudCBsaXN0IG9mIGZsYWcgdHlwZXM7IGF0dGVtcHQgdG8gb2J0YWluIGl0IGJ5IGNhc2UgdHlwZSBJRCBmaXJzdFxuICAgICAgdGhpcy5mbGFnUmVmZGF0YSQgPSB0aGlzLmNhc2VGbGFnUmVmZGF0YVNlcnZpY2UuZ2V0SG1jdHNTZXJ2aWNlRGV0YWlsc0J5Q2FzZVR5cGUodGhpcy5jYXNlVHlwZUlkKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBJZiBhbiBlcnJvciBvY2N1cnMgcmV0cmlldmluZyBITUNUUyBzZXJ2aWNlIGRldGFpbHMgYnkgY2FzZSB0eXBlIElELCB0cnkgYnkgc2VydmljZSBuYW1lIGluc3RlYWRcbiAgICAgICAgICBjYXRjaEVycm9yKChfKSA9PiB0aGlzLmNhc2VGbGFnUmVmZGF0YVNlcnZpY2UuZ2V0SG1jdHNTZXJ2aWNlRGV0YWlsc0J5U2VydmljZU5hbWUodGhpcy5qdXJpc2RpY3Rpb24pKSxcbiAgICAgICAgICAvLyBVc2Ugc3dpdGNoTWFwIHRvIHJldHVybiBhbiBpbm5lciBPYnNlcnZhYmxlIG9mIHRoZSBmbGFnIHR5cGVzIGRhdGEsIGhhdmluZyByZWNlaXZlZCB0aGUgc2VydmljZSBkZXRhaWxzXG4gICAgICAgICAgLy8gaW5jbHVkaW5nIHNlcnZpY2VfY29kZS4gVGhpcyBhdm9pZHMgaGF2aW5nIG5lc3RlZCBgc3Vic2NyaWJlYHMsIHdoaWNoIGlzIGFuIGFudGktcGF0dGVybiFcbiAgICAgICAgICBzd2l0Y2hNYXAoKHNlcnZpY2VEZXRhaWxzKSA9PiB0aGlzLmNhc2VGbGFnUmVmZGF0YVNlcnZpY2UuZ2V0Q2FzZUZsYWdzUmVmZGF0YShzZXJ2aWNlRGV0YWlsc1swXS5zZXJ2aWNlX2NvZGUsIGZsYWdUeXBlLFxuICAgICAgICAgICAgdHJ1ZSwgdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWwpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChmbGFnVHlwZXMpID0+IHRoaXMucHJvY2Vzc0ZsYWdUeXBlcyhmbGFnVHlwZXMpLFxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHRoaXMub25SZWZkYXRhRXJyb3IoZXJyb3IpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmFkZFN0YXRlKHRoaXMuc3ViSm91cm5leUluZGV4KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCB0aGlzLmhhbmRsZUJhY2tCdXR0b25TdWJKb3VybmV5KTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVCYWNrQnV0dG9uU3ViSm91cm5leShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucHJldmlvdXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRTdGF0ZShkYXRhOiBudW1iZXIsIHVybD86IHN0cmluZyk6IHZvaWQge1xuICAgIGhpc3RvcnkucHVzaFN0YXRlKCcxJytkYXRhLCAnJywgdXJsKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZsYWdSZWZkYXRhJD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZsYWdUeXBlQ29udHJvbENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgLy8gY2hlY2sgaWYgdGhlIHVzZXIgaGFzIGFuIGV4aXN0aW5nIHBhdGggd2hlbiBuYXZpZ2F0aW5nIGF3YXkgZnJvbSB0aGUgcGFnZVxuICAgIC8vIGlmIHNvIHdlIG1heSBuZWVkIHRvIGVuc3VyZSB0aGUgdmFsdWVzIGFyZSBzZXQgY29ycmVjdGx5LlxuICAgIHRoaXMuY2hlY2tGb3JFeGlzdGluZ1BhdGgoKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCB0aGlzLmhhbmRsZUJhY2tCdXR0b25TdWJKb3VybmV5KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0ZvckV4aXN0aW5nUGF0aCgpOiB2b2lkIHtcbiAgICAvLyBSZXN0b3JlIHZhbHVlcyBmcm9tIGNhY2hlZFBhdGhcbiAgICBpZiAodGhpcy5zdWJKb3VybmV5SW5kZXggPD0gMCkge1xuICAgICAgLy8gY2hlY2sgaWYgdGhlIHVzZXIgaXMgbmF2aWdhdGluZyB0byB0aGUgcHJldmlvdXMgcGFnZSBpbiB0aGUgam91bnJleS5cbiAgICAgIC8vIGluIHRoaXMgc2l0dWF0aW9uIHdlIG5lZWQgdG8gcmVzdG9yZSB0aGUgZnVsbCBwYXRoIGZvciBkYXRhIHJldGVudGlvbiBhY3Jvc3MgcGFnZXMuXG4gICAgICBpZiAodGhpcy5jYWNoZWRQYXRoICYmIHRoaXMuY2FjaGVkUGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuY2FjaGVkUGF0aC5mb3JFYWNoKChmbGFnVHlwZSkgPT4ge1xuICAgICAgICAgIGlmIChmbGFnVHlwZSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5GTEFHX1RZUEUpPy5zZXRWYWx1ZShmbGFnVHlwZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uTmV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlRm9ybSgpO1xuICAgIHRoaXMuZW1pdENhc2VGbGFnU3RhdGUoKTtcbiAgICB0aGlzLmVtaXRGbGFnQ29tbWVudHNPcHRpb25hbCgpO1xuICAgIHRoaXMuaGFuZGxlRmxhZ1R5cGVTZWxlY3Rpb24oKTtcbiAgICB0aGlzLmZsYWdUeXBlU3ViSm91cm5leUVtaXR0ZXIuZW1pdCh0aGlzLnN1YkpvdXJuZXlJbmRleCk7XG4gICAgdGhpcy5hZGRTdGF0ZSh0aGlzLnN1YkpvdXJuZXlJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDYXNlRmxhZ1N0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUZsYWdTdGF0ZUVtaXR0ZXIuZW1pdCh7XG4gICAgICBjdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlOiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19UWVBFLFxuICAgICAgaXNQYXJlbnRGbGFnVHlwZTogdGhpcy5zZWxlY3RlZEZsYWdUeXBlID8gdGhpcy5zZWxlY3RlZEZsYWdUeXBlLmlzUGFyZW50IDogbnVsbCxcbiAgICAgIGVycm9yTWVzc2FnZXM6IHRoaXMuZXJyb3JNZXNzYWdlc1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0RmxhZ0NvbW1lbnRzT3B0aW9uYWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGbGFnVHlwZSAmJiAhdGhpcy5zZWxlY3RlZEZsYWdUeXBlLmlzUGFyZW50ICYmICF0aGlzLnNlbGVjdGVkRmxhZ1R5cGUuZmxhZ0NvbW1lbnQpIHtcbiAgICAgIHRoaXMuZmxhZ0NvbW1lbnRzT3B0aW9uYWxFbWl0dGVyLmVtaXQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGbGFnVHlwZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZsYWdUeXBlPy5pc1BhcmVudCkge1xuICAgICAgdGhpcy5sb2FkQ2hpbGRGbGFnVHlwZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb21wbGV0ZVN1YkpvdXJuZXkoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRDaGlsZEZsYWdUeXBlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlZEZsYWdUeXBlID0gdGhpcy5zZWxlY3RlZEZsYWdUeXBlO1xuICAgIHRoaXMuZmxhZ1R5cGVzID0gdGhpcy5zZWxlY3RlZEZsYWdUeXBlLmNoaWxkRmxhZ3M7XG4gICAgaWYgKHRoaXMuY2FjaGVkUGF0aC5sZW5ndGggIT09IDAgJiYgdGhpcy5jYWNoZWRQYXRoW3RoaXMuc3ViSm91cm5leUluZGV4XSA9PT0gdGhpcy5zZWxlY3RlZEZsYWdUeXBlKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkZMQUdfVFlQRSk/LnNldFZhbHVlKHRoaXMuY2FjaGVkUGF0aFt0aGlzLnN1YkpvdXJuZXlJbmRleCArIDFdLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FjaGVkUGF0aD8uc2hpZnQoKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jYWNoZWRQYXRoPy5sZW5ndGggPyB0aGlzLmNhY2hlZFBhdGhbMF0gOiBudWxsO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5GTEFHX1RZUEUpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgICB0aGlzLnN1YkpvdXJuZXlJbmRleCsrO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wbGV0ZVN1YkpvdXJuZXkoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFNlbGVjdGVkRmxhZyA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmZsYWdUeXBlO1xuICAgIGNvbnN0IGFkZGVkRmxhZ1ZhbHVlID0gdGhpcy5zZWxlY3RlZEZsYWdzTG9jYXRpb24/LmNhc2VGaWVsZD8udmFsdWU/LmRldGFpbHM7XG4gICAgaWYgKGFkZGVkRmxhZ1ZhbHVlICYmIChhZGRlZEZsYWdWYWx1ZVtPYmplY3Qua2V5cyhhZGRlZEZsYWdWYWx1ZSkubGVuZ3RoXT8ubmFtZSAhPT0gY3VycmVudFNlbGVjdGVkRmxhZy52YWx1ZS5uYW1lKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEZsYWdzTG9jYXRpb25bJ2Nhc2VGaWVsZCddLnZhbHVlLmRldGFpbHMucG9wKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkRmxhZ3NMb2NhdGlvblsnY2FzZUZpZWxkJ10uZm9ybWF0dGVkX3ZhbHVlPy5kZXRhaWxzLnBvcCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUgb25QcmV2aW91cyBtZXRob2Qgd2l0aCBvcHRpbWl6ZWQgY29kZVxuICBwdWJsaWMgb25QcmV2aW91cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYWNoZWRGbGFnVHlwZSkge1xuICAgICAgaWYgKHRoaXMuY2FjaGVkRmxhZ1R5cGUuUGF0aD8ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuRkxBR19UWVBFKT8uc2V0VmFsdWUodGhpcy5jYWNoZWRGbGFnVHlwZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLmZsYWdUeXBlcyA9IHRoaXMuY2FjaGVkUkRGbGFnVHlwZXNbMF0uY2hpbGRGbGFncztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjdXJyZW50UGF0aCA9IHRoaXMuY2FjaGVkUkRGbGFnVHlwZXNbMF07XG4gICAgICAgIGNvbnN0IHBhdGhUb1NlYXJjaCA9IHRoaXMuY2FjaGVkRmxhZ1R5cGUuUGF0aC5zbGljZSgxKTtcbiAgICAgICAgZm9yIChjb25zdCBwYXRoRWxlbWVudCBvZiBwYXRoVG9TZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCBmb3VuZEZsYWcgPSBjdXJyZW50UGF0aC5jaGlsZEZsYWdzLmZpbmQoKGZsYWcpID0+IGZsYWcubmFtZSA9PT0gcGF0aEVsZW1lbnQpO1xuICAgICAgICAgIGlmIChmb3VuZEZsYWcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRQYXRoID0gZm91bmRGbGFnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkZMQUdfVFlQRSk/LnNldFZhbHVlKHRoaXMuY2FjaGVkRmxhZ1R5cGUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5mbGFnVHlwZXMgPSBjdXJyZW50UGF0aC5jaGlsZEZsYWdzO1xuICAgICAgICB0aGlzLmNhY2hlZEZsYWdUeXBlID0gY3VycmVudFBhdGg7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3ViSm91cm5leUluZGV4ID0gTWF0aC5tYXgoMCwgdGhpcy5zdWJKb3VybmV5SW5kZXggLSAxKTtcbiAgICBpZiAodGhpcy5zdWJKb3VybmV5SW5kZXggPT09IDApIHtcbiAgICAgIHRoaXMuZmxhZ1R5cGVzID0gdGhpcy5mbGFnVHlwZXMuZmlsdGVyKChmbGFnKSA9PlxuICAgICAgICB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbCA/IGZsYWcuZmxhZ0NvZGUgIT09IHRoaXMub3RoZXJGbGFnVHlwZUNvZGUgOiB0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5mbGFnVHlwZVN1YkpvdXJuZXlFbWl0dGVyLmVtaXQodGhpcy5zdWJKb3VybmV5SW5kZXgpO1xuICB9XG5cbiAgLy8gSWRlbnRpdHkgZnVuY3Rpb24gZm9yIHRyYWNrQnkgdXNlIGJ5ICpuZ0ZvciBmb3IgZmxhZ1R5cGVzIGluIEhUTUwgdGVtcGxhdGVcbiAgcHVibGljIGlkZW50aWZ5RmxhZ1R5cGUoXzogbnVtYmVyLCBmbGFnVHlwZTogRmxhZ1R5cGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtmbGFnVHlwZS5mbGFnQ29kZX1fJHtmbGFnVHlwZS5uYW1lfV8ke2ZsYWdUeXBlLm5hbWVfY3l9YDtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuZmxhZ1R5cGVOb3RTZWxlY3RlZEVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuZmxhZ1R5cGVFcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBbXTtcblxuICAgIGlmICghdGhpcy5zZWxlY3RlZEZsYWdUeXBlKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBhbnkgcHJpb3IgZmxhZyB0eXBlIHNlbGVjdGlvbiB0aGVuIHRoZSBtZXNzYWdlIHdpbGwgZGlmZmVyXG4gICAgICBsZXQgZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgICBpZiAodGhpcy5jYWNoZWRGbGFnVHlwZSkge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBTZWxlY3RGbGFnVHlwZUVycm9yTWVzc2FnZS5GTEFHX1RZUEVfT1BUSU9OX05PVF9TRUxFQ1RFRDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXG4gICAgICAgICAgPyBTZWxlY3RGbGFnVHlwZUVycm9yTWVzc2FnZS5GTEFHX1RZUEVfTk9UX1NFTEVDVEVEX0VYVEVSTkFMXG4gICAgICAgICAgOiBTZWxlY3RGbGFnVHlwZUVycm9yTWVzc2FnZS5GTEFHX1RZUEVfTk9UX1NFTEVDVEVEO1xuICAgICAgfVxuICAgICAgdGhpcy5mbGFnVHlwZU5vdFNlbGVjdGVkRXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2VzLnB1c2goeyB0aXRsZTogJycsIGRlc2NyaXB0aW9uOiBlcnJvck1lc3NhZ2UsIGZpZWxkSWQ6ICdjb25kaXRpb25hbC1yYWRpb3MtbGlzdCcgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm90aGVyRmxhZ1R5cGVTZWxlY3RlZCkge1xuICAgICAgY29uc3Qgb3RoZXJGbGFnVHlwZURlc2NyaXB0aW9uID0gdGhpcy5mb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5PVEhFUl9GTEFHX0RFU0NSSVBUSU9OKT8udmFsdWU7XG4gICAgICBpZiAoIW90aGVyRmxhZ1R5cGVEZXNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLmZsYWdUeXBlRXJyb3JNZXNzYWdlID0gdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxcbiAgICAgICAgICA/IFNlbGVjdEZsYWdUeXBlRXJyb3JNZXNzYWdlLkZMQUdfVFlQRV9OT1RfRU5URVJFRF9FWFRFUk5BTFxuICAgICAgICAgIDogU2VsZWN0RmxhZ1R5cGVFcnJvck1lc3NhZ2UuRkxBR19UWVBFX05PVF9FTlRFUkVEO1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7IHRpdGxlOiAnJywgZGVzY3JpcHRpb246IGAke3RoaXMuZmxhZ1R5cGVFcnJvck1lc3NhZ2V9YCwgZmllbGRJZDogJ290aGVyLWZsYWctdHlwZS1kZXNjcmlwdGlvbicgfSk7XG4gICAgICB9XG4gICAgICBpZiAob3RoZXJGbGFnVHlwZURlc2NyaXB0aW9uLmxlbmd0aCA+IHRoaXMubWF4Q2hhcmFjdGVyc0Zvck90aGVyRmxhZ1R5cGUpIHtcbiAgICAgICAgdGhpcy5mbGFnVHlwZUVycm9yTWVzc2FnZSA9IFNlbGVjdEZsYWdUeXBlRXJyb3JNZXNzYWdlLkZMQUdfVFlQRV9MSU1JVF9FWENFRURFRDtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2VzLnB1c2goeyB0aXRsZTogJycsIGRlc2NyaXB0aW9uOiBgJHtTZWxlY3RGbGFnVHlwZUVycm9yTWVzc2FnZS5GTEFHX1RZUEVfTElNSVRfRVhDRUVERUR9YCwgZmllbGRJZDogJ290aGVyLWZsYWctdHlwZS1kZXNjcmlwdGlvbicgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByb2Nlc3NGbGFnVHlwZXMoZmxhZ1R5cGVzOiBGbGFnVHlwZVtdKTogdm9pZCB7XG4gICAgY29uc3QgcHJldkpvdXJuZXlQYWdlID0gdGhpcy5tdWx0aXBhZ2VDb21wb25lbnRTdGF0ZVNlcnZpY2UuZ2V0Sm91cm5leUNvbGxlY3Rpb24oKVswXTtcbiAgICBjb25zdCB7IGpvdXJuZXlQcmV2aW91c1BhZ2VOdW1iZXIsIGpvdXJuZXlQYWdlTnVtYmVyIH0gPSBwcmV2Sm91cm5leVBhZ2U7XG4gICAgdGhpcy5jYWNoZWRSREZsYWdUeXBlcyA9IGZsYWdUeXBlcztcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZsYWdUeXBlICYmIChqb3VybmV5UHJldmlvdXNQYWdlTnVtYmVyID4gam91cm5leVBhZ2VOdW1iZXIpKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEZsYWdUeXBlID0gdGhpcy5zZWxlY3RlZEZsYWdUeXBlO1xuICAgICAgY29uc3QgcGF0aFRvU2VhcmNoID0gc2VsZWN0ZWRGbGFnVHlwZS5QYXRoLnNsaWNlKDEpO1xuICAgICAgbGV0IGN1cnJlbnRQYXRoID0gZmxhZ1R5cGVzWzBdO1xuICAgICAgZm9yIChjb25zdCBwYXRoRWxlbWVudCBvZiBwYXRoVG9TZWFyY2gpIHtcbiAgICAgICAgY29uc3QgZm91bmRGbGFnID0gY3VycmVudFBhdGguY2hpbGRGbGFncy5maW5kKChmbGFnKSA9PiBmbGFnLm5hbWUgPT09IHBhdGhFbGVtZW50KTtcbiAgICAgICAgaWYgKGZvdW5kRmxhZykge1xuICAgICAgICAgIGN1cnJlbnRQYXRoID0gZm91bmRGbGFnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmZsYWdUeXBlcyA9IGN1cnJlbnRQYXRoLmNoaWxkRmxhZ3M7XG4gICAgICB0aGlzLmNhY2hlZEZsYWdUeXBlID0gY3VycmVudFBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmxhZ1R5cGVzID0gZmxhZ1R5cGVzWzBdLmNoaWxkRmxhZ3MuZmlsdGVyKChmbGFnKSA9PlxuICAgICAgICB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbCA/IGZsYWcuZmxhZ0NvZGUgIT09IHRoaXMub3RoZXJGbGFnVHlwZUNvZGUgOiB0cnVlKTtcbiAgICB9XG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkZMQUdfVFlQRSk7XG4gICAgaWYgKGZvcm1Db250cm9sPy52YWx1ZSkge1xuICAgICAgY29uc3QgW2ZvdW5kRmxhZ1R5cGUsIHBhdGhdID0gRmxhZ1R5cGUuc2VhcmNoUGF0aEJ5RmxhZ1R5cGVPYmplY3QoZm9ybUNvbnRyb2wudmFsdWUgYXMgRmxhZ1R5cGUsIHRoaXMuY2FjaGVkUkRGbGFnVHlwZXNbMF0uY2hpbGRGbGFncyk7XG4gICAgICB0aGlzLmNhY2hlZFBhdGggPSBbLi4ucGF0aCwgZm91bmRGbGFnVHlwZV07XG4gICAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZSgodGhpcy5zZWxlY3RlZEZsYWdUeXBlICYmIChqb3VybmV5UHJldmlvdXNQYWdlTnVtYmVyID4gam91cm5leVBhZ2VOdW1iZXIpKSA/IHRoaXMuY2FjaGVkUGF0aFt0aGlzLmNhY2hlZFBhdGgubGVuZ3RoIC0gMV0gOiB0aGlzLmNhY2hlZFBhdGhbMF0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIGlmICh0aGlzLmNhY2hlZFBhdGgubGVuZ3RoICE9PSAwICYmIChqb3VybmV5UHJldmlvdXNQYWdlTnVtYmVyID4gam91cm5leVBhZ2VOdW1iZXIpKSB7XG4gICAgICAgIHRoaXMuc3ViSm91cm5leUluZGV4ID0gdGhpcy5jYWNoZWRQYXRoLmxlbmd0aC0xO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmZsYWdUeXBlU3ViSm91cm5leUVtaXR0ZXIuZW1pdCh0aGlzLnN1YkpvdXJuZXlJbmRleCk7XG4gICAgdGhpcy5hZGRTdGF0ZSh0aGlzLnN1YkpvdXJuZXlJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIG9uUmVmZGF0YUVycm9yKGVycm9yOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBTZXQgZXJyb3IgZmxhZyBvbiBjb21wb25lbnQgdG8gcmVtb3ZlIHRoZSBcIk5leHRcIiBidXR0b24gKHVzZXIgY2Fubm90IHByb2NlZWQgd2l0aCBmbGFnIGNyZWF0aW9uKVxuICAgIHRoaXMucmVmZGF0YUVycm9yID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBbXTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7IHRpdGxlOiAnJywgZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsIGZpZWxkSWQ6ICdjb25kaXRpb25hbC1yYWRpb3MtbGlzdCcgfSk7XG4gICAgLy8gUmV0dXJuIGNhc2UgZmxhZyBmaWVsZCBzdGF0ZSBhbmQgZXJyb3IgbWVzc2FnZXMgdG8gdGhlIHBhcmVudFxuICAgIHRoaXMuY2FzZUZsYWdTdGF0ZUVtaXR0ZXIuZW1pdCh7IGN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGU6IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEUsIGVycm9yTWVzc2FnZXM6IHRoaXMuZXJyb3JNZXNzYWdlcyB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZXh0KCk6IHZvaWQge1xuICAgIHRoaXMub25OZXh0KCk7XG4gICAgdGhpcy5hZGRTdGF0ZSh0aGlzLnN1YkpvdXJuZXlJbmRleCk7XG4gICAgaWYgKHRoaXMuZXJyb3JNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHN1cGVyLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcHJldmlvdXMoKTogdm9pZCB7XG4gICAgdGhpcy5vblByZXZpb3VzKCk7XG5cbiAgICBpZiAodGhpcy5zdWJKb3VybmV5SW5kZXggPD0gMCkge1xuICAgICAgc3VwZXIucHJldmlvdXMoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJmbGFnVHlwZXM/Lmxlbmd0aFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgW25nQ2xhc3NdPVwieydmb3JtLWdyb3VwLWVycm9yJzogZmxhZ1R5cGVOb3RTZWxlY3RlZEVycm9yTWVzc2FnZS5sZW5ndGggPiAwfVwiPlxuICAgIDxmaWVsZHNldCBjbGFzcz1cImdvdnVrLWZpZWxkc2V0XCIgYXJpYS1kZXNjcmliZWRieT1cImZsYWctdHlwZS1oZWFkaW5nXCI+XG4gICAgICA8bGVnZW5kIGNsYXNzPVwiZ292dWstZmllbGRzZXRfX2xlZ2VuZCBnb3Z1ay1maWVsZHNldF9fbGVnZW5kLS1tXCI+XG4gICAgICAgIDxoMSBpZD1cImZsYWctdHlwZS1oZWFkaW5nXCIgY2xhc3M9XCJnb3Z1ay1maWVsZHNldF9faGVhZGluZyBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tMVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY2FjaGVkRmxhZ1R5cGUgfHwgc3ViSm91cm5leUluZGV4ID09IDA7IGVsc2UgcHJpb3JGbGFnVHlwZVNlbGVjdGVkXCI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXG4gICAgICAgICAgICA/IChjYXNlRmxhZ1dpemFyZFN0ZXBUaXRsZS5TRUxFQ1RfQ0FTRV9GTEFHX0VYVEVSTkFMIHwgcnB4VHJhbnNsYXRlKVxuICAgICAgICAgICAgOiAoY2FzZUZsYWdXaXphcmRTdGVwVGl0bGUuU0VMRUNUX0NBU0VfRkxBRyB8IHJweFRyYW5zbGF0ZSlcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwcmlvckZsYWdUeXBlU2VsZWN0ZWQ+XG4gICAgICAgICAgICB7e2NhY2hlZEZsYWdUeXBlIHwgZmxhZ0ZpZWxkRGlzcGxheTonbmFtZSd9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvaDE+XG4gICAgICA8L2xlZ2VuZD5cbiAgICAgIDxkaXYgaWQ9XCJmbGFnLXR5cGUtbm90LXNlbGVjdGVkLWVycm9yLW1lc3NhZ2VcIiBjbGFzcz1cImdvdnVrLWVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAqbmdJZj1cImZsYWdUeXBlTm90U2VsZWN0ZWRFcnJvck1lc3NhZ2UubGVuZ3RoID4gMFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXZpc3VhbGx5LWhpZGRlblwiPnt7J0Vycm9yOicgfCBycHhUcmFuc2xhdGV9fTwvc3Bhbj4ge3tmbGFnVHlwZU5vdFNlbGVjdGVkRXJyb3JNZXNzYWdlIHxcbiAgICAgICAgcnB4VHJhbnNsYXRlfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvcyBnb3Z1ay1yYWRpb3MtLWNvbmRpdGlvbmFsXCIgZGF0YS1tb2R1bGU9XCJnb3Z1ay1yYWRpb3NcIiBpZD1cImNvbmRpdGlvbmFsLXJhZGlvcy1saXN0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2l0ZW1cIiAqbmdGb3I9XCJsZXQgZmxhZ1R5cGUgb2YgZmxhZ1R5cGVzOyBpbmRleCBhcyBpOyB0cmFja0J5OiBpZGVudGlmeUZsYWdUeXBlXCI+XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZ292dWstcmFkaW9zX19pbnB1dFwiIGlkPVwiZmxhZy10eXBlLXt7aX19XCIgW25hbWVdPVwiY2FzZUZsYWdGb3JtRmllbGQuRkxBR19UWVBFXCIgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJmbGFnVHlwZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY2FzZUZsYWdGb3JtRmllbGQuRkxBR19UWVBFXCIgLz5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsXCIgZm9yPVwiZmxhZy10eXBlLXt7aX19XCI+XG4gICAgICAgICAgICB7e2ZsYWdUeXBlIHwgZmxhZ0ZpZWxkRGlzcGxheTonbmFtZSd9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zX19jb25kaXRpb25hbFwiICpuZ0lmPVwib3RoZXJGbGFnVHlwZVNlbGVjdGVkXCIgaWQ9XCJjb25kaXRpb25hbC1mbGFnVHlwZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgW25nQ2xhc3NdPVwieydmb3JtLWdyb3VwLWVycm9yJzogZmxhZ1R5cGVFcnJvck1lc3NhZ2UubGVuZ3RoID4gMH1cIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsXCIgZm9yPVwib3RoZXItZmxhZy10eXBlLWRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIGlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbFxuICAgICAgICAgICAgICA/IChjYXNlRmxhZ1dpemFyZFN0ZXBUaXRsZS5PVEhFUl9GTEFHX1RZUEVfREVTQ1JJUFRJT05fRVhURVJOQUwgfCBycHhUcmFuc2xhdGUpXG4gICAgICAgICAgICAgIDogKGNhc2VGbGFnV2l6YXJkU3RlcFRpdGxlLk9USEVSX0ZMQUdfVFlQRV9ERVNDUklQVElPTiB8IHJweFRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGlkPVwiZmxhZy10eXBlLWVycm9yLW1lc3NhZ2VcIiBjbGFzcz1cImdvdnVrLWVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImZsYWdUeXBlRXJyb3JNZXNzYWdlLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay12aXN1YWxseS1oaWRkZW5cIj57eydFcnJvcjonIHwgcnB4VHJhbnNsYXRlfX08L3NwYW4+IHt7ZmxhZ1R5cGVFcnJvck1lc3NhZ2UgfFxuICAgICAgICAgICAgICBycHhUcmFuc2xhdGV9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJnb3Z1ay1pbnB1dCBnb3Z1ay0hLXdpZHRoLW9uZS1oYWxmXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydnb3Z1ay1pbnB1dC0tZXJyb3InOiBmbGFnVHlwZUVycm9yTWVzc2FnZS5sZW5ndGggPiAwfVwiIGlkPVwib3RoZXItZmxhZy10eXBlLWRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgW25hbWVdPVwiY2FzZUZsYWdGb3JtRmllbGQuT1RIRVJfRkxBR19ERVNDUklQVElPTlwiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjYXNlRmxhZ0Zvcm1GaWVsZC5PVEhFUl9GTEFHX0RFU0NSSVBUSU9OXCIgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1jaGVja2JveGVzX19pdGVtIGdvdnVrLSEtbWFyZ2luLXRvcC00XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsICYmICFpc0Nhc2VMZXZlbEZsYWcgJiYgaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlcjJQb2ludDFFbmFibGVkXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImdvdnVrLWNoZWNrYm94ZXNfX2lucHV0XCIgaWQ9XCJpcy12aXNpYmxlLWV4dGVybmFsbHlcIiB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cImNhc2VGbGFnRm9ybUZpZWxkLklTX1ZJU0lCTEVfSU5URVJOQUxMWV9PTkxZXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNhc2VGbGFnRm9ybUZpZWxkLklTX1ZJU0lCTEVfSU5URVJOQUxMWV9PTkxZXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGdvdnVrLWNoZWNrYm94ZXNfX2xhYmVsXCIgZm9yPVwiaXMtdmlzaWJsZS1leHRlcm5hbGx5XCI+XG4gICAgICAgICAgICAgICAge3snVGhpcyBmbGFnIHNob3VsZCBvbmx5IGJlIHZpc2libGUgdG8gSE1DVFMgU3RhZmYnIHwgcnB4VHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZmllbGRzZXQ+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+Il19