@hmcts/ccd-case-ui-toolkit 6.10.7-cfv-move-document-handle-error → 6.10.7-cfv-move-document-handle-error-v3

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 (141) hide show
  1. package/bundles/hmcts-ccd-case-ui-toolkit.umd.js +9592 -6734
  2. package/bundles/hmcts-ccd-case-ui-toolkit.umd.js.map +1 -1
  3. package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js +1 -1
  4. package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js.map +1 -1
  5. package/esm2015/lib/shared/commons/case-edit-data/case-edit-data.service.js +19 -1
  6. package/esm2015/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.js +6 -1
  7. package/esm2015/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.js +7 -1
  8. package/esm2015/lib/shared/components/case-editor/services/cases.service.js +7 -1
  9. package/esm2015/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.js +20 -3
  10. package/esm2015/lib/shared/components/palette/case-file-view/case-file-view-field-read.component.js +2 -2
  11. package/esm2015/lib/shared/components/palette/case-file-view/case-file-view-field.component.js +6 -3
  12. package/esm2015/lib/shared/components/palette/case-file-view/components/case-file-view-folder/case-file-view-folder.component.js +1 -2
  13. package/esm2015/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.js +30 -19
  14. package/esm2015/lib/shared/components/palette/case-flag/write-case-flag-field.component.js +35 -24
  15. package/esm2015/lib/shared/components/palette/datetime-picker/datetime-picker.component.js +10 -3
  16. package/esm2015/lib/shared/components/palette/index.js +3 -6
  17. package/esm2015/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.js +126 -0
  18. package/esm2015/lib/shared/components/palette/linked-cases/components/check-your-answers/check-your-answers.component.js +198 -0
  19. package/esm2015/lib/shared/components/palette/linked-cases/components/index.js +8 -0
  20. package/esm2015/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.js +497 -0
  21. package/esm2015/lib/shared/components/palette/linked-cases/components/linked-cases-table/linked-cases-from-table.component.js +217 -0
  22. package/esm2015/lib/shared/components/palette/linked-cases/components/linked-cases-table/linked-cases-to-table.component.js +285 -0
  23. package/esm2015/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.js +79 -0
  24. package/esm2015/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.js +214 -0
  25. package/esm2015/lib/shared/components/palette/linked-cases/domain/index.js +3 -0
  26. package/esm2015/lib/shared/components/palette/linked-cases/domain/linked-cases-state.model.js +2 -0
  27. package/esm2015/lib/shared/components/palette/linked-cases/domain/linked-cases.model.js +19 -0
  28. package/esm2015/lib/shared/components/palette/linked-cases/enums/index.js +2 -0
  29. package/esm2015/lib/shared/components/palette/linked-cases/enums/write-linked-cases-field.enum.js +33 -0
  30. package/esm2015/lib/shared/components/palette/linked-cases/index.js +6 -0
  31. package/esm2015/lib/shared/components/palette/linked-cases/read-linked-cases-field.component.js +183 -0
  32. package/esm2015/lib/shared/components/palette/linked-cases/services/index.js +2 -0
  33. package/esm2015/lib/shared/components/palette/linked-cases/services/linked-cases.service.js +134 -0
  34. package/esm2015/lib/shared/components/palette/linked-cases/utils/validators.utils.js +27 -0
  35. package/esm2015/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.js +268 -0
  36. package/esm2015/lib/shared/components/palette/palette.module.js +50 -7
  37. package/esm2015/lib/shared/components/palette/palette.service.js +19 -7
  38. package/esm2015/lib/shared/components/search-result/search-result.component.js +10 -14
  39. package/esm2015/lib/shared/directives/conditional-show/domain/conditional-show.model.js +103 -200
  40. package/esm2015/lib/shared/directives/conditional-show/services/condition-parser.service.js +201 -0
  41. package/esm2015/lib/shared/directives/conditional-show/services/condition.peg.js +103 -0
  42. package/esm2015/lib/shared/domain/case-file-view/case-file-view-document.model.js +1 -1
  43. package/esm2015/lib/shared/domain/case-flag/hmcts-service-detail.model.js +1 -1
  44. package/esm2015/lib/shared/domain/definition/display-context-enum.model.js +12 -0
  45. package/esm2015/lib/shared/pipes/index.js +2 -1
  46. package/esm2015/lib/shared/pipes/link-cases-reason-code/ccd-link-cases-reason-code.pipe.js +23 -0
  47. package/esm2015/lib/shared/pipes/link-cases-reason-code/index.js +2 -0
  48. package/esm2015/lib/shared/pipes/pipes.module.js +8 -4
  49. package/esm2015/lib/shared/services/case-flag/case-flag-refdata.service.js +25 -4
  50. package/esm2015/lib/shared/services/common-data-service/common-data-service.js +1 -1
  51. package/esm2015/lib/shared/services/fields/fields.utils.js +7 -1
  52. package/esm2015/lib/shared/services/form/form-value.service.js +33 -2
  53. package/fesm2015/hmcts-ccd-case-ui-toolkit.js +5934 -3329
  54. package/fesm2015/hmcts-ccd-case-ui-toolkit.js.map +1 -1
  55. package/lib/shared/commons/case-edit-data/case-edit-data.service.d.ts +13 -0
  56. package/lib/shared/commons/case-edit-data/case-edit-data.service.d.ts.map +1 -1
  57. package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts.map +1 -1
  58. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts +1 -0
  59. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts.map +1 -1
  60. package/lib/shared/components/case-editor/services/cases.service.d.ts +2 -0
  61. package/lib/shared/components/case-editor/services/cases.service.d.ts.map +1 -1
  62. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts +1 -0
  63. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts.map +1 -1
  64. package/lib/shared/components/palette/case-file-view/case-file-view-field.component.d.ts +8 -8
  65. package/lib/shared/components/palette/case-file-view/case-file-view-field.component.d.ts.map +1 -1
  66. package/lib/shared/components/palette/case-file-view/components/case-file-view-folder/case-file-view-folder.component.d.ts.map +1 -1
  67. package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts +3 -1
  68. package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts.map +1 -1
  69. package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts +2 -0
  70. package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts.map +1 -1
  71. package/lib/shared/components/palette/datetime-picker/datetime-picker.component.d.ts.map +1 -1
  72. package/lib/shared/components/palette/index.d.ts +2 -5
  73. package/lib/shared/components/palette/index.d.ts.map +1 -1
  74. package/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.d.ts +23 -0
  75. package/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.d.ts.map +1 -0
  76. package/lib/shared/components/palette/linked-cases/components/check-your-answers/check-your-answers.component.d.ts +18 -0
  77. package/lib/shared/components/palette/linked-cases/components/check-your-answers/check-your-answers.component.d.ts.map +1 -0
  78. package/lib/shared/components/palette/linked-cases/components/index.d.ts +8 -0
  79. package/lib/shared/components/palette/linked-cases/components/index.d.ts.map +1 -0
  80. package/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.d.ts +45 -0
  81. package/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.d.ts.map +1 -0
  82. package/lib/shared/components/palette/linked-cases/components/linked-cases-table/linked-cases-from-table.component.d.ts +38 -0
  83. package/lib/shared/components/palette/linked-cases/components/linked-cases-table/linked-cases-from-table.component.d.ts.map +1 -0
  84. package/lib/shared/components/palette/linked-cases/components/linked-cases-table/linked-cases-to-table.component.d.ts +47 -0
  85. package/lib/shared/components/palette/linked-cases/components/linked-cases-table/linked-cases-to-table.component.d.ts.map +1 -0
  86. package/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.d.ts +18 -0
  87. package/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.d.ts.map +1 -0
  88. package/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.d.ts +38 -0
  89. package/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.d.ts.map +1 -0
  90. package/lib/shared/components/palette/linked-cases/domain/index.d.ts +3 -0
  91. package/lib/shared/components/palette/linked-cases/domain/index.d.ts.map +1 -0
  92. package/lib/shared/components/palette/linked-cases/domain/linked-cases-state.model.d.ts +12 -0
  93. package/lib/shared/components/palette/linked-cases/domain/linked-cases-state.model.d.ts.map +1 -0
  94. package/lib/shared/components/palette/linked-cases/domain/linked-cases.model.d.ts +65 -0
  95. package/lib/shared/components/palette/linked-cases/domain/linked-cases.model.d.ts.map +1 -0
  96. package/lib/shared/components/palette/linked-cases/enums/index.d.ts +2 -0
  97. package/lib/shared/components/palette/linked-cases/enums/index.d.ts.map +1 -0
  98. package/lib/shared/components/palette/linked-cases/enums/write-linked-cases-field.enum.d.ts +29 -0
  99. package/lib/shared/components/palette/linked-cases/enums/write-linked-cases-field.enum.d.ts.map +1 -0
  100. package/lib/shared/components/palette/linked-cases/index.d.ts +6 -0
  101. package/lib/shared/components/palette/linked-cases/index.d.ts.map +1 -0
  102. package/lib/shared/components/palette/linked-cases/read-linked-cases-field.component.d.ts +38 -0
  103. package/lib/shared/components/palette/linked-cases/read-linked-cases-field.component.d.ts.map +1 -0
  104. package/lib/shared/components/palette/linked-cases/services/index.d.ts +2 -0
  105. package/lib/shared/components/palette/linked-cases/services/index.d.ts.map +1 -0
  106. package/lib/shared/components/palette/linked-cases/services/linked-cases.service.d.ts +44 -0
  107. package/lib/shared/components/palette/linked-cases/services/linked-cases.service.d.ts.map +1 -0
  108. package/lib/shared/components/palette/linked-cases/utils/validators.utils.d.ts +10 -0
  109. package/lib/shared/components/palette/linked-cases/utils/validators.utils.d.ts.map +1 -0
  110. package/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.d.ts +43 -0
  111. package/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.d.ts.map +1 -0
  112. package/lib/shared/components/palette/palette.module.d.ts +67 -58
  113. package/lib/shared/components/palette/palette.module.d.ts.map +1 -1
  114. package/lib/shared/components/palette/palette.service.d.ts.map +1 -1
  115. package/lib/shared/directives/conditional-show/domain/conditional-show.model.d.ts +13 -30
  116. package/lib/shared/directives/conditional-show/domain/conditional-show.model.d.ts.map +1 -1
  117. package/lib/shared/directives/conditional-show/services/condition-parser.service.d.ts +30 -0
  118. package/lib/shared/directives/conditional-show/services/condition-parser.service.d.ts.map +1 -0
  119. package/lib/shared/directives/conditional-show/services/condition.peg.d.ts +3 -0
  120. package/lib/shared/directives/conditional-show/services/condition.peg.d.ts.map +1 -0
  121. package/lib/shared/domain/case-file-view/case-file-view-document.model.d.ts +1 -0
  122. package/lib/shared/domain/case-file-view/case-file-view-document.model.d.ts.map +1 -1
  123. package/lib/shared/domain/case-flag/hmcts-service-detail.model.d.ts.map +1 -1
  124. package/lib/shared/domain/definition/display-context-enum.model.d.ts +10 -0
  125. package/lib/shared/domain/definition/display-context-enum.model.d.ts.map +1 -0
  126. package/lib/shared/pipes/index.d.ts +1 -0
  127. package/lib/shared/pipes/index.d.ts.map +1 -1
  128. package/lib/shared/pipes/link-cases-reason-code/ccd-link-cases-reason-code.pipe.d.ts +11 -0
  129. package/lib/shared/pipes/link-cases-reason-code/ccd-link-cases-reason-code.pipe.d.ts.map +1 -0
  130. package/lib/shared/pipes/link-cases-reason-code/index.d.ts +2 -0
  131. package/lib/shared/pipes/link-cases-reason-code/index.d.ts.map +1 -0
  132. package/lib/shared/pipes/pipes.module.d.ts +3 -2
  133. package/lib/shared/pipes/pipes.module.d.ts.map +1 -1
  134. package/lib/shared/services/case-flag/case-flag-refdata.service.d.ts +14 -3
  135. package/lib/shared/services/case-flag/case-flag-refdata.service.d.ts.map +1 -1
  136. package/lib/shared/services/common-data-service/common-data-service.d.ts.map +1 -1
  137. package/lib/shared/services/fields/fields.utils.d.ts +1 -0
  138. package/lib/shared/services/fields/fields.utils.d.ts.map +1 -1
  139. package/lib/shared/services/form/form-value.service.d.ts +14 -0
  140. package/lib/shared/services/form/form-value.service.d.ts.map +1 -1
  141. package/package.json +1 -1
@@ -0,0 +1,497 @@
1
+ import { Component, EventEmitter, Output } from '@angular/core';
2
+ import { FormBuilder, Validators } from '@angular/forms';
3
+ import * as moment from 'moment';
4
+ import { throwError } from 'rxjs';
5
+ import { CasesService } from '../../../../case-editor/services/cases.service';
6
+ import { LinkedCasesErrorMessages, LinkedCasesPages, Patterns } from '../../enums';
7
+ import { LinkedCasesService } from '../../services/linked-cases.service';
8
+ import { ValidatorsUtils } from '../../utils/validators.utils';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../../../../case-editor/services/cases.service";
11
+ import * as i2 from "@angular/forms";
12
+ import * as i3 from "../../utils/validators.utils";
13
+ import * as i4 from "../../services/linked-cases.service";
14
+ function LinkCasesComponent_div_8_span_4_Template(rf, ctx) { if (rf & 1) {
15
+ i0.ɵɵelementStart(0, "span", 28);
16
+ i0.ɵɵelementStart(1, "span", 29);
17
+ i0.ɵɵtext(2, "Error:");
18
+ i0.ɵɵelementEnd();
19
+ i0.ɵɵtext(3);
20
+ i0.ɵɵelementEnd();
21
+ } if (rf & 2) {
22
+ const ctx_r4 = i0.ɵɵnextContext(2);
23
+ i0.ɵɵadvance(3);
24
+ i0.ɵɵtextInterpolate1(" ", ctx_r4.caseNumberError, " ");
25
+ } }
26
+ function LinkCasesComponent_div_8_span_10_Template(rf, ctx) { if (rf & 1) {
27
+ i0.ɵɵelementStart(0, "span", 28);
28
+ i0.ɵɵelementStart(1, "span", 29);
29
+ i0.ɵɵtext(2, "Error:");
30
+ i0.ɵɵelementEnd();
31
+ i0.ɵɵtext(3);
32
+ i0.ɵɵelementEnd();
33
+ } if (rf & 2) {
34
+ const ctx_r5 = i0.ɵɵnextContext(2);
35
+ i0.ɵɵadvance(3);
36
+ i0.ɵɵtextInterpolate1(" ", ctx_r5.caseReasonError, " ");
37
+ } }
38
+ function LinkCasesComponent_div_8_div_12_Template(rf, ctx) { if (rf & 1) {
39
+ i0.ɵɵelementStart(0, "div", 30);
40
+ i0.ɵɵelement(1, "input", 31);
41
+ i0.ɵɵelementStart(2, "label", 32);
42
+ i0.ɵɵtext(3);
43
+ i0.ɵɵelementEnd();
44
+ i0.ɵɵelementEnd();
45
+ } if (rf & 2) {
46
+ const reason_r8 = ctx.$implicit;
47
+ const pos_r9 = ctx.index;
48
+ i0.ɵɵproperty("formGroupName", pos_r9);
49
+ i0.ɵɵadvance(1);
50
+ i0.ɵɵpropertyInterpolate("id", reason_r8.key);
51
+ i0.ɵɵproperty("value", reason_r8.value_en);
52
+ i0.ɵɵadvance(1);
53
+ i0.ɵɵpropertyInterpolate("for", reason_r8.key);
54
+ i0.ɵɵadvance(1);
55
+ i0.ɵɵtextInterpolate(reason_r8.value_en);
56
+ } }
57
+ function LinkCasesComponent_div_8_span_15_Template(rf, ctx) { if (rf & 1) {
58
+ i0.ɵɵelementStart(0, "span", 28);
59
+ i0.ɵɵelementStart(1, "span", 29);
60
+ i0.ɵɵtext(2, "Error:");
61
+ i0.ɵɵelementEnd();
62
+ i0.ɵɵtext(3);
63
+ i0.ɵɵelementEnd();
64
+ } if (rf & 2) {
65
+ const ctx_r7 = i0.ɵɵnextContext(2);
66
+ i0.ɵɵadvance(3);
67
+ i0.ɵɵtextInterpolate1(" ", ctx_r7.caseSelectionError, " ");
68
+ } }
69
+ const _c0 = function (a0) { return { "govuk-form-group--error": a0 }; };
70
+ function LinkCasesComponent_div_8_Template(rf, ctx) { if (rf & 1) {
71
+ const _r11 = i0.ɵɵgetCurrentView();
72
+ i0.ɵɵelementStart(0, "div", 21);
73
+ i0.ɵɵelementStart(1, "h3", 22);
74
+ i0.ɵɵtext(2, "Enter case reference");
75
+ i0.ɵɵelementEnd();
76
+ i0.ɵɵelementStart(3, "div", 5);
77
+ i0.ɵɵtemplate(4, LinkCasesComponent_div_8_span_4_Template, 4, 1, "span", 6);
78
+ i0.ɵɵelement(5, "input", 23);
79
+ i0.ɵɵelementEnd();
80
+ i0.ɵɵelementStart(6, "h3", 22);
81
+ i0.ɵɵtext(7, "Why should these cases be linked?");
82
+ i0.ɵɵelementEnd();
83
+ i0.ɵɵelementStart(8, "div", 24);
84
+ i0.ɵɵtext(9, " Select all that apply. ");
85
+ i0.ɵɵelementEnd();
86
+ i0.ɵɵtemplate(10, LinkCasesComponent_div_8_span_10_Template, 4, 1, "span", 6);
87
+ i0.ɵɵelementStart(11, "div", 25);
88
+ i0.ɵɵtemplate(12, LinkCasesComponent_div_8_div_12_Template, 4, 5, "div", 26);
89
+ i0.ɵɵelementEnd();
90
+ i0.ɵɵelement(13, "br");
91
+ i0.ɵɵelement(14, "br");
92
+ i0.ɵɵtemplate(15, LinkCasesComponent_div_8_span_15_Template, 4, 1, "span", 6);
93
+ i0.ɵɵelementStart(16, "button", 27);
94
+ i0.ɵɵlistener("click", function LinkCasesComponent_div_8_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r11); const ctx_r10 = i0.ɵɵnextContext(); return ctx_r10.submitCaseInfo(); });
95
+ i0.ɵɵtext(17, "Propose case link");
96
+ i0.ɵɵelementEnd();
97
+ i0.ɵɵelementEnd();
98
+ } if (rf & 2) {
99
+ const ctx_r0 = i0.ɵɵnextContext();
100
+ i0.ɵɵproperty("formGroup", ctx_r0.linkCaseForm);
101
+ i0.ɵɵadvance(3);
102
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(7, _c0, !!ctx_r0.caseNumberError));
103
+ i0.ɵɵadvance(1);
104
+ i0.ɵɵproperty("ngIf", ctx_r0.caseNumberError);
105
+ i0.ɵɵadvance(6);
106
+ i0.ɵɵproperty("ngIf", ctx_r0.caseReasonError);
107
+ i0.ɵɵadvance(1);
108
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(9, _c0, !!ctx_r0.caseReasonError));
109
+ i0.ɵɵadvance(1);
110
+ i0.ɵɵproperty("ngForOf", ctx_r0.linkCaseReasons);
111
+ i0.ɵɵadvance(3);
112
+ i0.ɵɵproperty("ngIf", ctx_r0.caseSelectionError);
113
+ } }
114
+ function LinkCasesComponent_span_13_Template(rf, ctx) { if (rf & 1) {
115
+ i0.ɵɵelementStart(0, "span", 28);
116
+ i0.ɵɵelementStart(1, "span", 29);
117
+ i0.ɵɵtext(2, "Error:");
118
+ i0.ɵɵelementEnd();
119
+ i0.ɵɵtext(3);
120
+ i0.ɵɵelementEnd();
121
+ } if (rf & 2) {
122
+ const ctx_r1 = i0.ɵɵnextContext();
123
+ i0.ɵɵadvance(3);
124
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.noSelectedCaseError, " ");
125
+ } }
126
+ function LinkCasesComponent_tr_31_span_15_Template(rf, ctx) { if (rf & 1) {
127
+ i0.ɵɵelementStart(0, "span");
128
+ i0.ɵɵtext(1);
129
+ i0.ɵɵpipe(2, "ccdLinkCasesReasonValue");
130
+ i0.ɵɵelement(3, "br");
131
+ i0.ɵɵelementEnd();
132
+ } if (rf & 2) {
133
+ const reason_r15 = ctx.$implicit;
134
+ i0.ɵɵadvance(1);
135
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 1, reason_r15.reasonCode));
136
+ } }
137
+ const _c1 = function (a0) { return { "table-group-error": a0 }; };
138
+ function LinkCasesComponent_tr_31_Template(rf, ctx) { if (rf & 1) {
139
+ const _r17 = i0.ɵɵgetCurrentView();
140
+ i0.ɵɵelementStart(0, "tr", 10);
141
+ i0.ɵɵelementStart(1, "td", 33);
142
+ i0.ɵɵelement(2, "div", 34);
143
+ i0.ɵɵelementStart(3, "span");
144
+ i0.ɵɵtext(4);
145
+ i0.ɵɵelement(5, "br");
146
+ i0.ɵɵtext(6);
147
+ i0.ɵɵpipe(7, "ccdCaseReference");
148
+ i0.ɵɵelementEnd();
149
+ i0.ɵɵelementEnd();
150
+ i0.ɵɵelementStart(8, "td", 35);
151
+ i0.ɵɵtext(9);
152
+ i0.ɵɵelementEnd();
153
+ i0.ɵɵelementStart(10, "td", 33);
154
+ i0.ɵɵtext(11);
155
+ i0.ɵɵelementEnd();
156
+ i0.ɵɵelementStart(12, "td", 35);
157
+ i0.ɵɵtext(13);
158
+ i0.ɵɵelementEnd();
159
+ i0.ɵɵelementStart(14, "td", 33);
160
+ i0.ɵɵtemplate(15, LinkCasesComponent_tr_31_span_15_Template, 4, 3, "span", 36);
161
+ i0.ɵɵelementEnd();
162
+ i0.ɵɵelementStart(16, "td", 33);
163
+ i0.ɵɵelementStart(17, "a", 37);
164
+ i0.ɵɵlistener("click", function LinkCasesComponent_tr_31_Template_a_click_17_listener() { i0.ɵɵrestoreView(_r17); const pos_r13 = ctx.index; const case_r12 = ctx.$implicit; const ctx_r16 = i0.ɵɵnextContext(); return ctx_r16.onSelectedLinkedCaseRemove(pos_r13, case_r12.caseReference); });
165
+ i0.ɵɵtext(18, "Remove");
166
+ i0.ɵɵelementEnd();
167
+ i0.ɵɵelementEnd();
168
+ i0.ɵɵelementEnd();
169
+ } if (rf & 2) {
170
+ const case_r12 = ctx.$implicit;
171
+ const ctx_r2 = i0.ɵɵnextContext();
172
+ i0.ɵɵadvance(2);
173
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(12, _c1, ctx_r2.caseSelectionError && case_r12.caseReference === ctx_r2.linkCaseForm.value.caseNumber));
174
+ i0.ɵɵadvance(2);
175
+ i0.ɵɵtextInterpolate1("", case_r12.caseName, " ");
176
+ i0.ɵɵadvance(2);
177
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(7, 10, case_r12.caseReference), "");
178
+ i0.ɵɵadvance(2);
179
+ i0.ɵɵproperty("title", case_r12.caseTypeDescription);
180
+ i0.ɵɵadvance(1);
181
+ i0.ɵɵtextInterpolate(case_r12.caseType);
182
+ i0.ɵɵadvance(2);
183
+ i0.ɵɵtextInterpolate(case_r12.caseService);
184
+ i0.ɵɵadvance(1);
185
+ i0.ɵɵproperty("title", case_r12.caseStateDescription);
186
+ i0.ɵɵadvance(1);
187
+ i0.ɵɵtextInterpolate(case_r12.caseState);
188
+ i0.ɵɵadvance(2);
189
+ i0.ɵɵproperty("ngForOf", case_r12.reasons);
190
+ i0.ɵɵadvance(2);
191
+ i0.ɵɵattribute("id", case_r12.caseReference);
192
+ } }
193
+ function LinkCasesComponent_tr_32_Template(rf, ctx) { if (rf & 1) {
194
+ i0.ɵɵelementStart(0, "tr", 10);
195
+ i0.ɵɵelementStart(1, "td", 38);
196
+ i0.ɵɵtext(2, " None ");
197
+ i0.ɵɵelementEnd();
198
+ i0.ɵɵelementEnd();
199
+ } }
200
+ export class LinkCasesComponent {
201
+ constructor(casesService, fb, validatorsUtils, linkedCasesService) {
202
+ this.casesService = casesService;
203
+ this.fb = fb;
204
+ this.validatorsUtils = validatorsUtils;
205
+ this.linkedCasesService = linkedCasesService;
206
+ this.linkedCasesStateEmitter = new EventEmitter();
207
+ this.errorMessages = [];
208
+ this.selectedCases = [];
209
+ this.linkCaseReasons = [];
210
+ this.ISO_FORMAT = 'YYYY-MM-DDTHH:mm:ss.SSS';
211
+ }
212
+ ngOnInit() {
213
+ this.caseId = this.linkedCasesService.caseId;
214
+ this.caseName = this.linkedCasesService.caseName;
215
+ this.linkCaseReasons = this.linkedCasesService.linkCaseReasons;
216
+ this.initForm();
217
+ if (this.linkedCasesService.editMode) {
218
+ // this may have includes the currently added one but yet to be submitted.
219
+ this.selectedCases = this.linkedCasesService.linkedCases;
220
+ }
221
+ else if (this.linkedCasesService.initialCaseLinks.length !== this.linkedCasesService.caseFieldValue.length) {
222
+ this.linkedCasesService.linkedCases = this.linkedCasesService.initialCaseLinks;
223
+ }
224
+ }
225
+ initForm() {
226
+ this.linkCaseForm = this.fb.group({
227
+ caseNumber: ['', [Validators.minLength(16), this.validatorsUtils.regexPattern(Patterns.CASE_REF)]],
228
+ reasonType: this.getReasonTypeFormArray,
229
+ });
230
+ }
231
+ get getReasonTypeFormArray() {
232
+ return this.fb.array(this.linkCaseReasons.map((val) => this.fb.group({
233
+ key: [val.key],
234
+ value_en: [val.value_en],
235
+ value_cy: [val.value_cy],
236
+ hint_text_en: [val.hint_text_en],
237
+ hint_text_cy: [val.hint_text_cy],
238
+ lov_order: [val.lov_order],
239
+ parent_key: [val.parent_key],
240
+ selected: [!!val.selected],
241
+ })), this.validatorsUtils.formArraySelectedValidator());
242
+ }
243
+ submitCaseInfo() {
244
+ this.errorMessages = [];
245
+ this.caseReasonError = null;
246
+ this.caseNumberError = null;
247
+ this.caseSelectionError = null;
248
+ this.noSelectedCaseError = null;
249
+ if (this.linkCaseForm.valid &&
250
+ !this.isCaseSelected(this.selectedCases) &&
251
+ !this.isCaseSelected(this.linkedCasesService.linkedCases) &&
252
+ !this.isCaseSelectedSameAsCurrentCase()) {
253
+ this.getCaseInfo();
254
+ }
255
+ else {
256
+ this.showErrorInfo();
257
+ }
258
+ }
259
+ isCaseSelected(linkedCases) {
260
+ if (linkedCases.length === 0) {
261
+ return false;
262
+ }
263
+ const caseNumber = this.linkCaseForm.value.caseNumber;
264
+ return !!linkedCases.find((caseLink) => caseLink.caseReference.split('-').join('') === caseNumber.split('-').join(''));
265
+ }
266
+ isCaseSelectedSameAsCurrentCase() {
267
+ return this.linkCaseForm.value.caseNumber.split('-').join('') === this.linkedCasesService.caseId.split('-').join('');
268
+ }
269
+ showErrorInfo() {
270
+ if (this.linkCaseForm.controls.caseNumber.invalid) {
271
+ this.caseNumberError = LinkedCasesErrorMessages.CaseNumberError;
272
+ this.errorMessages.push({
273
+ title: 'dummy-case-number',
274
+ description: LinkedCasesErrorMessages.CaseNumberError,
275
+ fieldId: 'caseNumber',
276
+ });
277
+ }
278
+ if (this.linkCaseForm.controls.reasonType.invalid) {
279
+ this.caseReasonError = LinkedCasesErrorMessages.ReasonSelectionError;
280
+ this.errorMessages.push({
281
+ title: 'dummy-case-reason',
282
+ description: LinkedCasesErrorMessages.ReasonSelectionError,
283
+ fieldId: 'caseReason',
284
+ });
285
+ }
286
+ if (this.isCaseSelected(this.selectedCases)) {
287
+ this.caseSelectionError = LinkedCasesErrorMessages.CaseProposedError;
288
+ this.errorMessages.push({
289
+ title: 'dummy-case-number',
290
+ description: LinkedCasesErrorMessages.CaseProposedError,
291
+ fieldId: 'caseNumber',
292
+ });
293
+ }
294
+ if (this.isCaseSelected(this.linkedCasesService.linkedCases)) {
295
+ this.caseSelectionError = LinkedCasesErrorMessages.CasesLinkedError;
296
+ this.errorMessages.push({
297
+ title: 'dummy-case-number',
298
+ description: LinkedCasesErrorMessages.CasesLinkedError,
299
+ fieldId: 'caseNumber',
300
+ });
301
+ }
302
+ if (this.linkCaseForm.value.caseNumber.split('-').join('') === this.linkedCasesService.caseId.split('-').join('')) {
303
+ this.errorMessages.push({
304
+ title: 'dummy-case-number',
305
+ description: LinkedCasesErrorMessages.ProposedCaseWithIn,
306
+ fieldId: 'caseNumber',
307
+ });
308
+ }
309
+ window.scrollTo(0, 0);
310
+ this.emitLinkedCasesState(false);
311
+ }
312
+ getCaseInfo() {
313
+ const caseNumberData = this.linkCaseForm.value.caseNumber.replace(/[- ]/g, '');
314
+ this.casesService
315
+ .getCaseViewV2(caseNumberData)
316
+ .subscribe((caseView) => {
317
+ this.linkedCasesService.caseDetails = caseView;
318
+ const caseLink = {
319
+ caseReference: caseView.case_id,
320
+ reasons: this.getSelectedCaseReasons(),
321
+ createdDateTime: moment(new Date()).format(this.ISO_FORMAT),
322
+ caseType: caseView.case_type.name || '',
323
+ caseTypeDescription: caseView.case_type.description || '',
324
+ caseState: caseView.state.name || '',
325
+ caseStateDescription: caseView.state.description || '',
326
+ caseService: caseView.case_type && caseView.case_type.jurisdiction && caseView.case_type.jurisdiction.description || '',
327
+ caseName: this.linkedCasesService.getCaseName(caseView),
328
+ };
329
+ const ccdApiCaseLinkData = {
330
+ CaseReference: caseView.case_id,
331
+ CaseType: caseView.case_type.id,
332
+ CreatedDateTime: moment(new Date()).format(this.ISO_FORMAT),
333
+ ReasonForLink: this.getSelectedCCDTypeCaseReason()
334
+ };
335
+ if (!this.linkedCasesService.caseFieldValue) {
336
+ this.linkedCasesService.caseFieldValue = [];
337
+ }
338
+ this.linkedCasesService.caseFieldValue.push({ id: caseView.case_id.toString(), value: ccdApiCaseLinkData });
339
+ this.selectedCases.push(caseLink);
340
+ this.initForm();
341
+ this.emitLinkedCasesState(false);
342
+ }, (error) => {
343
+ this.caseNumberError = LinkedCasesErrorMessages.CaseCheckAgainError;
344
+ this.errorMessages.push({
345
+ title: 'dummy-case-number',
346
+ description: LinkedCasesErrorMessages.CaseCheckAgainError,
347
+ fieldId: 'caseNumber',
348
+ });
349
+ this.emitLinkedCasesState(false);
350
+ window.scrollTo(0, 0);
351
+ return throwError(error);
352
+ });
353
+ }
354
+ // Return linked cases state and error messages to the parent
355
+ emitLinkedCasesState(isNavigateToNextPage) {
356
+ this.linkedCasesStateEmitter.emit({
357
+ currentLinkedCasesPage: LinkedCasesPages.LINK_CASE,
358
+ errorMessages: this.errorMessages,
359
+ navigateToNextPage: isNavigateToNextPage,
360
+ });
361
+ }
362
+ getSelectedCaseReasons() {
363
+ const selectedReasons = [];
364
+ this.linkCaseForm.controls.reasonType.value.forEach((selectedReason) => {
365
+ if (selectedReason.selected) {
366
+ selectedReasons.push({
367
+ reasonCode: selectedReason.key
368
+ });
369
+ }
370
+ });
371
+ return selectedReasons;
372
+ }
373
+ getSelectedCCDTypeCaseReason() {
374
+ const selectedReasons = [];
375
+ this.linkCaseForm.controls.reasonType.value.forEach((selectedReason) => {
376
+ if (selectedReason.selected) {
377
+ selectedReasons.push({
378
+ value: {
379
+ Reason: selectedReason.key,
380
+ }
381
+ });
382
+ }
383
+ });
384
+ return selectedReasons;
385
+ }
386
+ onSelectedLinkedCaseRemove(pos, selectedCaseReference) {
387
+ const caseFieldValue = this.linkedCasesService.caseFieldValue || [];
388
+ const updatedItems = caseFieldValue.filter(item => item.value && item.value.CaseReference !== selectedCaseReference);
389
+ if (updatedItems) {
390
+ this.linkedCasesService.caseFieldValue = updatedItems;
391
+ }
392
+ this.selectedCases.splice(pos, 1);
393
+ }
394
+ onNext() {
395
+ this.errorMessages = [];
396
+ this.caseReasonError = null;
397
+ this.caseNumberError = null;
398
+ this.caseSelectionError = null;
399
+ this.noSelectedCaseError = null;
400
+ let navigateToNextPage = true;
401
+ if (this.selectedCases.length) {
402
+ this.linkedCasesService.linkedCases = this.selectedCases;
403
+ }
404
+ else {
405
+ this.noSelectedCaseError = LinkedCasesErrorMessages.CaseSelectionError;
406
+ this.errorMessages.push({
407
+ title: 'dummy-case-selection',
408
+ description: LinkedCasesErrorMessages.CaseSelectionError,
409
+ fieldId: 'caseReason',
410
+ });
411
+ navigateToNextPage = false;
412
+ }
413
+ this.emitLinkedCasesState(navigateToNextPage);
414
+ }
415
+ }
416
+ LinkCasesComponent.ɵfac = function LinkCasesComponent_Factory(t) { return new (t || LinkCasesComponent)(i0.ɵɵdirectiveInject(i1.CasesService), i0.ɵɵdirectiveInject(i2.FormBuilder), i0.ɵɵdirectiveInject(i3.ValidatorsUtils), i0.ɵɵdirectiveInject(i4.LinkedCasesService)); };
417
+ LinkCasesComponent.ɵcmp = i0.ɵɵdefineComponent({ type: LinkCasesComponent, selectors: [["ccd-link-cases"]], outputs: { linkedCasesStateEmitter: "linkedCasesStateEmitter" }, decls: 36, vars: 11, consts: [[1, "govuk-grid-row"], [1, "govuk-grid-column-full"], [1, "govuk-caption-l"], [1, "govuk-heading-xl"], ["class", "form-group", 3, "formGroup", 4, "ngIf"], ["id", "caseNumber", 1, "govuk-form-group", 3, "ngClass"], ["class", "govuk-error-message", 4, "ngIf"], [1, "govuk-table"], [1, "govuk-table__caption", "govuk-table__caption--m"], [1, "govuk-table__head"], [1, "govuk-table__row"], ["scope", "col", "width", "300", 1, "govuk-table__header"], ["scope", "col", "width", "150", 1, "govuk-table__header"], ["scope", "col", "width", "200", 1, "govuk-table__header"], ["scope", "col", "width", "400", 1, "govuk-table__header"], ["scope", "col", "width", "50", 1, "govuk-table__header"], [1, "govuk-table__body"], ["class", "govuk-table__row", 4, "ngFor", "ngForOf"], ["class", "govuk-table__row", 4, "ngIf"], [1, "govuk-button-group"], ["type", "button", "id", "next-button", 1, "button", "button-primary", 3, "click"], [1, "form-group", 3, "formGroup"], [1, "govuk-heading-s"], ["formControlName", "caseNumber", "id", "width-20", "name", "width-20", "type", "text", 1, "govuk-input", "govuk-input--width-20"], ["id", "waste-hint", 1, "govuk-hint"], ["data-module", "govuk-checkboxes", "formArrayName", "reasonType", "id", "caseReason", 1, "govuk-checkboxes", 3, "ngClass"], ["class", "govuk-checkboxes__item", 3, "formGroupName", 4, "ngFor", "ngForOf"], ["id", "propose", "type", "button", "data-module", "govuk-button", 1, "govuk-button", "govuk-button--secondary", 3, "click"], [1, "govuk-error-message"], [1, "govuk-visually-hidden"], [1, "govuk-checkboxes__item", 3, "formGroupName"], ["formControlName", "selected", "name", "pos", "type", "checkbox", 1, "govuk-checkboxes__input", 3, "id", "value"], [1, "govuk-label", "govuk-checkboxes__label", 3, "for"], [1, "govuk-table__cell"], [1, "govuk-form-group--error", 3, "ngClass"], [1, "govuk-table__cell", 3, "title"], [4, "ngFor", "ngForOf"], [1, "govuk-link", "no-visited-state", 3, "click"], ["colspan", "6", 1, "govuk-table__cell"]], template: function LinkCasesComponent_Template(rf, ctx) { if (rf & 1) {
418
+ i0.ɵɵelementStart(0, "div", 0);
419
+ i0.ɵɵelementStart(1, "div", 1);
420
+ i0.ɵɵelementStart(2, "div");
421
+ i0.ɵɵelementStart(3, "span", 2);
422
+ i0.ɵɵtext(4);
423
+ i0.ɵɵpipe(5, "ccdCaseReference");
424
+ i0.ɵɵelementEnd();
425
+ i0.ɵɵelementStart(6, "h1", 3);
426
+ i0.ɵɵtext(7, "Select a\u00A0case you want to link to this case");
427
+ i0.ɵɵelementEnd();
428
+ i0.ɵɵtemplate(8, LinkCasesComponent_div_8_Template, 18, 11, "div", 4);
429
+ i0.ɵɵelement(9, "hr");
430
+ i0.ɵɵelement(10, "br");
431
+ i0.ɵɵelement(11, "br");
432
+ i0.ɵɵelementStart(12, "div", 5);
433
+ i0.ɵɵtemplate(13, LinkCasesComponent_span_13_Template, 4, 1, "span", 6);
434
+ i0.ɵɵelementStart(14, "table", 7);
435
+ i0.ɵɵelementStart(15, "caption", 8);
436
+ i0.ɵɵtext(16, "Proposed case links ");
437
+ i0.ɵɵelementEnd();
438
+ i0.ɵɵelementStart(17, "thead", 9);
439
+ i0.ɵɵelementStart(18, "tr", 10);
440
+ i0.ɵɵelementStart(19, "th", 11);
441
+ i0.ɵɵtext(20, "Case name and number");
442
+ i0.ɵɵelementEnd();
443
+ i0.ɵɵelementStart(21, "th", 12);
444
+ i0.ɵɵtext(22, "Case type ");
445
+ i0.ɵɵelementEnd();
446
+ i0.ɵɵelementStart(23, "th", 13);
447
+ i0.ɵɵtext(24, "Service");
448
+ i0.ɵɵelementEnd();
449
+ i0.ɵɵelementStart(25, "th", 13);
450
+ i0.ɵɵtext(26, "State");
451
+ i0.ɵɵelementEnd();
452
+ i0.ɵɵelementStart(27, "th", 14);
453
+ i0.ɵɵtext(28, "Reasons for case link");
454
+ i0.ɵɵelementEnd();
455
+ i0.ɵɵelement(29, "th", 15);
456
+ i0.ɵɵelementEnd();
457
+ i0.ɵɵelementEnd();
458
+ i0.ɵɵelementStart(30, "tbody", 16);
459
+ i0.ɵɵtemplate(31, LinkCasesComponent_tr_31_Template, 19, 14, "tr", 17);
460
+ i0.ɵɵtemplate(32, LinkCasesComponent_tr_32_Template, 3, 0, "tr", 18);
461
+ i0.ɵɵelementEnd();
462
+ i0.ɵɵelementEnd();
463
+ i0.ɵɵelementEnd();
464
+ i0.ɵɵelementStart(33, "div", 19);
465
+ i0.ɵɵelementStart(34, "button", 20);
466
+ i0.ɵɵlistener("click", function LinkCasesComponent_Template_button_click_34_listener() { return ctx.onNext(); });
467
+ i0.ɵɵtext(35, "Next");
468
+ i0.ɵɵelementEnd();
469
+ i0.ɵɵelementEnd();
470
+ i0.ɵɵelementEnd();
471
+ i0.ɵɵelementEnd();
472
+ i0.ɵɵelementEnd();
473
+ } if (rf & 2) {
474
+ i0.ɵɵadvance(4);
475
+ i0.ɵɵtextInterpolate2("Link cases to ", ctx.caseName, " ", i0.ɵɵpipeBind1(5, 7, ctx.caseId), "");
476
+ i0.ɵɵadvance(4);
477
+ i0.ɵɵproperty("ngIf", ctx.linkCaseForm);
478
+ i0.ɵɵadvance(4);
479
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(9, _c0, !!ctx.noSelectedCaseError));
480
+ i0.ɵɵadvance(1);
481
+ i0.ɵɵproperty("ngIf", ctx.noSelectedCaseError);
482
+ i0.ɵɵadvance(18);
483
+ i0.ɵɵproperty("ngForOf", ctx.selectedCases);
484
+ i0.ɵɵadvance(1);
485
+ i0.ɵɵproperty("ngIf", !ctx.selectedCases.length);
486
+ } }, styles: [".no-visited-state[_ngcontent-%COMP%]{color:#1d70b8;cursor:pointer}.no-visited-state[_ngcontent-%COMP%]:hover{color:#003078}.govuk-checkboxes[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex-wrap:wrap;max-height:500px;width:100%;overflow-x:auto;overflow-y:hidden;padding-top:5px}.govuk-checkboxes[_ngcontent-%COMP%] .govuk-checkboxes__item[_ngcontent-%COMP%]{display:flex} .govuk-width-container .screen-990 .width-50{width:100%}.govuk-table__row[_ngcontent-%COMP%]{position:relative}.govuk-table__row[_ngcontent-%COMP%] .table-group-error[_ngcontent-%COMP%]{position:absolute;height:calc(100% - 20px);margin-left:-15px}"] });
487
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LinkCasesComponent, [{
488
+ type: Component,
489
+ args: [{
490
+ selector: 'ccd-link-cases',
491
+ styleUrls: ['./link-cases.component.scss'],
492
+ templateUrl: './link-cases.component.html',
493
+ }]
494
+ }], function () { return [{ type: i1.CasesService }, { type: i2.FormBuilder }, { type: i3.ValidatorsUtils }, { type: i4.LinkedCasesService }]; }, { linkedCasesStateEmitter: [{
495
+ type: Output
496
+ }] }); })();
497
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1jYXNlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvcGFsZXR0ZS9saW5rZWQtY2FzZXMvY29tcG9uZW50cy9saW5rLWNhc2VzL2xpbmstY2FzZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvbGlua2VkLWNhc2VzL2NvbXBvbmVudHMvbGluay1jYXNlcy9saW5rLWNhc2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQWEsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBUTlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7O0lDUnJELGdDQUEwRDtJQUN4RCxnQ0FBb0M7SUFBQSxzQkFBTTtJQUFBLGlCQUFPO0lBQUMsWUFDcEQ7SUFBQSxpQkFBTzs7O0lBRDZDLGVBQ3BEO0lBRG9ELHVEQUNwRDs7O0lB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UCxpQkFBUTtRQUNWLGlCQUFRO1FBQ1YsaUJBQU07UUFDTixnQ0FBZ0M7UUFDOUIsbUNBQXdGO1FBQW5CLGdHQUFTLFlBQVEsSUFBQztRQUFDLHFCQUFJO1FBQUEsaUJBQVM7UUFDdkcsaUJBQU07UUFDUixpQkFBTTtRQUNSLGlCQUFNO1FBQ1IsaUJBQU07O1FBbEY4QixlQUF3RDtRQUF4RCxnR0FBd0Q7UUFFbEMsZUFBa0I7UUFBbEIsdUNBQWtCO1FBbUN4QixlQUE4RDtRQUE5RCwrRUFBOEQ7UUFDdkUsZUFBeUI7UUFBekIsOENBQXlCO1FBZ0JWLGdCQUFrQjtRQUFsQiwyQ0FBa0I7UUFlbEMsZUFBMkI7UUFBM0IsZ0RBQTJCOzt1RkRqRHhELGtCQUFrQjtjQUw5QixTQUFTO2VBQUM7Z0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtnQkFDMUIsU0FBUyxFQUFFLENBQUMsNkJBQTZCLENBQUM7Z0JBQzFDLFdBQVcsRUFBRSw2QkFBNkI7YUFDM0M7d0pBR1EsdUJBQXVCO2tCQUQ3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENhc2VWaWV3LCBFcnJvck1lc3NhZ2UsIEh0dHBFcnJvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RvbWFpbic7XG5pbXBvcnQgeyBMb3ZSZWZEYXRhTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcy9jb21tb24tZGF0YS1zZXJ2aWNlL2NvbW1vbi1kYXRhLXNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FzZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY2FzZS1lZGl0b3Ivc2VydmljZXMvY2FzZXMuc2VydmljZSc7XG5pbXBvcnQgeyBMaW5rZWRDYXNlc1N0YXRlIH0gZnJvbSAnLi4vLi4vZG9tYWluJztcbmltcG9ydCB7XG5cdENhc2VMaW5rLFxuXHRDQ0RDYXNlTGlua1R5cGUsXG5cdExpbmtDYXNlUmVhc29uLFxuXHRMaW5rUmVhc29uXG59IGZyb20gJy4uLy4uL2RvbWFpbi9saW5rZWQtY2FzZXMubW9kZWwnO1xuaW1wb3J0IHsgTGlua2VkQ2FzZXNFcnJvck1lc3NhZ2VzLCBMaW5rZWRDYXNlc1BhZ2VzLCBQYXR0ZXJucyB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IExpbmtlZENhc2VzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xpbmtlZC1jYXNlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbGlkYXRvcnNVdGlscyB9IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvcnMudXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2QtbGluay1jYXNlcycsXG4gIHN0eWxlVXJsczogWycuL2xpbmstY2FzZXMuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpbmstY2FzZXMuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBMaW5rQ2FzZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBAT3V0cHV0KClcbiAgcHVibGljIGxpbmtlZENhc2VzU3RhdGVFbWl0dGVyOiBFdmVudEVtaXR0ZXI8TGlua2VkQ2FzZXNTdGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPExpbmtlZENhc2VzU3RhdGU+KCk7XG5cbiAgcHVibGljIGVycm9yTWVzc2FnZXM6IEVycm9yTWVzc2FnZVtdID0gW107XG4gIHB1YmxpYyBsaW5rQ2FzZUZvcm06IEZvcm1Hcm91cDtcbiAgcHVibGljIHNlbGVjdGVkQ2FzZXM6IENhc2VMaW5rW10gPSBbXTtcbiAgcHVibGljIGNhc2VOdW1iZXJFcnJvcjogc3RyaW5nO1xuICBwdWJsaWMgY2FzZVJlYXNvbkVycm9yOiBzdHJpbmc7XG4gIHB1YmxpYyBjYXNlU2VsZWN0aW9uRXJyb3I6IHN0cmluZztcbiAgcHVibGljIG5vU2VsZWN0ZWRDYXNlRXJyb3I6IHN0cmluZztcbiAgcHVibGljIGNhc2VJZDogc3RyaW5nO1xuICBwdWJsaWMgY2FzZU5hbWU6IHN0cmluZztcbiAgcHVibGljIGxpbmtDYXNlUmVhc29uczogTG92UmVmRGF0YU1vZGVsW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBJU09fRk9STUFUID0gJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VzU2VydmljZTogQ2FzZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmFsaWRhdG9yc1V0aWxzOiBWYWxpZGF0b3JzVXRpbHMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsaW5rZWRDYXNlc1NlcnZpY2U6IExpbmtlZENhc2VzU2VydmljZSkgeyB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUlkID0gdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuY2FzZUlkO1xuICAgIHRoaXMuY2FzZU5hbWUgPSB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5jYXNlTmFtZTtcbiAgICB0aGlzLmxpbmtDYXNlUmVhc29ucyA9IHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmxpbmtDYXNlUmVhc29ucztcbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gICAgaWYgKHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmVkaXRNb2RlKSB7XG4gICAgICAvLyB0aGlzIG1heSBoYXZlIGluY2x1ZGVzIHRoZSBjdXJyZW50bHkgYWRkZWQgb25lIGJ1dCB5ZXQgdG8gYmUgc3VibWl0dGVkLlxuICAgICAgdGhpcy5zZWxlY3RlZENhc2VzID0gdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UubGlua2VkQ2FzZXM7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxpbmtlZENhc2VzU2VydmljZS5pbml0aWFsQ2FzZUxpbmtzLmxlbmd0aCAhPT0gdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuY2FzZUZpZWxkVmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5saW5rZWRDYXNlcyA9IHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmluaXRpYWxDYXNlTGlua3M7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGluaXRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMubGlua0Nhc2VGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBjYXNlTnVtYmVyOiBbJycsIFtWYWxpZGF0b3JzLm1pbkxlbmd0aCgxNiksIHRoaXMudmFsaWRhdG9yc1V0aWxzLnJlZ2V4UGF0dGVybihQYXR0ZXJucy5DQVNFX1JFRildXSxcbiAgICAgIHJlYXNvblR5cGU6IHRoaXMuZ2V0UmVhc29uVHlwZUZvcm1BcnJheSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZ2V0UmVhc29uVHlwZUZvcm1BcnJheSgpOiBGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmZiLmFycmF5KFxuICAgICAgdGhpcy5saW5rQ2FzZVJlYXNvbnMubWFwKCh2YWwpID0+XG4gICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgIGtleTogW3ZhbC5rZXldLFxuICAgICAgICAgIHZhbHVlX2VuOiBbdmFsLnZhbHVlX2VuXSxcbiAgICAgICAgICB2YWx1ZV9jeTogW3ZhbC52YWx1ZV9jeV0sXG4gICAgICAgICAgaGludF90ZXh0X2VuOiBbdmFsLmhpbnRfdGV4dF9lbl0sXG4gICAgICAgICAgaGludF90ZXh0X2N5OiBbdmFsLmhpbnRfdGV4dF9jeV0sXG4gICAgICAgICAgbG92X29yZGVyOiBbdmFsLmxvdl9vcmRlcl0sXG4gICAgICAgICAgcGFyZW50X2tleTogW3ZhbC5wYXJlbnRfa2V5XSxcbiAgICAgICAgICBzZWxlY3RlZDogWyEhdmFsLnNlbGVjdGVkXSxcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgICB0aGlzLnZhbGlkYXRvcnNVdGlscy5mb3JtQXJyYXlTZWxlY3RlZFZhbGlkYXRvcigpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXRDYXNlSW5mbygpOiB2b2lkIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBbXTtcbiAgICB0aGlzLmNhc2VSZWFzb25FcnJvciA9IG51bGw7XG4gICAgdGhpcy5jYXNlTnVtYmVyRXJyb3IgPSBudWxsO1xuICAgIHRoaXMuY2FzZVNlbGVjdGlvbkVycm9yID0gbnVsbDtcbiAgICB0aGlzLm5vU2VsZWN0ZWRDYXNlRXJyb3IgPSBudWxsO1xuICAgIGlmIChcbiAgICAgIHRoaXMubGlua0Nhc2VGb3JtLnZhbGlkICYmXG4gICAgICAhdGhpcy5pc0Nhc2VTZWxlY3RlZCh0aGlzLnNlbGVjdGVkQ2FzZXMpICYmXG4gICAgICAhdGhpcy5pc0Nhc2VTZWxlY3RlZCh0aGlzLmxpbmtlZENhc2VzU2VydmljZS5saW5rZWRDYXNlcykgJiZcbiAgICAgICF0aGlzLmlzQ2FzZVNlbGVjdGVkU2FtZUFzQ3VycmVudENhc2UoKVxuICAgICkge1xuICAgICAgdGhpcy5nZXRDYXNlSW5mbygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dFcnJvckluZm8oKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNDYXNlU2VsZWN0ZWQobGlua2VkQ2FzZXM6IENhc2VMaW5rW10pOiBib29sZWFuIHtcbiAgICBpZiAobGlua2VkQ2FzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGNhc2VOdW1iZXIgPSB0aGlzLmxpbmtDYXNlRm9ybS52YWx1ZS5jYXNlTnVtYmVyO1xuICAgIHJldHVybiAhIWxpbmtlZENhc2VzLmZpbmQoXG4gICAgICAoY2FzZUxpbmspID0+IGNhc2VMaW5rLmNhc2VSZWZlcmVuY2Uuc3BsaXQoJy0nKS5qb2luKCcnKSA9PT0gY2FzZU51bWJlci5zcGxpdCgnLScpLmpvaW4oJycpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNDYXNlU2VsZWN0ZWRTYW1lQXNDdXJyZW50Q2FzZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5saW5rQ2FzZUZvcm0udmFsdWUuY2FzZU51bWJlci5zcGxpdCgnLScpLmpvaW4oJycpID09PSB0aGlzLmxpbmtlZENhc2VzU2VydmljZS5jYXNlSWQuc3BsaXQoJy0nKS5qb2luKCcnKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93RXJyb3JJbmZvKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxpbmtDYXNlRm9ybS5jb250cm9scy5jYXNlTnVtYmVyLmludmFsaWQpIHtcbiAgICAgIHRoaXMuY2FzZU51bWJlckVycm9yID0gTGlua2VkQ2FzZXNFcnJvck1lc3NhZ2VzLkNhc2VOdW1iZXJFcnJvcjtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgdGl0bGU6ICdkdW1teS1jYXNlLW51bWJlcicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBMaW5rZWRDYXNlc0Vycm9yTWVzc2FnZXMuQ2FzZU51bWJlckVycm9yLFxuICAgICAgICBmaWVsZElkOiAnY2FzZU51bWJlcicsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMubGlua0Nhc2VGb3JtLmNvbnRyb2xzLnJlYXNvblR5cGUuaW52YWxpZCkge1xuICAgICAgdGhpcy5jYXNlUmVhc29uRXJyb3IgPSBMaW5rZWRDYXNlc0Vycm9yTWVzc2FnZXMuUmVhc29uU2VsZWN0aW9uRXJyb3I7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgIHRpdGxlOiAnZHVtbXktY2FzZS1yZWFzb24nLFxuICAgICAgICBkZXNjcmlwdGlvbjogTGlua2VkQ2FzZXNFcnJvck1lc3NhZ2VzLlJlYXNvblNlbGVjdGlvbkVycm9yLFxuICAgICAgICBmaWVsZElkOiAnY2FzZVJlYXNvbicsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNDYXNlU2VsZWN0ZWQodGhpcy5zZWxlY3RlZENhc2VzKSkge1xuICAgICAgdGhpcy5jYXNlU2VsZWN0aW9uRXJyb3IgPSBMaW5rZWRDYXNlc0Vycm9yTWVzc2FnZXMuQ2FzZVByb3Bvc2VkRXJyb3I7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgIHRpdGxlOiAnZHVtbXktY2FzZS1udW1iZXInLFxuICAgICAgICBkZXNjcmlwdGlvbjogTGlua2VkQ2FzZXNFcnJvck1lc3NhZ2VzLkNhc2VQcm9wb3NlZEVycm9yLFxuICAgICAgICBmaWVsZElkOiAnY2FzZU51bWJlcicsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNDYXNlU2VsZWN0ZWQodGhpcy5saW5rZWRDYXNlc1NlcnZpY2UubGlua2VkQ2FzZXMpKSB7XG4gICAgICB0aGlzLmNhc2VTZWxlY3Rpb25FcnJvciA9IExpbmtlZENhc2VzRXJyb3JNZXNzYWdlcy5DYXNlc0xpbmtlZEVycm9yO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2VzLnB1c2goe1xuICAgICAgICB0aXRsZTogJ2R1bW15LWNhc2UtbnVtYmVyJyxcbiAgICAgICAgZGVzY3JpcHRpb246IExpbmtlZENhc2VzRXJyb3JNZXNzYWdlcy5DYXNlc0xpbmtlZEVycm9yLFxuICAgICAgICBmaWVsZElkOiAnY2FzZU51bWJlcicsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMubGlua0Nhc2VGb3JtLnZhbHVlLmNhc2VOdW1iZXIuc3BsaXQoJy0nKS5qb2luKCcnKSA9PT0gdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuY2FzZUlkLnNwbGl0KCctJykuam9pbignJykpIHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgdGl0bGU6ICdkdW1teS1jYXNlLW51bWJlcicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBMaW5rZWRDYXNlc0Vycm9yTWVzc2FnZXMuUHJvcG9zZWRDYXNlV2l0aEluLFxuICAgICAgICBmaWVsZElkOiAnY2FzZU51bWJlcicsXG4gICAgICB9KTtcbiAgICB9XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICAgIHRoaXMuZW1pdExpbmtlZENhc2VzU3RhdGUoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIGdldENhc2VJbmZvKCk6IHZvaWQge1xuICAgIGNvbnN0IGNhc2VOdW1iZXJEYXRhID0gdGhpcy5saW5rQ2FzZUZvcm0udmFsdWUuY2FzZU51bWJlci5yZXBsYWNlKC9bLSBdL2csICcnKTtcbiAgICB0aGlzLmNhc2VzU2VydmljZVxuICAgICAgLmdldENhc2VWaWV3VjIoY2FzZU51bWJlckRhdGEpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAoY2FzZVZpZXc6IENhc2VWaWV3KSA9PiB7XG4gICAgICAgICAgdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuY2FzZURldGFpbHMgPSBjYXNlVmlldztcbiAgICAgICAgICBjb25zdCBjYXNlTGluazogQ2FzZUxpbmsgPSB7XG4gICAgICAgICAgICBjYXNlUmVmZXJlbmNlOiBjYXNlVmlldy5jYXNlX2lkLFxuICAgICAgICAgICAgcmVhc29uczogdGhpcy5nZXRTZWxlY3RlZENhc2VSZWFzb25zKCksXG4gICAgICAgICAgICBjcmVhdGVkRGF0ZVRpbWU6IG1vbWVudChuZXcgRGF0ZSgpKS5mb3JtYXQodGhpcy5JU09fRk9STUFUKSxcbiAgICAgICAgICAgIGNhc2VUeXBlOiBjYXNlVmlldy5jYXNlX3R5cGUubmFtZSB8fCAnJyxcbiAgICAgICAgICAgIGNhc2VUeXBlRGVzY3JpcHRpb246IGNhc2VWaWV3LmNhc2VfdHlwZS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICAgIGNhc2VTdGF0ZTogY2FzZVZpZXcuc3RhdGUubmFtZSB8fCAnJyxcbiAgICAgICAgICAgIGNhc2VTdGF0ZURlc2NyaXB0aW9uOiBjYXNlVmlldy5zdGF0ZS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICAgIGNhc2VTZXJ2aWNlOiBjYXNlVmlldy5jYXNlX3R5cGUgJiYgY2FzZVZpZXcuY2FzZV90eXBlLmp1cmlzZGljdGlvbiAmJiBjYXNlVmlldy5jYXNlX3R5cGUuanVyaXNkaWN0aW9uLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgY2FzZU5hbWU6IHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmdldENhc2VOYW1lKGNhc2VWaWV3KSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGNjZEFwaUNhc2VMaW5rRGF0YTogQ0NEQ2FzZUxpbmtUeXBlID0ge1xuICAgICAgICAgICAgQ2FzZVJlZmVyZW5jZTogY2FzZVZpZXcuY2FzZV9pZCxcbiAgICAgICAgICAgIENhc2VUeXBlOiBjYXNlVmlldy5jYXNlX3R5cGUuaWQsXG4gICAgICAgICAgICBDcmVhdGVkRGF0ZVRpbWU6IG1vbWVudChuZXcgRGF0ZSgpKS5mb3JtYXQodGhpcy5JU09fRk9STUFUKSxcbiAgICAgICAgICAgIFJlYXNvbkZvckxpbms6IHRoaXMuZ2V0U2VsZWN0ZWRDQ0RUeXBlQ2FzZVJlYXNvbigpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGhpcy5saW5rZWRDYXNlc1NlcnZpY2UuY2FzZUZpZWxkVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmNhc2VGaWVsZFZhbHVlID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmNhc2VGaWVsZFZhbHVlLnB1c2goeyBpZDogY2FzZVZpZXcuY2FzZV9pZC50b1N0cmluZygpLCB2YWx1ZTogY2NkQXBpQ2FzZUxpbmtEYXRhIH0pO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXNlcy5wdXNoKGNhc2VMaW5rKTtcbiAgICAgICAgICB0aGlzLmluaXRGb3JtKCk7XG4gICAgICAgICAgdGhpcy5lbWl0TGlua2VkQ2FzZXNTdGF0ZShmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogSHR0cEVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYXNlTnVtYmVyRXJyb3IgPSBMaW5rZWRDYXNlc0Vycm9yTWVzc2FnZXMuQ2FzZUNoZWNrQWdhaW5FcnJvcjtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogJ2R1bW15LWNhc2UtbnVtYmVyJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBMaW5rZWRDYXNlc0Vycm9yTWVzc2FnZXMuQ2FzZUNoZWNrQWdhaW5FcnJvcixcbiAgICAgICAgICAgIGZpZWxkSWQ6ICdjYXNlTnVtYmVyJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmVtaXRMaW5rZWRDYXNlc1N0YXRlKGZhbHNlKTtcbiAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgLy8gUmV0dXJuIGxpbmtlZCBjYXNlcyBzdGF0ZSBhbmQgZXJyb3IgbWVzc2FnZXMgdG8gdGhlIHBhcmVudFxuICBwdWJsaWMgZW1pdExpbmtlZENhc2VzU3RhdGUoaXNOYXZpZ2F0ZVRvTmV4dFBhZ2U6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmxpbmtlZENhc2VzU3RhdGVFbWl0dGVyLmVtaXQoe1xuICAgICAgY3VycmVudExpbmtlZENhc2VzUGFnZTogTGlua2VkQ2FzZXNQYWdlcy5MSU5LX0NBU0UsXG4gICAgICBlcnJvck1lc3NhZ2VzOiB0aGlzLmVycm9yTWVzc2FnZXMsXG4gICAgICBuYXZpZ2F0ZVRvTmV4dFBhZ2U6IGlzTmF2aWdhdGVUb05leHRQYWdlLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkQ2FzZVJlYXNvbnMoKTogTGlua1JlYXNvbltdIHtcbiAgICBjb25zdCBzZWxlY3RlZFJlYXNvbnMgPSBbXTtcbiAgICB0aGlzLmxpbmtDYXNlRm9ybS5jb250cm9scy5yZWFzb25UeXBlLnZhbHVlLmZvckVhY2goXG4gICAgICAoc2VsZWN0ZWRSZWFzb246IExpbmtDYXNlUmVhc29uKSA9PiB7XG4gICAgICAgIGlmIChzZWxlY3RlZFJlYXNvbi5zZWxlY3RlZCkge1xuICAgICAgICAgIHNlbGVjdGVkUmVhc29ucy5wdXNoKHtcbiAgICAgICAgICAgIHJlYXNvbkNvZGU6IHNlbGVjdGVkUmVhc29uLmtleVxuICAgICAgICAgIH0gYXMgTGlua1JlYXNvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiBzZWxlY3RlZFJlYXNvbnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRDQ0RUeXBlQ2FzZVJlYXNvbigpOiBMaW5rUmVhc29uW10ge1xuICAgIGNvbnN0IHNlbGVjdGVkUmVhc29ucyA9IFtdO1xuICAgIHRoaXMubGlua0Nhc2VGb3JtLmNvbnRyb2xzLnJlYXNvblR5cGUudmFsdWUuZm9yRWFjaChcbiAgICAgIChzZWxlY3RlZFJlYXNvbjogTGlua0Nhc2VSZWFzb24pID0+IHtcbiAgICAgICAgaWYgKHNlbGVjdGVkUmVhc29uLnNlbGVjdGVkKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSZWFzb25zLnB1c2goe1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgUmVhc29uOiBzZWxlY3RlZFJlYXNvbi5rZXksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiBzZWxlY3RlZFJlYXNvbnM7XG4gIH1cblxuICBwdWJsaWMgb25TZWxlY3RlZExpbmtlZENhc2VSZW1vdmUocG9zLCBzZWxlY3RlZENhc2VSZWZlcmVuY2UpOiB2b2lkIHtcbiAgICBjb25zdCBjYXNlRmllbGRWYWx1ZSA9IHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmNhc2VGaWVsZFZhbHVlIHx8IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWRJdGVtcyA9IGNhc2VGaWVsZFZhbHVlLmZpbHRlcihpdGVtID0+IGl0ZW0udmFsdWUgJiYgaXRlbS52YWx1ZS5DYXNlUmVmZXJlbmNlICE9PSBzZWxlY3RlZENhc2VSZWZlcmVuY2UpO1xuICAgIGlmICh1cGRhdGVkSXRlbXMpIHtcbiAgICAgIHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmNhc2VGaWVsZFZhbHVlID0gdXBkYXRlZEl0ZW1zO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkQ2FzZXMuc3BsaWNlKHBvcywgMSk7XG4gIH1cblxuICBwdWJsaWMgb25OZXh0KCk6IHZvaWQge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IFtdO1xuICAgIHRoaXMuY2FzZVJlYXNvbkVycm9yID0gbnVsbDtcbiAgICB0aGlzLmNhc2VOdW1iZXJFcnJvciA9IG51bGw7XG4gICAgdGhpcy5jYXNlU2VsZWN0aW9uRXJyb3IgPSBudWxsO1xuICAgIHRoaXMubm9TZWxlY3RlZENhc2VFcnJvciA9IG51bGw7XG4gICAgbGV0IG5hdmlnYXRlVG9OZXh0UGFnZSA9IHRydWU7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDYXNlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMubGlua2VkQ2FzZXNTZXJ2aWNlLmxpbmtlZENhc2VzID0gdGhpcy5zZWxlY3RlZENhc2VzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5vU2VsZWN0ZWRDYXNlRXJyb3IgPSBMaW5rZWRDYXNlc0Vycm9yTWVzc2FnZXMuQ2FzZVNlbGVjdGlvbkVycm9yO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2VzLnB1c2goe1xuICAgICAgICB0aXRsZTogJ2R1bW15LWNhc2Utc2VsZWN0aW9uJyxcbiAgICAgICAgZGVzY3JpcHRpb246IExpbmtlZENhc2VzRXJyb3JNZXNzYWdlcy5DYXNlU2VsZWN0aW9uRXJyb3IsXG4gICAgICAgIGZpZWxkSWQ6ICdjYXNlUmVhc29uJyxcbiAgICAgIH0pO1xuICAgICAgbmF2aWdhdGVUb05leHRQYWdlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZW1pdExpbmtlZENhc2VzU3RhdGUobmF2aWdhdGVUb05leHRQYWdlKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgPGRpdj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstY2FwdGlvbi1sXCI+TGluayBjYXNlcyB0byB7e2Nhc2VOYW1lfX0ge3tjYXNlSWQgfCBjY2RDYXNlUmVmZXJlbmNlfX08L3NwYW4+XG4gICAgICA8aDEgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLXhsXCI+U2VsZWN0IGEmbmJzcDtjYXNlIHlvdSB3YW50IHRvIGxpbmsgdG8gdGhpcyBjYXNlPC9oMT5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgW2Zvcm1Hcm91cF09XCJsaW5rQ2FzZUZvcm1cIiAqbmdJZj1cImxpbmtDYXNlRm9ybVwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLXNcIj5FbnRlciBjYXNlIHJlZmVyZW5jZTwvaDM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgaWQ9XCJjYXNlTnVtYmVyXCIgW25nQ2xhc3NdPVwieydnb3Z1ay1mb3JtLWdyb3VwLS1lcnJvcic6ICEhY2FzZU51bWJlckVycm9yfVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiY2FzZU51bWJlckVycm9yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXZpc3VhbGx5LWhpZGRlblwiPkVycm9yOjwvc3Bhbj4ge3tjYXNlTnVtYmVyRXJyb3J9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJnb3Z1ay1pbnB1dCBnb3Z1ay1pbnB1dC0td2lkdGgtMjBcIiBmb3JtQ29udHJvbE5hbWU9XCJjYXNlTnVtYmVyXCIgaWQ9XCJ3aWR0aC0yMFwiIG5hbWU9XCJ3aWR0aC0yMFwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGgzIGNsYXNzPVwiZ292dWstaGVhZGluZy1zXCI+V2h5IHNob3VsZCB0aGVzZSBjYXNlcyBiZSBsaW5rZWQ/PC9oMz5cbiAgICAgICAgPGRpdiBpZD1cIndhc3RlLWhpbnRcIiBjbGFzcz1cImdvdnVrLWhpbnRcIj5cbiAgICAgICAgICBTZWxlY3QgYWxsIHRoYXQgYXBwbHkuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLWVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImNhc2VSZWFzb25FcnJvclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstdmlzdWFsbHktaGlkZGVuXCI+RXJyb3I6PC9zcGFuPiB7e2Nhc2VSZWFzb25FcnJvcn19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWNoZWNrYm94ZXNcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWNoZWNrYm94ZXNcIiBmb3JtQXJyYXlOYW1lPVwicmVhc29uVHlwZVwiIGlkPVwiY2FzZVJlYXNvblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydnb3Z1ay1mb3JtLWdyb3VwLS1lcnJvcic6ICEhY2FzZVJlYXNvbkVycm9yfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1jaGVja2JveGVzX19pdGVtXCIgKm5nRm9yPVwibGV0IHJlYXNvbiBvZiBsaW5rQ2FzZVJlYXNvbnM7aW5kZXggYXMgcG9zXCIgW2Zvcm1Hcm91cE5hbWVdPVwicG9zXCI+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJnb3Z1ay1jaGVja2JveGVzX19pbnB1dFwiIGlkPVwie3tyZWFzb24ua2V5fX1cIiBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RlZFwiIG5hbWU9XCJwb3NcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBbdmFsdWVdPVwicmVhc29uLnZhbHVlX2VuXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1jaGVja2JveGVzX19sYWJlbFwiIGZvcj1cInt7cmVhc29uLmtleX19XCI+e3tyZWFzb24udmFsdWVfZW59fTwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxicj48YnI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiY2FzZVNlbGVjdGlvbkVycm9yXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay12aXN1YWxseS1oaWRkZW5cIj5FcnJvcjo8L3NwYW4+IHt7Y2FzZVNlbGVjdGlvbkVycm9yfX1cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxidXR0b24gaWQ9XCJwcm9wb3NlXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCIgZGF0YS1tb2R1bGU9XCJnb3Z1ay1idXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJzdWJtaXRDYXNlSW5mbygpXCI+UHJvcG9zZSBjYXNlIGxpbms8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGhyPlxuICAgICAgPGJyPjxicj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgaWQ9XCJjYXNlTnVtYmVyXCIgW25nQ2xhc3NdPVwieydnb3Z1ay1mb3JtLWdyb3VwLS1lcnJvcic6ICEhbm9TZWxlY3RlZENhc2VFcnJvcn1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay1lcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJub1NlbGVjdGVkQ2FzZUVycm9yXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay12aXN1YWxseS1oaWRkZW5cIj5FcnJvcjo8L3NwYW4+IHt7bm9TZWxlY3RlZENhc2VFcnJvcn19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICA8Y2FwdGlvbiBjbGFzcz1cImdvdnVrLXRhYmxlX19jYXB0aW9uIGdvdnVrLXRhYmxlX19jYXB0aW9uLS1tXCI+UHJvcG9zZWQgY2FzZSBsaW5rcyA8L2NhcHRpb24+XG4gICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgd2lkdGg9XCIzMDBcIj5DYXNlIG5hbWUgYW5kIG51bWJlcjwvdGg+XG4gICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHdpZHRoPVwiMTUwXCI+Q2FzZSB0eXBlIDwvdGg+XG4gICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHdpZHRoPVwiMjAwXCI+U2VydmljZTwvdGg+XG4gICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHdpZHRoPVwiMjAwXCI+U3RhdGU8L3RoPlxuICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiB3aWR0aD1cIjQwMFwiPlJlYXNvbnMgZm9yIGNhc2UgbGluazwvdGg+XG4gICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHdpZHRoPVwiNTBcIj48L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgKm5nRm9yPVwibGV0IGNhc2Ugb2Ygc2VsZWN0ZWRDYXNlczsgbGV0IHBvcyA9IGluZGV4XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXAtLWVycm9yXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndGFibGUtZ3JvdXAtZXJyb3InOmNhc2VTZWxlY3Rpb25FcnJvciAmJiBjYXNlLmNhc2VSZWZlcmVuY2UgPT09IGxpbmtDYXNlRm9ybS52YWx1ZS5jYXNlTnVtYmVyfVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7Y2FzZS5jYXNlTmFtZX19IDxicj4ge3tjYXNlLmNhc2VSZWZlcmVuY2UgfCBjY2RDYXNlUmVmZXJlbmNlfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCIgW3RpdGxlXT1cImNhc2UuY2FzZVR5cGVEZXNjcmlwdGlvblwiPnt7Y2FzZS5jYXNlVHlwZX19PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57e2Nhc2UuY2FzZVNlcnZpY2V9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCIgW3RpdGxlXT1cImNhc2UuY2FzZVN0YXRlRGVzY3JpcHRpb25cIj57e2Nhc2UuY2FzZVN0YXRlfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPjxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmVhc29uIG9mIGNhc2UucmVhc29uc1wiPnt7cmVhc29uLnJlYXNvbkNvZGUgfCBjY2RMaW5rQ2FzZXNSZWFzb25WYWx1ZX19PGJyPjwvc3Bhbj48L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPjxhIFthdHRyLmlkXT1cImNhc2UuY2FzZVJlZmVyZW5jZVwiIChjbGljayk9XCJvblNlbGVjdGVkTGlua2VkQ2FzZVJlbW92ZShwb3MsIGNhc2UuY2FzZVJlZmVyZW5jZSk7XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ292dWstbGluayBuby12aXNpdGVkLXN0YXRlXCI+UmVtb3ZlPC9hPjwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiICpuZ0lmPVwiIXNlbGVjdGVkQ2FzZXMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCIgY29sc3Bhbj1cIjZcIj5cbiAgICAgICAgICAgICAgICBOb25lXG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1idXR0b24tZ3JvdXBcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBidXR0b24tcHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiBpZD1cIm5leHQtYnV0dG9uXCIgKGNsaWNrKT1cIm9uTmV4dCgpXCI+TmV4dDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=