@1money/component-ui 0.0.27 → 0.0.29
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/Alert/Alert.js +6 -10
- package/es/components/Calendar/Calendar.js +5 -6
- package/es/components/Checkbox/Checkbox.js +2 -1
- package/es/components/Checkbox/CheckboxGroup.js +2 -1
- package/es/components/Checkbox/index.js +2 -1
- package/es/components/CoachMark/CoachMark.js +3 -4
- package/es/components/Icons/Icon.d.ts +5 -0
- package/es/components/Icons/Icon.js +19 -0
- package/es/components/Icons/Icons.d.ts +8 -173
- package/es/components/Icons/Icons.js +4 -188
- package/es/components/Icons/icon-set/brand.d.ts +6 -0
- package/es/components/Icons/icon-set/brand.js +62 -0
- package/es/components/Icons/icon-set/currency.d.ts +7 -0
- package/es/components/Icons/icon-set/currency.js +101 -0
- package/es/components/Icons/icon-set/dynamic.d.ts +16 -0
- package/es/components/Icons/icon-set/dynamic.js +92 -0
- package/es/components/Icons/icon-set/functional.d.ts +19 -0
- package/es/components/Icons/icon-set/functional.js +286 -0
- package/es/components/Icons/icon-set/index.d.ts +10 -0
- package/es/components/Icons/icon-set/index.js +10 -0
- package/es/components/Icons/icon-set/menu.d.ts +22 -0
- package/es/components/Icons/icon-set/menu.js +372 -0
- package/es/components/Icons/icon-set/notification.d.ts +6 -0
- package/es/components/Icons/icon-set/notification.js +109 -0
- package/es/components/Icons/icon-set/primary.d.ts +14 -0
- package/es/components/Icons/icon-set/primary.js +222 -0
- package/es/components/Icons/icon-set/registry.d.ts +159 -0
- package/es/components/Icons/icon-set/registry.js +166 -0
- package/es/components/Icons/icon-set/system.d.ts +64 -0
- package/es/components/Icons/icon-set/system.js +1093 -0
- package/es/components/Icons/{Illustrations.d.ts → illustrations/Illustrations.d.ts} +1 -1
- package/es/components/Icons/illustrations/Illustrations.js +874 -0
- package/es/components/Icons/illustrations/index.d.ts +2 -0
- package/es/components/Icons/illustrations/index.js +2 -0
- package/es/components/Icons/index.d.ts +5 -2
- package/es/components/Icons/index.js +6 -2
- package/es/components/Icons/interface.d.ts +9 -24
- package/es/components/Icons/{Logo.d.ts → logos/Logo.d.ts} +1 -1
- package/es/components/Icons/logos/Logo.js +209 -0
- package/es/components/Icons/logos/index.d.ts +2 -0
- package/es/components/Icons/logos/index.js +2 -0
- package/es/components/Icons/primitives/IconHover.d.ts +4 -0
- package/es/components/Icons/primitives/IconHover.js +28 -0
- package/es/components/Icons/{Wrapper.d.ts → primitives/IconWrapper.d.ts} +1 -2
- package/es/components/Icons/primitives/IconWrapper.js +81 -0
- package/es/components/Icons/primitives/index.d.ts +5 -0
- package/es/components/Icons/primitives/index.js +5 -0
- package/es/components/Icons/primitives/interface.d.ts +25 -0
- package/es/components/Icons/primitives/interface.js +2 -0
- package/es/components/Icons/types.d.ts +3 -0
- package/es/components/Icons/types.js +2 -0
- package/es/components/Input/Amount/Amount.d.ts +2 -2
- package/es/components/Input/Amount/Amount.js +5 -2
- package/es/components/Input/Input/Input.js +2 -1
- package/es/components/Input/Mask/Mask.d.ts +2 -2
- package/es/components/Input/Mask/Mask.js +5 -2
- package/es/components/Input/OTP/OTP.d.ts +2 -2
- package/es/components/Input/OTP/OTP.js +5 -2
- package/es/components/Input/Password/Password.d.ts +2 -2
- package/es/components/Input/Password/Password.js +8 -7
- package/es/components/Input/Search/Search.d.ts +2 -2
- package/es/components/Input/Search/Search.js +8 -7
- package/es/components/Input/TextArea/TextArea.d.ts +2 -2
- package/es/components/Input/TextArea/TextArea.js +5 -2
- package/es/components/Input/Trade/Trade.d.ts +2 -2
- package/es/components/Input/Trade/Trade.js +5 -2
- package/es/components/Navigation/NavigationLogo.js +4 -6
- package/es/components/ProForm/ProForm.d.ts +2 -1
- package/es/components/ProForm/ProForm.js +120 -49
- package/es/components/ProForm/ProFormDependency.d.ts +2 -1
- package/es/components/ProForm/ProFormDependency.js +101 -8
- package/es/components/ProForm/Submitter.js +42 -3
- package/es/components/ProForm/core/constants.d.ts +1 -1
- package/es/components/ProForm/core/constants.js +3 -3
- package/es/components/ProForm/core/hooks/useForm.d.ts +2 -2
- package/es/components/ProForm/core/hooks/useForm.js +249 -113
- package/es/components/ProForm/core/hooks/useFormCore.js +3 -3
- package/es/components/ProForm/core/interface.d.ts +26 -0
- package/es/components/ProForm/core/useFormItem.d.ts +1 -0
- package/es/components/ProForm/core/useFormItem.js +56 -4
- package/es/components/ProForm/index.d.ts +3 -2
- package/es/components/ProForm/index.js +8 -2
- package/es/components/ProForm/interface.d.ts +11 -5
- package/es/components/Radio/RadioGroup.js +2 -1
- package/es/components/Select/SelectFieldShell.js +3 -4
- package/es/components/Select/SelectOptionContent.js +3 -4
- package/es/components/Select/SelectSearchControl.js +3 -4
- package/es/components/Select/SelectValueContent.js +3 -4
- package/es/components/Slider/Slider.js +2 -1
- package/es/components/Switch/Switch.js +2 -1
- package/es/components/Upload/Upload.js +4 -6
- package/es/components/Upload/UploadFileBar.js +3 -4
- package/es/index.d.ts +2 -2
- package/es/index.js +2 -2
- package/lib/components/Alert/Alert.js +5 -9
- package/lib/components/Calendar/Calendar.js +5 -6
- package/lib/components/Checkbox/Checkbox.js +2 -1
- package/lib/components/Checkbox/CheckboxGroup.js +2 -1
- package/lib/components/Checkbox/index.js +2 -1
- package/lib/components/CoachMark/CoachMark.js +2 -3
- package/lib/components/Icons/Icon.d.ts +5 -0
- package/lib/components/Icons/Icon.js +25 -0
- package/lib/components/Icons/Icons.d.ts +8 -173
- package/lib/components/Icons/Icons.js +5 -183
- package/lib/components/Icons/icon-set/brand.d.ts +6 -0
- package/lib/components/Icons/icon-set/brand.js +69 -0
- package/lib/components/Icons/icon-set/currency.d.ts +7 -0
- package/lib/components/Icons/icon-set/currency.js +108 -0
- package/lib/components/Icons/icon-set/dynamic.d.ts +16 -0
- package/lib/components/Icons/icon-set/dynamic.js +99 -0
- package/lib/components/Icons/icon-set/functional.d.ts +19 -0
- package/lib/components/Icons/icon-set/functional.js +293 -0
- package/lib/components/Icons/icon-set/index.d.ts +10 -0
- package/lib/components/Icons/icon-set/index.js +783 -0
- package/lib/components/Icons/icon-set/menu.d.ts +22 -0
- package/lib/components/Icons/icon-set/menu.js +379 -0
- package/lib/components/Icons/icon-set/notification.d.ts +6 -0
- package/lib/components/Icons/icon-set/notification.js +116 -0
- package/lib/components/Icons/icon-set/primary.d.ts +14 -0
- package/lib/components/Icons/icon-set/primary.js +229 -0
- package/lib/components/Icons/icon-set/registry.d.ts +159 -0
- package/lib/components/Icons/icon-set/registry.js +172 -0
- package/lib/components/Icons/icon-set/system.d.ts +64 -0
- package/lib/components/Icons/icon-set/system.js +1100 -0
- package/lib/components/Icons/{Illustrations.d.ts → illustrations/Illustrations.d.ts} +1 -1
- package/lib/components/Icons/illustrations/Illustrations.js +881 -0
- package/lib/components/Icons/illustrations/index.d.ts +2 -0
- package/lib/components/Icons/illustrations/index.js +79 -0
- package/lib/components/Icons/index.d.ts +5 -2
- package/lib/components/Icons/index.js +160 -5
- package/lib/components/Icons/interface.d.ts +9 -24
- package/lib/components/Icons/{Logo.d.ts → logos/Logo.d.ts} +1 -1
- package/lib/components/Icons/logos/Logo.js +219 -0
- package/lib/components/Icons/logos/index.d.ts +2 -0
- package/lib/components/Icons/logos/index.js +49 -0
- package/lib/components/Icons/primitives/IconHover.d.ts +4 -0
- package/lib/components/Icons/primitives/IconHover.js +37 -0
- package/lib/components/Icons/{Wrapper.d.ts → primitives/IconWrapper.d.ts} +1 -2
- package/lib/components/Icons/primitives/IconWrapper.js +88 -0
- package/lib/components/Icons/primitives/index.d.ts +5 -0
- package/lib/components/Icons/primitives/index.js +25 -0
- package/lib/components/Icons/primitives/interface.d.ts +25 -0
- package/lib/components/Icons/primitives/interface.js +6 -0
- package/lib/components/Icons/types.d.ts +3 -0
- package/lib/components/Icons/types.js +8 -0
- package/lib/components/Input/Amount/Amount.d.ts +2 -2
- package/lib/components/Input/Amount/Amount.js +5 -2
- package/lib/components/Input/Input/Input.js +2 -1
- package/lib/components/Input/Mask/Mask.d.ts +2 -2
- package/lib/components/Input/Mask/Mask.js +5 -2
- package/lib/components/Input/OTP/OTP.d.ts +2 -2
- package/lib/components/Input/OTP/OTP.js +5 -2
- package/lib/components/Input/Password/Password.d.ts +2 -2
- package/lib/components/Input/Password/Password.js +7 -6
- package/lib/components/Input/Search/Search.d.ts +2 -2
- package/lib/components/Input/Search/Search.js +7 -6
- package/lib/components/Input/TextArea/TextArea.d.ts +2 -2
- package/lib/components/Input/TextArea/TextArea.js +5 -2
- package/lib/components/Input/Trade/Trade.d.ts +2 -2
- package/lib/components/Input/Trade/Trade.js +5 -2
- package/lib/components/Navigation/NavigationLogo.js +3 -5
- package/lib/components/ProForm/ProForm.d.ts +2 -1
- package/lib/components/ProForm/ProForm.js +121 -50
- package/lib/components/ProForm/ProFormDependency.d.ts +2 -1
- package/lib/components/ProForm/ProFormDependency.js +108 -11
- package/lib/components/ProForm/Submitter.js +44 -5
- package/lib/components/ProForm/core/constants.d.ts +1 -1
- package/lib/components/ProForm/core/constants.js +3 -3
- package/lib/components/ProForm/core/hooks/useForm.d.ts +2 -2
- package/lib/components/ProForm/core/hooks/useForm.js +247 -112
- package/lib/components/ProForm/core/hooks/useFormCore.js +3 -3
- package/lib/components/ProForm/core/interface.d.ts +26 -0
- package/lib/components/ProForm/core/useFormItem.d.ts +1 -0
- package/lib/components/ProForm/core/useFormItem.js +58 -6
- package/lib/components/ProForm/index.d.ts +3 -2
- package/lib/components/ProForm/index.js +8 -2
- package/lib/components/ProForm/interface.d.ts +11 -5
- package/lib/components/Radio/RadioGroup.js +2 -1
- package/lib/components/Select/SelectFieldShell.js +2 -3
- package/lib/components/Select/SelectOptionContent.js +2 -3
- package/lib/components/Select/SelectSearchControl.js +2 -3
- package/lib/components/Select/SelectValueContent.js +2 -3
- package/lib/components/Slider/Slider.js +2 -1
- package/lib/components/Switch/Switch.js +2 -1
- package/lib/components/Upload/Upload.js +3 -5
- package/lib/components/Upload/UploadFileBar.js +2 -3
- package/lib/index.d.ts +2 -2
- package/lib/index.js +223 -1
- package/package.json +6 -2
- package/scripts/mcp-server/examples.generated.json +24 -24
- package/scripts/mcp-server/index.generated.json +3022 -204
- package/es/components/Icons/Illustrations.js +0 -874
- package/es/components/Icons/Logo.js +0 -209
- package/es/components/Icons/SVGs.d.ts +0 -265
- package/es/components/Icons/SVGs.js +0 -1918
- package/es/components/Icons/Wrapper.js +0 -100
- package/lib/components/Icons/Illustrations.js +0 -881
- package/lib/components/Icons/Logo.js +0 -219
- package/lib/components/Icons/SVGs.d.ts +0 -265
- package/lib/components/Icons/SVGs.js +0 -1926
- package/lib/components/Icons/Wrapper.js +0 -109
|
@@ -8,9 +8,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.useForm = exports["default"] = void 0;
|
|
9
9
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
10
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
|
-
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
12
11
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
12
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
14
14
|
var _react = _interopRequireWildcard(require("react"));
|
|
15
15
|
var _hooks = require("@1money/hooks");
|
|
16
16
|
var _useFormCore = require("./useFormCore");
|
|
@@ -54,17 +54,39 @@ var __rest = void 0 && (void 0).__rest || function (s, e) {
|
|
|
54
54
|
}
|
|
55
55
|
return t;
|
|
56
56
|
};
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// Helpers – resolve nested paths
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
function resolveValue(values, name) {
|
|
61
|
+
if (!name.includes('.')) return values[name];
|
|
62
|
+
var keys = name.split('.');
|
|
63
|
+
var current = values;
|
|
64
|
+
var _iterator = _createForOfIteratorHelper(keys),
|
|
65
|
+
_step;
|
|
66
|
+
try {
|
|
67
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
68
|
+
var key = _step.value;
|
|
69
|
+
if (current === null || current === undefined || (0, _typeof2["default"])(current) !== 'object') return undefined;
|
|
70
|
+
current = current[key];
|
|
71
|
+
}
|
|
72
|
+
} catch (err) {
|
|
73
|
+
_iterator.e(err);
|
|
74
|
+
} finally {
|
|
75
|
+
_iterator.f();
|
|
76
|
+
}
|
|
77
|
+
return current;
|
|
78
|
+
}
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
// useForm
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
57
82
|
var useForm = exports.useForm = function useForm() {
|
|
58
|
-
var
|
|
59
|
-
var
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
onValuesChange: onValuesChange,
|
|
66
|
-
validateTrigger: validateTrigger
|
|
67
|
-
});
|
|
83
|
+
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
84
|
+
var onFinish = config.onFinish,
|
|
85
|
+
onFinishFailed = config.onFinishFailed,
|
|
86
|
+
onReset = config.onReset,
|
|
87
|
+
_config$validateTrigg = config.validateTrigger,
|
|
88
|
+
validateTrigger = _config$validateTrigg === void 0 ? 'onChange' : _config$validateTrigg;
|
|
89
|
+
var formCore = (0, _useFormCore.useFormCore)(config);
|
|
68
90
|
var _useSafeState = (0, _hooks.useSafeState)({}),
|
|
69
91
|
_useSafeState2 = (0, _slicedToArray2["default"])(_useSafeState, 2),
|
|
70
92
|
validating = _useSafeState2[0],
|
|
@@ -76,9 +98,12 @@ var useForm = exports.useForm = function useForm() {
|
|
|
76
98
|
var allTouched = (0, _react.useMemo)(function () {
|
|
77
99
|
return Object.assign(Object.assign({}, formCore.touched), extraTouched);
|
|
78
100
|
}, [formCore.touched, extraTouched]);
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
// Async field validation – each rule is processed exactly once
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
79
104
|
var validateFieldAsync = (0, _hooks.useMemoizedFn)(function (name, value, rules) {
|
|
80
105
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
81
|
-
var
|
|
106
|
+
var _iterator2, _step2, rule, error, _error, _error2, _error3, _error4, _error5, emailPattern, _error6, _error7, result, _error8, errorMessage;
|
|
82
107
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
83
108
|
while (1) switch (_context.prev = _context.next) {
|
|
84
109
|
case 0:
|
|
@@ -95,135 +120,169 @@ var useForm = exports.useForm = function useForm() {
|
|
|
95
120
|
return Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, true));
|
|
96
121
|
});
|
|
97
122
|
_context.prev = 3;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
123
|
+
_iterator2 = _createForOfIteratorHelper(rules);
|
|
124
|
+
_context.prev = 5;
|
|
125
|
+
_iterator2.s();
|
|
126
|
+
case 7:
|
|
127
|
+
if ((_step2 = _iterator2.n()).done) {
|
|
128
|
+
_context.next = 69;
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
rule = _step2.value;
|
|
132
|
+
if (!(rule.required && (value === undefined || value === null || value === ''))) {
|
|
133
|
+
_context.next = 13;
|
|
101
134
|
break;
|
|
102
135
|
}
|
|
136
|
+
error = rule.message || "".concat(name, " is required");
|
|
137
|
+
formCore.setFieldError(name, error);
|
|
103
138
|
return _context.abrupt("return", {
|
|
104
139
|
isValid: false,
|
|
105
|
-
error:
|
|
140
|
+
error: error
|
|
106
141
|
});
|
|
107
|
-
case
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
_iterator.s();
|
|
111
|
-
case 10:
|
|
112
|
-
if ((_step = _iterator.n()).done) {
|
|
113
|
-
_context.next = 56;
|
|
114
|
-
break;
|
|
115
|
-
}
|
|
116
|
-
rule = _step.value;
|
|
117
|
-
if (!(rule.validator && typeof rule.validator === 'function')) {
|
|
118
|
-
_context.next = 28;
|
|
142
|
+
case 13:
|
|
143
|
+
if (!(rule.min && typeof value === 'string' && value.length < rule.min)) {
|
|
144
|
+
_context.next = 17;
|
|
119
145
|
break;
|
|
120
146
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
return
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
147
|
+
_error = rule.message || "".concat(name, " must be at least ").concat(rule.min, " characters");
|
|
148
|
+
formCore.setFieldError(name, _error);
|
|
149
|
+
return _context.abrupt("return", {
|
|
150
|
+
isValid: false,
|
|
151
|
+
error: _error
|
|
152
|
+
});
|
|
153
|
+
case 17:
|
|
154
|
+
if (!(rule.max && typeof value === 'string' && value.length > rule.max)) {
|
|
127
155
|
_context.next = 21;
|
|
128
156
|
break;
|
|
129
157
|
}
|
|
130
|
-
|
|
131
|
-
formCore.setFieldError(name,
|
|
158
|
+
_error2 = rule.message || "".concat(name, " must be no more than ").concat(rule.max, " characters");
|
|
159
|
+
formCore.setFieldError(name, _error2);
|
|
132
160
|
return _context.abrupt("return", {
|
|
133
161
|
isValid: false,
|
|
134
|
-
error:
|
|
162
|
+
error: _error2
|
|
135
163
|
});
|
|
136
164
|
case 21:
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
formCore.setFieldError(name, errorMessage);
|
|
165
|
+
if (!(rule.pattern && typeof value === 'string' && !rule.pattern.test(value))) {
|
|
166
|
+
_context.next = 25;
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
_error3 = rule.message || "".concat(name, " format is invalid");
|
|
170
|
+
formCore.setFieldError(name, _error3);
|
|
144
171
|
return _context.abrupt("return", {
|
|
145
172
|
isValid: false,
|
|
146
|
-
error:
|
|
173
|
+
error: _error3
|
|
147
174
|
});
|
|
148
|
-
case
|
|
175
|
+
case 25:
|
|
149
176
|
if (!(rule["enum"] && Array.isArray(rule["enum"]) && value)) {
|
|
150
|
-
_context.next =
|
|
177
|
+
_context.next = 30;
|
|
151
178
|
break;
|
|
152
179
|
}
|
|
153
180
|
if (rule["enum"].includes(value)) {
|
|
154
|
-
_context.next =
|
|
181
|
+
_context.next = 30;
|
|
155
182
|
break;
|
|
156
183
|
}
|
|
157
|
-
|
|
158
|
-
formCore.setFieldError(name,
|
|
184
|
+
_error4 = rule.message || "".concat(name, " must be one of ").concat(rule["enum"].join(', '));
|
|
185
|
+
formCore.setFieldError(name, _error4);
|
|
159
186
|
return _context.abrupt("return", {
|
|
160
187
|
isValid: false,
|
|
161
|
-
error:
|
|
188
|
+
error: _error4
|
|
162
189
|
});
|
|
163
|
-
case
|
|
190
|
+
case 30:
|
|
164
191
|
if (!(rule.type === 'number' && value !== undefined && value !== null && value !== '')) {
|
|
165
|
-
_context.next =
|
|
192
|
+
_context.next = 35;
|
|
166
193
|
break;
|
|
167
194
|
}
|
|
168
195
|
if (!(typeof value !== 'number' || isNaN(value))) {
|
|
169
|
-
_context.next =
|
|
196
|
+
_context.next = 35;
|
|
170
197
|
break;
|
|
171
198
|
}
|
|
172
|
-
|
|
173
|
-
formCore.setFieldError(name,
|
|
199
|
+
_error5 = rule.message || "".concat(name, " must be a number");
|
|
200
|
+
formCore.setFieldError(name, _error5);
|
|
174
201
|
return _context.abrupt("return", {
|
|
175
202
|
isValid: false,
|
|
176
|
-
error:
|
|
203
|
+
error: _error5
|
|
177
204
|
});
|
|
178
|
-
case
|
|
205
|
+
case 35:
|
|
179
206
|
if (!(rule.type === 'email' && value)) {
|
|
180
|
-
_context.next =
|
|
207
|
+
_context.next = 41;
|
|
181
208
|
break;
|
|
182
209
|
}
|
|
183
210
|
emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
184
211
|
if (emailPattern.test(String(value))) {
|
|
185
|
-
_context.next =
|
|
212
|
+
_context.next = 41;
|
|
186
213
|
break;
|
|
187
214
|
}
|
|
188
|
-
|
|
189
|
-
formCore.setFieldError(name,
|
|
215
|
+
_error6 = rule.message || "".concat(name, " must be a valid email");
|
|
216
|
+
formCore.setFieldError(name, _error6);
|
|
190
217
|
return _context.abrupt("return", {
|
|
191
218
|
isValid: false,
|
|
192
|
-
error:
|
|
219
|
+
error: _error6
|
|
193
220
|
});
|
|
194
|
-
case
|
|
221
|
+
case 41:
|
|
195
222
|
if (!(rule.type === 'url' && value)) {
|
|
196
|
-
_context.next =
|
|
223
|
+
_context.next = 51;
|
|
197
224
|
break;
|
|
198
225
|
}
|
|
199
|
-
_context.prev =
|
|
226
|
+
_context.prev = 42;
|
|
200
227
|
new URL(String(value));
|
|
201
|
-
_context.next =
|
|
228
|
+
_context.next = 51;
|
|
202
229
|
break;
|
|
203
|
-
case
|
|
204
|
-
_context.prev =
|
|
205
|
-
_context.
|
|
206
|
-
|
|
207
|
-
formCore.setFieldError(name,
|
|
230
|
+
case 46:
|
|
231
|
+
_context.prev = 46;
|
|
232
|
+
_context.t0 = _context["catch"](42);
|
|
233
|
+
_error7 = rule.message || "".concat(name, " must be a valid URL");
|
|
234
|
+
formCore.setFieldError(name, _error7);
|
|
208
235
|
return _context.abrupt("return", {
|
|
209
236
|
isValid: false,
|
|
210
|
-
error:
|
|
237
|
+
error: _error7
|
|
211
238
|
});
|
|
212
|
-
case
|
|
213
|
-
|
|
239
|
+
case 51:
|
|
240
|
+
if (!(rule.validator && typeof rule.validator === 'function')) {
|
|
241
|
+
_context.next = 67;
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
_context.prev = 52;
|
|
245
|
+
_context.next = 55;
|
|
246
|
+
return Promise.resolve(rule.validator(value, formCore.values));
|
|
247
|
+
case 55:
|
|
248
|
+
result = _context.sent;
|
|
249
|
+
if (!(result !== true && result !== undefined)) {
|
|
250
|
+
_context.next = 60;
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
_error8 = typeof result === 'string' ? result : 'Validation failed';
|
|
254
|
+
formCore.setFieldError(name, _error8);
|
|
255
|
+
return _context.abrupt("return", {
|
|
256
|
+
isValid: false,
|
|
257
|
+
error: _error8
|
|
258
|
+
});
|
|
259
|
+
case 60:
|
|
260
|
+
_context.next = 67;
|
|
214
261
|
break;
|
|
215
|
-
case
|
|
216
|
-
_context.
|
|
262
|
+
case 62:
|
|
263
|
+
_context.prev = 62;
|
|
264
|
+
_context.t1 = _context["catch"](52);
|
|
265
|
+
errorMessage = _context.t1 instanceof Error ? _context.t1.message : 'Validation error';
|
|
266
|
+
formCore.setFieldError(name, errorMessage);
|
|
267
|
+
return _context.abrupt("return", {
|
|
268
|
+
isValid: false,
|
|
269
|
+
error: errorMessage
|
|
270
|
+
});
|
|
271
|
+
case 67:
|
|
272
|
+
_context.next = 7;
|
|
217
273
|
break;
|
|
218
|
-
case
|
|
219
|
-
_context.
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
_context.
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
274
|
+
case 69:
|
|
275
|
+
_context.next = 74;
|
|
276
|
+
break;
|
|
277
|
+
case 71:
|
|
278
|
+
_context.prev = 71;
|
|
279
|
+
_context.t2 = _context["catch"](5);
|
|
280
|
+
_iterator2.e(_context.t2);
|
|
281
|
+
case 74:
|
|
282
|
+
_context.prev = 74;
|
|
283
|
+
_iterator2.f();
|
|
284
|
+
return _context.finish(74);
|
|
285
|
+
case 77:
|
|
227
286
|
if (formCore.errors[name]) {
|
|
228
287
|
formCore.setFieldError(name, null);
|
|
229
288
|
}
|
|
@@ -231,21 +290,24 @@ var useForm = exports.useForm = function useForm() {
|
|
|
231
290
|
isValid: true,
|
|
232
291
|
error: null
|
|
233
292
|
});
|
|
234
|
-
case
|
|
235
|
-
_context.prev =
|
|
293
|
+
case 79:
|
|
294
|
+
_context.prev = 79;
|
|
236
295
|
setValidating(function (prev) {
|
|
237
296
|
var newValidating = Object.assign({}, prev);
|
|
238
297
|
delete newValidating[name];
|
|
239
298
|
return newValidating;
|
|
240
299
|
});
|
|
241
|
-
return _context.finish(
|
|
242
|
-
case
|
|
300
|
+
return _context.finish(79);
|
|
301
|
+
case 82:
|
|
243
302
|
case "end":
|
|
244
303
|
return _context.stop();
|
|
245
304
|
}
|
|
246
|
-
}, _callee, null, [[3,,
|
|
305
|
+
}, _callee, null, [[3,, 79, 82], [5, 71, 74, 77], [42, 46], [52, 62]]);
|
|
247
306
|
}));
|
|
248
307
|
});
|
|
308
|
+
// ---------------------------------------------------------------------------
|
|
309
|
+
// Async field blur handler
|
|
310
|
+
// ---------------------------------------------------------------------------
|
|
249
311
|
var handleFieldBlur = (0, _hooks.useEventCallback)(function (name) {
|
|
250
312
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
251
313
|
var rules;
|
|
@@ -261,7 +323,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
261
323
|
break;
|
|
262
324
|
}
|
|
263
325
|
_context2.next = 5;
|
|
264
|
-
return validateFieldAsync(name, formCore.values
|
|
326
|
+
return validateFieldAsync(name, resolveValue(formCore.values, name), rules);
|
|
265
327
|
case 5:
|
|
266
328
|
case "end":
|
|
267
329
|
return _context2.stop();
|
|
@@ -269,6 +331,9 @@ var useForm = exports.useForm = function useForm() {
|
|
|
269
331
|
}, _callee2);
|
|
270
332
|
}));
|
|
271
333
|
});
|
|
334
|
+
// ---------------------------------------------------------------------------
|
|
335
|
+
// Validate all fields async
|
|
336
|
+
// ---------------------------------------------------------------------------
|
|
272
337
|
var validateFieldsAsync = (0, _hooks.useMemoizedFn)(function (nameList) {
|
|
273
338
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
274
339
|
var fieldsToValidate, hasError, fieldErrors, validationPromises, error;
|
|
@@ -290,7 +355,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
290
355
|
break;
|
|
291
356
|
}
|
|
292
357
|
_context3.next = 4;
|
|
293
|
-
return validateFieldAsync(name, formCore.values
|
|
358
|
+
return validateFieldAsync(name, resolveValue(formCore.values, name), rules);
|
|
294
359
|
case 4:
|
|
295
360
|
_yield$validateFieldA = _context3.sent;
|
|
296
361
|
isValid = _yield$validateFieldA.isValid;
|
|
@@ -323,7 +388,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
323
388
|
break;
|
|
324
389
|
}
|
|
325
390
|
return _context4.abrupt("return", nameList.reduce(function (acc, name) {
|
|
326
|
-
acc[name] = formCore.values
|
|
391
|
+
acc[name] = resolveValue(formCore.values, name);
|
|
327
392
|
return acc;
|
|
328
393
|
}, {}));
|
|
329
394
|
case 13:
|
|
@@ -335,6 +400,9 @@ var useForm = exports.useForm = function useForm() {
|
|
|
335
400
|
}, _callee4);
|
|
336
401
|
}));
|
|
337
402
|
});
|
|
403
|
+
// ---------------------------------------------------------------------------
|
|
404
|
+
// defineField – used by standalone (non-ProForm) consumers
|
|
405
|
+
// ---------------------------------------------------------------------------
|
|
338
406
|
var defineField = (0, _react.useCallback)(function (name) {
|
|
339
407
|
var fieldOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
340
408
|
var _fieldOptions$rules = fieldOptions.rules,
|
|
@@ -421,6 +489,49 @@ var useForm = exports.useForm = function useForm() {
|
|
|
421
489
|
FieldComponent.displayName = "Field(".concat(name, ")");
|
|
422
490
|
return FieldComponent;
|
|
423
491
|
}, [formCore, allTouched, validating, validateTrigger, handleFieldBlur]);
|
|
492
|
+
// ---------------------------------------------------------------------------
|
|
493
|
+
// handleSubmit / handleReset – for <form> event handlers
|
|
494
|
+
// ---------------------------------------------------------------------------
|
|
495
|
+
var handleSubmit = (0, _hooks.useEventCallback)(function (e) {
|
|
496
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
|
|
497
|
+
var validatedValues, typed;
|
|
498
|
+
return _regenerator["default"].wrap(function _callee5$(_context5) {
|
|
499
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
500
|
+
case 0:
|
|
501
|
+
e === null || e === void 0 ? void 0 : e.preventDefault();
|
|
502
|
+
_context5.prev = 1;
|
|
503
|
+
_context5.next = 4;
|
|
504
|
+
return validateFieldsAsync();
|
|
505
|
+
case 4:
|
|
506
|
+
validatedValues = _context5.sent;
|
|
507
|
+
onFinish === null || onFinish === void 0 ? void 0 : onFinish(validatedValues);
|
|
508
|
+
_context5.next = 12;
|
|
509
|
+
break;
|
|
510
|
+
case 8:
|
|
511
|
+
_context5.prev = 8;
|
|
512
|
+
_context5.t0 = _context5["catch"](1);
|
|
513
|
+
typed = _context5.t0;
|
|
514
|
+
onFinishFailed === null || onFinishFailed === void 0 ? void 0 : onFinishFailed({
|
|
515
|
+
values: typed.values,
|
|
516
|
+
errors: typed.errors
|
|
517
|
+
});
|
|
518
|
+
case 12:
|
|
519
|
+
case "end":
|
|
520
|
+
return _context5.stop();
|
|
521
|
+
}
|
|
522
|
+
}, _callee5, null, [[1, 8]]);
|
|
523
|
+
}));
|
|
524
|
+
});
|
|
525
|
+
var handleReset = (0, _hooks.useEventCallback)(function (e) {
|
|
526
|
+
e === null || e === void 0 ? void 0 : e.preventDefault();
|
|
527
|
+
formCore.resetFields();
|
|
528
|
+
setExtraTouched({});
|
|
529
|
+
setValidating({});
|
|
530
|
+
onReset === null || onReset === void 0 ? void 0 : onReset();
|
|
531
|
+
});
|
|
532
|
+
// ---------------------------------------------------------------------------
|
|
533
|
+
// FormInstance – enhanced API for consumers
|
|
534
|
+
// ---------------------------------------------------------------------------
|
|
424
535
|
var formInstance = (0, _react.useMemo)(function () {
|
|
425
536
|
return Object.assign(Object.assign({}, formCore.formInstance), {
|
|
426
537
|
validateFields: validateFieldsAsync,
|
|
@@ -488,7 +599,8 @@ var useForm = exports.useForm = function useForm() {
|
|
|
488
599
|
} else {
|
|
489
600
|
var resetValues = {};
|
|
490
601
|
fields.forEach(function (field) {
|
|
491
|
-
|
|
602
|
+
var _a;
|
|
603
|
+
resetValues[field] = ((_a = config.initialValues) !== null && _a !== void 0 ? _a : {})[field];
|
|
492
604
|
});
|
|
493
605
|
formCore.setFieldsValue(resetValues);
|
|
494
606
|
setExtraTouched(function (prev) {
|
|
@@ -511,41 +623,64 @@ var useForm = exports.useForm = function useForm() {
|
|
|
511
623
|
}
|
|
512
624
|
},
|
|
513
625
|
submit: function submit(callback) {
|
|
514
|
-
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function
|
|
626
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
|
|
515
627
|
var validatedValues;
|
|
516
|
-
return _regenerator["default"].wrap(function
|
|
517
|
-
while (1) switch (
|
|
628
|
+
return _regenerator["default"].wrap(function _callee6$(_context6) {
|
|
629
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
518
630
|
case 0:
|
|
519
|
-
|
|
520
|
-
|
|
631
|
+
_context6.prev = 0;
|
|
632
|
+
_context6.next = 3;
|
|
521
633
|
return validateFieldsAsync();
|
|
522
634
|
case 3:
|
|
523
|
-
validatedValues =
|
|
635
|
+
validatedValues = _context6.sent;
|
|
524
636
|
if (!callback) {
|
|
525
|
-
|
|
637
|
+
_context6.next = 7;
|
|
526
638
|
break;
|
|
527
639
|
}
|
|
528
|
-
|
|
640
|
+
_context6.next = 7;
|
|
529
641
|
return callback(validatedValues);
|
|
530
642
|
case 7:
|
|
531
|
-
return
|
|
643
|
+
return _context6.abrupt("return", validatedValues);
|
|
532
644
|
case 10:
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
return
|
|
645
|
+
_context6.prev = 10;
|
|
646
|
+
_context6.t0 = _context6["catch"](0);
|
|
647
|
+
return _context6.abrupt("return", undefined);
|
|
536
648
|
case 13:
|
|
537
649
|
case "end":
|
|
538
|
-
return
|
|
650
|
+
return _context6.stop();
|
|
539
651
|
}
|
|
540
|
-
},
|
|
652
|
+
}, _callee6, null, [[0, 10]]);
|
|
541
653
|
}));
|
|
542
654
|
},
|
|
543
655
|
defineField: defineField,
|
|
544
656
|
registerField: formCore.registerField,
|
|
545
657
|
unregisterField: formCore.unregisterField
|
|
546
658
|
});
|
|
547
|
-
}, [formCore, allTouched, validating, validateFieldsAsync, defineField, initialValues, setValidating]);
|
|
548
|
-
|
|
659
|
+
}, [formCore, allTouched, validating, validateFieldsAsync, defineField, config.initialValues, setValidating]);
|
|
660
|
+
// ---------------------------------------------------------------------------
|
|
661
|
+
// Internals – exposed for ProForm integration
|
|
662
|
+
// ---------------------------------------------------------------------------
|
|
663
|
+
var internals = (0, _react.useMemo)(function () {
|
|
664
|
+
return {
|
|
665
|
+
values: formCore.values,
|
|
666
|
+
errors: formCore.errors,
|
|
667
|
+
touched: allTouched,
|
|
668
|
+
validating: validating,
|
|
669
|
+
fieldRules: formCore.fieldRules,
|
|
670
|
+
setFieldValue: formCore.setFieldValue,
|
|
671
|
+
setFieldError: formCore.setFieldError,
|
|
672
|
+
validateField: formCore.validateField,
|
|
673
|
+
validateFieldAsync: validateFieldAsync,
|
|
674
|
+
registerField: formCore.registerField,
|
|
675
|
+
unregisterField: formCore.unregisterField,
|
|
676
|
+
handleSubmit: handleSubmit,
|
|
677
|
+
handleReset: handleReset
|
|
678
|
+
};
|
|
679
|
+
}, [formCore.values, formCore.errors, allTouched, validating, formCore.fieldRules, formCore.setFieldValue, formCore.setFieldError, formCore.validateField, validateFieldAsync, formCore.registerField, formCore.unregisterField, handleSubmit, handleReset]);
|
|
680
|
+
return {
|
|
681
|
+
formInstance: formInstance,
|
|
682
|
+
internals: internals
|
|
683
|
+
};
|
|
549
684
|
};
|
|
550
685
|
var _default = exports["default"] = useForm;
|
|
551
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtLnRzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfaG9va3MiLCJfdXNlRm9ybUNvcmUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsImFkb3B0IiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJwIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlRm9ybSIsImV4cG9ydHMiLCJpbml0aWFsVmFsdWVzIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwib3B0aW9ucyIsIm9uVmFsdWVzQ2hhbmdlIiwiX29wdGlvbnMkdmFsaWRhdGVUcmlnIiwidmFsaWRhdGVUcmlnZ2VyIiwiZm9ybUNvcmUiLCJ1c2VGb3JtQ29yZSIsIl91c2VTYWZlU3RhdGUiLCJ1c2VTYWZlU3RhdGUiLCJfdXNlU2FmZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInZhbGlkYXRpbmciLCJzZXRWYWxpZGF0aW5nIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiZXh0cmFUb3VjaGVkIiwic2V0RXh0cmFUb3VjaGVkIiwiYWxsVG91Y2hlZCIsInVzZU1lbW8iLCJhc3NpZ24iLCJ0b3VjaGVkIiwidmFsaWRhdGVGaWVsZEFzeW5jIiwidXNlTWVtb2l6ZWRGbiIsInJ1bGVzIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJiYXNpY1ZhbGlkIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJydWxlIiwiZXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJfZXJyb3IiLCJfZXJyb3IyIiwiZW1haWxQYXR0ZXJuIiwiX2Vycm9yMyIsIl9lcnJvcjQiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJhYnJ1cHQiLCJpc1ZhbGlkIiwiX2RlZmluZVByb3BlcnR5MiIsInZhbGlkYXRlRmllbGQiLCJlcnJvcnMiLCJ2YWxpZGF0b3IiLCJ2YWx1ZXMiLCJzZW50Iiwic2V0RmllbGRFcnJvciIsInQwIiwiRXJyb3IiLCJtZXNzYWdlIiwiaW5jbHVkZXMiLCJjb25jYXQiLCJqb2luIiwidHlwZSIsImlzTmFOIiwiU3RyaW5nIiwiVVJMIiwidDEiLCJ0MiIsImZpbmlzaCIsIm5ld1ZhbGlkYXRpbmciLCJzdG9wIiwiaGFuZGxlRmllbGRCbHVyIiwidXNlRXZlbnRDYWxsYmFjayIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiZmllbGRSdWxlcyIsInZhbGlkYXRlRmllbGRzQXN5bmMiLCJuYW1lTGlzdCIsIl9jYWxsZWU0IiwiZmllbGRzVG9WYWxpZGF0ZSIsImhhc0Vycm9yIiwiZmllbGRFcnJvcnMiLCJ2YWxpZGF0aW9uUHJvbWlzZXMiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJrZXlzIiwibWFwIiwiX2NhbGxlZTMiLCJfeWllbGQkdmFsaWRhdGVGaWVsZEEiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJhbGwiLCJyZWR1Y2UiLCJhY2MiLCJkZWZpbmVGaWVsZCIsInVzZUNhbGxiYWNrIiwiZmllbGRPcHRpb25zIiwiX2ZpZWxkT3B0aW9ucyRydWxlcyIsIkZpZWxkQ29tcG9uZW50IiwibWVtbyIsIl9hIiwiX2IiLCJjaGlsZHJlbiIsInJlbmRlciIsInByb3BzIiwiZmllbGRWYWx1ZSIsImZpZWxkRXJyb3IiLCJmaWVsZFRvdWNoZWQiLCJmaWVsZFZhbGlkYXRpbmciLCJ1c2VFZmZlY3QiLCJleGlzdGluZ1J1bGVzIiwiZ2V0RmllbGRSdWxlcyIsInJlZ2lzdGVyRmllbGQiLCJ1bnJlZ2lzdGVyRmllbGQiLCJoYW5kbGVGaWVsZENoYW5nZSIsInNldEZpZWxkVmFsdWUiLCJoYW5kbGVCbHVyIiwiZmllbGRQcm9wcyIsIm9uQ2hhbmdlIiwib25CbHVyIiwiaGFuZGxlTWVyZ2VDaGFuZ2UiLCJfdHlwZW9mMiIsInRhcmdldCIsIlJlYWN0IiwiaXNWYWxpZEVsZW1lbnQiLCJoYW5kbGVNZXJnZUJsdXIiLCJtZXJnZWRQcm9wcyIsImNsb25lRWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJGcmFnbWVudCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJjaGlsZCIsImluZGV4Iiwia2V5IiwiZGlzcGxheU5hbWUiLCJmb3JtSW5zdGFuY2UiLCJ2YWxpZGF0ZUZpZWxkcyIsImdldEZpZWxkRXJyb3IiLCJnZXRGaWVsZHNFcnJvciIsImZvckVhY2giLCJpc0ZpZWxkVG91Y2hlZCIsImlzRmllbGRzVG91Y2hlZCIsImFsbEZpZWxkc1RvdWNoZWQiLCJzb21lIiwiZXZlcnkiLCJpc0ZpZWxkVmFsaWRhdGluZyIsInNldEZpZWxkc0Vycm9yIiwiZmllbGRzRXJyb3IiLCJlbnRyaWVzIiwiX3JlZiIsIl9yZWYyIiwic2V0RmllbGRUb3VjaGVkIiwiaXNUb3VjaGVkIiwic2V0RmllbGRzVG91Y2hlZCIsImZpZWxkc1RvdWNoIiwicmVzZXRGaWVsZHMiLCJmaWVsZHMiLCJyZXNldFZhbHVlcyIsImZpZWxkIiwic2V0RmllbGRzVmFsdWUiLCJuZXdUb3VjaGVkIiwic3VibWl0IiwiY2FsbGJhY2siLCJfY2FsbGVlNSIsInZhbGlkYXRlZFZhbHVlcyIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsIl9kZWZhdWx0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBRixPQUFBO0FBQTRDLFNBQUFHLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBTCx3QkFBQUssQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxRQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQLENBQUEsT0FBQVEsQ0FBQSxLQUFBQyxTQUFBLFVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FB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VUFBVSxFQUNWUCxVQUFVLEVBQ1Y4RCxtQkFBbUIsRUFDbkJrQixXQUFXLEVBQ1g3RixhQUFhLEVBQ2JjLGFBQWEsQ0FDZCxDQUNGO0VBRUQsT0FBTyxDQUFDd0gsWUFBWSxDQUFDO0FBQ3ZCLENBQUM7QUFBQyxJQUFBZ0MsUUFBQSxHQUFBdkssT0FBQSxjQUVhRCxPQUFPIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCBtZW1vLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUV2ZW50Q2FsbGJhY2ssIHVzZU1lbW9pemVkRm4sIHVzZVNhZmVTdGF0ZSB9IGZyb20gJ0AxbW9uZXkvaG9va3MnO1xuaW1wb3J0IHsgdXNlRm9ybUNvcmUgfSBmcm9tICcuL3VzZUZvcm1Db3JlJztcbmV4cG9ydCBjb25zdCB1c2VGb3JtID0gKGluaXRpYWxWYWx1ZXMgPSB7fSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBvblZhbHVlc0NoYW5nZSwgdmFsaWRhdGVUcmlnZ2VyID0gJ29uQ2hhbmdlJyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBmb3JtQ29yZSA9IHVzZUZvcm1Db3JlKHtcbiAgICAgICAgaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgb25WYWx1ZXNDaGFuZ2UsXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICB9KTtcbiAgICBjb25zdCBbdmFsaWRhdGluZywgc2V0VmFsaWRhdGluZ10gPSB1c2VTYWZlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtleHRyYVRvdWNoZWQsIHNldEV4dHJhVG91Y2hlZF0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgYWxsVG91Y2hlZCA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUudG91Y2hlZCksIGV4dHJhVG91Y2hlZCkpLCBbZm9ybUNvcmUudG91Y2hlZCwgZXh0cmFUb3VjaGVkXSk7XG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZEFzeW5jID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgdmFsdWUsIHJ1bGVzKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCFydWxlcyB8fCBydWxlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IHRydWUgfSkpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2ljVmFsaWQgPSBmb3JtQ29yZS52YWxpZGF0ZUZpZWxkKG5hbWUsIHJ1bGVzLCB2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWJhc2ljVmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3I6IGZvcm1Db3JlLmVycm9yc1tuYW1lXSB8fCBudWxsIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocnVsZS52YWxpZGF0b3IgJiYgdHlwZW9mIHJ1bGUudmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCBQcm9taXNlLnJlc29sdmUocnVsZS52YWxpZGF0b3IodmFsdWUsIGZvcm1Db3JlLnZhbHVlcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgPyByZXN1bHQgOiAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnVmFsaWRhdGlvbiBlcnJvcic7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3I6IGVycm9yTWVzc2FnZSB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydWxlLmVudW0gJiYgQXJyYXkuaXNBcnJheShydWxlLmVudW0pICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcnVsZS5lbnVtLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtuYW1lfSBtdXN0IGJlIG9uZSBvZiAke3J1bGUuZW51bS5qb2luKCcsICcpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydWxlLnR5cGUgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhIG51bWJlcmA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydWxlLnR5cGUgPT09ICdlbWFpbCcgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1haWxQYXR0ZXJuID0gL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC87XG4gICAgICAgICAgICAgICAgICAgIGlmICghZW1haWxQYXR0ZXJuLnRlc3QoU3RyaW5nKHZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYSB2YWxpZCBlbWFpbGA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChydWxlLnR5cGUgPT09ICd1cmwnICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgVVJMKFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhIHZhbGlkIFVSTGA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgc2V0VmFsaWRhdGluZygocHJldikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tuYW1lXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGhhbmRsZUZpZWxkQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKG5hbWUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogdHJ1ZSB9KSkpO1xuICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmZpZWxkUnVsZXNbbmFtZV07XG4gICAgICAgIGlmIChydWxlcyAmJiB2YWxpZGF0ZVRyaWdnZXIgPT09ICdvbkJsdXInKSB7XG4gICAgICAgICAgICB5aWVsZCB2YWxpZGF0ZUZpZWxkQXN5bmMobmFtZSwgZm9ybUNvcmUudmFsdWVzW25hbWVdLCBydWxlcyk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHNBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmllbGRzVG9WYWxpZGF0ZSA9IG5hbWVMaXN0IHx8IE9iamVjdC5rZXlzKGZvcm1Db3JlLmZpZWxkUnVsZXMpO1xuICAgICAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB7fTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvblByb21pc2VzID0gZmllbGRzVG9WYWxpZGF0ZS5tYXAoKG5hbWUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5maWVsZFJ1bGVzW25hbWVdO1xuICAgICAgICAgICAgaWYgKHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpc1ZhbGlkLCBlcnJvciB9ID0geWllbGQgdmFsaWRhdGVGaWVsZEFzeW5jKG5hbWUsIGZvcm1Db3JlLnZhbHVlc1tuYW1lXSwgcnVsZXMpO1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW25hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIHlpZWxkIFByb21pc2UuYWxsKHZhbGlkYXRpb25Qcm9taXNlcyk7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ1ZhbGlkYXRpb24gZmFpbGVkJyk7XG4gICAgICAgICAgICBlcnJvci52YWx1ZXMgPSBmb3JtQ29yZS52YWx1ZXM7XG4gICAgICAgICAgICBlcnJvci5lcnJvcnMgPSBmaWVsZEVycm9ycztcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lTGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnJlZHVjZSgoYWNjLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgYWNjW25hbWVdID0gZm9ybUNvcmUudmFsdWVzW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1Db3JlLnZhbHVlcztcbiAgICB9KSk7XG4gICAgY29uc3QgZGVmaW5lRmllbGQgPSB1c2VDYWxsYmFjaygobmFtZSwgZmllbGRPcHRpb25zID0ge30pID0+IHtcbiAgICAgICAgY29uc3QgeyBydWxlcyA9IFtdIH0gPSBmaWVsZE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IEZpZWxkQ29tcG9uZW50ID0gbWVtbygoX2EpID0+IHtcbiAgICAgICAgICAgIHZhciBfYjtcbiAgICAgICAgICAgIHZhciB7IGNoaWxkcmVuLCByZW5kZXIgfSA9IF9hLCBwcm9wcyA9IF9fcmVzdChfYSwgW1wiY2hpbGRyZW5cIiwgXCJyZW5kZXJcIl0pO1xuICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IChfYiA9IGZvcm1Db3JlLnZhbHVlc1tuYW1lXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XG4gICAgICAgICAgICBjb25zdCBmaWVsZEVycm9yID0gZm9ybUNvcmUuZXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgY29uc3QgZmllbGRUb3VjaGVkID0gYWxsVG91Y2hlZFtuYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsaWRhdGluZyA9IHZhbGlkYXRpbmdbbmFtZV07XG4gICAgICAgICAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUnVsZXMgPSBmb3JtQ29yZS5nZXRGaWVsZFJ1bGVzKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdSdWxlcyAmJiBydWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQobmFtZSwgcnVsZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQobmFtZSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sIFtdKTsgLy8gT25seSByZWdpc3RlciBvbiBtb3VudFxuICAgICAgICAgICAgY29uc3QgaGFuZGxlRmllbGRDaGFuZ2UgPSB1c2VFdmVudENhbGxiYWNrKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVRyaWdnZXIgPT09ICdvbkNoYW5nZScpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZChuYW1lLCBydWxlcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZUZpZWxkQmx1cihuYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZmllbGRQcm9wcyA9IE9iamVjdC5hc3NpZ24oeyBuYW1lLCB2YWx1ZTogZmllbGRWYWx1ZSwgZXJyb3I6IGZpZWxkRXJyb3IsIHRvdWNoZWQ6IGZpZWxkVG91Y2hlZCwgdmFsaWRhdGluZzogZmllbGRWYWxpZGF0aW5nLCBvbkNoYW5nZTogaGFuZGxlRmllbGRDaGFuZ2UsIG9uQmx1cjogaGFuZGxlQmx1ciB9LCBwcm9wcyk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVNZXJnZUNoYW5nZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZSAmJiB0eXBlb2YgZSA9PT0gJ29iamVjdCcgJiYgJ3RhcmdldCcgaW4gZVxuICAgICAgICAgICAgICAgICAgICA/IGUudGFyZ2V0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogZTtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZENoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkNoYW5nZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVNZXJnZUJsdXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGhhbmRsZUJsdXIoKTtcbiAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICgoX2EgPSBjaGlsZHJlbi5wcm9wcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uQmx1cikpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25CbHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZW5kZXIgJiYgdHlwZW9mIHJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIoZmllbGRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZFByb3BzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmaWVsZFByb3BzKSwgeyBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIG1lcmdlZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEZyYWdtZW50LCBudWxsLCAuLi5jaGlsZHJlbi5tYXAoKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRQcm9wcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZmllbGRQcm9wcyksIHsga2V5OiBjaGlsZC5rZXkgfHwgaW5kZXgsIG9uQ2hhbmdlOiBoYW5kbGVNZXJnZUNoYW5nZSwgb25CbHVyOiBoYW5kbGVNZXJnZUJsdXIgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCBtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgICAgRmllbGRDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgRmllbGQoJHtuYW1lfSlgO1xuICAgICAgICByZXR1cm4gRmllbGRDb21wb25lbnQ7XG4gICAgfSwgW1xuICAgICAgICBmb3JtQ29yZSxcbiAgICAgICAgYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgdmFsaWRhdGVUcmlnZ2VyLFxuICAgICAgICBoYW5kbGVGaWVsZEJsdXIsXG4gICAgXSk7XG4gICAgY29uc3QgZm9ybUluc3RhbmNlID0gdXNlTWVtbygoKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmb3JtQ29yZS5mb3JtSW5zdGFuY2UpLCB7IHZhbGlkYXRlRmllbGRzOiB2YWxpZGF0ZUZpZWxkc0FzeW5jLCBzZXRGaWVsZFZhbHVlOiBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLCBnZXRGaWVsZEVycm9yOiAobmFtZSkgPT4gZm9ybUNvcmUuZXJyb3JzW25hbWVdLCBnZXRGaWVsZHNFcnJvcjogKG5hbWVMaXN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIW5hbWVMaXN0KVxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtQ29yZS5lcnJvcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgICAgIG5hbWVMaXN0LmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUNvcmUuZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IGZvcm1Db3JlLmVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sIGlzRmllbGRUb3VjaGVkOiAobmFtZSkgPT4gYWxsVG91Y2hlZFtuYW1lXSB8fCBmYWxzZSwgaXNGaWVsZHNUb3VjaGVkOiAobmFtZUxpc3QsIGFsbEZpZWxkc1RvdWNoZWQgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFuYW1lTGlzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhbGxUb3VjaGVkKS5zb21lKChrZXkpID0+IGFsbFRvdWNoZWRba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxsRmllbGRzVG91Y2hlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5ldmVyeSgobmFtZSkgPT4gYWxsVG91Y2hlZFtuYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmFtZUxpc3Quc29tZSgobmFtZSkgPT4gYWxsVG91Y2hlZFtuYW1lXSk7XG4gICAgICAgIH0sIGlzRmllbGRWYWxpZGF0aW5nOiAobmFtZSkgPT4gdmFsaWRhdGluZ1tuYW1lXSB8fCBmYWxzZSwgc2V0RmllbGRFcnJvcjogZm9ybUNvcmUuc2V0RmllbGRFcnJvciwgc2V0RmllbGRzRXJyb3I6IChmaWVsZHNFcnJvcikgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3IpLmZvckVhY2goKFtuYW1lLCBlcnJvcl0pID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBzZXRGaWVsZFRvdWNoZWQ6IChuYW1lLCBpc1RvdWNoZWQgPSB0cnVlKSA9PiB7XG4gICAgICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogaXNUb3VjaGVkIH0pKSk7XG4gICAgICAgIH0sIHNldEZpZWxkc1RvdWNoZWQ6IChmaWVsZHNUb3VjaCkgPT4ge1xuICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgZmllbGRzVG91Y2gpKSk7XG4gICAgICAgIH0sIHJlc2V0RmllbGRzOiAoZmllbGRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWZpZWxkcykge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnJlc2V0RmllbGRzKCk7XG4gICAgICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKHt9KTtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZGF0aW5nKHt9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc2V0VmFsdWVzID0ge307XG4gICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2ZpZWxkXSA9IGluaXRpYWxWYWx1ZXNbZmllbGRdO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkc1ZhbHVlKHJlc2V0VmFsdWVzKTtcbiAgICAgICAgICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VG91Y2hlZCA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdUb3VjaGVkW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdUb3VjaGVkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHNldFZhbGlkYXRpbmcoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWxpZGF0aW5nO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKGZpZWxkLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgc3VibWl0OiAoY2FsbGJhY2spID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRWYWx1ZXMgPSB5aWVsZCB2YWxpZGF0ZUZpZWxkc0FzeW5jKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGNhbGxiYWNrKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSwgZGVmaW5lRmllbGQsIHJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQsIHVucmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkIH0pKSwgW1xuICAgICAgICBmb3JtQ29yZSxcbiAgICAgICAgYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZHNBc3luYyxcbiAgICAgICAgZGVmaW5lRmllbGQsXG4gICAgICAgIGluaXRpYWxWYWx1ZXMsXG4gICAgICAgIHNldFZhbGlkYXRpbmcsXG4gICAgXSk7XG4gICAgcmV0dXJuIFtmb3JtSW5zdGFuY2VdO1xufTtcbmV4cG9ydCBkZWZhdWx0IHVzZUZvcm07Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|
|
686
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtLnRzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfaG9va3MiLCJfdXNlRm9ybUNvcmUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsImFkb3B0IiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJwIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwicmVzb2x2ZVZhbHVlIiwidmFsdWVzIiwiaW5jbHVkZXMiLCJrZXlzIiwic3BsaXQiLCJjdXJyZW50IiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJrZXkiLCJ1bmRlZmluZWQiLCJfdHlwZW9mMiIsImVyciIsInVzZUZvcm0iLCJleHBvcnRzIiwiY29uZmlnIiwiYXJndW1lbnRzIiwib25GaW5pc2giLCJvbkZpbmlzaEZhaWxlZCIsIm9uUmVzZXQiLCJfY29uZmlnJHZhbGlkYXRlVHJpZ2ciLCJ2YWxpZGF0ZVRyaWdnZXIiLCJmb3JtQ29yZSIsInVzZUZvcm1Db3JlIiwiX3VzZVNhZmVTdGF0ZSIsInVzZVNhZmVTdGF0ZSIsIl91c2VTYWZlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwidmFsaWRhdGluZyIsInNldFZhbGlkYXRpbmciLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJleHRyYVRvdWNoZWQiLCJzZXRFeHRyYVRvdWNoZWQiLCJhbGxUb3VjaGVkIiwidXNlTWVtbyIsImFzc2lnbiIsInRvdWNoZWQiLCJ2YWxpZGF0ZUZpZWxkQXN5bmMiLCJ1c2VNZW1vaXplZEZuIiwicnVsZXMiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJydWxlIiwiZXJyb3IiLCJfZXJyb3IiLCJfZXJyb3IyIiwiX2Vycm9yMyIsIl9lcnJvcjQiLCJfZXJyb3I1IiwiZW1haWxQYXR0ZXJuIiwiX2Vycm9yNiIsIl9lcnJvcjciLCJfZXJyb3I4IiwiZXJyb3JNZXNzYWdlIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwiYWJydXB0IiwiaXNWYWxpZCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJyZXF1aXJlZCIsIm1lc3NhZ2UiLCJjb25jYXQiLCJzZXRGaWVsZEVycm9yIiwibWluIiwibWF4IiwicGF0dGVybiIsImpvaW4iLCJ0eXBlIiwiaXNOYU4iLCJTdHJpbmciLCJVUkwiLCJ0MCIsInZhbGlkYXRvciIsInNlbnQiLCJ0MSIsIkVycm9yIiwidDIiLCJmaW5pc2giLCJlcnJvcnMiLCJuZXdWYWxpZGF0aW5nIiwic3RvcCIsImhhbmRsZUZpZWxkQmx1ciIsInVzZUV2ZW50Q2FsbGJhY2siLCJfY2FsbGVlMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImZpZWxkUnVsZXMiLCJ2YWxpZGF0ZUZpZWxkc0FzeW5jIiwibmFtZUxpc3QiLCJfY2FsbGVlNCIsImZpZWxkc1RvVmFsaWRhdGUiLCJoYXNFcnJvciIsImZpZWxkRXJyb3JzIiwidmFsaWRhdGlvblByb21pc2VzIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwibWFwIiwiX2NhbGxlZTMiLCJfeWllbGQkdmFsaWRhdGVGaWVsZEEiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJhbGwiLCJyZWR1Y2UiLCJhY2MiLCJkZWZpbmVGaWVsZCIsInVzZUNhbGxiYWNrIiwiZmllbGRPcHRpb25zIiwiX2ZpZWxkT3B0aW9ucyRydWxlcyIsIkZpZWxkQ29tcG9uZW50IiwibWVtbyIsIl9hIiwiX2IiLCJjaGlsZHJlbiIsInJlbmRlciIsInByb3BzIiwiZmllbGRWYWx1ZSIsImZpZWxkRXJyb3IiLCJmaWVsZFRvdWNoZWQiLCJmaWVsZFZhbGlkYXRpbmciLCJ1c2VFZmZlY3QiLCJleGlzdGluZ1J1bGVzIiwiZ2V0RmllbGRSdWxlcyIsInJlZ2lzdGVyRmllbGQiLCJ1bnJlZ2lzdGVyRmllbGQiLCJoYW5kbGVGaWVsZENoYW5nZSIsInNldEZpZWxkVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkIiwiaGFuZGxlQmx1ciIsImZpZWxkUHJvcHMiLCJvbkNoYW5nZSIsIm9uQmx1ciIsImhhbmRsZU1lcmdlQ2hhbmdlIiwidGFyZ2V0IiwiUmVhY3QiLCJpc1ZhbGlkRWxlbWVudCIsImhhbmRsZU1lcmdlQmx1ciIsIm1lcmdlZFByb3BzIiwiY2xvbmVFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsIkZyYWdtZW50IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImNoaWxkIiwiaW5kZXgiLCJkaXNwbGF5TmFtZSIsImhhbmRsZVN1Ym1pdCIsIl9jYWxsZWU1IiwidmFsaWRhdGVkVmFsdWVzIiwidHlwZWQiLCJfY2FsbGVlNSQiLCJfY29udGV4dDUiLCJwcmV2ZW50RGVmYXVsdCIsImhhbmRsZVJlc2V0IiwicmVzZXRGaWVsZHMiLCJmb3JtSW5zdGFuY2UiLCJ2YWxpZGF0ZUZpZWxkcyIsImdldEZpZWxkRXJyb3IiLCJnZXRGaWVsZHNFcnJvciIsImZvckVhY2giLCJpc0ZpZWxkVG91Y2hlZCIsImlzRmllbGRzVG91Y2hlZCIsImFsbEZpZWxkc1RvdWNoZWQiLCJzb21lIiwiZXZlcnkiLCJpc0ZpZWxkVmFsaWRhdGluZyIsInNldEZpZWxkc0Vycm9yIiwiZmllbGRzRXJyb3IiLCJlbnRyaWVzIiwiX3JlZiIsIl9yZWYyIiwic2V0RmllbGRUb3VjaGVkIiwiaXNUb3VjaGVkIiwic2V0RmllbGRzVG91Y2hlZCIsImZpZWxkc1RvdWNoIiwiZmllbGRzIiwicmVzZXRWYWx1ZXMiLCJmaWVsZCIsImluaXRpYWxWYWx1ZXMiLCJzZXRGaWVsZHNWYWx1ZSIsIm5ld1RvdWNoZWQiLCJzdWJtaXQiLCJjYWxsYmFjayIsIl9jYWxsZWU2IiwiX2NhbGxlZTYkIiwiX2NvbnRleHQ2IiwiaW50ZXJuYWxzIiwiX2RlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFGLE9BQUE7QUFBNEMsU0FBQUcseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFMLHdCQUFBSyxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENB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QVksRUFDWk8sV0FBVyxDQUNaLENBQ0Y7RUFFRCxPQUFPO0lBQUVFLFlBQVksRUFBWkEsWUFBWTtJQUFFK0IsU0FBUyxFQUFUQTtFQUFTLENBQUU7QUFDcEMsQ0FBQztBQUFDLElBQUFDLFFBQUEsR0FBQWxMLE9BQUEsY0FFYUQsT0FBTyIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCBtZW1vLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VFdmVudENhbGxiYWNrLCB1c2VNZW1vaXplZEZuLCB1c2VTYWZlU3RhdGUgfSBmcm9tICdAMW1vbmV5L2hvb2tzJztcbmltcG9ydCB7IHVzZUZvcm1Db3JlIH0gZnJvbSAnLi91c2VGb3JtQ29yZSc7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhlbHBlcnMg4oCTIHJlc29sdmUgbmVzdGVkIHBhdGhzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHJlc29sdmVWYWx1ZSh2YWx1ZXMsIG5hbWUpIHtcbiAgICBpZiAoIW5hbWUuaW5jbHVkZXMoJy4nKSlcbiAgICAgICAgcmV0dXJuIHZhbHVlc1tuYW1lXTtcbiAgICBjb25zdCBrZXlzID0gbmFtZS5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyZW50ID0gdmFsdWVzO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0JylcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleV07XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xufVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB1c2VGb3JtXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBjb25zdCB1c2VGb3JtID0gKGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBvbkZpbmlzaCwgb25GaW5pc2hGYWlsZWQsIG9uUmVzZXQsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIH0gPSBjb25maWc7XG4gICAgY29uc3QgZm9ybUNvcmUgPSB1c2VGb3JtQ29yZShjb25maWcpO1xuICAgIGNvbnN0IFt2YWxpZGF0aW5nLCBzZXRWYWxpZGF0aW5nXSA9IHVzZVNhZmVTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2V4dHJhVG91Y2hlZCwgc2V0RXh0cmFUb3VjaGVkXSA9IHVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBhbGxUb3VjaGVkID0gdXNlTWVtbygoKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmb3JtQ29yZS50b3VjaGVkKSwgZXh0cmFUb3VjaGVkKSksIFtmb3JtQ29yZS50b3VjaGVkLCBleHRyYVRvdWNoZWRdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBc3luYyBmaWVsZCB2YWxpZGF0aW9uIOKAkyBlYWNoIHJ1bGUgaXMgcHJvY2Vzc2VkIGV4YWN0bHkgb25jZVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHZhbGlkYXRlRmllbGRBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlLCBydWxlcykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghcnVsZXMgfHwgcnVsZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgc2V0VmFsaWRhdGluZygocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgICAgICAgICAgICAvLyByZXF1aXJlZFxuICAgICAgICAgICAgICAgIGlmIChydWxlLnJlcXVpcmVkICYmXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gaXMgcmVxdWlyZWRgO1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG1pblxuICAgICAgICAgICAgICAgIGlmIChydWxlLm1pbiAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA8IHJ1bGUubWluKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYXQgbGVhc3QgJHtydWxlLm1pbn0gY2hhcmFjdGVyc2A7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbWF4XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUubWF4ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gcnVsZS5tYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBubyBtb3JlIHRoYW4gJHtydWxlLm1heH0gY2hhcmFjdGVyc2A7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcGF0dGVyblxuICAgICAgICAgICAgICAgIGlmIChydWxlLnBhdHRlcm4gJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhcnVsZS5wYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IGZvcm1hdCBpcyBpbnZhbGlkYDtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlbnVtXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUuZW51bSAmJiBBcnJheS5pc0FycmF5KHJ1bGUuZW51bSkgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFydWxlLmVudW0uaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIG9uZSBvZiAke3J1bGUuZW51bS5qb2luKCcsICcpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHR5cGUgY2hlY2tzXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGEgbnVtYmVyYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gJ2VtYWlsJyAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbWFpbFBhdHRlcm4gPSAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbWFpbFBhdHRlcm4udGVzdChTdHJpbmcodmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhIHZhbGlkIGVtYWlsYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gJ3VybCcgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVUkwoU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGEgdmFsaWQgVVJMYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY3VzdG9tIHZhbGlkYXRvciAoc3luYyBvciBhc3luYykg4oCUIGV4ZWN1dGVkIGV4YWN0bHkgb25jZVxuICAgICAgICAgICAgICAgIGlmIChydWxlLnZhbGlkYXRvciAmJiB0eXBlb2YgcnVsZS52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIFByb21pc2UucmVzb2x2ZShydWxlLnZhbGlkYXRvcih2YWx1ZSwgZm9ybUNvcmUudmFsdWVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyA/IHJlc3VsdCA6ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdWYWxpZGF0aW9uIGVycm9yJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcjogZXJyb3JNZXNzYWdlIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybUNvcmUuZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWxpZGF0aW5nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgYmx1ciBoYW5kbGVyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlRmllbGRCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZmllbGRSdWxlc1tuYW1lXTtcbiAgICAgICAgaWYgKHJ1bGVzICYmIHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQmx1cicpIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUoZm9ybUNvcmUudmFsdWVzLCBuYW1lKSwgcnVsZXMpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFZhbGlkYXRlIGFsbCBmaWVsZHMgYXN5bmNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkc0FzeW5jID0gdXNlTWVtb2l6ZWRGbigobmFtZUxpc3QpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBmaWVsZHNUb1ZhbGlkYXRlID0gbmFtZUxpc3QgfHwgT2JqZWN0LmtleXMoZm9ybUNvcmUuZmllbGRSdWxlcyk7XG4gICAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHt9O1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uUHJvbWlzZXMgPSBmaWVsZHNUb1ZhbGlkYXRlLm1hcCgobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmZpZWxkUnVsZXNbbmFtZV07XG4gICAgICAgICAgICBpZiAocnVsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGlzVmFsaWQsIGVycm9yIH0gPSB5aWVsZCB2YWxpZGF0ZUZpZWxkQXN5bmMobmFtZSwgcmVzb2x2ZVZhbHVlKGZvcm1Db3JlLnZhbHVlcywgbmFtZSksIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tuYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICB5aWVsZCBQcm9taXNlLmFsbCh2YWxpZGF0aW9uUHJvbWlzZXMpO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdWYWxpZGF0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgICAgZXJyb3IudmFsdWVzID0gZm9ybUNvcmUudmFsdWVzO1xuICAgICAgICAgICAgZXJyb3IuZXJyb3JzID0gZmllbGRFcnJvcnM7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5yZWR1Y2UoKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1tuYW1lXSA9IHJlc29sdmVWYWx1ZShmb3JtQ29yZS52YWx1ZXMsIG5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1Db3JlLnZhbHVlcztcbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZGVmaW5lRmllbGQg4oCTIHVzZWQgYnkgc3RhbmRhbG9uZSAobm9uLVByb0Zvcm0pIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGRlZmluZUZpZWxkID0gdXNlQ2FsbGJhY2soKG5hbWUsIGZpZWxkT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcnVsZXMgPSBbXSB9ID0gZmllbGRPcHRpb25zO1xuICAgICAgICBjb25zdCBGaWVsZENvbXBvbmVudCA9IG1lbW8oKF9hKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2I7XG4gICAgICAgICAgICB2YXIgeyBjaGlsZHJlbiwgcmVuZGVyIH0gPSBfYSwgcHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNoaWxkcmVuXCIsIFwicmVuZGVyXCJdKTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSAoX2IgPSBmb3JtQ29yZS52YWx1ZXNbbmFtZV0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xuICAgICAgICAgICAgY29uc3QgZmllbGRFcnJvciA9IGZvcm1Db3JlLmVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVG91Y2hlZCA9IGFsbFRvdWNoZWRbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbGlkYXRpbmcgPSB2YWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1J1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nUnVsZXMgJiYgcnVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkKG5hbWUsIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkKG5hbWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LCBbXSk7IC8vIE9ubHkgcmVnaXN0ZXIgb24gbW91bnRcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUZpZWxkQ2hhbmdlID0gdXNlRXZlbnRDYWxsYmFjaygodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVUcmlnZ2VyID09PSAnb25DaGFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnZhbGlkYXRlRmllbGQobmFtZSwgcnVsZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZEJsdXIobmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUHJvcHMgPSBPYmplY3QuYXNzaWduKHsgbmFtZSwgdmFsdWU6IGZpZWxkVmFsdWUsIGVycm9yOiBmaWVsZEVycm9yLCB0b3VjaGVkOiBmaWVsZFRvdWNoZWQsIHZhbGlkYXRpbmc6IGZpZWxkVmFsaWRhdGluZywgb25DaGFuZ2U6IGhhbmRsZUZpZWxkQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZUJsdXIgfSwgcHJvcHMpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VDaGFuZ2UgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICd0YXJnZXQnIGluIGVcbiAgICAgICAgICAgICAgICAgICAgPyBlLnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGU7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25DaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VCbHVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBoYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkJsdXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmVuZGVyICYmIHR5cGVvZiByZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRQcm9wcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZmllbGRQcm9wcyksIHsgb25DaGFuZ2U6IGhhbmRsZU1lcmdlQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU1lcmdlQmx1ciB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLi4uY2hpbGRyZW4ubWFwKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkUHJvcHMpLCB7IGtleTogY2hpbGQua2V5IHx8IGluZGV4LCBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIEZpZWxkQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gYEZpZWxkKCR7bmFtZX0pYDtcbiAgICAgICAgcmV0dXJuIEZpZWxkQ29tcG9uZW50O1xuICAgIH0sIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICAgICAgaGFuZGxlRmllbGRCbHVyLFxuICAgIF0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIGhhbmRsZVN1Ym1pdCAvIGhhbmRsZVJlc2V0IOKAkyBmb3IgPGZvcm0+IGV2ZW50IGhhbmRsZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgb25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc3QgdHlwZWQgPSBlcnI7XG4gICAgICAgICAgICBvbkZpbmlzaEZhaWxlZCA9PT0gbnVsbCB8fCBvbkZpbmlzaEZhaWxlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2hGYWlsZWQoeyB2YWx1ZXM6IHR5cGVkLnZhbHVlcywgZXJyb3JzOiB0eXBlZC5lcnJvcnMgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICBzZXRFeHRyYVRvdWNoZWQoe30pO1xuICAgICAgICBzZXRWYWxpZGF0aW5nKHt9KTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gRm9ybUluc3RhbmNlIOKAkyBlbmhhbmNlZCBBUEkgZm9yIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUuZm9ybUluc3RhbmNlKSwgeyB2YWxpZGF0ZUZpZWxkczogdmFsaWRhdGVGaWVsZHNBc3luYywgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSwgZ2V0RmllbGRFcnJvcjogKG5hbWUpID0+IGZvcm1Db3JlLmVycm9yc1tuYW1lXSwgZ2V0RmllbGRzRXJyb3I6IChuYW1lTGlzdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFuYW1lTGlzdClcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybUNvcmUuZXJyb3JzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgICAgICBuYW1lTGlzdC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBmb3JtQ29yZS5lcnJvcnNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCBpc0ZpZWxkVG91Y2hlZDogKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0gfHwgZmFsc2UsIGlzRmllbGRzVG91Y2hlZDogKG5hbWVMaXN0LCBhbGxGaWVsZHNUb3VjaGVkID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghbmFtZUxpc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYWxsVG91Y2hlZCkuc29tZSgoa2V5KSA9PiBhbGxUb3VjaGVkW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbEZpZWxkc1RvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QuZXZlcnkoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnNvbWUoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICB9LCBpc0ZpZWxkVmFsaWRhdGluZzogKG5hbWUpID0+IHZhbGlkYXRpbmdbbmFtZV0gfHwgZmFsc2UsIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsIHNldEZpZWxkc0Vycm9yOiAoZmllbGRzRXJyb3IpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkc0Vycm9yKS5mb3JFYWNoKChbbmFtZSwgZXJyb3JdKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgc2V0RmllbGRUb3VjaGVkOiAobmFtZSwgaXNUb3VjaGVkID0gdHJ1ZSkgPT4ge1xuICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IGlzVG91Y2hlZCB9KSkpO1xuICAgICAgICB9LCBzZXRGaWVsZHNUb3VjaGVkOiAoZmllbGRzVG91Y2gpID0+IHtcbiAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIGZpZWxkc1RvdWNoKSkpO1xuICAgICAgICB9LCByZXNldEZpZWxkczogKGZpZWxkcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCh7fSk7XG4gICAgICAgICAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNldFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2ZpZWxkXSA9ICgoX2EgPSBjb25maWcuaW5pdGlhbFZhbHVlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZHNWYWx1ZShyZXNldFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RvdWNoZWQgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VG91Y2hlZFtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VG91Y2hlZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihmaWVsZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHN1Ym1pdDogKGNhbGxiYWNrKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBjYWxsYmFjayh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIGRlZmluZUZpZWxkLCByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLCB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCB9KSksIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzQXN5bmMsXG4gICAgICAgIGRlZmluZUZpZWxkLFxuICAgICAgICBjb25maWcuaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgc2V0VmFsaWRhdGluZyxcbiAgICBdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBJbnRlcm5hbHMg4oCTIGV4cG9zZWQgZm9yIFByb0Zvcm0gaW50ZWdyYXRpb25cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHZhbHVlczogZm9ybUNvcmUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgdG91Y2hlZDogYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgZmllbGRSdWxlczogZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcjogZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgdmFsaWRhdGVGaWVsZDogZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICB9KSwgW1xuICAgICAgICBmb3JtQ29yZS52YWx1ZXMsXG4gICAgICAgIGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgZm9ybUluc3RhbmNlLCBpbnRlcm5hbHMgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtOyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
|