@alauda-fe/common 1.4.28-beta.0 → 1.4.28-beta.2

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 (169) hide show
  1. package/code/code-editor-configs.d.ts +2 -0
  2. package/code/managed-fields-folder.util.d.ts +35 -0
  3. package/code/public-api.d.ts +4 -0
  4. package/code/resource-yaml-display/component.d.ts +64 -6
  5. package/code/resource-yaml-display/schema/component.d.ts +61 -0
  6. package/code/resource-yaml-editor/component.d.ts +95 -0
  7. package/code/yaml-examples.d.ts +8 -0
  8. package/code/yaml-sidebar/component.d.ts +57 -0
  9. package/code/yaml-sidebar/types.d.ts +21 -0
  10. package/code/yaml-sidebar/yaml-examples.d.ts +8 -0
  11. package/core/directives/scroll-to-first-invalid.directive.d.ts +1 -1
  12. package/core/services/kubernetes-schema.service.d.ts +44 -0
  13. package/core/services/public-api.d.ts +1 -0
  14. package/core/types/openapi.d.ts +37 -0
  15. package/core/types/public-api.d.ts +1 -0
  16. package/esm2022/abnormal-page/abnormal-page.component.mjs +1 -1
  17. package/esm2022/array-form-table/form/component.mjs +1 -1
  18. package/esm2022/array-form-table/key-value-form/component.mjs +1 -1
  19. package/esm2022/array-form-table/key-value-table/component.mjs +1 -1
  20. package/esm2022/array-form-table/string-array-form/component.mjs +1 -1
  21. package/esm2022/async-data/error-page/component.mjs +1 -1
  22. package/esm2022/async-data/page-state/component.mjs +1 -1
  23. package/esm2022/business/notification-disabled-container/component.mjs +1 -1
  24. package/esm2022/business/resource-select/exports/cluster-list/component.mjs +1 -1
  25. package/esm2022/business/resource-select/exports/cluster-selector/component.mjs +1 -1
  26. package/esm2022/business/resource-select/exports/icon/component.mjs +1 -1
  27. package/esm2022/business/resource-select/exports/mesh-group-selector/component.mjs +1 -1
  28. package/esm2022/business/resource-select/exports/namespace-list/component.mjs +1 -1
  29. package/esm2022/business/resource-select/exports/namespace-page/component.mjs +1 -1
  30. package/esm2022/business/resource-select/exports/namespace-selector/component.mjs +1 -1
  31. package/esm2022/business/resource-select/exports/project-list/component.mjs +1 -1
  32. package/esm2022/business/resource-select/exports/project-page/component.mjs +1 -1
  33. package/esm2022/business/resource-select/exports/project-selector/component.mjs +1 -1
  34. package/esm2022/business/resource-select/internals/data-grid/component.mjs +1 -1
  35. package/esm2022/business/resource-select/internals/meshgroup-list/component.mjs +1 -1
  36. package/esm2022/business/resource-select/internals/no-data/component.mjs +1 -1
  37. package/esm2022/business/resource-select/internals/resource-dashboard/component.mjs +1 -1
  38. package/esm2022/business/resource-select/internals/selector-popup/component.mjs +1 -1
  39. package/esm2022/chart/common/axis/axis-label.component.mjs +1 -1
  40. package/esm2022/chart/common/axis/x-axis-ticks.component.mjs +1 -1
  41. package/esm2022/chart/common/axis/x-axis.component.mjs +1 -1
  42. package/esm2022/chart/common/axis/x-plot-lines.component.mjs +1 -1
  43. package/esm2022/chart/common/axis/y-axis-ticks.component.mjs +1 -1
  44. package/esm2022/chart/common/axis/y-axis.component.mjs +1 -1
  45. package/esm2022/chart/common/axis/y-plot-lines.component.mjs +1 -1
  46. package/esm2022/chart/common/chart/chart.component.mjs +1 -1
  47. package/esm2022/chart/common/legend/legend.component.mjs +1 -1
  48. package/esm2022/chart/common/range-area/range-area.component.mjs +1 -1
  49. package/esm2022/chart/common/reference-area/reference-area.component.mjs +1 -1
  50. package/esm2022/chart/common/series/area-series.component.mjs +1 -1
  51. package/esm2022/chart/common/series/bar-path.component.mjs +1 -1
  52. package/esm2022/chart/common/series/bar-series.component.mjs +1 -1
  53. package/esm2022/chart/common/series/line-series.component.mjs +1 -1
  54. package/esm2022/chart/common/tooltip/tooltip.component.mjs +1 -1
  55. package/esm2022/chart/custom-template/dropdown-legend.mjs +1 -1
  56. package/esm2022/code/code-display-dialog/component.mjs +1 -1
  57. package/esm2022/code/code-editor-configs.mjs +12 -2
  58. package/esm2022/code/k8s-yaml-display-dialog/component.mjs +1 -1
  59. package/esm2022/code/managed-fields-folder.util.mjs +136 -0
  60. package/esm2022/code/public-api.mjs +5 -1
  61. package/esm2022/code/resource-yaml-display/component.mjs +254 -43
  62. package/esm2022/code/resource-yaml-display/schema/component.mjs +531 -0
  63. package/esm2022/code/resource-yaml-editor/component.mjs +387 -0
  64. package/esm2022/code/yaml-examples.mjs +337 -0
  65. package/esm2022/code/yaml-sidebar/component.mjs +482 -0
  66. package/esm2022/code/yaml-sidebar/types.mjs +2 -0
  67. package/esm2022/code/yaml-sidebar/yaml-examples.mjs +340 -0
  68. package/esm2022/core/components/tree/node/component.mjs +1 -1
  69. package/esm2022/core/components/tree/tree/component.mjs +1 -1
  70. package/esm2022/core/directives/readonly-field.directive.mjs +1 -1
  71. package/esm2022/core/services/kubernetes-schema.service.mjs +129 -0
  72. package/esm2022/core/services/public-api.mjs +2 -1
  73. package/esm2022/core/services/workspace-helper.service.mjs +4 -3
  74. package/esm2022/core/types/openapi.mjs +2 -0
  75. package/esm2022/core/types/public-api.mjs +2 -1
  76. package/esm2022/custom-columns-setting/component.mjs +1 -1
  77. package/esm2022/disabled-container/disabled-container.component.mjs +1 -1
  78. package/esm2022/editable/editable.component.mjs +1 -1
  79. package/esm2022/editable-text/component.mjs +1 -1
  80. package/esm2022/exec/placeholder/component.mjs +1 -1
  81. package/esm2022/exec/terminal/component.mjs +1 -1
  82. package/esm2022/exec/terminal-group/component.mjs +1 -1
  83. package/esm2022/feature-gate-forbidden/component/component.mjs +1 -1
  84. package/esm2022/form/errors-mapper/errors-mapper-component/component.mjs +1 -1
  85. package/esm2022/form/errors-mapper/errors-mapper.directive.mjs +1 -1
  86. package/esm2022/form/labels-editor/component.mjs +1 -1
  87. package/esm2022/form/taints-editor/component.mjs +1 -1
  88. package/esm2022/form/upload-file/component.mjs +1 -1
  89. package/esm2022/form/validators/strong-password/strong-password-tooltip/component.mjs +1 -1
  90. package/esm2022/graph-canvas/components/graph-actions.component.mjs +1 -1
  91. package/esm2022/graph-canvas/components/graph-canvas.component.mjs +1 -1
  92. package/esm2022/graph-canvas/components/graph-link.component.mjs +1 -1
  93. package/esm2022/graph-canvas/components/graph-links.component.mjs +1 -1
  94. package/esm2022/grid-layout/components/grid/component.mjs +1 -1
  95. package/esm2022/grid-layout/components/grid-items/component.mjs +1 -1
  96. package/esm2022/help-document/component.mjs +1 -1
  97. package/esm2022/k8s-resource-list/footer/component.mjs +1 -1
  98. package/esm2022/k8s-shared/resource-mark/k8s-resource-mark.component.mjs +1 -1
  99. package/esm2022/k8s-shared/update-description-dialog/component.mjs +1 -1
  100. package/esm2022/k8s-shared/update-display-name-dialog/component.mjs +1 -1
  101. package/esm2022/k8s-shared/update-key-value-dialog/component.mjs +1 -1
  102. package/esm2022/lazy-component/lazy-load-component.mjs +1 -1
  103. package/esm2022/license/license-error/component.mjs +1 -1
  104. package/esm2022/list-display/component.mjs +1 -1
  105. package/esm2022/metric-chart/metric-chart.component.mjs +1 -1
  106. package/esm2022/metric-chart/metric-time-pick.mjs +1 -1
  107. package/esm2022/multi-search/action-input/component.mjs +1 -1
  108. package/esm2022/multi-search/form/component.mjs +1 -1
  109. package/esm2022/multi-search/multi-search-tags/component.mjs +1 -1
  110. package/esm2022/mutable/mosaic/mosaic.component.mjs +1 -1
  111. package/esm2022/notification/feedback-notification/component.mjs +1 -1
  112. package/esm2022/overview-banner/overview-banner.component.mjs +1 -1
  113. package/esm2022/page-guard/component/component.mjs +1 -1
  114. package/esm2022/page-scaffold/navigation/breadcrumb/breadcrumb.component.mjs +1 -1
  115. package/esm2022/page-scaffold/navigation/nav-menu/nav-item-li/nav-item-li.component.mjs +1 -1
  116. package/esm2022/page-scaffold/navigation/nav-menu/nav-item-ul/nav-item-ul.component.mjs +1 -1
  117. package/esm2022/page-scaffold/navigation/nav-menu/nav-menu.component.mjs +1 -1
  118. package/esm2022/page-scaffold/page/notices/maintenance.component.mjs +1 -1
  119. package/esm2022/page-scaffold/page/notices/notice.component.mjs +1 -1
  120. package/esm2022/page-scaffold/page/page.component.mjs +1 -1
  121. package/esm2022/page-scaffold/page-header/account-menu/component/component.mjs +1 -1
  122. package/esm2022/page-scaffold/page-header/common-layout/namespace-select/component.mjs +1 -1
  123. package/esm2022/page-scaffold/page-header/common-layout/product-select/component.mjs +1 -1
  124. package/esm2022/page-scaffold/page-header/component.mjs +1 -1
  125. package/esm2022/page-scaffold/page-header/enterprise-support-status/component.mjs +1 -1
  126. package/esm2022/page-scaffold/page-header/header-notify/component/header-notify.component.mjs +1 -1
  127. package/esm2022/page-scaffold/page-header/header-notify/component/notification-list/notification-list.component.mjs +1 -1
  128. package/esm2022/page-scaffold/page-header/help-menu/component/component.mjs +1 -1
  129. package/esm2022/pie-derivative-chart/donut-status/component.mjs +1 -1
  130. package/esm2022/pie-derivative-chart/radial-bar/radial-bar-chart.component.mjs +1 -1
  131. package/esm2022/pod-status/component.mjs +1 -1
  132. package/esm2022/searchable-selector/component.mjs +1 -1
  133. package/esm2022/skeleton/item/component.mjs +1 -1
  134. package/esm2022/skeleton/nav-skeleton/component.mjs +1 -1
  135. package/esm2022/table/component.mjs +1 -1
  136. package/esm2022/view-chart/custom-template/dropdown-legend.mjs +1 -1
  137. package/esm2022/view-chart/legend/legend.component.mjs +1 -1
  138. package/esm2022/view-chart/view-chart.component.mjs +1 -1
  139. package/esm2022/view-zchart/custom-template/dropdown-legend.mjs +1 -1
  140. package/esm2022/view-zchart/legend/legend.component.mjs +1 -1
  141. package/esm2022/view-zchart/view-zchart.component.mjs +1 -1
  142. package/esm2022/widget/card-section/card-section.component.mjs +1 -1
  143. package/esm2022/widget/confirm-delete/confirm-delete.component.mjs +1 -1
  144. package/esm2022/widget/current-time/component.mjs +1 -1
  145. package/esm2022/widget/date-range-picker/component.mjs +1 -1
  146. package/esm2022/widget/field-set/column/component.mjs +2 -2
  147. package/esm2022/widget/field-set/group/component.mjs +1 -1
  148. package/esm2022/widget/field-set/item/component.mjs +1 -1
  149. package/esm2022/widget/foldable-block/component.mjs +1 -1
  150. package/esm2022/widget/foldable-item-in-table/component.mjs +1 -1
  151. package/esm2022/widget/loading-mask/loading-mask.component.mjs +1 -1
  152. package/esm2022/widget/password-input/component.mjs +1 -1
  153. package/esm2022/widget/relative-time/component.mjs +1 -1
  154. package/esm2022/widget/resource-label/component.mjs +1 -1
  155. package/esm2022/widget/resource-multi-select/component.mjs +1 -1
  156. package/esm2022/widget/search-panel/component.mjs +1 -1
  157. package/esm2022/widget/search-panel/search-item/component.mjs +1 -1
  158. package/esm2022/widget/status-icon/status-icon.component.mjs +1 -1
  159. package/esm2022/widget/tags-label/component.mjs +1 -1
  160. package/esm2022/widget/terminating-tag/component.mjs +1 -1
  161. package/esm2022/widget/text-ellipsis/component.mjs +1 -1
  162. package/esm2022/widget/text-with-url/component.mjs +1 -1
  163. package/esm2022/widget/zero-state/zero-state.component.mjs +1 -1
  164. package/esm2022/workload-status-icon/component.mjs +1 -1
  165. package/esm2022/xterm/xterm-terminal/xterm-terminal.component.mjs +1 -1
  166. package/esm2022/xterm/xterm.component.mjs +1 -1
  167. package/package.json +2 -2
  168. package/styles/global.scss +4 -0
  169. package/table/component.d.ts +1 -1
@@ -1,25 +1,32 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
- import { CodeEditorModule } from '@alauda/code-editor';
3
- import { CARD_MODULE, CHECKBOX_MODULE } from '@alauda/ui';
2
+ import { CodeEditorModule, MonacoLanguageService, } from '@alauda/code-editor';
3
+ import { CARD_MODULE, CHECKBOX_MODULE, ButtonModule, IconModule, } from '@alauda/ui';
4
4
  import { AsyncPipe, NgIf, NgTemplateOutlet } from '@angular/common';
5
- import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
5
+ import { ChangeDetectionStrategy, Component, Input, ViewChild, } from '@angular/core';
6
6
  import { FormsModule } from '@angular/forms';
7
- import { BehaviorSubject, combineLatest, Observable, map, distinctUntilChanged, } from 'rxjs';
8
- import { YamlUtilService, ObservableInput, } from '../../core/public-api';
7
+ import { yamlDefaults, setDiagnosticsOptions } from 'monaco-yaml';
8
+ import { BehaviorSubject, combineLatest, Observable, map, distinctUntilChanged, of, switchMap, shareReplay, takeUntil, Subject, } from 'rxjs';
9
+ import { KubernetesSchemaService } from '../../core/services/kubernetes-schema.service';
10
+ import { YamlUtilService } from '../../core/services/yaml-util.service';
11
+ import { ObservableInput } from '../../core/utils/decorators';
9
12
  import { TranslateModule } from '../../translate/translate.module';
10
- import { viewActions, yamlReadOptions } from '../code-editor-configs';
13
+ import { viewActions, yamlReadMinimapOptions, yamlReadOptions, } from '../code-editor-configs';
14
+ import { foldManagedFields, } from '../managed-fields-folder.util';
15
+ import { ResourceYamlSidebarComponent } from '../yaml-sidebar/component';
11
16
  import * as i0 from "@angular/core";
12
- import * as i1 from "../../core/public-api";
13
- import * as i2 from "@alauda/ui";
14
- import * as i3 from "@angular/forms";
15
- import * as i4 from "@alauda/code-editor";
16
- import * as i5 from "../../translate/translate.pipe";
17
+ import * as i1 from "../../core/services/yaml-util.service";
18
+ import * as i2 from "../../core/services/kubernetes-schema.service";
19
+ import * as i3 from "@alauda/code-editor";
20
+ import * as i4 from "@alauda/ui";
21
+ import * as i5 from "@angular/forms";
22
+ import * as i6 from "../../translate/translate.pipe";
23
+ const _c0 = ["codeEditorRef"];
17
24
  function ResourceYamlDisplayComponent_aui_card_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {
18
25
  i0.ɵɵelementContainer(0);
19
26
  } }
20
27
  function ResourceYamlDisplayComponent_aui_card_0_Template(rf, ctx) { if (rf & 1) {
21
28
  i0.ɵɵelementStart(0, "aui-card");
22
- i0.ɵɵtemplate(1, ResourceYamlDisplayComponent_aui_card_0_ng_container_1_Template, 1, 0, "ng-container", 2);
29
+ i0.ɵɵtemplate(1, ResourceYamlDisplayComponent_aui_card_0_ng_container_1_Template, 1, 0, "ng-container", 3);
23
30
  i0.ɵɵelementEnd();
24
31
  } if (rf & 2) {
25
32
  i0.ɵɵnextContext();
@@ -27,11 +34,11 @@ function ResourceYamlDisplayComponent_aui_card_0_Template(rf, ctx) { if (rf & 1)
27
34
  i0.ɵɵadvance();
28
35
  i0.ɵɵproperty("ngTemplateOutlet", content_r1);
29
36
  } }
30
- function ResourceYamlDisplayComponent_ng_template_1_aui_checkbox_3_Template(rf, ctx) { if (rf & 1) {
37
+ function ResourceYamlDisplayComponent_ng_template_1_aui_checkbox_7_Template(rf, ctx) { if (rf & 1) {
31
38
  const _r2 = i0.ɵɵgetCurrentView();
32
- i0.ɵɵelementStart(0, "aui-checkbox", 7);
39
+ i0.ɵɵelementStart(0, "aui-checkbox", 12);
33
40
  i0.ɵɵpipe(1, "async");
34
- i0.ɵɵlistener("ngModelChange", function ResourceYamlDisplayComponent_ng_template_1_aui_checkbox_3_Template_aui_checkbox_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.conciseChange($event)); });
41
+ i0.ɵɵlistener("ngModelChange", function ResourceYamlDisplayComponent_ng_template_1_aui_checkbox_7_Template_aui_checkbox_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.conciseChange($event)); });
35
42
  i0.ɵɵtext(2);
36
43
  i0.ɵɵpipe(3, "translate");
37
44
  i0.ɵɵelementEnd();
@@ -41,72 +48,256 @@ function ResourceYamlDisplayComponent_ng_template_1_aui_checkbox_3_Template(rf,
41
48
  i0.ɵɵadvance(2);
42
49
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 4, "preview_concise_yaml"), " ");
43
50
  } }
44
- function ResourceYamlDisplayComponent_ng_template_1_aui_checkbox_4_Template(rf, ctx) { if (rf & 1) {
51
+ function ResourceYamlDisplayComponent_ng_template_1_button_9_Template(rf, ctx) { if (rf & 1) {
45
52
  const _r4 = i0.ɵɵgetCurrentView();
46
- i0.ɵɵelementStart(0, "aui-checkbox", 8);
53
+ i0.ɵɵelementStart(0, "button", 13);
47
54
  i0.ɵɵpipe(1, "async");
48
55
  i0.ɵɵpipe(2, "async");
49
- i0.ɵɵlistener("ngModelChange", function ResourceYamlDisplayComponent_ng_template_1_aui_checkbox_4_Template_aui_checkbox_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.reduce$$.next($event)); });
50
- i0.ɵɵtext(3);
56
+ i0.ɵɵpipe(3, "async");
51
57
  i0.ɵɵpipe(4, "translate");
58
+ i0.ɵɵlistener("click", function ResourceYamlDisplayComponent_ng_template_1_button_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.toggleSidebar()); });
59
+ i0.ɵɵelement(5, "aui-icon", 14);
60
+ i0.ɵɵpipe(6, "async");
52
61
  i0.ɵɵelementEnd();
53
62
  } if (rf & 2) {
54
63
  const ctx_r2 = i0.ɵɵnextContext(2);
55
- i0.ɵɵproperty("hidden", i0.ɵɵpipeBind1(1, 3, ctx_r2.concise$$))("ngModel", i0.ɵɵpipeBind1(2, 5, ctx_r2.reduce$$));
56
- i0.ɵɵadvance(3);
57
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 7, "hide_manage_fields_field"), " ");
64
+ i0.ɵɵproperty("type", i0.ɵɵpipeBind1(1, 4, ctx_r2.showSidebar$$) ? "primary" : "text")("disabled", !i0.ɵɵpipeBind1(2, 6, ctx_r2.finalSchema$))("title", i0.ɵɵpipeBind1(3, 8, ctx_r2.finalSchema$) ? "" : i0.ɵɵpipeBind1(4, 10, "schema_not_available"));
65
+ i0.ɵɵadvance(5);
66
+ i0.ɵɵproperty("icon", i0.ɵɵpipeBind1(6, 12, ctx_r2.showSidebar$$) ? "prod:expand_sidebar" : "prod:collapse_sidebar");
67
+ } }
68
+ function ResourceYamlDisplayComponent_ng_template_1_div_10_Template(rf, ctx) { if (rf & 1) {
69
+ const _r5 = i0.ɵɵgetCurrentView();
70
+ i0.ɵɵelementStart(0, "div", 15)(1, "acl-resource-yaml-sidebar", 16);
71
+ i0.ɵɵpipe(2, "async");
72
+ i0.ɵɵlistener("close", function ResourceYamlDisplayComponent_ng_template_1_div_10_Template_acl_resource_yaml_sidebar_close_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.toggleSidebar()); });
73
+ i0.ɵɵelementEnd()();
74
+ } if (rf & 2) {
75
+ const ctx_r2 = i0.ɵɵnextContext(2);
76
+ i0.ɵɵadvance();
77
+ i0.ɵɵproperty("resource", ctx_r2.getCurrentResource())("schema", i0.ɵɵpipeBind1(2, 4, ctx_r2.finalSchema$))("schemaEnable", ctx_r2.schemaEnable)("exampleEnable", false);
58
78
  } }
59
79
  function ResourceYamlDisplayComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
60
- i0.ɵɵelementStart(0, "aui-code-editor", 3);
80
+ i0.ɵɵelementStart(0, "div", 4);
61
81
  i0.ɵɵpipe(1, "async");
62
- i0.ɵɵelementContainerStart(2, 4);
63
- i0.ɵɵtemplate(3, ResourceYamlDisplayComponent_ng_template_1_aui_checkbox_3_Template, 4, 6, "aui-checkbox", 5)(4, ResourceYamlDisplayComponent_ng_template_1_aui_checkbox_4_Template, 5, 9, "aui-checkbox", 6);
82
+ i0.ɵɵelementStart(2, "div", 5)(3, "aui-code-editor", 6, 1);
83
+ i0.ɵɵpipe(5, "async");
84
+ i0.ɵɵelementContainerStart(6, 7);
85
+ i0.ɵɵtemplate(7, ResourceYamlDisplayComponent_ng_template_1_aui_checkbox_7_Template, 4, 6, "aui-checkbox", 8);
86
+ i0.ɵɵelementContainerEnd();
87
+ i0.ɵɵelementContainerStart(8, 9);
88
+ i0.ɵɵtemplate(9, ResourceYamlDisplayComponent_ng_template_1_button_9_Template, 7, 14, "button", 10);
64
89
  i0.ɵɵelementContainerEnd();
90
+ i0.ɵɵelementEnd()();
91
+ i0.ɵɵtemplate(10, ResourceYamlDisplayComponent_ng_template_1_div_10_Template, 3, 6, "div", 11);
92
+ i0.ɵɵpipe(11, "async");
65
93
  i0.ɵɵelementEnd();
66
94
  } if (rf & 2) {
67
95
  const ctx_r2 = i0.ɵɵnextContext();
68
- i0.ɵɵproperty("ngModel", i0.ɵɵpipeBind1(1, 5, ctx_r2.yaml$))("options", ctx_r2.editorOptions)("actionsConfig", ctx_r2.viewActions);
96
+ i0.ɵɵclassProp("with-sidebar", i0.ɵɵpipeBind1(1, 9, ctx_r2.showSidebar$$));
69
97
  i0.ɵɵadvance(3);
98
+ i0.ɵɵproperty("ngModel", i0.ɵɵpipeBind1(5, 11, ctx_r2.yaml$))("options", ctx_r2.editorOptions)("actionsConfig", ctx_r2.viewActions)("modelUri", ctx_r2.modelUri);
99
+ i0.ɵɵadvance(4);
70
100
  i0.ɵɵproperty("ngIf", ctx_r2.conciseEnable);
101
+ i0.ɵɵadvance(2);
102
+ i0.ɵɵproperty("ngIf", ctx_r2.sidebarEnable);
71
103
  i0.ɵɵadvance();
72
- i0.ɵɵproperty("ngIf", ctx_r2.manageFieldActionEnable);
104
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(11, 13, ctx_r2.showSidebar$$));
73
105
  } }
74
106
  export class ResourceYamlDisplayComponent {
75
- constructor(yamlUtil) {
107
+ constructor(yamlUtil, schemaService, monacoLanguageService) {
76
108
  this.yamlUtil = yamlUtil;
109
+ this.schemaService = schemaService;
110
+ this.monacoLanguageService = monacoLanguageService;
111
+ this.destroy$ = new Subject();
77
112
  this.concise$$ = new BehaviorSubject(false);
78
- this.reduce$$ = new BehaviorSubject(true);
113
+ this.reduce$$ = new BehaviorSubject(false);
114
+ this.showSidebar$$ = new BehaviorSubject(false);
115
+ this.showDebugPanel$$ = new BehaviorSubject(false);
116
+ this.monacoEditor = null;
117
+ this.registeredSchemas = new Set();
79
118
  this.hasWrapper = true;
119
+ this.showDebugInfo = false;
80
120
  this.conciseEnable = true;
81
121
  this.manageFieldActionEnable = true;
122
+ this.sidebarEnable = true;
123
+ this.schemaEnable = true;
124
+ this.exampleEnable = true;
125
+ this.autoFoldManagedFields = true;
126
+ this.minimap = true;
127
+ this.yamlReadMinimapOptions = yamlReadMinimapOptions;
128
+ this.yamlReadOptions = yamlReadOptions;
129
+ this.hasFolded = false;
130
+ /**
131
+ * 自动获取的 schema,当没有手动提供 schema 时使用
132
+ */
133
+ this.autoSchema$ = this.resource$.pipe(switchMap(resource => {
134
+ if (!resource) {
135
+ return of(null);
136
+ }
137
+ const firstResource = (Array.isArray(resource) ? resource[0] : resource);
138
+ if (!firstResource?.apiVersion || !firstResource?.kind) {
139
+ return of(null);
140
+ }
141
+ return this.schemaService.getResourceSchema(firstResource.apiVersion, firstResource.kind);
142
+ }), shareReplay(1));
143
+ /**
144
+ * 最终使用的 schema,优先使用手动提供的,否则使用自动获取的
145
+ */
146
+ this.finalSchema$ = combineLatest([this.schema$, this.autoSchema$]).pipe(map(([manualSchema, autoSchema]) => manualSchema || autoSchema), distinctUntilChanged(), shareReplay(1));
82
147
  this.yaml$ = combineLatest([
83
148
  this.resource$,
84
149
  this.concise$$,
85
150
  this.reduce$$.pipe(distinctUntilChanged()),
86
151
  ]).pipe(map(([resource, concise, reduce]) => this.yamlUtil.generateFilteredYamlResource(resource, concise, reduce)));
87
- this.editorOptions = yamlReadOptions;
88
152
  this.viewActions = viewActions;
153
+ this.yamlSchemaService =
154
+ this.monacoLanguageService.getLanguageSchemaService(['yaml', 'yamlDefaults'], yamlDefaults);
155
+ // 启用 YAML 语法提示功能
156
+ setDiagnosticsOptions({
157
+ validate: true,
158
+ format: true,
159
+ completion: true,
160
+ hover: true,
161
+ });
162
+ // 自动设置 schema
163
+ combineLatest([this.resource$, this.finalSchema$])
164
+ .pipe(takeUntil(this.destroy$))
165
+ .subscribe(([resource, schema]) => {
166
+ if (resource && schema) {
167
+ const firstResource = Array.isArray(resource)
168
+ ? resource[0]
169
+ : resource;
170
+ if (firstResource && !Array.isArray(firstResource)) {
171
+ this.setYamlSchema(firstResource, schema);
172
+ }
173
+ }
174
+ });
175
+ this.finalSchema$.pipe(takeUntil(this.destroy$)).subscribe();
176
+ }
177
+ get editorOptions() {
178
+ return this.minimap ? yamlReadMinimapOptions : yamlReadOptions;
89
179
  }
90
180
  conciseChange(value) {
91
181
  this.concise$$.next(value);
92
- if (value) {
93
- this.reduce$$.next(true);
182
+ }
183
+ toggleSidebar() {
184
+ this.showSidebar$$.next(!this.showSidebar$$.value);
185
+ }
186
+ toggleDebugInfo() {
187
+ this.showDebugPanel$$.next(!this.showDebugPanel$$.value);
188
+ }
189
+ getCurrentResource() {
190
+ const resource = this.resource;
191
+ if (Array.isArray(resource)) {
192
+ return resource.length > 0 ? resource[0] : null;
193
+ }
194
+ return resource || null;
195
+ }
196
+ getCurrentSchema() {
197
+ return this.schema || null;
198
+ }
199
+ selfFoldManagedFields() {
200
+ if (this.hasFolded) {
201
+ return;
202
+ }
203
+ this.hasFolded = true;
204
+ setTimeout(() => {
205
+ const editor = this.getEditorInstance();
206
+ if (editor) {
207
+ foldManagedFields(editor);
208
+ }
209
+ }, 0);
210
+ }
211
+ /**
212
+ * 设置 YAML schema 以提供 hover 提示和自动完成
213
+ */
214
+ setYamlSchema(resource, schema) {
215
+ if (!schema) {
216
+ return;
217
+ }
218
+ // 使用 apiVersion + kind 组合作为标识
219
+ const apiVersion = resource?.apiVersion || 'unknown';
220
+ const kind = resource?.kind || 'unknown';
221
+ const schemaKey = `${apiVersion}/${kind}`;
222
+ this.modelUri = `${schemaKey}.yaml`;
223
+ this.selfFoldManagedFields();
224
+ // 检查是否已经注册过相同的 schema,避免重复注册
225
+ if (this.registeredSchemas.has(schemaKey)) {
226
+ return;
94
227
  }
228
+ // 获取完整的 definitions 以支持 $ref 引用
229
+ const definitions = this.schemaService.definitions || {};
230
+ // 创建包含完整 definitions 的 schema 对象
231
+ const fullSchema = {
232
+ ...schema,
233
+ definitions,
234
+ };
235
+ // 确保schema被正确注册,并启用自动完成功能
236
+ this.yamlSchemaService.addSchema({
237
+ uri: `k8s://${schemaKey}.schema.json`,
238
+ fileMatch: [this.modelUri],
239
+ schema: fullSchema,
240
+ });
241
+ this.registeredSchemas.add(schemaKey);
95
242
  }
96
- static { this.ɵfac = function ResourceYamlDisplayComponent_Factory(t) { return new (t || ResourceYamlDisplayComponent)(i0.ɵɵdirectiveInject(i1.YamlUtilService)); }; }
97
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ResourceYamlDisplayComponent, selectors: [["acl-resource-yaml-display"]], inputs: { hasWrapper: "hasWrapper", conciseEnable: "conciseEnable", manageFieldActionEnable: "manageFieldActionEnable", resource: "resource" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 3, vars: 2, consts: [["content", ""], [4, "ngIf", "ngIfElse"], [4, "ngTemplateOutlet"], ["name", "yaml", 3, "ngModel", "options", "actionsConfig"], ["auiCodeEditorToolbarLeft", ""], ["class", "aui-code-editor-toolbar__control-button", 3, "ngModel", "ngModelChange", 4, "ngIf"], ["class", "aui-code-editor-toolbar__control-button", 3, "hidden", "ngModel", "ngModelChange", 4, "ngIf"], [1, "aui-code-editor-toolbar__control-button", 3, "ngModelChange", "ngModel"], [1, "aui-code-editor-toolbar__control-button", 3, "ngModelChange", "hidden", "ngModel"]], template: function ResourceYamlDisplayComponent_Template(rf, ctx) { if (rf & 1) {
98
- i0.ɵɵtemplate(0, ResourceYamlDisplayComponent_aui_card_0_Template, 2, 1, "aui-card", 1)(1, ResourceYamlDisplayComponent_ng_template_1_Template, 5, 7, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
243
+ ngAfterViewInit() {
244
+ if (this.autoFoldManagedFields && this.schemaService.definitions) {
245
+ this.selfFoldManagedFields();
246
+ }
247
+ }
248
+ /**
249
+ * 获取 Monaco Editor 实例
250
+ */
251
+ getEditorInstance() {
252
+ if (this.codeEditorRef && !this.monacoEditor) {
253
+ // 尝试从 ViewChild 获取编辑器实例
254
+ const editorComponent = this.codeEditorRef;
255
+ if (editorComponent.editor) {
256
+ this.monacoEditor = editorComponent.editor;
257
+ }
258
+ }
259
+ return this.monacoEditor;
260
+ }
261
+ /**
262
+ * 自动折叠 managedFields 字段
263
+ */
264
+ foldManagedFields() {
265
+ const editor = this.getEditorInstance();
266
+ if (editor) {
267
+ foldManagedFields(editor);
268
+ }
269
+ }
270
+ ngOnDestroy() {
271
+ this.destroy$.next();
272
+ this.destroy$.complete();
273
+ this.monacoEditor = null;
274
+ }
275
+ static { this.ɵfac = function ResourceYamlDisplayComponent_Factory(t) { return new (t || ResourceYamlDisplayComponent)(i0.ɵɵdirectiveInject(i1.YamlUtilService), i0.ɵɵdirectiveInject(i2.KubernetesSchemaService), i0.ɵɵdirectiveInject(i3.MonacoLanguageService)); }; }
276
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ResourceYamlDisplayComponent, selectors: [["acl-resource-yaml-display"]], viewQuery: function ResourceYamlDisplayComponent_Query(rf, ctx) { if (rf & 1) {
277
+ i0.ɵɵviewQuery(_c0, 5);
278
+ } if (rf & 2) {
279
+ let _t;
280
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.codeEditorRef = _t.first);
281
+ } }, inputs: { hasWrapper: "hasWrapper", showDebugInfo: "showDebugInfo", conciseEnable: "conciseEnable", manageFieldActionEnable: "manageFieldActionEnable", sidebarEnable: "sidebarEnable", schemaEnable: "schemaEnable", exampleEnable: "exampleEnable", autoFoldManagedFields: "autoFoldManagedFields", schema: "schema", resource: "resource", minimap: "minimap" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 3, vars: 2, consts: [["content", ""], ["codeEditorRef", ""], [4, "ngIf", "ngIfElse"], [4, "ngTemplateOutlet"], [1, "yaml-display-container"], [1, "yaml-editor-section"], ["name", "yaml", 3, "ngModel", "options", "actionsConfig", "modelUri"], ["auiCodeEditorToolbarLeft", ""], ["class", "aui-code-editor-toolbar__control-button", 3, "ngModel", "ngModelChange", 4, "ngIf"], ["auiCodeEditorToolbarRightSide", ""], ["auiButton", "", "class", "aui-code-editor-toolbar__control-button", "size", "small", 3, "type", "disabled", "title", "click", 4, "ngIf"], ["class", "yaml-sidebar-section", 4, "ngIf"], [1, "aui-code-editor-toolbar__control-button", 3, "ngModelChange", "ngModel"], ["auiButton", "", "size", "small", 1, "aui-code-editor-toolbar__control-button", 3, "click", "type", "disabled", "title"], [3, "icon"], [1, "yaml-sidebar-section"], [3, "close", "resource", "schema", "schemaEnable", "exampleEnable"]], template: function ResourceYamlDisplayComponent_Template(rf, ctx) { if (rf & 1) {
282
+ i0.ɵɵtemplate(0, ResourceYamlDisplayComponent_aui_card_0_Template, 2, 1, "aui-card", 2)(1, ResourceYamlDisplayComponent_ng_template_1_Template, 12, 15, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
99
283
  } if (rf & 2) {
100
284
  const content_r1 = i0.ɵɵreference(2);
101
285
  i0.ɵɵproperty("ngIf", ctx.hasWrapper)("ngIfElse", content_r1);
102
- } }, dependencies: [i2.CardComponent, NgIf,
103
- FormsModule, i3.NgControlStatus, i3.NgModel, i2.CheckboxComponent, CodeEditorModule, i4.CodeEditorComponent, TranslateModule, i5.TranslatePipe, AsyncPipe,
104
- NgTemplateOutlet], styles: ["[_nghost-%COMP%]:not(.dialog-content){display:block;height:calc(100vh - (var(--acl-page-header-height) + 44px) - 147px)}[_nghost-%COMP%]:not(.dialog-content) .aui-code-editor{min-height:100%}[_nghost-%COMP%]:not(.dialog-content) > .aui-card[_ngcontent-%COMP%]{height:100%}[_nghost-%COMP%]:not(.dialog-content) > .aui-card[_ngcontent-%COMP%] .aui-card__content[_ngcontent-%COMP%], [_nghost-%COMP%]:not(.dialog-content) > .aui-card[_ngcontent-%COMP%] aui-code-editor[_ngcontent-%COMP%], [_nghost-%COMP%]:not(.dialog-content) > .aui-card[_ngcontent-%COMP%] .aui-code-editor[_ngcontent-%COMP%]{height:100%;min-height:100%}[_nghost-%COMP%]{display:block}[_nghost-%COMP%] aui-card, [_nghost-%COMP%] .aui-card, [_nghost-%COMP%] .aui-card__content{height:100%}[_nghost-%COMP%] .aui-checkbox{margin-right:0}[_nghost-%COMP%] aui-code-editor[_ngcontent-%COMP%]{height:100%}"], changeDetection: 0 }); }
286
+ } }, dependencies: [i4.CardComponent, NgIf,
287
+ FormsModule, i5.NgControlStatus, i5.NgModel, i4.CheckboxComponent, ButtonModule,
288
+ CodeEditorModule, i3.CodeEditorComponent, TranslateModule, i6.TranslatePipe, AsyncPipe,
289
+ NgTemplateOutlet,
290
+ ResourceYamlSidebarComponent,
291
+ IconModule, i4.IconComponent], styles: ["[_nghost-%COMP%]:not(.dialog-content){display:block;height:calc(100vh - (var(--acl-page-header-height) + 44px) - 147px)}[_nghost-%COMP%]:not(.dialog-content) .aui-code-editor{min-height:100%}[_nghost-%COMP%]:not(.dialog-content) > .aui-card[_ngcontent-%COMP%]{height:100%}[_nghost-%COMP%]:not(.dialog-content) > .aui-card[_ngcontent-%COMP%] .aui-card__content[_ngcontent-%COMP%], [_nghost-%COMP%]:not(.dialog-content) > .aui-card[_ngcontent-%COMP%] aui-code-editor[_ngcontent-%COMP%], [_nghost-%COMP%]:not(.dialog-content) > .aui-card[_ngcontent-%COMP%] .aui-code-editor[_ngcontent-%COMP%]{height:100%;min-height:100%}[_nghost-%COMP%]{display:block}[_nghost-%COMP%] aui-card, [_nghost-%COMP%] .aui-card, [_nghost-%COMP%] .aui-card__content{height:100%}[_nghost-%COMP%] .aui-checkbox{margin-right:0}[_nghost-%COMP%] aui-code-editor[_ngcontent-%COMP%]{height:100%}.yaml-display-container[_ngcontent-%COMP%]{display:flex;height:100%}.yaml-display-container.with-sidebar[_ngcontent-%COMP%] .yaml-editor-section[_ngcontent-%COMP%]{flex:1;min-width:0}.yaml-display-container.with-sidebar[_ngcontent-%COMP%] .yaml-sidebar-section[_ngcontent-%COMP%]{width:400px;flex-shrink:0}.yaml-display-container[_ngcontent-%COMP%]:not(.with-sidebar) .yaml-editor-section[_ngcontent-%COMP%]{flex:1}.yaml-editor-section[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%}.yaml-editor-section[_ngcontent-%COMP%] aui-code-editor[_ngcontent-%COMP%]{flex:1;height:100%}.yaml-sidebar-section[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%}.yaml-sidebar-section[_ngcontent-%COMP%] acl-resource-yaml-sidebar[_ngcontent-%COMP%]{flex:1;height:100%}.yaml-debug-section[_ngcontent-%COMP%]{position:absolute;top:0;right:0;width:350px;height:100%;background:var(--aui-color-bg-container);border-left:1px solid var(--aui-color-border-default);z-index:1000;overflow-y:auto}.debug-panel[_ngcontent-%COMP%]{padding:16px;font-size:12px}.debug-panel[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0 0 12px;font-size:14px;color:var(--aui-color-text-primary)}.debug-panel[_ngcontent-%COMP%] .debug-item[_ngcontent-%COMP%]{margin-bottom:16px}.debug-panel[_ngcontent-%COMP%] .debug-item[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--aui-color-text-primary);display:block;margin-bottom:4px}.debug-panel[_ngcontent-%COMP%] .debug-item[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{margin:0;padding-left:16px}.debug-panel[_ngcontent-%COMP%] .debug-item[_ngcontent-%COMP%] ul[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{margin-bottom:2px;color:var(--aui-color-text-secondary)}.debug-panel[_ngcontent-%COMP%] .debug-actions[_ngcontent-%COMP%]{border-top:1px solid var(--aui-color-border-default);padding-top:12px;text-align:right}@media (max-width: 1200px){.yaml-display-container.with-sidebar[_ngcontent-%COMP%] .yaml-sidebar-section[_ngcontent-%COMP%]{width:350px}}@media (max-width: 992px){.yaml-display-container.with-sidebar[_ngcontent-%COMP%]{flex-direction:column}.yaml-display-container.with-sidebar[_ngcontent-%COMP%] .yaml-editor-section[_ngcontent-%COMP%]{flex:1;min-height:50%}.yaml-display-container.with-sidebar[_ngcontent-%COMP%] .yaml-sidebar-section[_ngcontent-%COMP%]{width:100%;height:50%;border-top:1px solid var(--aui-color-border, #e0e0e0);border-left:none}}"], changeDetection: 0 }); }
105
292
  }
106
293
  __decorate([
107
294
  ObservableInput(),
108
295
  __metadata("design:type", Observable)
109
296
  ], ResourceYamlDisplayComponent.prototype, "resource$", void 0);
297
+ __decorate([
298
+ ObservableInput(),
299
+ __metadata("design:type", Observable)
300
+ ], ResourceYamlDisplayComponent.prototype, "schema$", void 0);
110
301
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ResourceYamlDisplayComponent, [{
111
302
  type: Component,
112
303
  args: [{ selector: 'acl-resource-yaml-display', preserveWhitespaces: false, standalone: true, imports: [
@@ -114,19 +305,39 @@ __decorate([
114
305
  NgIf,
115
306
  FormsModule,
116
307
  CHECKBOX_MODULE,
308
+ ButtonModule,
117
309
  CodeEditorModule,
118
310
  TranslateModule,
119
311
  AsyncPipe,
120
312
  NgTemplateOutlet,
121
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<aui-card *ngIf=\"hasWrapper; else content\">\n <ng-container *ngTemplateOutlet=\"content\" />\n</aui-card>\n<ng-template #content>\n <aui-code-editor\n name=\"yaml\"\n [ngModel]=\"yaml$ | async\"\n [options]=\"editorOptions\"\n [actionsConfig]=\"viewActions\"\n >\n <ng-container auiCodeEditorToolbarLeft>\n <aui-checkbox\n *ngIf=\"conciseEnable\"\n class=\"aui-code-editor-toolbar__control-button\"\n [ngModel]=\"concise$$ | async\"\n (ngModelChange)=\"conciseChange($event)\"\n >\n {{ 'preview_concise_yaml' | translate }}\n </aui-checkbox>\n <aui-checkbox\n *ngIf=\"manageFieldActionEnable\"\n [hidden]=\"concise$$ | async\"\n class=\"aui-code-editor-toolbar__control-button\"\n [ngModel]=\"reduce$$ | async\"\n (ngModelChange)=\"reduce$$.next($event)\"\n >\n {{ 'hide_manage_fields_field' | translate }}\n </aui-checkbox>\n </ng-container>\n </aui-code-editor>\n</ng-template>\n", styles: [":host(:not(.dialog-content)){display:block;height:calc(100vh - (var(--acl-page-header-height) + 44px) - 147px)}:host(:not(.dialog-content)) ::ng-deep .aui-code-editor{min-height:100%}:host(:not(.dialog-content))>.aui-card{height:100%}:host(:not(.dialog-content))>.aui-card .aui-card__content,:host(:not(.dialog-content))>.aui-card aui-code-editor,:host(:not(.dialog-content))>.aui-card .aui-code-editor{height:100%;min-height:100%}:host{display:block}:host ::ng-deep aui-card,:host ::ng-deep .aui-card,:host ::ng-deep .aui-card__content{height:100%}:host ::ng-deep .aui-checkbox{margin-right:0}:host aui-code-editor{height:100%}\n"] }]
122
- }], () => [{ type: i1.YamlUtilService }], { hasWrapper: [{
313
+ ResourceYamlSidebarComponent,
314
+ IconModule,
315
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<aui-card *ngIf=\"hasWrapper; else content\">\n <ng-container *ngTemplateOutlet=\"content\" />\n</aui-card>\n<ng-template #content>\n <div\n class=\"yaml-display-container\"\n [class.with-sidebar]=\"showSidebar$$ | async\"\n >\n <div class=\"yaml-editor-section\">\n <aui-code-editor\n #codeEditorRef\n name=\"yaml\"\n [ngModel]=\"yaml$ | async\"\n [options]=\"editorOptions\"\n [actionsConfig]=\"viewActions\"\n [modelUri]=\"modelUri\"\n >\n <ng-container auiCodeEditorToolbarLeft>\n <aui-checkbox\n *ngIf=\"conciseEnable\"\n class=\"aui-code-editor-toolbar__control-button\"\n [ngModel]=\"concise$$ | async\"\n (ngModelChange)=\"conciseChange($event)\"\n >\n {{ 'preview_concise_yaml' | translate }}\n </aui-checkbox>\n </ng-container>\n <ng-container auiCodeEditorToolbarRightSide>\n <!-- Schema \u6309\u94AE\uFF1A\u5F53\u542F\u7528\u4FA7\u8FB9\u680F\u65F6\u663E\u793A -->\n <button\n auiButton\n *ngIf=\"sidebarEnable\"\n class=\"aui-code-editor-toolbar__control-button\"\n [type]=\"(showSidebar$$ | async) ? 'primary' : 'text'\"\n [disabled]=\"!(finalSchema$ | async)\"\n size=\"small\"\n (click)=\"toggleSidebar()\"\n [title]=\"\n (finalSchema$ | async) ? '' : ('schema_not_available' | translate)\n \"\n >\n <aui-icon\n [icon]=\"\n (showSidebar$$ | async)\n ? 'prod:expand_sidebar'\n : 'prod:collapse_sidebar'\n \"\n ></aui-icon>\n </button>\n </ng-container>\n </aui-code-editor>\n </div>\n\n <div\n class=\"yaml-sidebar-section\"\n *ngIf=\"showSidebar$$ | async\"\n >\n <acl-resource-yaml-sidebar\n [resource]=\"getCurrentResource()\"\n [schema]=\"finalSchema$ | async\"\n (close)=\"toggleSidebar()\"\n [schemaEnable]=\"schemaEnable\"\n [exampleEnable]=\"false\"\n ></acl-resource-yaml-sidebar>\n </div>\n </div>\n</ng-template>\n", styles: [":host(:not(.dialog-content)){display:block;height:calc(100vh - (var(--acl-page-header-height) + 44px) - 147px)}:host(:not(.dialog-content)) ::ng-deep .aui-code-editor{min-height:100%}:host(:not(.dialog-content))>.aui-card{height:100%}:host(:not(.dialog-content))>.aui-card .aui-card__content,:host(:not(.dialog-content))>.aui-card aui-code-editor,:host(:not(.dialog-content))>.aui-card .aui-code-editor{height:100%;min-height:100%}:host{display:block}:host ::ng-deep aui-card,:host ::ng-deep .aui-card,:host ::ng-deep .aui-card__content{height:100%}:host ::ng-deep .aui-checkbox{margin-right:0}:host aui-code-editor{height:100%}.yaml-display-container{display:flex;height:100%}.yaml-display-container.with-sidebar .yaml-editor-section{flex:1;min-width:0}.yaml-display-container.with-sidebar .yaml-sidebar-section{width:400px;flex-shrink:0}.yaml-display-container:not(.with-sidebar) .yaml-editor-section{flex:1}.yaml-editor-section{display:flex;flex-direction:column;height:100%}.yaml-editor-section aui-code-editor{flex:1;height:100%}.yaml-sidebar-section{display:flex;flex-direction:column;height:100%}.yaml-sidebar-section acl-resource-yaml-sidebar{flex:1;height:100%}.yaml-debug-section{position:absolute;top:0;right:0;width:350px;height:100%;background:var(--aui-color-bg-container);border-left:1px solid var(--aui-color-border-default);z-index:1000;overflow-y:auto}.debug-panel{padding:16px;font-size:12px}.debug-panel h4{margin:0 0 12px;font-size:14px;color:var(--aui-color-text-primary)}.debug-panel .debug-item{margin-bottom:16px}.debug-panel .debug-item strong{color:var(--aui-color-text-primary);display:block;margin-bottom:4px}.debug-panel .debug-item ul{margin:0;padding-left:16px}.debug-panel .debug-item ul li{margin-bottom:2px;color:var(--aui-color-text-secondary)}.debug-panel .debug-actions{border-top:1px solid var(--aui-color-border-default);padding-top:12px;text-align:right}@media (max-width: 1200px){.yaml-display-container.with-sidebar .yaml-sidebar-section{width:350px}}@media (max-width: 992px){.yaml-display-container.with-sidebar{flex-direction:column}.yaml-display-container.with-sidebar .yaml-editor-section{flex:1;min-height:50%}.yaml-display-container.with-sidebar .yaml-sidebar-section{width:100%;height:50%;border-top:1px solid var(--aui-color-border, #e0e0e0);border-left:none}}\n"] }]
316
+ }], () => [{ type: i1.YamlUtilService }, { type: i2.KubernetesSchemaService }, { type: i3.MonacoLanguageService }], { codeEditorRef: [{
317
+ type: ViewChild,
318
+ args: ['codeEditorRef']
319
+ }], hasWrapper: [{
320
+ type: Input
321
+ }], showDebugInfo: [{
123
322
  type: Input
124
323
  }], conciseEnable: [{
125
324
  type: Input
126
325
  }], manageFieldActionEnable: [{
127
326
  type: Input
327
+ }], sidebarEnable: [{
328
+ type: Input
329
+ }], schemaEnable: [{
330
+ type: Input
331
+ }], exampleEnable: [{
332
+ type: Input
333
+ }], autoFoldManagedFields: [{
334
+ type: Input
335
+ }], schema: [{
336
+ type: Input
128
337
  }], resource: [{
129
338
  type: Input
130
- }], resource$: [] }); })();
131
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ResourceYamlDisplayComponent, { className: "ResourceYamlDisplayComponent", filePath: "code/resource-yaml-display/component.ts", lineNumber: 41 }); })();
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2NvZGUvcmVzb3VyY2UteWFtbC1kaXNwbGF5L2NvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jb2RlL3Jlc291cmNlLXlhbWwtZGlzcGxheS90ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixVQUFVLEVBQ1YsR0FBRyxFQUNILG9CQUFvQixHQUNyQixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFFTCxlQUFlLEVBRWYsZUFBZSxHQUNoQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7OztJQ25CcEUsd0JBQTRDOzs7SUFEOUMsZ0NBQTJDO0lBQ3pDLDBHQUE0QztJQUM5QyxpQkFBVzs7OztJQURNLGNBQXlCO0lBQXpCLDZDQUF5Qjs7OztJQVVwQyx1Q0FLQzs7SUFEQyw0T0FBaUIsNEJBQXFCLEtBQUM7SUFFdkMsWUFDRjs7SUFBQSxpQkFBZTs7O0lBSmIsZ0VBQTZCO0lBRzdCLGVBQ0Y7SUFERSw2RUFDRjs7OztJQUNBLHVDQU1DOzs7SUFEQyw0T0FBaUIsNEJBQXFCLEtBQUM7SUFFdkMsWUFDRjs7SUFBQSxpQkFBZTs7O0lBSmIsQUFGQSwrREFBNEIsa0RBRUE7SUFHNUIsZUFDRjtJQURFLGlGQUNGOzs7SUF2QkosMENBS0M7O0lBQ0MsZ0NBQXVDO0lBU3JDLEFBUkEsNkdBS0MsZ0dBU0E7O0lBSUwsaUJBQWtCOzs7SUFyQmhCLEFBREEsQUFEQSw0REFBeUIsaUNBQ0EscUNBQ0k7SUFJeEIsZUFBbUI7SUFBbkIsMkNBQW1CO0lBUW5CLGNBQTZCO0lBQTdCLHFEQUE2Qjs7QURvQnRDLE1BQU0sT0FBTyw0QkFBNEI7SUFvQnZDLFlBQTZCLFFBQXlCO1FBQXpCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBbkJ0RCxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkMsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBR3JDLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFHbEIsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFHckIsNEJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBVS9CLFVBQUssR0FBRyxhQUFhLENBQUM7WUFDcEIsSUFBSSxDQUFDLFNBQVM7WUFDZCxJQUFJLENBQUMsU0FBUztZQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDM0MsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLDRCQUE0QixDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQ3RFLENBQ0YsQ0FBQztRQUVGLGtCQUFhLEdBQUcsZUFBZSxDQUFDO1FBQ2hDLGdCQUFXLEdBQUcsV0FBVyxDQUFDO0lBYitCLENBQUM7SUFlMUQsYUFBYSxDQUFDLEtBQWM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDOzZGQXhDVSw0QkFBNEI7b0VBQTVCLDRCQUE0QjtZQ3JDekMsQUFIQSx1RkFBMkMsaUhBR3JCOzs7WUFITyxBQUFsQixxQ0FBa0Isd0JBQVk7OENEOEJyQyxJQUFJO1lBQ0osV0FBVyx3REFFWCxnQkFBZ0IsMEJBQ2hCLGVBQWUsb0JBQ2YsU0FBUztZQUNULGdCQUFnQjs7QUFzQlQ7SUFEUixlQUFlLEVBQUU7OEJBQ0csVUFBVTsrREFBZTtpRkFsQm5DLDRCQUE0QjtjQWxCeEMsU0FBUzsyQkFDRSwyQkFBMkIsdUJBR2hCLEtBQUssY0FDZCxJQUFJLFdBQ1A7b0JBQ1AsV0FBVztvQkFDWCxJQUFJO29CQUNKLFdBQVc7b0JBQ1gsZUFBZTtvQkFDZixnQkFBZ0I7b0JBQ2hCLGVBQWU7b0JBQ2YsU0FBUztvQkFDVCxnQkFBZ0I7aUJBQ2pCLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNO2dEQVEvQyxVQUFVO2tCQURULEtBQUs7WUFJTixhQUFhO2tCQURaLEtBQUs7WUFJTix1QkFBdUI7a0JBRHRCLEtBQUs7WUFJTixRQUFRO2tCQURQLEtBQUs7WUFJRyxTQUFTO2tGQWxCUCw0QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2RlRWRpdG9yTW9kdWxlIH0gZnJvbSAnQGFsYXVkYS9jb2RlLWVkaXRvcic7XG5pbXBvcnQgeyBDQVJEX01PRFVMRSwgQ0hFQ0tCT1hfTU9EVUxFIH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBPYnNlcnZhYmxlLFxuICBtYXAsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgS3ViZXJuZXRlc1Jlc291cmNlLFxuICBZYW1sVXRpbFNlcnZpY2UsXG4gIEFycmF5YWJsZSxcbiAgT2JzZXJ2YWJsZUlucHV0LFxufSBmcm9tICcuLi8uLi9jb3JlL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnLi4vLi4vdHJhbnNsYXRlL3RyYW5zbGF0ZS5tb2R1bGUnO1xuaW1wb3J0IHsgdmlld0FjdGlvbnMsIHlhbWxSZWFkT3B0aW9ucyB9IGZyb20gJy4uL2NvZGUtZWRpdG9yLWNvbmZpZ3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtcmVzb3VyY2UteWFtbC1kaXNwbGF5JyxcbiAgdGVtcGxhdGVVcmw6ICd0ZW1wbGF0ZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3N0eWxlcy5zY3NzJ10sXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ0FSRF9NT0RVTEUsXG4gICAgTmdJZixcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDSEVDS0JPWF9NT0RVTEUsXG4gICAgQ29kZUVkaXRvck1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBSZXNvdXJjZVlhbWxEaXNwbGF5Q29tcG9uZW50PFQgZXh0ZW5kcyBLdWJlcm5ldGVzUmVzb3VyY2U+IHtcbiAgY29uY2lzZSQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgcmVkdWNlJCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuXG4gIEBJbnB1dCgpXG4gIGhhc1dyYXBwZXIgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIGNvbmNpc2VFbmFibGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIG1hbmFnZUZpZWxkQWN0aW9uRW5hYmxlID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICByZXNvdXJjZTogQXJyYXlhYmxlPFQ+O1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICByZWFkb25seSByZXNvdXJjZSQhOiBPYnNlcnZhYmxlPEFycmF5YWJsZTxUPj47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB5YW1sVXRpbDogWWFtbFV0aWxTZXJ2aWNlKSB7fVxuXG4gIHlhbWwkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5yZXNvdXJjZSQsXG4gICAgdGhpcy5jb25jaXNlJCQsXG4gICAgdGhpcy5yZWR1Y2UkJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW3Jlc291cmNlLCBjb25jaXNlLCByZWR1Y2VdKSA9PlxuICAgICAgdGhpcy55YW1sVXRpbC5nZW5lcmF0ZUZpbHRlcmVkWWFtbFJlc291cmNlKHJlc291cmNlLCBjb25jaXNlLCByZWR1Y2UpLFxuICAgICksXG4gICk7XG5cbiAgZWRpdG9yT3B0aW9ucyA9IHlhbWxSZWFkT3B0aW9ucztcbiAgdmlld0FjdGlvbnMgPSB2aWV3QWN0aW9ucztcblxuICBjb25jaXNlQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25jaXNlJCQubmV4dCh2YWx1ZSk7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnJlZHVjZSQkLm5leHQodHJ1ZSk7XG4gICAgfVxuICB9XG59XG4iLCI8YXVpLWNhcmQgKm5nSWY9XCJoYXNXcmFwcGVyOyBlbHNlIGNvbnRlbnRcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIiAvPlxuPC9hdWktY2FyZD5cbjxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgPGF1aS1jb2RlLWVkaXRvclxuICAgIG5hbWU9XCJ5YW1sXCJcbiAgICBbbmdNb2RlbF09XCJ5YW1sJCB8IGFzeW5jXCJcbiAgICBbb3B0aW9uc109XCJlZGl0b3JPcHRpb25zXCJcbiAgICBbYWN0aW9uc0NvbmZpZ109XCJ2aWV3QWN0aW9uc1wiXG4gID5cbiAgICA8bmctY29udGFpbmVyIGF1aUNvZGVFZGl0b3JUb29sYmFyTGVmdD5cbiAgICAgIDxhdWktY2hlY2tib3hcbiAgICAgICAgKm5nSWY9XCJjb25jaXNlRW5hYmxlXCJcbiAgICAgICAgY2xhc3M9XCJhdWktY29kZS1lZGl0b3ItdG9vbGJhcl9fY29udHJvbC1idXR0b25cIlxuICAgICAgICBbbmdNb2RlbF09XCJjb25jaXNlJCQgfCBhc3luY1wiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNvbmNpc2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdwcmV2aWV3X2NvbmNpc2VfeWFtbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYXVpLWNoZWNrYm94PlxuICAgICAgPGF1aS1jaGVja2JveFxuICAgICAgICAqbmdJZj1cIm1hbmFnZUZpZWxkQWN0aW9uRW5hYmxlXCJcbiAgICAgICAgW2hpZGRlbl09XCJjb25jaXNlJCQgfCBhc3luY1wiXG4gICAgICAgIGNsYXNzPVwiYXVpLWNvZGUtZWRpdG9yLXRvb2xiYXJfX2NvbnRyb2wtYnV0dG9uXCJcbiAgICAgICAgW25nTW9kZWxdPVwicmVkdWNlJCQgfCBhc3luY1wiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJlZHVjZSQkLm5leHQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdoaWRlX21hbmFnZV9maWVsZHNfZmllbGQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2F1aS1jaGVja2JveD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9hdWktY29kZS1lZGl0b3I+XG48L25nLXRlbXBsYXRlPlxuIl19
339
+ }], resource$: [], schema$: [], minimap: [{
340
+ type: Input
341
+ }] }); })();
342
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ResourceYamlDisplayComponent, { className: "ResourceYamlDisplayComponent" }); })();
343
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2NvZGUvcmVzb3VyY2UteWFtbC1kaXNwbGF5L2NvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jb2RlL3Jlc291cmNlLXlhbWwtZGlzcGxheS90ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLHFCQUFxQixHQUN0QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsZUFBZSxFQUNmLFlBQVksRUFDWixVQUFVLEdBQ1gsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxLQUFLLEVBR0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLFVBQVUsRUFDVixHQUFHLEVBQ0gsb0JBQW9CLEVBQ3BCLEVBQUUsRUFDRixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxPQUFPLEdBQ1IsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN4RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFJeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsV0FBVyxFQUNYLHNCQUFzQixFQUN0QixlQUFlLEdBQ2hCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLGlCQUFpQixHQUVsQixNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7O0lDbkR2RSx3QkFBNEM7OztJQUQ5QyxnQ0FBMkM7SUFDekMsMEdBQTRDO0lBQzlDLGlCQUFXOzs7O0lBRE0sY0FBeUI7SUFBekIsNkNBQXlCOzs7O0lBaUJoQyx3Q0FLQzs7SUFEQyw0T0FBaUIsNEJBQXFCLEtBQUM7SUFFdkMsWUFDRjs7SUFBQSxpQkFBZTs7O0lBSmIsZ0VBQTZCO0lBRzdCLGVBQ0Y7SUFERSw2RUFDRjs7OztJQUlBLGtDQVdDOzs7OztJQUpDLDBNQUFTLHNCQUFlLEtBQUM7SUFLekIsK0JBTVk7O0lBQ2QsaUJBQVM7OztJQVhQLEFBSEEsQUFEQSxzRkFBcUQsd0RBQ2pCLHlHQUtuQztJQUdDLGVBSUM7SUFKRCxvSEFJQzs7OztJQVdULEFBSkYsK0JBR0Msb0NBT0U7O0lBSEMsMk5BQVMsc0JBQWUsS0FBQztJQUk3QixBQURHLGlCQUE0QixFQUN6Qjs7O0lBTkYsY0FBaUM7SUFJakMsQUFEQSxBQUZBLEFBREEsc0RBQWlDLHFEQUNGLHFDQUVGLHdCQUNOOzs7SUExRDdCLDhCQUdDOztJQUVHLEFBREYsOEJBQWlDLDRCQVE5Qjs7SUFDQyxnQ0FBdUM7SUFDckMsNkdBS0M7O0lBSUgsZ0NBQTRDO0lBRTFDLG1HQVdDOztJQVdQLEFBREUsaUJBQWtCLEVBQ2Q7SUFFTiw4RkFHQzs7SUFTSCxpQkFBTTs7O0lBM0RKLDBFQUE0QztJQU14QyxlQUF5QjtJQUd6QixBQURBLEFBREEsQUFEQSw2REFBeUIsaUNBQ0EscUNBQ0ksNkJBQ1I7SUFJaEIsZUFBbUI7SUFBbkIsMkNBQW1CO0lBWW5CLGVBQW1CO0lBQW5CLDJDQUFtQjtJQXdCekIsY0FBMkI7SUFBM0IsbUVBQTJCOztBRG9CbEMsTUFBTSxPQUFPLDRCQUE0QjtJQWlHdkMsWUFDa0IsUUFBeUIsRUFDekIsYUFBc0MsRUFDckMscUJBQTRDO1FBRjdDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLGtCQUFhLEdBQWIsYUFBYSxDQUF5QjtRQUNyQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBakd2RCxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUN2QyxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkMsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXRDLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0MscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFJdEMsaUJBQVksR0FBd0MsSUFBSSxDQUFDO1FBQ3pELHNCQUFpQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFNOUMsZUFBVSxHQUFHLElBQUksQ0FBQztRQUdsQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUd0QixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUdyQiw0QkFBdUIsR0FBRyxJQUFJLENBQUM7UUFHL0Isa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFHckIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFHcEIsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFHckIsMEJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBZTdCLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFFZiwyQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztRQUNoRCxvQkFBZSxHQUFHLGVBQWUsQ0FBQztRQUVsQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCOztXQUVHO1FBQ0gsZ0JBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDL0IsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixDQUFDO1lBRUQsTUFBTSxhQUFhLEdBQUcsQ0FDcEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQzVDLENBQUM7WUFDUCxJQUFJLENBQUMsYUFBYSxFQUFFLFVBQVUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDdkQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FDekMsYUFBYSxDQUFDLFVBQVUsRUFDeEIsYUFBYSxDQUFDLElBQUksQ0FDbkIsQ0FBQztRQUNKLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRUY7O1dBRUc7UUFDSCxpQkFBWSxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNqRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxFQUMvRCxvQkFBb0IsRUFBRSxFQUN0QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQXNDRixVQUFLLEdBQUcsYUFBYSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxTQUFTO1lBQ2QsSUFBSSxDQUFDLFNBQVM7WUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQzNDLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUN0RSxDQUNGLENBQUM7UUFNRixnQkFBVyxHQUFHLFdBQVcsQ0FBQztRQTdDeEIsSUFBSSxDQUFDLGlCQUFpQjtZQUNwQixJQUFJLENBQUMscUJBQXFCLENBQUMsd0JBQXdCLENBQ2pELENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxFQUN4QixZQUFZLENBQ2IsQ0FBQztRQUVKLGlCQUFpQjtRQUNqQixxQkFBcUIsQ0FBQztZQUNwQixRQUFRLEVBQUUsSUFBSTtZQUNkLE1BQU0sRUFBRSxJQUFJO1lBQ1osVUFBVSxFQUFFLElBQUk7WUFDaEIsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLENBQUM7UUFFSCxjQUFjO1FBQ2QsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDL0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtZQUNoQyxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7b0JBQzNDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUNiLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQ2IsSUFBSSxhQUFhLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7b0JBQ25ELElBQUksQ0FBQyxhQUFhLENBQUMsYUFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDakQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBWUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO0lBQ2pFLENBQUM7SUFJRCxhQUFhLENBQUMsS0FBYztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2xELENBQUM7UUFDRCxPQUFRLFFBQWMsSUFBSSxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7SUFDN0IsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN4QyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhLENBQUMsUUFBVyxFQUFFLE1BQTZCO1FBQ3RELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU87UUFDVCxDQUFDO1FBRUQsOEJBQThCO1FBQzlCLE1BQU0sVUFBVSxHQUFHLFFBQVEsRUFBRSxVQUFVLElBQUksU0FBUyxDQUFDO1FBQ3JELE1BQU0sSUFBSSxHQUFHLFFBQVEsRUFBRSxJQUFJLElBQUksU0FBUyxDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLEdBQUcsVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDO1FBRTFDLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxTQUFTLE9BQU8sQ0FBQztRQUVwQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUU3Qiw2QkFBNkI7UUFDN0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDMUMsT0FBTztRQUNULENBQUM7UUFFRCxnQ0FBZ0M7UUFDaEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1FBRXpELGlDQUFpQztRQUNqQyxNQUFNLFVBQVUsR0FBRztZQUNqQixHQUFHLE1BQU07WUFDVCxXQUFXO1NBQ1osQ0FBQztRQUVGLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDO1lBQy9CLEdBQUcsRUFBRSxTQUFTLFNBQVMsY0FBYztZQUNyQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzFCLE1BQU0sRUFBRSxVQUFVO1NBQ25CLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxpQkFBaUI7UUFDZixJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDN0Msd0JBQXdCO1lBQ3hCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDM0MsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQztZQUM3QyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxpQkFBaUI7UUFDZixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN4QyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7NkZBclFVLDRCQUE0QjtvRUFBNUIsNEJBQTRCOzs7Ozs7WUN4RXpDLEFBSEEsdUZBQTJDLG1IQUdyQjs7O1lBSE8sQUFBbEIscUNBQWtCLHdCQUFZOzhDRDhEckMsSUFBSTtZQUNKLFdBQVcsd0RBRVgsWUFBWTtZQUNaLGdCQUFnQiwwQkFDaEIsZUFBZSxvQkFDZixTQUFTO1lBQ1QsZ0JBQWdCO1lBQ2hCLDRCQUE0QjtZQUM1QixVQUFVOztBQXVESDtJQURSLGVBQWUsRUFBRTs4QkFDRyxVQUFVOytEQUFlO0FBR3JDO0lBRFIsZUFBZSxFQUFFOzhCQUNDLFVBQVU7NkRBQXdCO2lGQXREMUMsNEJBQTRCO2NBckJ4QyxTQUFTOzJCQUNFLDJCQUEyQix1QkFHaEIsS0FBSyxjQUNkLElBQUksV0FDUDtvQkFDUCxXQUFXO29CQUNYLElBQUk7b0JBQ0osV0FBVztvQkFDWCxlQUFlO29CQUNmLFlBQVk7b0JBQ1osZ0JBQWdCO29CQUNoQixlQUFlO29CQUNmLFNBQVM7b0JBQ1QsZ0JBQWdCO29CQUNoQiw0QkFBNEI7b0JBQzVCLFVBQVU7aUJBQ1gsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU07MEhBb0IvQyxhQUFhO2tCQURaLFNBQVM7bUJBQUMsZUFBZTtZQUkxQixVQUFVO2tCQURULEtBQUs7WUFJTixhQUFhO2tCQURaLEtBQUs7WUFJTixhQUFhO2tCQURaLEtBQUs7WUFJTix1QkFBdUI7a0JBRHRCLEtBQUs7WUFJTixhQUFhO2tCQURaLEtBQUs7WUFJTixZQUFZO2tCQURYLEtBQUs7WUFJTixhQUFhO2tCQURaLEtBQUs7WUFJTixxQkFBcUI7a0JBRHBCLEtBQUs7WUFJTixNQUFNO2tCQURMLEtBQUs7WUFJTixRQUFRO2tCQURQLEtBQUs7WUFJRyxTQUFTLE1BR1QsT0FBTyxNQUdoQixPQUFPO2tCQUROLEtBQUs7O2tGQXhESyw0QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb2RlRWRpdG9yTW9kdWxlLFxuICBMYW5ndWFnZVNjaGVtYVNlcnZpY2UsXG4gIE1vbmFjb0xhbmd1YWdlU2VydmljZSxcbn0gZnJvbSAnQGFsYXVkYS9jb2RlLWVkaXRvcic7XG5pbXBvcnQge1xuICBDQVJEX01PRFVMRSxcbiAgQ0hFQ0tCT1hfTU9EVUxFLFxuICBCdXR0b25Nb2R1bGUsXG4gIEljb25Nb2R1bGUsXG59IGZyb20gJ0BhbGF1ZGEvdWknO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIEFmdGVyVmlld0luaXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGVkaXRvciB9IGZyb20gJ21vbmFjby1lZGl0b3IvZXNtL3ZzL2VkaXRvci9lZGl0b3IuYXBpJztcbmltcG9ydCB7IHlhbWxEZWZhdWx0cywgc2V0RGlhZ25vc3RpY3NPcHRpb25zIH0gZnJvbSAnbW9uYWNvLXlhbWwnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBPYnNlcnZhYmxlLFxuICBtYXAsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBvZixcbiAgc3dpdGNoTWFwLFxuICBzaGFyZVJlcGxheSxcbiAgdGFrZVVudGlsLFxuICBTdWJqZWN0LFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgS3ViZXJuZXRlc1NjaGVtYVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL2t1YmVybmV0ZXMtc2NoZW1hLnNlcnZpY2UnO1xuaW1wb3J0IHsgWWFtbFV0aWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy95YW1sLXV0aWwuc2VydmljZSc7XG5pbXBvcnQgeyBBcnJheWFibGUgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL2hlbHBlcnMnO1xuaW1wb3J0IHsgS3ViZXJuZXRlc1Jlc291cmNlIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcy9rOHMvY29yZSc7XG5pbXBvcnQgeyBPcGVuQVBJVjNTY2hlbWFPYmplY3QgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3NjaGVtYSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlSW5wdXQgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnLi4vLi4vdHJhbnNsYXRlL3RyYW5zbGF0ZS5tb2R1bGUnO1xuaW1wb3J0IHtcbiAgdmlld0FjdGlvbnMsXG4gIHlhbWxSZWFkTWluaW1hcE9wdGlvbnMsXG4gIHlhbWxSZWFkT3B0aW9ucyxcbn0gZnJvbSAnLi4vY29kZS1lZGl0b3ItY29uZmlncyc7XG5pbXBvcnQge1xuICBmb2xkTWFuYWdlZEZpZWxkcyxcbiAgRWRpdG9ySW5zdGFuY2VQcm92aWRlcixcbn0gZnJvbSAnLi4vbWFuYWdlZC1maWVsZHMtZm9sZGVyLnV0aWwnO1xuaW1wb3J0IHsgUmVzb3VyY2VZYW1sU2lkZWJhckNvbXBvbmVudCB9IGZyb20gJy4uL3lhbWwtc2lkZWJhci9jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtcmVzb3VyY2UteWFtbC1kaXNwbGF5JyxcbiAgdGVtcGxhdGVVcmw6ICd0ZW1wbGF0ZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3N0eWxlcy5zY3NzJ10sXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ0FSRF9NT0RVTEUsXG4gICAgTmdJZixcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDSEVDS0JPWF9NT0RVTEUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIENvZGVFZGl0b3JNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIFJlc291cmNlWWFtbFNpZGViYXJDb21wb25lbnQsXG4gICAgSWNvbk1vZHVsZSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFJlc291cmNlWWFtbERpc3BsYXlDb21wb25lbnQ8VCBleHRlbmRzIEt1YmVybmV0ZXNSZXNvdXJjZT5cbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIEVkaXRvckluc3RhbmNlUHJvdmlkZXJcbntcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGNvbmNpc2UkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIHJlZHVjZSQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgc2hvd1NpZGViYXIkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIHNob3dEZWJ1Z1BhbmVsJCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBtb2RlbFVyaTogc3RyaW5nO1xuICBwcml2YXRlIHlhbWxTY2hlbWFTZXJ2aWNlOiBMYW5ndWFnZVNjaGVtYVNlcnZpY2U7XG4gIHByaXZhdGUgbW9uYWNvRWRpdG9yOiBlZGl0b3IuSVN0YW5kYWxvbmVDb2RlRWRpdG9yIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVnaXN0ZXJlZFNjaGVtYXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBAVmlld0NoaWxkKCdjb2RlRWRpdG9yUmVmJylcbiAgY29kZUVkaXRvclJlZiE6IHsgZWRpdG9yOiBlZGl0b3IuSVN0YW5kYWxvbmVDb2RlRWRpdG9yIH07XG5cbiAgQElucHV0KClcbiAgaGFzV3JhcHBlciA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgc2hvd0RlYnVnSW5mbyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGNvbmNpc2VFbmFibGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIG1hbmFnZUZpZWxkQWN0aW9uRW5hYmxlID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBzaWRlYmFyRW5hYmxlID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBzY2hlbWFFbmFibGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIGV4YW1wbGVFbmFibGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIGF1dG9Gb2xkTWFuYWdlZEZpZWxkcyA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgc2NoZW1hOiBPcGVuQVBJVjNTY2hlbWFPYmplY3Q7XG5cbiAgQElucHV0KClcbiAgcmVzb3VyY2U6IEFycmF5YWJsZTxUPjtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgcmVhZG9ubHkgcmVzb3VyY2UkITogT2JzZXJ2YWJsZTxBcnJheWFibGU8VD4+O1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICByZWFkb25seSBzY2hlbWEkITogT2JzZXJ2YWJsZTxPcGVuQVBJVjNTY2hlbWFPYmplY3Q+O1xuXG4gIEBJbnB1dCgpXG4gIG1pbmltYXAgPSB0cnVlO1xuXG4gIHlhbWxSZWFkTWluaW1hcE9wdGlvbnMgPSB5YW1sUmVhZE1pbmltYXBPcHRpb25zO1xuICB5YW1sUmVhZE9wdGlvbnMgPSB5YW1sUmVhZE9wdGlvbnM7XG5cbiAgaGFzRm9sZGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIOiHquWKqOiOt+WPlueahCBzY2hlbWHvvIzlvZPmsqHmnInmiYvliqjmj5Dkvpsgc2NoZW1hIOaXtuS9v+eUqFxuICAgKi9cbiAgYXV0b1NjaGVtYSQgPSB0aGlzLnJlc291cmNlJC5waXBlKFxuICAgIHN3aXRjaE1hcChyZXNvdXJjZSA9PiB7XG4gICAgICBpZiAoIXJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlyc3RSZXNvdXJjZSA9IChcbiAgICAgICAgQXJyYXkuaXNBcnJheShyZXNvdXJjZSkgPyByZXNvdXJjZVswXSA6IHJlc291cmNlXG4gICAgICApIGFzIFQ7XG4gICAgICBpZiAoIWZpcnN0UmVzb3VyY2U/LmFwaVZlcnNpb24gfHwgIWZpcnN0UmVzb3VyY2U/LmtpbmQpIHtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFJlc291cmNlU2NoZW1hKFxuICAgICAgICBmaXJzdFJlc291cmNlLmFwaVZlcnNpb24sXG4gICAgICAgIGZpcnN0UmVzb3VyY2Uua2luZCxcbiAgICAgICk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSksXG4gICk7XG5cbiAgLyoqXG4gICAqIOacgOe7iOS9v+eUqOeahCBzY2hlbWHvvIzkvJjlhYjkvb/nlKjmiYvliqjmj5DkvpvnmoTvvIzlkKbliJnkvb/nlKjoh6rliqjojrflj5bnmoRcbiAgICovXG4gIGZpbmFsU2NoZW1hJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuc2NoZW1hJCwgdGhpcy5hdXRvU2NoZW1hJF0pLnBpcGUoXG4gICAgbWFwKChbbWFudWFsU2NoZW1hLCBhdXRvU2NoZW1hXSkgPT4gbWFudWFsU2NoZW1hIHx8IGF1dG9TY2hlbWEpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSksXG4gICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHlhbWxVdGlsOiBZYW1sVXRpbFNlcnZpY2UsXG4gICAgcHVibGljIHJlYWRvbmx5IHNjaGVtYVNlcnZpY2U6IEt1YmVybmV0ZXNTY2hlbWFTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9uYWNvTGFuZ3VhZ2VTZXJ2aWNlOiBNb25hY29MYW5ndWFnZVNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMueWFtbFNjaGVtYVNlcnZpY2UgPVxuICAgICAgdGhpcy5tb25hY29MYW5ndWFnZVNlcnZpY2UuZ2V0TGFuZ3VhZ2VTY2hlbWFTZXJ2aWNlKFxuICAgICAgICBbJ3lhbWwnLCAneWFtbERlZmF1bHRzJ10sXG4gICAgICAgIHlhbWxEZWZhdWx0cyxcbiAgICAgICk7XG5cbiAgICAvLyDlkK/nlKggWUFNTCDor63ms5Xmj5DnpLrlip/og71cbiAgICBzZXREaWFnbm9zdGljc09wdGlvbnMoe1xuICAgICAgdmFsaWRhdGU6IHRydWUsXG4gICAgICBmb3JtYXQ6IHRydWUsXG4gICAgICBjb21wbGV0aW9uOiB0cnVlLFxuICAgICAgaG92ZXI6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyDoh6rliqjorr7nva4gc2NoZW1hXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5yZXNvdXJjZSQsIHRoaXMuZmluYWxTY2hlbWEkXSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtyZXNvdXJjZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICBpZiAocmVzb3VyY2UgJiYgc2NoZW1hKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RSZXNvdXJjZSA9IEFycmF5LmlzQXJyYXkocmVzb3VyY2UpXG4gICAgICAgICAgICA/IHJlc291cmNlWzBdXG4gICAgICAgICAgICA6IHJlc291cmNlO1xuICAgICAgICAgIGlmIChmaXJzdFJlc291cmNlICYmICFBcnJheS5pc0FycmF5KGZpcnN0UmVzb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFlhbWxTY2hlbWEoZmlyc3RSZXNvdXJjZSBhcyBULCBzY2hlbWEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmZpbmFsU2NoZW1hJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICB5YW1sJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMucmVzb3VyY2UkLFxuICAgIHRoaXMuY29uY2lzZSQkLFxuICAgIHRoaXMucmVkdWNlJCQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtyZXNvdXJjZSwgY29uY2lzZSwgcmVkdWNlXSkgPT5cbiAgICAgIHRoaXMueWFtbFV0aWwuZ2VuZXJhdGVGaWx0ZXJlZFlhbWxSZXNvdXJjZShyZXNvdXJjZSwgY29uY2lzZSwgcmVkdWNlKSxcbiAgICApLFxuICApO1xuXG4gIGdldCBlZGl0b3JPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLm1pbmltYXAgPyB5YW1sUmVhZE1pbmltYXBPcHRpb25zIDogeWFtbFJlYWRPcHRpb25zO1xuICB9XG5cbiAgdmlld0FjdGlvbnMgPSB2aWV3QWN0aW9ucztcblxuICBjb25jaXNlQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5jb25jaXNlJCQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICB0b2dnbGVTaWRlYmFyKCkge1xuICAgIHRoaXMuc2hvd1NpZGViYXIkJC5uZXh0KCF0aGlzLnNob3dTaWRlYmFyJCQudmFsdWUpO1xuICB9XG5cbiAgdG9nZ2xlRGVidWdJbmZvKCkge1xuICAgIHRoaXMuc2hvd0RlYnVnUGFuZWwkJC5uZXh0KCF0aGlzLnNob3dEZWJ1Z1BhbmVsJCQudmFsdWUpO1xuICB9XG5cbiAgZ2V0Q3VycmVudFJlc291cmNlKCk6IFQgfCBudWxsIHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gcmVzb3VyY2UubGVuZ3RoID4gMCA/IHJlc291cmNlWzBdIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChyZXNvdXJjZSBhcyBUKSB8fCBudWxsO1xuICB9XG5cbiAgZ2V0Q3VycmVudFNjaGVtYSgpOiBPcGVuQVBJVjNTY2hlbWFPYmplY3QgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zY2hlbWEgfHwgbnVsbDtcbiAgfVxuXG4gIHNlbGZGb2xkTWFuYWdlZEZpZWxkcygpIHtcbiAgICBpZiAodGhpcy5oYXNGb2xkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYXNGb2xkZWQgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5nZXRFZGl0b3JJbnN0YW5jZSgpO1xuICAgICAgaWYgKGVkaXRvcikge1xuICAgICAgICBmb2xkTWFuYWdlZEZpZWxkcyhlZGl0b3IpO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIOiuvue9riBZQU1MIHNjaGVtYSDku6Xmj5DkvpsgaG92ZXIg5o+Q56S65ZKM6Ieq5Yqo5a6M5oiQXG4gICAqL1xuICBzZXRZYW1sU2NoZW1hKHJlc291cmNlOiBULCBzY2hlbWE6IE9wZW5BUElWM1NjaGVtYU9iamVjdCkge1xuICAgIGlmICghc2NoZW1hKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8g5L2/55SoIGFwaVZlcnNpb24gKyBraW5kIOe7hOWQiOS9nOS4uuagh+ivhlxuICAgIGNvbnN0IGFwaVZlcnNpb24gPSByZXNvdXJjZT8uYXBpVmVyc2lvbiB8fCAndW5rbm93bic7XG4gICAgY29uc3Qga2luZCA9IHJlc291cmNlPy5raW5kIHx8ICd1bmtub3duJztcbiAgICBjb25zdCBzY2hlbWFLZXkgPSBgJHthcGlWZXJzaW9ufS8ke2tpbmR9YDtcblxuICAgIHRoaXMubW9kZWxVcmkgPSBgJHtzY2hlbWFLZXl9LnlhbWxgO1xuXG4gICAgdGhpcy5zZWxmRm9sZE1hbmFnZWRGaWVsZHMoKTtcblxuICAgIC8vIOajgOafpeaYr+WQpuW3sue7j+azqOWGjOi/h+ebuOWQjOeahCBzY2hlbWHvvIzpgb/lhY3ph43lpI3ms6jlhoxcbiAgICBpZiAodGhpcy5yZWdpc3RlcmVkU2NoZW1hcy5oYXMoc2NoZW1hS2V5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOiOt+WPluWujOaVtOeahCBkZWZpbml0aW9ucyDku6XmlK/mjIEgJHJlZiDlvJXnlKhcbiAgICBjb25zdCBkZWZpbml0aW9ucyA9IHRoaXMuc2NoZW1hU2VydmljZS5kZWZpbml0aW9ucyB8fCB7fTtcblxuICAgIC8vIOWIm+W7uuWMheWQq+WujOaVtCBkZWZpbml0aW9ucyDnmoQgc2NoZW1hIOWvueixoVxuICAgIGNvbnN0IGZ1bGxTY2hlbWEgPSB7XG4gICAgICAuLi5zY2hlbWEsXG4gICAgICBkZWZpbml0aW9ucyxcbiAgICB9O1xuXG4gICAgLy8g56Gu5L+dc2NoZW1h6KKr5q2j56Gu5rOo5YaM77yM5bm25ZCv55So6Ieq5Yqo5a6M5oiQ5Yqf6IO9XG4gICAgdGhpcy55YW1sU2NoZW1hU2VydmljZS5hZGRTY2hlbWEoe1xuICAgICAgdXJpOiBgazhzOi8vJHtzY2hlbWFLZXl9LnNjaGVtYS5qc29uYCxcbiAgICAgIGZpbGVNYXRjaDogW3RoaXMubW9kZWxVcmldLFxuICAgICAgc2NoZW1hOiBmdWxsU2NoZW1hLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlcmVkU2NoZW1hcy5hZGQoc2NoZW1hS2V5KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5hdXRvRm9sZE1hbmFnZWRGaWVsZHMgJiYgdGhpcy5zY2hlbWFTZXJ2aWNlLmRlZmluaXRpb25zKSB7XG4gICAgICB0aGlzLnNlbGZGb2xkTWFuYWdlZEZpZWxkcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5YgTW9uYWNvIEVkaXRvciDlrp7kvotcbiAgICovXG4gIGdldEVkaXRvckluc3RhbmNlKCk6IGVkaXRvci5JU3RhbmRhbG9uZUNvZGVFZGl0b3IgfCBudWxsIHtcbiAgICBpZiAodGhpcy5jb2RlRWRpdG9yUmVmICYmICF0aGlzLm1vbmFjb0VkaXRvcikge1xuICAgICAgLy8g5bCd6K+V5LuOIFZpZXdDaGlsZCDojrflj5bnvJbovpHlmajlrp7kvotcbiAgICAgIGNvbnN0IGVkaXRvckNvbXBvbmVudCA9IHRoaXMuY29kZUVkaXRvclJlZjtcbiAgICAgIGlmIChlZGl0b3JDb21wb25lbnQuZWRpdG9yKSB7XG4gICAgICAgIHRoaXMubW9uYWNvRWRpdG9yID0gZWRpdG9yQ29tcG9uZW50LmVkaXRvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubW9uYWNvRWRpdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIOiHquWKqOaKmOWPoCBtYW5hZ2VkRmllbGRzIOWtl+autVxuICAgKi9cbiAgZm9sZE1hbmFnZWRGaWVsZHMoKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5nZXRFZGl0b3JJbnN0YW5jZSgpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIGZvbGRNYW5hZ2VkRmllbGRzKGVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMubW9uYWNvRWRpdG9yID0gbnVsbDtcbiAgfVxufVxuIiwiPGF1aS1jYXJkICpuZ0lmPVwiaGFzV3JhcHBlcjsgZWxzZSBjb250ZW50XCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50XCIgLz5cbjwvYXVpLWNhcmQ+XG48bmctdGVtcGxhdGUgI2NvbnRlbnQ+XG4gIDxkaXZcbiAgICBjbGFzcz1cInlhbWwtZGlzcGxheS1jb250YWluZXJcIlxuICAgIFtjbGFzcy53aXRoLXNpZGViYXJdPVwic2hvd1NpZGViYXIkJCB8IGFzeW5jXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJ5YW1sLWVkaXRvci1zZWN0aW9uXCI+XG4gICAgICA8YXVpLWNvZGUtZWRpdG9yXG4gICAgICAgICNjb2RlRWRpdG9yUmVmXG4gICAgICAgIG5hbWU9XCJ5YW1sXCJcbiAgICAgICAgW25nTW9kZWxdPVwieWFtbCQgfCBhc3luY1wiXG4gICAgICAgIFtvcHRpb25zXT1cImVkaXRvck9wdGlvbnNcIlxuICAgICAgICBbYWN0aW9uc0NvbmZpZ109XCJ2aWV3QWN0aW9uc1wiXG4gICAgICAgIFttb2RlbFVyaV09XCJtb2RlbFVyaVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgYXVpQ29kZUVkaXRvclRvb2xiYXJMZWZ0PlxuICAgICAgICAgIDxhdWktY2hlY2tib3hcbiAgICAgICAgICAgICpuZ0lmPVwiY29uY2lzZUVuYWJsZVwiXG4gICAgICAgICAgICBjbGFzcz1cImF1aS1jb2RlLWVkaXRvci10b29sYmFyX19jb250cm9sLWJ1dHRvblwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJjb25jaXNlJCQgfCBhc3luY1wiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjb25jaXNlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdwcmV2aWV3X2NvbmNpc2VfeWFtbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2F1aS1jaGVja2JveD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgYXVpQ29kZUVkaXRvclRvb2xiYXJSaWdodFNpZGU+XG4gICAgICAgICAgPCEtLSBTY2hlbWEg5oyJ6ZKu77ya5b2T5ZCv55So5L6n6L655qCP5pe25pi+56S6IC0tPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGF1aUJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJzaWRlYmFyRW5hYmxlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYXVpLWNvZGUtZWRpdG9yLXRvb2xiYXJfX2NvbnRyb2wtYnV0dG9uXCJcbiAgICAgICAgICAgIFt0eXBlXT1cIihzaG93U2lkZWJhciQkIHwgYXN5bmMpID8gJ3ByaW1hcnknIDogJ3RleHQnXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhKGZpbmFsU2NoZW1hJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNpZGViYXIoKVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgIChmaW5hbFNjaGVtYSQgfCBhc3luYykgPyAnJyA6ICgnc2NoZW1hX25vdF9hdmFpbGFibGUnIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YXVpLWljb25cbiAgICAgICAgICAgICAgW2ljb25dPVwiXG4gICAgICAgICAgICAgICAgKHNob3dTaWRlYmFyJCQgfCBhc3luYylcbiAgICAgICAgICAgICAgICAgID8gJ3Byb2Q6ZXhwYW5kX3NpZGViYXInXG4gICAgICAgICAgICAgICAgICA6ICdwcm9kOmNvbGxhcHNlX3NpZGViYXInXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9hdWktaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2F1aS1jb2RlLWVkaXRvcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwieWFtbC1zaWRlYmFyLXNlY3Rpb25cIlxuICAgICAgKm5nSWY9XCJzaG93U2lkZWJhciQkIHwgYXN5bmNcIlxuICAgID5cbiAgICAgIDxhY2wtcmVzb3VyY2UteWFtbC1zaWRlYmFyXG4gICAgICAgIFtyZXNvdXJjZV09XCJnZXRDdXJyZW50UmVzb3VyY2UoKVwiXG4gICAgICAgIFtzY2hlbWFdPVwiZmluYWxTY2hlbWEkIHwgYXN5bmNcIlxuICAgICAgICAoY2xvc2UpPVwidG9nZ2xlU2lkZWJhcigpXCJcbiAgICAgICAgW3NjaGVtYUVuYWJsZV09XCJzY2hlbWFFbmFibGVcIlxuICAgICAgICBbZXhhbXBsZUVuYWJsZV09XCJmYWxzZVwiXG4gICAgICA+PC9hY2wtcmVzb3VyY2UteWFtbC1zaWRlYmFyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=