@alauda-fe/crd-form 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/alauda-fe-crd-form.mjs +5 -0
- package/esm2022/lib/abstract/base-array.mjs +117 -0
- package/esm2022/lib/crd-form/component.mjs +334 -0
- package/esm2022/lib/crd-form/helper.mjs +32 -0
- package/esm2022/lib/crd-form.module.mjs +117 -0
- package/esm2022/lib/field-controls/expressions/expression-core.mjs +2 -0
- package/esm2022/lib/field-controls/expressions/props-expression.mjs +58 -0
- package/esm2022/lib/field-controls/form-item.component.mjs +121 -0
- package/esm2022/lib/field-controls/index.mjs +8 -0
- package/esm2022/lib/field-controls/module.mjs +141 -0
- package/esm2022/lib/field-controls/operand-advanced-field-group.component.mjs +80 -0
- package/esm2022/lib/field-controls/operand-array-field-group.component.mjs +112 -0
- package/esm2022/lib/field-controls/operand-field-group.component.mjs +98 -0
- package/esm2022/lib/field-controls/operand-field.component.mjs +870 -0
- package/esm2022/lib/field-controls/widgets/array-table/component.mjs +109 -0
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/component.mjs +116 -0
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/create/component.mjs +211 -0
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/type.mjs +2 -0
- package/esm2022/lib/field-controls/widgets/index.mjs +8 -0
- package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/component.mjs +169 -0
- package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/util.mjs +40 -0
- package/esm2022/lib/field-controls/widgets/link/component.mjs +68 -0
- package/esm2022/lib/field-controls/widgets/resource-requirements/resource-requirements.component.mjs +524 -0
- package/esm2022/lib/field-controls/widgets/utils.mjs +73 -0
- package/esm2022/lib/field-controls/widgets/yaml-editor/yaml-editor.component.mjs +94 -0
- package/esm2022/lib/field-widgets/htpasswd/component.mjs +35 -0
- package/esm2022/lib/field-widgets/htpasswd/form.mjs +171 -0
- package/esm2022/lib/field-widgets/htpasswd/index.mjs +4 -0
- package/esm2022/lib/field-widgets/htpasswd/module.mjs +54 -0
- package/esm2022/lib/field-widgets/index.mjs +2 -0
- package/esm2022/lib/remote-widgets/constants.mjs +4 -0
- package/esm2022/lib/remote-widgets/index.mjs +4 -0
- package/esm2022/lib/remote-widgets/remote-widget.service.mjs +42 -0
- package/esm2022/lib/remote-widgets/token.mjs +7 -0
- package/esm2022/lib/spec-descriptors/capability/capability.component.mjs +139 -0
- package/esm2022/lib/spec-descriptors/capability-list/capability-list.component.mjs +189 -0
- package/esm2022/lib/spec-descriptors/index.mjs +4 -0
- package/esm2022/lib/spec-descriptors/util.mjs +13 -0
- package/esm2022/lib/types/index.mjs +73 -0
- package/esm2022/lib/utils/capability.mjs +295 -0
- package/esm2022/lib/utils/constant.mjs +22 -0
- package/esm2022/lib/utils/directives.mjs +19 -0
- package/esm2022/lib/utils/helper.mjs +201 -0
- package/esm2022/lib/utils/index.mjs +7 -0
- package/esm2022/lib/utils/service-model.mjs +12 -0
- package/esm2022/lib/utils/util.mjs +310 -0
- package/esm2022/public-api.mjs +13 -0
- package/index.d.ts +5 -0
- package/lib/abstract/base-array.d.ts +31 -0
- package/lib/crd-form/component.d.ts +61 -0
- package/lib/crd-form/helper.d.ts +7 -0
- package/lib/crd-form.module.d.ts +16 -0
- package/lib/field-controls/expressions/expression-core.d.ts +6 -0
- package/lib/field-controls/expressions/props-expression.d.ts +36 -0
- package/lib/field-controls/form-item.component.d.ts +11 -0
- package/lib/field-controls/index.d.ts +7 -0
- package/lib/field-controls/module.d.ts +23 -0
- package/lib/field-controls/operand-advanced-field-group.component.d.ts +16 -0
- package/lib/field-controls/operand-array-field-group.component.d.ts +8 -0
- package/lib/field-controls/operand-field-group.component.d.ts +24 -0
- package/lib/field-controls/operand-field.component.d.ts +110 -0
- package/lib/field-controls/widgets/array-table/component.d.ts +8 -0
- package/lib/field-controls/widgets/basic-auth-secret/component.d.ts +26 -0
- package/lib/field-controls/widgets/basic-auth-secret/create/component.d.ts +45 -0
- package/lib/field-controls/widgets/basic-auth-secret/type.d.ts +11 -0
- package/lib/field-controls/widgets/index.d.ts +7 -0
- package/lib/field-controls/widgets/k8s-resource-prefix/component.d.ts +35 -0
- package/lib/field-controls/widgets/k8s-resource-prefix/util.d.ts +3 -0
- package/lib/field-controls/widgets/link/component.d.ts +20 -0
- package/lib/field-controls/widgets/resource-requirements/resource-requirements.component.d.ts +88 -0
- package/lib/field-controls/widgets/utils.d.ts +17 -0
- package/lib/field-controls/widgets/yaml-editor/yaml-editor.component.d.ts +36 -0
- package/lib/field-widgets/htpasswd/component.d.ts +9 -0
- package/lib/field-widgets/htpasswd/form.d.ts +32 -0
- package/lib/field-widgets/htpasswd/index.d.ts +3 -0
- package/lib/field-widgets/htpasswd/module.d.ts +13 -0
- package/lib/field-widgets/index.d.ts +1 -0
- package/lib/remote-widgets/constants.d.ts +3 -0
- package/lib/remote-widgets/index.d.ts +3 -0
- package/lib/remote-widgets/remote-widget.service.d.ts +28 -0
- package/lib/remote-widgets/token.d.ts +3 -0
- package/lib/spec-descriptors/capability/capability.component.d.ts +20 -0
- package/lib/spec-descriptors/capability-list/capability-list.component.d.ts +34 -0
- package/lib/spec-descriptors/index.d.ts +3 -0
- package/lib/spec-descriptors/util.d.ts +4 -0
- package/lib/types/index.d.ts +122 -0
- package/lib/utils/capability.d.ts +54 -0
- package/lib/utils/constant.d.ts +12 -0
- package/lib/utils/directives.d.ts +9 -0
- package/lib/utils/helper.d.ts +61 -0
- package/lib/utils/index.d.ts +6 -0
- package/lib/utils/service-model.d.ts +44 -0
- package/lib/utils/util.d.ts +48 -0
- package/package.json +30 -0
- package/public-api.d.ts +9 -0
package/esm2022/lib/field-controls/widgets/resource-requirements/resource-requirements.component.mjs
ADDED
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { bind, formatCPU, formatMemory, getResourceValue, getResourceViewModel, initGreaterValidator, RESOURCE_MAC_TYPES, resourceUnits, transferResource, TranslateService, } from '@alauda-fe/common';
|
|
3
|
+
import { ChangeDetectionStrategy, Component, Injector, Input, Optional, } from '@angular/core';
|
|
4
|
+
import { ControlContainer, } from '@angular/forms';
|
|
5
|
+
import { merge, omit, isEmpty } from 'lodash-es';
|
|
6
|
+
import { BaseResourceFormGroupComponent } from 'ng-resource-form-util';
|
|
7
|
+
import { getFieldDescription, getFieldDisplayName } from '../../../utils';
|
|
8
|
+
import { OperandFieldComponent } from '../../operand-field.component';
|
|
9
|
+
import { resolveRequirementsRequiredOptions, resolveRequirementsMinOrMaxOptions, } from '../utils';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "../../operand-field.component";
|
|
12
|
+
import * as i2 from "@angular/forms";
|
|
13
|
+
import * as i3 from "@alauda-fe/common";
|
|
14
|
+
import * as i4 from "@angular/common";
|
|
15
|
+
import * as i5 from "@alauda/ui";
|
|
16
|
+
const _c0 = a0 => ({ "tw-required-mark": a0 });
|
|
17
|
+
const _c1 = (a0, a1, a2) => [a0, a1, "min", "cpu", a2];
|
|
18
|
+
const _c2 = (a0, a1, a2) => [a0, a1, "max", "cpu", a2];
|
|
19
|
+
const _c3 = (a0, a1) => ({ min: a0, max: a1 });
|
|
20
|
+
const _c4 = (a0, a1, a2) => [a0, a1, "min", "memory", a2];
|
|
21
|
+
const _c5 = (a0, a1, a2) => [a0, a1, "max", "memory", a2];
|
|
22
|
+
const _c6 = (a0, a1, a2) => ({ cpu_max: a0, min: a1, max: a2 });
|
|
23
|
+
const _c7 = (a0, a1, a2) => ({ memory_max: a0, min: a1, max: a2 });
|
|
24
|
+
function ResourceRequirementsComponent_form_0_aui_option_13_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
+
i0.ɵɵelementStart(0, "aui-option", 17);
|
|
26
|
+
i0.ɵɵpipe(1, "translate");
|
|
27
|
+
i0.ɵɵtext(2);
|
|
28
|
+
i0.ɵɵpipe(3, "translate");
|
|
29
|
+
i0.ɵɵelementEnd();
|
|
30
|
+
} if (rf & 2) {
|
|
31
|
+
const unit_r1 = ctx.$implicit;
|
|
32
|
+
i0.ɵɵproperty("value", unit_r1.value)("label", i0.ɵɵpipeBind1(1, 3, unit_r1.label));
|
|
33
|
+
i0.ɵɵadvance(2);
|
|
34
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 5, unit_r1.label), " ");
|
|
35
|
+
} }
|
|
36
|
+
function ResourceRequirementsComponent_form_0_acl_errors_mapper_14_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
+
i0.ɵɵelement(0, "acl-errors-mapper", 18);
|
|
38
|
+
i0.ɵɵpipe(1, "pure");
|
|
39
|
+
i0.ɵɵpipe(2, "pure");
|
|
40
|
+
} if (rf & 2) {
|
|
41
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
42
|
+
i0.ɵɵproperty("errors", ctx_r1.form.get("requests.cpu.value").errors)("errorsMapper", i0.ɵɵpureFunction2(22, _c3, i0.ɵɵpipeBindV(1, 2, i0.ɵɵpureFunction3(14, _c1, ctx_r1.requestCpuMin, ctx_r1.getMinOrMaxErrorsMapper, ctx_r1.translate.locale)), i0.ɵɵpipeBindV(2, 8, i0.ɵɵpureFunction3(18, _c2, ctx_r1.requestCpuMax, ctx_r1.getMinOrMaxErrorsMapper, ctx_r1.translate.locale))));
|
|
43
|
+
} }
|
|
44
|
+
function ResourceRequirementsComponent_form_0_aui_option_23_Template(rf, ctx) { if (rf & 1) {
|
|
45
|
+
i0.ɵɵelementStart(0, "aui-option", 19);
|
|
46
|
+
i0.ɵɵtext(1);
|
|
47
|
+
i0.ɵɵelementEnd();
|
|
48
|
+
} if (rf & 2) {
|
|
49
|
+
const unit_r3 = ctx.$implicit;
|
|
50
|
+
i0.ɵɵproperty("value", unit_r3);
|
|
51
|
+
i0.ɵɵadvance();
|
|
52
|
+
i0.ɵɵtextInterpolate1(" ", unit_r3, " ");
|
|
53
|
+
} }
|
|
54
|
+
function ResourceRequirementsComponent_form_0_acl_errors_mapper_24_Template(rf, ctx) { if (rf & 1) {
|
|
55
|
+
i0.ɵɵelement(0, "acl-errors-mapper", 18);
|
|
56
|
+
i0.ɵɵpipe(1, "pure");
|
|
57
|
+
i0.ɵɵpipe(2, "pure");
|
|
58
|
+
} if (rf & 2) {
|
|
59
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
60
|
+
i0.ɵɵproperty("errors", ctx_r1.form.get("requests.memory.value").errors)("errorsMapper", i0.ɵɵpureFunction2(22, _c3, i0.ɵɵpipeBindV(1, 2, i0.ɵɵpureFunction3(14, _c4, ctx_r1.requestMemoryMin, ctx_r1.getMinOrMaxErrorsMapper, ctx_r1.translate.locale)), i0.ɵɵpipeBindV(2, 8, i0.ɵɵpureFunction3(18, _c5, ctx_r1.requestMemoryMax, ctx_r1.getMinOrMaxErrorsMapper, ctx_r1.translate.locale))));
|
|
61
|
+
} }
|
|
62
|
+
function ResourceRequirementsComponent_form_0_aui_option_37_Template(rf, ctx) { if (rf & 1) {
|
|
63
|
+
i0.ɵɵelementStart(0, "aui-option", 17);
|
|
64
|
+
i0.ɵɵpipe(1, "translate");
|
|
65
|
+
i0.ɵɵtext(2);
|
|
66
|
+
i0.ɵɵpipe(3, "translate");
|
|
67
|
+
i0.ɵɵelementEnd();
|
|
68
|
+
} if (rf & 2) {
|
|
69
|
+
const unit_r4 = ctx.$implicit;
|
|
70
|
+
i0.ɵɵproperty("value", unit_r4.value)("label", i0.ɵɵpipeBind1(1, 3, unit_r4.label));
|
|
71
|
+
i0.ɵɵadvance(2);
|
|
72
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 5, unit_r4.label), " ");
|
|
73
|
+
} }
|
|
74
|
+
function ResourceRequirementsComponent_form_0_acl_errors_mapper_38_Template(rf, ctx) { if (rf & 1) {
|
|
75
|
+
i0.ɵɵelement(0, "acl-errors-mapper", 18);
|
|
76
|
+
i0.ɵɵpipe(1, "translate");
|
|
77
|
+
i0.ɵɵpipe(2, "pure");
|
|
78
|
+
i0.ɵɵpipe(3, "pure");
|
|
79
|
+
} if (rf & 2) {
|
|
80
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
81
|
+
i0.ɵɵproperty("errors", ctx_r1.form.get("limits.cpu.value").errors)("errorsMapper", i0.ɵɵpureFunction3(24, _c6, i0.ɵɵpipeBind1(1, 2, "request_greater_than_limits_error"), i0.ɵɵpipeBindV(2, 4, i0.ɵɵpureFunction3(16, _c1, ctx_r1.limitCpuMin, ctx_r1.getMinOrMaxErrorsMapper, ctx_r1.translate.locale)), i0.ɵɵpipeBindV(3, 10, i0.ɵɵpureFunction3(20, _c2, ctx_r1.limitCpuMax, ctx_r1.getMinOrMaxErrorsMapper, ctx_r1.translate.locale))));
|
|
82
|
+
} }
|
|
83
|
+
function ResourceRequirementsComponent_form_0_aui_option_47_Template(rf, ctx) { if (rf & 1) {
|
|
84
|
+
i0.ɵɵelementStart(0, "aui-option", 19);
|
|
85
|
+
i0.ɵɵtext(1);
|
|
86
|
+
i0.ɵɵelementEnd();
|
|
87
|
+
} if (rf & 2) {
|
|
88
|
+
const unit_r5 = ctx.$implicit;
|
|
89
|
+
i0.ɵɵproperty("value", unit_r5);
|
|
90
|
+
i0.ɵɵadvance();
|
|
91
|
+
i0.ɵɵtextInterpolate1(" ", unit_r5, " ");
|
|
92
|
+
} }
|
|
93
|
+
function ResourceRequirementsComponent_form_0_acl_errors_mapper_48_Template(rf, ctx) { if (rf & 1) {
|
|
94
|
+
i0.ɵɵelement(0, "acl-errors-mapper", 18);
|
|
95
|
+
i0.ɵɵpipe(1, "translate");
|
|
96
|
+
i0.ɵɵpipe(2, "pure");
|
|
97
|
+
i0.ɵɵpipe(3, "pure");
|
|
98
|
+
} if (rf & 2) {
|
|
99
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
100
|
+
i0.ɵɵproperty("errors", ctx_r1.form.get("limits.memory.value").errors)("errorsMapper", i0.ɵɵpureFunction3(24, _c7, i0.ɵɵpipeBind1(1, 2, "request_greater_than_limits_error"), i0.ɵɵpipeBindV(2, 4, i0.ɵɵpureFunction3(16, _c4, ctx_r1.limitMemoryMin, ctx_r1.getMinOrMaxErrorsMapper, ctx_r1.translate.locale)), i0.ɵɵpipeBindV(3, 10, i0.ɵɵpureFunction3(20, _c5, ctx_r1.limitMemoryMax, ctx_r1.getMinOrMaxErrorsMapper, ctx_r1.translate.locale))));
|
|
101
|
+
} }
|
|
102
|
+
function ResourceRequirementsComponent_form_0_Template(rf, ctx) { if (rf & 1) {
|
|
103
|
+
i0.ɵɵelementStart(0, "form", 2)(1, "div", 3)(2, "div", 4);
|
|
104
|
+
i0.ɵɵtext(3);
|
|
105
|
+
i0.ɵɵpipe(4, "translate");
|
|
106
|
+
i0.ɵɵelementEnd();
|
|
107
|
+
i0.ɵɵelementStart(5, "div", 5)(6, "div", 6)(7, "div", 7)(8, "aui-input-group")(9, "div", 8);
|
|
108
|
+
i0.ɵɵtext(10, " CPU ");
|
|
109
|
+
i0.ɵɵelementEnd();
|
|
110
|
+
i0.ɵɵelement(11, "input", 9);
|
|
111
|
+
i0.ɵɵelementStart(12, "aui-select", 10);
|
|
112
|
+
i0.ɵɵtemplate(13, ResourceRequirementsComponent_form_0_aui_option_13_Template, 4, 7, "aui-option", 11);
|
|
113
|
+
i0.ɵɵelementEnd()()();
|
|
114
|
+
i0.ɵɵtemplate(14, ResourceRequirementsComponent_form_0_acl_errors_mapper_14_Template, 3, 25, "acl-errors-mapper", 12);
|
|
115
|
+
i0.ɵɵelementEnd();
|
|
116
|
+
i0.ɵɵelementStart(15, "div", 6)(16, "div", 13)(17, "aui-input-group")(18, "div", 8);
|
|
117
|
+
i0.ɵɵtext(19);
|
|
118
|
+
i0.ɵɵpipe(20, "translate");
|
|
119
|
+
i0.ɵɵelementEnd();
|
|
120
|
+
i0.ɵɵelement(21, "input", 9);
|
|
121
|
+
i0.ɵɵelementStart(22, "aui-select", 10);
|
|
122
|
+
i0.ɵɵtemplate(23, ResourceRequirementsComponent_form_0_aui_option_23_Template, 2, 2, "aui-option", 14);
|
|
123
|
+
i0.ɵɵelementEnd()()();
|
|
124
|
+
i0.ɵɵtemplate(24, ResourceRequirementsComponent_form_0_acl_errors_mapper_24_Template, 3, 25, "acl-errors-mapper", 12);
|
|
125
|
+
i0.ɵɵelementEnd()()();
|
|
126
|
+
i0.ɵɵelementStart(25, "div", 3)(26, "div", 4);
|
|
127
|
+
i0.ɵɵtext(27);
|
|
128
|
+
i0.ɵɵpipe(28, "translate");
|
|
129
|
+
i0.ɵɵelementEnd();
|
|
130
|
+
i0.ɵɵelementStart(29, "div", 15)(30, "div", 6)(31, "div", 16)(32, "aui-input-group")(33, "div", 8);
|
|
131
|
+
i0.ɵɵtext(34, " CPU ");
|
|
132
|
+
i0.ɵɵelementEnd();
|
|
133
|
+
i0.ɵɵelement(35, "input", 9);
|
|
134
|
+
i0.ɵɵelementStart(36, "aui-select", 10);
|
|
135
|
+
i0.ɵɵtemplate(37, ResourceRequirementsComponent_form_0_aui_option_37_Template, 4, 7, "aui-option", 11);
|
|
136
|
+
i0.ɵɵelementEnd()()();
|
|
137
|
+
i0.ɵɵtemplate(38, ResourceRequirementsComponent_form_0_acl_errors_mapper_38_Template, 4, 28, "acl-errors-mapper", 12);
|
|
138
|
+
i0.ɵɵelementEnd();
|
|
139
|
+
i0.ɵɵelementStart(39, "div", 6)(40, "div", 13)(41, "aui-input-group")(42, "div", 8);
|
|
140
|
+
i0.ɵɵtext(43);
|
|
141
|
+
i0.ɵɵpipe(44, "translate");
|
|
142
|
+
i0.ɵɵelementEnd();
|
|
143
|
+
i0.ɵɵelement(45, "input", 9);
|
|
144
|
+
i0.ɵɵelementStart(46, "aui-select", 10);
|
|
145
|
+
i0.ɵɵtemplate(47, ResourceRequirementsComponent_form_0_aui_option_47_Template, 2, 2, "aui-option", 14);
|
|
146
|
+
i0.ɵɵelementEnd()()();
|
|
147
|
+
i0.ɵɵtemplate(48, ResourceRequirementsComponent_form_0_acl_errors_mapper_48_Template, 4, 28, "acl-errors-mapper", 12);
|
|
148
|
+
i0.ɵɵelementEnd()()()();
|
|
149
|
+
} if (rf & 2) {
|
|
150
|
+
let tmp_7_0;
|
|
151
|
+
let tmp_13_0;
|
|
152
|
+
let tmp_19_0;
|
|
153
|
+
let tmp_25_0;
|
|
154
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
155
|
+
i0.ɵɵproperty("formGroup", ctx_r1.form);
|
|
156
|
+
i0.ɵɵadvance(3);
|
|
157
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 24, "resource_requirements_requests"), " ");
|
|
158
|
+
i0.ɵɵadvance(6);
|
|
159
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(32, _c0, ctx_r1.requestCpuRequired));
|
|
160
|
+
i0.ɵɵadvance(2);
|
|
161
|
+
i0.ɵɵproperty("required", ctx_r1.requestCpuRequired);
|
|
162
|
+
i0.ɵɵadvance(2);
|
|
163
|
+
i0.ɵɵproperty("ngForOf", ctx_r1.resourceUnits["cpu"]);
|
|
164
|
+
i0.ɵɵadvance();
|
|
165
|
+
i0.ɵɵproperty("ngIf", ((tmp_7_0 = ctx_r1.form.get("requests.cpu.value")) == null ? null : tmp_7_0.dirty) || (ctx_r1.controlContainer == null ? null : ctx_r1.controlContainer.formDirective == null ? null : ctx_r1.controlContainer.formDirective.submitted));
|
|
166
|
+
i0.ɵɵadvance(2);
|
|
167
|
+
i0.ɵɵproperty("formGroupName", "memory");
|
|
168
|
+
i0.ɵɵadvance(2);
|
|
169
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(34, _c0, ctx_r1.requestMemoryRequired));
|
|
170
|
+
i0.ɵɵadvance();
|
|
171
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(20, 26, "memory"), " ");
|
|
172
|
+
i0.ɵɵadvance(2);
|
|
173
|
+
i0.ɵɵproperty("required", ctx_r1.requestMemoryRequired);
|
|
174
|
+
i0.ɵɵadvance(2);
|
|
175
|
+
i0.ɵɵproperty("ngForOf", ctx_r1.resourceUnits["memory"]);
|
|
176
|
+
i0.ɵɵadvance();
|
|
177
|
+
i0.ɵɵproperty("ngIf", ((tmp_13_0 = ctx_r1.form.get("requests.memory.value")) == null ? null : tmp_13_0.dirty) || (ctx_r1.controlContainer == null ? null : ctx_r1.controlContainer.formDirective == null ? null : ctx_r1.controlContainer.formDirective.submitted));
|
|
178
|
+
i0.ɵɵadvance(3);
|
|
179
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(28, 28, "resource_requirements_limits"), " ");
|
|
180
|
+
i0.ɵɵadvance(4);
|
|
181
|
+
i0.ɵɵproperty("formGroupName", "cpu");
|
|
182
|
+
i0.ɵɵadvance(2);
|
|
183
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(36, _c0, ctx_r1.limitCpuRequired));
|
|
184
|
+
i0.ɵɵadvance(2);
|
|
185
|
+
i0.ɵɵproperty("required", ctx_r1.limitCpuRequired);
|
|
186
|
+
i0.ɵɵadvance(2);
|
|
187
|
+
i0.ɵɵproperty("ngForOf", ctx_r1.resourceUnits["cpu"]);
|
|
188
|
+
i0.ɵɵadvance();
|
|
189
|
+
i0.ɵɵproperty("ngIf", ((tmp_19_0 = ctx_r1.form.get("limits.cpu.value")) == null ? null : tmp_19_0.dirty) || (ctx_r1.controlContainer == null ? null : ctx_r1.controlContainer.formDirective == null ? null : ctx_r1.controlContainer.formDirective.submitted));
|
|
190
|
+
i0.ɵɵadvance(2);
|
|
191
|
+
i0.ɵɵproperty("formGroupName", "memory");
|
|
192
|
+
i0.ɵɵadvance(2);
|
|
193
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(38, _c0, ctx_r1.limitMemoryRequired));
|
|
194
|
+
i0.ɵɵadvance();
|
|
195
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(44, 30, "memory"), " ");
|
|
196
|
+
i0.ɵɵadvance(2);
|
|
197
|
+
i0.ɵɵproperty("required", ctx_r1.limitMemoryRequired);
|
|
198
|
+
i0.ɵɵadvance(2);
|
|
199
|
+
i0.ɵɵproperty("ngForOf", ctx_r1.resourceUnits["memory"]);
|
|
200
|
+
i0.ɵɵadvance();
|
|
201
|
+
i0.ɵɵproperty("ngIf", ((tmp_25_0 = ctx_r1.form.get("limits.memory.value")) == null ? null : tmp_25_0.dirty) || (ctx_r1.controlContainer == null ? null : ctx_r1.controlContainer.formDirective == null ? null : ctx_r1.controlContainer.formDirective.submitted));
|
|
202
|
+
} }
|
|
203
|
+
function ResourceRequirementsComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
204
|
+
i0.ɵɵelementStart(0, "div", 20)(1, "div", 21)(2, "label", 22);
|
|
205
|
+
i0.ɵɵtext(3);
|
|
206
|
+
i0.ɵɵpipe(4, "translate");
|
|
207
|
+
i0.ɵɵelementEnd();
|
|
208
|
+
i0.ɵɵelement(5, "aui-icon", 23);
|
|
209
|
+
i0.ɵɵpipe(6, "translate");
|
|
210
|
+
i0.ɵɵelementStart(7, "span", 24);
|
|
211
|
+
i0.ɵɵtext(8);
|
|
212
|
+
i0.ɵɵpipe(9, "pure");
|
|
213
|
+
i0.ɵɵpipe(10, "aclFieldNotAvailable");
|
|
214
|
+
i0.ɵɵpipe(11, "pure");
|
|
215
|
+
i0.ɵɵpipe(12, "translate");
|
|
216
|
+
i0.ɵɵelementEnd();
|
|
217
|
+
i0.ɵɵelement(13, "aui-icon", 25);
|
|
218
|
+
i0.ɵɵpipe(14, "translate");
|
|
219
|
+
i0.ɵɵtext(15);
|
|
220
|
+
i0.ɵɵpipe(16, "pure");
|
|
221
|
+
i0.ɵɵpipe(17, "aclFieldNotAvailable");
|
|
222
|
+
i0.ɵɵelementEnd();
|
|
223
|
+
i0.ɵɵelementStart(18, "div", 21)(19, "label", 22);
|
|
224
|
+
i0.ɵɵtext(20);
|
|
225
|
+
i0.ɵɵpipe(21, "translate");
|
|
226
|
+
i0.ɵɵelementEnd();
|
|
227
|
+
i0.ɵɵelement(22, "aui-icon", 23);
|
|
228
|
+
i0.ɵɵpipe(23, "translate");
|
|
229
|
+
i0.ɵɵelementStart(24, "span", 24);
|
|
230
|
+
i0.ɵɵtext(25);
|
|
231
|
+
i0.ɵɵpipe(26, "pure");
|
|
232
|
+
i0.ɵɵpipe(27, "aclFieldNotAvailable");
|
|
233
|
+
i0.ɵɵpipe(28, "pure");
|
|
234
|
+
i0.ɵɵpipe(29, "translate");
|
|
235
|
+
i0.ɵɵelementEnd();
|
|
236
|
+
i0.ɵɵelement(30, "aui-icon", 25);
|
|
237
|
+
i0.ɵɵpipe(31, "translate");
|
|
238
|
+
i0.ɵɵtext(32);
|
|
239
|
+
i0.ɵɵpipe(33, "pure");
|
|
240
|
+
i0.ɵɵpipe(34, "aclFieldNotAvailable");
|
|
241
|
+
i0.ɵɵelementEnd()();
|
|
242
|
+
} if (rf & 2) {
|
|
243
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
244
|
+
i0.ɵɵadvance(3);
|
|
245
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 12, "resource_requirements_requests"));
|
|
246
|
+
i0.ɵɵadvance(2);
|
|
247
|
+
i0.ɵɵproperty("title", i0.ɵɵpipeBind1(6, 14, "cpu"));
|
|
248
|
+
i0.ɵɵadvance(3);
|
|
249
|
+
i0.ɵɵtextInterpolate2("", i0.ɵɵpipeBind1(10, 19, i0.ɵɵpipeBind2(9, 16, ctx_r1.form.get("requests").get("cpu").value, ctx_r1.getResourceValue)), "", i0.ɵɵpipeBind1(12, 24, i0.ɵɵpipeBind2(11, 21, ctx_r1.form.get("requests").get("cpu.unit").value, ctx_r1.getCpuUnitLabel)), " ");
|
|
250
|
+
i0.ɵɵadvance(5);
|
|
251
|
+
i0.ɵɵproperty("title", i0.ɵɵpipeBind1(14, 26, "memory"));
|
|
252
|
+
i0.ɵɵadvance(2);
|
|
253
|
+
i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(17, 31, i0.ɵɵpipeBind2(16, 28, ctx_r1.form.get("requests").get("memory").value, ctx_r1.getResourceValue)), " ");
|
|
254
|
+
i0.ɵɵadvance(5);
|
|
255
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(21, 33, "resource_requirements_limits"));
|
|
256
|
+
i0.ɵɵadvance(2);
|
|
257
|
+
i0.ɵɵproperty("title", i0.ɵɵpipeBind1(23, 35, "cpu"));
|
|
258
|
+
i0.ɵɵadvance(3);
|
|
259
|
+
i0.ɵɵtextInterpolate2("", i0.ɵɵpipeBind1(27, 40, i0.ɵɵpipeBind2(26, 37, ctx_r1.form.get("limits").get("cpu").value, ctx_r1.getResourceValue)), "", i0.ɵɵpipeBind1(29, 45, i0.ɵɵpipeBind2(28, 42, ctx_r1.form.get("limits").get("cpu.unit").value, ctx_r1.getCpuUnitLabel)), " ");
|
|
260
|
+
i0.ɵɵadvance(5);
|
|
261
|
+
i0.ɵɵproperty("title", i0.ɵɵpipeBind1(31, 47, "memory"));
|
|
262
|
+
i0.ɵɵadvance(2);
|
|
263
|
+
i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(34, 52, i0.ɵɵpipeBind2(33, 49, ctx_r1.form.get("limits").get("memory").value, ctx_r1.getResourceValue)), " ");
|
|
264
|
+
} }
|
|
265
|
+
function handleValidationErrors(valueCtrl, errors) {
|
|
266
|
+
// 这里避免覆盖其它 errors
|
|
267
|
+
const combinedErrors = { ...valueCtrl.errors, ...errors };
|
|
268
|
+
valueCtrl.setErrors(combinedErrors);
|
|
269
|
+
return combinedErrors;
|
|
270
|
+
}
|
|
271
|
+
function valueFormat(type, value) {
|
|
272
|
+
return type === 'cpu' ? formatCPU(value) : formatMemory(value);
|
|
273
|
+
}
|
|
274
|
+
function getCurrentValue(group, type) {
|
|
275
|
+
const valueCtrl = group.get('value');
|
|
276
|
+
const value = valueCtrl.value;
|
|
277
|
+
const unit = group.get('unit').value;
|
|
278
|
+
return valueFormat(type, (value || 0) + unit);
|
|
279
|
+
}
|
|
280
|
+
export class ResourceRequirementsComponent extends BaseResourceFormGroupComponent {
|
|
281
|
+
get requiredOptions() {
|
|
282
|
+
return resolveRequirementsRequiredOptions(this.fieldComponent?.field);
|
|
283
|
+
}
|
|
284
|
+
get limitMemoryRequired() {
|
|
285
|
+
return this.requiredOptions.required?.limit?.includes('memory');
|
|
286
|
+
}
|
|
287
|
+
get limitCpuRequired() {
|
|
288
|
+
return this.requiredOptions.required?.limit?.includes('cpu');
|
|
289
|
+
}
|
|
290
|
+
get requestMemoryRequired() {
|
|
291
|
+
return this.requiredOptions.required?.request?.includes('memory');
|
|
292
|
+
}
|
|
293
|
+
get requestCpuRequired() {
|
|
294
|
+
return this.requiredOptions.required?.request?.includes('cpu');
|
|
295
|
+
}
|
|
296
|
+
get minMaxOptions() {
|
|
297
|
+
return resolveRequirementsMinOrMaxOptions(this.fieldComponent?.field);
|
|
298
|
+
}
|
|
299
|
+
get limitMemoryMin() {
|
|
300
|
+
return this.minMaxOptions.min.limits?.memory;
|
|
301
|
+
}
|
|
302
|
+
get limitCpuMin() {
|
|
303
|
+
return this.minMaxOptions.min.limits?.cpu;
|
|
304
|
+
}
|
|
305
|
+
get requestMemoryMin() {
|
|
306
|
+
return this.minMaxOptions.min.requests?.memory;
|
|
307
|
+
}
|
|
308
|
+
get requestCpuMin() {
|
|
309
|
+
return this.minMaxOptions.min.requests?.cpu;
|
|
310
|
+
}
|
|
311
|
+
get limitMemoryMax() {
|
|
312
|
+
return this.minMaxOptions.max.limits?.memory;
|
|
313
|
+
}
|
|
314
|
+
get limitCpuMax() {
|
|
315
|
+
return this.minMaxOptions.max.limits?.cpu;
|
|
316
|
+
}
|
|
317
|
+
get requestMemoryMax() {
|
|
318
|
+
return this.minMaxOptions.max.requests?.memory;
|
|
319
|
+
}
|
|
320
|
+
get requestCpuMax() {
|
|
321
|
+
return this.minMaxOptions.max.requests?.cpu;
|
|
322
|
+
}
|
|
323
|
+
constructor(injector, fieldComponent, controlContainer, translate) {
|
|
324
|
+
super(injector);
|
|
325
|
+
this.fieldComponent = fieldComponent;
|
|
326
|
+
this.controlContainer = controlContainer;
|
|
327
|
+
this.translate = translate;
|
|
328
|
+
this.resourceUnits = resourceUnits;
|
|
329
|
+
this.getFieldDisplayName = getFieldDisplayName;
|
|
330
|
+
this.getFieldDescription = getFieldDescription;
|
|
331
|
+
this.getResourceValue = getResourceValue;
|
|
332
|
+
this.getResourceViewModel = getResourceViewModel;
|
|
333
|
+
}
|
|
334
|
+
ngOnInit() {
|
|
335
|
+
super.ngOnInit();
|
|
336
|
+
const greaterValidatorSubscriptions = [
|
|
337
|
+
initGreaterValidator('cpu', this.form),
|
|
338
|
+
initGreaterValidator('memory', this.form),
|
|
339
|
+
];
|
|
340
|
+
this.destroy$.subscribe(() => {
|
|
341
|
+
greaterValidatorSubscriptions.forEach(sub => sub.unsubscribe());
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
createForm() {
|
|
345
|
+
return this.fb.group({
|
|
346
|
+
limits: this.fb.group({
|
|
347
|
+
cpu: this.fb.group({
|
|
348
|
+
value: '',
|
|
349
|
+
unit: 'c',
|
|
350
|
+
}, {
|
|
351
|
+
validators: [
|
|
352
|
+
this.minValidator(this.limitCpuMin, 'cpu'),
|
|
353
|
+
this.maxValidator(this.limitCpuMax, 'cpu'),
|
|
354
|
+
],
|
|
355
|
+
}),
|
|
356
|
+
memory: this.fb.group({
|
|
357
|
+
value: '',
|
|
358
|
+
unit: 'Mi',
|
|
359
|
+
}, {
|
|
360
|
+
validators: [
|
|
361
|
+
this.minValidator(this.limitMemoryMin, 'memory'),
|
|
362
|
+
this.maxValidator(this.limitMemoryMax, 'memory'),
|
|
363
|
+
],
|
|
364
|
+
}),
|
|
365
|
+
}),
|
|
366
|
+
requests: this.fb.group({
|
|
367
|
+
cpu: this.fb.group({
|
|
368
|
+
value: '',
|
|
369
|
+
unit: 'c',
|
|
370
|
+
}, {
|
|
371
|
+
validators: [
|
|
372
|
+
this.minValidator(this.requestCpuMin, 'cpu'),
|
|
373
|
+
this.maxValidator(this.requestCpuMax, 'cpu'),
|
|
374
|
+
],
|
|
375
|
+
}),
|
|
376
|
+
memory: this.fb.group({
|
|
377
|
+
value: '',
|
|
378
|
+
unit: 'Mi',
|
|
379
|
+
}, {
|
|
380
|
+
validators: [
|
|
381
|
+
this.minValidator(this.requestMemoryMin, 'memory'),
|
|
382
|
+
this.maxValidator(this.requestMemoryMax, 'memory'),
|
|
383
|
+
],
|
|
384
|
+
}),
|
|
385
|
+
}),
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
getDefaultFormModel() {
|
|
389
|
+
return {
|
|
390
|
+
limits: {
|
|
391
|
+
cpu: {
|
|
392
|
+
value: '',
|
|
393
|
+
unit: 'c',
|
|
394
|
+
},
|
|
395
|
+
memory: {
|
|
396
|
+
value: '',
|
|
397
|
+
unit: 'Mi',
|
|
398
|
+
},
|
|
399
|
+
},
|
|
400
|
+
requests: {
|
|
401
|
+
cpu: {
|
|
402
|
+
value: '',
|
|
403
|
+
unit: 'c',
|
|
404
|
+
},
|
|
405
|
+
memory: {
|
|
406
|
+
value: '',
|
|
407
|
+
unit: 'Mi',
|
|
408
|
+
},
|
|
409
|
+
},
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
adaptFormModel(formModel) {
|
|
413
|
+
this.formatFormModel(formModel);
|
|
414
|
+
return {
|
|
415
|
+
requests: transferResource(formModel.requests),
|
|
416
|
+
limits: transferResource(formModel.limits),
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
minValidator(min, type) {
|
|
420
|
+
return (group) => {
|
|
421
|
+
if (!min) {
|
|
422
|
+
return null;
|
|
423
|
+
}
|
|
424
|
+
const valueCtrl = group.get('value');
|
|
425
|
+
const currentValue = getCurrentValue(group, type);
|
|
426
|
+
const minThreshold = valueFormat(type, min);
|
|
427
|
+
if (currentValue < minThreshold) {
|
|
428
|
+
return handleValidationErrors(valueCtrl, { min: true });
|
|
429
|
+
}
|
|
430
|
+
const errors = omit(valueCtrl.errors, 'min');
|
|
431
|
+
valueCtrl.setErrors(isEmpty(errors) ? null : errors);
|
|
432
|
+
return null;
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
maxValidator(max, type) {
|
|
436
|
+
return (group) => {
|
|
437
|
+
if (!max) {
|
|
438
|
+
return null;
|
|
439
|
+
}
|
|
440
|
+
const valueCtrl = group.get('value');
|
|
441
|
+
const currentValue = getCurrentValue(group, type);
|
|
442
|
+
const maxThreshold = valueFormat(type, max);
|
|
443
|
+
if (currentValue > maxThreshold) {
|
|
444
|
+
return handleValidationErrors(valueCtrl, { max: true });
|
|
445
|
+
}
|
|
446
|
+
const errors = omit(valueCtrl.errors, 'max');
|
|
447
|
+
valueCtrl.setErrors(isEmpty(errors) ? null : errors);
|
|
448
|
+
return null;
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
formatFormModel(formModel) {
|
|
452
|
+
Object.values(formModel).forEach(modelValue => {
|
|
453
|
+
Object.values(modelValue).forEach(v => {
|
|
454
|
+
v.value = `${v.value}`;
|
|
455
|
+
});
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
getCpuUnitLabel(value) {
|
|
459
|
+
return value === 'm'
|
|
460
|
+
? ''
|
|
461
|
+
: resourceUnits.cpu.find(unit => unit.value === value).label;
|
|
462
|
+
}
|
|
463
|
+
adaptResourceModel(resources) {
|
|
464
|
+
const resourcesModel = {};
|
|
465
|
+
if (resources) {
|
|
466
|
+
Object.keys(resources).forEach(kind => {
|
|
467
|
+
const resourceKind = kind;
|
|
468
|
+
resourcesModel[resourceKind] = Object.keys(resources[resourceKind])
|
|
469
|
+
.filter(key => RESOURCE_MAC_TYPES.includes(key))
|
|
470
|
+
.reduce((item, type) => {
|
|
471
|
+
const resourceType = type;
|
|
472
|
+
item[resourceType] = getResourceViewModel(resources[resourceKind][resourceType], resourceType);
|
|
473
|
+
return item;
|
|
474
|
+
}, {});
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
return merge(this.getDefaultFormModel(), resourcesModel);
|
|
478
|
+
}
|
|
479
|
+
getMinOrMaxErrorsMapper(value, kind, type, _locale) {
|
|
480
|
+
const resourceCtrl = getResourceViewModel(value, type);
|
|
481
|
+
return this.translate.get(`warning_${kind}`, {
|
|
482
|
+
value: resourceCtrl.value + this.translate.get(resourceCtrl.unit),
|
|
483
|
+
});
|
|
484
|
+
}
|
|
485
|
+
static { this.ɵfac = function ResourceRequirementsComponent_Factory(t) { return new (t || ResourceRequirementsComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.OperandFieldComponent, 8), i0.ɵɵdirectiveInject(i2.ControlContainer, 8), i0.ɵɵdirectiveInject(i3.TranslateService)); }; }
|
|
486
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ResourceRequirementsComponent, selectors: [["acl-crd-resource-requirements"]], inputs: { readOnly: "readOnly", field: "field" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 2, consts: [["readOnlyTemplate", ""], [3, "formGroup", 4, "ngIf", "ngIfElse"], [3, "formGroup"], [1, "resource_requirements"], [1, "input-group-label"], ["formGroupName", "requests", 1, "input-group-wrapper", "tw-items-start"], [1, "tw-flex", "tw-flex-col", "tw-flex-1"], ["formGroupName", "cpu", 1, "input-groups-wrapper", "cpu"], ["auiInputAddonBefore", "", 1, "addon-label", 3, "ngClass"], ["aui-input", "", "type", "number", "auiFormItemControl", "", "formControlName", "value", 3, "required"], ["auiInputAddonAfter", "", "auiFormItemControl", "", "formControlName", "unit"], [3, "value", "label", 4, "ngFor", "ngForOf"], ["class", "tw-text-s tw-text-red", 3, "errors", "errorsMapper", 4, "ngIf"], [1, "input-groups-wrapper", "memory", 3, "formGroupName"], [3, "value", 4, "ngFor", "ngForOf"], ["formGroupName", "limits", 1, "input-group-wrapper", "tw-items-start"], [1, "input-groups-wrapper", "cpu", 3, "formGroupName"], [3, "value", "label"], [1, "tw-text-s", "tw-text-red", 3, "errors", "errorsMapper"], [3, "value"], [1, "resource_requirements-display"], [1, "resource_requirements-display-item"], [1, "resource_requirements-display-item__label"], ["icon", "prod:cpu", "size", "16px", "color", "#6359b4", "margin", "right", 3, "title"], [1, "tw-mr-16"], ["icon", "prod:memory", "size", "16px", "color", "#007cb5", "margin", "right", 3, "title"]], template: function ResourceRequirementsComponent_Template(rf, ctx) { if (rf & 1) {
|
|
487
|
+
i0.ɵɵtemplate(0, ResourceRequirementsComponent_form_0_Template, 49, 40, "form", 1)(1, ResourceRequirementsComponent_ng_template_1_Template, 35, 54, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
488
|
+
} if (rf & 2) {
|
|
489
|
+
const readOnlyTemplate_r6 = i0.ɵɵreference(2);
|
|
490
|
+
i0.ɵɵproperty("ngIf", !ctx.readOnly)("ngIfElse", readOnlyTemplate_r6);
|
|
491
|
+
} }, dependencies: [i4.NgClass, i4.NgForOf, i4.NgIf, i2.ɵNgNoValidate, i2.DefaultValueAccessor, i2.NumberValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.RequiredValidator, i2.FormGroupDirective, i2.FormControlName, i2.FormGroupName, i5.FormItemControlDirective, i5.IconComponent, i5.InputComponent, i5.InputGroupComponent, i5.InputAddonBeforeDirective, i5.InputAddonAfterDirective, i5.SelectComponent, i5.OptionComponent, i3.ErrorsMapperComponent, i3.ValidatorsDirective, i3.TranslatePipe, i3.FieldNotAvailablePipe, i3.PurePipe], styles: ["[_nghost-%COMP%] .resource_requirements[_ngcontent-%COMP%]:not(:last-of-type){margin-bottom:8px}[_nghost-%COMP%] .input-group-wrapper[_ngcontent-%COMP%]{display:flex}[_nghost-%COMP%] .input-group-label[_ngcontent-%COMP%]{line-height:var(--aui-inline-height-m)}[_nghost-%COMP%] aui-input-group[_ngcontent-%COMP%]{flex:1}[_nghost-%COMP%] aui-input-group[_ngcontent-%COMP%] .aui-input-group__addon--after{padding:0}[_nghost-%COMP%] aui-input-group[_ngcontent-%COMP%] .aui-input-group__addon--after aui-select{width:60px}[_nghost-%COMP%] aui-input-group[_ngcontent-%COMP%] .aui-input-group__addon--after aui-select .aui-input-group{width:62px}html:not([lang|=zh]) [_nghost-%COMP%] aui-input-group[_ngcontent-%COMP%] .aui-input-group__addon--after aui-select{width:78px}html:not([lang|=zh]) [_nghost-%COMP%] aui-input-group[_ngcontent-%COMP%] .aui-input-group__addon--after aui-select .aui-input-group{width:80px}[_nghost-%COMP%] aui-input-group[_ngcontent-%COMP%] .aui-input-group__addon--after aui-select .aui-input{border:0;background-color:transparent!important;border-top-right-radius:var(--aui-border-radius-m);border-bottom-right-radius:var(--aui-border-radius-m)}[_nghost-%COMP%] .addon-label[_ngcontent-%COMP%]{white-space:nowrap}[_nghost-%COMP%] .input-groups-wrapper[_ngcontent-%COMP%]{display:flex;flex:1;align-items:center}[_nghost-%COMP%] .input-groups-wrapper[_ngcontent-%COMP%]:first-child{margin-right:8px}[_nghost-%COMP%] .resource_requirements-display-item[_ngcontent-%COMP%]{display:flex;font-size:14px;line-height:20px;color:rgb(var(--aui-color-main-text));align-items:center;margin-top:8px}[_nghost-%COMP%] .resource_requirements-display-item[_ngcontent-%COMP%]:first-child{margin-top:0}[_nghost-%COMP%] .resource_requirements-display-item__label[_ngcontent-%COMP%]{white-space:nowrap;margin-right:8px}[_nghost-%COMP%] .resource_requirements-display-item__value[_ngcontent-%COMP%]{min-width:0;flex:1;white-space:nowrap;display:flex}[_nghost-%COMP%] .resource_requirements-display-item__value__overflow[_ngcontent-%COMP%]{display:block;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .resource_requirements-display-item__value__wrap[_ngcontent-%COMP%]{white-space:pre-wrap;flex-wrap:wrap}[_nghost-%COMP%] .resource_requirements-display-item__label[_ngcontent-%COMP%], [_nghost-%COMP%] .resource_requirements-display-item__value[_ngcontent-%COMP%]{height:100%;align-items:flex-start}[_nghost-%COMP%] .aui-input-group__addon--before{width:70px}html:not([lang|=zh]) [_nghost-%COMP%] .memory .aui-input-group__addon--before{width:82px}"], changeDetection: 0 }); }
|
|
492
|
+
}
|
|
493
|
+
__decorate([
|
|
494
|
+
bind,
|
|
495
|
+
__metadata("design:type", Function),
|
|
496
|
+
__metadata("design:paramtypes", [String, String]),
|
|
497
|
+
__metadata("design:returntype", void 0)
|
|
498
|
+
], ResourceRequirementsComponent.prototype, "minValidator", null);
|
|
499
|
+
__decorate([
|
|
500
|
+
bind,
|
|
501
|
+
__metadata("design:type", Function),
|
|
502
|
+
__metadata("design:paramtypes", [String, String]),
|
|
503
|
+
__metadata("design:returntype", void 0)
|
|
504
|
+
], ResourceRequirementsComponent.prototype, "maxValidator", null);
|
|
505
|
+
__decorate([
|
|
506
|
+
bind,
|
|
507
|
+
__metadata("design:type", Function),
|
|
508
|
+
__metadata("design:paramtypes", [String, String, String, String]),
|
|
509
|
+
__metadata("design:returntype", void 0)
|
|
510
|
+
], ResourceRequirementsComponent.prototype, "getMinOrMaxErrorsMapper", null);
|
|
511
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ResourceRequirementsComponent, [{
|
|
512
|
+
type: Component,
|
|
513
|
+
args: [{ selector: 'acl-crd-resource-requirements', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n [formGroup]=\"form\"\n *ngIf=\"!readOnly; else readOnlyTemplate\"\n>\n <div class=\"resource_requirements\">\n <div class=\"input-group-label\">\n {{ 'resource_requirements_requests' | translate }}\n </div>\n <div\n class=\"input-group-wrapper tw-items-start\"\n formGroupName=\"requests\"\n >\n <div class=\"tw-flex tw-flex-col tw-flex-1\">\n <div\n class=\"input-groups-wrapper cpu\"\n formGroupName=\"cpu\"\n >\n <aui-input-group>\n <div\n auiInputAddonBefore\n class=\"addon-label\"\n [ngClass]=\"{\n 'tw-required-mark': requestCpuRequired\n }\"\n >\n CPU\n </div>\n <input\n aui-input\n type=\"number\"\n [required]=\"requestCpuRequired\"\n auiFormItemControl\n formControlName=\"value\"\n />\n <aui-select\n auiInputAddonAfter\n auiFormItemControl\n formControlName=\"unit\"\n >\n <aui-option\n *ngFor=\"let unit of resourceUnits['cpu']\"\n [value]=\"unit.value\"\n [label]=\"unit.label | translate\"\n >\n {{ unit.label | translate }}\n </aui-option>\n </aui-select>\n </aui-input-group>\n </div>\n <acl-errors-mapper\n *ngIf=\"\n form.get('requests.cpu.value')?.dirty ||\n $any(controlContainer?.formDirective)?.submitted\n \"\n [errors]=\"form.get('requests.cpu.value').errors\"\n [errorsMapper]=\"{\n min: requestCpuMin | pure: getMinOrMaxErrorsMapper: 'min': 'cpu': translate.locale,\n max: requestCpuMax | pure: getMinOrMaxErrorsMapper: 'max': 'cpu': translate.locale,\n }\"\n class=\"tw-text-s tw-text-red\"\n >\n </acl-errors-mapper>\n </div>\n\n <div class=\"tw-flex tw-flex-col tw-flex-1\">\n <div\n class=\"input-groups-wrapper memory\"\n [formGroupName]=\"'memory'\"\n >\n <aui-input-group>\n <div\n auiInputAddonBefore\n class=\"addon-label\"\n [ngClass]=\"{\n 'tw-required-mark': requestMemoryRequired\n }\"\n >\n {{ 'memory' | translate }}\n </div>\n <input\n aui-input\n type=\"number\"\n auiFormItemControl\n formControlName=\"value\"\n [required]=\"requestMemoryRequired\"\n />\n <aui-select\n auiInputAddonAfter\n auiFormItemControl\n formControlName=\"unit\"\n >\n <aui-option\n *ngFor=\"let unit of resourceUnits['memory']\"\n [value]=\"unit\"\n >\n {{ unit }}\n </aui-option>\n </aui-select>\n </aui-input-group>\n </div>\n <acl-errors-mapper\n *ngIf=\"\n form.get('requests.memory.value')?.dirty ||\n $any(controlContainer?.formDirective)?.submitted\n \"\n [errors]=\"form.get('requests.memory.value').errors\"\n [errorsMapper]=\"{\n min: requestMemoryMin | pure: getMinOrMaxErrorsMapper: 'min': 'memory': translate.locale,\n max: requestMemoryMax | pure: getMinOrMaxErrorsMapper: 'max': 'memory': translate.locale ,\n }\"\n class=\"tw-text-s tw-text-red\"\n >\n </acl-errors-mapper>\n </div>\n </div>\n </div>\n <div class=\"resource_requirements\">\n <div class=\"input-group-label\">\n {{ 'resource_requirements_limits' | translate }}\n </div>\n <div\n class=\"input-group-wrapper tw-items-start\"\n formGroupName=\"limits\"\n >\n <div class=\"tw-flex tw-flex-col tw-flex-1\">\n <div\n class=\"input-groups-wrapper cpu\"\n [formGroupName]=\"'cpu'\"\n >\n <aui-input-group>\n <div\n auiInputAddonBefore\n class=\"addon-label\"\n [ngClass]=\"{\n 'tw-required-mark': limitCpuRequired\n }\"\n >\n CPU\n </div>\n <input\n aui-input\n type=\"number\"\n auiFormItemControl\n formControlName=\"value\"\n [required]=\"limitCpuRequired\"\n />\n <aui-select\n auiInputAddonAfter\n auiFormItemControl\n formControlName=\"unit\"\n >\n <aui-option\n *ngFor=\"let unit of resourceUnits['cpu']\"\n [value]=\"unit.value\"\n [label]=\"unit.label | translate\"\n >\n {{ unit.label | translate }}\n </aui-option>\n </aui-select>\n </aui-input-group>\n </div>\n <acl-errors-mapper\n *ngIf=\"\n form.get('limits.cpu.value')?.dirty ||\n $any(controlContainer?.formDirective)?.submitted\n \"\n [errors]=\"form.get('limits.cpu.value').errors\"\n [errorsMapper]=\"{\n cpu_max: 'request_greater_than_limits_error' | translate,\n min: limitCpuMin | pure: getMinOrMaxErrorsMapper: 'min': 'cpu': translate.locale,\n max: limitCpuMax | pure: getMinOrMaxErrorsMapper: 'max': 'cpu': translate.locale \n }\"\n class=\"tw-text-s tw-text-red\"\n >\n </acl-errors-mapper>\n </div>\n\n <div class=\"tw-flex tw-flex-col tw-flex-1\">\n <div\n class=\"input-groups-wrapper memory\"\n [formGroupName]=\"'memory'\"\n >\n <aui-input-group>\n <div\n auiInputAddonBefore\n class=\"addon-label\"\n [ngClass]=\"{\n 'tw-required-mark': limitMemoryRequired\n }\"\n >\n {{ 'memory' | translate }}\n </div>\n <input\n aui-input\n type=\"number\"\n auiFormItemControl\n formControlName=\"value\"\n [required]=\"limitMemoryRequired\"\n />\n <aui-select\n auiInputAddonAfter\n auiFormItemControl\n formControlName=\"unit\"\n >\n <aui-option\n *ngFor=\"let unit of resourceUnits['memory']\"\n [value]=\"unit\"\n >\n {{ unit }}\n </aui-option>\n </aui-select>\n </aui-input-group>\n </div>\n <acl-errors-mapper\n *ngIf=\"\n form.get('limits.memory.value')?.dirty ||\n $any(controlContainer?.formDirective)?.submitted\n \"\n [errors]=\"form.get('limits.memory.value').errors\"\n [errorsMapper]=\"{\n memory_max: 'request_greater_than_limits_error' | translate,\n min: limitMemoryMin | pure: getMinOrMaxErrorsMapper: 'min': 'memory': translate.locale,\n max: limitMemoryMax | pure: getMinOrMaxErrorsMapper: 'max': 'memory': translate.locale ,\n }\"\n class=\"tw-text-s tw-text-red\"\n >\n </acl-errors-mapper>\n </div>\n </div>\n </div>\n</form>\n\n<ng-template #readOnlyTemplate>\n <div class=\"resource_requirements-display\">\n <div class=\"resource_requirements-display-item\">\n <label class=\"resource_requirements-display-item__label\">{{\n 'resource_requirements_requests' | translate\n }}</label>\n <aui-icon\n icon=\"prod:cpu\"\n size=\"16px\"\n color=\"#6359b4\"\n margin=\"right\"\n [title]=\"'cpu' | translate\"\n ></aui-icon\n ><span class=\"tw-mr-16\"\n >{{\n form.get('requests').get('cpu').value\n | pure: getResourceValue\n | aclFieldNotAvailable\n }}{{\n form.get('requests').get('cpu.unit').value\n | pure: getCpuUnitLabel\n | translate\n }}\n </span>\n <aui-icon\n icon=\"prod:memory\"\n size=\"16px\"\n color=\"#007cb5\"\n margin=\"right\"\n [title]=\"'memory' | translate\"\n ></aui-icon\n >{{\n form.get('requests').get('memory').value\n | pure: getResourceValue\n | aclFieldNotAvailable\n }}\n </div>\n <div class=\"resource_requirements-display-item\">\n <label class=\"resource_requirements-display-item__label\">{{\n 'resource_requirements_limits' | translate\n }}</label>\n <aui-icon\n icon=\"prod:cpu\"\n size=\"16px\"\n color=\"#6359b4\"\n margin=\"right\"\n [title]=\"'cpu' | translate\"\n ></aui-icon\n ><span class=\"tw-mr-16\"\n >{{\n form.get('limits').get('cpu').value\n | pure: getResourceValue\n | aclFieldNotAvailable\n }}{{\n form.get('limits').get('cpu.unit').value\n | pure: getCpuUnitLabel\n | translate\n }}\n </span>\n <aui-icon\n icon=\"prod:memory\"\n size=\"16px\"\n color=\"#007cb5\"\n margin=\"right\"\n [title]=\"'memory' | translate\"\n ></aui-icon\n >{{\n form.get('limits').get('memory').value\n | pure: getResourceValue\n | aclFieldNotAvailable\n }}\n </div>\n </div>\n</ng-template>\n", styles: [":host .resource_requirements:not(:last-of-type){margin-bottom:8px}:host .input-group-wrapper{display:flex}:host .input-group-label{line-height:var(--aui-inline-height-m)}:host aui-input-group{flex:1}:host aui-input-group ::ng-deep .aui-input-group__addon--after{padding:0}:host aui-input-group ::ng-deep .aui-input-group__addon--after aui-select{width:60px}:host aui-input-group ::ng-deep .aui-input-group__addon--after aui-select .aui-input-group{width:62px}html:not([lang|=zh]) :host aui-input-group ::ng-deep .aui-input-group__addon--after aui-select{width:78px}html:not([lang|=zh]) :host aui-input-group ::ng-deep .aui-input-group__addon--after aui-select .aui-input-group{width:80px}:host aui-input-group ::ng-deep .aui-input-group__addon--after aui-select .aui-input{border:0;background-color:transparent!important;border-top-right-radius:var(--aui-border-radius-m);border-bottom-right-radius:var(--aui-border-radius-m)}:host .addon-label{white-space:nowrap}:host .input-groups-wrapper{display:flex;flex:1;align-items:center}:host .input-groups-wrapper:first-child{margin-right:8px}:host .resource_requirements-display-item{display:flex;font-size:14px;line-height:20px;color:rgb(var(--aui-color-main-text));align-items:center;margin-top:8px}:host .resource_requirements-display-item:first-child{margin-top:0}:host .resource_requirements-display-item__label{white-space:nowrap;margin-right:8px}:host .resource_requirements-display-item__value{min-width:0;flex:1;white-space:nowrap;display:flex}:host .resource_requirements-display-item__value__overflow{display:block;overflow:hidden;text-overflow:ellipsis}:host .resource_requirements-display-item__value__wrap{white-space:pre-wrap;flex-wrap:wrap}:host .resource_requirements-display-item__label,:host .resource_requirements-display-item__value{height:100%;align-items:flex-start}:host ::ng-deep .aui-input-group__addon--before{width:70px}html:not([lang|=zh]) :host ::ng-deep .memory .aui-input-group__addon--before{width:82px}\n"] }]
|
|
514
|
+
}], () => [{ type: i0.Injector }, { type: i1.OperandFieldComponent, decorators: [{
|
|
515
|
+
type: Optional
|
|
516
|
+
}] }, { type: i2.ControlContainer, decorators: [{
|
|
517
|
+
type: Optional
|
|
518
|
+
}] }, { type: i3.TranslateService }], { readOnly: [{
|
|
519
|
+
type: Input
|
|
520
|
+
}], field: [{
|
|
521
|
+
type: Input
|
|
522
|
+
}], minValidator: [], maxValidator: [], getMinOrMaxErrorsMapper: [] }); })();
|
|
523
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ResourceRequirementsComponent, { className: "ResourceRequirementsComponent", filePath: "lib/field-controls/widgets/resource-requirements/resource-requirements.component.ts", lineNumber: 82 }); })();
|
|
524
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcmVxdWlyZW1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3JkLWZvcm0vc3JjL2xpYi9maWVsZC1jb250cm9scy93aWRnZXRzL3Jlc291cmNlLXJlcXVpcmVtZW50cy9yZXNvdXJjZS1yZXF1aXJlbWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jcmQtZm9ybS9zcmMvbGliL2ZpZWxkLWNvbnRyb2xzL3dpZGdldHMvcmVzb3VyY2UtcmVxdWlyZW1lbnRzL3Jlc291cmNlLXJlcXVpcmVtZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLElBQUksRUFDSixTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUdsQixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGdCQUFnQixHQUNqQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBRUwsUUFBUSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxnQkFBZ0IsR0FJakIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxFQUNMLGtDQUFrQyxFQUNsQyxrQ0FBa0MsR0FDbkMsTUFB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Q0FBQztJQUdELHVCQUF1QixDQUNyQixLQUFhLEVBQ2IsSUFBbUIsRUFDbkIsSUFBc0IsRUFDdEIsT0FBZTtRQUVmLE1BQU0sWUFBWSxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUU7WUFDM0MsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztTQUNsRSxDQUFDLENBQUM7SUFDTCxDQUFDOzhGQWpTVSw2QkFBNkI7b0VBQTdCLDZCQUE2QjtZQ3VKMUMsQUF4T0Esa0ZBR0Msb0hBcU84Qjs7O1lBdE9YLEFBQWpCLG9DQUFpQixpQ0FBcUI7OztBRDZRL0I7SUFEUCxJQUFJOzs7O2lFQXVCSjtBQUdPO0lBRFAsSUFBSTs7OztpRUF3Qko7QUF5Q0Q7SUFEQyxJQUFJOzs7OzRFQVdKO2lGQWpTVSw2QkFBNkI7Y0FOekMsU0FBUzsyQkFDRSwrQkFBK0IsbUJBR3hCLHVCQUF1QixDQUFDLE1BQU07O3NCQStFNUMsUUFBUTs7c0JBRVIsUUFBUTtvREF2RVgsUUFBUTtrQkFEUCxLQUFLO1lBSU4sS0FBSztrQkFESixLQUFLO1lBb0xFLFlBQVksTUF5QlosWUFBWSxNQWdFcEIsdUJBQXVCO2tGQXZSWiw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBiaW5kLFxuICBmb3JtYXRDUFUsXG4gIGZvcm1hdE1lbW9yeSxcbiAgZ2V0UmVzb3VyY2VWYWx1ZSxcbiAgZ2V0UmVzb3VyY2VWaWV3TW9kZWwsXG4gIGluaXRHcmVhdGVyVmFsaWRhdG9yLFxuICBSRVNPVVJDRV9NQUNfVFlQRVMsXG4gIFJlc291cmNlUmVxdWlyZW1lbnRGb3JtTW9kYWwsXG4gIFJlc291cmNlUmVxdWlyZW1lbnRTdHJpY3QsXG4gIHJlc291cmNlVW5pdHMsXG4gIHRyYW5zZmVyUmVzb3VyY2UsXG4gIFRyYW5zbGF0ZVNlcnZpY2UsXG59IGZyb20gJ0BhbGF1ZGEtZmUvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xDb250YWluZXIsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IG1lcmdlLCBvbWl0LCBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJhc2VSZXNvdXJjZUZvcm1Hcm91cENvbXBvbmVudCB9IGZyb20gJ25nLXJlc291cmNlLWZvcm0tdXRpbCc7XG5cbmltcG9ydCB7IE9wZXJhbmRGaWVsZCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGdldEZpZWxkRGVzY3JpcHRpb24sIGdldEZpZWxkRGlzcGxheU5hbWUgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBPcGVyYW5kRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9vcGVyYW5kLWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICByZXNvbHZlUmVxdWlyZW1lbnRzUmVxdWlyZWRPcHRpb25zLFxuICByZXNvbHZlUmVxdWlyZW1lbnRzTWluT3JNYXhPcHRpb25zLFxufSBmcm9tICcuLi91dGlscyc7XG5cbnR5cGUgQXZhaWxhYmxlUmVzb3VyY2VUeXBlID0gKHR5cGVvZiBSRVNPVVJDRV9NQUNfVFlQRVMpW251bWJlcl07XG50eXBlIFJlc291cmNlS2luZCA9IGtleW9mIFJlc291cmNlUmVxdWlyZW1lbnRGb3JtTW9kYWw7XG5cbmludGVyZmFjZSBSZXNvdXJjZUNvbnRyb2wge1xuICB2YWx1ZTogc3RyaW5nO1xuICB1bml0OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRpb25FcnJvcnMoXG4gIHZhbHVlQ3RybDogQWJzdHJhY3RDb250cm9sLFxuICBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMsXG4pOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gIC8vIOi/memHjOmBv+WFjeimhuebluWFtuWugyBlcnJvcnNcbiAgY29uc3QgY29tYmluZWRFcnJvcnMgPSB7IC4uLnZhbHVlQ3RybC5lcnJvcnMsIC4uLmVycm9ycyB9O1xuICB2YWx1ZUN0cmwuc2V0RXJyb3JzKGNvbWJpbmVkRXJyb3JzKTtcbiAgcmV0dXJuIGNvbWJpbmVkRXJyb3JzO1xufVxuXG5mdW5jdGlvbiB2YWx1ZUZvcm1hdCh0eXBlOiAnY3B1JyB8ICdtZW1vcnknLCB2YWx1ZTogc3RyaW5nKSB7XG4gIHJldHVybiB0eXBlID09PSAnY3B1JyA/IGZvcm1hdENQVSh2YWx1ZSkgOiBmb3JtYXRNZW1vcnkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50VmFsdWUoXG4gIGdyb3VwOiBGb3JtR3JvdXA8e1xuICAgIHZhbHVlOiBGb3JtQ29udHJvbDxzdHJpbmc+O1xuICAgIHVuaXQ6IEZvcm1Db250cm9sPHN0cmluZz47XG4gIH0+LFxuICB0eXBlOiAnY3B1JyB8ICdtZW1vcnknLFxuKTogbnVtYmVyIHtcbiAgY29uc3QgdmFsdWVDdHJsID0gZ3JvdXAuZ2V0KCd2YWx1ZScpO1xuICBjb25zdCB2YWx1ZSA9IHZhbHVlQ3RybC52YWx1ZTtcbiAgY29uc3QgdW5pdCA9IGdyb3VwLmdldCgndW5pdCcpLnZhbHVlO1xuICByZXR1cm4gdmFsdWVGb3JtYXQodHlwZSwgKHZhbHVlIHx8IDApICsgdW5pdCk7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjbC1jcmQtcmVzb3VyY2UtcmVxdWlyZW1lbnRzJyxcbiAgdGVtcGxhdGVVcmw6ICdyZXNvdXJjZS1yZXF1aXJlbWVudHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsncmVzb3VyY2UtcmVxdWlyZW1lbnRzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBSZXNvdXJjZVJlcXVpcmVtZW50c0NvbXBvbmVudFxuICBleHRlbmRzIEJhc2VSZXNvdXJjZUZvcm1Hcm91cENvbXBvbmVudDxcbiAgICBSZXNvdXJjZVJlcXVpcmVtZW50U3RyaWN0LFxuICAgIFJlc291cmNlUmVxdWlyZW1lbnRGb3JtTW9kYWxcbiAgPlxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBASW5wdXQoKVxuICByZWFkT25seTogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBmaWVsZDogT3BlcmFuZEZpZWxkO1xuXG4gIGdldCByZXF1aXJlZE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHJlc29sdmVSZXF1aXJlbWVudHNSZXF1aXJlZE9wdGlvbnModGhpcy5maWVsZENvbXBvbmVudD8uZmllbGQpO1xuICB9XG5cbiAgZ2V0IGxpbWl0TWVtb3J5UmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZWRPcHRpb25zLnJlcXVpcmVkPy5saW1pdD8uaW5jbHVkZXMoJ21lbW9yeScpO1xuICB9XG5cbiAgZ2V0IGxpbWl0Q3B1UmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZWRPcHRpb25zLnJlcXVpcmVkPy5saW1pdD8uaW5jbHVkZXMoJ2NwdScpO1xuICB9XG5cbiAgZ2V0IHJlcXVlc3RNZW1vcnlSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlZE9wdGlvbnMucmVxdWlyZWQ/LnJlcXVlc3Q/LmluY2x1ZGVzKCdtZW1vcnknKTtcbiAgfVxuXG4gIGdldCByZXF1ZXN0Q3B1UmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZWRPcHRpb25zLnJlcXVpcmVkPy5yZXF1ZXN0Py5pbmNsdWRlcygnY3B1Jyk7XG4gIH1cblxuICBnZXQgbWluTWF4T3B0aW9ucygpIHtcbiAgICByZXR1cm4gcmVzb2x2ZVJlcXVpcmVtZW50c01pbk9yTWF4T3B0aW9ucyh0aGlzLmZpZWxkQ29tcG9uZW50Py5maWVsZCk7XG4gIH1cblxuICBnZXQgbGltaXRNZW1vcnlNaW4oKSB7XG4gICAgcmV0dXJuIHRoaXMubWluTWF4T3B0aW9ucy5taW4ubGltaXRzPy5tZW1vcnk7XG4gIH1cblxuICBnZXQgbGltaXRDcHVNaW4oKSB7XG4gICAgcmV0dXJuIHRoaXMubWluTWF4T3B0aW9ucy5taW4ubGltaXRzPy5jcHU7XG4gIH1cblxuICBnZXQgcmVxdWVzdE1lbW9yeU1pbigpIHtcbiAgICByZXR1cm4gdGhpcy5taW5NYXhPcHRpb25zLm1pbi5yZXF1ZXN0cz8ubWVtb3J5O1xuICB9XG5cbiAgZ2V0IHJlcXVlc3RDcHVNaW4oKSB7XG4gICAgcmV0dXJuIHRoaXMubWluTWF4T3B0aW9ucy5taW4ucmVxdWVzdHM/LmNwdTtcbiAgfVxuXG4gIGdldCBsaW1pdE1lbW9yeU1heCgpIHtcbiAgICByZXR1cm4gdGhpcy5taW5NYXhPcHRpb25zLm1heC5saW1pdHM/Lm1lbW9yeTtcbiAgfVxuXG4gIGdldCBsaW1pdENwdU1heCgpIHtcbiAgICByZXR1cm4gdGhpcy5taW5NYXhPcHRpb25zLm1heC5saW1pdHM/LmNwdTtcbiAgfVxuXG4gIGdldCByZXF1ZXN0TWVtb3J5TWF4KCkge1xuICAgIHJldHVybiB0aGlzLm1pbk1heE9wdGlvbnMubWF4LnJlcXVlc3RzPy5tZW1vcnk7XG4gIH1cblxuICBnZXQgcmVxdWVzdENwdU1heCgpIHtcbiAgICByZXR1cm4gdGhpcy5taW5NYXhPcHRpb25zLm1heC5yZXF1ZXN0cz8uY3B1O1xuICB9XG5cbiAgcmVzb3VyY2VVbml0cyA9IHJlc291cmNlVW5pdHM7XG4gIGdldEZpZWxkRGlzcGxheU5hbWUgPSBnZXRGaWVsZERpc3BsYXlOYW1lO1xuICBnZXRGaWVsZERlc2NyaXB0aW9uID0gZ2V0RmllbGREZXNjcmlwdGlvbjtcbiAgZ2V0UmVzb3VyY2VWYWx1ZSA9IGdldFJlc291cmNlVmFsdWU7XG4gIGdldFJlc291cmNlVmlld01vZGVsID0gZ2V0UmVzb3VyY2VWaWV3TW9kZWw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBPcHRpb25hbCgpXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWVsZENvbXBvbmVudDogT3BlcmFuZEZpZWxkQ29tcG9uZW50LFxuICAgIEBPcHRpb25hbCgpXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgcHVibGljIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICBjb25zdCBncmVhdGVyVmFsaWRhdG9yU3Vic2NyaXB0aW9ucyA9IFtcbiAgICAgIGluaXRHcmVhdGVyVmFsaWRhdG9yKCdjcHUnLCB0aGlzLmZvcm0pLFxuICAgICAgaW5pdEdyZWF0ZXJWYWxpZGF0b3IoJ21lbW9yeScsIHRoaXMuZm9ybSksXG4gICAgXTtcbiAgICB0aGlzLmRlc3Ryb3kkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBncmVhdGVyVmFsaWRhdG9yU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVGb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGxpbWl0czogdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIGNwdTogdGhpcy5mYi5ncm91cChcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgICB1bml0OiAnYycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWxpZGF0b3JzOiBbXG4gICAgICAgICAgICAgIHRoaXMubWluVmFsaWRhdG9yKHRoaXMubGltaXRDcHVNaW4sICdjcHUnKSxcbiAgICAgICAgICAgICAgdGhpcy5tYXhWYWxpZGF0b3IodGhpcy5saW1pdENwdU1heCwgJ2NwdScpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgICBtZW1vcnk6IHRoaXMuZmIuZ3JvdXAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgdW5pdDogJ01pJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtcbiAgICAgICAgICAgICAgdGhpcy5taW5WYWxpZGF0b3IodGhpcy5saW1pdE1lbW9yeU1pbiwgJ21lbW9yeScpLFxuICAgICAgICAgICAgICB0aGlzLm1heFZhbGlkYXRvcih0aGlzLmxpbWl0TWVtb3J5TWF4LCAnbWVtb3J5JyksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICAgIHJlcXVlc3RzOiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgY3B1OiB0aGlzLmZiLmdyb3VwKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICAgIHVuaXQ6ICdjJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtcbiAgICAgICAgICAgICAgdGhpcy5taW5WYWxpZGF0b3IodGhpcy5yZXF1ZXN0Q3B1TWluLCAnY3B1JyksXG4gICAgICAgICAgICAgIHRoaXMubWF4VmFsaWRhdG9yKHRoaXMucmVxdWVzdENwdU1heCwgJ2NwdScpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgICBtZW1vcnk6IHRoaXMuZmIuZ3JvdXAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgdW5pdDogJ01pJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtcbiAgICAgICAgICAgICAgdGhpcy5taW5WYWxpZGF0b3IodGhpcy5yZXF1ZXN0TWVtb3J5TWluLCAnbWVtb3J5JyksXG4gICAgICAgICAgICAgIHRoaXMubWF4VmFsaWRhdG9yKHRoaXMucmVxdWVzdE1lbW9yeU1heCwgJ21lbW9yeScpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBnZXREZWZhdWx0Rm9ybU1vZGVsKCk6IFJlc291cmNlUmVxdWlyZW1lbnRGb3JtTW9kYWwge1xuICAgIHJldHVybiB7XG4gICAgICBsaW1pdHM6IHtcbiAgICAgICAgY3B1OiB7XG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIHVuaXQ6ICdjJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVtb3J5OiB7XG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIHVuaXQ6ICdNaScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcmVxdWVzdHM6IHtcbiAgICAgICAgY3B1OiB7XG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIHVuaXQ6ICdjJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVtb3J5OiB7XG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIHVuaXQ6ICdNaScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBvdmVycmlkZSBhZGFwdEZvcm1Nb2RlbChcbiAgICBmb3JtTW9kZWw6IFJlc291cmNlUmVxdWlyZW1lbnRGb3JtTW9kYWwsXG4gICk6IFJlc291cmNlUmVxdWlyZW1lbnRTdHJpY3Qge1xuICAgIHRoaXMuZm9ybWF0Rm9ybU1vZGVsKGZvcm1Nb2RlbCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVlc3RzOiB0cmFuc2ZlclJlc291cmNlKGZvcm1Nb2RlbC5yZXF1ZXN0cyksXG4gICAgICBsaW1pdHM6IHRyYW5zZmVyUmVzb3VyY2UoZm9ybU1vZGVsLmxpbWl0cyksXG4gICAgfTtcbiAgfVxuXG4gIEBiaW5kXG4gIHByaXZhdGUgbWluVmFsaWRhdG9yKG1pbjogc3RyaW5nLCB0eXBlOiAnY3B1JyB8ICdtZW1vcnknKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGdyb3VwOiBGb3JtR3JvdXA8e1xuICAgICAgICB2YWx1ZTogRm9ybUNvbnRyb2w8c3RyaW5nPjtcbiAgICAgICAgdW5pdDogRm9ybUNvbnRyb2w8c3RyaW5nPjtcbiAgICAgIH0+LFxuICAgICk6IFZhbGlkYXRpb25FcnJvcnMgPT4ge1xuICAgICAgaWYgKCFtaW4pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlQ3RybCA9IGdyb3VwLmdldCgndmFsdWUnKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGdldEN1cnJlbnRWYWx1ZShncm91cCwgdHlwZSk7XG4gICAgICBjb25zdCBtaW5UaHJlc2hvbGQgPSB2YWx1ZUZvcm1hdCh0eXBlLCBtaW4pO1xuXG4gICAgICBpZiAoY3VycmVudFZhbHVlIDwgbWluVGhyZXNob2xkKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVWYWxpZGF0aW9uRXJyb3JzKHZhbHVlQ3RybCwgeyBtaW46IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBlcnJvcnMgPSBvbWl0KHZhbHVlQ3RybC5lcnJvcnMsICdtaW4nKTtcbiAgICAgIHZhbHVlQ3RybC5zZXRFcnJvcnMoaXNFbXB0eShlcnJvcnMpID8gbnVsbCA6IGVycm9ycyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgQGJpbmRcbiAgcHJpdmF0ZSBtYXhWYWxpZGF0b3IobWF4OiBzdHJpbmcsIHR5cGU6ICdjcHUnIHwgJ21lbW9yeScpIHtcbiAgICByZXR1cm4gKFxuICAgICAgZ3JvdXA6IEZvcm1Hcm91cDx7XG4gICAgICAgIHZhbHVlOiBGb3JtQ29udHJvbDxzdHJpbmc+O1xuICAgICAgICB1bml0OiBGb3JtQ29udHJvbDxzdHJpbmc+O1xuICAgICAgfT4sXG4gICAgKTogVmFsaWRhdGlvbkVycm9ycyA9PiB7XG4gICAgICBpZiAoIW1heCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWVDdHJsID0gZ3JvdXAuZ2V0KCd2YWx1ZScpO1xuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gZ2V0Q3VycmVudFZhbHVlKGdyb3VwLCB0eXBlKTtcbiAgICAgIGNvbnN0IG1heFRocmVzaG9sZCA9IHZhbHVlRm9ybWF0KHR5cGUsIG1heCk7XG5cbiAgICAgIGlmIChjdXJyZW50VmFsdWUgPiBtYXhUaHJlc2hvbGQpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVZhbGlkYXRpb25FcnJvcnModmFsdWVDdHJsLCB7IG1heDogdHJ1ZSB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXJyb3JzID0gb21pdCh2YWx1ZUN0cmwuZXJyb3JzLCAnbWF4Jyk7XG4gICAgICB2YWx1ZUN0cmwuc2V0RXJyb3JzKGlzRW1wdHkoZXJyb3JzKSA/IG51bGwgOiBlcnJvcnMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIGZvcm1hdEZvcm1Nb2RlbChmb3JtTW9kZWw6IFJlc291cmNlUmVxdWlyZW1lbnRGb3JtTW9kYWwpIHtcbiAgICBPYmplY3QudmFsdWVzKGZvcm1Nb2RlbCkuZm9yRWFjaChtb2RlbFZhbHVlID0+IHtcbiAgICAgIE9iamVjdC52YWx1ZXMobW9kZWxWYWx1ZSkuZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgdi52YWx1ZSA9IGAke3YudmFsdWV9YDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q3B1VW5pdExhYmVsKHZhbHVlOiAnbScgfCAnYycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09ICdtJ1xuICAgICAgPyAnJ1xuICAgICAgOiByZXNvdXJjZVVuaXRzLmNwdS5maW5kKHVuaXQgPT4gdW5pdC52YWx1ZSA9PT0gdmFsdWUpLmxhYmVsO1xuICB9XG5cbiAgb3ZlcnJpZGUgYWRhcHRSZXNvdXJjZU1vZGVsKFxuICAgIHJlc291cmNlczogUmVzb3VyY2VSZXF1aXJlbWVudFN0cmljdCxcbiAgKTogUmVzb3VyY2VSZXF1aXJlbWVudEZvcm1Nb2RhbCB7XG4gICAgY29uc3QgcmVzb3VyY2VzTW9kZWwgPSB7fSBhcyBSZXNvdXJjZVJlcXVpcmVtZW50Rm9ybU1vZGFsO1xuICAgIGlmIChyZXNvdXJjZXMpIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlc291cmNlcykuZm9yRWFjaChraW5kID0+IHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VLaW5kID0ga2luZCBhcyBSZXNvdXJjZUtpbmQ7XG4gICAgICAgIHJlc291cmNlc01vZGVsW3Jlc291cmNlS2luZF0gPSBPYmplY3Qua2V5cyhyZXNvdXJjZXNbcmVzb3VyY2VLaW5kXSlcbiAgICAgICAgICAuZmlsdGVyKGtleSA9PlxuICAgICAgICAgICAgUkVTT1VSQ0VfTUFDX1RZUEVTLmluY2x1ZGVzKGtleSBhcyBBdmFpbGFibGVSZXNvdXJjZVR5cGUpLFxuICAgICAgICAgIClcbiAgICAgICAgICAucmVkdWNlKChpdGVtLCB0eXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNvdXJjZVR5cGUgPSB0eXBlIGFzIEF2YWlsYWJsZVJlc291cmNlVHlwZTtcbiAgICAgICAgICAgIGl0ZW1bcmVzb3VyY2VUeXBlXSA9IGdldFJlc291cmNlVmlld01vZGVsKFxuICAgICAgICAgICAgICByZXNvdXJjZXNbcmVzb3VyY2VLaW5kXVtyZXNvdXJjZVR5cGVdLFxuICAgICAgICAgICAgICByZXNvdXJjZVR5cGUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgfSwge30gYXMgUmVjb3JkPEF2YWlsYWJsZVJlc291cmNlVHlwZSwgUmVzb3VyY2VDb250cm9sPik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlKHRoaXMuZ2V0RGVmYXVsdEZvcm1Nb2RlbCgpLCByZXNvdXJjZXNNb2RlbCk7XG4gIH1cblxuICBAYmluZFxuICBnZXRNaW5Pck1heEVycm9yc01hcHBlcihcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIGtpbmQ6ICdtaW4nIHwgJ21heCcsXG4gICAgdHlwZTogJ2NwdScgfCAnbWVtb3J5JyxcbiAgICBfbG9jYWxlOiBzdHJpbmcsXG4gICkge1xuICAgIGNvbnN0IHJlc291cmNlQ3RybCA9IGdldFJlc291cmNlVmlld01vZGVsKHZhbHVlLCB0eXBlKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZ2V0KGB3YXJuaW5nXyR7a2luZH1gLCB7XG4gICAgICB2YWx1ZTogcmVzb3VyY2VDdHJsLnZhbHVlICsgdGhpcy50cmFuc2xhdGUuZ2V0KHJlc291cmNlQ3RybC51bml0KSxcbiAgICB9KTtcbiAgfVxufVxuIiwiPGZvcm1cbiAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgKm5nSWY9XCIhcmVhZE9ubHk7IGVsc2UgcmVhZE9ubHlUZW1wbGF0ZVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJyZXNvdXJjZV9yZXF1aXJlbWVudHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtbGFiZWxcIj5cbiAgICAgIHt7ICdyZXNvdXJjZV9yZXF1aXJlbWVudHNfcmVxdWVzdHMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJpbnB1dC1ncm91cC13cmFwcGVyIHR3LWl0ZW1zLXN0YXJ0XCJcbiAgICAgIGZvcm1Hcm91cE5hbWU9XCJyZXF1ZXN0c1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInR3LWZsZXggdHctZmxleC1jb2wgdHctZmxleC0xXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImlucHV0LWdyb3Vwcy13cmFwcGVyIGNwdVwiXG4gICAgICAgICAgZm9ybUdyb3VwTmFtZT1cImNwdVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXVpLWlucHV0LWdyb3VwPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBhdWlJbnB1dEFkZG9uQmVmb3JlXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWRkb24tbGFiZWxcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ3R3LXJlcXVpcmVkLW1hcmsnOiByZXF1ZXN0Q3B1UmVxdWlyZWRcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENQVVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgYXVpLWlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWVzdENwdVJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInZhbHVlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8YXVpLXNlbGVjdFxuICAgICAgICAgICAgICBhdWlJbnB1dEFkZG9uQWZ0ZXJcbiAgICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInVuaXRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8YXVpLW9wdGlvblxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB1bml0IG9mIHJlc291cmNlVW5pdHNbJ2NwdSddXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwidW5pdC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInVuaXQubGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgdW5pdC5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2F1aS1vcHRpb24+XG4gICAgICAgICAgICA8L2F1aS1zZWxlY3Q+XG4gICAgICAgICAgPC9hdWktaW5wdXQtZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YWNsLWVycm9ycy1tYXBwZXJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgZm9ybS5nZXQoJ3JlcXVlc3RzLmNwdS52YWx1ZScpPy5kaXJ0eSB8fFxuICAgICAgICAgICAgJGFueShjb250cm9sQ29udGFpbmVyPy5mb3JtRGlyZWN0aXZlKT8uc3VibWl0dGVkXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZXJyb3JzXT1cImZvcm0uZ2V0KCdyZXF1ZXN0cy5jcHUudmFsdWUnKS5lcnJvcnNcIlxuICAgICAgICAgIFtlcnJvcnNNYXBwZXJdPVwie1xuICAgICAgICAgICAgbWluOiByZXF1ZXN0Q3B1TWluIHwgcHVyZTogZ2V0TWluT3JNYXhFcnJvcnNNYXBwZXI6ICdtaW4nOiAnY3B1JzogdHJhbnNsYXRlLmxvY2FsZSxcbiAgICAgICAgICAgIG1heDogcmVxdWVzdENwdU1heCB8IHB1cmU6IGdldE1pbk9yTWF4RXJyb3JzTWFwcGVyOiAnbWF4JzogJ2NwdSc6IHRyYW5zbGF0ZS5sb2NhbGUsXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgY2xhc3M9XCJ0dy10ZXh0LXMgdHctdGV4dC1yZWRcIlxuICAgICAgICA+XG4gICAgICAgIDwvYWNsLWVycm9ycy1tYXBwZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInR3LWZsZXggdHctZmxleC1jb2wgdHctZmxleC0xXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImlucHV0LWdyb3Vwcy13cmFwcGVyIG1lbW9yeVwiXG4gICAgICAgICAgW2Zvcm1Hcm91cE5hbWVdPVwiJ21lbW9yeSdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGF1aS1pbnB1dC1ncm91cD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgYXVpSW5wdXRBZGRvbkJlZm9yZVxuICAgICAgICAgICAgICBjbGFzcz1cImFkZG9uLWxhYmVsXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICd0dy1yZXF1aXJlZC1tYXJrJzogcmVxdWVzdE1lbW9yeVJlcXVpcmVkXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnbWVtb3J5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgYXVpLWlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWVzdE1lbW9yeVJlcXVpcmVkXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8YXVpLXNlbGVjdFxuICAgICAgICAgICAgICBhdWlJbnB1dEFkZG9uQWZ0ZXJcbiAgICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInVuaXRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8YXVpLW9wdGlvblxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB1bml0IG9mIHJlc291cmNlVW5pdHNbJ21lbW9yeSddXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwidW5pdFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyB1bml0IH19XG4gICAgICAgICAgICAgIDwvYXVpLW9wdGlvbj5cbiAgICAgICAgICAgIDwvYXVpLXNlbGVjdD5cbiAgICAgICAgICA8L2F1aS1pbnB1dC1ncm91cD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxhY2wtZXJyb3JzLW1hcHBlclxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBmb3JtLmdldCgncmVxdWVzdHMubWVtb3J5LnZhbHVlJyk/LmRpcnR5IHx8XG4gICAgICAgICAgICAkYW55KGNvbnRyb2xDb250YWluZXI/LmZvcm1EaXJlY3RpdmUpPy5zdWJtaXR0ZWRcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtlcnJvcnNdPVwiZm9ybS5nZXQoJ3JlcXVlc3RzLm1lbW9yeS52YWx1ZScpLmVycm9yc1wiXG4gICAgICAgICAgW2Vycm9yc01hcHBlcl09XCJ7XG4gICAgICAgICAgICBtaW46IHJlcXVlc3RNZW1vcnlNaW4gfCBwdXJlOiBnZXRNaW5Pck1heEVycm9yc01hcHBlcjogJ21pbic6ICdtZW1vcnknOiB0cmFuc2xhdGUubG9jYWxlLFxuICAgICAgICAgICAgbWF4OiByZXF1ZXN0TWVtb3J5TWF4IHwgcHVyZTogZ2V0TWluT3JNYXhFcnJvcnNNYXBwZXI6ICdtYXgnOiAnbWVtb3J5JzogdHJhbnNsYXRlLmxvY2FsZSAsXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgY2xhc3M9XCJ0dy10ZXh0LXMgdHctdGV4dC1yZWRcIlxuICAgICAgICA+XG4gICAgICAgIDwvYWNsLWVycm9ycy1tYXBwZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJyZXNvdXJjZV9yZXF1aXJlbWVudHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtbGFiZWxcIj5cbiAgICAgIHt7ICdyZXNvdXJjZV9yZXF1aXJlbWVudHNfbGltaXRzJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiaW5wdXQtZ3JvdXAtd3JhcHBlciB0dy1pdGVtcy1zdGFydFwiXG4gICAgICBmb3JtR3JvdXBOYW1lPVwibGltaXRzXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwidHctZmxleCB0dy1mbGV4LWNvbCB0dy1mbGV4LTFcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiaW5wdXQtZ3JvdXBzLXdyYXBwZXIgY3B1XCJcbiAgICAgICAgICBbZm9ybUdyb3VwTmFtZV09XCInY3B1J1wiXG4gICAgICAgID5cbiAgICAgICAgICA8YXVpLWlucHV0LWdyb3VwPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBhdWlJbnB1dEFkZG9uQmVmb3JlXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWRkb24tbGFiZWxcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ3R3LXJlcXVpcmVkLW1hcmsnOiBsaW1pdENwdVJlcXVpcmVkXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBDUFVcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGF1aS1pbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImxpbWl0Q3B1UmVxdWlyZWRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxhdWktc2VsZWN0XG4gICAgICAgICAgICAgIGF1aUlucHV0QWRkb25BZnRlclxuICAgICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidW5pdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxhdWktb3B0aW9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHVuaXQgb2YgcmVzb3VyY2VVbml0c1snY3B1J11cIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ1bml0LnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwidW5pdC5sYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyB1bml0LmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYXVpLW9wdGlvbj5cbiAgICAgICAgICAgIDwvYXVpLXNlbGVjdD5cbiAgICAgICAgICA8L2F1aS1pbnB1dC1ncm91cD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxhY2wtZXJyb3JzLW1hcHBlclxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBmb3JtLmdldCgnbGltaXRzLmNwdS52YWx1ZScpPy5kaXJ0eSB8fFxuICAgICAgICAgICAgJGFueShjb250cm9sQ29udGFpbmVyPy5mb3JtRGlyZWN0aXZlKT8uc3VibWl0dGVkXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZXJyb3JzXT1cImZvcm0uZ2V0KCdsaW1pdHMuY3B1LnZhbHVlJykuZXJyb3JzXCJcbiAgICAgICAgICBbZXJyb3JzTWFwcGVyXT1cIntcbiAgICAgICAgICAgIGNwdV9tYXg6ICdyZXF1ZXN0X2dyZWF0ZXJfdGhhbl9saW1pdHNfZXJyb3InIHwgdHJhbnNsYXRlLFxuICAgICAgICAgICAgbWluOiBsaW1pdENwdU1pbiB8IHB1cmU6IGdldE1pbk9yTWF4RXJyb3JzTWFwcGVyOiAnbWluJzogJ2NwdSc6IHRyYW5zbGF0ZS5sb2NhbGUsXG4gICAgICAgICAgICBtYXg6IGxpbWl0Q3B1TWF4IHwgcHVyZTogZ2V0TWluT3JNYXhFcnJvcnNNYXBwZXI6ICdtYXgnOiAnY3B1JzogdHJhbnNsYXRlLmxvY2FsZSBcbiAgICAgICAgICB9XCJcbiAgICAgICAgICBjbGFzcz1cInR3LXRleHQtcyB0dy10ZXh0LXJlZFwiXG4gICAgICAgID5cbiAgICAgICAgPC9hY2wtZXJyb3JzLW1hcHBlcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidHctZmxleCB0dy1mbGV4LWNvbCB0dy1mbGV4LTFcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiaW5wdXQtZ3JvdXBzLXdyYXBwZXIgbWVtb3J5XCJcbiAgICAgICAgICBbZm9ybUdyb3VwTmFtZV09XCInbWVtb3J5J1wiXG4gICAgICAgID5cbiAgICAgICAgICA8YXVpLWlucHV0LWdyb3VwPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBhdWlJbnB1dEFkZG9uQmVmb3JlXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWRkb24tbGFiZWxcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ3R3LXJlcXVpcmVkLW1hcmsnOiBsaW1pdE1lbW9yeVJlcXVpcmVkXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnbWVtb3J5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgYXVpLWlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwibGltaXRNZW1vcnlSZXF1aXJlZFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGF1aS1zZWxlY3RcbiAgICAgICAgICAgICAgYXVpSW5wdXRBZGRvbkFmdGVyXG4gICAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ1bml0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF1aS1vcHRpb25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdW5pdCBvZiByZXNvdXJjZVVuaXRzWydtZW1vcnknXVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInVuaXRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgdW5pdCB9fVxuICAgICAgICAgICAgICA8L2F1aS1vcHRpb24+XG4gICAgICAgICAgICA8L2F1aS1zZWxlY3Q+XG4gICAgICAgICAgPC9hdWktaW5wdXQtZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YWNsLWVycm9ycy1tYXBwZXJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgZm9ybS5nZXQoJ2xpbWl0cy5tZW1vcnkudmFsdWUnKT8uZGlydHkgfHxcbiAgICAgICAgICAgICRhbnkoY29udHJvbENvbnRhaW5lcj8uZm9ybURpcmVjdGl2ZSk/LnN1Ym1pdHRlZFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2Vycm9yc109XCJmb3JtLmdldCgnbGltaXRzLm1lbW9yeS52YWx1ZScpLmVycm9yc1wiXG4gICAgICAgICAgW2Vycm9yc01hcHBlcl09XCJ7XG4gICAgICAgICAgICBtZW1vcnlfbWF4OiAncmVxdWVzdF9ncmVhdGVyX3RoYW5fbGltaXRzX2Vycm9yJyB8IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1pbjogbGltaXRNZW1vcnlNaW4gfCBwdXJlOiBnZXRNaW5Pck1heEVycm9yc01hcHBlcjogJ21pbic6ICdtZW1vcnknOiB0cmFuc2xhdGUubG9jYWxlLFxuICAgICAgICAgICAgbWF4OiBsaW1pdE1lbW9yeU1heCB8IHB1cmU6IGdldE1pbk9yTWF4RXJyb3JzTWFwcGVyOiAnbWF4JzogJ21lbW9yeSc6IHRyYW5zbGF0ZS5sb2NhbGUgLFxuICAgICAgICAgIH1cIlxuICAgICAgICAgIGNsYXNzPVwidHctdGV4dC1zIHR3LXRleHQtcmVkXCJcbiAgICAgICAgPlxuICAgICAgICA8L2FjbC1lcnJvcnMtbWFwcGVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9mb3JtPlxuXG48bmctdGVtcGxhdGUgI3JlYWRPbmx5VGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJyZXNvdXJjZV9yZXF1aXJlbWVudHMtZGlzcGxheVwiPlxuICAgIDxkaXYgY2xhc3M9XCJyZXNvdXJjZV9yZXF1aXJlbWVudHMtZGlzcGxheS1pdGVtXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJyZXNvdXJjZV9yZXF1aXJlbWVudHMtZGlzcGxheS1pdGVtX19sYWJlbFwiPnt7XG4gICAgICAgICdyZXNvdXJjZV9yZXF1aXJlbWVudHNfcmVxdWVzdHMnIHwgdHJhbnNsYXRlXG4gICAgICB9fTwvbGFiZWw+XG4gICAgICA8YXVpLWljb25cbiAgICAgICAgaWNvbj1cInByb2Q6Y3B1XCJcbiAgICAgICAgc2l6ZT1cIjE2cHhcIlxuICAgICAgICBjb2xvcj1cIiM2MzU5YjRcIlxuICAgICAgICBtYXJnaW49XCJyaWdodFwiXG4gICAgICAgIFt0aXRsZV09XCInY3B1JyB8IHRyYW5zbGF0ZVwiXG4gICAgICA+PC9hdWktaWNvblxuICAgICAgPjxzcGFuIGNsYXNzPVwidHctbXItMTZcIlxuICAgICAgICA+e3tcbiAgICAgICAgICBmb3JtLmdldCgncmVxdWVzdHMnKS5nZXQoJ2NwdScpLnZhbHVlXG4gICAgICAgICAgICB8IHB1cmU6IGdldFJlc291cmNlVmFsdWVcbiAgICAgICAgICAgIHwgYWNsRmllbGROb3RBdmFpbGFibGVcbiAgICAgICAgfX17e1xuICAgICAgICAgIGZvcm0uZ2V0KCdyZXF1ZXN0cycpLmdldCgnY3B1LnVuaXQnKS52YWx1ZVxuICAgICAgICAgICAgfCBwdXJlOiBnZXRDcHVVbml0TGFiZWxcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8YXVpLWljb25cbiAgICAgICAgaWNvbj1cInByb2Q6bWVtb3J5XCJcbiAgICAgICAgc2l6ZT1cIjE2cHhcIlxuICAgICAgICBjb2xvcj1cIiMwMDdjYjVcIlxuICAgICAgICBtYXJnaW49XCJyaWdodFwiXG4gICAgICAgIFt0aXRsZV09XCInbWVtb3J5JyB8IHRyYW5zbGF0ZVwiXG4gICAgICA+PC9hdWktaWNvblxuICAgICAgPnt7XG4gICAgICAgIGZvcm0uZ2V0KCdyZXF1ZXN0cycpLmdldCgnbWVtb3J5JykudmFsdWVcbiAgICAgICAgICB8IHB1cmU6IGdldFJlc291cmNlVmFsdWVcbiAgICAgICAgICB8IGFjbEZpZWxkTm90QXZhaWxhYmxlXG4gICAgICB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyZXNvdXJjZV9yZXF1aXJlbWVudHMtZGlzcGxheS1pdGVtXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJyZXNvdXJjZV9yZXF1aXJlbWVudHMtZGlzcGxheS1pdGVtX19sYWJlbFwiPnt7XG4gICAgICAgICdyZXNvdXJjZV9yZXF1aXJlbWVudHNfbGltaXRzJyB8IHRyYW5zbGF0ZVxuICAgICAgfX08L2xhYmVsPlxuICAgICAgPGF1aS1pY29uXG4gICAgICAgIGljb249XCJwcm9kOmNwdVwiXG4gICAgICAgIHNpemU9XCIxNnB4XCJcbiAgICAgICAgY29sb3I9XCIjNjM1OWI0XCJcbiAgICAgICAgbWFyZ2luPVwicmlnaHRcIlxuICAgICAgICBbdGl0bGVdPVwiJ2NwdScgfCB0cmFuc2xhdGVcIlxuICAgICAgPjwvYXVpLWljb25cbiAgICAgID48c3BhbiBjbGFzcz1cInR3LW1yLTE2XCJcbiAgICAgICAgPnt7XG4gICAgICAgICAgZm9ybS5nZXQoJ2xpbWl0cycpLmdldCgnY3B1JykudmFsdWVcbiAgICAgICAgICAgIHwgcHVyZTogZ2V0UmVzb3VyY2VWYWx1ZVxuICAgICAgICAgICAgfCBhY2xGaWVsZE5vdEF2YWlsYWJsZVxuICAgICAgICB9fXt7XG4gICAgICAgICAgZm9ybS5nZXQoJ2xpbWl0cycpLmdldCgnY3B1LnVuaXQnKS52YWx1ZVxuICAgICAgICAgICAgfCBwdXJlOiBnZXRDcHVVbml0TGFiZWxcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8YXVpLWljb25cbiAgICAgICAgaWNvbj1cInByb2Q6bWVtb3J5XCJcbiAgICAgICAgc2l6ZT1cIjE2cHhcIlxuICAgICAgICBjb2xvcj1cIiMwMDdjYjVcIlxuICAgICAgICBtYXJnaW49XCJyaWdodFwiXG4gICAgICAgIFt0aXRsZV09XCInbWVtb3J5JyB8IHRyYW5zbGF0ZVwiXG4gICAgICA+PC9hdWktaWNvblxuICAgICAgPnt7XG4gICAgICAgIGZvcm0uZ2V0KCdsaW1pdHMnKS5nZXQoJ21lbW9yeScpLnZhbHVlXG4gICAgICAgICAgfCBwdXJlOiBnZXRSZXNvdXJjZVZhbHVlXG4gICAgICAgICAgfCBhY2xGaWVsZE5vdEF2YWlsYWJsZVxuICAgICAgfX1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|