@1money/component-ui 0.0.75 → 0.0.76
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/es/components/ProForm/ProForm.js +46 -33
- package/es/components/ProForm/ProFormDependency.js +6 -16
- package/es/components/ProForm/ProFormItem.js +5 -7
- package/es/components/ProForm/ProFormList.js +112 -40
- package/es/components/ProForm/core/constants.d.ts +2 -0
- package/es/components/ProForm/core/constants.js +7 -1
- package/es/components/ProForm/core/devWarning.d.ts +3 -0
- package/es/components/ProForm/core/devWarning.js +22 -0
- package/es/components/ProForm/core/formStore.d.ts +10 -2
- package/es/components/ProForm/core/formStore.js +21 -2
- package/es/components/ProForm/core/hooks/useForm.js +246 -103
- package/es/components/ProForm/core/hooks/useFormCore.js +134 -28
- package/es/components/ProForm/core/interface.d.ts +124 -49
- package/es/components/ProForm/core/runRules.d.ts +44 -12
- package/es/components/ProForm/core/runRules.js +584 -133
- package/es/components/ProForm/core/useFormItem.d.ts +6 -7
- package/es/components/ProForm/core/useFormItem.js +44 -22
- package/es/components/ProForm/core/validationError.d.ts +13 -0
- package/es/components/ProForm/core/validationError.js +29 -0
- package/es/components/ProForm/fields/ProFormCheckboxGroup.js +19 -5
- package/es/components/ProForm/fields/ProFormFieldSet.js +51 -12
- package/es/components/ProForm/fields/ProFormRadioGroup.js +8 -3
- package/es/components/ProForm/fields/ProFormSelect.js +13 -7
- package/es/components/ProForm/fields/createProFormField.js +18 -25
- package/es/components/ProForm/hooks/useFieldRequest.js +10 -8
- package/es/components/ProForm/index.d.ts +2 -1
- package/es/components/ProForm/index.js +4 -1
- package/es/components/ProForm/interface.d.ts +31 -40
- package/es/components/ProForm/layouts/QueryFilter.js +24 -16
- package/es/components/ProForm/utils.d.ts +8 -0
- package/es/components/ProForm/utils.js +51 -3
- package/es/components/Table/core/useTableSetup.js +2 -2
- package/es/components/Table/interface.d.ts +1 -1
- package/es/index.css +1 -1
- package/lib/components/ProForm/ProForm.js +45 -32
- package/lib/components/ProForm/ProFormDependency.js +5 -15
- package/lib/components/ProForm/ProFormItem.js +5 -7
- package/lib/components/ProForm/ProFormList.js +110 -38
- package/lib/components/ProForm/core/constants.d.ts +2 -0
- package/lib/components/ProForm/core/constants.js +8 -2
- package/lib/components/ProForm/core/devWarning.d.ts +3 -0
- package/lib/components/ProForm/core/devWarning.js +29 -0
- package/lib/components/ProForm/core/formStore.d.ts +10 -2
- package/lib/components/ProForm/core/formStore.js +23 -2
- package/lib/components/ProForm/core/hooks/useForm.js +242 -99
- package/lib/components/ProForm/core/hooks/useFormCore.js +133 -27
- package/lib/components/ProForm/core/interface.d.ts +124 -49
- package/lib/components/ProForm/core/runRules.d.ts +44 -12
- package/lib/components/ProForm/core/runRules.js +587 -133
- package/lib/components/ProForm/core/useFormItem.d.ts +6 -7
- package/lib/components/ProForm/core/useFormItem.js +43 -21
- package/lib/components/ProForm/core/validationError.d.ts +13 -0
- package/lib/components/ProForm/core/validationError.js +36 -0
- package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +18 -4
- package/lib/components/ProForm/fields/ProFormFieldSet.js +51 -12
- package/lib/components/ProForm/fields/ProFormRadioGroup.js +7 -2
- package/lib/components/ProForm/fields/ProFormSelect.js +13 -7
- package/lib/components/ProForm/fields/createProFormField.js +18 -25
- package/lib/components/ProForm/hooks/useFieldRequest.js +10 -8
- package/lib/components/ProForm/index.d.ts +2 -1
- package/lib/components/ProForm/index.js +10 -1
- package/lib/components/ProForm/interface.d.ts +31 -40
- package/lib/components/ProForm/layouts/QueryFilter.js +24 -16
- package/lib/components/ProForm/utils.d.ts +8 -0
- package/lib/components/ProForm/utils.js +52 -3
- package/lib/components/Table/core/useTableSetup.js +2 -2
- package/lib/components/Table/interface.d.ts +1 -1
- package/lib/index.css +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server/examples.generated.json +42 -36
- package/scripts/mcp-server/index.generated.json +23 -67
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
1
2
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
3
|
import { useMemo, useRef } from 'react';
|
|
3
4
|
import useEventCallback from '@1money/hooks/useEventCallback';
|
|
4
5
|
import useMemoizedFn from '@1money/hooks/useMemoizedFn';
|
|
5
6
|
import { resolveValue, setNestedValue } from '../pathUtils';
|
|
6
7
|
import { runRulesSync } from '../runRules';
|
|
7
|
-
import { createFormStore } from '../formStore';
|
|
8
|
+
import { createFormStore, sameValidationNode } from '../formStore';
|
|
8
9
|
export var useFormCore = function useFormCore() {
|
|
9
10
|
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
10
11
|
var _config$initialValues = config.initialValues,
|
|
@@ -19,10 +20,6 @@ export var useFormCore = function useFormCore() {
|
|
|
19
20
|
labelAlign = _config$labelAlign === void 0 ? 'left' : _config$labelAlign,
|
|
20
21
|
_config$disabled = config.disabled,
|
|
21
22
|
disabled = _config$disabled === void 0 ? false : _config$disabled,
|
|
22
|
-
_config$colon = config.colon,
|
|
23
|
-
colon = _config$colon === void 0 ? true : _config$colon,
|
|
24
|
-
_config$requiredMark = config.requiredMark,
|
|
25
|
-
requiredMark = _config$requiredMark === void 0 ? true : _config$requiredMark,
|
|
26
23
|
_config$validateTrigg = config.validateTrigger,
|
|
27
24
|
validateTrigger = _config$validateTrigg === void 0 ? 'onChange' : _config$validateTrigg;
|
|
28
25
|
// initialValues is MOUNT-ONLY (the documented contract): freeze the first
|
|
@@ -48,26 +45,57 @@ export var useFormCore = function useFormCore() {
|
|
|
48
45
|
// not trigger renders, and submit-time validation must always read the latest
|
|
49
46
|
// rules (they can change between renders, e.g. a conditional `required`).
|
|
50
47
|
var fieldRulesRef = useRef({});
|
|
48
|
+
// Per-field validation run epochs. EVERY validation run (sync or async)
|
|
49
|
+
// bumps its field's epoch; an async run re-checks its captured epoch at
|
|
50
|
+
// settle time and discards a STALE outcome — the same protection as
|
|
51
|
+
// rc-field-form's validatePromise identity check. Without it, a slow async
|
|
52
|
+
// validator (e.g. a server-side uniqueness check started on blur) could
|
|
53
|
+
// settle after the user already fixed the value and stamp a stale error
|
|
54
|
+
// over a newer, passing result.
|
|
55
|
+
var validationEpochRef = useRef({});
|
|
56
|
+
var beginValidationRun = useMemoizedFn(function (name) {
|
|
57
|
+
var next = (validationEpochRef.current[name] || 0) + 1;
|
|
58
|
+
validationEpochRef.current[name] = next;
|
|
59
|
+
return next;
|
|
60
|
+
});
|
|
61
|
+
var isValidationRunCurrent = useMemoizedFn(function (name, epoch) {
|
|
62
|
+
return validationEpochRef.current[name] === epoch;
|
|
63
|
+
});
|
|
64
|
+
// Bump (never delete — deletion would let a new run re-issue an old epoch
|
|
65
|
+
// number and collide with a still-in-flight pre-reset run).
|
|
66
|
+
var invalidateValidationRuns = useMemoizedFn(function (names) {
|
|
67
|
+
var keys = names !== null && names !== void 0 ? names : Object.keys(validationEpochRef.current);
|
|
68
|
+
keys.forEach(function (key) {
|
|
69
|
+
if (validationEpochRef.current[key] !== undefined) {
|
|
70
|
+
validationEpochRef.current[key] += 1;
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
// Instance handed to function-form rules. Defaults to the core methods
|
|
75
|
+
// (assigned at the end of this hook body); useForm upgrades it to the FULL
|
|
76
|
+
// form instance once it has built one, so rules see the same context on
|
|
77
|
+
// every path (interactive, blur, submit).
|
|
78
|
+
var ruleContextInstanceRef = useRef({});
|
|
79
|
+
var setRuleContextInstance = useMemoizedFn(function (instance) {
|
|
80
|
+
ruleContextInstanceRef.current = instance;
|
|
81
|
+
});
|
|
82
|
+
var getRuleContextInstance = useMemoizedFn(function () {
|
|
83
|
+
return ruleContextInstanceRef.current;
|
|
84
|
+
});
|
|
51
85
|
var commitValues = useMemoizedFn(function (newValues) {
|
|
52
86
|
store.setState({
|
|
53
87
|
values: newValues
|
|
54
88
|
});
|
|
55
89
|
});
|
|
90
|
+
// NOTE: setting a value does NOT touch the field's error — errors are
|
|
91
|
+
// cleared exclusively by validation runs (whose timing follows the
|
|
92
|
+
// validateTrigger config), so an onBlur-only field keeps its error while
|
|
93
|
+
// the user is still typing.
|
|
56
94
|
var setFieldValue = useMemoizedFn(function (name, value) {
|
|
57
95
|
var prev = store.getState().values;
|
|
58
96
|
var newValues = name.includes('.') ? setNestedValue(prev, name, value) : Object.assign(Object.assign({}, prev), _defineProperty({}, name, value));
|
|
59
97
|
commitValues(newValues);
|
|
60
98
|
onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(_defineProperty({}, name, value), newValues);
|
|
61
|
-
if (value !== '' && value !== null && value !== undefined) {
|
|
62
|
-
var errors = store.getState().errors;
|
|
63
|
-
if (errors[name]) {
|
|
64
|
-
var newErrors = Object.assign({}, errors);
|
|
65
|
-
delete newErrors[name];
|
|
66
|
-
store.setState({
|
|
67
|
-
errors: newErrors
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
99
|
});
|
|
72
100
|
var setFieldError = useMemoizedFn(function (name, error) {
|
|
73
101
|
var errors = store.getState().errors;
|
|
@@ -80,7 +108,7 @@ export var useFormCore = function useFormCore() {
|
|
|
80
108
|
});
|
|
81
109
|
return;
|
|
82
110
|
}
|
|
83
|
-
if (errors[name]
|
|
111
|
+
if (sameValidationNode(errors[name], error)) return;
|
|
84
112
|
store.setState({
|
|
85
113
|
errors: Object.assign(Object.assign({}, errors), _defineProperty({}, name, error))
|
|
86
114
|
});
|
|
@@ -96,26 +124,58 @@ export var useFormCore = function useFormCore() {
|
|
|
96
124
|
});
|
|
97
125
|
return;
|
|
98
126
|
}
|
|
99
|
-
if (warnings[name]
|
|
127
|
+
if (sameValidationNode(warnings[name], warning)) return;
|
|
100
128
|
store.setState({
|
|
101
129
|
warnings: Object.assign(Object.assign({}, warnings), _defineProperty({}, name, warning))
|
|
102
130
|
});
|
|
103
131
|
});
|
|
132
|
+
// Mounted-instance counts per field name, plus whether the CURRENT rules
|
|
133
|
+
// registration was made by a counted instance. Rules are removed only when
|
|
134
|
+
// the LAST mounted instance for a name releases: with two same-name fields
|
|
135
|
+
// mounted, the first unmount must not wipe the registration while the
|
|
136
|
+
// survivor (possibly memo-bailed, so not re-rendering to re-register) still
|
|
137
|
+
// relies on it for submit-time validation. A MANUAL registerField (no
|
|
138
|
+
// mounted holder, owned=false) survives the unmount of piggybacking
|
|
139
|
+
// instances that never registered rules themselves.
|
|
140
|
+
// NOTE: callers must retain BEFORE registering (retain effect declared
|
|
141
|
+
// first), or the registration is misclassified as manual and leaks.
|
|
142
|
+
var fieldMountCountsRef = useRef({});
|
|
143
|
+
var fieldRegistrationOwnedRef = useRef({});
|
|
104
144
|
var registerField = useMemoizedFn(function (name, rules) {
|
|
105
145
|
fieldRulesRef.current[name] = rules;
|
|
146
|
+
fieldRegistrationOwnedRef.current[name] = (fieldMountCountsRef.current[name] || 0) > 0;
|
|
106
147
|
});
|
|
107
148
|
var getFieldRules = useMemoizedFn(function (name) {
|
|
108
149
|
return fieldRulesRef.current[name];
|
|
109
150
|
});
|
|
110
151
|
var unregisterField = useMemoizedFn(function (name) {
|
|
111
152
|
delete fieldRulesRef.current[name];
|
|
153
|
+
delete fieldRegistrationOwnedRef.current[name];
|
|
154
|
+
});
|
|
155
|
+
var retainField = useMemoizedFn(function (name) {
|
|
156
|
+
fieldMountCountsRef.current[name] = (fieldMountCountsRef.current[name] || 0) + 1;
|
|
157
|
+
});
|
|
158
|
+
var releaseField = useMemoizedFn(function (name) {
|
|
159
|
+
var count = (fieldMountCountsRef.current[name] || 0) - 1;
|
|
160
|
+
if (count <= 0) {
|
|
161
|
+
delete fieldMountCountsRef.current[name];
|
|
162
|
+
if (fieldRegistrationOwnedRef.current[name]) {
|
|
163
|
+
delete fieldRulesRef.current[name];
|
|
164
|
+
delete fieldRegistrationOwnedRef.current[name];
|
|
165
|
+
}
|
|
166
|
+
} else {
|
|
167
|
+
fieldMountCountsRef.current[name] = count;
|
|
168
|
+
}
|
|
112
169
|
});
|
|
113
170
|
var validateField = useMemoizedFn(function (name) {
|
|
114
171
|
var rules = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
115
172
|
var providedValue = arguments.length > 2 ? arguments[2] : undefined;
|
|
173
|
+
// A sync run commits immediately, so it is always current — bumping the
|
|
174
|
+
// epoch here SUPERSEDES any in-flight async run for this field.
|
|
175
|
+
beginValidationRun(name);
|
|
116
176
|
var currentValues = store.getState().values;
|
|
117
177
|
var value = providedValue !== undefined ? providedValue : resolveValue(currentValues, name);
|
|
118
|
-
var _runRulesSync = runRulesSync(name, value, currentValues, rules),
|
|
178
|
+
var _runRulesSync = runRulesSync(name, value, currentValues, rules, ruleContextInstanceRef.current),
|
|
119
179
|
error = _runRulesSync.error,
|
|
120
180
|
warning = _runRulesSync.warning;
|
|
121
181
|
setFieldWarning(name, warning);
|
|
@@ -140,22 +200,32 @@ export var useFormCore = function useFormCore() {
|
|
|
140
200
|
return isValid;
|
|
141
201
|
});
|
|
142
202
|
var handleSubmitInternal = useMemoizedFn(function () {
|
|
143
|
-
var
|
|
203
|
+
var state = store.getState();
|
|
204
|
+
var currentValues = state.values;
|
|
144
205
|
var currentRules = fieldRulesRef.current;
|
|
145
206
|
var hasErrors = false;
|
|
146
|
-
var
|
|
147
|
-
|
|
207
|
+
var failedErrors = {};
|
|
208
|
+
// MERGE over the current maps: only fields in the rule registry are
|
|
209
|
+
// re-decided — a manually-set error on a field without rules survives.
|
|
210
|
+
var newErrors = Object.assign({}, state.errors);
|
|
211
|
+
var newWarnings = Object.assign({}, state.warnings);
|
|
148
212
|
Object.keys(currentRules).forEach(function (fieldName) {
|
|
213
|
+
beginValidationRun(fieldName);
|
|
149
214
|
var value = resolveValue(currentValues, fieldName);
|
|
150
|
-
var _runRulesSync2 = runRulesSync(fieldName, value, currentValues, currentRules[fieldName]),
|
|
215
|
+
var _runRulesSync2 = runRulesSync(fieldName, value, currentValues, currentRules[fieldName], ruleContextInstanceRef.current),
|
|
151
216
|
error = _runRulesSync2.error,
|
|
152
217
|
warning = _runRulesSync2.warning;
|
|
153
218
|
if (error !== null) {
|
|
154
219
|
newErrors[fieldName] = error;
|
|
220
|
+
failedErrors[fieldName] = error;
|
|
155
221
|
hasErrors = true;
|
|
222
|
+
} else {
|
|
223
|
+
delete newErrors[fieldName];
|
|
156
224
|
}
|
|
157
225
|
if (warning !== null) {
|
|
158
226
|
newWarnings[fieldName] = warning;
|
|
227
|
+
} else {
|
|
228
|
+
delete newWarnings[fieldName];
|
|
159
229
|
}
|
|
160
230
|
});
|
|
161
231
|
store.setState({
|
|
@@ -171,11 +241,11 @@ export var useFormCore = function useFormCore() {
|
|
|
171
241
|
} else {
|
|
172
242
|
onFinishFailed === null || onFinishFailed === void 0 ? void 0 : onFinishFailed({
|
|
173
243
|
values: currentValues,
|
|
174
|
-
errors:
|
|
244
|
+
errors: failedErrors
|
|
175
245
|
});
|
|
176
246
|
return {
|
|
177
247
|
success: false,
|
|
178
|
-
errors:
|
|
248
|
+
errors: failedErrors
|
|
179
249
|
};
|
|
180
250
|
}
|
|
181
251
|
});
|
|
@@ -187,6 +257,9 @@ export var useFormCore = function useFormCore() {
|
|
|
187
257
|
// never fires onReset. The callback belongs to the reset ACTION layer
|
|
188
258
|
// (submitter button / native reset event), which fires it exactly once.
|
|
189
259
|
var resetFields = useMemoizedFn(function () {
|
|
260
|
+
// Invalidate in-flight async validation runs — their results belong to
|
|
261
|
+
// pre-reset values and must not stamp errors onto the reset form.
|
|
262
|
+
invalidateValidationRuns();
|
|
190
263
|
store.setState({
|
|
191
264
|
values: mountInitialValues,
|
|
192
265
|
errors: {},
|
|
@@ -207,10 +280,38 @@ export var useFormCore = function useFormCore() {
|
|
|
207
280
|
return store.getState().values;
|
|
208
281
|
});
|
|
209
282
|
var setFieldsValue = useMemoizedFn(function (newValues) {
|
|
210
|
-
var
|
|
283
|
+
var prev = store.getState().values;
|
|
284
|
+
var updatedValues;
|
|
285
|
+
if (Object.keys(newValues).some(function (key) {
|
|
286
|
+
return key.includes('.');
|
|
287
|
+
})) {
|
|
288
|
+
// Dot-path keys write into the NESTED structure (the setFieldValue
|
|
289
|
+
// contract) — a shallow merge would land them as literal top-level
|
|
290
|
+
// keys that the nested-aware readers never find.
|
|
291
|
+
updatedValues = prev;
|
|
292
|
+
for (var _i = 0, _Object$entries = Object.entries(newValues); _i < _Object$entries.length; _i++) {
|
|
293
|
+
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
|
|
294
|
+
key = _Object$entries$_i[0],
|
|
295
|
+
value = _Object$entries$_i[1];
|
|
296
|
+
updatedValues = key.includes('.') ? setNestedValue(updatedValues, key, value) : Object.assign(Object.assign({}, updatedValues), _defineProperty({}, key, value));
|
|
297
|
+
}
|
|
298
|
+
} else {
|
|
299
|
+
updatedValues = Object.assign(Object.assign({}, prev), newValues);
|
|
300
|
+
}
|
|
211
301
|
commitValues(updatedValues);
|
|
212
302
|
onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(newValues, updatedValues);
|
|
213
303
|
});
|
|
304
|
+
// Seed the rule-context instance with the core methods exactly once —
|
|
305
|
+
// useForm's richer instance must not be downgraded on later renders.
|
|
306
|
+
if (Object.keys(ruleContextInstanceRef.current).length === 0) {
|
|
307
|
+
ruleContextInstanceRef.current = {
|
|
308
|
+
getFieldValue: getFieldValue,
|
|
309
|
+
getFieldsValue: getFieldsValue,
|
|
310
|
+
setFieldValue: setFieldValue,
|
|
311
|
+
setFieldsValue: setFieldsValue,
|
|
312
|
+
resetFields: resetFields
|
|
313
|
+
};
|
|
314
|
+
}
|
|
214
315
|
var formInstance = useMemo(function () {
|
|
215
316
|
return {
|
|
216
317
|
submit: handleSubmitInternal,
|
|
@@ -240,8 +341,6 @@ export var useFormCore = function useFormCore() {
|
|
|
240
341
|
size: size,
|
|
241
342
|
labelAlign: labelAlign,
|
|
242
343
|
disabled: disabled,
|
|
243
|
-
colon: colon,
|
|
244
|
-
requiredMark: requiredMark,
|
|
245
344
|
validateTrigger: validateTrigger
|
|
246
345
|
};
|
|
247
346
|
return {
|
|
@@ -252,6 +351,11 @@ export var useFormCore = function useFormCore() {
|
|
|
252
351
|
// Live registry — stable identity, mutated in place by register/unregister.
|
|
253
352
|
fieldRules: fieldRulesRef.current,
|
|
254
353
|
getFieldRules: getFieldRules,
|
|
354
|
+
getRuleContextInstance: getRuleContextInstance,
|
|
355
|
+
setRuleContextInstance: setRuleContextInstance,
|
|
356
|
+
beginValidationRun: beginValidationRun,
|
|
357
|
+
isValidationRunCurrent: isValidationRunCurrent,
|
|
358
|
+
invalidateValidationRuns: invalidateValidationRuns,
|
|
255
359
|
setFieldValue: setFieldValue,
|
|
256
360
|
setFieldError: setFieldError,
|
|
257
361
|
setFieldWarning: setFieldWarning,
|
|
@@ -262,6 +366,8 @@ export var useFormCore = function useFormCore() {
|
|
|
262
366
|
validateFields: validateFields,
|
|
263
367
|
registerField: registerField,
|
|
264
368
|
unregisterField: unregisterField,
|
|
369
|
+
retainField: retainField,
|
|
370
|
+
releaseField: releaseField,
|
|
265
371
|
handleSubmit: handleSubmit,
|
|
266
372
|
handleReset: handleReset,
|
|
267
373
|
resetFields: resetFields,
|
|
@@ -274,4 +380,4 @@ export var useFormCore = function useFormCore() {
|
|
|
274
380
|
};
|
|
275
381
|
};
|
|
276
382
|
export default useFormCore;
|
|
277
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIl0sIm5hbWVzIjpbInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VFdmVudENhbGxiYWNrIiwidXNlTWVtb2l6ZWRGbiIsInJlc29sdmVWYWx1ZSIsInNldE5lc3RlZFZhbHVlIiwicnVuUnVsZXNTeW5jIiwiY3JlYXRlRm9ybVN0b3JlIiwidXNlRm9ybUNvcmUiLCJjb25maWciLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJfY29uZmlnJGluaXRpYWxWYWx1ZXMiLCJpbml0aWFsVmFsdWVzIiwib25GaW5pc2giLCJvbkZpbmlzaEZhaWxlZCIsIm9uVmFsdWVzQ2hhbmdlIiwib25SZXNldCIsIl9jb25maWckc2l6ZSIsInNpemUiLCJfY29uZmlnJGxhYmVsQWxpZ24iLCJsYWJlbEFsaWduIiwiX2NvbmZpZyRkaXNhYmxlZCIsImRpc2FibGVkIiwiX2NvbmZpZyRjb2xvbiIsImNvbG9uIiwiX2NvbmZpZyRyZXF1aXJlZE1hcmsiLCJyZXF1aXJlZE1hcmsiLCJfY29uZmlnJHZhbGlkYXRlVHJpZ2ciLCJ2YWxpZGF0ZVRyaWdnZXIiLCJpbml0aWFsVmFsdWVzUmVmIiwiY3VycmVudCIsIm1vdW50SW5pdGlhbFZhbHVlcyIsInN0b3JlUmVmIiwic3RvcmUiLCJmaWVsZFJ1bGVzUmVmIiwiY29tbWl0VmFsdWVzIiwibmV3VmFsdWVzIiwic2V0U3RhdGUiLCJ2YWx1ZXMiLCJzZXRGaWVsZFZhbHVlIiwibmFtZSIsInZhbHVlIiwicHJldiIsImdldFN0YXRlIiwiaW5jbHVkZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJfZGVmaW5lUHJvcGVydHkiLCJlcnJvcnMiLCJuZXdFcnJvcnMiLCJzZXRGaWVsZEVycm9yIiwiZXJyb3IiLCJzZXRGaWVsZFdhcm5pbmciLCJ3YXJuaW5nIiwid2FybmluZ3MiLCJuZXdXYXJuaW5ncyIsInJlZ2lzdGVyRmllbGQiLCJydWxlcyIsImdldEZpZWxkUnVsZXMiLCJ1bnJlZ2lzdGVyRmllbGQiLCJ2YWxpZGF0ZUZpZWxkIiwicHJvdmlkZWRWYWx1ZSIsImN1cnJlbnRWYWx1ZXMiLCJfcnVuUnVsZXNTeW5jIiwidmFsaWRhdGVGaWVsZHMiLCJmaWVsZHNSdWxlc1RvVmFsaWRhdGUiLCJpc1ZhbGlkIiwia2V5cyIsImZvckVhY2giLCJoYW5kbGVTdWJtaXRJbnRlcm5hbCIsImN1cnJlbnRSdWxlcyIsImhhc0Vycm9ycyIsImZpZWxkTmFtZSIsIl9ydW5SdWxlc1N5bmMyIiwic3VjY2VzcyIsImhhbmRsZVN1Ym1pdCIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInJlc2V0RmllbGRzIiwidG91Y2hlZCIsInZhbGlkYXRpbmciLCJoYW5kbGVSZXNldCIsImdldEZpZWxkVmFsdWUiLCJnZXRGaWVsZHNWYWx1ZSIsInNldEZpZWxkc1ZhbHVlIiwidXBkYXRlZFZhbHVlcyIsImZvcm1JbnN0YW5jZSIsInN1Ym1pdCIsInN0YXRlIiwiY29yZUNvbnRleHRTaGFwZSIsImZpZWxkUnVsZXMiLCJnZXRJbml0aWFsVmFsdWVzIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBU0EsT0FBTyxFQUFFQyxNQUFNLFFBQVEsT0FBTztBQUV2QyxPQUFPQyxnQkFBZ0IsTUFBTSxnQ0FBZ0M7QUFDN0QsT0FBT0MsYUFBYSxNQUFNLDZCQUE2QjtBQUN2RCxTQUFTQyxZQUFZLEVBQUVDLGNBQWMsUUFBUSxjQUFjO0FBQzNELFNBQVNDLFlBQVksUUFBUSxhQUFhO0FBQzFDLFNBQVNDLGVBQWUsUUFBUSxjQUFjO0FBUzlDLE9BQU8sSUFBTUMsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUEsRUFFdUU7RUFBQSxJQUQ3RkMsTUFBQSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBNEIsQ0FBQSxDQUFFO0VB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dHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJpbXBvcnQgeyB1c2VNZW1vLCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnQDFtb25leS9ob29rcy91c2VNZW1vaXplZEZuJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSwgc2V0TmVzdGVkVmFsdWUgfSBmcm9tICcuLi9wYXRoVXRpbHMnO1xuaW1wb3J0IHsgcnVuUnVsZXNTeW5jIH0gZnJvbSAnLi4vcnVuUnVsZXMnO1xuaW1wb3J0IHsgY3JlYXRlRm9ybVN0b3JlIH0gZnJvbSAnLi4vZm9ybVN0b3JlJztcbmV4cG9ydCBjb25zdCB1c2VGb3JtQ29yZSA9IChjb25maWcgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHsgaW5pdGlhbFZhbHVlcyA9IHt9LCBvbkZpbmlzaCwgb25GaW5pc2hGYWlsZWQsIG9uVmFsdWVzQ2hhbmdlLCBvblJlc2V0LCBzaXplID0gJ2xhcmdlJywgbGFiZWxBbGlnbiA9ICdsZWZ0JywgZGlzYWJsZWQgPSBmYWxzZSwgY29sb24gPSB0cnVlLCByZXF1aXJlZE1hcmsgPSB0cnVlLCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCB9ID0gY29uZmlnO1xuICAgIC8vIGluaXRpYWxWYWx1ZXMgaXMgTU9VTlQtT05MWSAodGhlIGRvY3VtZW50ZWQgY29udHJhY3QpOiBmcmVlemUgdGhlIGZpcnN0XG4gICAgLy8gcmVuZGVyJ3MgdmFsdWUgc28gcmVzZXRGaWVsZHMgYWx3YXlzIHJlc3RvcmVzIHRoZSBtb3VudC10aW1lIGRlZmF1bHRzLFxuICAgIC8vIGV2ZW4gd2hlbiB0aGUgY29uc3VtZXIgcmUtcmVuZGVycyB3aXRoIGEgZGlmZmVyZW50IChlLmcuIGNvbnRyb2xsZWQpXG4gICAgLy8gaW5pdGlhbFZhbHVlcyBvYmplY3QuXG4gICAgY29uc3QgaW5pdGlhbFZhbHVlc1JlZiA9IHVzZVJlZihudWxsKTtcbiAgICBpZiAoaW5pdGlhbFZhbHVlc1JlZi5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIGluaXRpYWxWYWx1ZXNSZWYuY3VycmVudCA9IGluaXRpYWxWYWx1ZXM7XG4gICAgfVxuICAgIGNvbnN0IG1vdW50SW5pdGlhbFZhbHVlcyA9IGluaXRpYWxWYWx1ZXNSZWYuY3VycmVudDtcbiAgICAvLyBBbGwgdm9sYXRpbGUgZm9ybSBzdGF0ZSBsaXZlcyBpbiBhbiBleHRlcm5hbCBzdG9yZSwgTk9UIFJlYWN0IHN0YXRlIOKAlCBhXG4gICAgLy8ga2V5c3Ryb2tlIG11c3QgbmV2ZXIgcmUtcmVuZGVyIHRoZSBjb21wb25lbnQgdGhhdCBvd25zIHRoZSBmb3JtLiBGaWVsZHNcbiAgICAvLyBhbmQgd2F0Y2hlcnMgc3Vic2NyaWJlIHdpdGggcGVyLWZpZWxkIHNlbGVjdG9ycyAodXNlU3RvcmVTZWxlY3Rvcik7IGV2ZXJ5XG4gICAgLy8gbXV0YXRvciBiZWxvdyByZWFkcyB0aGUgTEFURVNUIHN0YXRlIHZpYSBzdG9yZS5nZXRTdGF0ZSgpLCB3aGljaCBhbHNvXG4gICAgLy8ga2VlcHMgbXVsdGlwbGUgd3JpdGVzIGluIHRoZSBzYW1lIHRpY2sgdmlzaWJsZSB0byBlYWNoIG90aGVyLlxuICAgIGNvbnN0IHN0b3JlUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGlmIChzdG9yZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIHN0b3JlUmVmLmN1cnJlbnQgPSBjcmVhdGVGb3JtU3RvcmUobW91bnRJbml0aWFsVmFsdWVzKTtcbiAgICB9XG4gICAgY29uc3Qgc3RvcmUgPSBzdG9yZVJlZi5jdXJyZW50O1xuICAgIC8vIExpdmUgcnVsZSByZWdpc3RyeSDigJQgT05FIHN0YWJsZSBvYmplY3QgbXV0YXRlZCBpbiBwbGFjZS4gUmVnaXN0cmF0aW9uIG11c3RcbiAgICAvLyBub3QgdHJpZ2dlciByZW5kZXJzLCBhbmQgc3VibWl0LXRpbWUgdmFsaWRhdGlvbiBtdXN0IGFsd2F5cyByZWFkIHRoZSBsYXRlc3RcbiAgICAvLyBydWxlcyAodGhleSBjYW4gY2hhbmdlIGJldHdlZW4gcmVuZGVycywgZS5nLiBhIGNvbmRpdGlvbmFsIGByZXF1aXJlZGApLlxuICAgIGNvbnN0IGZpZWxkUnVsZXNSZWYgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IGNvbW1pdFZhbHVlcyA9IHVzZU1lbW9pemVkRm4oKG5ld1ZhbHVlcykgPT4ge1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHZhbHVlczogbmV3VmFsdWVzIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkVmFsdWUgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBwcmV2ID0gc3RvcmUuZ2V0U3RhdGUoKS52YWx1ZXM7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IG5hbWUuaW5jbHVkZXMoJy4nKVxuICAgICAgICAgICAgPyBzZXROZXN0ZWRWYWx1ZShwcmV2LCBuYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgIDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IHZhbHVlIH0pO1xuICAgICAgICBjb21taXRWYWx1ZXMobmV3VmFsdWVzKTtcbiAgICAgICAgb25WYWx1ZXNDaGFuZ2UgPT09IG51bGwgfHwgb25WYWx1ZXNDaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVmFsdWVzQ2hhbmdlKHsgW25hbWVdOiB2YWx1ZSB9LCBuZXdWYWx1ZXMpO1xuICAgICAgICBpZiAodmFsdWUgIT09ICcnICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHN0b3JlLmdldFN0YXRlKCkuZXJyb3JzO1xuICAgICAgICAgICAgaWYgKGVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIGVycm9ycyk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld0Vycm9yc1tuYW1lXTtcbiAgICAgICAgICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IGVycm9yczogbmV3RXJyb3JzIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRFcnJvciA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHN0b3JlLmdldFN0YXRlKCkuZXJyb3JzO1xuICAgICAgICBpZiAoZXJyb3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghZXJyb3JzW25hbWVdKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIGVycm9ycyk7XG4gICAgICAgICAgICBkZWxldGUgbmV3RXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyBlcnJvcnM6IG5ld0Vycm9ycyB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JzW25hbWVdID09PSBlcnJvcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyBlcnJvcnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZXJyb3JzKSwgeyBbbmFtZV06IGVycm9yIH0pIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkV2FybmluZyA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHdhcm5pbmcpID0+IHtcbiAgICAgICAgY29uc3Qgd2FybmluZ3MgPSBzdG9yZS5nZXRTdGF0ZSgpLndhcm5pbmdzO1xuICAgICAgICBpZiAod2FybmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCF3YXJuaW5nc1tuYW1lXSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBuZXdXYXJuaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHdhcm5pbmdzKTtcbiAgICAgICAgICAgIGRlbGV0ZSBuZXdXYXJuaW5nc1tuYW1lXTtcbiAgICAgICAgICAgIHN0b3JlLnNldFN0YXRlKHsgd2FybmluZ3M6IG5ld1dhcm5pbmdzIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3YXJuaW5nc1tuYW1lXSA9PT0gd2FybmluZylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB3YXJuaW5nczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB3YXJuaW5ncyksIHsgW25hbWVdOiB3YXJuaW5nIH0pIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlZ2lzdGVyRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBydWxlcykgPT4ge1xuICAgICAgICBmaWVsZFJ1bGVzUmVmLmN1cnJlbnRbbmFtZV0gPSBydWxlcztcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZFJ1bGVzID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gZmllbGRSdWxlc1JlZi5jdXJyZW50W25hbWVdO1xuICAgIH0pO1xuICAgIGNvbnN0IHVucmVnaXN0ZXJGaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgZGVsZXRlIGZpZWxkUnVsZXNSZWYuY3VycmVudFtuYW1lXTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgcnVsZXMgPSBbXSwgcHJvdmlkZWRWYWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gc3RvcmUuZ2V0U3RhdGUoKS52YWx1ZXM7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcHJvdmlkZWRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gcHJvdmlkZWRWYWx1ZSA6IHJlc29sdmVWYWx1ZShjdXJyZW50VmFsdWVzLCBuYW1lKTtcbiAgICAgICAgY29uc3QgeyBlcnJvciwgd2FybmluZyB9ID0gcnVuUnVsZXNTeW5jKG5hbWUsIHZhbHVlLCBjdXJyZW50VmFsdWVzLCBydWxlcyk7XG4gICAgICAgIHNldEZpZWxkV2FybmluZyhuYW1lLCB3YXJuaW5nKTtcbiAgICAgICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RvcmUuZ2V0U3RhdGUoKS5lcnJvcnNbbmFtZV0pIHtcbiAgICAgICAgICAgIHNldEZpZWxkRXJyb3IobmFtZSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHMgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNSdWxlc1RvVmFsaWRhdGUgPSBmaWVsZFJ1bGVzUmVmLmN1cnJlbnQpID0+IHtcbiAgICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZHNSdWxlc1RvVmFsaWRhdGUpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVzID0gZmllbGRzUnVsZXNUb1ZhbGlkYXRlW25hbWVdO1xuICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUZpZWxkKG5hbWUsIHJ1bGVzKSkge1xuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdEludGVybmFsID0gdXNlTWVtb2l6ZWRGbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPSBzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcztcbiAgICAgICAgY29uc3QgY3VycmVudFJ1bGVzID0gZmllbGRSdWxlc1JlZi5jdXJyZW50O1xuICAgICAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IHt9O1xuICAgICAgICBjb25zdCBuZXdXYXJuaW5ncyA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50UnVsZXMpLmZvckVhY2goKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXNvbHZlVmFsdWUoY3VycmVudFZhbHVlcywgZmllbGROYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHsgZXJyb3IsIHdhcm5pbmcgfSA9IHJ1blJ1bGVzU3luYyhmaWVsZE5hbWUsIHZhbHVlLCBjdXJyZW50VmFsdWVzLCBjdXJyZW50UnVsZXNbZmllbGROYW1lXSk7XG4gICAgICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBuZXdFcnJvcnNbZmllbGROYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2FybmluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG5ld1dhcm5pbmdzW2ZpZWxkTmFtZV0gPSB3YXJuaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyBlcnJvcnM6IG5ld0Vycm9ycywgd2FybmluZ3M6IG5ld1dhcm5pbmdzIH0pO1xuICAgICAgICBpZiAoIWhhc0Vycm9ycykge1xuICAgICAgICAgICAgb25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKGN1cnJlbnRWYWx1ZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgdmFsdWVzOiBjdXJyZW50VmFsdWVzIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvbkZpbmlzaEZhaWxlZCA9PT0gbnVsbCB8fCBvbkZpbmlzaEZhaWxlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2hGYWlsZWQoeyB2YWx1ZXM6IGN1cnJlbnRWYWx1ZXMsIGVycm9yczogbmV3RXJyb3JzIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yczogbmV3RXJyb3JzIH07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVTdWJtaXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gaGFuZGxlU3VibWl0SW50ZXJuYWwoKTtcbiAgICB9KTtcbiAgICAvLyBQdXJlIHN0YXRlIEFQSTogdGhlIGltcGVyYXRpdmUgcmVzZXRGaWVsZHMoKVxuICAgIC8vIG5ldmVyIGZpcmVzIG9uUmVzZXQuIFRoZSBjYWxsYmFjayBiZWxvbmdzIHRvIHRoZSByZXNldCBBQ1RJT04gbGF5ZXJcbiAgICAvLyAoc3VibWl0dGVyIGJ1dHRvbiAvIG5hdGl2ZSByZXNldCBldmVudCksIHdoaWNoIGZpcmVzIGl0IGV4YWN0bHkgb25jZS5cbiAgICBjb25zdCByZXNldEZpZWxkcyA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2YWx1ZXM6IG1vdW50SW5pdGlhbFZhbHVlcyxcbiAgICAgICAgICAgIGVycm9yczoge30sXG4gICAgICAgICAgICB3YXJuaW5nczoge30sXG4gICAgICAgICAgICB0b3VjaGVkOiB7fSxcbiAgICAgICAgICAgIHZhbGlkYXRpbmc6IHt9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVSZXNldCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IHtcbiAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJlc2V0RmllbGRzKCk7XG4gICAgICAgIG9uUmVzZXQgPT09IG51bGwgfHwgb25SZXNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXNldCgpO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldEZpZWxkVmFsdWUgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiByZXNvbHZlVmFsdWUoc3RvcmUuZ2V0U3RhdGUoKS52YWx1ZXMsIG5hbWUpO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldEZpZWxkc1ZhbHVlID0gdXNlTWVtb2l6ZWRGbigoKSA9PiB7XG4gICAgICAgIHJldHVybiBzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcztcbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZHNWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5ld1ZhbHVlcykgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkVmFsdWVzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcyksIG5ld1ZhbHVlcyk7XG4gICAgICAgIGNvbW1pdFZhbHVlcyh1cGRhdGVkVmFsdWVzKTtcbiAgICAgICAgb25WYWx1ZXNDaGFuZ2UgPT09IG51bGwgfHwgb25WYWx1ZXNDaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVmFsdWVzQ2hhbmdlKG5ld1ZhbHVlcywgdXBkYXRlZFZhbHVlcyk7XG4gICAgfSk7XG4gICAgY29uc3QgZm9ybUluc3RhbmNlID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICBzdWJtaXQ6IGhhbmRsZVN1Ym1pdEludGVybmFsLFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyxcbiAgICB9KSwgW1xuICAgICAgICBoYW5kbGVTdWJtaXRJbnRlcm5hbCxcbiAgICAgICAgcmVzZXRGaWVsZHMsXG4gICAgICAgIGdldEZpZWxkVmFsdWUsXG4gICAgICAgIGdldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgdmFsaWRhdGVGaWVsZHMsXG4gICAgXSk7XG4gICAgLy8gUmVuZGVyLXRpbWUgc25hcHNob3Qg4oCUIGtlcHQgZm9yIHRoZSBVc2VGb3JtQ29yZVJldHVybiBjb250cmFjdC4gUmVhY3RpdmVcbiAgICAvLyBjb25zdW1lcnMgbXVzdCBnbyB0aHJvdWdoIHRoZSBzdG9yZSwgbmV2ZXIgdGhyb3VnaCB0aGVzZSBmaWVsZHMuXG4gICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGNvcmVDb250ZXh0U2hhcGUgPSB7XG4gICAgICAgIHZhbHVlczogc3RhdGUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IHN0YXRlLmVycm9ycyxcbiAgICAgICAgd2FybmluZ3M6IHN0YXRlLndhcm5pbmdzLFxuICAgICAgICB0b3VjaGVkOiBzdGF0ZS50b3VjaGVkLFxuICAgICAgICBmb3JtSW5zdGFuY2UsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHNldEZpZWxkRXJyb3IsXG4gICAgICAgIHNldEZpZWxkV2FybmluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZCxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBzaXplLFxuICAgICAgICBsYWJlbEFsaWduLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgY29sb24sXG4gICAgICAgIHJlcXVpcmVkTWFyayxcbiAgICAgICAgdmFsaWRhdGVUcmlnZ2VyLFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzOiBzdGF0ZS52YWx1ZXMsXG4gICAgICAgIGVycm9yczogc3RhdGUuZXJyb3JzLFxuICAgICAgICB3YXJuaW5nczogc3RhdGUud2FybmluZ3MsXG4gICAgICAgIHRvdWNoZWQ6IHN0YXRlLnRvdWNoZWQsXG4gICAgICAgIC8vIExpdmUgcmVnaXN0cnkg4oCUIHN0YWJsZSBpZGVudGl0eSwgbXV0YXRlZCBpbiBwbGFjZSBieSByZWdpc3Rlci91bnJlZ2lzdGVyLlxuICAgICAgICBmaWVsZFJ1bGVzOiBmaWVsZFJ1bGVzUmVmLmN1cnJlbnQsXG4gICAgICAgIGdldEZpZWxkUnVsZXMsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHNldEZpZWxkRXJyb3IsXG4gICAgICAgIHNldEZpZWxkV2FybmluZyxcbiAgICAgICAgc2V0RmllbGRzVmFsdWUsXG4gICAgICAgIGdldEZpZWxkVmFsdWUsXG4gICAgICAgIGdldEZpZWxkc1ZhbHVlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBoYW5kbGVTdWJtaXQsXG4gICAgICAgIGhhbmRsZVJlc2V0LFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZm9ybUluc3RhbmNlLFxuICAgICAgICBjb3JlQ29udGV4dFNoYXBlLFxuICAgICAgICBzdG9yZSxcbiAgICAgICAgZ2V0SW5pdGlhbFZhbHVlczogKCkgPT4gbW91bnRJbml0aWFsVmFsdWVzLFxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ybUNvcmU7Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|
|
383
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIl0sIm5hbWVzIjpbInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VFdmVudENhbGxiYWNrIiwidXNlTWVtb2l6ZWRGbiIsInJlc29sdmVWYWx1ZSIsInNldE5lc3RlZFZhbHVlIiwicnVuUnVsZXNTeW5jIiwiY3JlYXRlRm9ybVN0b3JlIiwic2FtZVZhbGlkYXRpb25Ob2RlIiwidXNlRm9ybUNvcmUiLCJjb25maWciLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJfY29uZmlnJGluaXRpYWxWYWx1ZXMiLCJpbml0aWFsVmFsdWVzIiwib25GaW5pc2giLCJvbkZpbmlzaEZhaWxlZCIsIm9uVmFsdWVzQ2hhbmdlIiwib25SZXNldCIsIl9jb25maWckc2l6ZSIsInNpemUiLCJfY29uZmlnJGxhYmVsQWxpZ24iLCJsYWJlbEFsaWduIiwiX2NvbmZpZyRkaXNhYmxlZCIsImRpc2FibGVkIiwiX2NvbmZpZyR2YWxpZGF0ZVRyaWdnIiwidmFsaWRhdGVUcmlnZ2VyIiwiaW5pdGlhbFZhbHVlc1JlZiIsImN1cnJlbnQiLCJtb3VudEluaXRpYWxWYWx1ZXMiLCJzdG9yZVJlZiIsInN0b3JlIiwiZmllbGRSdWxlc1JlZiIsInZhbGlkYXRpb25FcG9jaFJlZiIsImJlZ2luVmFsaWRhdGlvblJ1biIsIm5hbWUiLCJuZXh0IiwiaXNWYWxpZGF0aW9uUnVuQ3VycmVudCIsImVwb2NoIiwiaW52YWxpZGF0ZVZhbGlkYXRpb25SdW5zIiwibmFtZXMiLCJrZXlzIiwiT2JqZWN0IiwiZm9yRWFjaCIsImtleSIsInJ1bGVDb250ZXh0SW5zdGFuY2VSZWYiLCJzZXRSdWxlQ29udGV4dEluc3RhbmNlIiwiaW5zdGFuY2UiLCJnZXRSdWxlQ29udGV4dEluc3RhbmNlIiwiY29tbWl0VmFsdWVzIiwibmV3VmFsdWVzIiwic2V0U3RhdGUiLCJ2YWx1ZXMiLCJzZXRGaWVsZFZhbHVlIiwidmFsdWUiLCJwcmV2IiwiZ2V0U3RhdGUiLCJpbmNsdWRlcyIsImFzc2lnbiIsIl9kZWZpbmVQcm9wZXJ0eSIsInNldEZpZWxkRXJyb3IiLCJlcnJvciIsImVycm9ycyIsIm5ld0Vycm9ycyIsInNldEZpZWxkV2FybmluZyIsIndhcm5pbmciLCJ3YXJuaW5ncyIsIm5ld1dhcm5pbmdzIiwiZmllbGRNb3VudENvdW50c1JlZiIsImZpZWxkUmVnaXN0cmF0aW9uT3duZWRSZWYiLCJyZWdpc3RlckZpZWxkIiwicnVsZXMiLCJnZXRGaWVsZFJ1bGVzIiwidW5yZWdpc3RlckZpZWxkIiwicmV0YWluRmllbGQiLCJyZWxlYXNlRmllbGQiLCJjb3VudCIsInZhbGlkYXRlRmllbGQiLCJwcm92aWRlZFZhbHVlIiwiY3VycmVudFZhbHVlcyIsIl9ydW5SdWxlc1N5bmMiLCJ2YWxpZGF0ZUZpZWxkcyIsImZpZWxkc1J1bGVzVG9WYWxpZGF0ZSIsImlzVmFsaWQiLCJoYW5kbGVTdWJtaXRJbnRlcm5hbCIsInN0YXRlIiwiY3VycmVudFJ1bGVzIiwiaGFzRXJyb3JzIiwiZmFpbGVkRXJyb3JzIiwiZmllbGROYW1lIiwiX3J1blJ1bGVzU3luYzIiLCJzdWNjZXNzIiwiaGFuZGxlU3VibWl0IiwiZSIsInByZXZlbnREZWZhdWx0IiwicmVzZXRGaWVsZHMiLCJ0b3VjaGVkIiwidmFsaWRhdGluZyIsImhhbmRsZVJlc2V0IiwiZ2V0RmllbGRWYWx1ZSIsImdldEZpZWxkc1ZhbHVlIiwic2V0RmllbGRzVmFsdWUiLCJ1cGRhdGVkVmFsdWVzIiwic29tZSIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsIl9zbGljZWRUb0FycmF5IiwiZm9ybUluc3RhbmNlIiwic3VibWl0IiwiY29yZUNvbnRleHRTaGFwZSIsImZpZWxkUnVsZXMiLCJnZXRJbml0aWFsVmFs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b3JtQ29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiaW1wb3J0IHsgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUsIHNldE5lc3RlZFZhbHVlIH0gZnJvbSAnLi4vcGF0aFV0aWxzJztcbmltcG9ydCB7IHJ1blJ1bGVzU3luYyB9IGZyb20gJy4uL3J1blJ1bGVzJztcbmltcG9ydCB7IGNyZWF0ZUZvcm1TdG9yZSwgc2FtZVZhbGlkYXRpb25Ob2RlIH0gZnJvbSAnLi4vZm9ybVN0b3JlJztcbmV4cG9ydCBjb25zdCB1c2VGb3JtQ29yZSA9IChjb25maWcgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHsgaW5pdGlhbFZhbHVlcyA9IHt9LCBvbkZpbmlzaCwgb25GaW5pc2hGYWlsZWQsIG9uVmFsdWVzQ2hhbmdlLCBvblJlc2V0LCBzaXplID0gJ2xhcmdlJywgbGFiZWxBbGlnbiA9ICdsZWZ0JywgZGlzYWJsZWQgPSBmYWxzZSwgdmFsaWRhdGVUcmlnZ2VyID0gJ29uQ2hhbmdlJywgfSA9IGNvbmZpZztcbiAgICAvLyBpbml0aWFsVmFsdWVzIGlzIE1PVU5ULU9OTFkgKHRoZSBkb2N1bWVudGVkIGNvbnRyYWN0KTogZnJlZXplIHRoZSBmaXJzdFxuICAgIC8vIHJlbmRlcidzIHZhbHVlIHNvIHJlc2V0RmllbGRzIGFsd2F5cyByZXN0b3JlcyB0aGUgbW91bnQtdGltZSBkZWZhdWx0cyxcbiAgICAvLyBldmVuIHdoZW4gdGhlIGNvbnN1bWVyIHJlLXJlbmRlcnMgd2l0aCBhIGRpZmZlcmVudCAoZS5nLiBjb250cm9sbGVkKVxuICAgIC8vIGluaXRpYWxWYWx1ZXMgb2JqZWN0LlxuICAgIGNvbnN0IGluaXRpYWxWYWx1ZXNSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgaWYgKGluaXRpYWxWYWx1ZXNSZWYuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICBpbml0aWFsVmFsdWVzUmVmLmN1cnJlbnQgPSBpbml0aWFsVmFsdWVzO1xuICAgIH1cbiAgICBjb25zdCBtb3VudEluaXRpYWxWYWx1ZXMgPSBpbml0aWFsVmFsdWVzUmVmLmN1cnJlbnQ7XG4gICAgLy8gQWxsIHZvbGF0aWxlIGZvcm0gc3RhdGUgbGl2ZXMgaW4gYW4gZXh0ZXJuYWwgc3RvcmUsIE5PVCBSZWFjdCBzdGF0ZSDigJQgYVxuICAgIC8vIGtleXN0cm9rZSBtdXN0IG5ldmVyIHJlLXJlbmRlciB0aGUgY29tcG9uZW50IHRoYXQgb3ducyB0aGUgZm9ybS4gRmllbGRzXG4gICAgLy8gYW5kIHdhdGNoZXJzIHN1YnNjcmliZSB3aXRoIHBlci1maWVsZCBzZWxlY3RvcnMgKHVzZVN0b3JlU2VsZWN0b3IpOyBldmVyeVxuICAgIC8vIG11dGF0b3IgYmVsb3cgcmVhZHMgdGhlIExBVEVTVCBzdGF0ZSB2aWEgc3RvcmUuZ2V0U3RhdGUoKSwgd2hpY2ggYWxzb1xuICAgIC8vIGtlZXBzIG11bHRpcGxlIHdyaXRlcyBpbiB0aGUgc2FtZSB0aWNrIHZpc2libGUgdG8gZWFjaCBvdGhlci5cbiAgICBjb25zdCBzdG9yZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBpZiAoc3RvcmVSZWYuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICBzdG9yZVJlZi5jdXJyZW50ID0gY3JlYXRlRm9ybVN0b3JlKG1vdW50SW5pdGlhbFZhbHVlcyk7XG4gICAgfVxuICAgIGNvbnN0IHN0b3JlID0gc3RvcmVSZWYuY3VycmVudDtcbiAgICAvLyBMaXZlIHJ1bGUgcmVnaXN0cnkg4oCUIE9ORSBzdGFibGUgb2JqZWN0IG11dGF0ZWQgaW4gcGxhY2UuIFJlZ2lzdHJhdGlvbiBtdXN0XG4gICAgLy8gbm90IHRyaWdnZXIgcmVuZGVycywgYW5kIHN1Ym1pdC10aW1lIHZhbGlkYXRpb24gbXVzdCBhbHdheXMgcmVhZCB0aGUgbGF0ZXN0XG4gICAgLy8gcnVsZXMgKHRoZXkgY2FuIGNoYW5nZSBiZXR3ZWVuIHJlbmRlcnMsIGUuZy4gYSBjb25kaXRpb25hbCBgcmVxdWlyZWRgKS5cbiAgICBjb25zdCBmaWVsZFJ1bGVzUmVmID0gdXNlUmVmKHt9KTtcbiAgICAvLyBQZXItZmllbGQgdmFsaWRhdGlvbiBydW4gZXBvY2hzLiBFVkVSWSB2YWxpZGF0aW9uIHJ1biAoc3luYyBvciBhc3luYylcbiAgICAvLyBidW1wcyBpdHMgZmllbGQncyBlcG9jaDsgYW4gYXN5bmMgcnVuIHJlLWNoZWNrcyBpdHMgY2FwdHVyZWQgZXBvY2ggYXRcbiAgICAvLyBzZXR0bGUgdGltZSBhbmQgZGlzY2FyZHMgYSBTVEFMRSBvdXRjb21lIOKAlCB0aGUgc2FtZSBwcm90ZWN0aW9uIGFzXG4gICAgLy8gcmMtZmllbGQtZm9ybSdzIHZhbGlkYXRlUHJvbWlzZSBpZGVudGl0eSBjaGVjay4gV2l0aG91dCBpdCwgYSBzbG93IGFzeW5jXG4gICAgLy8gdmFsaWRhdG9yIChlLmcuIGEgc2VydmVyLXNpZGUgdW5pcXVlbmVzcyBjaGVjayBzdGFydGVkIG9uIGJsdXIpIGNvdWxkXG4gICAgLy8gc2V0dGxlIGFmdGVyIHRoZSB1c2VyIGFscmVhZHkgZml4ZWQgdGhlIHZhbHVlIGFuZCBzdGFtcCBhIHN0YWxlIGVycm9yXG4gICAgLy8gb3ZlciBhIG5ld2VyLCBwYXNzaW5nIHJlc3VsdC5cbiAgICBjb25zdCB2YWxpZGF0aW9uRXBvY2hSZWYgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IGJlZ2luVmFsaWRhdGlvblJ1biA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgbmV4dCA9ICh2YWxpZGF0aW9uRXBvY2hSZWYuY3VycmVudFtuYW1lXSB8fCAwKSArIDE7XG4gICAgICAgIHZhbGlkYXRpb25FcG9jaFJlZi5jdXJyZW50W25hbWVdID0gbmV4dDtcbiAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gICAgY29uc3QgaXNWYWxpZGF0aW9uUnVuQ3VycmVudCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIGVwb2NoKSA9PiB2YWxpZGF0aW9uRXBvY2hSZWYuY3VycmVudFtuYW1lXSA9PT0gZXBvY2gpO1xuICAgIC8vIEJ1bXAgKG5ldmVyIGRlbGV0ZSDigJQgZGVsZXRpb24gd291bGQgbGV0IGEgbmV3IHJ1biByZS1pc3N1ZSBhbiBvbGQgZXBvY2hcbiAgICAvLyBudW1iZXIgYW5kIGNvbGxpZGUgd2l0aCBhIHN0aWxsLWluLWZsaWdodCBwcmUtcmVzZXQgcnVuKS5cbiAgICBjb25zdCBpbnZhbGlkYXRlVmFsaWRhdGlvblJ1bnMgPSB1c2VNZW1vaXplZEZuKChuYW1lcykgPT4ge1xuICAgICAgICBjb25zdCBrZXlzID0gbmFtZXMgIT09IG51bGwgJiYgbmFtZXMgIT09IHZvaWQgMCA/IG5hbWVzIDogT2JqZWN0LmtleXModmFsaWRhdGlvbkVwb2NoUmVmLmN1cnJlbnQpO1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25FcG9jaFJlZi5jdXJyZW50W2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25FcG9jaFJlZi5jdXJyZW50W2tleV0gKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gSW5zdGFuY2UgaGFuZGVkIHRvIGZ1bmN0aW9uLWZvcm0gcnVsZXMuIERlZmF1bHRzIHRvIHRoZSBjb3JlIG1ldGhvZHNcbiAgICAvLyAoYXNzaWduZWQgYXQgdGhlIGVuZCBvZiB0aGlzIGhvb2sgYm9keSk7IHVzZUZvcm0gdXBncmFkZXMgaXQgdG8gdGhlIEZVTExcbiAgICAvLyBmb3JtIGluc3RhbmNlIG9uY2UgaXQgaGFzIGJ1aWx0IG9uZSwgc28gcnVsZXMgc2VlIHRoZSBzYW1lIGNvbnRleHQgb25cbiAgICAvLyBldmVyeSBwYXRoIChpbnRlcmFjdGl2ZSwgYmx1ciwgc3VibWl0KS5cbiAgICBjb25zdCBydWxlQ29udGV4dEluc3RhbmNlUmVmID0gdXNlUmVmKHt9KTtcbiAgICBjb25zdCBzZXRSdWxlQ29udGV4dEluc3RhbmNlID0gdXNlTWVtb2l6ZWRGbigoaW5zdGFuY2UpID0+IHtcbiAgICAgICAgcnVsZUNvbnRleHRJbnN0YW5jZVJlZi5jdXJyZW50ID0gaW5zdGFuY2U7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSA9IHVzZU1lbW9pemVkRm4oKCkgPT4gcnVsZUNvbnRleHRJbnN0YW5jZVJlZi5jdXJyZW50KTtcbiAgICBjb25zdCBjb21taXRWYWx1ZXMgPSB1c2VNZW1vaXplZEZuKChuZXdWYWx1ZXMpID0+IHtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB2YWx1ZXM6IG5ld1ZhbHVlcyB9KTtcbiAgICB9KTtcbiAgICAvLyBOT1RFOiBzZXR0aW5nIGEgdmFsdWUgZG9lcyBOT1QgdG91Y2ggdGhlIGZpZWxkJ3MgZXJyb3Ig4oCUIGVycm9ycyBhcmVcbiAgICAvLyBjbGVhcmVkIGV4Y2x1c2l2ZWx5IGJ5IHZhbGlkYXRpb24gcnVucyAod2hvc2UgdGltaW5nIGZvbGxvd3MgdGhlXG4gICAgLy8gdmFsaWRhdGVUcmlnZ2VyIGNvbmZpZyksIHNvIGFuIG9uQmx1ci1vbmx5IGZpZWxkIGtlZXBzIGl0cyBlcnJvciB3aGlsZVxuICAgIC8vIHRoZSB1c2VyIGlzIHN0aWxsIHR5cGluZy5cbiAgICBjb25zdCBzZXRGaWVsZFZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgcHJldiA9IHN0b3JlLmdldFN0YXRlKCkudmFsdWVzO1xuICAgICAgICBjb25zdCBuZXdWYWx1ZXMgPSBuYW1lLmluY2x1ZGVzKCcuJylcbiAgICAgICAgICAgID8gc2V0TmVzdGVkVmFsdWUocHJldiwgbmFtZSwgdmFsdWUpXG4gICAgICAgICAgICA6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgICAgICAgY29tbWl0VmFsdWVzKG5ld1ZhbHVlcyk7XG4gICAgICAgIG9uVmFsdWVzQ2hhbmdlID09PSBudWxsIHx8IG9uVmFsdWVzQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblZhbHVlc0NoYW5nZSh7IFtuYW1lXTogdmFsdWUgfSwgbmV3VmFsdWVzKTtcbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZEVycm9yID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gc3RvcmUuZ2V0U3RhdGUoKS5lcnJvcnM7XG4gICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCFlcnJvcnNbbmFtZV0pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgbmV3RXJyb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgZXJyb3JzKTtcbiAgICAgICAgICAgIGRlbGV0ZSBuZXdFcnJvcnNbbmFtZV07XG4gICAgICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IGVycm9yczogbmV3RXJyb3JzIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzYW1lVmFsaWRhdGlvbk5vZGUoZXJyb3JzW25hbWVdLCBlcnJvcikpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHsgZXJyb3JzOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGVycm9ycyksIHsgW25hbWVdOiBlcnJvciB9KSB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZFdhcm5pbmcgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB3YXJuaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHdhcm5pbmdzID0gc3RvcmUuZ2V0U3RhdGUoKS53YXJuaW5ncztcbiAgICAgICAgaWYgKHdhcm5pbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghd2FybmluZ3NbbmFtZV0pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgbmV3V2FybmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB3YXJuaW5ncyk7XG4gICAgICAgICAgICBkZWxldGUgbmV3V2FybmluZ3NbbmFtZV07XG4gICAgICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHdhcm5pbmdzOiBuZXdXYXJuaW5ncyB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2FtZVZhbGlkYXRpb25Ob2RlKHdhcm5pbmdzW25hbWVdLCB3YXJuaW5nKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB3YXJuaW5nczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB3YXJuaW5ncyksIHsgW25hbWVdOiB3YXJuaW5nIH0pIH0pO1xuICAgIH0pO1xuICAgIC8vIE1vdW50ZWQtaW5zdGFuY2UgY291bnRzIHBlciBmaWVsZCBuYW1lLCBwbHVzIHdoZXRoZXIgdGhlIENVUlJFTlQgcnVsZXNcbiAgICAvLyByZWdpc3RyYXRpb24gd2FzIG1hZGUgYnkgYSBjb3VudGVkIGluc3RhbmNlLiBSdWxlcyBhcmUgcmVtb3ZlZCBvbmx5IHdoZW5cbiAgICAvLyB0aGUgTEFTVCBtb3VudGVkIGluc3RhbmNlIGZvciBhIG5hbWUgcmVsZWFzZXM6IHdpdGggdHdvIHNhbWUtbmFtZSBmaWVsZHNcbiAgICAvLyBtb3VudGVkLCB0aGUgZmlyc3QgdW5tb3VudCBtdXN0IG5vdCB3aXBlIHRoZSByZWdpc3RyYXRpb24gd2hpbGUgdGhlXG4gICAgLy8gc3Vydml2b3IgKHBvc3NpYmx5IG1lbW8tYmFpbGVkLCBzbyBub3QgcmUtcmVuZGVyaW5nIHRvIHJlLXJlZ2lzdGVyKSBzdGlsbFxuICAgIC8vIHJlbGllcyBvbiBpdCBmb3Igc3VibWl0LXRpbWUgdmFsaWRhdGlvbi4gQSBNQU5VQUwgcmVnaXN0ZXJGaWVsZCAobm9cbiAgICAvLyBtb3VudGVkIGhvbGRlciwgb3duZWQ9ZmFsc2UpIHN1cnZpdmVzIHRoZSB1bm1vdW50IG9mIHBpZ2d5YmFja2luZ1xuICAgIC8vIGluc3RhbmNlcyB0aGF0IG5ldmVyIHJlZ2lzdGVyZWQgcnVsZXMgdGhlbXNlbHZlcy5cbiAgICAvLyBOT1RFOiBjYWxsZXJzIG11c3QgcmV0YWluIEJFRk9SRSByZWdpc3RlcmluZyAocmV0YWluIGVmZmVjdCBkZWNsYXJlZFxuICAgIC8vIGZpcnN0KSwgb3IgdGhlIHJlZ2lzdHJhdGlvbiBpcyBtaXNjbGFzc2lmaWVkIGFzIG1hbnVhbCBhbmQgbGVha3MuXG4gICAgY29uc3QgZmllbGRNb3VudENvdW50c1JlZiA9IHVzZVJlZih7fSk7XG4gICAgY29uc3QgZmllbGRSZWdpc3RyYXRpb25Pd25lZFJlZiA9IHVzZVJlZih7fSk7XG4gICAgY29uc3QgcmVnaXN0ZXJGaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHJ1bGVzKSA9PiB7XG4gICAgICAgIGZpZWxkUnVsZXNSZWYuY3VycmVudFtuYW1lXSA9IHJ1bGVzO1xuICAgICAgICBmaWVsZFJlZ2lzdHJhdGlvbk93bmVkUmVmLmN1cnJlbnRbbmFtZV0gPSAoZmllbGRNb3VudENvdW50c1JlZi5jdXJyZW50W25hbWVdIHx8IDApID4gMDtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZFJ1bGVzID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gZmllbGRSdWxlc1JlZi5jdXJyZW50W25hbWVdO1xuICAgIH0pO1xuICAgIGNvbnN0IHVucmVnaXN0ZXJGaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgZGVsZXRlIGZpZWxkUnVsZXNSZWYuY3VycmVudFtuYW1lXTtcbiAgICAgICAgZGVsZXRlIGZpZWxkUmVnaXN0cmF0aW9uT3duZWRSZWYuY3VycmVudFtuYW1lXTtcbiAgICB9KTtcbiAgICBjb25zdCByZXRhaW5GaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgZmllbGRNb3VudENvdW50c1JlZi5jdXJyZW50W25hbWVdID0gKGZpZWxkTW91bnRDb3VudHNSZWYuY3VycmVudFtuYW1lXSB8fCAwKSArIDE7XG4gICAgfSk7XG4gICAgY29uc3QgcmVsZWFzZUZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBjb3VudCA9IChmaWVsZE1vdW50Q291bnRzUmVmLmN1cnJlbnRbbmFtZV0gfHwgMCkgLSAxO1xuICAgICAgICBpZiAoY291bnQgPD0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkTW91bnRDb3VudHNSZWYuY3VycmVudFtuYW1lXTtcbiAgICAgICAgICAgIGlmIChmaWVsZFJlZ2lzdHJhdGlvbk93bmVkUmVmLmN1cnJlbnRbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZmllbGRSdWxlc1JlZi5jdXJyZW50W25hbWVdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWVsZFJlZ2lzdHJhdGlvbk93bmVkUmVmLmN1cnJlbnRbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmaWVsZE1vdW50Q291bnRzUmVmLmN1cnJlbnRbbmFtZV0gPSBjb3VudDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHZhbGlkYXRlRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBydWxlcyA9IFtdLCBwcm92aWRlZFZhbHVlKSA9PiB7XG4gICAgICAgIC8vIEEgc3luYyBydW4gY29tbWl0cyBpbW1lZGlhdGVseSwgc28gaXQgaXMgYWx3YXlzIGN1cnJlbnQg4oCUIGJ1bXBpbmcgdGhlXG4gICAgICAgIC8vIGVwb2NoIGhlcmUgU1VQRVJTRURFUyBhbnkgaW4tZmxpZ2h0IGFzeW5jIHJ1biBmb3IgdGhpcyBmaWVsZC5cbiAgICAgICAgYmVnaW5WYWxpZGF0aW9uUnVuKG5hbWUpO1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gc3RvcmUuZ2V0U3RhdGUoKS52YWx1ZXM7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcHJvdmlkZWRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gcHJvdmlkZWRWYWx1ZSA6IHJlc29sdmVWYWx1ZShjdXJyZW50VmFsdWVzLCBuYW1lKTtcbiAgICAgICAgY29uc3QgeyBlcnJvciwgd2FybmluZyB9ID0gcnVuUnVsZXNTeW5jKG5hbWUsIHZhbHVlLCBjdXJyZW50VmFsdWVzLCBydWxlcywgcnVsZUNvbnRleHRJbnN0YW5jZVJlZi5jdXJyZW50KTtcbiAgICAgICAgc2V0RmllbGRXYXJuaW5nKG5hbWUsIHdhcm5pbmcpO1xuICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdG9yZS5nZXRTdGF0ZSgpLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgc2V0RmllbGRFcnJvcihuYW1lLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkcyA9IHVzZU1lbW9pemVkRm4oKGZpZWxkc1J1bGVzVG9WYWxpZGF0ZSA9IGZpZWxkUnVsZXNSZWYuY3VycmVudCkgPT4ge1xuICAgICAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgIE9iamVjdC5rZXlzKGZpZWxkc1J1bGVzVG9WYWxpZGF0ZSkuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmaWVsZHNSdWxlc1RvVmFsaWRhdGVbbmFtZV07XG4gICAgICAgICAgICBpZiAoIXZhbGlkYXRlRmllbGQobmFtZSwgcnVsZXMpKSB7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWQ7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlU3VibWl0SW50ZXJuYWwgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gc3RhdGUudmFsdWVzO1xuICAgICAgICBjb25zdCBjdXJyZW50UnVsZXMgPSBmaWVsZFJ1bGVzUmVmLmN1cnJlbnQ7XG4gICAgICAgIGxldCBoYXNFcnJvcnMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmFpbGVkRXJyb3JzID0ge307XG4gICAgICAgIC8vIE1FUkdFIG92ZXIgdGhlIGN1cnJlbnQgbWFwczogb25seSBmaWVsZHMgaW4gdGhlIHJ1bGUgcmVnaXN0cnkgYXJlXG4gICAgICAgIC8vIHJlLWRlY2lkZWQg4oCUIGEgbWFudWFsbHktc2V0IGVycm9yIG9uIGEgZmllbGQgd2l0aG91dCBydWxlcyBzdXJ2aXZlcy5cbiAgICAgICAgY29uc3QgbmV3RXJyb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuZXJyb3JzKTtcbiAgICAgICAgY29uc3QgbmV3V2FybmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS53YXJuaW5ncyk7XG4gICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRSdWxlcykuZm9yRWFjaCgoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICBiZWdpblZhbGlkYXRpb25SdW4oZmllbGROYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZVZhbHVlKGN1cnJlbnRWYWx1ZXMsIGZpZWxkTmFtZSk7XG4gICAgICAgICAgICBjb25zdCB7IGVycm9yLCB3YXJuaW5nIH0gPSBydW5SdWxlc1N5bmMoZmllbGROYW1lLCB2YWx1ZSwgY3VycmVudFZhbHVlcywgY3VycmVudFJ1bGVzW2ZpZWxkTmFtZV0sIHJ1bGVDb250ZXh0SW5zdGFuY2VSZWYuY3VycmVudCk7XG4gICAgICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBuZXdFcnJvcnNbZmllbGROYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIGZhaWxlZEVycm9yc1tmaWVsZE5hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdFcnJvcnNbZmllbGROYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3YXJuaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbmV3V2FybmluZ3NbZmllbGROYW1lXSA9IHdhcm5pbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3V2FybmluZ3NbZmllbGROYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHsgZXJyb3JzOiBuZXdFcnJvcnMsIHdhcm5pbmdzOiBuZXdXYXJuaW5ncyB9KTtcbiAgICAgICAgaWYgKCFoYXNFcnJvcnMpIHtcbiAgICAgICAgICAgIG9uRmluaXNoID09PSBudWxsIHx8IG9uRmluaXNoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaChjdXJyZW50VmFsdWVzKTtcbiAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHZhbHVlczogY3VycmVudFZhbHVlcyB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb25GaW5pc2hGYWlsZWQgPT09IG51bGwgfHwgb25GaW5pc2hGYWlsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoRmFpbGVkKHsgdmFsdWVzOiBjdXJyZW50VmFsdWVzLCBlcnJvcnM6IGZhaWxlZEVycm9ycyB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcnM6IGZhaWxlZEVycm9ycyB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVN1Ym1pdEludGVybmFsKCk7XG4gICAgfSk7XG4gICAgLy8gUHVyZSBzdGF0ZSBBUEk6IHRoZSBpbXBlcmF0aXZlIHJlc2V0RmllbGRzKClcbiAgICAvLyBuZXZlciBmaXJlcyBvblJlc2V0LiBUaGUgY2FsbGJhY2sgYmVsb25ncyB0byB0aGUgcmVzZXQgQUNUSU9OIGxheWVyXG4gICAgLy8gKHN1Ym1pdHRlciBidXR0b24gLyBuYXRpdmUgcmVzZXQgZXZlbnQpLCB3aGljaCBmaXJlcyBpdCBleGFjdGx5IG9uY2UuXG4gICAgY29uc3QgcmVzZXRGaWVsZHMgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgLy8gSW52YWxpZGF0ZSBpbi1mbGlnaHQgYXN5bmMgdmFsaWRhdGlvbiBydW5zIOKAlCB0aGVpciByZXN1bHRzIGJlbG9uZyB0b1xuICAgICAgICAvLyBwcmUtcmVzZXQgdmFsdWVzIGFuZCBtdXN0IG5vdCBzdGFtcCBlcnJvcnMgb250byB0aGUgcmVzZXQgZm9ybS5cbiAgICAgICAgaW52YWxpZGF0ZVZhbGlkYXRpb25SdW5zKCk7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHZhbHVlczogbW91bnRJbml0aWFsVmFsdWVzLFxuICAgICAgICAgICAgZXJyb3JzOiB7fSxcbiAgICAgICAgICAgIHdhcm5pbmdzOiB7fSxcbiAgICAgICAgICAgIHRvdWNoZWQ6IHt9LFxuICAgICAgICAgICAgdmFsaWRhdGluZzoge30sXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVJlc2V0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmVzZXRGaWVsZHMoKTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RmllbGRWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVWYWx1ZShzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcywgbmFtZSk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RmllbGRzVmFsdWUgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHN0b3JlLmdldFN0YXRlKCkudmFsdWVzO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkc1ZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmV3VmFsdWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcztcbiAgICAgICAgbGV0IHVwZGF0ZWRWYWx1ZXM7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhuZXdWYWx1ZXMpLnNvbWUoKGtleSkgPT4ga2V5LmluY2x1ZGVzKCcuJykpKSB7XG4gICAgICAgICAgICAvLyBEb3QtcGF0aCBrZXlzIHdyaXRlIGludG8gdGhlIE5FU1RFRCBzdHJ1Y3R1cmUgKHRoZSBzZXRGaWVsZFZhbHVlXG4gICAgICAgICAgICAvLyBjb250cmFjdCkg4oCUIGEgc2hhbGxvdyBtZXJnZSB3b3VsZCBsYW5kIHRoZW0gYXMgbGl0ZXJhbCB0b3AtbGV2ZWxcbiAgICAgICAgICAgIC8vIGtleXMgdGhhdCB0aGUgbmVzdGVkLWF3YXJlIHJlYWRlcnMgbmV2ZXIgZmluZC5cbiAgICAgICAgICAgIHVwZGF0ZWRWYWx1ZXMgPSBwcmV2O1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3VmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZWRWYWx1ZXMgPSBrZXkuaW5jbHVkZXMoJy4nKVxuICAgICAgICAgICAgICAgICAgICA/IHNldE5lc3RlZFZhbHVlKHVwZGF0ZWRWYWx1ZXMsIGtleSwgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB1cGRhdGVkVmFsdWVzKSwgeyBba2V5XTogdmFsdWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB1cGRhdGVkVmFsdWVzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgbmV3VmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgICBjb21taXRWYWx1ZXModXBkYXRlZFZhbHVlcyk7XG4gICAgICAgIG9uVmFsdWVzQ2hhbmdlID09PSBudWxsIHx8IG9uVmFsdWVzQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblZhbHVlc0NoYW5nZShuZXdWYWx1ZXMsIHVwZGF0ZWRWYWx1ZXMpO1xuICAgIH0pO1xuICAgIC8vIFNlZWQgdGhlIHJ1bGUtY29udGV4dCBpbnN0YW5jZSB3aXRoIHRoZSBjb3JlIG1ldGhvZHMgZXhhY3RseSBvbmNlIOKAlFxuICAgIC8vIHVzZUZvcm0ncyByaWNoZXIgaW5zdGFuY2UgbXVzdCBub3QgYmUgZG93bmdyYWRlZCBvbiBsYXRlciByZW5kZXJzLlxuICAgIGlmIChPYmplY3Qua2V5cyhydWxlQ29udGV4dEluc3RhbmNlUmVmLmN1cnJlbnQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBydWxlQ29udGV4dEluc3RhbmNlUmVmLmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBnZXRGaWVsZFZhbHVlLFxuICAgICAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICAgICAgc2V0RmllbGRzVmFsdWUsXG4gICAgICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgZm9ybUluc3RhbmNlID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICBzdWJtaXQ6IGhhbmRsZVN1Ym1pdEludGVybmFsLFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyxcbiAgICB9KSwgW1xuICAgICAgICBoYW5kbGVTdWJtaXRJbnRlcm5hbCxcbiAgICAgICAgcmVzZXRGaWVsZHMsXG4gICAgICAgIGdldEZpZWxkVmFsdWUsXG4gICAgICAgIGdldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgdmFsaWRhdGVGaWVsZHMsXG4gICAgXSk7XG4gICAgLy8gUmVuZGVyLXRpbWUgc25hcHNob3Qg4oCUIGtlcHQgZm9yIHRoZSBVc2VGb3JtQ29yZVJldHVybiBjb250cmFjdC4gUmVhY3RpdmVcbiAgICAvLyBjb25zdW1lcnMgbXVzdCBnbyB0aHJvdWdoIHRoZSBzdG9yZSwgbmV2ZXIgdGhyb3VnaCB0aGVzZSBmaWVsZHMuXG4gICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGNvcmVDb250ZXh0U2hhcGUgPSB7XG4gICAgICAgIHZhbHVlczogc3RhdGUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IHN0YXRlLmVycm9ycyxcbiAgICAgICAgd2FybmluZ3M6IHN0YXRlLndhcm5pbmdzLFxuICAgICAgICB0b3VjaGVkOiBzdGF0ZS50b3VjaGVkLFxuICAgICAgICBmb3JtSW5zdGFuY2UsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHNldEZpZWxkRXJyb3IsXG4gICAgICAgIHNldEZpZWxkV2FybmluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZCxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBzaXplLFxuICAgICAgICBsYWJlbEFsaWduLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgdmFsaWRhdGVUcmlnZ2VyLFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzOiBzdGF0ZS52YWx1ZXMsXG4gICAgICAgIGVycm9yczogc3RhdGUuZXJyb3JzLFxuICAgICAgICB3YXJuaW5nczogc3RhdGUud2FybmluZ3MsXG4gICAgICAgIHRvdWNoZWQ6IHN0YXRlLnRvdWNoZWQsXG4gICAgICAgIC8vIExpdmUgcmVnaXN0cnkg4oCUIHN0YWJsZSBpZGVudGl0eSwgbXV0YXRlZCBpbiBwbGFjZSBieSByZWdpc3Rlci91bnJlZ2lzdGVyLlxuICAgICAgICBmaWVsZFJ1bGVzOiBmaWVsZFJ1bGVzUmVmLmN1cnJlbnQsXG4gICAgICAgIGdldEZpZWxkUnVsZXMsXG4gICAgICAgIGdldFJ1bGVDb250ZXh0SW5zdGFuY2UsXG4gICAgICAgIHNldFJ1bGVDb250ZXh0SW5zdGFuY2UsXG4gICAgICAgIGJlZ2luVmFsaWRhdGlvblJ1bixcbiAgICAgICAgaXNWYWxpZGF0aW9uUnVuQ3VycmVudCxcbiAgICAgICAgaW52YWxpZGF0ZVZhbGlkYXRpb25SdW5zLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yLFxuICAgICAgICBzZXRGaWVsZFdhcm5pbmcsXG4gICAgICAgIHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBnZXRGaWVsZFZhbHVlLFxuICAgICAgICBnZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgdmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZHMsXG4gICAgICAgIHJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgcmV0YWluRmllbGQsXG4gICAgICAgIHJlbGVhc2VGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICAgICAgcmVzZXRGaWVsZHMsXG4gICAgICAgIGZvcm1JbnN0YW5jZSxcbiAgICAgICAgY29yZUNvbnRleHRTaGFwZSxcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIGdldEluaXRpYWxWYWx1ZXM6ICgpID0+IG1vdW50SW5pdGlhbFZhbHVlcyxcbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IHVzZUZvcm1Db3JlOyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
|