@1money/component-ui 0.0.75 → 0.0.77

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/es/components/ProForm/ProForm.d.ts +1 -1
  2. package/es/components/ProForm/ProForm.js +46 -34
  3. package/es/components/ProForm/ProFormDependency.d.ts +2 -1
  4. package/es/components/ProForm/ProFormDependency.js +6 -16
  5. package/es/components/ProForm/ProFormItem.d.ts +7 -2
  6. package/es/components/ProForm/ProFormItem.js +5 -7
  7. package/es/components/ProForm/ProFormList.d.ts +6 -1
  8. package/es/components/ProForm/ProFormList.js +122 -42
  9. package/es/components/ProForm/SchemaForm.d.ts +1 -1
  10. package/es/components/ProForm/SchemaForm.js +8 -5
  11. package/es/components/ProForm/context.d.ts +8 -7
  12. package/es/components/ProForm/context.js +1 -1
  13. package/es/components/ProForm/core/constants.d.ts +3 -1
  14. package/es/components/ProForm/core/constants.js +8 -2
  15. package/es/components/ProForm/core/devWarning.d.ts +3 -0
  16. package/es/components/ProForm/core/devWarning.js +22 -0
  17. package/es/components/ProForm/core/formStore.d.ts +14 -6
  18. package/es/components/ProForm/core/formStore.js +21 -2
  19. package/es/components/ProForm/core/hooks/useForm.d.ts +1 -1
  20. package/es/components/ProForm/core/hooks/useForm.js +275 -107
  21. package/es/components/ProForm/core/hooks/useFormCore.d.ts +2 -2
  22. package/es/components/ProForm/core/hooks/useFormCore.js +121 -121
  23. package/es/components/ProForm/core/interface.d.ts +157 -103
  24. package/es/components/ProForm/core/namePathType.d.ts +25 -0
  25. package/es/components/ProForm/core/namePathType.js +2 -0
  26. package/es/components/ProForm/core/pathUtils.d.ts +5 -3
  27. package/es/components/ProForm/core/pathUtils.js +19 -1
  28. package/es/components/ProForm/core/runRules.d.ts +40 -17
  29. package/es/components/ProForm/core/runRules.js +480 -136
  30. package/es/components/ProForm/core/useFormItem.d.ts +7 -8
  31. package/es/components/ProForm/core/useFormItem.js +52 -82
  32. package/es/components/ProForm/core/validationError.d.ts +13 -0
  33. package/es/components/ProForm/core/validationError.js +29 -0
  34. package/es/components/ProForm/fields/ProFormCheckbox.d.ts +1 -1
  35. package/es/components/ProForm/fields/ProFormCheckboxGroup.d.ts +1 -1
  36. package/es/components/ProForm/fields/ProFormCheckboxGroup.js +19 -5
  37. package/es/components/ProForm/fields/ProFormDatePicker.d.ts +1 -1
  38. package/es/components/ProForm/fields/ProFormDatePicker.js +1 -1
  39. package/es/components/ProForm/fields/ProFormFieldSet.d.ts +7 -2
  40. package/es/components/ProForm/fields/ProFormFieldSet.js +49 -12
  41. package/es/components/ProForm/fields/ProFormPassword.d.ts +1 -1
  42. package/es/components/ProForm/fields/ProFormRadioGroup.d.ts +1 -1
  43. package/es/components/ProForm/fields/ProFormRadioGroup.js +8 -3
  44. package/es/components/ProForm/fields/ProFormSelect.d.ts +1 -1
  45. package/es/components/ProForm/fields/ProFormSelect.js +13 -7
  46. package/es/components/ProForm/fields/ProFormSlider.d.ts +1 -1
  47. package/es/components/ProForm/fields/ProFormSwitch.d.ts +1 -1
  48. package/es/components/ProForm/fields/ProFormText.d.ts +1 -1
  49. package/es/components/ProForm/fields/ProFormTextArea.d.ts +1 -1
  50. package/es/components/ProForm/fields/ProFormUpload.d.ts +1 -1
  51. package/es/components/ProForm/fields/ProFormUpload.js +1 -1
  52. package/es/components/ProForm/fields/createProFormField.d.ts +8 -2
  53. package/es/components/ProForm/fields/createProFormField.js +20 -27
  54. package/es/components/ProForm/hooks/useFieldRequest.d.ts +1 -1
  55. package/es/components/ProForm/hooks/useFieldRequest.js +10 -8
  56. package/es/components/ProForm/hooks/useUrlSync.d.ts +8 -7
  57. package/es/components/ProForm/hooks/useUrlSync.js +1 -1
  58. package/es/components/ProForm/index.d.ts +37 -27
  59. package/es/components/ProForm/index.js +4 -1
  60. package/es/components/ProForm/interface.d.ts +115 -119
  61. package/es/components/ProForm/layouts/DialogForm.d.ts +1 -1
  62. package/es/components/ProForm/layouts/DialogForm.js +1 -1
  63. package/es/components/ProForm/layouts/DrawerForm.d.ts +1 -1
  64. package/es/components/ProForm/layouts/DrawerForm.js +1 -1
  65. package/es/components/ProForm/layouts/QueryFilter.d.ts +1 -1
  66. package/es/components/ProForm/layouts/QueryFilter.js +24 -16
  67. package/es/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  68. package/es/components/ProForm/layouts/useOverlayForm.js +1 -1
  69. package/es/components/ProForm/utils.d.ts +15 -7
  70. package/es/components/ProForm/utils.js +51 -3
  71. package/es/components/Table/core/useTableSetup.js +2 -2
  72. package/es/components/Table/interface.d.ts +1 -1
  73. package/es/index.css +1 -1
  74. package/es/index.d.ts +1 -1
  75. package/es/index.js +1 -1
  76. package/lib/components/ProForm/ProForm.d.ts +1 -1
  77. package/lib/components/ProForm/ProForm.js +45 -33
  78. package/lib/components/ProForm/ProFormDependency.d.ts +2 -1
  79. package/lib/components/ProForm/ProFormDependency.js +5 -15
  80. package/lib/components/ProForm/ProFormItem.d.ts +7 -2
  81. package/lib/components/ProForm/ProFormItem.js +5 -7
  82. package/lib/components/ProForm/ProFormList.d.ts +6 -1
  83. package/lib/components/ProForm/ProFormList.js +120 -40
  84. package/lib/components/ProForm/SchemaForm.d.ts +1 -1
  85. package/lib/components/ProForm/SchemaForm.js +8 -5
  86. package/lib/components/ProForm/context.d.ts +8 -7
  87. package/lib/components/ProForm/context.js +1 -1
  88. package/lib/components/ProForm/core/constants.d.ts +3 -1
  89. package/lib/components/ProForm/core/constants.js +9 -3
  90. package/lib/components/ProForm/core/devWarning.d.ts +3 -0
  91. package/lib/components/ProForm/core/devWarning.js +29 -0
  92. package/lib/components/ProForm/core/formStore.d.ts +14 -6
  93. package/lib/components/ProForm/core/formStore.js +23 -2
  94. package/lib/components/ProForm/core/hooks/useForm.d.ts +1 -1
  95. package/lib/components/ProForm/core/hooks/useForm.js +271 -103
  96. package/lib/components/ProForm/core/hooks/useFormCore.d.ts +2 -2
  97. package/lib/components/ProForm/core/hooks/useFormCore.js +119 -119
  98. package/lib/components/ProForm/core/interface.d.ts +157 -103
  99. package/lib/components/ProForm/core/namePathType.d.ts +25 -0
  100. package/lib/components/ProForm/core/namePathType.js +6 -0
  101. package/lib/components/ProForm/core/pathUtils.d.ts +5 -3
  102. package/lib/components/ProForm/core/pathUtils.js +20 -1
  103. package/lib/components/ProForm/core/runRules.d.ts +40 -17
  104. package/lib/components/ProForm/core/runRules.js +483 -137
  105. package/lib/components/ProForm/core/useFormItem.d.ts +7 -8
  106. package/lib/components/ProForm/core/useFormItem.js +54 -84
  107. package/lib/components/ProForm/core/validationError.d.ts +13 -0
  108. package/lib/components/ProForm/core/validationError.js +36 -0
  109. package/lib/components/ProForm/fields/ProFormCheckbox.d.ts +1 -1
  110. package/lib/components/ProForm/fields/ProFormCheckboxGroup.d.ts +1 -1
  111. package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +18 -4
  112. package/lib/components/ProForm/fields/ProFormDatePicker.d.ts +1 -1
  113. package/lib/components/ProForm/fields/ProFormDatePicker.js +1 -1
  114. package/lib/components/ProForm/fields/ProFormFieldSet.d.ts +7 -2
  115. package/lib/components/ProForm/fields/ProFormFieldSet.js +49 -12
  116. package/lib/components/ProForm/fields/ProFormPassword.d.ts +1 -1
  117. package/lib/components/ProForm/fields/ProFormRadioGroup.d.ts +1 -1
  118. package/lib/components/ProForm/fields/ProFormRadioGroup.js +7 -2
  119. package/lib/components/ProForm/fields/ProFormSelect.d.ts +1 -1
  120. package/lib/components/ProForm/fields/ProFormSelect.js +13 -7
  121. package/lib/components/ProForm/fields/ProFormSlider.d.ts +1 -1
  122. package/lib/components/ProForm/fields/ProFormSwitch.d.ts +1 -1
  123. package/lib/components/ProForm/fields/ProFormText.d.ts +1 -1
  124. package/lib/components/ProForm/fields/ProFormTextArea.d.ts +1 -1
  125. package/lib/components/ProForm/fields/ProFormUpload.d.ts +1 -1
  126. package/lib/components/ProForm/fields/ProFormUpload.js +1 -1
  127. package/lib/components/ProForm/fields/createProFormField.d.ts +8 -2
  128. package/lib/components/ProForm/fields/createProFormField.js +20 -27
  129. package/lib/components/ProForm/hooks/useFieldRequest.d.ts +1 -1
  130. package/lib/components/ProForm/hooks/useFieldRequest.js +10 -8
  131. package/lib/components/ProForm/hooks/useUrlSync.d.ts +8 -7
  132. package/lib/components/ProForm/hooks/useUrlSync.js +1 -1
  133. package/lib/components/ProForm/index.d.ts +37 -27
  134. package/lib/components/ProForm/index.js +10 -1
  135. package/lib/components/ProForm/interface.d.ts +115 -119
  136. package/lib/components/ProForm/layouts/DialogForm.d.ts +1 -1
  137. package/lib/components/ProForm/layouts/DialogForm.js +1 -1
  138. package/lib/components/ProForm/layouts/DrawerForm.d.ts +1 -1
  139. package/lib/components/ProForm/layouts/DrawerForm.js +1 -1
  140. package/lib/components/ProForm/layouts/QueryFilter.d.ts +1 -1
  141. package/lib/components/ProForm/layouts/QueryFilter.js +24 -16
  142. package/lib/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  143. package/lib/components/ProForm/layouts/useOverlayForm.js +1 -1
  144. package/lib/components/ProForm/utils.d.ts +15 -7
  145. package/lib/components/ProForm/utils.js +52 -3
  146. package/lib/components/Table/core/useTableSetup.js +2 -2
  147. package/lib/components/Table/interface.d.ts +1 -1
  148. package/lib/index.css +1 -1
  149. package/lib/index.d.ts +1 -1
  150. package/lib/index.js +1 -1
  151. package/package.json +1 -1
  152. package/scripts/mcp-server/examples.generated.json +95 -53
  153. package/scripts/mcp-server/index.generated.json +1715 -185
@@ -1,7 +1,7 @@
1
1
  import type { FormStore } from '../formStore';
2
2
  import type { UseFormCoreConfig, UseFormCoreReturn } from '../interface';
3
- export declare const useFormCore: (config?: UseFormCoreConfig) => UseFormCoreReturn & {
3
+ export declare const useFormCore: <Values = Record<string, any>>(config?: UseFormCoreConfig<Values>) => UseFormCoreReturn<Values> & {
4
4
  store: FormStore;
5
- getInitialValues: () => Record<string, unknown>;
5
+ getInitialValues: () => Record<string, any>;
6
6
  };
7
7
  export default useFormCore;
@@ -5,19 +5,17 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.useFormCore = exports["default"] = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
8
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
10
  var _react = require("react");
10
11
  var _useEventCallback = _interopRequireDefault(require("@1money/hooks/useEventCallback"));
11
12
  var _useMemoizedFn = _interopRequireDefault(require("@1money/hooks/useMemoizedFn"));
12
13
  var _pathUtils = require("../pathUtils");
13
- var _runRules = require("../runRules");
14
14
  var _formStore = require("../formStore");
15
15
  var useFormCore = exports.useFormCore = function useFormCore() {
16
16
  var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
17
17
  var _config$initialValues = config.initialValues,
18
18
  initialValues = _config$initialValues === void 0 ? {} : _config$initialValues,
19
- onFinish = config.onFinish,
20
- onFinishFailed = config.onFinishFailed,
21
19
  onValuesChange = config.onValuesChange,
22
20
  onReset = config.onReset,
23
21
  _config$size = config.size,
@@ -26,10 +24,6 @@ var useFormCore = exports.useFormCore = function useFormCore() {
26
24
  labelAlign = _config$labelAlign === void 0 ? 'left' : _config$labelAlign,
27
25
  _config$disabled = config.disabled,
28
26
  disabled = _config$disabled === void 0 ? false : _config$disabled,
29
- _config$colon = config.colon,
30
- colon = _config$colon === void 0 ? true : _config$colon,
31
- _config$requiredMark = config.requiredMark,
32
- requiredMark = _config$requiredMark === void 0 ? true : _config$requiredMark,
33
27
  _config$validateTrigg = config.validateTrigger,
34
28
  validateTrigger = _config$validateTrigg === void 0 ? 'onChange' : _config$validateTrigg;
35
29
  // initialValues is MOUNT-ONLY (the documented contract): freeze the first
@@ -55,26 +49,57 @@ var useFormCore = exports.useFormCore = function useFormCore() {
55
49
  // not trigger renders, and submit-time validation must always read the latest
56
50
  // rules (they can change between renders, e.g. a conditional `required`).
57
51
  var fieldRulesRef = (0, _react.useRef)({});
52
+ // Per-field validation run epochs. EVERY validation run (sync or async)
53
+ // bumps its field's epoch; an async run re-checks its captured epoch at
54
+ // settle time and discards a STALE outcome — the same protection as
55
+ // rc-field-form's validatePromise identity check. Without it, a slow async
56
+ // validator (e.g. a server-side uniqueness check started on blur) could
57
+ // settle after the user already fixed the value and stamp a stale error
58
+ // over a newer, passing result.
59
+ var validationEpochRef = (0, _react.useRef)({});
60
+ var beginValidationRun = (0, _useMemoizedFn["default"])(function (name) {
61
+ var next = (validationEpochRef.current[name] || 0) + 1;
62
+ validationEpochRef.current[name] = next;
63
+ return next;
64
+ });
65
+ var isValidationRunCurrent = (0, _useMemoizedFn["default"])(function (name, epoch) {
66
+ return validationEpochRef.current[name] === epoch;
67
+ });
68
+ // Bump (never delete — deletion would let a new run re-issue an old epoch
69
+ // number and collide with a still-in-flight pre-reset run).
70
+ var invalidateValidationRuns = (0, _useMemoizedFn["default"])(function (names) {
71
+ var keys = names !== null && names !== void 0 ? names : Object.keys(validationEpochRef.current);
72
+ keys.forEach(function (key) {
73
+ if (validationEpochRef.current[key] !== undefined) {
74
+ validationEpochRef.current[key] += 1;
75
+ }
76
+ });
77
+ });
78
+ // Instance handed to function-form rules. Defaults to the core methods
79
+ // (assigned at the end of this hook body); useForm upgrades it to the FULL
80
+ // form instance once it has built one, so rules see the same context on
81
+ // every path (interactive, blur, submit).
82
+ var ruleContextInstanceRef = (0, _react.useRef)({});
83
+ var setRuleContextInstance = (0, _useMemoizedFn["default"])(function (instance) {
84
+ ruleContextInstanceRef.current = instance;
85
+ });
86
+ var getRuleContextInstance = (0, _useMemoizedFn["default"])(function () {
87
+ return ruleContextInstanceRef.current;
88
+ });
58
89
  var commitValues = (0, _useMemoizedFn["default"])(function (newValues) {
59
90
  store.setState({
60
91
  values: newValues
61
92
  });
62
93
  });
94
+ // NOTE: setting a value does NOT touch the field's error — errors are
95
+ // cleared exclusively by validation runs (whose timing follows the
96
+ // validateTrigger config), so an onBlur-only field keeps its error while
97
+ // the user is still typing.
63
98
  var setFieldValue = (0, _useMemoizedFn["default"])(function (name, value) {
64
99
  var prev = store.getState().values;
65
100
  var newValues = name.includes('.') ? (0, _pathUtils.setNestedValue)(prev, name, value) : Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, value));
66
101
  commitValues(newValues);
67
102
  onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange((0, _defineProperty2["default"])({}, name, value), newValues);
68
- if (value !== '' && value !== null && value !== undefined) {
69
- var errors = store.getState().errors;
70
- if (errors[name]) {
71
- var newErrors = Object.assign({}, errors);
72
- delete newErrors[name];
73
- store.setState({
74
- errors: newErrors
75
- });
76
- }
77
- }
78
103
  });
79
104
  var setFieldError = (0, _useMemoizedFn["default"])(function (name, error) {
80
105
  var errors = store.getState().errors;
@@ -87,7 +112,7 @@ var useFormCore = exports.useFormCore = function useFormCore() {
87
112
  });
88
113
  return;
89
114
  }
90
- if (errors[name] === error) return;
115
+ if ((0, _formStore.sameValidationNode)(errors[name], error)) return;
91
116
  store.setState({
92
117
  errors: Object.assign(Object.assign({}, errors), (0, _defineProperty2["default"])({}, name, error))
93
118
  });
@@ -103,97 +128,56 @@ var useFormCore = exports.useFormCore = function useFormCore() {
103
128
  });
104
129
  return;
105
130
  }
106
- if (warnings[name] === warning) return;
131
+ if ((0, _formStore.sameValidationNode)(warnings[name], warning)) return;
107
132
  store.setState({
108
133
  warnings: Object.assign(Object.assign({}, warnings), (0, _defineProperty2["default"])({}, name, warning))
109
134
  });
110
135
  });
136
+ // Mounted-instance counts per field name, plus whether the CURRENT rules
137
+ // registration was made by a counted instance. Rules are removed only when
138
+ // the LAST mounted instance for a name releases: with two same-name fields
139
+ // mounted, the first unmount must not wipe the registration while the
140
+ // survivor (possibly memo-bailed, so not re-rendering to re-register) still
141
+ // relies on it for submit-time validation. A MANUAL registerField (no
142
+ // mounted holder, owned=false) survives the unmount of piggybacking
143
+ // instances that never registered rules themselves.
144
+ // NOTE: callers must retain BEFORE registering (retain effect declared
145
+ // first), or the registration is misclassified as manual and leaks.
146
+ var fieldMountCountsRef = (0, _react.useRef)({});
147
+ var fieldRegistrationOwnedRef = (0, _react.useRef)({});
111
148
  var registerField = (0, _useMemoizedFn["default"])(function (name, rules) {
112
149
  fieldRulesRef.current[name] = rules;
150
+ fieldRegistrationOwnedRef.current[name] = (fieldMountCountsRef.current[name] || 0) > 0;
113
151
  });
114
152
  var getFieldRules = (0, _useMemoizedFn["default"])(function (name) {
115
153
  return fieldRulesRef.current[name];
116
154
  });
117
155
  var unregisterField = (0, _useMemoizedFn["default"])(function (name) {
118
156
  delete fieldRulesRef.current[name];
157
+ delete fieldRegistrationOwnedRef.current[name];
119
158
  });
120
- var validateField = (0, _useMemoizedFn["default"])(function (name) {
121
- var rules = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
122
- var providedValue = arguments.length > 2 ? arguments[2] : undefined;
123
- var currentValues = store.getState().values;
124
- var value = providedValue !== undefined ? providedValue : (0, _pathUtils.resolveValue)(currentValues, name);
125
- var _runRulesSync = (0, _runRules.runRulesSync)(name, value, currentValues, rules),
126
- error = _runRulesSync.error,
127
- warning = _runRulesSync.warning;
128
- setFieldWarning(name, warning);
129
- if (error !== null) {
130
- setFieldError(name, error);
131
- return false;
132
- }
133
- if (store.getState().errors[name]) {
134
- setFieldError(name, null);
135
- }
136
- return true;
159
+ var retainField = (0, _useMemoizedFn["default"])(function (name) {
160
+ fieldMountCountsRef.current[name] = (fieldMountCountsRef.current[name] || 0) + 1;
137
161
  });
138
- var validateFields = (0, _useMemoizedFn["default"])(function () {
139
- var fieldsRulesToValidate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : fieldRulesRef.current;
140
- var isValid = true;
141
- Object.keys(fieldsRulesToValidate).forEach(function (name) {
142
- var rules = fieldsRulesToValidate[name];
143
- if (!validateField(name, rules)) {
144
- isValid = false;
162
+ var releaseField = (0, _useMemoizedFn["default"])(function (name) {
163
+ var count = (fieldMountCountsRef.current[name] || 0) - 1;
164
+ if (count <= 0) {
165
+ delete fieldMountCountsRef.current[name];
166
+ if (fieldRegistrationOwnedRef.current[name]) {
167
+ delete fieldRulesRef.current[name];
168
+ delete fieldRegistrationOwnedRef.current[name];
145
169
  }
146
- });
147
- return isValid;
148
- });
149
- var handleSubmitInternal = (0, _useMemoizedFn["default"])(function () {
150
- var currentValues = store.getState().values;
151
- var currentRules = fieldRulesRef.current;
152
- var hasErrors = false;
153
- var newErrors = {};
154
- var newWarnings = {};
155
- Object.keys(currentRules).forEach(function (fieldName) {
156
- var value = (0, _pathUtils.resolveValue)(currentValues, fieldName);
157
- var _runRulesSync2 = (0, _runRules.runRulesSync)(fieldName, value, currentValues, currentRules[fieldName]),
158
- error = _runRulesSync2.error,
159
- warning = _runRulesSync2.warning;
160
- if (error !== null) {
161
- newErrors[fieldName] = error;
162
- hasErrors = true;
163
- }
164
- if (warning !== null) {
165
- newWarnings[fieldName] = warning;
166
- }
167
- });
168
- store.setState({
169
- errors: newErrors,
170
- warnings: newWarnings
171
- });
172
- if (!hasErrors) {
173
- onFinish === null || onFinish === void 0 ? void 0 : onFinish(currentValues);
174
- return {
175
- success: true,
176
- values: currentValues
177
- };
178
170
  } else {
179
- onFinishFailed === null || onFinishFailed === void 0 ? void 0 : onFinishFailed({
180
- values: currentValues,
181
- errors: newErrors
182
- });
183
- return {
184
- success: false,
185
- errors: newErrors
186
- };
171
+ fieldMountCountsRef.current[name] = count;
187
172
  }
188
173
  });
189
- var handleSubmit = (0, _useEventCallback["default"])(function (e) {
190
- e === null || e === void 0 ? void 0 : e.preventDefault();
191
- return handleSubmitInternal();
192
- });
193
174
  // Pure state API: the imperative resetFields()
194
175
  // never fires onReset. The callback belongs to the reset ACTION layer
195
176
  // (submitter button / native reset event), which fires it exactly once.
196
177
  var resetFields = (0, _useMemoizedFn["default"])(function () {
178
+ // Invalidate in-flight async validation runs — their results belong to
179
+ // pre-reset values and must not stamp errors onto the reset form.
180
+ invalidateValidationRuns();
197
181
  store.setState({
198
182
  values: mountInitialValues,
199
183
  errors: {},
@@ -210,47 +194,60 @@ var useFormCore = exports.useFormCore = function useFormCore() {
210
194
  var getFieldValue = (0, _useMemoizedFn["default"])(function (name) {
211
195
  return (0, _pathUtils.resolveValue)(store.getState().values, name);
212
196
  });
213
- var getFieldsValue = (0, _useMemoizedFn["default"])(function () {
214
- return store.getState().values;
197
+ var getFieldsValue = (0, _useMemoizedFn["default"])(function (nameList) {
198
+ var values = store.getState().values;
199
+ if (!nameList) return values;
200
+ return nameList.reduce(function (acc, name) {
201
+ acc[name] = (0, _pathUtils.resolveValue)(values, name);
202
+ return acc;
203
+ }, {});
215
204
  });
216
205
  var setFieldsValue = (0, _useMemoizedFn["default"])(function (newValues) {
217
- var updatedValues = Object.assign(Object.assign({}, store.getState().values), newValues);
206
+ var valuesPatch = newValues;
207
+ var prev = store.getState().values;
208
+ var updatedValues;
209
+ if (Object.keys(valuesPatch).some(function (key) {
210
+ return key.includes('.');
211
+ })) {
212
+ // Dot-path keys write into the NESTED structure (the setFieldValue
213
+ // contract) — a shallow merge would land them as literal top-level
214
+ // keys that the nested-aware readers never find.
215
+ updatedValues = prev;
216
+ for (var _i = 0, _Object$entries = Object.entries(valuesPatch); _i < _Object$entries.length; _i++) {
217
+ var _Object$entries$_i = (0, _slicedToArray2["default"])(_Object$entries[_i], 2),
218
+ key = _Object$entries$_i[0],
219
+ value = _Object$entries$_i[1];
220
+ updatedValues = key.includes('.') ? (0, _pathUtils.setNestedValue)(updatedValues, key, value) : (0, _pathUtils.mergeValuesPatch)(updatedValues, (0, _defineProperty2["default"])({}, key, value));
221
+ }
222
+ } else {
223
+ updatedValues = (0, _pathUtils.mergeValuesPatch)(prev, valuesPatch);
224
+ }
218
225
  commitValues(updatedValues);
219
- onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(newValues, updatedValues);
226
+ onValuesChange === null || onValuesChange === void 0 ? void 0 : onValuesChange(valuesPatch, updatedValues);
220
227
  });
228
+ // Seed the rule-context instance with the core methods exactly once —
229
+ // useForm's richer instance must not be downgraded on later renders.
230
+ if (Object.keys(ruleContextInstanceRef.current).length === 0) {
231
+ ruleContextInstanceRef.current = {
232
+ getFieldValue: getFieldValue,
233
+ getFieldsValue: getFieldsValue,
234
+ setFieldValue: setFieldValue,
235
+ setFieldsValue: setFieldsValue,
236
+ resetFields: resetFields
237
+ };
238
+ }
221
239
  var formInstance = (0, _react.useMemo)(function () {
222
240
  return {
223
- submit: handleSubmitInternal,
224
241
  resetFields: resetFields,
225
242
  getFieldValue: getFieldValue,
226
243
  getFieldsValue: getFieldsValue,
227
244
  setFieldsValue: setFieldsValue,
228
- setFieldValue: setFieldValue,
229
- validateFields: validateFields
245
+ setFieldValue: setFieldValue
230
246
  };
231
- }, [handleSubmitInternal, resetFields, getFieldValue, getFieldsValue, setFieldsValue, setFieldValue, validateFields]);
247
+ }, [resetFields, getFieldValue, getFieldsValue, setFieldsValue, setFieldValue]);
232
248
  // Render-time snapshot — kept for the UseFormCoreReturn contract. Reactive
233
249
  // consumers must go through the store, never through these fields.
234
250
  var state = store.getState();
235
- var coreContextShape = {
236
- values: state.values,
237
- errors: state.errors,
238
- warnings: state.warnings,
239
- touched: state.touched,
240
- formInstance: formInstance,
241
- setFieldValue: setFieldValue,
242
- setFieldError: setFieldError,
243
- setFieldWarning: setFieldWarning,
244
- validateField: validateField,
245
- registerField: registerField,
246
- unregisterField: unregisterField,
247
- size: size,
248
- labelAlign: labelAlign,
249
- disabled: disabled,
250
- colon: colon,
251
- requiredMark: requiredMark,
252
- validateTrigger: validateTrigger
253
- };
254
251
  return {
255
252
  values: state.values,
256
253
  errors: state.errors,
@@ -259,21 +256,24 @@ var useFormCore = exports.useFormCore = function useFormCore() {
259
256
  // Live registry — stable identity, mutated in place by register/unregister.
260
257
  fieldRules: fieldRulesRef.current,
261
258
  getFieldRules: getFieldRules,
259
+ getRuleContextInstance: getRuleContextInstance,
260
+ setRuleContextInstance: setRuleContextInstance,
261
+ beginValidationRun: beginValidationRun,
262
+ isValidationRunCurrent: isValidationRunCurrent,
263
+ invalidateValidationRuns: invalidateValidationRuns,
262
264
  setFieldValue: setFieldValue,
263
265
  setFieldError: setFieldError,
264
266
  setFieldWarning: setFieldWarning,
265
267
  setFieldsValue: setFieldsValue,
266
268
  getFieldValue: getFieldValue,
267
269
  getFieldsValue: getFieldsValue,
268
- validateField: validateField,
269
- validateFields: validateFields,
270
270
  registerField: registerField,
271
271
  unregisterField: unregisterField,
272
- handleSubmit: handleSubmit,
272
+ retainField: retainField,
273
+ releaseField: releaseField,
273
274
  handleReset: handleReset,
274
275
  resetFields: resetFields,
275
276
  formInstance: formInstance,
276
- coreContextShape: coreContextShape,
277
277
  store: store,
278
278
  getInitialValues: function getInitialValues() {
279
279
  return mountInitialValues;
@@ -281,4 +281,4 @@ var useFormCore = exports.useFormCore = function useFormCore() {
281
281
  };
282
282
  };
283
283
  var _default = exports["default"] = useFormCore;
284
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIl0sIm5hbWVzIjpbIl9yZWFjdCIsInJlcXVpcmUiLCJfdXNlRXZlbnRDYWxsYmFjayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlTWVtb2l6ZWRGbiIsIl9wYXRoVXRpbHMiLCJfcnVuUnVsZXMiLCJfZm9ybVN0b3JlIiwidXNlRm9ybUNvcmUiLCJleHBvcnRzIiwiY29uZmlnIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiX2NvbmZpZyRpbml0aWFsVmFsdWVzIiwiaW5pdGlhbFZhbHVlcyIsIm9uRmluaXNoIiwib25GaW5pc2hGYWlsZWQiLCJvblZhbHVlc0NoYW5nZSIsIm9uUmVzZXQiLCJfY29uZmlnJHNpemUiLCJzaXplIiwiX2NvbmZpZyRsYWJlbEFsaWduIiwibGFiZWxBbGlnbiIsIl9jb25maWckZGlzYWJsZWQiLCJkaXNhYmxlZCIsIl9jb25maWckY29sb24iLCJjb2xvbiIsIl9jb25maWckcmVxdWlyZWRNYXJrIiwicmVxdWlyZWRNYXJrIiwiX2NvbmZpZyR2YWxpZGF0ZVRyaWdnIiwidmFsaWRhdGVUcmlnZ2VyIiwiaW5pdGlhbFZhbHVlc1JlZiIsInVzZVJlZiIsImN1cnJlbnQiLCJtb3VudEluaXRpYWxWYWx1ZXMiLCJzdG9yZVJlZiIsImNyZWF0ZUZvcm1TdG9yZSIsInN0b3JlIiwiZmllbGRSdWxlc1JlZiIsImNvbW1pdFZhbHVlcyIsInVzZU1lbW9pemVkRm4iLCJuZXdWYWx1ZXMiLCJzZXRTdGF0ZSIsInZhbHVlcyIsInNldEZpZWxkVmFsdWUiLCJuYW1lIiwidmFsdWUiLCJwcmV2IiwiZ2V0U3RhdGUiLCJpbmNsdWRlcyIsInNldE5lc3RlZFZhbHVlIiwiT2JqZWN0IiwiYXNzaWduIiwiX2RlZmluZVByb3BlcnR5MiIsImVycm9ycyIsIm5ld0Vycm9ycyIsInNldEZpZWxkRXJyb3IiLCJlcnJvciIsInNldEZpZWxkV2FybmluZyIsIndhcm5pbmciLCJ3YXJuaW5ncyIsIm5ld1dhcm5pbmdzIiwicmVnaXN0ZXJGaWVsZCIsInJ1bGVzIiwiZ2V0RmllbGRSdWxlcyIsInVucmVnaXN0ZXJGaWVsZCIsInZhbGlkYXRlRmllbGQiLCJwcm92aWRlZFZhbHVlIiwiY3VycmVudFZhbHVlcyIsInJlc29sdmVWYWx1ZSIsIl9ydW5SdWxlc1N5bmMiLCJydW5SdWxlc1N5bmMiLCJ2YWxpZGF0ZUZpZWxkcyIsImZpZWxkc1J1bGVzVG9WYWxpZGF0ZSIsImlzVmFsaWQiLCJrZXlzIiwiZm9yRWFjaCIsImhhbmRsZVN1Ym1pdEludGVybmFsIiwiY3VycmVudFJ1bGVzIiwiaGFzRXJyb3JzIiwiZmllbGROYW1lIiwiX3J1blJ1bGVzU3luYzIiLCJzdWNjZXNzIiwiaGFuZGxlU3VibWl0IiwidXNlRXZlbnRDYWxsYmFjayIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInJlc2V0RmllbGRzIiwidG91Y2hlZCIsInZhbGlkYXRpbmciLCJoYW5kbGVSZXNldCIsImdldEZpZWxkVmFsdWUiLCJnZXRGaWVsZHNWYWx1ZSIsInNldEZpZWxkc1ZhbHVlIiwidXBkYXRlZFZhbHVlcyIsImZvcm1JbnN0YW5jZSIsInVzZU1lbW8iLCJzdWJtaXQiLCJzdGF0ZSIsImNvcmVDb250ZXh0U2hhcGUiLCJmaWVsZFJ1bGVzIiwiZ2V0SW5pdGlhbFZhbHVlcyIsIl9kZWZhdWx0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxjQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxTQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFO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LEVBQWJBLGFBQWE7SUFDYkcsZUFBZSxFQUFmQSxlQUFlO0lBQ2ZrQixZQUFZLEVBQVpBLFlBQVk7SUFDWk8sV0FBVyxFQUFYQSxXQUFXO0lBQ1hILFdBQVcsRUFBWEEsV0FBVztJQUNYUSxZQUFZLEVBQVpBLFlBQVk7SUFDWkksZ0JBQWdCLEVBQWhCQSxnQkFBZ0I7SUFDaEI5RCxLQUFLLEVBQUxBLEtBQUs7SUFDTGdFLGdCQUFnQixFQUFFLFNBQWxCQSxnQkFBZ0JBLENBQUE7TUFBQSxPQUFRbkUsa0JBQWtCO0lBQUE7RUN6RDFDLENEMEREO0FBQ0gsQ0FBQztBQUFDLElBQUFvRSxRQUFBLEdBQUE5RixPQUFBLGNBRWFELFdBQVciLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybUNvcmUuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImltcG9ydCB7IHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgdXNlTWVtb2l6ZWRGbiBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZU1lbW9pemVkRm4nO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlLCBzZXROZXN0ZWRWYWx1ZSB9IGZyb20gJy4uL3BhdGhVdGlscyc7XG5pbXBvcnQgeyBydW5SdWxlc1N5bmMgfSBmcm9tICcuLi9ydW5SdWxlcyc7XG5pbXBvcnQgeyBjcmVhdGVGb3JtU3RvcmUgfSBmcm9tICcuLi9mb3JtU3RvcmUnO1xuZXhwb3J0IGNvbnN0IHVzZUZvcm1Db3JlID0gKGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBpbml0aWFsVmFsdWVzID0ge30sIG9uRmluaXNoLCBvbkZpbmlzaEZhaWxlZCwgb25WYWx1ZXNDaGFuZ2UsIG9uUmVzZXQsIHNpemUgPSAnbGFyZ2UnLCBsYWJlbEFsaWduID0gJ2xlZnQnLCBkaXNhYmxlZCA9IGZhbHNlLCBjb2xvbiA9IHRydWUsIHJlcXVpcmVkTWFyayA9IHRydWUsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIH0gPSBjb25maWc7XG4gICAgLy8gaW5pdGlhbFZhbHVlcyBpcyBNT1VOVC1PTkxZICh0aGUgZG9jdW1lbnRlZCBjb250cmFjdCk6IGZyZWV6ZSB0aGUgZmlyc3RcbiAgICAvLyByZW5kZXIncyB2YWx1ZSBzbyByZXNldEZpZWxkcyBhbHdheXMgcmVzdG9yZXMgdGhlIG1vdW50LXRpbWUgZGVmYXVsdHMsXG4gICAgLy8gZXZlbiB3aGVuIHRoZSBjb25zdW1lciByZS1yZW5kZXJzIHdpdGggYSBkaWZmZXJlbnQgKGUuZy4gY29udHJvbGxlZClcbiAgICAvLyBpbml0aWFsVmFsdWVzIG9iamVjdC5cbiAgICBjb25zdCBpbml0aWFsVmFsdWVzUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGlmIChpbml0aWFsVmFsdWVzUmVmLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgaW5pdGlhbFZhbHVlc1JlZi5jdXJyZW50ID0gaW5pdGlhbFZhbHVlcztcbiAgICB9XG4gICAgY29uc3QgbW91bnRJbml0aWFsVmFsdWVzID0gaW5pdGlhbFZhbHVlc1JlZi5jdXJyZW50O1xuICAgIC8vIEFsbCB2b2xhdGlsZSBmb3JtIHN0YXRlIGxpdmVzIGluIGFuIGV4dGVybmFsIHN0b3JlLCBOT1QgUmVhY3Qgc3RhdGUg4oCUIGFcbiAgICAvLyBrZXlzdHJva2UgbXVzdCBuZXZlciByZS1yZW5kZXIgdGhlIGNvbXBvbmVudCB0aGF0IG93bnMgdGhlIGZvcm0uIEZpZWxkc1xuICAgIC8vIGFuZCB3YXRjaGVycyBzdWJzY3JpYmUgd2l0aCBwZXItZmllbGQgc2VsZWN0b3JzICh1c2VTdG9yZVNlbGVjdG9yKTsgZXZlcnlcbiAgICAvLyBtdXRhdG9yIGJlbG93IHJlYWRzIHRoZSBMQVRFU1Qgc3RhdGUgdmlhIHN0b3JlLmdldFN0YXRlKCksIHdoaWNoIGFsc29cbiAgICAvLyBrZWVwcyBtdWx0aXBsZSB3cml0ZXMgaW4gdGhlIHNhbWUgdGljayB2aXNpYmxlIHRvIGVhY2ggb3RoZXIuXG4gICAgY29uc3Qgc3RvcmVSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgaWYgKHN0b3JlUmVmLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgc3RvcmVSZWYuY3VycmVudCA9IGNyZWF0ZUZvcm1TdG9yZShtb3VudEluaXRpYWxWYWx1ZXMpO1xuICAgIH1cbiAgICBjb25zdCBzdG9yZSA9IHN0b3JlUmVmLmN1cnJlbnQ7XG4gICAgLy8gTGl2ZSBydWxlIHJlZ2lzdHJ5IOKAlCBPTkUgc3RhYmxlIG9iamVjdCBtdXRhdGVkIGluIHBsYWNlLiBSZWdpc3RyYXRpb24gbXVzdFxuICAgIC8vIG5vdCB0cmlnZ2VyIHJlbmRlcnMsIGFuZCBzdWJtaXQtdGltZSB2YWxpZGF0aW9uIG11c3QgYWx3YXlzIHJlYWQgdGhlIGxhdGVzdFxuICAgIC8vIHJ1bGVzICh0aGV5IGNhbiBjaGFuZ2UgYmV0d2VlbiByZW5kZXJzLCBlLmcuIGEgY29uZGl0aW9uYWwgYHJlcXVpcmVkYCkuXG4gICAgY29uc3QgZmllbGRSdWxlc1JlZiA9IHVzZVJlZih7fSk7XG4gICAgY29uc3QgY29tbWl0VmFsdWVzID0gdXNlTWVtb2l6ZWRGbigobmV3VmFsdWVzKSA9PiB7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHsgdmFsdWVzOiBuZXdWYWx1ZXMgfSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcztcbiAgICAgICAgY29uc3QgbmV3VmFsdWVzID0gbmFtZS5pbmNsdWRlcygnLicpXG4gICAgICAgICAgICA/IHNldE5lc3RlZFZhbHVlKHByZXYsIG5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogdmFsdWUgfSk7XG4gICAgICAgIGNvbW1pdFZhbHVlcyhuZXdWYWx1ZXMpO1xuICAgICAgICBvblZhbHVlc0NoYW5nZSA9PT0gbnVsbCB8fCBvblZhbHVlc0NoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25WYWx1ZXNDaGFuZ2UoeyBbbmFtZV06IHZhbHVlIH0sIG5ld1ZhbHVlcyk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gc3RvcmUuZ2V0U3RhdGUoKS5lcnJvcnM7XG4gICAgICAgICAgICBpZiAoZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RXJyb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgZXJyb3JzKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3RXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgICAgIHN0b3JlLnNldFN0YXRlKHsgZXJyb3JzOiBuZXdFcnJvcnMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZEVycm9yID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gc3RvcmUuZ2V0U3RhdGUoKS5lcnJvcnM7XG4gICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCFlcnJvcnNbbmFtZV0pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgbmV3RXJyb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgZXJyb3JzKTtcbiAgICAgICAgICAgIGRlbGV0ZSBuZXdFcnJvcnNbbmFtZV07XG4gICAgICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IGVycm9yczogbmV3RXJyb3JzIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcnNbbmFtZV0gPT09IGVycm9yKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IGVycm9yczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBlcnJvcnMpLCB7IFtuYW1lXTogZXJyb3IgfSkgfSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRXYXJuaW5nID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgd2FybmluZykgPT4ge1xuICAgICAgICBjb25zdCB3YXJuaW5ncyA9IHN0b3JlLmdldFN0YXRlKCkud2FybmluZ3M7XG4gICAgICAgIGlmICh3YXJuaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoIXdhcm5pbmdzW25hbWVdKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IG5ld1dhcm5pbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgd2FybmluZ3MpO1xuICAgICAgICAgICAgZGVsZXRlIG5ld1dhcm5pbmdzW25hbWVdO1xuICAgICAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB3YXJuaW5nczogbmV3V2FybmluZ3MgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdhcm5pbmdzW25hbWVdID09PSB3YXJuaW5nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHdhcm5pbmdzOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHdhcm5pbmdzKSwgeyBbbmFtZV06IHdhcm5pbmcgfSkgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVnaXN0ZXJGaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHJ1bGVzKSA9PiB7XG4gICAgICAgIGZpZWxkUnVsZXNSZWYuY3VycmVudFtuYW1lXSA9IHJ1bGVzO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldEZpZWxkUnVsZXMgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiBmaWVsZFJ1bGVzUmVmLmN1cnJlbnRbbmFtZV07XG4gICAgfSk7XG4gICAgY29uc3QgdW5yZWdpc3RlckZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICBkZWxldGUgZmllbGRSdWxlc1JlZi5jdXJyZW50W25hbWVdO1xuICAgIH0pO1xuICAgIGNvbnN0IHZhbGlkYXRlRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBydWxlcyA9IFtdLCBwcm92aWRlZFZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPSBzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcztcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwcm92aWRlZFZhbHVlICE9PSB1bmRlZmluZWQgPyBwcm92aWRlZFZhbHVlIDogcmVzb2x2ZVZhbHVlKGN1cnJlbnRWYWx1ZXMsIG5hbWUpO1xuICAgICAgICBjb25zdCB7IGVycm9yLCB3YXJuaW5nIH0gPSBydW5SdWxlc1N5bmMobmFtZSwgdmFsdWUsIGN1cnJlbnRWYWx1ZXMsIHJ1bGVzKTtcbiAgICAgICAgc2V0RmllbGRXYXJuaW5nKG5hbWUsIHdhcm5pbmcpO1xuICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdG9yZS5nZXRTdGF0ZSgpLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgc2V0RmllbGRFcnJvcihuYW1lLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkcyA9IHVzZU1lbW9pemVkRm4oKGZpZWxkc1J1bGVzVG9WYWxpZGF0ZSA9IGZpZWxkUnVsZXNSZWYuY3VycmVudCkgPT4ge1xuICAgICAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgIE9iamVjdC5rZXlzKGZpZWxkc1J1bGVzVG9WYWxpZGF0ZSkuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmaWVsZHNSdWxlc1RvVmFsaWRhdGVbbmFtZV07XG4gICAgICAgICAgICBpZiAoIXZhbGlkYXRlRmllbGQobmFtZSwgcnVsZXMpKSB7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWQ7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlU3VibWl0SW50ZXJuYWwgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlcyA9IHN0b3JlLmdldFN0YXRlKCkudmFsdWVzO1xuICAgICAgICBjb25zdCBjdXJyZW50UnVsZXMgPSBmaWVsZFJ1bGVzUmVmLmN1cnJlbnQ7XG4gICAgICAgIGxldCBoYXNFcnJvcnMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbmV3RXJyb3JzID0ge307XG4gICAgICAgIGNvbnN0IG5ld1dhcm5pbmdzID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRSdWxlcykuZm9yRWFjaCgoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlc29sdmVWYWx1ZShjdXJyZW50VmFsdWVzLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvciwgd2FybmluZyB9ID0gcnVuUnVsZXNTeW5jKGZpZWxkTmFtZSwgdmFsdWUsIGN1cnJlbnRWYWx1ZXMsIGN1cnJlbnRSdWxlc1tmaWVsZE5hbWVdKTtcbiAgICAgICAgICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG5ld0Vycm9yc1tmaWVsZE5hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3YXJuaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbmV3V2FybmluZ3NbZmllbGROYW1lXSA9IHdhcm5pbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IGVycm9yczogbmV3RXJyb3JzLCB3YXJuaW5nczogbmV3V2FybmluZ3MgfSk7XG4gICAgICAgIGlmICghaGFzRXJyb3JzKSB7XG4gICAgICAgICAgICBvbkZpbmlzaCA9PT0gbnVsbCB8fCBvbkZpbmlzaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2goY3VycmVudFZhbHVlcyk7XG4gICAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCB2YWx1ZXM6IGN1cnJlbnRWYWx1ZXMgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9uRmluaXNoRmFpbGVkID09PSBudWxsIHx8IG9uRmluaXNoRmFpbGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaEZhaWxlZCh7IHZhbHVlczogY3VycmVudFZhbHVlcywgZXJyb3JzOiBuZXdFcnJvcnMgfSk7XG4gICAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3JzOiBuZXdFcnJvcnMgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IHtcbiAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBoYW5kbGVTdWJtaXRJbnRlcm5hbCgpO1xuICAgIH0pO1xuICAgIC8vIFB1cmUgc3RhdGUgQVBJOiB0aGUgaW1wZXJhdGl2ZSByZXNldEZpZWxkcygpXG4gICAgLy8gbmV2ZXIgZmlyZXMgb25SZXNldC4gVGhlIGNhbGxiYWNrIGJlbG9uZ3MgdG8gdGhlIHJlc2V0IEFDVElPTiBsYXllclxuICAgIC8vIChzdWJtaXR0ZXIgYnV0dG9uIC8gbmF0aXZlIHJlc2V0IGV2ZW50KSwgd2hpY2ggZmlyZXMgaXQgZXhhY3RseSBvbmNlLlxuICAgIGNvbnN0IHJlc2V0RmllbGRzID0gdXNlTWVtb2l6ZWRGbigoKSA9PiB7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHZhbHVlczogbW91bnRJbml0aWFsVmFsdWVzLFxuICAgICAgICAgICAgZXJyb3JzOiB7fSxcbiAgICAgICAgICAgIHdhcm5pbmdzOiB7fSxcbiAgICAgICAgICAgIHRvdWNoZWQ6IHt9LFxuICAgICAgICAgICAgdmFsaWRhdGluZzoge30sXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVJlc2V0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmVzZXRGaWVsZHMoKTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RmllbGRWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVWYWx1ZShzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcywgbmFtZSk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RmllbGRzVmFsdWUgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHN0b3JlLmdldFN0YXRlKCkudmFsdWVzO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkc1ZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmV3VmFsdWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZXMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0b3JlLmdldFN0YXRlKCkudmFsdWVzKSwgbmV3VmFsdWVzKTtcbiAgICAgICAgY29tbWl0VmFsdWVzKHVwZGF0ZWRWYWx1ZXMpO1xuICAgICAgICBvblZhbHVlc0NoYW5nZSA9PT0gbnVsbCB8fCBvblZhbHVlc0NoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25WYWx1ZXNDaGFuZ2UobmV3VmFsdWVzLCB1cGRhdGVkVmFsdWVzKTtcbiAgICB9KTtcbiAgICBjb25zdCBmb3JtSW5zdGFuY2UgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHN1Ym1pdDogaGFuZGxlU3VibWl0SW50ZXJuYWwsXG4gICAgICAgIHJlc2V0RmllbGRzLFxuICAgICAgICBnZXRGaWVsZFZhbHVlLFxuICAgICAgICBnZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzLFxuICAgIH0pLCBbXG4gICAgICAgIGhhbmRsZVN1Ym1pdEludGVybmFsLFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkcyxcbiAgICBdKTtcbiAgICAvLyBSZW5kZXItdGltZSBzbmFwc2hvdCDigJQga2VwdCBmb3IgdGhlIFVzZUZvcm1Db3JlUmV0dXJuIGNvbnRyYWN0LiBSZWFjdGl2ZVxuICAgIC8vIGNvbnN1bWVycyBtdXN0IGdvIHRocm91Z2ggdGhlIHN0b3JlLCBuZXZlciB0aHJvdWdoIHRoZXNlIGZpZWxkcy5cbiAgICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgY29uc3QgY29yZUNvbnRleHRTaGFwZSA9IHtcbiAgICAgICAgdmFsdWVzOiBzdGF0ZS52YWx1ZXMsXG4gICAgICAgIGVycm9yczogc3RhdGUuZXJyb3JzLFxuICAgICAgICB3YXJuaW5nczogc3RhdGUud2FybmluZ3MsXG4gICAgICAgIHRvdWNoZWQ6IHN0YXRlLnRvdWNoZWQsXG4gICAgICAgIGZvcm1JbnN0YW5jZSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcixcbiAgICAgICAgc2V0RmllbGRXYXJuaW5nLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkLFxuICAgICAgICByZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHNpemUsXG4gICAgICAgIGxhYmVsQWxpZ24sXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBjb2xvbixcbiAgICAgICAgcmVxdWlyZWRNYXJrLFxuICAgICAgICB2YWxpZGF0ZVRyaWdnZXIsXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZXM6IHN0YXRlLnZhbHVlcyxcbiAgICAgICAgZXJyb3JzOiBzdGF0ZS5lcnJvcnMsXG4gICAgICAgIHdhcm5pbmdzOiBzdGF0ZS53YXJuaW5ncyxcbiAgICAgICAgdG91Y2hlZDogc3RhdGUudG91Y2hlZCxcbiAgICAgICAgLy8gTGl2ZSByZWdpc3RyeSDigJQgc3RhYmxlIGlkZW50aXR5LCBtdXRhdGVkIGluIHBsYWNlIGJ5IHJlZ2lzdGVyL3VucmVnaXN0ZXIuXG4gICAgICAgIGZpZWxkUnVsZXM6IGZpZWxkUnVsZXNSZWYuY3VycmVudCxcbiAgICAgICAgZ2V0RmllbGRSdWxlcyxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcixcbiAgICAgICAgc2V0RmllbGRXYXJuaW5nLFxuICAgICAgICBzZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHZhbGlkYXRlRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzLFxuICAgICAgICByZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgICAgIHJlc2V0RmllbGRzLFxuICAgICAgICBmb3JtSW5zdGFuY2UsXG4gICAgICAgIGNvcmVDb250ZXh0U2hhcGUsXG4gICAgICAgIHN0b3JlLFxuICAgICAgICBnZXRJbml0aWFsVmFsdWVzOiAoKSA9PiBtb3VudEluaXRpYWxWYWx1ZXMsXG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtQ29yZTsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
284
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS50cyIsImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm1Db3JlLmpzIl0sIm5hbWVzIjpbIl9yZWFjdCIsInJlcXVpcmUiLCJfdXNlRXZlbnRDYWxsYmFjayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlTWVtb2l6ZWRGbiIsIl9wYXRoVXRpbHMiLCJfZm9ybVN0b3JlIiwidXNlRm9ybUNvcmUiLCJleHBvcnRzIiwiY29uZmlnIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiX2NvbmZpZyRpbml0aWFsVmFsdWVzIiwiaW5pdGlhbFZhbHVlcyIsIm9uVmFsdWVzQ2hhbmdlIiwib25SZXNldCIsIl9jb25maWckc2l6ZSIsInNpemUiLCJfY29uZmlnJGxhYmVsQWxpZ24iLCJsYWJlbEFsaWduIiwiX2NvbmZpZyRkaXNhYmxlZCIsImRpc2FibGVkIiwiX2NvbmZpZyR2YWxpZGF0ZVRyaWdnIiwidmFsaWRhdGVUcmlnZ2VyIiwiaW5pdGlhbFZhbHVlc1JlZiIsInVzZVJlZiIsImN1cnJlbnQiLCJtb3VudEluaXRpYWxWYWx1ZXMiLCJzdG9yZVJlZiIsImNyZWF0ZUZvcm1TdG9yZSIsInN0b3JlIiwiZmllbGRSdWxlc1JlZiIsInZhbGlkYXRpb25FcG9jaFJlZiIsImJlZ2luVmFsaWRhdGlvblJ1biIsInVzZU1lbW9pemVkRm4iLCJuYW1lIiwibmV4dCIsImlzVmFsaWRhdGlvblJ1bkN1cnJlbnQiLCJlcG9jaCIsImludmFsaWRhdGVWYWxpZGF0aW9uUnVucyIsIm5hbWVzIiwia2V5cyIsIk9iamVjdCIsImZvckVhY2giLCJrZXkiLCJydWxlQ29udGV4dEluc3RhbmNlUmVmIiwic2V0UnVsZUNvbnRleHRJbnN0YW5jZSIsImluc3RhbmNlIiwiZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSIsImNvbW1pdFZhbHVlcyIsIm5ld1ZhbHVlcyIsInNldFN0YXRlIiwidmFsdWVzIiwic2V0RmllbGRWYWx1ZSIsInZhbHVlIiwicHJldiIsImdldFN0YXRlIiwiaW5jbHVkZXMiLCJzZXROZXN0ZWRWYWx1ZSIsImFzc2lnbiIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJzZXRGaWVsZEVycm9yIiwiZXJyb3IiLCJlcnJvcnMiLCJuZXdFcnJvcnMiLCJzYW1lVmFsaWRhdGlvbk5vZGUiLCJzZXRGaWVsZFdhcm5pbmciLCJ3YXJuaW5nIiwid2FybmluZ3MiLCJuZXdXYXJuaW5ncyIsImZpZWxkTW91bnRDb3VudHNSZWYiLCJmaWVsZFJlZ2lzdHJhdGlvbk93bmVkUmVmIiwicmVnaXN0ZXJGaWVsZCIsInJ1bGVzIiwiZ2V0RmllbGRSdWxlcyIsInVucmVnaXN0ZXJGaWVsZCIsInJldGFpbkZpZWxkIiwicmVsZWFzZUZpZWxkIiwiY291bnQiLCJyZXNldEZpZWxkcyIsInRvdWNoZWQiLCJ2YWxpZGF0aW5nIiwiaGFuZGxlUmVzZXQiLCJ1c2VFdmVudENhbGxiYWNrIiwiZSIsInByZXZlbnREZWZhdWx0IiwiZ2V0RmllbGRWYWx1ZSIsInJlc29sdmVWYWx1ZSIsImdldEZpZWxkc1ZhbHVlIiwibmFtZUxpc3QiLCJyZWR1Y2UiLCJhY2MiLCJzZXRGaWVsZHNWYWx1ZSIsInZhbHVlc1BhdGNoIiwidXBkYXRlZFZhbHVlcyIsInNvbWUiLCJfaSIsIl9PYmplY3QkZW50cmllcyIsImVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJfc2xpY2VkVG9BcnJheTIiLCJtZXJnZVZhbHVlc1BhdGNoIiwiZm9ybUluc3RhbmNlIiwidXNlTWVtbyIsInN0YXRlIiwiZmllbGRSdWxlcyIsImdldEluaXRpYWxWYWx1ZXMiLCJfZGVmYXVsdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGNBQUEsR0FBQUQs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Q3pDMUMsQ0QwQ0Q7QUFDSCxDQUFDO0FBQUMsSUFBQWdGLFFBQUEsR0FBQXBHLE9BQUEsY0FFYUQsV0FBVyIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtQ29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiaW1wb3J0IHsgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgeyBtZXJnZVZhbHVlc1BhdGNoLCByZXNvbHZlVmFsdWUsIHNldE5lc3RlZFZhbHVlIH0gZnJvbSAnLi4vcGF0aFV0aWxzJztcbmltcG9ydCB7IGNyZWF0ZUZvcm1TdG9yZSwgc2FtZVZhbGlkYXRpb25Ob2RlIH0gZnJvbSAnLi4vZm9ybVN0b3JlJztcbmV4cG9ydCBjb25zdCB1c2VGb3JtQ29yZSA9IChjb25maWcgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHsgaW5pdGlhbFZhbHVlcyA9IHt9LCBvblZhbHVlc0NoYW5nZSwgb25SZXNldCwgc2l6ZSA9ICdsYXJnZScsIGxhYmVsQWxpZ24gPSAnbGVmdCcsIGRpc2FibGVkID0gZmFsc2UsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIH0gPSBjb25maWc7XG4gICAgLy8gaW5pdGlhbFZhbHVlcyBpcyBNT1VOVC1PTkxZICh0aGUgZG9jdW1lbnRlZCBjb250cmFjdCk6IGZyZWV6ZSB0aGUgZmlyc3RcbiAgICAvLyByZW5kZXIncyB2YWx1ZSBzbyByZXNldEZpZWxkcyBhbHdheXMgcmVzdG9yZXMgdGhlIG1vdW50LXRpbWUgZGVmYXVsdHMsXG4gICAgLy8gZXZlbiB3aGVuIHRoZSBjb25zdW1lciByZS1yZW5kZXJzIHdpdGggYSBkaWZmZXJlbnQgKGUuZy4gY29udHJvbGxlZClcbiAgICAvLyBpbml0aWFsVmFsdWVzIG9iamVjdC5cbiAgICBjb25zdCBpbml0aWFsVmFsdWVzUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGlmIChpbml0aWFsVmFsdWVzUmVmLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgaW5pdGlhbFZhbHVlc1JlZi5jdXJyZW50ID0gaW5pdGlhbFZhbHVlcztcbiAgICB9XG4gICAgY29uc3QgbW91bnRJbml0aWFsVmFsdWVzID0gaW5pdGlhbFZhbHVlc1JlZi5jdXJyZW50O1xuICAgIC8vIEFsbCB2b2xhdGlsZSBmb3JtIHN0YXRlIGxpdmVzIGluIGFuIGV4dGVybmFsIHN0b3JlLCBOT1QgUmVhY3Qgc3RhdGUg4oCUIGFcbiAgICAvLyBrZXlzdHJva2UgbXVzdCBuZXZlciByZS1yZW5kZXIgdGhlIGNvbXBvbmVudCB0aGF0IG93bnMgdGhlIGZvcm0uIEZpZWxkc1xuICAgIC8vIGFuZCB3YXRjaGVycyBzdWJzY3JpYmUgd2l0aCBwZXItZmllbGQgc2VsZWN0b3JzICh1c2VTdG9yZVNlbGVjdG9yKTsgZXZlcnlcbiAgICAvLyBtdXRhdG9yIGJlbG93IHJlYWRzIHRoZSBMQVRFU1Qgc3RhdGUgdmlhIHN0b3JlLmdldFN0YXRlKCksIHdoaWNoIGFsc29cbiAgICAvLyBrZWVwcyBtdWx0aXBsZSB3cml0ZXMgaW4gdGhlIHNhbWUgdGljayB2aXNpYmxlIHRvIGVhY2ggb3RoZXIuXG4gICAgY29uc3Qgc3RvcmVSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgaWYgKHN0b3JlUmVmLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgc3RvcmVSZWYuY3VycmVudCA9IGNyZWF0ZUZvcm1TdG9yZShtb3VudEluaXRpYWxWYWx1ZXMpO1xuICAgIH1cbiAgICBjb25zdCBzdG9yZSA9IHN0b3JlUmVmLmN1cnJlbnQ7XG4gICAgLy8gTGl2ZSBydWxlIHJlZ2lzdHJ5IOKAlCBPTkUgc3RhYmxlIG9iamVjdCBtdXRhdGVkIGluIHBsYWNlLiBSZWdpc3RyYXRpb24gbXVzdFxuICAgIC8vIG5vdCB0cmlnZ2VyIHJlbmRlcnMsIGFuZCBzdWJtaXQtdGltZSB2YWxpZGF0aW9uIG11c3QgYWx3YXlzIHJlYWQgdGhlIGxhdGVzdFxuICAgIC8vIHJ1bGVzICh0aGV5IGNhbiBjaGFuZ2UgYmV0d2VlbiByZW5kZXJzLCBlLmcuIGEgY29uZGl0aW9uYWwgYHJlcXVpcmVkYCkuXG4gICAgY29uc3QgZmllbGRSdWxlc1JlZiA9IHVzZVJlZih7fSk7XG4gICAgLy8gUGVyLWZpZWxkIHZhbGlkYXRpb24gcnVuIGVwb2Nocy4gRVZFUlkgdmFsaWRhdGlvbiBydW4gKHN5bmMgb3IgYXN5bmMpXG4gICAgLy8gYnVtcHMgaXRzIGZpZWxkJ3MgZXBvY2g7IGFuIGFzeW5jIHJ1biByZS1jaGVja3MgaXRzIGNhcHR1cmVkIGVwb2NoIGF0XG4gICAgLy8gc2V0dGxlIHRpbWUgYW5kIGRpc2NhcmRzIGEgU1RBTEUgb3V0Y29tZSDigJQgdGhlIHNhbWUgcHJvdGVjdGlvbiBhc1xuICAgIC8vIHJjLWZpZWxkLWZvcm0ncyB2YWxpZGF0ZVByb21pc2UgaWRlbnRpdHkgY2hlY2suIFdpdGhvdXQgaXQsIGEgc2xvdyBhc3luY1xuICAgIC8vIHZhbGlkYXRvciAoZS5nLiBhIHNlcnZlci1zaWRlIHVuaXF1ZW5lc3MgY2hlY2sgc3RhcnRlZCBvbiBibHVyKSBjb3VsZFxuICAgIC8vIHNldHRsZSBhZnRlciB0aGUgdXNlciBhbHJlYWR5IGZpeGVkIHRoZSB2YWx1ZSBhbmQgc3RhbXAgYSBzdGFsZSBlcnJvclxuICAgIC8vIG92ZXIgYSBuZXdlciwgcGFzc2luZyByZXN1bHQuXG4gICAgY29uc3QgdmFsaWRhdGlvbkVwb2NoUmVmID0gdXNlUmVmKHt9KTtcbiAgICBjb25zdCBiZWdpblZhbGlkYXRpb25SdW4gPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHQgPSAodmFsaWRhdGlvbkVwb2NoUmVmLmN1cnJlbnRbbmFtZV0gfHwgMCkgKyAxO1xuICAgICAgICB2YWxpZGF0aW9uRXBvY2hSZWYuY3VycmVudFtuYW1lXSA9IG5leHQ7XG4gICAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pO1xuICAgIGNvbnN0IGlzVmFsaWRhdGlvblJ1bkN1cnJlbnQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBlcG9jaCkgPT4gdmFsaWRhdGlvbkVwb2NoUmVmLmN1cnJlbnRbbmFtZV0gPT09IGVwb2NoKTtcbiAgICAvLyBCdW1wIChuZXZlciBkZWxldGUg4oCUIGRlbGV0aW9uIHdvdWxkIGxldCBhIG5ldyBydW4gcmUtaXNzdWUgYW4gb2xkIGVwb2NoXG4gICAgLy8gbnVtYmVyIGFuZCBjb2xsaWRlIHdpdGggYSBzdGlsbC1pbi1mbGlnaHQgcHJlLXJlc2V0IHJ1bikuXG4gICAgY29uc3QgaW52YWxpZGF0ZVZhbGlkYXRpb25SdW5zID0gdXNlTWVtb2l6ZWRGbigobmFtZXMpID0+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IG5hbWVzICE9PSBudWxsICYmIG5hbWVzICE9PSB2b2lkIDAgPyBuYW1lcyA6IE9iamVjdC5rZXlzKHZhbGlkYXRpb25FcG9jaFJlZi5jdXJyZW50KTtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uRXBvY2hSZWYuY3VycmVudFtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9uRXBvY2hSZWYuY3VycmVudFtrZXldICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIEluc3RhbmNlIGhhbmRlZCB0byBmdW5jdGlvbi1mb3JtIHJ1bGVzLiBEZWZhdWx0cyB0byB0aGUgY29yZSBtZXRob2RzXG4gICAgLy8gKGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgdGhpcyBob29rIGJvZHkpOyB1c2VGb3JtIHVwZ3JhZGVzIGl0IHRvIHRoZSBGVUxMXG4gICAgLy8gZm9ybSBpbnN0YW5jZSBvbmNlIGl0IGhhcyBidWlsdCBvbmUsIHNvIHJ1bGVzIHNlZSB0aGUgc2FtZSBjb250ZXh0IG9uXG4gICAgLy8gZXZlcnkgcGF0aCAoaW50ZXJhY3RpdmUsIGJsdXIsIHN1Ym1pdCkuXG4gICAgY29uc3QgcnVsZUNvbnRleHRJbnN0YW5jZVJlZiA9IHVzZVJlZih7fSk7XG4gICAgY29uc3Qgc2V0UnVsZUNvbnRleHRJbnN0YW5jZSA9IHVzZU1lbW9pemVkRm4oKGluc3RhbmNlKSA9PiB7XG4gICAgICAgIHJ1bGVDb250ZXh0SW5zdGFuY2VSZWYuY3VycmVudCA9IGluc3RhbmNlO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldFJ1bGVDb250ZXh0SW5zdGFuY2UgPSB1c2VNZW1vaXplZEZuKCgpID0+IHJ1bGVDb250ZXh0SW5zdGFuY2VSZWYuY3VycmVudCk7XG4gICAgY29uc3QgY29tbWl0VmFsdWVzID0gdXNlTWVtb2l6ZWRGbigobmV3VmFsdWVzKSA9PiB7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHsgdmFsdWVzOiBuZXdWYWx1ZXMgfSk7XG4gICAgfSk7XG4gICAgLy8gTk9URTogc2V0dGluZyBhIHZhbHVlIGRvZXMgTk9UIHRvdWNoIHRoZSBmaWVsZCdzIGVycm9yIOKAlCBlcnJvcnMgYXJlXG4gICAgLy8gY2xlYXJlZCBleGNsdXNpdmVseSBieSB2YWxpZGF0aW9uIHJ1bnMgKHdob3NlIHRpbWluZyBmb2xsb3dzIHRoZVxuICAgIC8vIHZhbGlkYXRlVHJpZ2dlciBjb25maWcpLCBzbyBhbiBvbkJsdXItb25seSBmaWVsZCBrZWVwcyBpdHMgZXJyb3Igd2hpbGVcbiAgICAvLyB0aGUgdXNlciBpcyBzdGlsbCB0eXBpbmcuXG4gICAgY29uc3Qgc2V0RmllbGRWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcztcbiAgICAgICAgY29uc3QgbmV3VmFsdWVzID0gbmFtZS5pbmNsdWRlcygnLicpXG4gICAgICAgICAgICA/IHNldE5lc3RlZFZhbHVlKHByZXYsIG5hbWUsIHZhbHVlKVxuICAgICAgICAgICAgOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogdmFsdWUgfSk7XG4gICAgICAgIGNvbW1pdFZhbHVlcyhuZXdWYWx1ZXMpO1xuICAgICAgICBvblZhbHVlc0NoYW5nZSA9PT0gbnVsbCB8fCBvblZhbHVlc0NoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25WYWx1ZXNDaGFuZ2UoeyBbbmFtZV06IHZhbHVlIH0sIG5ld1ZhbHVlcyk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRFcnJvciA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHN0b3JlLmdldFN0YXRlKCkuZXJyb3JzO1xuICAgICAgICBpZiAoZXJyb3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghZXJyb3JzW25hbWVdKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIGVycm9ycyk7XG4gICAgICAgICAgICBkZWxldGUgbmV3RXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyBlcnJvcnM6IG5ld0Vycm9ycyB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2FtZVZhbGlkYXRpb25Ob2RlKGVycm9yc1tuYW1lXSwgZXJyb3IpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IGVycm9yczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBlcnJvcnMpLCB7IFtuYW1lXTogZXJyb3IgfSkgfSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRXYXJuaW5nID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgd2FybmluZykgPT4ge1xuICAgICAgICBjb25zdCB3YXJuaW5ncyA9IHN0b3JlLmdldFN0YXRlKCkud2FybmluZ3M7XG4gICAgICAgIGlmICh3YXJuaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoIXdhcm5pbmdzW25hbWVdKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IG5ld1dhcm5pbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgd2FybmluZ3MpO1xuICAgICAgICAgICAgZGVsZXRlIG5ld1dhcm5pbmdzW25hbWVdO1xuICAgICAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB3YXJuaW5nczogbmV3V2FybmluZ3MgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNhbWVWYWxpZGF0aW9uTm9kZSh3YXJuaW5nc1tuYW1lXSwgd2FybmluZykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHsgd2FybmluZ3M6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgd2FybmluZ3MpLCB7IFtuYW1lXTogd2FybmluZyB9KSB9KTtcbiAgICB9KTtcbiAgICAvLyBNb3VudGVkLWluc3RhbmNlIGNvdW50cyBwZXIgZmllbGQgbmFtZSwgcGx1cyB3aGV0aGVyIHRoZSBDVVJSRU5UIHJ1bGVzXG4gICAgLy8gcmVnaXN0cmF0aW9uIHdhcyBtYWRlIGJ5IGEgY291bnRlZCBpbnN0YW5jZS4gUnVsZXMgYXJlIHJlbW92ZWQgb25seSB3aGVuXG4gICAgLy8gdGhlIExBU1QgbW91bnRlZCBpbnN0YW5jZSBmb3IgYSBuYW1lIHJlbGVhc2VzOiB3aXRoIHR3byBzYW1lLW5hbWUgZmllbGRzXG4gICAgLy8gbW91bnRlZCwgdGhlIGZpcnN0IHVubW91bnQgbXVzdCBub3Qgd2lwZSB0aGUgcmVnaXN0cmF0aW9uIHdoaWxlIHRoZVxuICAgIC8vIHN1cnZpdm9yIChwb3NzaWJseSBtZW1vLWJhaWxlZCwgc28gbm90IHJlLXJlbmRlcmluZyB0byByZS1yZWdpc3Rlcikgc3RpbGxcbiAgICAvLyByZWxpZXMgb24gaXQgZm9yIHN1Ym1pdC10aW1lIHZhbGlkYXRpb24uIEEgTUFOVUFMIHJlZ2lzdGVyRmllbGQgKG5vXG4gICAgLy8gbW91bnRlZCBob2xkZXIsIG93bmVkPWZhbHNlKSBzdXJ2aXZlcyB0aGUgdW5tb3VudCBvZiBwaWdneWJhY2tpbmdcbiAgICAvLyBpbnN0YW5jZXMgdGhhdCBuZXZlciByZWdpc3RlcmVkIHJ1bGVzIHRoZW1zZWx2ZXMuXG4gICAgLy8gTk9URTogY2FsbGVycyBtdXN0IHJldGFpbiBCRUZPUkUgcmVnaXN0ZXJpbmcgKHJldGFpbiBlZmZlY3QgZGVjbGFyZWRcbiAgICAvLyBmaXJzdCksIG9yIHRoZSByZWdpc3RyYXRpb24gaXMgbWlzY2xhc3NpZmllZCBhcyBtYW51YWwgYW5kIGxlYWtzLlxuICAgIGNvbnN0IGZpZWxkTW91bnRDb3VudHNSZWYgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IGZpZWxkUmVnaXN0cmF0aW9uT3duZWRSZWYgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IHJlZ2lzdGVyRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBydWxlcykgPT4ge1xuICAgICAgICBmaWVsZFJ1bGVzUmVmLmN1cnJlbnRbbmFtZV0gPSBydWxlcztcbiAgICAgICAgZmllbGRSZWdpc3RyYXRpb25Pd25lZFJlZi5jdXJyZW50W25hbWVdID0gKGZpZWxkTW91bnRDb3VudHNSZWYuY3VycmVudFtuYW1lXSB8fCAwKSA+IDA7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0RmllbGRSdWxlcyA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkUnVsZXNSZWYuY3VycmVudFtuYW1lXTtcbiAgICB9KTtcbiAgICBjb25zdCB1bnJlZ2lzdGVyRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBmaWVsZFJ1bGVzUmVmLmN1cnJlbnRbbmFtZV07XG4gICAgICAgIGRlbGV0ZSBmaWVsZFJlZ2lzdHJhdGlvbk93bmVkUmVmLmN1cnJlbnRbbmFtZV07XG4gICAgfSk7XG4gICAgY29uc3QgcmV0YWluRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIGZpZWxkTW91bnRDb3VudHNSZWYuY3VycmVudFtuYW1lXSA9IChmaWVsZE1vdW50Q291bnRzUmVmLmN1cnJlbnRbbmFtZV0gfHwgMCkgKyAxO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlbGVhc2VGaWVsZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgY291bnQgPSAoZmllbGRNb3VudENvdW50c1JlZi5jdXJyZW50W25hbWVdIHx8IDApIC0gMTtcbiAgICAgICAgaWYgKGNvdW50IDw9IDApIHtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZE1vdW50Q291bnRzUmVmLmN1cnJlbnRbbmFtZV07XG4gICAgICAgICAgICBpZiAoZmllbGRSZWdpc3RyYXRpb25Pd25lZFJlZi5jdXJyZW50W25hbWVdKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGZpZWxkUnVsZXNSZWYuY3VycmVudFtuYW1lXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgZmllbGRSZWdpc3RyYXRpb25Pd25lZFJlZi5jdXJyZW50W25hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZmllbGRNb3VudENvdW50c1JlZi5jdXJyZW50W25hbWVdID0gY291bnQ7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBQdXJlIHN0YXRlIEFQSTogdGhlIGltcGVyYXRpdmUgcmVzZXRGaWVsZHMoKVxuICAgIC8vIG5ldmVyIGZpcmVzIG9uUmVzZXQuIFRoZSBjYWxsYmFjayBiZWxvbmdzIHRvIHRoZSByZXNldCBBQ1RJT04gbGF5ZXJcbiAgICAvLyAoc3VibWl0dGVyIGJ1dHRvbiAvIG5hdGl2ZSByZXNldCBldmVudCksIHdoaWNoIGZpcmVzIGl0IGV4YWN0bHkgb25jZS5cbiAgICBjb25zdCByZXNldEZpZWxkcyA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICAvLyBJbnZhbGlkYXRlIGluLWZsaWdodCBhc3luYyB2YWxpZGF0aW9uIHJ1bnMg4oCUIHRoZWlyIHJlc3VsdHMgYmVsb25nIHRvXG4gICAgICAgIC8vIHByZS1yZXNldCB2YWx1ZXMgYW5kIG11c3Qgbm90IHN0YW1wIGVycm9ycyBvbnRvIHRoZSByZXNldCBmb3JtLlxuICAgICAgICBpbnZhbGlkYXRlVmFsaWRhdGlvblJ1bnMoKTtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmFsdWVzOiBtb3VudEluaXRpYWxWYWx1ZXMsXG4gICAgICAgICAgICBlcnJvcnM6IHt9LFxuICAgICAgICAgICAgd2FybmluZ3M6IHt9LFxuICAgICAgICAgICAgdG91Y2hlZDoge30sXG4gICAgICAgICAgICB2YWxpZGF0aW5nOiB7fSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXNldEZpZWxkcygpO1xuICAgICAgICBvblJlc2V0ID09PSBudWxsIHx8IG9uUmVzZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUmVzZXQoKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZFZhbHVlID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZVZhbHVlKHN0b3JlLmdldFN0YXRlKCkudmFsdWVzLCBuYW1lKTtcbiAgICB9KTtcbiAgICBjb25zdCBnZXRGaWVsZHNWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHN0b3JlLmdldFN0YXRlKCkudmFsdWVzO1xuICAgICAgICBpZiAoIW5hbWVMaXN0KVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnJlZHVjZSgoYWNjLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICBhY2NbbmFtZV0gPSByZXNvbHZlVmFsdWUodmFsdWVzLCBuYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZHNWYWx1ZSA9IHVzZU1lbW9pemVkRm4oKG5ld1ZhbHVlcykgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZXNQYXRjaCA9IG5ld1ZhbHVlcztcbiAgICAgICAgY29uc3QgcHJldiA9IHN0b3JlLmdldFN0YXRlKCkudmFsdWVzO1xuICAgICAgICBsZXQgdXBkYXRlZFZhbHVlcztcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlc1BhdGNoKS5zb21lKChrZXkpID0+IGtleS5pbmNsdWRlcygnLicpKSkge1xuICAgICAgICAgICAgLy8gRG90LXBhdGgga2V5cyB3cml0ZSBpbnRvIHRoZSBORVNURUQgc3RydWN0dXJlICh0aGUgc2V0RmllbGRWYWx1ZVxuICAgICAgICAgICAgLy8gY29udHJhY3QpIOKAlCBhIHNoYWxsb3cgbWVyZ2Ugd291bGQgbGFuZCB0aGVtIGFzIGxpdGVyYWwgdG9wLWxldmVsXG4gICAgICAgICAgICAvLyBrZXlzIHRoYXQgdGhlIG5lc3RlZC1hd2FyZSByZWFkZXJzIG5ldmVyIGZpbmQuXG4gICAgICAgICAgICB1cGRhdGVkVmFsdWVzID0gcHJldjtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlc1BhdGNoKSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZWRWYWx1ZXMgPSBrZXkuaW5jbHVkZXMoJy4nKVxuICAgICAgICAgICAgICAgICAgICA/IHNldE5lc3RlZFZhbHVlKHVwZGF0ZWRWYWx1ZXMsIGtleSwgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogbWVyZ2VWYWx1ZXNQYXRjaCh1cGRhdGVkVmFsdWVzLCB7IFtrZXldOiB2YWx1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVwZGF0ZWRWYWx1ZXMgPSBtZXJnZVZhbHVlc1BhdGNoKHByZXYsIHZhbHVlc1BhdGNoKTtcbiAgICAgICAgfVxuICAgICAgICBjb21taXRWYWx1ZXModXBkYXRlZFZhbHVlcyk7XG4gICAgICAgIG9uVmFsdWVzQ2hhbmdlID09PSBudWxsIHx8IG9uVmFsdWVzQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblZhbHVlc0NoYW5nZSh2YWx1ZXNQYXRjaCwgdXBkYXRlZFZhbHVlcyk7XG4gICAgfSk7XG4gICAgLy8gU2VlZCB0aGUgcnVsZS1jb250ZXh0IGluc3RhbmNlIHdpdGggdGhlIGNvcmUgbWV0aG9kcyBleGFjdGx5IG9uY2Ug4oCUXG4gICAgLy8gdXNlRm9ybSdzIHJpY2hlciBpbnN0YW5jZSBtdXN0IG5vdCBiZSBkb3duZ3JhZGVkIG9uIGxhdGVyIHJlbmRlcnMuXG4gICAgaWYgKE9iamVjdC5rZXlzKHJ1bGVDb250ZXh0SW5zdGFuY2VSZWYuY3VycmVudCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJ1bGVDb250ZXh0SW5zdGFuY2VSZWYuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGdldEZpZWxkVmFsdWU6IGdldEZpZWxkVmFsdWUsXG4gICAgICAgICAgICBnZXRGaWVsZHNWYWx1ZTogZ2V0RmllbGRzVmFsdWUsXG4gICAgICAgICAgICBzZXRGaWVsZFZhbHVlOiBzZXRGaWVsZFZhbHVlLFxuICAgICAgICAgICAgc2V0RmllbGRzVmFsdWU6IHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICAgICAgcmVzZXRGaWVsZHMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICAgICAgcmVzZXRGaWVsZHMsXG4gICAgICAgIGdldEZpZWxkVmFsdWU6IGdldEZpZWxkVmFsdWUsXG4gICAgICAgIGdldEZpZWxkc1ZhbHVlOiBnZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRzVmFsdWU6IHNldEZpZWxkc1ZhbHVlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlOiBzZXRGaWVsZFZhbHVlLFxuICAgIH0pLCBbXG4gICAgICAgIHJlc2V0RmllbGRzLFxuICAgICAgICBnZXRGaWVsZFZhbHVlLFxuICAgICAgICBnZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRzVmFsdWUsXG4gICAgICAgIHNldEZpZWxkVmFsdWUsXG4gICAgXSk7XG4gICAgLy8gUmVuZGVyLXRpbWUgc25hcHNob3Qg4oCUIGtlcHQgZm9yIHRoZSBVc2VGb3JtQ29yZVJldHVybiBjb250cmFjdC4gUmVhY3RpdmVcbiAgICAvLyBjb25zdW1lcnMgbXVzdCBnbyB0aHJvdWdoIHRoZSBzdG9yZSwgbmV2ZXIgdGhyb3VnaCB0aGVzZSBmaWVsZHMuXG4gICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlczogc3RhdGUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IHN0YXRlLmVycm9ycyxcbiAgICAgICAgd2FybmluZ3M6IHN0YXRlLndhcm5pbmdzLFxuICAgICAgICB0b3VjaGVkOiBzdGF0ZS50b3VjaGVkLFxuICAgICAgICAvLyBMaXZlIHJlZ2lzdHJ5IOKAlCBzdGFibGUgaWRlbnRpdHksIG11dGF0ZWQgaW4gcGxhY2UgYnkgcmVnaXN0ZXIvdW5yZWdpc3Rlci5cbiAgICAgICAgZmllbGRSdWxlczogZmllbGRSdWxlc1JlZi5jdXJyZW50LFxuICAgICAgICBnZXRGaWVsZFJ1bGVzLFxuICAgICAgICBnZXRSdWxlQ29udGV4dEluc3RhbmNlLFxuICAgICAgICBzZXRSdWxlQ29udGV4dEluc3RhbmNlLFxuICAgICAgICBiZWdpblZhbGlkYXRpb25SdW4sXG4gICAgICAgIGlzVmFsaWRhdGlvblJ1bkN1cnJlbnQsXG4gICAgICAgIGludmFsaWRhdGVWYWxpZGF0aW9uUnVucyxcbiAgICAgICAgc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcixcbiAgICAgICAgc2V0RmllbGRXYXJuaW5nLFxuICAgICAgICBzZXRGaWVsZHNWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZ2V0RmllbGRzVmFsdWU6IGdldEZpZWxkc1ZhbHVlLFxuICAgICAgICByZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHJldGFpbkZpZWxkLFxuICAgICAgICByZWxlYXNlRmllbGQsXG4gICAgICAgIGhhbmRsZVJlc2V0LFxuICAgICAgICByZXNldEZpZWxkcyxcbiAgICAgICAgZm9ybUluc3RhbmNlLFxuICAgICAgICBzdG9yZSxcbiAgICAgICAgZ2V0SW5pdGlhbFZhbHVlczogKCkgPT4gbW91bnRJbml0aWFsVmFsdWVzLFxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ybUNvcmU7Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==