@1money/component-ui 0.0.68 → 0.0.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/components/ProForm/interface.d.ts +3 -1
- package/es/components/ProForm/layouts/QueryFilter.js +5 -1
- package/es/components/ProTable/ProTable.d.ts +5 -0
- package/es/components/ProTable/ProTable.js +309 -0
- package/es/components/ProTable/constants.d.ts +12 -0
- package/es/components/ProTable/constants.js +12 -0
- package/es/components/ProTable/core/genColumns.d.ts +10 -0
- package/es/components/ProTable/core/genColumns.js +81 -0
- package/es/components/ProTable/core/genSearchFields.d.ts +19 -0
- package/es/components/ProTable/core/genSearchFields.js +103 -0
- package/es/components/ProTable/core/useAwaitableReload.d.ts +17 -0
- package/es/components/ProTable/core/useAwaitableReload.js +39 -0
- package/es/components/ProTable/core/utils.d.ts +12 -0
- package/es/components/ProTable/core/utils.js +21 -0
- package/es/components/ProTable/index.d.ts +4 -0
- package/es/components/ProTable/index.js +5 -0
- package/es/components/ProTable/interface.d.ts +132 -0
- package/es/components/ProTable/interface.js +2 -0
- package/es/components/ProTable/style/ProTable.css +47 -0
- package/es/components/ProTable/style/css.js +6 -0
- package/es/components/ProTable/style/index.d.ts +5 -0
- package/es/components/ProTable/style/index.js +6 -0
- package/es/components/ProTable/useFetchData.d.ts +48 -0
- package/es/components/ProTable/useFetchData.js +270 -0
- package/es/index.css +1 -1
- package/es/index.d.ts +2 -0
- package/es/index.js +2 -1
- package/lib/components/ProForm/interface.d.ts +3 -1
- package/lib/components/ProForm/layouts/QueryFilter.js +5 -1
- package/lib/components/ProTable/ProTable.d.ts +5 -0
- package/lib/components/ProTable/ProTable.js +316 -0
- package/lib/components/ProTable/constants.d.ts +12 -0
- package/lib/components/ProTable/constants.js +18 -0
- package/lib/components/ProTable/core/genColumns.d.ts +10 -0
- package/lib/components/ProTable/core/genColumns.js +87 -0
- package/lib/components/ProTable/core/genSearchFields.d.ts +19 -0
- package/lib/components/ProTable/core/genSearchFields.js +111 -0
- package/lib/components/ProTable/core/useAwaitableReload.d.ts +17 -0
- package/lib/components/ProTable/core/useAwaitableReload.js +46 -0
- package/lib/components/ProTable/core/utils.d.ts +12 -0
- package/lib/components/ProTable/core/utils.js +28 -0
- package/lib/components/ProTable/index.d.ts +4 -0
- package/lib/components/ProTable/index.js +33 -0
- package/lib/components/ProTable/interface.d.ts +132 -0
- package/lib/components/ProTable/interface.js +6 -0
- package/lib/components/ProTable/style/ProTable.css +47 -0
- package/lib/components/ProTable/style/css.js +8 -0
- package/lib/components/ProTable/style/index.d.ts +5 -0
- package/lib/components/ProTable/style/index.js +8 -0
- package/lib/components/ProTable/useFetchData.d.ts +48 -0
- package/lib/components/ProTable/useFetchData.js +277 -0
- package/lib/index.css +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.js +8 -1
- package/package.json +6 -1
- package/scripts/mcp-server/examples.generated.json +156 -0
- package/scripts/mcp-server/index.generated.json +733 -1
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
3
|
+
var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) {
|
|
5
|
+
return value instanceof P ? value : new P(function (resolve) {
|
|
6
|
+
resolve(value);
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
+
function fulfilled(value) {
|
|
11
|
+
try {
|
|
12
|
+
step(generator.next(value));
|
|
13
|
+
} catch (e) {
|
|
14
|
+
reject(e);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function rejected(value) {
|
|
18
|
+
try {
|
|
19
|
+
step(generator["throw"](value));
|
|
20
|
+
} catch (e) {
|
|
21
|
+
reject(e);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function step(result) {
|
|
25
|
+
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
26
|
+
}
|
|
27
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
import { useEffect, useRef } from 'react';
|
|
31
|
+
import { useLatest, useMemoizedFn, useSafeState } from '@1money/hooks';
|
|
32
|
+
import { useAwaitableReload } from './core/useAwaitableReload';
|
|
33
|
+
/**
|
|
34
|
+
* Owns the request lifecycle for ProTable: data, loading, and pagination.
|
|
35
|
+
*
|
|
36
|
+
* One effect is the single fetch path. It reads its query inputs from the
|
|
37
|
+
* **render closure** (never a lagging ref), so every state change — search,
|
|
38
|
+
* sort, filter, params, page — refetches with correct values. An awaitable
|
|
39
|
+
* reload signal lets imperative callers force the same effect and `await` it.
|
|
40
|
+
*
|
|
41
|
+
* `runRequest` aborts the previous in-flight request (`AbortController`, exposed
|
|
42
|
+
* to `request` as `{ signal }`), tags itself with a request id, and drops stale
|
|
43
|
+
* or aborted responses.
|
|
44
|
+
*/
|
|
45
|
+
export function useFetchData(options) {
|
|
46
|
+
var _this = this;
|
|
47
|
+
var request = options.request,
|
|
48
|
+
manual = options.manual,
|
|
49
|
+
manualRequest = options.manualRequest,
|
|
50
|
+
debounceTime = options.debounceTime,
|
|
51
|
+
postData = options.postData,
|
|
52
|
+
polling = options.polling,
|
|
53
|
+
params = options.params,
|
|
54
|
+
defaultData = options.defaultData,
|
|
55
|
+
paginated = options.paginated,
|
|
56
|
+
defaultCurrent = options.defaultCurrent,
|
|
57
|
+
defaultPageSize = options.defaultPageSize,
|
|
58
|
+
searchParams = options.searchParams,
|
|
59
|
+
sort = options.sort,
|
|
60
|
+
filter = options.filter,
|
|
61
|
+
onLoad = options.onLoad,
|
|
62
|
+
onLoadingChange = options.onLoadingChange,
|
|
63
|
+
onRequestError = options.onRequestError;
|
|
64
|
+
var _useSafeState = useSafeState(defaultData !== null && defaultData !== void 0 ? defaultData : []),
|
|
65
|
+
_useSafeState2 = _slicedToArray(_useSafeState, 2),
|
|
66
|
+
dataSource = _useSafeState2[0],
|
|
67
|
+
setDataSource = _useSafeState2[1];
|
|
68
|
+
var _useSafeState3 = useSafeState(false),
|
|
69
|
+
_useSafeState4 = _slicedToArray(_useSafeState3, 2),
|
|
70
|
+
loading = _useSafeState4[0],
|
|
71
|
+
setLoadingState = _useSafeState4[1];
|
|
72
|
+
var _useSafeState5 = useSafeState({
|
|
73
|
+
current: defaultCurrent,
|
|
74
|
+
pageSize: defaultPageSize,
|
|
75
|
+
total: 0
|
|
76
|
+
}),
|
|
77
|
+
_useSafeState6 = _slicedToArray(_useSafeState5, 2),
|
|
78
|
+
pageInfo = _useSafeState6[0],
|
|
79
|
+
setPageInfoState = _useSafeState6[1];
|
|
80
|
+
var reloadSignal = useAwaitableReload();
|
|
81
|
+
var reqRef = useLatest(request);
|
|
82
|
+
var callbacks = useLatest({
|
|
83
|
+
onLoad: onLoad,
|
|
84
|
+
onLoadingChange: onLoadingChange,
|
|
85
|
+
onRequestError: onRequestError,
|
|
86
|
+
postData: postData
|
|
87
|
+
});
|
|
88
|
+
var loadingRef = useLatest(loading);
|
|
89
|
+
var requestIdRef = useRef(0);
|
|
90
|
+
var abortRef = useRef(null);
|
|
91
|
+
var skipFirstRef = useRef(manualRequest === true);
|
|
92
|
+
var prevParamsRef = useRef(undefined);
|
|
93
|
+
var debounceTimerRef = useRef(undefined);
|
|
94
|
+
// Set right before a polling-triggered refetch so it can refresh silently
|
|
95
|
+
// (without flashing the main loading overlay). Consumed at the start of runRequest.
|
|
96
|
+
var silentRef = useRef(false);
|
|
97
|
+
var setLoading = useMemoizedFn(function (next) {
|
|
98
|
+
var _a, _b;
|
|
99
|
+
setLoadingState(next);
|
|
100
|
+
(_b = (_a = callbacks.current).onLoadingChange) === null || _b === void 0 ? void 0 : _b.call(_a, next);
|
|
101
|
+
});
|
|
102
|
+
var setPageInfo = useMemoizedFn(function (info) {
|
|
103
|
+
setPageInfoState(function (prev) {
|
|
104
|
+
var merged = Object.assign(Object.assign({}, prev), info);
|
|
105
|
+
if (merged.current === prev.current && merged.pageSize === prev.pageSize && merged.total === prev.total) {
|
|
106
|
+
return prev;
|
|
107
|
+
}
|
|
108
|
+
return merged;
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
// The single network entry point: abort the previous request, then apply data
|
|
112
|
+
// while guarding against stale / aborted responses.
|
|
113
|
+
var runRequest = useMemoizedFn(function (merged, st, ft) {
|
|
114
|
+
return __awaiter(_this, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
115
|
+
var _a, _b, _c, _d, _e, _f, req, silent, abort, requestId, result, raw, next, _t;
|
|
116
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
117
|
+
while (1) switch (_context.prev = _context.next) {
|
|
118
|
+
case 0:
|
|
119
|
+
req = reqRef.current;
|
|
120
|
+
if (req) {
|
|
121
|
+
_context.next = 1;
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
return _context.abrupt("return");
|
|
125
|
+
case 1:
|
|
126
|
+
// A polling refetch refreshes silently — no loading overlay flash.
|
|
127
|
+
silent = silentRef.current;
|
|
128
|
+
silentRef.current = false;
|
|
129
|
+
(_a = abortRef.current) === null || _a === void 0 ? void 0 : _a.abort();
|
|
130
|
+
abort = new AbortController();
|
|
131
|
+
abortRef.current = abort;
|
|
132
|
+
requestId = ++requestIdRef.current;
|
|
133
|
+
if (!silent) setLoading(true);
|
|
134
|
+
_context.prev = 2;
|
|
135
|
+
_context.next = 3;
|
|
136
|
+
return req(merged, st, ft, {
|
|
137
|
+
signal: abort.signal
|
|
138
|
+
});
|
|
139
|
+
case 3:
|
|
140
|
+
result = _context.sent;
|
|
141
|
+
if (!(abort.signal.aborted || requestId !== requestIdRef.current)) {
|
|
142
|
+
_context.next = 4;
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
return _context.abrupt("return");
|
|
146
|
+
case 4:
|
|
147
|
+
if (!(result.success === false)) {
|
|
148
|
+
_context.next = 5;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
return _context.abrupt("return");
|
|
152
|
+
case 5:
|
|
153
|
+
raw = (_b = result.data) !== null && _b !== void 0 ? _b : [];
|
|
154
|
+
next = callbacks.current.postData ? callbacks.current.postData(raw) : raw;
|
|
155
|
+
setDataSource(next);
|
|
156
|
+
setPageInfoState(function (prev) {
|
|
157
|
+
var _a;
|
|
158
|
+
return Object.assign(Object.assign({}, prev), {
|
|
159
|
+
total: (_a = result.total) !== null && _a !== void 0 ? _a : next.length
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
(_d = (_c = callbacks.current).onLoad) === null || _d === void 0 ? void 0 : _d.call(_c, next);
|
|
163
|
+
_context.next = 8;
|
|
164
|
+
break;
|
|
165
|
+
case 6:
|
|
166
|
+
_context.prev = 6;
|
|
167
|
+
_t = _context["catch"](2);
|
|
168
|
+
if (!(abort.signal.aborted || requestId !== requestIdRef.current)) {
|
|
169
|
+
_context.next = 7;
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
return _context.abrupt("return");
|
|
173
|
+
case 7:
|
|
174
|
+
(_f = (_e = callbacks.current).onRequestError) === null || _f === void 0 ? void 0 : _f.call(_e, _t);
|
|
175
|
+
case 8:
|
|
176
|
+
_context.prev = 8;
|
|
177
|
+
if (!silent && requestId === requestIdRef.current) setLoading(false);
|
|
178
|
+
return _context.finish(8);
|
|
179
|
+
case 9:
|
|
180
|
+
case "end":
|
|
181
|
+
return _context.stop();
|
|
182
|
+
}
|
|
183
|
+
}, _callee, null, [[2, 6, 8, 9]]);
|
|
184
|
+
}));
|
|
185
|
+
});
|
|
186
|
+
// Build the request params from the current render closure.
|
|
187
|
+
var buildMerged = function buildMerged() {
|
|
188
|
+
return Object.assign(Object.assign(Object.assign({}, params !== null && params !== void 0 ? params : {}), searchParams), paginated ? {
|
|
189
|
+
current: pageInfo.current,
|
|
190
|
+
pageSize: pageInfo.pageSize
|
|
191
|
+
} : {});
|
|
192
|
+
};
|
|
193
|
+
// Only `params` (a consumer-owned prop, often an inline object) needs value
|
|
194
|
+
// comparison; the rest are stable internal state and compare by reference.
|
|
195
|
+
var paramsKey = JSON.stringify(params !== null && params !== void 0 ? params : null);
|
|
196
|
+
useEffect(function () {
|
|
197
|
+
if (manual) {
|
|
198
|
+
reloadSignal.settle();
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
// manualRequest: swallow only the first (mount) trigger.
|
|
202
|
+
if (skipFirstRef.current) {
|
|
203
|
+
skipFirstRef.current = false;
|
|
204
|
+
prevParamsRef.current = paramsKey;
|
|
205
|
+
reloadSignal.settle();
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
// A `params` change resets to page 1 first; the page change re-runs this
|
|
209
|
+
// effect, where the actual fetch happens (so it never double-fetches).
|
|
210
|
+
if (prevParamsRef.current !== paramsKey && pageInfo.current !== defaultCurrent) {
|
|
211
|
+
prevParamsRef.current = paramsKey;
|
|
212
|
+
setPageInfo({
|
|
213
|
+
current: defaultCurrent
|
|
214
|
+
});
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
prevParamsRef.current = paramsKey;
|
|
218
|
+
var fire = function fire() {
|
|
219
|
+
return runRequest(buildMerged(), sort, filter)["finally"](reloadSignal.settle);
|
|
220
|
+
};
|
|
221
|
+
if (debounceTime && debounceTime > 0) {
|
|
222
|
+
if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);
|
|
223
|
+
debounceTimerRef.current = setTimeout(fire, debounceTime);
|
|
224
|
+
return function () {
|
|
225
|
+
if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
void fire();
|
|
229
|
+
}, [paramsKey, searchParams, sort, filter, pageInfo.current, pageInfo.pageSize, reloadSignal.token, manual]);
|
|
230
|
+
var reload = useMemoizedFn(function () {
|
|
231
|
+
return manual ? Promise.resolve() : reloadSignal.request();
|
|
232
|
+
});
|
|
233
|
+
var reset = useMemoizedFn(function () {
|
|
234
|
+
setPageInfoState(function (prev) {
|
|
235
|
+
return Object.assign(Object.assign({}, prev), {
|
|
236
|
+
current: defaultCurrent,
|
|
237
|
+
pageSize: defaultPageSize
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
// Polling: re-trigger on an interval, skipping ticks while a request is in flight.
|
|
242
|
+
var pollingMs = typeof polling === 'function' ? polling(dataSource) : polling;
|
|
243
|
+
useEffect(function () {
|
|
244
|
+
if (manual || !pollingMs || pollingMs <= 0) return;
|
|
245
|
+
var id = setInterval(function () {
|
|
246
|
+
if (loadingRef.current) return;
|
|
247
|
+
silentRef.current = true;
|
|
248
|
+
void reloadSignal.request();
|
|
249
|
+
}, pollingMs);
|
|
250
|
+
return function () {
|
|
251
|
+
return clearInterval(id);
|
|
252
|
+
};
|
|
253
|
+
}, [pollingMs, manual]);
|
|
254
|
+
// Abort any in-flight request on unmount.
|
|
255
|
+
useEffect(function () {
|
|
256
|
+
return function () {
|
|
257
|
+
var _a;
|
|
258
|
+
return (_a = abortRef.current) === null || _a === void 0 ? void 0 : _a.abort();
|
|
259
|
+
};
|
|
260
|
+
}, []);
|
|
261
|
+
return {
|
|
262
|
+
dataSource: dataSource,
|
|
263
|
+
loading: loading,
|
|
264
|
+
pageInfo: pageInfo,
|
|
265
|
+
setPageInfo: setPageInfo,
|
|
266
|
+
reload: reload,
|
|
267
|
+
reset: reset
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvVGFibGUvdXNlRmV0Y2hEYXRhLmpzIiwiY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9Qcm9UYWJsZS91c2VGZXRjaERhdGEudHMiXSwibmFtZXMiOlsiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiYWRvcHQiLCJ2YWx1ZSIsInJlc29sdmUiLCJQcm9taXNlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwic3RlcCIsIm5leHQiLCJlIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsImFwcGx5IiwidXNlRWZmZWN0IiwidXNlUmVmIiwidXNlTGF0ZXN0IiwidXNlTWVtb2l6ZWRGbiIsInVzZVNhZmVTdGF0ZSIsInVzZUF3YWl0YWJsZVJlbG9hZCIsInVzZUZldGNoRGF0YSIsIm9wdGlvbnMiLCJfdGhpcyIsInJlcXVlc3QiLCJtYW51YWwiLCJtYW51YWxSZXF1ZXN0IiwiZGVib3VuY2VUaW1lIiwicG9zdERhdGEiLCJwb2xsaW5nIiwicGFyYW1zIiwiZGVmYXVsdERhdGEiLCJwYWdpbmF0ZWQiLCJkZWZhdWx0Q3VycmVudCIsImRlZmF1bHRQYWdlU2l6ZSIsInNlYXJjaFBhcmFtcyIsInNvcnQiLCJmaWx0ZXIiLCJvbkxvYWQiLCJvbkxvYWRpbmdDaGFuZ2UiLCJvblJlcXVlc3RFcnJvciIsIl91c2VTYWZlU3RhdGUiLCJfdXNlU2FmZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiZGF0YVNvdXJjZSIsInNldERhdGFTb3VyY2UiLCJfdXNlU2FmZVN0YXRlMyIsIl91c2VTYWZlU3RhdGU0IiwibG9hZGluZyIsInNldExvYWRpbmdTdGF0ZSIsIl91c2VTYWZlU3RhdGU1IiwiY3VycmVudCIsInBhZ2VTaXplIiwidG90YWwiLCJfdXNlU2FmZVN0YXRlNiIsInBhZ2VJbmZvIiwic2V0UGFnZUluZm9TdGF0ZSIsInJlbG9hZFNpZ25hbCIsInJlcVJlZiIsImNhbGxiYWNrcyIsImxvYWRpbmdSZWYiLCJyZXF1ZXN0SWRSZWYiLCJhYm9ydFJlZiIsInNraXBGaXJzdFJlZiIsInByZXZQYXJhbXNSZWYiLCJ1bmRlZmluZWQiLCJkZWJvdW5jZVRpbWVyUmVmIiwic2lsZW50UmVmIiwic2V0TG9hZGluZyIsIl9hIiwiX2IiLCJjYWxsIiwic2V0UGFnZUluZm8iLCJpbmZvIiwicHJldiIsIm1lcmdlZCIsIk9iamVjdCIsImFzc2lnbiIsInJ1blJlcXVlc3QiLCJzdCIsImZ0IiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiX2MiLCJfZCIsIl9lIiwiX2YiLCJyZXEiLCJzaWxlbnQiLCJhYm9ydCIsInJlcXVlc3RJZCIsInJhdyIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwiYWJydXB0IiwiQWJvcnRDb250cm9sbGVyIiwic2lnbmFsIiwic2VudCIsImFib3J0ZWQiLCJzdWNjZXNzIiwiZGF0YSIsImxlbmd0aCIsImZpbmlzaCIsInN0b3AiLCJidWlsZE1lcmdlZCIsInBhcmFtc0tleSIsIkpTT04iLCJzdHJpbmdpZnkiLCJzZXR0bGUiLCJmaXJlIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInRva2VuIiwicmVsb2FkIiwicmVzZXQiLCJwb2xsaW5nTXMiLCJpZCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFJQSxTQUFTLEdBQUksSUFBSSxJQUFJLElBQUksQ0FBQ0EsU0FBUyxJQUFLLFVBQVVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxDQUFDLEVBQUVDLFNBQVMsRUFBRTtFQUNyRixTQUFTQyxLQUFLQSxDQUFDQyxLQUFLLEVBQUU7SUFBRSxPQUFPQSxLQUFLLFlBQVlILENBQUMsR0FBR0csS0FBSyxHQUFHLElBQUlILENBQUMsQ0FBQyxVQUFVSSxPQUFPLEVBQUU7TUFBRUEsT0FBTyxDQUFDRCxLQUFLLENBQUM7SUFBRSxDQUFDLENBQUM7RUFBRTtFQUMzRyxPQUFPLEtBQUtILENBQUMsS0FBS0EsQ0FB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Q0FBQyxZQUFLO01BQzFCLElBQUkzRCxVQUFVLENBQUNULE9BQU8sRUFBRTtNQUN4QmdCLFNBQVMsQ0FBQ2hCLE9BQU8sR0FBRyxJQUFJO01BQ3hCLEtBQUtNLFlBQVksQ0FBQ2pDLE9BQU8sQ0FBQSxDQUFFO0lBQzdCLENBQUMsRUFBRTZGLFNBQVMsQ0FBQztJQUNiLE9BQU87TUFBQSxPQUFNRyxhQUFhLENBQUNGLEVBQUUsQ0FBQztJQUFBO0VBQ2hDLENBQUMsRUFBRSxDQUFDRCxTQUFTLEVBQUU1RixNQUFNLENBQUMsQ0FBQztFQUV2QjtFQUNBVixTQUFTLENBQUM7SUFBQSxPQUFNLFlBQUs7TUFBQSxJQUFBc0QsRUFBQTtNQUFDLE9BQUEsQ0FBQUEsRUFBQSxHQUFBUCxRQUFRLENBQUNYLE9BQU8sTUFBQSxJQUFBLElBQUFrQixFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBRXFCLEtBQUssQ0FBQSxDQUFFO0lBQUEsQ0FBQTtFQUFBLEdBQUUsRUFBRSxDQUFDO0VBRXBELE9BQU87SUFBRTlDLFVBQVUsRUFBVkEsVUFBVTtJQUFFSSxPQUFPLEVBQVBBLE9BQU87SUFBRU8sUUFBUSxFQUFSQSxRQUFRO0lBQUVpQixXQUFXLEVBQVhBLFdBQVc7SUFBRTJDLE1BQU0sRUFBTkEsTUFBTTtJQUFFQyxLQUFLLEVBQUxBO0VBQUssQ0FBRTtBQUN0RSIsImZpbGUiOiJjb21wb25lbnRzL1Byb1RhYmxlL3VzZUZldGNoRGF0YS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VMYXRlc3QsIHVzZU1lbW9pemVkRm4sIHVzZVNhZmVTdGF0ZSB9IGZyb20gJ0AxbW9uZXkvaG9va3MnO1xuaW1wb3J0IHsgdXNlQXdhaXRhYmxlUmVsb2FkIH0gZnJvbSAnLi9jb3JlL3VzZUF3YWl0YWJsZVJlbG9hZCc7XG4vKipcbiAqIE93bnMgdGhlIHJlcXVlc3QgbGlmZWN5Y2xlIGZvciBQcm9UYWJsZTogZGF0YSwgbG9hZGluZywgYW5kIHBhZ2luYXRpb24uXG4gKlxuICogT25lIGVmZmVjdCBpcyB0aGUgc2luZ2xlIGZldGNoIHBhdGguIEl0IHJlYWRzIGl0cyBxdWVyeSBpbnB1dHMgZnJvbSB0aGVcbiAqICoqcmVuZGVyIGNsb3N1cmUqKiAobmV2ZXIgYSBsYWdnaW5nIHJlZiksIHNvIGV2ZXJ5IHN0YXRlIGNoYW5nZSDigJQgc2VhcmNoLFxuICogc29ydCwgZmlsdGVyLCBwYXJhbXMsIHBhZ2Ug4oCUIHJlZmV0Y2hlcyB3aXRoIGNvcnJlY3QgdmFsdWVzLiBBbiBhd2FpdGFibGVcbiAqIHJlbG9hZCBzaWduYWwgbGV0cyBpbXBlcmF0aXZlIGNhbGxlcnMgZm9yY2UgdGhlIHNhbWUgZWZmZWN0IGFuZCBgYXdhaXRgIGl0LlxuICpcbiAqIGBydW5SZXF1ZXN0YCBhYm9ydHMgdGhlIHByZXZpb3VzIGluLWZsaWdodCByZXF1ZXN0IChgQWJvcnRDb250cm9sbGVyYCwgZXhwb3NlZFxuICogdG8gYHJlcXVlc3RgIGFzIGB7IHNpZ25hbCB9YCksIHRhZ3MgaXRzZWxmIHdpdGggYSByZXF1ZXN0IGlkLCBhbmQgZHJvcHMgc3RhbGVcbiAqIG9yIGFib3J0ZWQgcmVzcG9uc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRmV0Y2hEYXRhKG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IHJlcXVlc3QsIG1hbnVhbCwgbWFudWFsUmVxdWVzdCwgZGVib3VuY2VUaW1lLCBwb3N0RGF0YSwgcG9sbGluZywgcGFyYW1zLCBkZWZhdWx0RGF0YSwgcGFnaW5hdGVkLCBkZWZhdWx0Q3VycmVudCwgZGVmYXVsdFBhZ2VTaXplLCBzZWFyY2hQYXJhbXMsIHNvcnQsIGZpbHRlciwgb25Mb2FkLCBvbkxvYWRpbmdDaGFuZ2UsIG9uUmVxdWVzdEVycm9yLCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBbZGF0YVNvdXJjZSwgc2V0RGF0YVNvdXJjZV0gPSB1c2VTYWZlU3RhdGUoZGVmYXVsdERhdGEgIT09IG51bGwgJiYgZGVmYXVsdERhdGEgIT09IHZvaWQgMCA/IGRlZmF1bHREYXRhIDogW10pO1xuICAgIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nU3RhdGVdID0gdXNlU2FmZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbcGFnZUluZm8sIHNldFBhZ2VJbmZvU3RhdGVdID0gdXNlU2FmZVN0YXRlKHtcbiAgICAgICAgY3VycmVudDogZGVmYXVsdEN1cnJlbnQsXG4gICAgICAgIHBhZ2VTaXplOiBkZWZhdWx0UGFnZVNpemUsXG4gICAgICAgIHRvdGFsOiAwLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlbG9hZFNpZ25hbCA9IHVzZUF3YWl0YWJsZVJlbG9hZCgpO1xuICAgIGNvbnN0IHJlcVJlZiA9IHVzZUxhdGVzdChyZXF1ZXN0KTtcbiAgICBjb25zdCBjYWxsYmFja3MgPSB1c2VMYXRlc3QoeyBvbkxvYWQsIG9uTG9hZGluZ0NoYW5nZSwgb25SZXF1ZXN0RXJyb3IsIHBvc3REYXRhIH0pO1xuICAgIGNvbnN0IGxvYWRpbmdSZWYgPSB1c2VMYXRlc3QobG9hZGluZyk7XG4gICAgY29uc3QgcmVxdWVzdElkUmVmID0gdXNlUmVmKDApO1xuICAgIGNvbnN0IGFib3J0UmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IHNraXBGaXJzdFJlZiA9IHVzZVJlZihtYW51YWxSZXF1ZXN0ID09PSB0cnVlKTtcbiAgICBjb25zdCBwcmV2UGFyYW1zUmVmID0gdXNlUmVmKHVuZGVmaW5lZCk7XG4gICAgY29uc3QgZGVib3VuY2VUaW1lclJlZiA9IHVzZVJlZih1bmRlZmluZWQpO1xuICAgIC8vIFNldCByaWdodCBiZWZvcmUgYSBwb2xsaW5nLXRyaWdnZXJlZCByZWZldGNoIHNvIGl0IGNhbiByZWZyZXNoIHNpbGVudGx5XG4gICAgLy8gKHdpdGhvdXQgZmxhc2hpbmcgdGhlIG1haW4gbG9hZGluZyBvdmVybGF5KS4gQ29uc3VtZWQgYXQgdGhlIHN0YXJ0IG9mIHJ1blJlcXVlc3QuXG4gICAgY29uc3Qgc2lsZW50UmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBzZXRMb2FkaW5nID0gdXNlTWVtb2l6ZWRGbigobmV4dCkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBzZXRMb2FkaW5nU3RhdGUobmV4dCk7XG4gICAgICAgIChfYiA9IChfYSA9IGNhbGxiYWNrcy5jdXJyZW50KS5vbkxvYWRpbmdDaGFuZ2UpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBuZXh0KTtcbiAgICB9KTtcbiAgICBjb25zdCBzZXRQYWdlSW5mbyA9IHVzZU1lbW9pemVkRm4oKGluZm8pID0+IHtcbiAgICAgICAgc2V0UGFnZUluZm9TdGF0ZSgocHJldikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWVyZ2VkID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgaW5mbyk7XG4gICAgICAgICAgICBpZiAobWVyZ2VkLmN1cnJlbnQgPT09IHByZXYuY3VycmVudCAmJiBtZXJnZWQucGFnZVNpemUgPT09IHByZXYucGFnZVNpemUgJiYgbWVyZ2VkLnRvdGFsID09PSBwcmV2LnRvdGFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VkO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICAvLyBUaGUgc2luZ2xlIG5ldHdvcmsgZW50cnkgcG9pbnQ6IGFib3J0IHRoZSBwcmV2aW91cyByZXF1ZXN0LCB0aGVuIGFwcGx5IGRhdGFcbiAgICAvLyB3aGlsZSBndWFyZGluZyBhZ2FpbnN0IHN0YWxlIC8gYWJvcnRlZCByZXNwb25zZXMuXG4gICAgY29uc3QgcnVuUmVxdWVzdCA9IHVzZU1lbW9pemVkRm4oKG1lcmdlZCwgc3QsIGZ0KSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgICAgICBjb25zdCByZXEgPSByZXFSZWYuY3VycmVudDtcbiAgICAgICAgaWYgKCFyZXEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vIEEgcG9sbGluZyByZWZldGNoIHJlZnJlc2hlcyBzaWxlbnRseSDigJQgbm8gbG9hZGluZyBvdmVybGF5IGZsYXNoLlxuICAgICAgICBjb25zdCBzaWxlbnQgPSBzaWxlbnRSZWYuY3VycmVudDtcbiAgICAgICAgc2lsZW50UmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgKF9hID0gYWJvcnRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFib3J0KCk7XG4gICAgICAgIGNvbnN0IGFib3J0ID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICBhYm9ydFJlZi5jdXJyZW50ID0gYWJvcnQ7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9ICsrcmVxdWVzdElkUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICghc2lsZW50KVxuICAgICAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIHJlcShtZXJnZWQsIHN0LCBmdCwgeyBzaWduYWw6IGFib3J0LnNpZ25hbCB9KTtcbiAgICAgICAgICAgIGlmIChhYm9ydC5zaWduYWwuYWJvcnRlZCB8fCByZXF1ZXN0SWQgIT09IHJlcXVlc3RJZFJlZi5jdXJyZW50KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3VjY2VzcyA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcmF3ID0gKF9iID0gcmVzdWx0LmRhdGEpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFtdO1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IGNhbGxiYWNrcy5jdXJyZW50LnBvc3REYXRhID8gY2FsbGJhY2tzLmN1cnJlbnQucG9zdERhdGEocmF3KSA6IHJhdztcbiAgICAgICAgICAgIHNldERhdGFTb3VyY2UobmV4dCk7XG4gICAgICAgICAgICBzZXRQYWdlSW5mb1N0YXRlKChwcmV2KSA9PiB7IHZhciBfYTsgcmV0dXJuIChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IHRvdGFsOiAoX2EgPSByZXN1bHQudG90YWwpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG5leHQubGVuZ3RoIH0pKTsgfSk7XG4gICAgICAgICAgICAoX2QgPSAoX2MgPSBjYWxsYmFja3MuY3VycmVudCkub25Mb2FkKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuY2FsbChfYywgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoYWJvcnQuc2lnbmFsLmFib3J0ZWQgfHwgcmVxdWVzdElkICE9PSByZXF1ZXN0SWRSZWYuY3VycmVudClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAoX2YgPSAoX2UgPSBjYWxsYmFja3MuY3VycmVudCkub25SZXF1ZXN0RXJyb3IpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5jYWxsKF9lLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoIXNpbGVudCAmJiByZXF1ZXN0SWQgPT09IHJlcXVlc3RJZFJlZi5jdXJyZW50KVxuICAgICAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIEJ1aWxkIHRoZSByZXF1ZXN0IHBhcmFtcyBmcm9tIHRoZSBjdXJyZW50IHJlbmRlciBjbG9zdXJlLlxuICAgIGNvbnN0IGJ1aWxkTWVyZ2VkID0gKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCAocGFyYW1zICE9PSBudWxsICYmIHBhcmFtcyAhPT0gdm9pZCAwID8gcGFyYW1zIDoge30pKSwgc2VhcmNoUGFyYW1zKSwgKHBhZ2luYXRlZCA/IHsgY3VycmVudDogcGFnZUluZm8uY3VycmVudCwgcGFnZVNpemU6IHBhZ2VJbmZvLnBhZ2VTaXplIH0gOiB7fSkpKTtcbiAgICAvLyBPbmx5IGBwYXJhbXNgIChhIGNvbnN1bWVyLW93bmVkIHByb3AsIG9mdGVuIGFuIGlubGluZSBvYmplY3QpIG5lZWRzIHZhbHVlXG4gICAgLy8gY29tcGFyaXNvbjsgdGhlIHJlc3QgYXJlIHN0YWJsZSBpbnRlcm5hbCBzdGF0ZSBhbmQgY29tcGFyZSBieSByZWZlcmVuY2UuXG4gICAgY29uc3QgcGFyYW1zS2V5ID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zICE9PSBudWxsICYmIHBhcmFtcyAhPT0gdm9pZCAwID8gcGFyYW1zIDogbnVsbCk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKG1hbnVhbCkge1xuICAgICAgICAgICAgcmVsb2FkU2lnbmFsLnNldHRsZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1hbnVhbFJlcXVlc3Q6IHN3YWxsb3cgb25seSB0aGUgZmlyc3QgKG1vdW50KSB0cmlnZ2VyLlxuICAgICAgICBpZiAoc2tpcEZpcnN0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHNraXBGaXJzdFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBwcmV2UGFyYW1zUmVmLmN1cnJlbnQgPSBwYXJhbXNLZXk7XG4gICAgICAgICAgICByZWxvYWRTaWduYWwuc2V0dGxlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gQSBgcGFyYW1zYCBjaGFuZ2UgcmVzZXRzIHRvIHBhZ2UgMSBmaXJzdDsgdGhlIHBhZ2UgY2hhbmdlIHJlLXJ1bnMgdGhpc1xuICAgICAgICAvLyBlZmZlY3QsIHdoZXJlIHRoZSBhY3R1YWwgZmV0Y2ggaGFwcGVucyAoc28gaXQgbmV2ZXIgZG91YmxlLWZldGNoZXMpLlxuICAgICAgICBpZiAocHJldlBhcmFtc1JlZi5jdXJyZW50ICE9PSBwYXJhbXNLZXkgJiYgcGFnZUluZm8uY3VycmVudCAhPT0gZGVmYXVsdEN1cnJlbnQpIHtcbiAgICAgICAgICAgIHByZXZQYXJhbXNSZWYuY3VycmVudCA9IHBhcmFtc0tleTtcbiAgICAgICAgICAgIHNldFBhZ2VJbmZvKHsgY3VycmVudDogZGVmYXVsdEN1cnJlbnQgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcHJldlBhcmFtc1JlZi5jdXJyZW50ID0gcGFyYW1zS2V5O1xuICAgICAgICBjb25zdCBmaXJlID0gKCkgPT4gcnVuUmVxdWVzdChidWlsZE1lcmdlZCgpLCBzb3J0LCBmaWx0ZXIpLmZpbmFsbHkocmVsb2FkU2lnbmFsLnNldHRsZSk7XG4gICAgICAgIGlmIChkZWJvdW5jZVRpbWUgJiYgZGVib3VuY2VUaW1lID4gMCkge1xuICAgICAgICAgICAgaWYgKGRlYm91bmNlVGltZXJSZWYuY3VycmVudClcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lclJlZi5jdXJyZW50KTtcbiAgICAgICAgICAgIGRlYm91bmNlVGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoZmlyZSwgZGVib3VuY2VUaW1lKTtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRlYm91bmNlVGltZXJSZWYuY3VycmVudClcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlYm91bmNlVGltZXJSZWYuY3VycmVudCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHZvaWQgZmlyZSgpO1xuICAgIH0sIFtwYXJhbXNLZXksIHNlYXJjaFBhcmFtcywgc29ydCwgZmlsdGVyLCBwYWdlSW5mby5jdXJyZW50LCBwYWdlSW5mby5wYWdlU2l6ZSwgcmVsb2FkU2lnbmFsLnRva2VuLCBtYW51YWxdKTtcbiAgICBjb25zdCByZWxvYWQgPSB1c2VNZW1vaXplZEZuKCgpID0+IChtYW51YWwgPyBQcm9taXNlLnJlc29sdmUoKSA6IHJlbG9hZFNpZ25hbC5yZXF1ZXN0KCkpKTtcbiAgICBjb25zdCByZXNldCA9IHVzZU1lbW9pemVkRm4oKCkgPT4ge1xuICAgICAgICBzZXRQYWdlSW5mb1N0YXRlKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBjdXJyZW50OiBkZWZhdWx0Q3VycmVudCwgcGFnZVNpemU6IGRlZmF1bHRQYWdlU2l6ZSB9KSkpO1xuICAgIH0pO1xuICAgIC8vIFBvbGxpbmc6IHJlLXRyaWdnZXIgb24gYW4gaW50ZXJ2YWwsIHNraXBwaW5nIHRpY2tzIHdoaWxlIGEgcmVxdWVzdCBpcyBpbiBmbGlnaHQuXG4gICAgY29uc3QgcG9sbGluZ01zID0gdHlwZW9mIHBvbGxpbmcgPT09ICdmdW5jdGlvbicgPyBwb2xsaW5nKGRhdGFTb3VyY2UpIDogcG9sbGluZztcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAobWFudWFsIHx8ICFwb2xsaW5nTXMgfHwgcG9sbGluZ01zIDw9IDApXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGlkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGxvYWRpbmdSZWYuY3VycmVudClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBzaWxlbnRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICB2b2lkIHJlbG9hZFNpZ25hbC5yZXF1ZXN0KCk7XG4gICAgICAgIH0sIHBvbGxpbmdNcyk7XG4gICAgICAgIHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKGlkKTtcbiAgICB9LCBbcG9sbGluZ01zLCBtYW51YWxdKTtcbiAgICAvLyBBYm9ydCBhbnkgaW4tZmxpZ2h0IHJlcXVlc3Qgb24gdW5tb3VudC5cbiAgICB1c2VFZmZlY3QoKCkgPT4gKCkgPT4geyB2YXIgX2E7IHJldHVybiAoX2EgPSBhYm9ydFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWJvcnQoKTsgfSwgW10pO1xuICAgIHJldHVybiB7IGRhdGFTb3VyY2UsIGxvYWRpbmcsIHBhZ2VJbmZvLCBzZXRQYWdlSW5mbywgcmVsb2FkLCByZXNldCB9O1xufSIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|