@1money/component-ui 0.0.70 → 0.0.71
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/business/Dialog/VerificationDialog/hooks/useOtpVerification.js +3 -2
- package/es/business/Dialog/VerificationDialog/hooks/useResendCountdown.js +2 -2
- package/es/business/Select/Network/NetworkSelect.js +2 -2
- package/es/components/Accordion/Accordion.js +3 -2
- package/es/components/Calendar/Calendar.js +3 -2
- package/es/components/Carousel/Carousel.js +3 -2
- package/es/components/Checkbox/BaseCheckbox.js +3 -2
- package/es/components/Checkbox/Checkbox.js +2 -2
- package/es/components/Checkbox/CheckboxGroup.js +3 -2
- package/es/components/CoachMark/CoachMark.js +3 -2
- package/es/components/Copy/Copy.js +2 -2
- package/es/components/Dialog/Dialog.js +2 -2
- package/es/components/Drawer/Drawer.js +2 -2
- package/es/components/Input/Amount/Amount.js +2 -2
- package/es/components/Input/Input/Input.js +3 -2
- package/es/components/Input/Mask/Mask.js +3 -2
- package/es/components/Input/OTP/OTP.js +3 -2
- package/es/components/Input/Password/Password.js +3 -2
- package/es/components/Input/Search/Search.js +3 -2
- package/es/components/Input/TextArea/TextArea.js +3 -2
- package/es/components/Input/Trade/Trade.js +2 -2
- package/es/components/Input/useAmountInput.js +4 -2
- package/es/components/Input/useSyncRef.js +2 -2
- package/es/components/Navigation/Nav.js +2 -2
- package/es/components/Navigation/Navigation.js +5 -2
- package/es/components/Pagination/Pagination.js +2 -2
- package/es/components/Pagination/usePagination.js +3 -2
- package/es/components/Popconfirm/Popconfirm.js +2 -2
- package/es/components/Portal/Portal.js +2 -2
- package/es/components/ProForm/ProForm.js +6 -3
- package/es/components/ProForm/ProFormGroup.js +2 -2
- package/es/components/ProForm/ProFormList.js +3 -2
- package/es/components/ProForm/Submitter.js +2 -2
- package/es/components/ProForm/core/constants.d.ts +6 -0
- package/es/components/ProForm/core/constants.js +7 -1
- package/es/components/ProForm/core/hooks/useForm.js +25 -195
- package/es/components/ProForm/core/hooks/useFormCore.js +14 -142
- package/es/components/ProForm/core/pathUtils.d.ts +6 -0
- package/es/components/ProForm/core/pathUtils.js +59 -0
- package/es/components/ProForm/core/runRules.d.ts +13 -0
- package/es/components/ProForm/core/runRules.js +186 -0
- package/es/components/ProForm/core/useFormItem.js +10 -28
- package/es/components/ProForm/fields/createProFormField.js +43 -57
- package/es/components/ProForm/hooks/useFieldRequest.js +7 -5
- package/es/components/ProForm/layouts/QueryFilter.js +3 -2
- package/es/components/ProForm/layouts/useOverlayForm.js +23 -21
- package/es/components/ProForm/utils.d.ts +2 -2
- package/es/components/ProForm/utils.js +5 -51
- package/es/components/ProTable/ProTable.js +3 -2
- package/es/components/ProTable/core/useAwaitableReload.js +3 -2
- package/es/components/ProTable/useFetchData.js +4 -2
- package/es/components/Radio/Radio.js +3 -2
- package/es/components/Radio/RadioGroup.js +3 -2
- package/es/components/ResizeObserver/useResizeObserver.js +2 -2
- package/es/components/Segment/Segment.js +4 -2
- package/es/components/Select/Select.js +3 -2
- package/es/components/Select/SelectCustom.js +2 -2
- package/es/components/Select/useSelectShell.js +3 -2
- package/es/components/Slider/Slider.js +3 -2
- package/es/components/Switch/Switch.js +3 -2
- package/es/components/Table/Table.js +14 -28
- package/es/components/Table/VirtualTable.js +18 -28
- package/es/components/Table/core/columnUtil.d.ts +9 -0
- package/es/components/Table/core/columnUtil.js +34 -0
- package/es/components/Table/core/useTableColumns.d.ts +4 -13
- package/es/components/Table/core/useTableColumns.js +55 -24
- package/es/components/Table/core/useTableDataPipeline.d.ts +11 -16
- package/es/components/Table/core/useTableDataPipeline.js +66 -73
- package/es/components/Table/core/useTableExpand.js +3 -2
- package/es/components/Table/core/useTableSelection.js +7 -4
- package/es/components/Table/core/useTableSetup.js +4 -2
- package/es/components/Table/features/ExpandTrigger.d.ts +9 -3
- package/es/components/Table/features/ExpandTrigger.js +14 -8
- package/es/components/Table/features/FilterTrigger.js +21 -17
- package/es/components/Table/features/SelectionColumn.d.ts +11 -6
- package/es/components/Table/features/SelectionColumn.js +12 -5
- package/es/components/Table/features/SortTrigger.d.ts +4 -2
- package/es/components/Table/features/SortTrigger.js +8 -3
- package/es/components/Table/internal/kernel/Body/MeasureCell.js +2 -2
- package/es/components/Table/internal/kernel/Cell/index.js +2 -2
- package/es/components/Table/internal/kernel/Table.js +3 -3
- package/es/components/Table/internal/kernel/VirtualTable/index.js +2 -2
- package/es/components/Table/internal/kernel/hooks/useRowInfo.js +2 -2
- package/es/components/Table/internal/kernel/selector-context/context.js +3 -3
- package/es/components/Table/renderers/HeaderCell.js +3 -2
- package/es/components/Table/renderers/TableShell.d.ts +13 -0
- package/es/components/Table/renderers/TableShell.js +25 -0
- package/es/components/Table/style/Table.css +3 -0
- package/es/components/Tabs/Tabs.js +4 -2
- package/es/components/Tooltip/Tooltip.js +3 -2
- package/es/components/Tour/Tour.js +3 -2
- package/es/components/Trigger/Trigger.js +3 -2
- package/es/components/Typography/Typography.js +2 -2
- package/es/components/Typography/useTypographyEnhancements.js +3 -2
- package/es/components/Upload/Upload.js +2 -2
- package/es/components/Upload/UploadFileBar.js +2 -2
- package/es/components/VirtualList/VirtualList.js +3 -2
- package/es/components/VirtualList/hooks/useMobileTouchMove.js +2 -2
- package/es/components/VirtualList/hooks/useScrollTo.js +2 -2
- package/es/index.css +1 -1
- package/lib/business/Dialog/VerificationDialog/hooks/useOtpVerification.js +9 -8
- package/lib/business/Dialog/VerificationDialog/hooks/useResendCountdown.js +3 -3
- package/lib/business/Select/Network/NetworkSelect.js +3 -3
- package/lib/components/Accordion/Accordion.js +5 -4
- package/lib/components/Calendar/Calendar.js +6 -5
- package/lib/components/Carousel/Carousel.js +5 -4
- package/lib/components/Checkbox/BaseCheckbox.js +5 -4
- package/lib/components/Checkbox/Checkbox.js +3 -3
- package/lib/components/Checkbox/CheckboxGroup.js +7 -6
- package/lib/components/CoachMark/CoachMark.js +7 -6
- package/lib/components/Copy/Copy.js +3 -3
- package/lib/components/Dialog/Dialog.js +6 -6
- package/lib/components/Drawer/Drawer.js +10 -10
- package/lib/components/Input/Amount/Amount.js +6 -5
- package/lib/components/Input/Input/Input.js +7 -6
- package/lib/components/Input/Mask/Mask.js +9 -8
- package/lib/components/Input/OTP/OTP.js +9 -8
- package/lib/components/Input/Password/Password.js +6 -5
- package/lib/components/Input/Search/Search.js +8 -7
- package/lib/components/Input/TextArea/TextArea.js +5 -4
- package/lib/components/Input/Trade/Trade.js +5 -4
- package/lib/components/Input/useAmountInput.js +13 -11
- package/lib/components/Input/useSyncRef.js +4 -3
- package/lib/components/Navigation/Nav.js +3 -3
- package/lib/components/Navigation/Navigation.js +10 -7
- package/lib/components/Pagination/Pagination.js +4 -3
- package/lib/components/Pagination/usePagination.js +7 -6
- package/lib/components/Popconfirm/Popconfirm.js +3 -3
- package/lib/components/Portal/Portal.js +4 -4
- package/lib/components/ProForm/ProForm.js +14 -11
- package/lib/components/ProForm/ProFormGroup.js +3 -3
- package/lib/components/ProForm/ProFormList.js +10 -9
- package/lib/components/ProForm/Submitter.js +4 -4
- package/lib/components/ProForm/core/constants.d.ts +6 -0
- package/lib/components/ProForm/core/constants.js +8 -2
- package/lib/components/ProForm/core/hooks/useForm.js +36 -206
- package/lib/components/ProForm/core/hooks/useFormCore.js +32 -160
- package/lib/components/ProForm/core/pathUtils.d.ts +6 -0
- package/lib/components/ProForm/core/pathUtils.js +68 -0
- package/lib/components/ProForm/core/runRules.d.ts +13 -0
- package/lib/components/ProForm/core/runRules.js +194 -0
- package/lib/components/ProForm/core/useFormItem.js +15 -33
- package/lib/components/ProForm/fields/createProFormField.js +42 -56
- package/lib/components/ProForm/hooks/useFieldRequest.js +9 -7
- package/lib/components/ProForm/layouts/QueryFilter.js +8 -7
- package/lib/components/ProForm/layouts/useOverlayForm.js +27 -27
- package/lib/components/ProForm/utils.d.ts +2 -2
- package/lib/components/ProForm/utils.js +20 -55
- package/lib/components/ProTable/ProTable.js +10 -9
- package/lib/components/ProTable/core/useAwaitableReload.js +6 -5
- package/lib/components/ProTable/useFetchData.js +15 -13
- package/lib/components/Radio/Radio.js +6 -5
- package/lib/components/Radio/RadioGroup.js +5 -4
- package/lib/components/ResizeObserver/useResizeObserver.js +4 -3
- package/lib/components/Segment/Segment.js +7 -5
- package/lib/components/Select/Select.js +23 -22
- package/lib/components/Select/SelectCustom.js +8 -8
- package/lib/components/Select/useSelectShell.js +5 -4
- package/lib/components/Slider/Slider.js +6 -5
- package/lib/components/Switch/Switch.js +5 -4
- package/lib/components/Table/Table.js +13 -27
- package/lib/components/Table/VirtualTable.js +17 -27
- package/lib/components/Table/core/columnUtil.d.ts +9 -0
- package/lib/components/Table/core/columnUtil.js +42 -0
- package/lib/components/Table/core/useTableColumns.d.ts +4 -13
- package/lib/components/Table/core/useTableColumns.js +57 -26
- package/lib/components/Table/core/useTableDataPipeline.d.ts +11 -16
- package/lib/components/Table/core/useTableDataPipeline.js +73 -80
- package/lib/components/Table/core/useTableExpand.js +6 -5
- package/lib/components/Table/core/useTableSelection.js +13 -10
- package/lib/components/Table/core/useTableSetup.js +8 -5
- package/lib/components/Table/features/ExpandTrigger.d.ts +9 -3
- package/lib/components/Table/features/ExpandTrigger.js +14 -8
- package/lib/components/Table/features/FilterTrigger.js +21 -17
- package/lib/components/Table/features/SelectionColumn.d.ts +11 -6
- package/lib/components/Table/features/SelectionColumn.js +12 -5
- package/lib/components/Table/features/SortTrigger.d.ts +4 -2
- package/lib/components/Table/features/SortTrigger.js +8 -3
- package/lib/components/Table/internal/kernel/Body/MeasureCell.js +3 -3
- package/lib/components/Table/internal/kernel/Cell/index.js +4 -4
- package/lib/components/Table/internal/kernel/Table.js +7 -6
- package/lib/components/Table/internal/kernel/VirtualTable/index.js +4 -4
- package/lib/components/Table/internal/kernel/hooks/useRowInfo.js +3 -3
- package/lib/components/Table/internal/kernel/selector-context/context.js +6 -5
- package/lib/components/Table/renderers/HeaderCell.js +3 -2
- package/lib/components/Table/renderers/TableShell.d.ts +13 -0
- package/lib/components/Table/renderers/TableShell.js +31 -0
- package/lib/components/Table/style/Table.css +3 -0
- package/lib/components/Tabs/Tabs.js +7 -5
- package/lib/components/Tooltip/Tooltip.js +5 -4
- package/lib/components/Tour/Tour.js +7 -6
- package/lib/components/Trigger/Trigger.js +5 -4
- package/lib/components/Typography/Typography.js +5 -4
- package/lib/components/Typography/useTypographyEnhancements.js +8 -7
- package/lib/components/Upload/Upload.js +5 -4
- package/lib/components/Upload/UploadFileBar.js +4 -3
- package/lib/components/VirtualList/VirtualList.js +8 -7
- package/lib/components/VirtualList/hooks/useMobileTouchMove.js +4 -3
- package/lib/components/VirtualList/hooks/useScrollTo.js +3 -3
- package/lib/index.css +1 -1
- package/package.json +2 -2
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
2
|
+
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
2
3
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
3
4
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
4
|
-
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
5
5
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
6
|
-
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
7
|
-
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
8
|
-
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
9
6
|
var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
|
|
10
7
|
function adopt(value) {
|
|
11
8
|
return value instanceof P ? value : new P(function (resolve) {
|
|
@@ -43,30 +40,12 @@ var __rest = this && this.__rest || function (s, e) {
|
|
|
43
40
|
};
|
|
44
41
|
import { useState, useMemo, useCallback, useEffect, memo, Fragment } from 'react';
|
|
45
42
|
import React from 'react';
|
|
46
|
-
import
|
|
43
|
+
import useEventCallback from '@1money/hooks/useEventCallback';
|
|
44
|
+
import useMemoizedFn from '@1money/hooks/useMemoizedFn';
|
|
45
|
+
import useSafeState from '@1money/hooks/useSafeState';
|
|
47
46
|
import { useFormCore } from './useFormCore';
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
// ---------------------------------------------------------------------------
|
|
51
|
-
function resolveValue(values, name) {
|
|
52
|
-
if (!name.includes('.')) return values[name];
|
|
53
|
-
var keys = name.split('.');
|
|
54
|
-
var current = values;
|
|
55
|
-
var _iterator = _createForOfIteratorHelper(keys),
|
|
56
|
-
_step;
|
|
57
|
-
try {
|
|
58
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
59
|
-
var key = _step.value;
|
|
60
|
-
if (current === null || current === undefined || _typeof(current) !== 'object') return undefined;
|
|
61
|
-
current = current[key];
|
|
62
|
-
}
|
|
63
|
-
} catch (err) {
|
|
64
|
-
_iterator.e(err);
|
|
65
|
-
} finally {
|
|
66
|
-
_iterator.f();
|
|
67
|
-
}
|
|
68
|
-
return current;
|
|
69
|
-
}
|
|
47
|
+
import { resolveValue } from '../pathUtils';
|
|
48
|
+
import { runRulesAsync } from '../runRules';
|
|
70
49
|
// ---------------------------------------------------------------------------
|
|
71
50
|
// useForm
|
|
72
51
|
// ---------------------------------------------------------------------------
|
|
@@ -94,7 +73,7 @@ export var useForm = function useForm() {
|
|
|
94
73
|
// ---------------------------------------------------------------------------
|
|
95
74
|
var validateFieldAsync = useMemoizedFn(function (name, value, rules) {
|
|
96
75
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
97
|
-
var
|
|
76
|
+
var error;
|
|
98
77
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
99
78
|
while (1) switch (_context.prev = _context.next) {
|
|
100
79
|
case 0:
|
|
@@ -111,169 +90,20 @@ export var useForm = function useForm() {
|
|
|
111
90
|
return Object.assign(Object.assign({}, prev), _defineProperty({}, name, true));
|
|
112
91
|
});
|
|
113
92
|
_context.prev = 2;
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
if ((
|
|
119
|
-
_context.next =
|
|
120
|
-
break;
|
|
121
|
-
}
|
|
122
|
-
rule = _step2.value;
|
|
123
|
-
if (!(rule.required && (value === undefined || value === null || value === ''))) {
|
|
124
|
-
_context.next = 5;
|
|
93
|
+
_context.next = 3;
|
|
94
|
+
return runRulesAsync(name, value, formCore.values, rules);
|
|
95
|
+
case 3:
|
|
96
|
+
error = _context.sent;
|
|
97
|
+
if (!(error !== null)) {
|
|
98
|
+
_context.next = 4;
|
|
125
99
|
break;
|
|
126
100
|
}
|
|
127
|
-
error = rule.message || "".concat(name, " is required");
|
|
128
101
|
formCore.setFieldError(name, error);
|
|
129
102
|
return _context.abrupt("return", {
|
|
130
103
|
isValid: false,
|
|
131
104
|
error: error
|
|
132
105
|
});
|
|
133
|
-
case
|
|
134
|
-
if (!(rule.min && typeof value === 'string' && value.length < rule.min)) {
|
|
135
|
-
_context.next = 6;
|
|
136
|
-
break;
|
|
137
|
-
}
|
|
138
|
-
_error = rule.message || "".concat(name, " must be at least ").concat(rule.min, " characters");
|
|
139
|
-
formCore.setFieldError(name, _error);
|
|
140
|
-
return _context.abrupt("return", {
|
|
141
|
-
isValid: false,
|
|
142
|
-
error: _error
|
|
143
|
-
});
|
|
144
|
-
case 6:
|
|
145
|
-
if (!(rule.max && typeof value === 'string' && value.length > rule.max)) {
|
|
146
|
-
_context.next = 7;
|
|
147
|
-
break;
|
|
148
|
-
}
|
|
149
|
-
_error2 = rule.message || "".concat(name, " must be no more than ").concat(rule.max, " characters");
|
|
150
|
-
formCore.setFieldError(name, _error2);
|
|
151
|
-
return _context.abrupt("return", {
|
|
152
|
-
isValid: false,
|
|
153
|
-
error: _error2
|
|
154
|
-
});
|
|
155
|
-
case 7:
|
|
156
|
-
if (!(rule.pattern && typeof value === 'string' && !rule.pattern.test(value))) {
|
|
157
|
-
_context.next = 8;
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
_error3 = rule.message || "".concat(name, " format is invalid");
|
|
161
|
-
formCore.setFieldError(name, _error3);
|
|
162
|
-
return _context.abrupt("return", {
|
|
163
|
-
isValid: false,
|
|
164
|
-
error: _error3
|
|
165
|
-
});
|
|
166
|
-
case 8:
|
|
167
|
-
if (!(rule["enum"] && Array.isArray(rule["enum"]) && value)) {
|
|
168
|
-
_context.next = 9;
|
|
169
|
-
break;
|
|
170
|
-
}
|
|
171
|
-
if (rule["enum"].includes(value)) {
|
|
172
|
-
_context.next = 9;
|
|
173
|
-
break;
|
|
174
|
-
}
|
|
175
|
-
_error4 = rule.message || "".concat(name, " must be one of ").concat(rule["enum"].join(', '));
|
|
176
|
-
formCore.setFieldError(name, _error4);
|
|
177
|
-
return _context.abrupt("return", {
|
|
178
|
-
isValid: false,
|
|
179
|
-
error: _error4
|
|
180
|
-
});
|
|
181
|
-
case 9:
|
|
182
|
-
if (!(rule.type === 'number' && value !== undefined && value !== null && value !== '')) {
|
|
183
|
-
_context.next = 10;
|
|
184
|
-
break;
|
|
185
|
-
}
|
|
186
|
-
if (!(typeof value !== 'number' || isNaN(value))) {
|
|
187
|
-
_context.next = 10;
|
|
188
|
-
break;
|
|
189
|
-
}
|
|
190
|
-
_error5 = rule.message || "".concat(name, " must be a number");
|
|
191
|
-
formCore.setFieldError(name, _error5);
|
|
192
|
-
return _context.abrupt("return", {
|
|
193
|
-
isValid: false,
|
|
194
|
-
error: _error5
|
|
195
|
-
});
|
|
196
|
-
case 10:
|
|
197
|
-
if (!(rule.type === 'email' && value)) {
|
|
198
|
-
_context.next = 11;
|
|
199
|
-
break;
|
|
200
|
-
}
|
|
201
|
-
emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
202
|
-
if (emailPattern.test(String(value))) {
|
|
203
|
-
_context.next = 11;
|
|
204
|
-
break;
|
|
205
|
-
}
|
|
206
|
-
_error6 = rule.message || "".concat(name, " must be a valid email");
|
|
207
|
-
formCore.setFieldError(name, _error6);
|
|
208
|
-
return _context.abrupt("return", {
|
|
209
|
-
isValid: false,
|
|
210
|
-
error: _error6
|
|
211
|
-
});
|
|
212
|
-
case 11:
|
|
213
|
-
if (!(rule.type === 'url' && value)) {
|
|
214
|
-
_context.next = 14;
|
|
215
|
-
break;
|
|
216
|
-
}
|
|
217
|
-
_context.prev = 12;
|
|
218
|
-
new URL(String(value));
|
|
219
|
-
_context.next = 14;
|
|
220
|
-
break;
|
|
221
|
-
case 13:
|
|
222
|
-
_context.prev = 13;
|
|
223
|
-
_t = _context["catch"](12);
|
|
224
|
-
_error7 = rule.message || "".concat(name, " must be a valid URL");
|
|
225
|
-
formCore.setFieldError(name, _error7);
|
|
226
|
-
return _context.abrupt("return", {
|
|
227
|
-
isValid: false,
|
|
228
|
-
error: _error7
|
|
229
|
-
});
|
|
230
|
-
case 14:
|
|
231
|
-
if (!(rule.validator && typeof rule.validator === 'function')) {
|
|
232
|
-
_context.next = 19;
|
|
233
|
-
break;
|
|
234
|
-
}
|
|
235
|
-
_context.prev = 15;
|
|
236
|
-
_context.next = 16;
|
|
237
|
-
return Promise.resolve(rule.validator(value, formCore.values));
|
|
238
|
-
case 16:
|
|
239
|
-
result = _context.sent;
|
|
240
|
-
if (!(result !== true && result !== undefined)) {
|
|
241
|
-
_context.next = 17;
|
|
242
|
-
break;
|
|
243
|
-
}
|
|
244
|
-
_error8 = typeof result === 'string' ? result : 'Validation failed';
|
|
245
|
-
formCore.setFieldError(name, _error8);
|
|
246
|
-
return _context.abrupt("return", {
|
|
247
|
-
isValid: false,
|
|
248
|
-
error: _error8
|
|
249
|
-
});
|
|
250
|
-
case 17:
|
|
251
|
-
_context.next = 19;
|
|
252
|
-
break;
|
|
253
|
-
case 18:
|
|
254
|
-
_context.prev = 18;
|
|
255
|
-
_t2 = _context["catch"](15);
|
|
256
|
-
errorMessage = _t2 instanceof Error ? _t2.message : 'Validation error';
|
|
257
|
-
formCore.setFieldError(name, errorMessage);
|
|
258
|
-
return _context.abrupt("return", {
|
|
259
|
-
isValid: false,
|
|
260
|
-
error: errorMessage
|
|
261
|
-
});
|
|
262
|
-
case 19:
|
|
263
|
-
_context.next = 4;
|
|
264
|
-
break;
|
|
265
|
-
case 20:
|
|
266
|
-
_context.next = 22;
|
|
267
|
-
break;
|
|
268
|
-
case 21:
|
|
269
|
-
_context.prev = 21;
|
|
270
|
-
_t3 = _context["catch"](3);
|
|
271
|
-
_iterator2.e(_t3);
|
|
272
|
-
case 22:
|
|
273
|
-
_context.prev = 22;
|
|
274
|
-
_iterator2.f();
|
|
275
|
-
return _context.finish(22);
|
|
276
|
-
case 23:
|
|
106
|
+
case 4:
|
|
277
107
|
if (formCore.errors[name]) {
|
|
278
108
|
formCore.setFieldError(name, null);
|
|
279
109
|
}
|
|
@@ -281,19 +111,19 @@ export var useForm = function useForm() {
|
|
|
281
111
|
isValid: true,
|
|
282
112
|
error: null
|
|
283
113
|
});
|
|
284
|
-
case
|
|
285
|
-
_context.prev =
|
|
114
|
+
case 5:
|
|
115
|
+
_context.prev = 5;
|
|
286
116
|
setValidating(function (prev) {
|
|
287
117
|
var newValidating = Object.assign({}, prev);
|
|
288
118
|
delete newValidating[name];
|
|
289
119
|
return newValidating;
|
|
290
120
|
});
|
|
291
|
-
return _context.finish(
|
|
292
|
-
case
|
|
121
|
+
return _context.finish(5);
|
|
122
|
+
case 6:
|
|
293
123
|
case "end":
|
|
294
124
|
return _context.stop();
|
|
295
125
|
}
|
|
296
|
-
}, _callee, null, [[2,,
|
|
126
|
+
}, _callee, null, [[2,, 5, 6]]);
|
|
297
127
|
}));
|
|
298
128
|
});
|
|
299
129
|
// ---------------------------------------------------------------------------
|
|
@@ -485,7 +315,7 @@ export var useForm = function useForm() {
|
|
|
485
315
|
// ---------------------------------------------------------------------------
|
|
486
316
|
var handleSubmit = useEventCallback(function (e) {
|
|
487
317
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
|
|
488
|
-
var validatedValues, typed,
|
|
318
|
+
var validatedValues, typed, _t;
|
|
489
319
|
return _regeneratorRuntime.wrap(function (_context5) {
|
|
490
320
|
while (1) switch (_context5.prev = _context5.next) {
|
|
491
321
|
case 0:
|
|
@@ -500,8 +330,8 @@ export var useForm = function useForm() {
|
|
|
500
330
|
break;
|
|
501
331
|
case 3:
|
|
502
332
|
_context5.prev = 3;
|
|
503
|
-
|
|
504
|
-
typed =
|
|
333
|
+
_t = _context5["catch"](1);
|
|
334
|
+
typed = _t;
|
|
505
335
|
onFinishFailed === null || onFinishFailed === void 0 ? void 0 : onFinishFailed({
|
|
506
336
|
values: typed.values,
|
|
507
337
|
errors: typed.errors
|
|
@@ -615,7 +445,7 @@ export var useForm = function useForm() {
|
|
|
615
445
|
},
|
|
616
446
|
submit: function submit(callback) {
|
|
617
447
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
|
|
618
|
-
var validatedValues,
|
|
448
|
+
var validatedValues, _t2;
|
|
619
449
|
return _regeneratorRuntime.wrap(function (_context6) {
|
|
620
450
|
while (1) switch (_context6.prev = _context6.next) {
|
|
621
451
|
case 0:
|
|
@@ -634,7 +464,7 @@ export var useForm = function useForm() {
|
|
|
634
464
|
return _context6.abrupt("return", validatedValues);
|
|
635
465
|
case 3:
|
|
636
466
|
_context6.prev = 3;
|
|
637
|
-
|
|
467
|
+
_t2 = _context6["catch"](0);
|
|
638
468
|
return _context6.abrupt("return", undefined);
|
|
639
469
|
case 4:
|
|
640
470
|
case "end":
|
|
@@ -674,4 +504,4 @@ export var useForm = function useForm() {
|
|
|
674
504
|
};
|
|
675
505
|
};
|
|
676
506
|
export default useForm;
|
|
677
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJzIiwidCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaSIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlU3RhdGUiLCJ1c2VNZW1vIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJtZW1vIiwiRnJhZ21lbnQiLCJSZWFjdCIsInVzZUV2ZW50Q2FsbGJhY2siLCJ1c2VNZW1vaXplZEZuIiwidXNlU2FmZVN0YXRlIiwidXNlRm9ybUNvcmUiLCJyZXNvbHZlVmFsdWUiLCJ2YWx1ZXMiLCJuYW1lIiwiaW5jbHVkZXMiLCJrZXlzIiwic3BsaXQiLCJjdXJyZW50IiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsIm4iLCJrZXkiLCJ1bmRlZmluZWQiLCJfdHlwZW9mIiwiZXJyIiwiZiIsInVzZUZvcm0iLCJjb25maWciLCJhcmd1bWVudHMiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25SZXNldCIsIl9jb25maWckdmFsaWRhdGVUcmlnZyIsInZhbGlkYXRlVHJpZ2dlciIsImZvcm1Db3JlIiwiX3VzZVNhZmVTdGF0ZSIsIl91c2VTYWZlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJ2YWxpZGF0aW5nIiwic2V0VmFsaWRhdGluZyIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJleHRyYVRvdWNoZWQiLCJzZXRFeHRyYVRvdWNoZWQiLCJhbGxUb3VjaGVkIiwiYXNzaWduIiwidG91Y2hlZCIsInZhbGlkYXRlRmllbGRBc3luYyIsInJ1bGVzIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInJ1bGUiLCJlcnJvciIsIl9lcnJvciIsIl9lcnJvcjIiLCJfZXJyb3IzIiwiX2Vycm9yNCIsIl9lcnJvcjUiLCJlbWFpbFBhdHRlcm4iLCJfZXJyb3I2IiwiX2Vycm9yNyIsIl9lcnJvcjgiLCJlcnJvck1lc3NhZ2UiLCJfdCIsIl90MiIsIl90MyIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJhYnJ1cHQiLCJpc1ZhbGlkIiwiX2RlZmluZVByb3BlcnR5IiwicmVxdWlyZWQiLCJtZXNzYWdlIiwiY29uY2F0Iiwic2V0RmllbGRFcnJvciIsIm1pbiIsIm1heCIsInBhdHRlcm4iLCJ0ZXN0IiwiQXJyYXkiLCJpc0FycmF5Iiwiam9pbiIsInR5cGUiLCJpc05hTiIsIlN0cmluZyIsIlVSTCIsInZhbGlkYXRvciIsInNlbnQiLCJFcnJvciIsImZpbmlzaCIsImVycm9ycyIsIm5ld1ZhbGlkYXRpbmciLCJzdG9wIiwiaGFuZGxlRmllbGRCbHVyIiwiX2NhbGxlZTIiLCJfY29udGV4dDIiLCJmaWVsZFJ1bGVzIiwidmFsaWRhdGVGaWVsZHNBc3luYyIsIm5hbWVMaXN0IiwiX2NhbGxlZTQiLCJmaWVsZHNUb1ZhbGlkYXRlIiwiaGFzRXJyb3IiLCJmaWVsZEVycm9ycyIsInZhbGlkYXRpb25Qcm9taXNlcyIsIl9jb250ZXh0NCIsIm1hcCIsIl9jYWxsZWUzIiwiX3lpZWxkJHZhbGlkYXRlRmllbGRBIiwiX2NvbnRleHQzIiwiYWxsIiwicmVkdWNlIiwiYWNjIiwiZGVmaW5lRmllbGQiLCJmaWVsZE9wdGlvbnMiLCJfZmllbGRPcHRpb25zJHJ1bGVzIiwiRmllbGRDb21wb25lbnQiLCJfYSIsIl9iIiwiY2hpbGRyZW4iLCJyZW5kZXIiLCJwcm9wcyIsImZpZWxkVmFsdWUiLCJmaWVsZEVycm9yIiwiZmllbGRUb3VjaGVkIiwiZmllbGRWYWxpZGF0aW5nIiwiZXhpc3RpbmdSdWxlcyIsImdldEZpZWxkUnVsZXMiLCJyZWdpc3RlckZpZWxkIiwidW5yZWdpc3RlckZpZWxkIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJzZXRGaWVsZFZhbHVlIiwidmFsaWRhdGVGaWVsZCIsImhhbmRsZUJsdXIiLCJmaWVsZFByb3BzIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJoYW5kbGVNZXJnZUNoYW5nZSIsInRhcmdldCIsImlzVmFsaWRFbGVtZW50IiwiaGFuZGxlTWVyZ2VCbHVyIiwibWVyZ2VkUHJvcHMiLCJjbG9uZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiY2hpbGQiLCJpbmRleCIsImRpc3BsYXlOYW1lIiwiaGFuZGxlU3VibWl0IiwiX2NhbGxlZTUiLCJ2YWxpZGF0ZWRWYWx1ZXMiLCJ0eXBlZCIsIl90NCIsIl9jb250ZXh0NSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlUmVzZXQiLCJyZXNldEZpZWxkcyIsImZvcm1JbnN0YW5jZSIsInZhbGlkYXRlRmllbGRzIiwiZ2V0RmllbGRFcnJvciIsImdldEZpZWxkc0Vycm9yIiwiZm9yRWFjaCIsImlzRmllbGRUb3VjaGVkIiwiaXNGaWVsZHNUb3VjaGVkIiwiYWxsRmllbGRzVG91Y2hlZCIsInNvbWUiLCJldmVyeSIsImlzRmllbGRWYWxpZGF0aW5nIiwic2V0RmllbGRzRXJyb3IiLCJmaWVsZHNFcnJvciIsImVudHJpZXMiLCJfcmVmIiwiX3JlZjIiLCJzZXRGaWVsZFRvdWNoZWQiLCJpc1RvdWNoZWQiLCJzZXRGaWVsZHNUb3VjaGVkIiwiZmllbGRzVG91Y2giLCJmaWVsZHMiLCJyZXNldFZhbHVlcyIsImZpZWxkIiwiaW5pdGlhbFZhbHVlcyIsInNldEZpZWxkc1ZhbHVlIiwibmV3VG91Y2hlZCIsInN1Ym1pdCIsImNhbGxiYWNrIiwiX2NhbGxlZTYiLCJfdDUiLCJfY29udGV4dDYiLCJpbnRlcm5hbHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBSUEsU0FBUyxHQUFJLElBQUksSUFBSSxJQUFJLENBQUNBLFNBQVMsSUFBSyxVQUFVQyxPQUFPLEVBQUVDLFVBQVUsRUFBRUMsQ0FBQyxFQUFFQyxTQUFTLEVBQUU7RUFDckYsU0FBU0MsS0FBS0EsQ0FBQ0MsS0FBSyxFQUFFO0lBQUUsT0FBT0EsS0FBSyxZQUFZSCxDQUFDLEdBQUdHLEtBQUssR0FBRyxJQUFJSCxDQUFDLENBQUMsVUFBVUksT0FBTyxFQUFFO01BQUVBLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDO0lBQUUsQ0FBQyxDQUFDO0VBQUU7RUFDM0csT0FBTyxLQUFLSCxDQUFDLEtBQUtBLENBQUMsR0FBR0ssT0FBTyxDQUFDLEVBQUUsVUFBVUQsT0FBTyxFQUFFRSxNQUFNLEVBQUU7SUFDdkQsU0FBU0MsU0FBU0EsQ0FBQ0osS0FBSyxFQUFFO01BQUUsSUFBSTtRQUFFSyxJQUFJLENBQUNQLFNBQVMsQ0FBQ1EsSUFBSSxDQUFDTixLQUFLLENBQUMsQ0FBQztNQUFFLENBQUMsQ0FBQyxPQUFPTyxDQUFDLEVBQUU7UUFBRUosTUFBTSxDQUFDSSxDQUFDLENBQUM7TUFBRTtJQUFFO0lBQzFGLFNBQVNDLFFBQVFBLENBQUNSLEtBQUssRUFBRTtNQUFFLElBQUk7UUFBRUssSUFBSSxDQUFDUCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUNFLEtBQUssQ0FBQyxDQUFDO01BQUUsQ0FBQyxDQUFDLE9BQU9PLENBQUMsRUFBRTtRQUFFSixNQUFNLENBQUNJLENBQUMsQ0FBQztNQUFFO0lBQUU7SUFDN0YsU0FBU0YsSUFBSUEsQ0FBQ0ksTUFBTSxFQUFFO01BQUVBLE1BQU0sQ0FBQ0MsSUFBSSxHQUFHVCxPQUFPLENBQUNRLE1BQU0sQ0FBQ1QsS0FBSyxDQUFDLEdBQUdELEtB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QixNQUFNO01BQ3ZCbUYsTUFBTSxFQUFFNUQsUUFBUSxDQUFDNEQsTUFBTTtNQUN2QmhELE9BQU8sRUFBRUYsVUFBVTtNQUNuQk4sVUFBVSxFQUFWQSxVQUFVO01BQ1Y4RCxVQUFVLEVBQUVsRSxRQUFRLENBQUNrRSxVQUFVO01BQy9Ca0MsYUFBYSxFQUFFcEcsUUFBUSxDQUFDb0csYUFBYTtNQUNyQ3hELGFBQWEsRUFBRTVDLFFBQVEsQ0FBQzRDLGFBQWE7TUFDckN5RCxhQUFhLEVBQUVyRyxRQUFRLENBQUNxRyxhQUFhO01BQ3JDeEYsa0JBQWtCLEVBQWxCQSxrQkFBa0I7TUFDbEJvRixhQUFhLEVBQUVqRyxRQUFRLENBQUNpRyxhQUFhO01BQ3JDQyxlQUFlLEVBQUVsRyxRQUFRLENBQUNrRyxlQUFlO01BQ3pDbUIsWUFBWSxFQUFaQSxZQUFZO01BQ1pPLFdBQVcsRUFBWEE7SURuSEYsQ0NvSEM7RUFBQSxDQUFDLEVBQ0YsQ0FDRTVILFFBQVEsQ0FBQ3ZCLE1BQU0sRUFDZnVCLFFBQVEsQ0FBQzRELE1BQU0sRUFDZmxELFVBQVUsRUFDVk4sVUFBVSxFQUNWSixRQUFRLENBQUNrRSxVQUFVLEVBQ25CbEUsUUFBUSxDQUFDb0csYUFBYSxFQUN0QnBHLFFBQVEsQ0FBQzRDLGFBQWEsRUFDdEI1QyxRQUFRLENBQUNxRyxhQUFhLEVBQ3RCeEYsa0JBQWtCLEVBQ2xCYixRQUFRLENBQUNpRyxhQUFhLEVBQ3RCakcsUUFBUSxDQUFDa0csZUFBZSxFQUN4Qm1CLFlBQVksRUFDWk8sV0FBVyxDQUNaLENBQ0Y7RUFFRCxPQUFPO0lBQUVFLFlBQVksRUFBWkEsWUFBWTtJQUFFK0IsU0FBUyxFQUFUQTtFQUFTLENBQUU7QUFDcEMsQ0FBQztBQUVELGVBQWVySyxPQUFPIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCBtZW1vLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VFdmVudENhbGxiYWNrLCB1c2VNZW1vaXplZEZuLCB1c2VTYWZlU3RhdGUgfSBmcm9tICdAMW1vbmV5L2hvb2tzJztcbmltcG9ydCB7IHVzZUZvcm1Db3JlIH0gZnJvbSAnLi91c2VGb3JtQ29yZSc7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhlbHBlcnMg4oCTIHJlc29sdmUgbmVzdGVkIHBhdGhzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHJlc29sdmVWYWx1ZSh2YWx1ZXMsIG5hbWUpIHtcbiAgICBpZiAoIW5hbWUuaW5jbHVkZXMoJy4nKSlcbiAgICAgICAgcmV0dXJuIHZhbHVlc1tuYW1lXTtcbiAgICBjb25zdCBrZXlzID0gbmFtZS5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyZW50ID0gdmFsdWVzO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0JylcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleV07XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xufVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB1c2VGb3JtXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBjb25zdCB1c2VGb3JtID0gKGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBvbkZpbmlzaCwgb25GaW5pc2hGYWlsZWQsIG9uUmVzZXQsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIH0gPSBjb25maWc7XG4gICAgY29uc3QgZm9ybUNvcmUgPSB1c2VGb3JtQ29yZShjb25maWcpO1xuICAgIGNvbnN0IFt2YWxpZGF0aW5nLCBzZXRWYWxpZGF0aW5nXSA9IHVzZVNhZmVTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2V4dHJhVG91Y2hlZCwgc2V0RXh0cmFUb3VjaGVkXSA9IHVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBhbGxUb3VjaGVkID0gdXNlTWVtbygoKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmb3JtQ29yZS50b3VjaGVkKSwgZXh0cmFUb3VjaGVkKSksIFtmb3JtQ29yZS50b3VjaGVkLCBleHRyYVRvdWNoZWRdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBc3luYyBmaWVsZCB2YWxpZGF0aW9uIOKAkyBlYWNoIHJ1bGUgaXMgcHJvY2Vzc2VkIGV4YWN0bHkgb25jZVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHZhbGlkYXRlRmllbGRBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlLCBydWxlcykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghcnVsZXMgfHwgcnVsZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgc2V0VmFsaWRhdGluZygocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgICAgICAgICAgICAvLyByZXF1aXJlZFxuICAgICAgICAgICAgICAgIGlmIChydWxlLnJlcXVpcmVkICYmXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gaXMgcmVxdWlyZWRgO1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG1pblxuICAgICAgICAgICAgICAgIGlmIChydWxlLm1pbiAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA8IHJ1bGUubWluKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYXQgbGVhc3QgJHtydWxlLm1pbn0gY2hhcmFjdGVyc2A7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbWF4XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUubWF4ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gcnVsZS5tYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBubyBtb3JlIHRoYW4gJHtydWxlLm1heH0gY2hhcmFjdGVyc2A7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBmYWxzZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcGF0dGVyblxuICAgICAgICAgICAgICAgIGlmIChydWxlLnBhdHRlcm4gJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhcnVsZS5wYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IGZvcm1hdCBpcyBpbnZhbGlkYDtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlbnVtXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUuZW51bSAmJiBBcnJheS5pc0FycmF5KHJ1bGUuZW51bSkgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFydWxlLmVudW0uaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIG9uZSBvZiAke3J1bGUuZW51bS5qb2luKCcsICcpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHR5cGUgY2hlY2tzXG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGEgbnVtYmVyYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gJ2VtYWlsJyAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbWFpbFBhdHRlcm4gPSAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbWFpbFBhdHRlcm4udGVzdChTdHJpbmcodmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhIHZhbGlkIGVtYWlsYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gJ3VybCcgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVUkwoU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGEgdmFsaWQgVVJMYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY3VzdG9tIHZhbGlkYXRvciAoc3luYyBvciBhc3luYykg4oCUIGV4ZWN1dGVkIGV4YWN0bHkgb25jZVxuICAgICAgICAgICAgICAgIGlmIChydWxlLnZhbGlkYXRvciAmJiB0eXBlb2YgcnVsZS52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIFByb21pc2UucmVzb2x2ZShydWxlLnZhbGlkYXRvcih2YWx1ZSwgZm9ybUNvcmUudmFsdWVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyA/IHJlc3VsdCA6ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdWYWxpZGF0aW9uIGVycm9yJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcjogZXJyb3JNZXNzYWdlIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybUNvcmUuZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWxpZGF0aW5nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgYmx1ciBoYW5kbGVyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlRmllbGRCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZmllbGRSdWxlc1tuYW1lXTtcbiAgICAgICAgaWYgKHJ1bGVzICYmIHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQmx1cicpIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUoZm9ybUNvcmUudmFsdWVzLCBuYW1lKSwgcnVsZXMpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFZhbGlkYXRlIGFsbCBmaWVsZHMgYXN5bmNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkc0FzeW5jID0gdXNlTWVtb2l6ZWRGbigobmFtZUxpc3QpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBmaWVsZHNUb1ZhbGlkYXRlID0gbmFtZUxpc3QgfHwgT2JqZWN0LmtleXMoZm9ybUNvcmUuZmllbGRSdWxlcyk7XG4gICAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHt9O1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uUHJvbWlzZXMgPSBmaWVsZHNUb1ZhbGlkYXRlLm1hcCgobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmZpZWxkUnVsZXNbbmFtZV07XG4gICAgICAgICAgICBpZiAocnVsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGlzVmFsaWQsIGVycm9yIH0gPSB5aWVsZCB2YWxpZGF0ZUZpZWxkQXN5bmMobmFtZSwgcmVzb2x2ZVZhbHVlKGZvcm1Db3JlLnZhbHVlcywgbmFtZSksIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tuYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICB5aWVsZCBQcm9taXNlLmFsbCh2YWxpZGF0aW9uUHJvbWlzZXMpO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdWYWxpZGF0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgICAgZXJyb3IudmFsdWVzID0gZm9ybUNvcmUudmFsdWVzO1xuICAgICAgICAgICAgZXJyb3IuZXJyb3JzID0gZmllbGRFcnJvcnM7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5yZWR1Y2UoKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1tuYW1lXSA9IHJlc29sdmVWYWx1ZShmb3JtQ29yZS52YWx1ZXMsIG5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1Db3JlLnZhbHVlcztcbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZGVmaW5lRmllbGQg4oCTIHVzZWQgYnkgc3RhbmRhbG9uZSAobm9uLVByb0Zvcm0pIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGRlZmluZUZpZWxkID0gdXNlQ2FsbGJhY2soKG5hbWUsIGZpZWxkT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcnVsZXMgPSBbXSB9ID0gZmllbGRPcHRpb25zO1xuICAgICAgICBjb25zdCBGaWVsZENvbXBvbmVudCA9IG1lbW8oKF9hKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2I7XG4gICAgICAgICAgICB2YXIgeyBjaGlsZHJlbiwgcmVuZGVyIH0gPSBfYSwgcHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNoaWxkcmVuXCIsIFwicmVuZGVyXCJdKTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSAoX2IgPSBmb3JtQ29yZS52YWx1ZXNbbmFtZV0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xuICAgICAgICAgICAgY29uc3QgZmllbGRFcnJvciA9IGZvcm1Db3JlLmVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVG91Y2hlZCA9IGFsbFRvdWNoZWRbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbGlkYXRpbmcgPSB2YWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1J1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nUnVsZXMgJiYgcnVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkKG5hbWUsIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkKG5hbWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LCBbXSk7IC8vIE9ubHkgcmVnaXN0ZXIgb24gbW91bnRcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUZpZWxkQ2hhbmdlID0gdXNlRXZlbnRDYWxsYmFjaygodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVUcmlnZ2VyID09PSAnb25DaGFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnZhbGlkYXRlRmllbGQobmFtZSwgcnVsZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZEJsdXIobmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUHJvcHMgPSBPYmplY3QuYXNzaWduKHsgbmFtZSwgdmFsdWU6IGZpZWxkVmFsdWUsIGVycm9yOiBmaWVsZEVycm9yLCB0b3VjaGVkOiBmaWVsZFRvdWNoZWQsIHZhbGlkYXRpbmc6IGZpZWxkVmFsaWRhdGluZywgb25DaGFuZ2U6IGhhbmRsZUZpZWxkQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZUJsdXIgfSwgcHJvcHMpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VDaGFuZ2UgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICd0YXJnZXQnIGluIGVcbiAgICAgICAgICAgICAgICAgICAgPyBlLnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGU7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25DaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VCbHVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBoYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkJsdXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmVuZGVyICYmIHR5cGVvZiByZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRQcm9wcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZmllbGRQcm9wcyksIHsgb25DaGFuZ2U6IGhhbmRsZU1lcmdlQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU1lcmdlQmx1ciB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLi4uY2hpbGRyZW4ubWFwKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkUHJvcHMpLCB7IGtleTogY2hpbGQua2V5IHx8IGluZGV4LCBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIEZpZWxkQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gYEZpZWxkKCR7bmFtZX0pYDtcbiAgICAgICAgcmV0dXJuIEZpZWxkQ29tcG9uZW50O1xuICAgIH0sIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICAgICAgaGFuZGxlRmllbGRCbHVyLFxuICAgIF0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIGhhbmRsZVN1Ym1pdCAvIGhhbmRsZVJlc2V0IOKAkyBmb3IgPGZvcm0+IGV2ZW50IGhhbmRsZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgb25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc3QgdHlwZWQgPSBlcnI7XG4gICAgICAgICAgICBvbkZpbmlzaEZhaWxlZCA9PT0gbnVsbCB8fCBvbkZpbmlzaEZhaWxlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2hGYWlsZWQoeyB2YWx1ZXM6IHR5cGVkLnZhbHVlcywgZXJyb3JzOiB0eXBlZC5lcnJvcnMgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICBzZXRFeHRyYVRvdWNoZWQoe30pO1xuICAgICAgICBzZXRWYWxpZGF0aW5nKHt9KTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gRm9ybUluc3RhbmNlIOKAkyBlbmhhbmNlZCBBUEkgZm9yIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUuZm9ybUluc3RhbmNlKSwgeyB2YWxpZGF0ZUZpZWxkczogdmFsaWRhdGVGaWVsZHNBc3luYywgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSwgZ2V0RmllbGRFcnJvcjogKG5hbWUpID0+IGZvcm1Db3JlLmVycm9yc1tuYW1lXSwgZ2V0RmllbGRzRXJyb3I6IChuYW1lTGlzdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFuYW1lTGlzdClcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybUNvcmUuZXJyb3JzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgICAgICBuYW1lTGlzdC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBmb3JtQ29yZS5lcnJvcnNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCBpc0ZpZWxkVG91Y2hlZDogKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0gfHwgZmFsc2UsIGlzRmllbGRzVG91Y2hlZDogKG5hbWVMaXN0LCBhbGxGaWVsZHNUb3VjaGVkID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghbmFtZUxpc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYWxsVG91Y2hlZCkuc29tZSgoa2V5KSA9PiBhbGxUb3VjaGVkW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbEZpZWxkc1RvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QuZXZlcnkoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnNvbWUoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICB9LCBpc0ZpZWxkVmFsaWRhdGluZzogKG5hbWUpID0+IHZhbGlkYXRpbmdbbmFtZV0gfHwgZmFsc2UsIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsIHNldEZpZWxkc0Vycm9yOiAoZmllbGRzRXJyb3IpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkc0Vycm9yKS5mb3JFYWNoKChbbmFtZSwgZXJyb3JdKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgc2V0RmllbGRUb3VjaGVkOiAobmFtZSwgaXNUb3VjaGVkID0gdHJ1ZSkgPT4ge1xuICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IGlzVG91Y2hlZCB9KSkpO1xuICAgICAgICB9LCBzZXRGaWVsZHNUb3VjaGVkOiAoZmllbGRzVG91Y2gpID0+IHtcbiAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIGZpZWxkc1RvdWNoKSkpO1xuICAgICAgICB9LCByZXNldEZpZWxkczogKGZpZWxkcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCh7fSk7XG4gICAgICAgICAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNldFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2ZpZWxkXSA9ICgoX2EgPSBjb25maWcuaW5pdGlhbFZhbHVlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZHNWYWx1ZShyZXNldFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RvdWNoZWQgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VG91Y2hlZFtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VG91Y2hlZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihmaWVsZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHN1Ym1pdDogKGNhbGxiYWNrKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBjYWxsYmFjayh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIGRlZmluZUZpZWxkLCByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLCB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCB9KSksIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzQXN5bmMsXG4gICAgICAgIGRlZmluZUZpZWxkLFxuICAgICAgICBjb25maWcuaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgc2V0VmFsaWRhdGluZyxcbiAgICBdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBJbnRlcm5hbHMg4oCTIGV4cG9zZWQgZm9yIFByb0Zvcm0gaW50ZWdyYXRpb25cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHZhbHVlczogZm9ybUNvcmUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgdG91Y2hlZDogYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgZmllbGRSdWxlczogZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcjogZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgdmFsaWRhdGVGaWVsZDogZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICB9KSwgW1xuICAgICAgICBmb3JtQ29yZS52YWx1ZXMsXG4gICAgICAgIGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgZm9ybUluc3RhbmNlLCBpbnRlcm5hbHMgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|
|
507
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJzIiwidCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaSIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlU3RhdGUiLCJ1c2VNZW1vIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJtZW1vIiwiRnJhZ21lbnQiLCJSZWFjdCIsInVzZUV2ZW50Q2FsbGJhY2siLCJ1c2VNZW1vaXplZEZuIiwidXNlU2FmZVN0YXRlIiwidXNlRm9ybUNvcmUiLCJyZXNvbHZlVmFsdWUiLCJydW5SdWxlc0FzeW5jIiwidXNlRm9ybSIsImNvbmZpZyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIm9uRmluaXNoIiwib25GaW5pc2hGYWlsZWQiLCJvblJlc2V0IiwiX2NvbmZpZyR2YWxpZGF0ZVRyaWdnIiwidmFsaWRhdGVUcmlnZ2VyIiwiZm9ybUNvcmUiLCJfdXNlU2FmZVN0YXRlIiwiX3VzZVNhZmVTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInZhbGlkYXRpbmciLCJzZXRWYWxpZGF0aW5nIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImV4dHJhVG91Y2hlZCIsInNldEV4dHJhVG91Y2hlZCIsImFsbFRvdWNoZWQiLCJhc3NpZ24iLCJ0b3VjaGVkIiwidmFsaWRhdGVGaWVsZEFzeW5jIiwibmFtZSIsInJ1bGVzIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZXJyb3IiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwiYWJydXB0IiwiaXNWYWxpZCIsIl9kZWZpbmVQcm9wZXJ0eSIsInZhbHVlcyIsInNlbnQiLCJzZXRGaWVsZEVycm9yIiwiZXJyb3JzIiwibmV3VmFsaWRhdGluZyIsImZpbmlzaCIsInN0b3AiLCJoYW5kbGVGaWVsZEJsdXIiLCJfY2FsbGVlMiIsIl9jb250ZXh0MiIsImZpZWxkUnVsZXMiLCJ2YWxpZGF0ZUZpZWxkc0FzeW5jIiwibmFtZUxpc3QiLCJfY2FsbGVlNCIsImZpZWxkc1RvVmFsaWRhdGUiLCJoYXNFcnJvciIsImZpZWxkRXJyb3JzIiwidmFsaWRhdGlvblByb21pc2VzIiwiX2NvbnRleHQ0Iiwia2V5cyIsIm1hcCIsIl9jYWxsZWUzIiwiX3lpZWxkJHZhbGlkYXRlRmllbGRBIiwiX2NvbnRleHQzIiwiYWxsIiwiRXJyb3IiLCJyZWR1Y2UiLCJhY2MiLCJkZWZpbmVGaWVsZCIsImZpZWxkT3B0aW9ucyIsIl9maWVsZE9wdGlvbnMkcnVsZXMiLCJGaWVsZENvbXBvbmVudCIsIl9hIiwiX2IiLCJjaGlsZHJlbiIsInJlbmRlciIsInByb3BzIiwiZmllbGRWYWx1ZSIsImZpZWxkRXJyb3IiLCJmaWVsZFRvdWNoZWQiLCJmaWVsZFZhbGlkYXRpbmciLCJleGlzdGluZ1J1bGVzIiwiZ2V0RmllbGRSdWxlcyIsInJlZ2lzdGVyRmllbGQiLCJ1bnJlZ2lzdGVyRmllbGQiLCJoYW5kbGVGaWVsZENoYW5nZSIsInNldEZpZWxkVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkIiwiaGFuZGxlQmx1ciIsImZpZWxkUHJvcHMiLCJvbkNoYW5nZSIsIm9uQmx1ciIsImhhbmRsZU1lcmdlQ2hhbmdlIiwiX3R5cGVvZiIsInRhcmdldCIsImlzVmFsaWRFbGVtZW50IiwiaGFuZGxlTWVyZ2VCbHVyIiwibWVyZ2VkUHJvcHMiLCJjbG9uZUVsZW1lbnQiLCJBcnJheSIsImlzQXJyYXkiLCJjcmVhdGVFbGVtZW50IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiY2hpbGQiLCJpbmRleCIsImtleSIsImRpc3BsYXlOYW1lIiwiaGFuZGxlU3VibWl0IiwiX2NhbGxlZTUiLCJ2YWxpZGF0ZWRWYWx1ZXMiLCJ0eXBlZCIsIl90IiwiX2NvbnRleHQ1IiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVSZXNldCIsInJlc2V0RmllbGRzIiwiZm9ybUluc3RhbmNlIiwidmFsaWRhdGVGaWVsZHMiLCJnZXRGaWVsZEVycm9yIiwiZ2V0RmllbGRzRXJyb3IiLCJmb3JFYWNoIiwiaXNGaWVsZFRvdWNoZWQiLCJpc0ZpZWxkc1RvdWNoZWQiLCJhbGxGaWVsZHNUb3VjaGVkIiwic29tZSIsImV2ZXJ5IiwiaXNGaWVsZFZhbGlkYXRpbmciLCJzZXRGaWVsZHNFcnJvciIsImZpZWxkc0Vycm9yIiwiZW50cmllcyIsIl9yZWYiLCJfcmVmMiIsInNldEZpZWxkVG91Y2hlZCIsImlzVG91Y2hlZCIsInNldEZpZWxkc1RvdWNoZWQiLCJmaWVsZHNUb3VjaCIsImZpZWxkcyIsInJlc2V0VmFsdWVzIiwiZmllbGQiLCJpbml0aWFsVmFsdWVzIiwic2V0RmllbGRzVmFsdWUiLCJuZXdUb3VjaGVkIiwic3VibWl0IiwiY2FsbGJhY2siLCJfY2FsbGVlNiIsIl90MiIsIl9jb250ZXh0NiIsImludGVybmFscyJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFJQSxTQUFTLEdBQUksSUFBSSxJQUFJLElBQUksQ0FBQ0EsU0FBUyxJQUFLLFVBQVVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxDQUFDLEVBQUVDLFNBQVMsRUFBRTtFQUNyRixTQUFTQyxLQUFLQSxDQUFDQyxLQUFLLEVBQUU7SUFBRSxPQUFPQSxLQUFLLFlBQVlILENBQUMsR0FBR0csS0FBSyxHQUFHLElBQUlILENBQUMsQ0FBQyxVQUFVSSxPQUFPLEVBQUU7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SixPQUFPLENBQ3pDO0lBQUEsT0FBTztNQUNMK0MsTUFBTSxFQUFFMUIsUUFBUSxDQUFDMEIsTUFBTTtNQUN2QkcsTUFBTSxFQUFFN0IsUUFBUSxDQUFDNkIsTUFBTTtNQUN2QmpCLE9BQU8sRUFBRUYsVUFBVTtNQUNuQk4sVUFBVSxFQUFWQSxVQUFVO01BQ1ZnQyxVQUFVLEVBQUVwQyxRQUFRLENBQUNvQyxVQUFVO01BQy9Cb0MsYUFBYSxFQUFFeEUsUUFBUSxDQUFDd0UsYUFBYTtNQUNyQzVDLGFBQWEsRUFBRTVCLFFBQVEsQ0FBQzRCLGFBQWE7TUFDckM2QyxhQUFhLEVBQUV6RSxRQUFRLENBQUN5RSxhQUFhO01BQ3JDNUQsa0JBQWtCLEVBQWxCQSxrQkFBa0I7TUFDbEJ3RCxhQUFhLEVBQUVyRSxRQUFRLENBQUNxRSxhQUFhO01BQ3JDQyxlQUFlLEVBQUV0RSxRQUFRLENBQUNzRSxlQUFlO01BQ3pDd0IsWUFBWSxFQUFaQSxZQUFZO01BQ1pPLFdBQVcsRUFBWEE7SURyR0YsQ0NzR0M7RUFBQSxDQUFDLEVBQ0YsQ0FDRXJHLFFBQVEsQ0FBQzBCLE1BQU0sRUFDZjFCLFFBQVEsQ0FBQzZCLE1BQU0sRUFDZm5CLFVBQVUsRUFDVk4sVUFBVSxFQUNWSixRQUFRLENBQUNvQyxVQUFVLEVBQ25CcEMsUUFBUSxDQUFDd0UsYUFBYSxFQUN0QnhFLFFBQVEsQ0FBQzRCLGFBQWEsRUFDdEI1QixRQUFRLENBQUN5RSxhQUFhLEVBQ3RCNUQsa0JBQWtCLEVBQ2xCYixRQUFRLENBQUNxRSxhQUFhLEVBQ3RCckUsUUFBUSxDQUFDc0UsZUFBZSxFQUN4QndCLFlBQVksRUFDWk8sV0FBVyxDQUNaLENBQ0Y7RUFFRCxPQUFPO0lBQUVFLFlBQVksRUFBWkEsWUFBWTtJQUFFK0IsU0FBUyxFQUFUQTtFQUFTLENBQUU7QUFDcEMsQ0FBQztBQUVELGVBQWUvSSxPQUFPIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCBtZW1vLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnQDFtb25leS9ob29rcy91c2VNZW1vaXplZEZuJztcbmltcG9ydCB1c2VTYWZlU3RhdGUgZnJvbSAnQDFtb25leS9ob29rcy91c2VTYWZlU3RhdGUnO1xuaW1wb3J0IHsgdXNlRm9ybUNvcmUgfSBmcm9tICcuL3VzZUZvcm1Db3JlJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJy4uL3BhdGhVdGlscyc7XG5pbXBvcnQgeyBydW5SdWxlc0FzeW5jIH0gZnJvbSAnLi4vcnVuUnVsZXMnO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB1c2VGb3JtXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBjb25zdCB1c2VGb3JtID0gKGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBvbkZpbmlzaCwgb25GaW5pc2hGYWlsZWQsIG9uUmVzZXQsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIH0gPSBjb25maWc7XG4gICAgY29uc3QgZm9ybUNvcmUgPSB1c2VGb3JtQ29yZShjb25maWcpO1xuICAgIGNvbnN0IFt2YWxpZGF0aW5nLCBzZXRWYWxpZGF0aW5nXSA9IHVzZVNhZmVTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2V4dHJhVG91Y2hlZCwgc2V0RXh0cmFUb3VjaGVkXSA9IHVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBhbGxUb3VjaGVkID0gdXNlTWVtbygoKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmb3JtQ29yZS50b3VjaGVkKSwgZXh0cmFUb3VjaGVkKSksIFtmb3JtQ29yZS50b3VjaGVkLCBleHRyYVRvdWNoZWRdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBc3luYyBmaWVsZCB2YWxpZGF0aW9uIOKAkyBlYWNoIHJ1bGUgaXMgcHJvY2Vzc2VkIGV4YWN0bHkgb25jZVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHZhbGlkYXRlRmllbGRBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlLCBydWxlcykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghcnVsZXMgfHwgcnVsZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgc2V0VmFsaWRhdGluZygocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHlpZWxkIHJ1blJ1bGVzQXN5bmMobmFtZSwgdmFsdWUsIGZvcm1Db3JlLnZhbHVlcywgcnVsZXMpO1xuICAgICAgICAgICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybUNvcmUuZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWxpZGF0aW5nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgYmx1ciBoYW5kbGVyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlRmllbGRCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZmllbGRSdWxlc1tuYW1lXTtcbiAgICAgICAgaWYgKHJ1bGVzICYmIHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQmx1cicpIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUoZm9ybUNvcmUudmFsdWVzLCBuYW1lKSwgcnVsZXMpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFZhbGlkYXRlIGFsbCBmaWVsZHMgYXN5bmNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkc0FzeW5jID0gdXNlTWVtb2l6ZWRGbigobmFtZUxpc3QpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBmaWVsZHNUb1ZhbGlkYXRlID0gbmFtZUxpc3QgfHwgT2JqZWN0LmtleXMoZm9ybUNvcmUuZmllbGRSdWxlcyk7XG4gICAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHt9O1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uUHJvbWlzZXMgPSBmaWVsZHNUb1ZhbGlkYXRlLm1hcCgobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmZpZWxkUnVsZXNbbmFtZV07XG4gICAgICAgICAgICBpZiAocnVsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGlzVmFsaWQsIGVycm9yIH0gPSB5aWVsZCB2YWxpZGF0ZUZpZWxkQXN5bmMobmFtZSwgcmVzb2x2ZVZhbHVlKGZvcm1Db3JlLnZhbHVlcywgbmFtZSksIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tuYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICB5aWVsZCBQcm9taXNlLmFsbCh2YWxpZGF0aW9uUHJvbWlzZXMpO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdWYWxpZGF0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgICAgZXJyb3IudmFsdWVzID0gZm9ybUNvcmUudmFsdWVzO1xuICAgICAgICAgICAgZXJyb3IuZXJyb3JzID0gZmllbGRFcnJvcnM7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5yZWR1Y2UoKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1tuYW1lXSA9IHJlc29sdmVWYWx1ZShmb3JtQ29yZS52YWx1ZXMsIG5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1Db3JlLnZhbHVlcztcbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZGVmaW5lRmllbGQg4oCTIHVzZWQgYnkgc3RhbmRhbG9uZSAobm9uLVByb0Zvcm0pIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGRlZmluZUZpZWxkID0gdXNlQ2FsbGJhY2soKG5hbWUsIGZpZWxkT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcnVsZXMgPSBbXSB9ID0gZmllbGRPcHRpb25zO1xuICAgICAgICBjb25zdCBGaWVsZENvbXBvbmVudCA9IG1lbW8oKF9hKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2I7XG4gICAgICAgICAgICB2YXIgeyBjaGlsZHJlbiwgcmVuZGVyIH0gPSBfYSwgcHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNoaWxkcmVuXCIsIFwicmVuZGVyXCJdKTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSAoX2IgPSBmb3JtQ29yZS52YWx1ZXNbbmFtZV0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xuICAgICAgICAgICAgY29uc3QgZmllbGRFcnJvciA9IGZvcm1Db3JlLmVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVG91Y2hlZCA9IGFsbFRvdWNoZWRbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbGlkYXRpbmcgPSB2YWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1J1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nUnVsZXMgJiYgcnVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkKG5hbWUsIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkKG5hbWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LCBbXSk7IC8vIE9ubHkgcmVnaXN0ZXIgb24gbW91bnRcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUZpZWxkQ2hhbmdlID0gdXNlRXZlbnRDYWxsYmFjaygodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVUcmlnZ2VyID09PSAnb25DaGFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnZhbGlkYXRlRmllbGQobmFtZSwgcnVsZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZEJsdXIobmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUHJvcHMgPSBPYmplY3QuYXNzaWduKHsgbmFtZSwgdmFsdWU6IGZpZWxkVmFsdWUsIGVycm9yOiBmaWVsZEVycm9yLCB0b3VjaGVkOiBmaWVsZFRvdWNoZWQsIHZhbGlkYXRpbmc6IGZpZWxkVmFsaWRhdGluZywgb25DaGFuZ2U6IGhhbmRsZUZpZWxkQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZUJsdXIgfSwgcHJvcHMpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VDaGFuZ2UgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICd0YXJnZXQnIGluIGVcbiAgICAgICAgICAgICAgICAgICAgPyBlLnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGU7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25DaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VCbHVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBoYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkJsdXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmVuZGVyICYmIHR5cGVvZiByZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRQcm9wcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZmllbGRQcm9wcyksIHsgb25DaGFuZ2U6IGhhbmRsZU1lcmdlQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU1lcmdlQmx1ciB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLi4uY2hpbGRyZW4ubWFwKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkUHJvcHMpLCB7IGtleTogY2hpbGQua2V5IHx8IGluZGV4LCBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIEZpZWxkQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gYEZpZWxkKCR7bmFtZX0pYDtcbiAgICAgICAgcmV0dXJuIEZpZWxkQ29tcG9uZW50O1xuICAgIH0sIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICAgICAgaGFuZGxlRmllbGRCbHVyLFxuICAgIF0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIGhhbmRsZVN1Ym1pdCAvIGhhbmRsZVJlc2V0IOKAkyBmb3IgPGZvcm0+IGV2ZW50IGhhbmRsZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgb25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc3QgdHlwZWQgPSBlcnI7XG4gICAgICAgICAgICBvbkZpbmlzaEZhaWxlZCA9PT0gbnVsbCB8fCBvbkZpbmlzaEZhaWxlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2hGYWlsZWQoeyB2YWx1ZXM6IHR5cGVkLnZhbHVlcywgZXJyb3JzOiB0eXBlZC5lcnJvcnMgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICBzZXRFeHRyYVRvdWNoZWQoe30pO1xuICAgICAgICBzZXRWYWxpZGF0aW5nKHt9KTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gRm9ybUluc3RhbmNlIOKAkyBlbmhhbmNlZCBBUEkgZm9yIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUuZm9ybUluc3RhbmNlKSwgeyB2YWxpZGF0ZUZpZWxkczogdmFsaWRhdGVGaWVsZHNBc3luYywgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSwgZ2V0RmllbGRFcnJvcjogKG5hbWUpID0+IGZvcm1Db3JlLmVycm9yc1tuYW1lXSwgZ2V0RmllbGRzRXJyb3I6IChuYW1lTGlzdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFuYW1lTGlzdClcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybUNvcmUuZXJyb3JzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgICAgICBuYW1lTGlzdC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBmb3JtQ29yZS5lcnJvcnNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCBpc0ZpZWxkVG91Y2hlZDogKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0gfHwgZmFsc2UsIGlzRmllbGRzVG91Y2hlZDogKG5hbWVMaXN0LCBhbGxGaWVsZHNUb3VjaGVkID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghbmFtZUxpc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYWxsVG91Y2hlZCkuc29tZSgoa2V5KSA9PiBhbGxUb3VjaGVkW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbEZpZWxkc1RvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QuZXZlcnkoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnNvbWUoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICB9LCBpc0ZpZWxkVmFsaWRhdGluZzogKG5hbWUpID0+IHZhbGlkYXRpbmdbbmFtZV0gfHwgZmFsc2UsIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsIHNldEZpZWxkc0Vycm9yOiAoZmllbGRzRXJyb3IpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkc0Vycm9yKS5mb3JFYWNoKChbbmFtZSwgZXJyb3JdKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgc2V0RmllbGRUb3VjaGVkOiAobmFtZSwgaXNUb3VjaGVkID0gdHJ1ZSkgPT4ge1xuICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IGlzVG91Y2hlZCB9KSkpO1xuICAgICAgICB9LCBzZXRGaWVsZHNUb3VjaGVkOiAoZmllbGRzVG91Y2gpID0+IHtcbiAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIGZpZWxkc1RvdWNoKSkpO1xuICAgICAgICB9LCByZXNldEZpZWxkczogKGZpZWxkcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCh7fSk7XG4gICAgICAgICAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNldFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2ZpZWxkXSA9ICgoX2EgPSBjb25maWcuaW5pdGlhbFZhbHVlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZHNWYWx1ZShyZXNldFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RvdWNoZWQgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VG91Y2hlZFtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VG91Y2hlZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihmaWVsZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHN1Ym1pdDogKGNhbGxiYWNrKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBjYWxsYmFjayh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIGRlZmluZUZpZWxkLCByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLCB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCB9KSksIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzQXN5bmMsXG4gICAgICAgIGRlZmluZUZpZWxkLFxuICAgICAgICBjb25maWcuaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgc2V0VmFsaWRhdGluZyxcbiAgICBdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBJbnRlcm5hbHMg4oCTIGV4cG9zZWQgZm9yIFByb0Zvcm0gaW50ZWdyYXRpb25cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHZhbHVlczogZm9ybUNvcmUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgdG91Y2hlZDogYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgZmllbGRSdWxlczogZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcjogZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgdmFsaWRhdGVGaWVsZDogZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICB9KSwgW1xuICAgICAgICBmb3JtQ29yZS52YWx1ZXMsXG4gICAgICAgIGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgZm9ybUluc3RhbmNlLCBpbnRlcm5hbHMgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|