vitest 0.0.139 → 0.1.0
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/LICENSE.md +24 -0
- package/dist/cli.js +10 -9
- package/dist/{constants-d24b670d.js → constants-124522a1.js} +2 -2
- package/dist/{diff-5dfc7eb4.js → diff-f7af3876.js} +3 -2
- package/dist/entry.js +196 -47
- package/dist/{global-f971f18f.js → global-23e8ece3.js} +7 -6
- package/dist/index-163994a5.js +9275 -0
- package/dist/index-1b2eb03b.js +187 -0
- package/dist/index-1bb8e174.js +267 -0
- package/dist/{index-314cb4d9.js → index-8c66c440.js} +2 -2
- package/dist/index-fdf40e86.js +8840 -0
- package/dist/index.d.ts +55 -9
- package/dist/index.js +4 -6
- package/dist/node.d.ts +142 -96
- package/dist/node.js +12 -11
- package/dist/{setup-7a362fbc.js → setup-594dd442.js} +72 -80
- package/dist/{vi-567ba572.js → vi-5e16dd69.js} +3 -3
- package/dist/worker.js +214 -191
- package/package.json +9 -7
- package/dist/index-21eabd8a.js +0 -8727
- package/dist/index-64aafe4b.js +0 -396
- package/dist/index-8cb72062.js +0 -9255
package/dist/worker.js
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { i as isNodeBuiltin, c as createBirpc } from './index-
|
|
3
|
-
import { c as distDir } from './constants-
|
|
1
|
+
import { a as resolve, d as dirname, b as basename, j as join } from './index-1b2eb03b.js';
|
|
2
|
+
import { s as slash, n as normalizeId$1, t as toFilePath, b as isPrimitive, i as isNodeBuiltin, c as createBirpc } from './index-163994a5.js';
|
|
3
|
+
import { c as distDir } from './constants-124522a1.js';
|
|
4
4
|
import { builtinModules, createRequire } from 'module';
|
|
5
5
|
import { pathToFileURL, fileURLToPath } from 'url';
|
|
6
6
|
import vm from 'vm';
|
|
7
7
|
import { existsSync, readdirSync } from 'fs';
|
|
8
8
|
import { a as spyOn, s as spies } from './jest-mock-6c629944.js';
|
|
9
|
+
import { m as mergeSlashes } from './index-1bb8e174.js';
|
|
9
10
|
import { r as rpc } from './rpc-8c7cc374.js';
|
|
10
|
-
import 'tty';
|
|
11
|
-
import 'local-pkg';
|
|
12
11
|
import 'path';
|
|
13
12
|
import 'assert';
|
|
14
13
|
import 'util';
|
|
15
14
|
import 'chai';
|
|
16
15
|
import 'tinyspy';
|
|
16
|
+
import 'tty';
|
|
17
|
+
import 'local-pkg';
|
|
17
18
|
|
|
18
19
|
function normalizeId(id, base) {
|
|
19
20
|
if (base && id.startsWith(base))
|
|
@@ -21,6 +22,140 @@ function normalizeId(id, base) {
|
|
|
21
22
|
return id.replace(/^\/@id\/__x00__/, "\0").replace(/^\/@id\//, "").replace(/^__vite-browser-external:/, "").replace(/^node:/, "").replace(/[?&]v=\w+/, "?").replace(/\?$/, "");
|
|
22
23
|
}
|
|
23
24
|
|
|
25
|
+
class ViteNodeRunner {
|
|
26
|
+
constructor(options) {
|
|
27
|
+
this.options = options;
|
|
28
|
+
this.root = options.root || process.cwd();
|
|
29
|
+
this.moduleCache = options.moduleCache || new Map();
|
|
30
|
+
this.externalCache = new Map();
|
|
31
|
+
builtinModules.forEach((m) => this.externalCache.set(m, m));
|
|
32
|
+
}
|
|
33
|
+
async executeFile(file) {
|
|
34
|
+
return await this.cachedRequest(`/@fs/${slash(resolve(file))}`, []);
|
|
35
|
+
}
|
|
36
|
+
async executeId(id) {
|
|
37
|
+
return await this.cachedRequest(id, []);
|
|
38
|
+
}
|
|
39
|
+
async cachedRequest(rawId, callstack) {
|
|
40
|
+
var _a, _b;
|
|
41
|
+
const id = normalizeId$1(rawId, this.options.base);
|
|
42
|
+
const fsPath = toFilePath(id, this.root);
|
|
43
|
+
if ((_a = this.moduleCache.get(fsPath)) == null ? void 0 : _a.promise)
|
|
44
|
+
return (_b = this.moduleCache.get(fsPath)) == null ? void 0 : _b.promise;
|
|
45
|
+
const promise = this.directRequest(id, fsPath, callstack);
|
|
46
|
+
this.setCache(fsPath, { promise });
|
|
47
|
+
return await promise;
|
|
48
|
+
}
|
|
49
|
+
async directRequest(id, fsPath, callstack) {
|
|
50
|
+
callstack = [...callstack, id];
|
|
51
|
+
const request = async (dep) => {
|
|
52
|
+
var _a;
|
|
53
|
+
if (callstack.includes(dep)) {
|
|
54
|
+
const cacheKey = toFilePath(dep, this.root);
|
|
55
|
+
if (!((_a = this.moduleCache.get(cacheKey)) == null ? void 0 : _a.exports))
|
|
56
|
+
throw new Error(`Circular dependency detected
|
|
57
|
+
Stack:
|
|
58
|
+
${[...callstack, dep].reverse().map((p) => `- ${p}`).join("\n")}`);
|
|
59
|
+
return this.moduleCache.get(cacheKey).exports;
|
|
60
|
+
}
|
|
61
|
+
return this.cachedRequest(dep, callstack);
|
|
62
|
+
};
|
|
63
|
+
if (this.options.requestStubs && id in this.options.requestStubs)
|
|
64
|
+
return this.options.requestStubs[id];
|
|
65
|
+
const { code: transformed, externalize } = await this.options.fetchModule(id);
|
|
66
|
+
if (externalize) {
|
|
67
|
+
const mod = await interpretedImport(externalize, this.options.interpretDefault ?? true);
|
|
68
|
+
this.setCache(fsPath, { exports: mod });
|
|
69
|
+
return mod;
|
|
70
|
+
}
|
|
71
|
+
if (transformed == null)
|
|
72
|
+
throw new Error(`failed to load ${id}`);
|
|
73
|
+
const url = pathToFileURL(fsPath).href;
|
|
74
|
+
const exports = {};
|
|
75
|
+
this.setCache(fsPath, { code: transformed, exports });
|
|
76
|
+
const __filename = fileURLToPath(url);
|
|
77
|
+
const moduleProxy = {
|
|
78
|
+
set exports(value) {
|
|
79
|
+
exportAll(exports, value);
|
|
80
|
+
exports.default = value;
|
|
81
|
+
},
|
|
82
|
+
get exports() {
|
|
83
|
+
return exports.default;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const context = this.prepareContext({
|
|
87
|
+
__vite_ssr_import__: request,
|
|
88
|
+
__vite_ssr_dynamic_import__: request,
|
|
89
|
+
__vite_ssr_exports__: exports,
|
|
90
|
+
__vite_ssr_exportAll__: (obj) => exportAll(exports, obj),
|
|
91
|
+
__vite_ssr_import_meta__: { url },
|
|
92
|
+
require: createRequire(url),
|
|
93
|
+
exports,
|
|
94
|
+
module: moduleProxy,
|
|
95
|
+
__filename,
|
|
96
|
+
__dirname: dirname(__filename)
|
|
97
|
+
});
|
|
98
|
+
const fn = vm.runInThisContext(`async (${Object.keys(context).join(",")})=>{{${transformed}
|
|
99
|
+
}}`, {
|
|
100
|
+
filename: fsPath,
|
|
101
|
+
lineOffset: 0
|
|
102
|
+
});
|
|
103
|
+
await fn(...Object.values(context));
|
|
104
|
+
return exports;
|
|
105
|
+
}
|
|
106
|
+
prepareContext(context) {
|
|
107
|
+
return context;
|
|
108
|
+
}
|
|
109
|
+
setCache(id, mod) {
|
|
110
|
+
if (!this.moduleCache.has(id))
|
|
111
|
+
this.moduleCache.set(id, mod);
|
|
112
|
+
else
|
|
113
|
+
Object.assign(this.moduleCache.get(id), mod);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function hasNestedDefault(target) {
|
|
117
|
+
return "__esModule" in target && target.__esModule && "default" in target.default;
|
|
118
|
+
}
|
|
119
|
+
function proxyMethod(name, tryDefault) {
|
|
120
|
+
return function(target, key, ...args) {
|
|
121
|
+
const result = Reflect[name](target, key, ...args);
|
|
122
|
+
if (isPrimitive(target.default))
|
|
123
|
+
return result;
|
|
124
|
+
if (tryDefault && key === "default" || typeof result === "undefined")
|
|
125
|
+
return Reflect[name](target.default, key, ...args);
|
|
126
|
+
return result;
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
async function interpretedImport(path, interpretDefault) {
|
|
130
|
+
const mod = await import(path);
|
|
131
|
+
if (interpretDefault && "default" in mod) {
|
|
132
|
+
const tryDefault = hasNestedDefault(mod);
|
|
133
|
+
return new Proxy(mod, {
|
|
134
|
+
get: proxyMethod("get", tryDefault),
|
|
135
|
+
set: proxyMethod("set", tryDefault),
|
|
136
|
+
has: proxyMethod("has", tryDefault),
|
|
137
|
+
deleteProperty: proxyMethod("deleteProperty", tryDefault)
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
return mod;
|
|
141
|
+
}
|
|
142
|
+
function exportAll(exports, sourceModule) {
|
|
143
|
+
for (const key in sourceModule) {
|
|
144
|
+
if (key !== "default") {
|
|
145
|
+
try {
|
|
146
|
+
Object.defineProperty(exports, key, {
|
|
147
|
+
enumerable: true,
|
|
148
|
+
configurable: true,
|
|
149
|
+
get() {
|
|
150
|
+
return sourceModule[key];
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
} catch (_err) {
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
24
159
|
var __defProp = Object.defineProperty;
|
|
25
160
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
26
161
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
@@ -149,202 +284,94 @@ function createMocker(root, mockMap) {
|
|
|
149
284
|
};
|
|
150
285
|
}
|
|
151
286
|
|
|
152
|
-
const stubRequests = {
|
|
153
|
-
"/@vite/client": {
|
|
154
|
-
injectQuery: (id) => id,
|
|
155
|
-
createHotContext() {
|
|
156
|
-
return {
|
|
157
|
-
accept: () => {
|
|
158
|
-
},
|
|
159
|
-
prune: () => {
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
},
|
|
163
|
-
updateStyle() {
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
};
|
|
167
|
-
function hasNestedDefault(target) {
|
|
168
|
-
return "__esModule" in target && target.__esModule && "default" in target.default;
|
|
169
|
-
}
|
|
170
|
-
function proxyMethod(name, isNested) {
|
|
171
|
-
return function(target, key, ...args) {
|
|
172
|
-
const result = Reflect[name](target, key, ...args);
|
|
173
|
-
if (isNested && key === "default" || !result)
|
|
174
|
-
return Reflect[name](target.default, key, ...args);
|
|
175
|
-
return result;
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
async function interpretedImport(path, interpretDefault) {
|
|
179
|
-
const mod = await import(path);
|
|
180
|
-
if (interpretDefault && "default" in mod) {
|
|
181
|
-
const isNested = hasNestedDefault(mod);
|
|
182
|
-
return new Proxy(mod, {
|
|
183
|
-
get: proxyMethod("get", isNested),
|
|
184
|
-
set: proxyMethod("set", isNested),
|
|
185
|
-
has: proxyMethod("has", isNested),
|
|
186
|
-
deleteProperty: proxyMethod("deleteProperty", isNested)
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
return mod;
|
|
190
|
-
}
|
|
191
287
|
async function executeInViteNode(options) {
|
|
192
|
-
const
|
|
193
|
-
const externalCache = new Map();
|
|
194
|
-
builtinModules.forEach((m) => externalCache.set(m, m));
|
|
195
|
-
const {
|
|
196
|
-
getActualPath,
|
|
197
|
-
getSuiteFilepath,
|
|
198
|
-
mockObject,
|
|
199
|
-
mockPath,
|
|
200
|
-
clearMocks,
|
|
201
|
-
unmockPath,
|
|
202
|
-
resolveMockPath,
|
|
203
|
-
resolveDependency
|
|
204
|
-
} = createMocker(root, mockMap);
|
|
288
|
+
const runner = new VitestRunner(options);
|
|
205
289
|
const result = [];
|
|
206
|
-
for (const file of files)
|
|
207
|
-
result.push(await
|
|
290
|
+
for (const file of options.files)
|
|
291
|
+
result.push(await runner.executeFile(file));
|
|
208
292
|
return result;
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
const mock = mocks[resolveDependency(dep)];
|
|
227
|
-
if (mock === null) {
|
|
228
|
-
const mockedKey = `${dep}__mock`;
|
|
229
|
-
const cache = moduleCache.get(mockedKey);
|
|
230
|
-
if (cache == null ? void 0 : cache.exports)
|
|
231
|
-
return cache.exports;
|
|
232
|
-
const cacheKey = toFilePath(dep, root);
|
|
233
|
-
const mod = ((_a = moduleCache.get(cacheKey)) == null ? void 0 : _a.exports) || await cachedRequest(dep, callstack);
|
|
234
|
-
const exports2 = mockObject(mod);
|
|
235
|
-
setCache(mockedKey, { exports: exports2 });
|
|
236
|
-
return exports2;
|
|
293
|
+
}
|
|
294
|
+
class VitestRunner extends ViteNodeRunner {
|
|
295
|
+
constructor(options) {
|
|
296
|
+
super(options);
|
|
297
|
+
this.options = options;
|
|
298
|
+
options.requestStubs = options.requestStubs || {
|
|
299
|
+
"/@vite/client": {
|
|
300
|
+
injectQuery: (id) => id,
|
|
301
|
+
createHotContext() {
|
|
302
|
+
return {
|
|
303
|
+
accept: () => {
|
|
304
|
+
},
|
|
305
|
+
prune: () => {
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
},
|
|
309
|
+
updateStyle() {
|
|
237
310
|
}
|
|
238
|
-
if (typeof mock === "function")
|
|
239
|
-
return callFunctionMock(dep, mock);
|
|
240
|
-
if (typeof mock === "string")
|
|
241
|
-
dep = mock;
|
|
242
311
|
}
|
|
243
|
-
if (callstack.includes(dep)) {
|
|
244
|
-
const cacheKey = toFilePath(dep, root);
|
|
245
|
-
if (!((_b = moduleCache.get(cacheKey)) == null ? void 0 : _b.exports))
|
|
246
|
-
throw new Error(`Circular dependency detected
|
|
247
|
-
Stack:
|
|
248
|
-
${[...callstack, dep].reverse().map((p) => `- ${p}`).join("\n")}`);
|
|
249
|
-
return moduleCache.get(cacheKey).exports;
|
|
250
|
-
}
|
|
251
|
-
return cachedRequest(dep, callstack);
|
|
252
312
|
};
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
|
|
313
|
+
this.mocker = createMocker(this.root, options.mockMap);
|
|
314
|
+
}
|
|
315
|
+
prepareContext(context) {
|
|
316
|
+
const suite = this.mocker.getSuiteFilepath();
|
|
317
|
+
const mockMap = this.options.mockMap;
|
|
318
|
+
const request = context.__vite_ssr_import__;
|
|
319
|
+
const callFunctionMock = async (dep, mock) => {
|
|
320
|
+
var _a;
|
|
321
|
+
const name = `${dep}__mock`;
|
|
322
|
+
const cached = (_a = this.moduleCache.get(name)) == null ? void 0 : _a.exports;
|
|
323
|
+
if (cached)
|
|
324
|
+
return cached;
|
|
325
|
+
const exports = await mock();
|
|
326
|
+
this.setCache(name, { exports });
|
|
327
|
+
return exports;
|
|
328
|
+
};
|
|
329
|
+
const requestWithMock = async (dep) => {
|
|
330
|
+
var _a;
|
|
331
|
+
const mocks = mockMap[suite || ""] || {};
|
|
332
|
+
const mock = mocks[this.mocker.resolveDependency(dep)];
|
|
333
|
+
if (mock === null) {
|
|
334
|
+
const mockedKey = `${dep}__mock`;
|
|
335
|
+
const cache = this.moduleCache.get(mockedKey);
|
|
336
|
+
if (cache == null ? void 0 : cache.exports)
|
|
337
|
+
return cache.exports;
|
|
338
|
+
const cacheKey = toFilePath(dep, this.root);
|
|
339
|
+
const mod = ((_a = this.moduleCache.get(cacheKey)) == null ? void 0 : _a.exports) || await request(dep);
|
|
340
|
+
const exports = this.mocker.mockObject(mod);
|
|
341
|
+
this.setCache(mockedKey, { exports });
|
|
342
|
+
return exports;
|
|
274
343
|
}
|
|
344
|
+
if (typeof mock === "function")
|
|
345
|
+
return callFunctionMock(dep, mock);
|
|
346
|
+
if (typeof mock === "string")
|
|
347
|
+
dep = mock;
|
|
348
|
+
return request(dep);
|
|
275
349
|
};
|
|
276
350
|
const importActual = (path, nmName) => {
|
|
277
|
-
return request(getActualPath(path, nmName)
|
|
351
|
+
return request(this.mocker.getActualPath(path, nmName));
|
|
278
352
|
};
|
|
279
|
-
async
|
|
353
|
+
const importMock = async (path, nmName) => {
|
|
280
354
|
if (!suite)
|
|
281
355
|
throw new Error("You can import mock only inside of a running test");
|
|
282
|
-
const mock = (mockMap[suite] || {})[path] || resolveMockPath(path, root, nmName);
|
|
356
|
+
const mock = (mockMap[suite] || {})[path] || this.mocker.resolveMockPath(path, this.root, nmName);
|
|
283
357
|
if (mock === null) {
|
|
284
|
-
const
|
|
285
|
-
const mod = await request(
|
|
286
|
-
return mockObject(mod);
|
|
358
|
+
const fsPath = this.mocker.getActualPath(path, nmName);
|
|
359
|
+
const mod = await request(fsPath);
|
|
360
|
+
return this.mocker.mockObject(mod);
|
|
287
361
|
}
|
|
288
362
|
if (typeof mock === "function")
|
|
289
363
|
return callFunctionMock(path, mock);
|
|
290
|
-
return
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
__vite_ssr_import__:
|
|
294
|
-
__vite_ssr_dynamic_import__:
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
__vite_ssr_import_meta__: { url },
|
|
298
|
-
__vitest__mock__: mockPath,
|
|
299
|
-
__vitest__unmock__: unmockPath,
|
|
364
|
+
return requestWithMock(mock);
|
|
365
|
+
};
|
|
366
|
+
return Object.assign(context, {
|
|
367
|
+
__vite_ssr_import__: requestWithMock,
|
|
368
|
+
__vite_ssr_dynamic_import__: requestWithMock,
|
|
369
|
+
__vitest__mock__: this.mocker.mockPath,
|
|
370
|
+
__vitest__unmock__: this.mocker.unmockPath,
|
|
300
371
|
__vitest__importActual__: importActual,
|
|
301
372
|
__vitest__importMock__: importMock,
|
|
302
|
-
__vitest__clearMocks__: clearMocks
|
|
303
|
-
require: createRequire(url),
|
|
304
|
-
exports,
|
|
305
|
-
module: moduleProxy,
|
|
306
|
-
__filename,
|
|
307
|
-
__dirname: dirname(__filename)
|
|
308
|
-
};
|
|
309
|
-
const fn = vm.runInThisContext(`async (${Object.keys(context).join(",")})=>{{${transformed}
|
|
310
|
-
}}`, {
|
|
311
|
-
filename: fsPath,
|
|
312
|
-
lineOffset: 0
|
|
373
|
+
__vitest__clearMocks__: this.mocker.clearMocks
|
|
313
374
|
});
|
|
314
|
-
await fn(...Object.values(context));
|
|
315
|
-
return exports;
|
|
316
|
-
}
|
|
317
|
-
function setCache(id, mod) {
|
|
318
|
-
if (!moduleCache.has(id))
|
|
319
|
-
moduleCache.set(id, mod);
|
|
320
|
-
else
|
|
321
|
-
Object.assign(moduleCache.get(id), mod);
|
|
322
|
-
}
|
|
323
|
-
async function cachedRequest(rawId, callstack) {
|
|
324
|
-
var _a, _b;
|
|
325
|
-
const id = normalizeId(rawId, base);
|
|
326
|
-
const fsPath = toFilePath(id, root);
|
|
327
|
-
if ((_a = moduleCache.get(fsPath)) == null ? void 0 : _a.promise)
|
|
328
|
-
return (_b = moduleCache.get(fsPath)) == null ? void 0 : _b.promise;
|
|
329
|
-
const promise = directRequest(id, fsPath, callstack);
|
|
330
|
-
setCache(fsPath, { promise });
|
|
331
|
-
return await promise;
|
|
332
|
-
}
|
|
333
|
-
function exportAll(exports, sourceModule) {
|
|
334
|
-
for (const key in sourceModule) {
|
|
335
|
-
if (key !== "default") {
|
|
336
|
-
try {
|
|
337
|
-
Object.defineProperty(exports, key, {
|
|
338
|
-
enumerable: true,
|
|
339
|
-
configurable: true,
|
|
340
|
-
get() {
|
|
341
|
-
return sourceModule[key];
|
|
342
|
-
}
|
|
343
|
-
});
|
|
344
|
-
} catch (_err) {
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
375
|
}
|
|
349
376
|
}
|
|
350
377
|
|
|
@@ -367,16 +394,13 @@ async function startViteNode(ctx) {
|
|
|
367
394
|
files: [
|
|
368
395
|
resolve(distDir, "entry.js")
|
|
369
396
|
],
|
|
370
|
-
|
|
397
|
+
fetchModule(id) {
|
|
371
398
|
return rpc().fetch(id);
|
|
372
399
|
},
|
|
373
400
|
moduleCache,
|
|
374
401
|
mockMap,
|
|
402
|
+
interpretDefault: config.deps.interpretDefault ?? true,
|
|
375
403
|
root: config.root,
|
|
376
|
-
depsInline: config.depsInline,
|
|
377
|
-
depsExternal: config.depsExternal,
|
|
378
|
-
fallbackCJS: config.fallbackCJS,
|
|
379
|
-
interpretDefault: config.interpretDefault,
|
|
380
404
|
base: config.base
|
|
381
405
|
}))[0];
|
|
382
406
|
_viteNode = { run: run2, collect: collect2 };
|
|
@@ -391,9 +415,8 @@ function init(ctx) {
|
|
|
391
415
|
ctx,
|
|
392
416
|
moduleCache,
|
|
393
417
|
config,
|
|
394
|
-
rpc: createBirpc({
|
|
395
|
-
|
|
396
|
-
eventNames: ["onUserLog", "onCollected", "onWorkerExit"],
|
|
418
|
+
rpc: createBirpc({}, {
|
|
419
|
+
eventNames: ["onUserConsoleLog", "onCollected", "onWorkerExit"],
|
|
397
420
|
post(v) {
|
|
398
421
|
port.postMessage(v);
|
|
399
422
|
},
|
|
@@ -418,4 +441,4 @@ async function run(ctx) {
|
|
|
418
441
|
}
|
|
419
442
|
|
|
420
443
|
export { collect, run };
|
|
421
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyLmpzIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMvcGF0aC50cyIsIi4uL3NyYy9ub2RlL21vY2tlci50cyIsIi4uL3NyYy9ub2RlL2V4ZWN1dGUudHMiLCIuLi9zcmMvcnVudGltZS93b3JrZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkOiBzdHJpbmcsIGJhc2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoYmFzZSAmJiBpZC5zdGFydHNXaXRoKGJhc2UpKVxuICAgIGlkID0gYC8ke2lkLnNsaWNlKGJhc2UubGVuZ3RoKX1gXG5cbiAgcmV0dXJuIGlkXG4gICAgLnJlcGxhY2UoL15cXC9AaWRcXC9fX3gwMF9fLywgJ1xcMCcpIC8vIHZpcnR1YWwgbW9kdWxlcyBzdGFydCB3aXRoIGBcXDBgXG4gICAgLnJlcGxhY2UoL15cXC9AaWRcXC8vLCAnJylcbiAgICAucmVwbGFjZSgvXl9fdml0ZS1icm93c2VyLWV4dGVybmFsOi8sICcnKVxuICAgIC5yZXBsYWNlKC9ebm9kZTovLCAnJylcbiAgICAucmVwbGFjZSgvWz8mXXY9XFx3Ky8sICc/JykgLy8gcmVtb3ZlID92PSBxdWVyeVxuICAgIC5yZXBsYWNlKC9cXD8kLywgJycpIC8vIHJlbW92ZSBlbmQgcXVlcnkgbWFya1xufVxuIiwiaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZGRpclN5bmMgfSBmcm9tICdmcydcbmltcG9ydCB7IGlzTm9kZUJ1aWx0aW4gfSBmcm9tICdtbGx5J1xuaW1wb3J0IHsgYmFzZW5hbWUsIGRpcm5hbWUsIGpvaW4sIHJlc29sdmUgfSBmcm9tICdwYXRoZSdcbmltcG9ydCB7IHNwaWVzLCBzcHlPbiB9IGZyb20gJy4uL2ludGVncmF0aW9ucy9qZXN0LW1vY2snXG5pbXBvcnQgeyBtZXJnZVNsYXNoZXMsIG5vcm1hbGl6ZUlkIH0gZnJvbSAnLi4vdXRpbHMnXG5cbmV4cG9ydCB0eXBlIFN1aXRlTW9ja3MgPSBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsIHwgKCgpID0+IGFueSk+PlxuXG5mdW5jdGlvbiByZXNvbHZlTW9ja1BhdGgobW9ja1BhdGg6IHN0cmluZywgcm9vdDogc3RyaW5nLCBleHRlcm5hbDogc3RyaW5nIHwgbnVsbCkge1xuICBjb25zdCBwYXRoID0gbm9ybWFsaXplSWQoZXh0ZXJuYWwgfHwgbW9ja1BhdGgpXG5cbiAgLy8gaXQncyBhIG5vZGVfbW9kdWxlIGFsaWFzXG4gIC8vIGFsbCBtb2NrcyBzaG91bGQgYmUgaW5zaWRlIDxyb290Pi9fX21vY2tzX19cbiAgaWYgKGV4dGVybmFsIHx8IGlzTm9kZUJ1aWx0aW4obW9ja1BhdGgpKSB7XG4gICAgY29uc3QgbW9ja0Rpcm5hbWUgPSBkaXJuYW1lKHBhdGgpIC8vIGZvciBuZXN0ZWQgbW9ja3M6IEB2dWV1c2UvaW50ZWdyYXRpb24vdXNlSnd0XG4gICAgY29uc3QgYmFzZUZpbGVuYW1lID0gYmFzZW5hbWUocGF0aClcbiAgICBjb25zdCBtb2NrRm9sZGVyID0gcmVzb2x2ZShyb290LCAnX19tb2Nrc19fJywgbW9ja0Rpcm5hbWUpXG5cbiAgICBpZiAoIWV4aXN0c1N5bmMobW9ja0ZvbGRlcikpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBmaWxlcyA9IHJlYWRkaXJTeW5jKG1vY2tGb2xkZXIpXG5cbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGNvbnN0IFtiYXNlbmFtZV0gPSBmaWxlLnNwbGl0KCcuJylcbiAgICAgIGlmIChiYXNlbmFtZSA9PT0gYmFzZUZpbGVuYW1lKVxuICAgICAgICByZXR1cm4gcmVzb2x2ZShtb2NrRm9sZGVyLCBmaWxlKS5yZXBsYWNlKHJvb3QsICcnKVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBkaXIgPSBkaXJuYW1lKHBhdGgpXG4gIGNvbnN0IGJhc2VJZCA9IGJhc2VuYW1lKHBhdGgpXG4gIGNvbnN0IGZ1bGxQYXRoID0gcmVzb2x2ZShkaXIsICdfX21vY2tzX18nLCBiYXNlSWQpXG4gIHJldHVybiBleGlzdHNTeW5jKGZ1bGxQYXRoKSA/IGZ1bGxQYXRoLnJlcGxhY2Uocm9vdCwgJycpIDogbnVsbFxufVxuXG5mdW5jdGlvbiBnZXRPYmplY3RUeXBlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkodmFsdWUpLnNsaWNlKDgsIC0xKVxufVxuXG5mdW5jdGlvbiBtb2NrUHJvdG90eXBlKHByb3RvOiBhbnkpIHtcbiAgaWYgKCFwcm90bykgcmV0dXJuIG51bGxcblxuICBjb25zdCBuZXdQcm90bzogYW55ID0ge31cblxuICBjb25zdCBwcm90b0Rlc2NyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocHJvdG8pXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gIGZvciAoY29uc3QgZCBpbiBwcm90b0Rlc2NyKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld1Byb3RvLCBkLCBwcm90b0Rlc2NyW2RdKVxuXG4gICAgaWYgKHR5cGVvZiBwcm90b0Rlc2NyW2RdLnZhbHVlID09PSAnZnVuY3Rpb24nKVxuICAgICAgc3B5T24obmV3UHJvdG8sIGQpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSlcbiAgfVxuXG4gIHJldHVybiBuZXdQcm90b1xufVxuXG5mdW5jdGlvbiBtb2NrT2JqZWN0KG9iajogYW55KSB7XG4gIGNvbnN0IHR5cGUgPSBnZXRPYmplY3RUeXBlKG9iailcblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKVxuICAgIHJldHVybiBbXVxuICBlbHNlIGlmICh0eXBlICE9PSAnT2JqZWN0JyAmJiB0eXBlICE9PSAnTW9kdWxlJylcbiAgICByZXR1cm4gb2JqXG5cbiAgY29uc3QgbmV3T2JqID0geyAuLi5vYmogfVxuXG4gIGNvbnN0IHByb3RvID0gbW9ja1Byb3RvdHlwZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSlcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG5ld09iaiwgcHJvdG8pXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gIGZvciAoY29uc3QgayBpbiBvYmopIHtcbiAgICBuZXdPYmpba10gPSBtb2NrT2JqZWN0KG9ialtrXSlcbiAgICBjb25zdCB0eXBlID0gZ2V0T2JqZWN0VHlwZShvYmpba10pXG5cbiAgICBpZiAodHlwZS5pbmNsdWRlcygnRnVuY3Rpb24nKSAmJiAhb2JqW2tdLl9faXNTcHkpIHtcbiAgICAgIHNweU9uKG5ld09iaiwgaykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld09ialtrXSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDAgfSkgLy8gdGlueXNweSByZXRhaW5zIGxlbmd0aCwgYnV0IGplc3QgZG9lc250XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdPYmpcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tlcihyb290OiBzdHJpbmcsIG1vY2tNYXA6IFN1aXRlTW9ja3MpIHtcbiAgZnVuY3Rpb24gZ2V0U3VpdGVGaWxlcGF0aCgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXz8uZmlsZXBhdGhcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFjdHVhbFBhdGgocGF0aDogc3RyaW5nLCBleHRlcm5hbDogc3RyaW5nKSB7XG4gICAgaWYgKGV4dGVybmFsKVxuICAgICAgcmV0dXJuIG1lcmdlU2xhc2hlcyhgL0Bmcy8ke3BhdGh9YClcblxuICAgIHJldHVybiBub3JtYWxpemVJZChwYXRoLnJlcGxhY2Uocm9vdCwgJycpKVxuICB9XG5cbiAgZnVuY3Rpb24gdW5tb2NrUGF0aChwYXRoOiBzdHJpbmcsIG5tTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3VpdGVmaWxlID0gZ2V0U3VpdGVGaWxlcGF0aCgpXG5cbiAgICBpZiAoc3VpdGVmaWxlKSB7XG4gICAgICBjb25zdCBmc1BhdGggPSBnZXRBY3R1YWxQYXRoKHBhdGgsIG5tTmFtZSlcbiAgICAgIG1vY2tNYXBbc3VpdGVmaWxlXSA/Pz0ge31cbiAgICAgIGRlbGV0ZSBtb2NrTWFwW3N1aXRlZmlsZV1bZnNQYXRoXVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1vY2tQYXRoKHBhdGg6IHN0cmluZywgbm1OYW1lOiBzdHJpbmcsIGZhY3Rvcnk/OiAoKSA9PiBhbnkpIHtcbiAgICBjb25zdCBzdWl0ZWZpbGUgPSBnZXRTdWl0ZUZpbGVwYXRoKClcblxuICAgIGlmIChzdWl0ZWZpbGUpIHtcbiAgICAgIGNvbnN0IGZzUGF0aCA9IGdldEFjdHVhbFBhdGgocGF0aCwgbm1OYW1lKVxuICAgICAgbW9ja01hcFtzdWl0ZWZpbGVdID8/PSB7fVxuICAgICAgbW9ja01hcFtzdWl0ZWZpbGVdW2ZzUGF0aF0gPSBmYWN0b3J5IHx8IHJlc29sdmVNb2NrUGF0aChwYXRoLCByb290LCBubU5hbWUpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJNb2Nrcyh7IGNsZWFyTW9ja3MsIG1vY2tSZXNldCwgcmVzdG9yZU1vY2tzIH06IHsgY2xlYXJNb2NrczogYm9vbGVhbjsgbW9ja1Jlc2V0OiBib29sZWFuOyByZXN0b3JlTW9ja3M6IGJvb2xlYW4gfSkge1xuICAgIGlmICghY2xlYXJNb2NrcyAmJiAhbW9ja1Jlc2V0ICYmICFyZXN0b3JlTW9ja3MpXG4gICAgICByZXR1cm5cblxuICAgIHNwaWVzLmZvckVhY2goKHMpID0+IHtcbiAgICAgIGlmIChyZXN0b3JlTW9ja3MpXG4gICAgICAgIHMubW9ja1Jlc3RvcmUoKVxuICAgICAgZWxzZSBpZiAobW9ja1Jlc2V0KVxuICAgICAgICBzLm1vY2tSZXNldCgpXG4gICAgICBlbHNlIGlmIChjbGVhck1vY2tzKVxuICAgICAgICBzLm1vY2tDbGVhcigpXG4gICAgfSlcbiAgfVxuXG4gIC8vIG5wbSByZXNvbHZlcyBhcyAvbm9kZV9tb2R1bGVzLCBidXQgd2Ugc3RvcmUgYXMgL0Bmcy8uLi4vbm9kZV9tb2R1bGVzXG4gIGZ1bmN0aW9uIHJlc29sdmVEZXBlbmRlbmN5KGRlcDogc3RyaW5nKSB7XG4gICAgaWYgKGRlcC5zdGFydHNXaXRoKCcvbm9kZV9tb2R1bGVzLycpKVxuICAgICAgcmV0dXJuIG1lcmdlU2xhc2hlcyhgL0Bmcy8ke2pvaW4ocm9vdCwgZGVwKX1gKVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZUlkKGRlcClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW9ja1BhdGgsXG4gICAgdW5tb2NrUGF0aCxcbiAgICBjbGVhck1vY2tzLFxuICAgIGdldEFjdHVhbFBhdGgsXG5cbiAgICBtb2NrT2JqZWN0LFxuICAgIGdldFN1aXRlRmlsZXBhdGgsXG4gICAgcmVzb2x2ZU1vY2tQYXRoLFxuICAgIHJlc29sdmVEZXBlbmRlbmN5LFxuICB9XG59XG4iLCJpbXBvcnQgeyBidWlsdGluTW9kdWxlcywgY3JlYXRlUmVxdWlyZSB9IGZyb20gJ21vZHVsZSdcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGgsIHBhdGhUb0ZpbGVVUkwgfSBmcm9tICd1cmwnXG5pbXBvcnQgdm0gZnJvbSAndm0nXG5pbXBvcnQgeyBkaXJuYW1lLCByZXNvbHZlIH0gZnJvbSAncGF0aGUnXG5pbXBvcnQgdHlwZSB7IEZldGNoRnVuY3Rpb24sIE1vZHVsZUNhY2hlLCBSZXNvbHZlZENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgbm9ybWFsaXplSWQsIHNsYXNoLCB0b0ZpbGVQYXRoIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFN1aXRlTW9ja3MgfSBmcm9tICcuL21vY2tlcidcbmltcG9ydCB7IGNyZWF0ZU1vY2tlciB9IGZyb20gJy4vbW9ja2VyJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGVPcHRpb25zIGV4dGVuZHMgUGljazxSZXNvbHZlZENvbmZpZywgJ2RlcHNJbmxpbmUnIHwgJ2RlcHNFeHRlcm5hbCcgfCAnZmFsbGJhY2tDSlMnIHwgJ2Jhc2UnPiB7XG4gIHJvb3Q6IHN0cmluZ1xuICBmaWxlczogc3RyaW5nW11cbiAgZmV0Y2g6IEZldGNoRnVuY3Rpb25cbiAgaW50ZXJwcmV0RGVmYXVsdDogYm9vbGVhblxuICBtb2R1bGVDYWNoZTogTWFwPHN0cmluZywgTW9kdWxlQ2FjaGU+XG4gIG1vY2tNYXA6IFN1aXRlTW9ja3Ncbn1cblxuZXhwb3J0IGNvbnN0IHN0dWJSZXF1ZXN0czogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcbiAgJy9Adml0ZS9jbGllbnQnOiB7XG4gICAgaW5qZWN0UXVlcnk6IChpZDogc3RyaW5nKSA9PiBpZCxcbiAgICBjcmVhdGVIb3RDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWNjZXB0OiAoKSA9PiB7fSxcbiAgICAgICAgcHJ1bmU6ICgpID0+IHt9LFxuICAgICAgfVxuICAgIH0sXG4gICAgdXBkYXRlU3R5bGUoKSB7fSxcbiAgfSxcbn1cblxuZnVuY3Rpb24gaGFzTmVzdGVkRGVmYXVsdCh0YXJnZXQ6IGFueSkge1xuICByZXR1cm4gJ19fZXNNb2R1bGUnIGluIHRhcmdldCAmJiB0YXJnZXQuX19lc01vZHVsZSAmJiAnZGVmYXVsdCcgaW4gdGFyZ2V0LmRlZmF1bHRcbn1cblxuZnVuY3Rpb24gcHJveHlNZXRob2QobmFtZTogJ2dldCcgfCAnc2V0JyB8ICdoYXMnIHwgJ2RlbGV0ZVByb3BlcnR5JywgaXNOZXN0ZWQ6IGJvb2xlYW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBrZXk6IHN0cmluZyB8IHN5bWJvbCwgLi4uYXJnczogW2FueT8sIGFueT9dKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdFtuYW1lXSh0YXJnZXQsIGtleSwgLi4uYXJncylcbiAgICBpZiAoKGlzTmVzdGVkICYmIGtleSA9PT0gJ2RlZmF1bHQnKSB8fCAhcmVzdWx0KVxuICAgICAgcmV0dXJuIFJlZmxlY3RbbmFtZV0odGFyZ2V0LmRlZmF1bHQsIGtleSwgLi4uYXJncylcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGludGVycHJldGVkSW1wb3J0KHBhdGg6IHN0cmluZywgaW50ZXJwcmV0RGVmYXVsdDogYm9vbGVhbikge1xuICBjb25zdCBtb2QgPSBhd2FpdCBpbXBvcnQocGF0aClcblxuICBpZiAoaW50ZXJwcmV0RGVmYXVsdCAmJiAnZGVmYXVsdCcgaW4gbW9kKSB7XG4gICAgY29uc3QgaXNOZXN0ZWQgPSBoYXNOZXN0ZWREZWZhdWx0KG1vZClcbiAgICByZXR1cm4gbmV3IFByb3h5KG1vZCwge1xuICAgICAgZ2V0OiBwcm94eU1ldGhvZCgnZ2V0JywgaXNOZXN0ZWQpLFxuICAgICAgc2V0OiBwcm94eU1ldGhvZCgnc2V0JywgaXNOZXN0ZWQpLFxuICAgICAgaGFzOiBwcm94eU1ldGhvZCgnaGFzJywgaXNOZXN0ZWQpLFxuICAgICAgZGVsZXRlUHJvcGVydHk6IHByb3h5TWV0aG9kKCdkZWxldGVQcm9wZXJ0eScsIGlzTmVzdGVkKSxcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIG1vZFxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUluVml0ZU5vZGUob3B0aW9uczogRXhlY3V0ZU9wdGlvbnMpIHtcbiAgY29uc3QgeyBtb2R1bGVDYWNoZSwgcm9vdCwgZmlsZXMsIGZldGNoLCBtb2NrTWFwLCBiYXNlIH0gPSBvcHRpb25zXG5cbiAgY29uc3QgZXh0ZXJuYWxDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmcgfCBQcm9taXNlPGZhbHNlIHwgc3RyaW5nPj4oKVxuICBidWlsdGluTW9kdWxlcy5mb3JFYWNoKG0gPT4gZXh0ZXJuYWxDYWNoZS5zZXQobSwgbSkpXG5cbiAgY29uc3Qge1xuICAgIGdldEFjdHVhbFBhdGgsXG4gICAgZ2V0U3VpdGVGaWxlcGF0aCxcbiAgICBtb2NrT2JqZWN0LFxuICAgIG1vY2tQYXRoLFxuICAgIGNsZWFyTW9ja3MsXG4gICAgdW5tb2NrUGF0aCxcbiAgICByZXNvbHZlTW9ja1BhdGgsXG4gICAgcmVzb2x2ZURlcGVuZGVuY3ksXG4gIH0gPSBjcmVhdGVNb2NrZXIocm9vdCwgbW9ja01hcClcblxuICBjb25zdCByZXN1bHQgPSBbXVxuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpXG4gICAgcmVzdWx0LnB1c2goYXdhaXQgY2FjaGVkUmVxdWVzdChgL0Bmcy8ke3NsYXNoKHJlc29sdmUoZmlsZSkpfWAsIFtdKSlcbiAgcmV0dXJuIHJlc3VsdFxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNhbGxGdW5jdGlvbk1vY2soZGVwOiBzdHJpbmcsIG1vY2s6ICgpID0+IGFueSkge1xuICAgIGNvbnN0IG5hbWUgPSBgJHtkZXB9X19tb2NrYFxuICAgIGNvbnN0IGNhY2hlZCA9IG1vZHVsZUNhY2hlLmdldChuYW1lKT8uZXhwb3J0c1xuICAgIGlmIChjYWNoZWQpXG4gICAgICByZXR1cm4gY2FjaGVkXG4gICAgY29uc3QgZXhwb3J0cyA9IGF3YWl0IG1vY2soKVxuICAgIHNldENhY2hlKG5hbWUsIHsgZXhwb3J0cyB9KVxuICAgIHJldHVybiBleHBvcnRzXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkaXJlY3RSZXF1ZXN0KGlkOiBzdHJpbmcsIGZzUGF0aDogc3RyaW5nLCBjYWxsc3RhY2s6IHN0cmluZ1tdKSB7XG4gICAgY2FsbHN0YWNrID0gWy4uLmNhbGxzdGFjaywgaWRdXG4gICAgY29uc3Qgc3VpdGUgPSBnZXRTdWl0ZUZpbGVwYXRoKClcbiAgICBjb25zdCByZXF1ZXN0ID0gYXN5bmMoZGVwOiBzdHJpbmcsIGNhbk1vY2sgPSB0cnVlKSA9PiB7XG4gICAgICBpZiAoY2FuTW9jaykge1xuICAgICAgICBjb25zdCBtb2NrcyA9IG1vY2tNYXBbc3VpdGUgfHwgJyddIHx8IHt9XG4gICAgICAgIGNvbnN0IG1vY2sgPSBtb2Nrc1tyZXNvbHZlRGVwZW5kZW5jeShkZXApXVxuICAgICAgICBpZiAobW9jayA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IG1vY2tlZEtleSA9IGAke2RlcH1fX21vY2tgXG4gICAgICAgICAgY29uc3QgY2FjaGUgPSBtb2R1bGVDYWNoZS5nZXQobW9ja2VkS2V5KVxuICAgICAgICAgIGlmIChjYWNoZT8uZXhwb3J0cylcbiAgICAgICAgICAgIHJldHVybiBjYWNoZS5leHBvcnRzXG4gICAgICAgICAgY29uc3QgY2FjaGVLZXkgPSB0b0ZpbGVQYXRoKGRlcCwgcm9vdClcbiAgICAgICAgICBjb25zdCBtb2QgPSBtb2R1bGVDYWNoZS5nZXQoY2FjaGVLZXkpPy5leHBvcnRzIHx8IGF3YWl0IGNhY2hlZFJlcXVlc3QoZGVwLCBjYWxsc3RhY2spXG4gICAgICAgICAgY29uc3QgZXhwb3J0cyA9IG1vY2tPYmplY3QobW9kKVxuICAgICAgICAgIHNldENhY2hlKG1vY2tlZEtleSwgeyBleHBvcnRzIH0pXG4gICAgICAgICAgcmV0dXJuIGV4cG9ydHNcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG1vY2sgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgcmV0dXJuIGNhbGxGdW5jdGlvbk1vY2soZGVwLCBtb2NrKVxuICAgICAgICBpZiAodHlwZW9mIG1vY2sgPT09ICdzdHJpbmcnKVxuICAgICAgICAgIGRlcCA9IG1vY2tcbiAgICAgIH1cbiAgICAgIGlmIChjYWxsc3RhY2suaW5jbHVkZXMoZGVwKSkge1xuICAgICAgICBjb25zdCBjYWNoZUtleSA9IHRvRmlsZVBhdGgoZGVwLCByb290KVxuICAgICAgICBpZiAoIW1vZHVsZUNhY2hlLmdldChjYWNoZUtleSk/LmV4cG9ydHMpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaXJjdWxhciBkZXBlbmRlbmN5IGRldGVjdGVkXFxuU3RhY2s6XFxuJHtbLi4uY2FsbHN0YWNrLCBkZXBdLnJldmVyc2UoKS5tYXAocCA9PiBgLSAke3B9YCkuam9pbignXFxuJyl9YClcbiAgICAgICAgcmV0dXJuIG1vZHVsZUNhY2hlLmdldChjYWNoZUtleSkhLmV4cG9ydHNcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYWNoZWRSZXF1ZXN0KGRlcCwgY2FsbHN0YWNrKVxuICAgIH1cblxuICAgIGlmIChpZCBpbiBzdHViUmVxdWVzdHMpXG4gICAgICByZXR1cm4gc3R1YlJlcXVlc3RzW2lkXVxuXG4gICAgY29uc3QgeyBjb2RlOiB0cmFuc2Zvcm1lZCwgZXh0ZXJuYWxpemUgfSA9IGF3YWl0IGZldGNoKGlkKVxuICAgIGlmIChleHRlcm5hbGl6ZSkge1xuICAgICAgY29uc3QgbW9kID0gYXdhaXQgaW50ZXJwcmV0ZWRJbXBvcnQoZXh0ZXJuYWxpemUsIG9wdGlvbnMuaW50ZXJwcmV0RGVmYXVsdClcbiAgICAgIHNldENhY2hlKGZzUGF0aCwgeyBleHBvcnRzOiBtb2QgfSlcbiAgICAgIHJldHVybiBtb2RcbiAgICB9XG5cbiAgICBpZiAodHJhbnNmb3JtZWQgPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGxvYWQgJHtpZH1gKVxuXG4gICAgLy8gZGlzYW1iaWd1YXRlIHRoZSBgPFVOSVQ+Oi9gIG9uIHdpbmRvd3M6IHNlZSBub2RlanMvbm9kZSMzMTcxMFxuICAgIGNvbnN0IHVybCA9IHBhdGhUb0ZpbGVVUkwoZnNQYXRoKS5ocmVmXG4gICAgY29uc3QgZXhwb3J0czogYW55ID0ge31cblxuICAgIHNldENhY2hlKGZzUGF0aCwgeyBjb2RlOiB0cmFuc2Zvcm1lZCwgZXhwb3J0cyB9KVxuXG4gICAgY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgodXJsKVxuICAgIGNvbnN0IG1vZHVsZVByb3h5ID0ge1xuICAgICAgc2V0IGV4cG9ydHModmFsdWUpIHtcbiAgICAgICAgZXhwb3J0QWxsKGV4cG9ydHMsIHZhbHVlKVxuICAgICAgICBleHBvcnRzLmRlZmF1bHQgPSB2YWx1ZVxuICAgICAgfSxcbiAgICAgIGdldCBleHBvcnRzKCkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5kZWZhdWx0XG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IGltcG9ydEFjdHVhbCA9IChwYXRoOiBzdHJpbmcsIG5tTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gcmVxdWVzdChnZXRBY3R1YWxQYXRoKHBhdGgsIG5tTmFtZSksIGZhbHNlKVxuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGltcG9ydE1vY2socGF0aDogc3RyaW5nLCBubU5hbWU6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgICBpZiAoIXN1aXRlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW4gaW1wb3J0IG1vY2sgb25seSBpbnNpZGUgb2YgYSBydW5uaW5nIHRlc3QnKVxuXG4gICAgICBjb25zdCBtb2NrID0gKG1vY2tNYXBbc3VpdGVdIHx8IHt9KVtwYXRoXSB8fCByZXNvbHZlTW9ja1BhdGgocGF0aCwgcm9vdCwgbm1OYW1lKVxuICAgICAgaWYgKG1vY2sgPT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZnNQYXRoID0gZ2V0QWN0dWFsUGF0aChwYXRoLCBubU5hbWUpXG4gICAgICAgIGNvbnN0IG1vZCA9IGF3YWl0IHJlcXVlc3QoZnNQYXRoLCBmYWxzZSlcbiAgICAgICAgcmV0dXJuIG1vY2tPYmplY3QobW9kKVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBtb2NrID09PSAnZnVuY3Rpb24nKVxuICAgICAgICByZXR1cm4gY2FsbEZ1bmN0aW9uTW9jayhwYXRoLCBtb2NrKVxuICAgICAgcmV0dXJuIHJlcXVlc3QobW9jaywgdHJ1ZSlcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgLy8gZXNtIHRyYW5zZm9ybWVkIGJ5IFZpdGVcbiAgICAgIF9fdml0ZV9zc3JfaW1wb3J0X186IHJlcXVlc3QsXG4gICAgICBfX3ZpdGVfc3NyX2R5bmFtaWNfaW1wb3J0X186IHJlcXVlc3QsXG4gICAgICBfX3ZpdGVfc3NyX2V4cG9ydHNfXzogZXhwb3J0cyxcbiAgICAgIF9fdml0ZV9zc3JfZXhwb3J0QWxsX186IChvYmo6IGFueSkgPT4gZXhwb3J0QWxsKGV4cG9ydHMsIG9iaiksXG4gICAgICBfX3ZpdGVfc3NyX2ltcG9ydF9tZXRhX186IHsgdXJsIH0sXG5cbiAgICAgIC8vIHZpdGVzdC5tb2NrIEFQSVxuICAgICAgX192aXRlc3RfX21vY2tfXzogbW9ja1BhdGgsXG4gICAgICBfX3ZpdGVzdF9fdW5tb2NrX186IHVubW9ja1BhdGgsXG4gICAgICBfX3ZpdGVzdF9faW1wb3J0QWN0dWFsX186IGltcG9ydEFjdHVhbCxcbiAgICAgIF9fdml0ZXN0X19pbXBvcnRNb2NrX186IGltcG9ydE1vY2ssXG4gICAgICAvLyBzcGllcyBmcm9tICdqZXN0LW1vY2snIGFyZSBkaWZmZXJlbnQgaW5zaWRlIHN1aXRlcyBhbmQgZXhlY3V0ZSxcbiAgICAgIC8vIHNvIHdlZSBuZWVkIHRvIGNhbGwgdGhpcyB0d2ljZSAtIGluc2lkZSBzdWl0ZSBhbmQgaGVyZVxuICAgICAgX192aXRlc3RfX2NsZWFyTW9ja3NfXzogY2xlYXJNb2NrcyxcblxuICAgICAgLy8gY2pzIGNvbXBhY3RcbiAgICAgIHJlcXVpcmU6IGNyZWF0ZVJlcXVpcmUodXJsKSxcbiAgICAgIGV4cG9ydHMsXG4gICAgICBtb2R1bGU6IG1vZHVsZVByb3h5LFxuICAgICAgX19maWxlbmFtZSxcbiAgICAgIF9fZGlybmFtZTogZGlybmFtZShfX2ZpbGVuYW1lKSxcbiAgICB9XG5cbiAgICBjb25zdCBmbiA9IHZtLnJ1bkluVGhpc0NvbnRleHQoYGFzeW5jICgke09iamVjdC5rZXlzKGNvbnRleHQpLmpvaW4oJywnKX0pPT57eyR7dHJhbnNmb3JtZWR9XFxufX1gLCB7XG4gICAgICBmaWxlbmFtZTogZnNQYXRoLFxuICAgICAgbGluZU9mZnNldDogMCxcbiAgICB9KVxuICAgIGF3YWl0IGZuKC4uLk9iamVjdC52YWx1ZXMoY29udGV4dCkpXG5cbiAgICByZXR1cm4gZXhwb3J0c1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0Q2FjaGUoaWQ6IHN0cmluZywgbW9kOiBQYXJ0aWFsPE1vZHVsZUNhY2hlPikge1xuICAgIGlmICghbW9kdWxlQ2FjaGUuaGFzKGlkKSlcbiAgICAgIG1vZHVsZUNhY2hlLnNldChpZCwgbW9kKVxuICAgIGVsc2VcbiAgICAgIE9iamVjdC5hc3NpZ24obW9kdWxlQ2FjaGUuZ2V0KGlkKSwgbW9kKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gY2FjaGVkUmVxdWVzdChyYXdJZDogc3RyaW5nLCBjYWxsc3RhY2s6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgaWQgPSBub3JtYWxpemVJZChyYXdJZCwgYmFzZSlcbiAgICBjb25zdCBmc1BhdGggPSB0b0ZpbGVQYXRoKGlkLCByb290KVxuXG4gICAgaWYgKG1vZHVsZUNhY2hlLmdldChmc1BhdGgpPy5wcm9taXNlKVxuICAgICAgcmV0dXJuIG1vZHVsZUNhY2hlLmdldChmc1BhdGgpPy5wcm9taXNlXG5cbiAgICBjb25zdCBwcm9taXNlID0gZGlyZWN0UmVxdWVzdChpZCwgZnNQYXRoLCBjYWxsc3RhY2spXG4gICAgc2V0Q2FjaGUoZnNQYXRoLCB7IHByb21pc2UgfSlcblxuICAgIHJldHVybiBhd2FpdCBwcm9taXNlXG4gIH1cblxuICBmdW5jdGlvbiBleHBvcnRBbGwoZXhwb3J0czogYW55LCBzb3VyY2VNb2R1bGU6IGFueSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgIGZvciAoY29uc3Qga2V5IGluIHNvdXJjZU1vZHVsZSkge1xuICAgICAgaWYgKGtleSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGdldCgpIHsgcmV0dXJuIHNvdXJjZU1vZHVsZVtrZXldIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2VycikgeyB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aGUnXG5pbXBvcnQgdHlwZSB7IEJpcnBjUmV0dXJuIH0gZnJvbSAnYmlycGMnXG5pbXBvcnQgeyBjcmVhdGVCaXJwYyB9IGZyb20gJ2JpcnBjJ1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVDYWNoZSwgUmVzb2x2ZWRDb25maWcsIFRlc3QsIFdvcmtlckNvbnRleHQsIFdvcmtlclJQQyB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgZGlzdERpciB9IGZyb20gJy4uL2NvbnN0YW50cydcbmltcG9ydCB7IGV4ZWN1dGVJblZpdGVOb2RlIH0gZnJvbSAnLi4vbm9kZS9leGVjdXRlJ1xuaW1wb3J0IHsgcnBjIH0gZnJvbSAnLi9ycGMnXG5cbmxldCBfdml0ZU5vZGU6IHtcbiAgcnVuOiAoZmlsZXM6IHN0cmluZ1tdLCBjb25maWc6IFJlc29sdmVkQ29uZmlnKSA9PiBQcm9taXNlPHZvaWQ+XG4gIGNvbGxlY3Q6IChmaWxlczogc3RyaW5nW10sIGNvbmZpZzogUmVzb2x2ZWRDb25maWcpID0+IFByb21pc2U8dm9pZD5cbn1cbmNvbnN0IG1vZHVsZUNhY2hlOiBNYXA8c3RyaW5nLCBNb2R1bGVDYWNoZT4gPSBuZXcgTWFwKClcbmNvbnN0IG1vY2tNYXAgPSB7fVxuXG5hc3luYyBmdW5jdGlvbiBzdGFydFZpdGVOb2RlKGN0eDogV29ya2VyQ29udGV4dCkge1xuICBpZiAoX3ZpdGVOb2RlKVxuICAgIHJldHVybiBfdml0ZU5vZGVcblxuICBjb25zdCBwcm9jZXNzRXhpdCA9IHByb2Nlc3MuZXhpdFxuXG4gIHByb2Nlc3Mub24oJ2JlZm9yZUV4aXQnLCAoY29kZSkgPT4ge1xuICAgIHJwYygpLm9uV29ya2VyRXhpdChjb2RlKVxuICB9KVxuXG4gIHByb2Nlc3MuZXhpdCA9IChjb2RlID0gcHJvY2Vzcy5leGl0Q29kZSB8fCAwKTogbmV2ZXIgPT4ge1xuICAgIHJwYygpLm9uV29ya2VyRXhpdChjb2RlKVxuICAgIHJldHVybiBwcm9jZXNzRXhpdChjb2RlKVxuICB9XG5cbiAgY29uc3QgeyBjb25maWcgfSA9IGN0eFxuXG4gIGNvbnN0IHsgcnVuLCBjb2xsZWN0IH0gPSAoYXdhaXQgZXhlY3V0ZUluVml0ZU5vZGUoe1xuICAgIGZpbGVzOiBbXG4gICAgICByZXNvbHZlKGRpc3REaXIsICdlbnRyeS5qcycpLFxuICAgIF0sXG4gICAgZmV0Y2goaWQpIHtcbiAgICAgIHJldHVybiBycGMoKS5mZXRjaChpZClcbiAgICB9LFxuICAgIG1vZHVsZUNhY2hlLFxuICAgIG1vY2tNYXAsXG4gICAgcm9vdDogY29uZmlnLnJvb3QsXG4gICAgZGVwc0lubGluZTogY29uZmlnLmRlcHNJbmxpbmUsXG4gICAgZGVwc0V4dGVybmFsOiBjb25maWcuZGVwc0V4dGVybmFsLFxuICAgIGZhbGxiYWNrQ0pTOiBjb25maWcuZmFsbGJhY2tDSlMsXG4gICAgaW50ZXJwcmV0RGVmYXVsdDogY29uZmlnLmludGVycHJldERlZmF1bHQsXG4gICAgYmFzZTogY29uZmlnLmJhc2UsXG4gIH0pKVswXVxuXG4gIF92aXRlTm9kZSA9IHsgcnVuLCBjb2xsZWN0IH1cblxuICByZXR1cm4gX3ZpdGVOb2RlXG59XG5cbmZ1bmN0aW9uIGluaXQoY3R4OiBXb3JrZXJDb250ZXh0KSB7XG4gIGlmIChwcm9jZXNzLl9fdml0ZXN0X3dvcmtlcl9fICYmIGN0eC5jb25maWcudGhyZWFkcyAmJiBjdHguY29uZmlnLmlzb2xhdGUpXG4gICAgdGhyb3cgbmV3IEVycm9yKGB3b3JrZXIgZm9yICR7Y3R4LmZpbGVzLmpvaW4oJywnKX0gYWxyZWFkeSBpbml0aWFsaXplZCBieSAke3Byb2Nlc3MuX192aXRlc3Rfd29ya2VyX18uY3R4LmZpbGVzLmpvaW4oJywnKX0uIFRoaXMgaXMgcHJvYmFibHkgYW4gaW50ZXJuYWwgYnVnIG9mIFZpdGVzdC5gKVxuXG4gIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdcXDAnKVxuXG4gIGNvbnN0IHsgY29uZmlnLCBwb3J0IH0gPSBjdHhcblxuICBwcm9jZXNzLl9fdml0ZXN0X3dvcmtlcl9fID0ge1xuICAgIGN0eCxcbiAgICBtb2R1bGVDYWNoZSxcbiAgICBjb25maWcsXG4gICAgcnBjOiBjcmVhdGVCaXJwYzx7fSwgV29ya2VyUlBDPih7XG4gICAgICBmdW5jdGlvbnM6IHt9LFxuICAgICAgZXZlbnROYW1lczogWydvblVzZXJMb2cnLCAnb25Db2xsZWN0ZWQnLCAnb25Xb3JrZXJFeGl0J10sXG4gICAgICBwb3N0KHYpIHsgcG9ydC5wb3N0TWVzc2FnZSh2KSB9LFxuICAgICAgb24oZm4pIHsgcG9ydC5hZGRMaXN0ZW5lcignbWVzc2FnZScsIGZuKSB9LFxuICAgIH0pLFxuICB9XG5cbiAgaWYgKGN0eC5pbnZhbGlkYXRlcylcbiAgICBjdHguaW52YWxpZGF0ZXMuZm9yRWFjaChpID0+IG1vZHVsZUNhY2hlLmRlbGV0ZShpKSlcbiAgY3R4LmZpbGVzLmZvckVhY2goaSA9PiBtb2R1bGVDYWNoZS5kZWxldGUoaSkpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb2xsZWN0KGN0eDogV29ya2VyQ29udGV4dCkge1xuICBpbml0KGN0eClcbiAgY29uc3QgeyBjb2xsZWN0IH0gPSBhd2FpdCBzdGFydFZpdGVOb2RlKGN0eClcbiAgcmV0dXJuIGNvbGxlY3QoY3R4LmZpbGVzLCBjdHguY29uZmlnKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuKGN0eDogV29ya2VyQ29udGV4dCkge1xuICBpbml0KGN0eClcbiAgY29uc3QgeyBydW4gfSA9IGF3YWl0IHN0YXJ0Vml0ZU5vZGUoY3R4KVxuICByZXR1cm4gcnVuKGN0eC5maWxlcywgY3R4LmNvbmZpZylcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBuYW1lc3BhY2UgTm9kZUpTIHtcbiAgICBpbnRlcmZhY2UgUHJvY2VzcyB7XG4gICAgICBfX3ZpdGVzdF93b3JrZXJfXzoge1xuICAgICAgICBjdHg6IFdvcmtlckNvbnRleHRcbiAgICAgICAgY29uZmlnOiBSZXNvbHZlZENvbmZpZ1xuICAgICAgICBycGM6IEJpcnBjUmV0dXJuPFdvcmtlclJQQz5cbiAgICAgICAgY3VycmVudD86IFRlc3RcbiAgICAgICAgZmlsZXBhdGg/OiBzdHJpbmdcbiAgICAgICAgbW9kdWxlQ2FjaGU6IE1hcDxzdHJpbmcsIE1vZHVsZUNhY2hlPlxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU8sU0FBUyxXQUFXLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRTtBQUN0QyxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ2pDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNqTDs7QUNKQSxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO0FBQ3RDLElBQUksbUJBQW1CLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDO0FBQ3ZELElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDO0FBQ25ELElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUM7QUFDekQsSUFBSSxlQUFlLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtB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
|
|
444
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyLmpzIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMvcGF0aC50cyIsIi4uLy4uL3ZpdGUtbm9kZS9kaXN0L2NsaWVudC5qcyIsIi4uL3NyYy9ub2RlL21vY2tlci50cyIsIi4uL3NyYy9ub2RlL2V4ZWN1dGUudHMiLCIuLi9zcmMvcnVudGltZS93b3JrZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkOiBzdHJpbmcsIGJhc2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoYmFzZSAmJiBpZC5zdGFydHNXaXRoKGJhc2UpKVxuICAgIGlkID0gYC8ke2lkLnNsaWNlKGJhc2UubGVuZ3RoKX1gXG5cbiAgcmV0dXJuIGlkXG4gICAgLnJlcGxhY2UoL15cXC9AaWRcXC9fX3gwMF9fLywgJ1xcMCcpIC8vIHZpcnR1YWwgbW9kdWxlcyBzdGFydCB3aXRoIGBcXDBgXG4gICAgLnJlcGxhY2UoL15cXC9AaWRcXC8vLCAnJylcbiAgICAucmVwbGFjZSgvXl9fdml0ZS1icm93c2VyLWV4dGVybmFsOi8sICcnKVxuICAgIC5yZXBsYWNlKC9ebm9kZTovLCAnJylcbiAgICAucmVwbGFjZSgvWz8mXXY9XFx3Ky8sICc/JykgLy8gcmVtb3ZlID92PSBxdWVyeVxuICAgIC5yZXBsYWNlKC9cXD8kLywgJycpIC8vIHJlbW92ZSBlbmQgcXVlcnkgbWFya1xufVxuIiwiaW1wb3J0IHsgYnVpbHRpbk1vZHVsZXMsIGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdtb2R1bGUnO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCwgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgdm0gZnJvbSAndm0nO1xuaW1wb3J0IHsgcmVzb2x2ZSwgZGlybmFtZSB9IGZyb20gJ3BhdGhlJztcbmltcG9ydCB7IHNsYXNoLCBub3JtYWxpemVJZCwgdG9GaWxlUGF0aCwgaXNQcmltaXRpdmUgfSBmcm9tICcuL3V0aWxzLmpzJztcblxuY2xhc3MgVml0ZU5vZGVSdW5uZXIge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnJvb3QgPSBvcHRpb25zLnJvb3QgfHwgcHJvY2Vzcy5jd2QoKTtcbiAgICB0aGlzLm1vZHVsZUNhY2hlID0gb3B0aW9ucy5tb2R1bGVDYWNoZSB8fCBuZXcgTWFwKCk7XG4gICAgdGhpcy5leHRlcm5hbENhY2hlID0gbmV3IE1hcCgpO1xuICAgIGJ1aWx0aW5Nb2R1bGVzLmZvckVhY2goKG0pID0+IHRoaXMuZXh0ZXJuYWxDYWNoZS5zZXQobSwgbSkpO1xuICB9XG4gIGFzeW5jIGV4ZWN1dGVGaWxlKGZpbGUpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jYWNoZWRSZXF1ZXN0KGAvQGZzLyR7c2xhc2gocmVzb2x2ZShmaWxlKSl9YCwgW10pO1xuICB9XG4gIGFzeW5jIGV4ZWN1dGVJZChpZCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNhY2hlZFJlcXVlc3QoaWQsIFtdKTtcbiAgfVxuICBhc3luYyBjYWNoZWRSZXF1ZXN0KHJhd0lkLCBjYWxsc3RhY2spIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IGlkID0gbm9ybWFsaXplSWQocmF3SWQsIHRoaXMub3B0aW9ucy5iYXNlKTtcbiAgICBjb25zdCBmc1BhdGggPSB0b0ZpbGVQYXRoKGlkLCB0aGlzLnJvb3QpO1xuICAgIGlmICgoX2EgPSB0aGlzLm1vZHVsZUNhY2hlLmdldChmc1BhdGgpKSA9PSBudWxsID8gdm9pZCAwIDogX2EucHJvbWlzZSlcbiAgICAgIHJldHVybiAoX2IgPSB0aGlzLm1vZHVsZUNhY2hlLmdldChmc1BhdGgpKSA9PSBudWxsID8gdm9pZCAwIDogX2IucHJvbWlzZTtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcy5kaXJlY3RSZXF1ZXN0KGlkLCBmc1BhdGgsIGNhbGxzdGFjayk7XG4gICAgdGhpcy5zZXRDYWNoZShmc1BhdGgsIHsgcHJvbWlzZSB9KTtcbiAgICByZXR1cm4gYXdhaXQgcHJvbWlzZTtcbiAgfVxuICBhc3luYyBkaXJlY3RSZXF1ZXN0KGlkLCBmc1BhdGgsIGNhbGxzdGFjaykge1xuICAgIGNhbGxzdGFjayA9IFsuLi5jYWxsc3RhY2ssIGlkXTtcbiAgICBjb25zdCByZXF1ZXN0ID0gYXN5bmMgKGRlcCkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgaWYgKGNhbGxzdGFjay5pbmNsdWRlcyhkZXApKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gdG9GaWxlUGF0aChkZXAsIHRoaXMucm9vdCk7XG4gICAgICAgIGlmICghKChfYSA9IHRoaXMubW9kdWxlQ2FjaGUuZ2V0KGNhY2hlS2V5KSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmV4cG9ydHMpKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2lyY3VsYXIgZGVwZW5kZW5jeSBkZXRlY3RlZFxuU3RhY2s6XG4ke1suLi5jYWxsc3RhY2ssIGRlcF0ucmV2ZXJzZSgpLm1hcCgocCkgPT4gYC0gJHtwfWApLmpvaW4oXCJcXG5cIil9YCk7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZHVsZUNhY2hlLmdldChjYWNoZUtleSkuZXhwb3J0cztcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNhY2hlZFJlcXVlc3QoZGVwLCBjYWxsc3RhY2spO1xuICAgIH07XG4gICAgaWYgKHRoaXMub3B0aW9ucy5yZXF1ZXN0U3R1YnMgJiYgaWQgaW4gdGhpcy5vcHRpb25zLnJlcXVlc3RTdHVicylcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmVxdWVzdFN0dWJzW2lkXTtcbiAgICBjb25zdCB7IGNvZGU6IHRyYW5zZm9ybWVkLCBleHRlcm5hbGl6ZSB9ID0gYXdhaXQgdGhpcy5vcHRpb25zLmZldGNoTW9kdWxlKGlkKTtcbiAgICBpZiAoZXh0ZXJuYWxpemUpIHtcbiAgICAgIGNvbnN0IG1vZCA9IGF3YWl0IGludGVycHJldGVkSW1wb3J0KGV4dGVybmFsaXplLCB0aGlzLm9wdGlvbnMuaW50ZXJwcmV0RGVmYXVsdCA/PyB0cnVlKTtcbiAgICAgIHRoaXMuc2V0Q2FjaGUoZnNQYXRoLCB7IGV4cG9ydHM6IG1vZCB9KTtcbiAgICAgIHJldHVybiBtb2Q7XG4gICAgfVxuICAgIGlmICh0cmFuc2Zvcm1lZCA9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gbG9hZCAke2lkfWApO1xuICAgIGNvbnN0IHVybCA9IHBhdGhUb0ZpbGVVUkwoZnNQYXRoKS5ocmVmO1xuICAgIGNvbnN0IGV4cG9ydHMgPSB7fTtcbiAgICB0aGlzLnNldENhY2hlKGZzUGF0aCwgeyBjb2RlOiB0cmFuc2Zvcm1lZCwgZXhwb3J0cyB9KTtcbiAgICBjb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aCh1cmwpO1xuICAgIGNvbnN0IG1vZHVsZVByb3h5ID0ge1xuICAgICAgc2V0IGV4cG9ydHModmFsdWUpIHtcbiAgICAgICAgZXhwb3J0QWxsKGV4cG9ydHMsIHZhbHVlKTtcbiAgICAgICAgZXhwb3J0cy5kZWZhdWx0ID0gdmFsdWU7XG4gICAgICB9LFxuICAgICAgZ2V0IGV4cG9ydHMoKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLmRlZmF1bHQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wcmVwYXJlQ29udGV4dCh7XG4gICAgICBfX3ZpdGVfc3NyX2ltcG9ydF9fOiByZXF1ZXN0LFxuICAgICAgX192aXRlX3Nzcl9keW5hbWljX2ltcG9ydF9fOiByZXF1ZXN0LFxuICAgICAgX192aXRlX3Nzcl9leHBvcnRzX186IGV4cG9ydHMsXG4gICAgICBfX3ZpdGVfc3NyX2V4cG9ydEFsbF9fOiAob2JqKSA9PiBleHBvcnRBbGwoZXhwb3J0cywgb2JqKSxcbiAgICAgIF9fdml0ZV9zc3JfaW1wb3J0X21ldGFfXzogeyB1cmwgfSxcbiAgICAgIHJlcXVpcmU6IGNyZWF0ZVJlcXVpcmUodXJsKSxcbiAgICAgIGV4cG9ydHMsXG4gICAgICBtb2R1bGU6IG1vZHVsZVByb3h5LFxuICAgICAgX19maWxlbmFtZSxcbiAgICAgIF9fZGlybmFtZTogZGlybmFtZShfX2ZpbGVuYW1lKVxuICAgIH0pO1xuICAgIGNvbnN0IGZuID0gdm0ucnVuSW5UaGlzQ29udGV4dChgYXN5bmMgKCR7T2JqZWN0LmtleXMoY29udGV4dCkuam9pbihcIixcIil9KT0+e3ske3RyYW5zZm9ybWVkfVxufX1gLCB7XG4gICAgICBmaWxlbmFtZTogZnNQYXRoLFxuICAgICAgbGluZU9mZnNldDogMFxuICAgIH0pO1xuICAgIGF3YWl0IGZuKC4uLk9iamVjdC52YWx1ZXMoY29udGV4dCkpO1xuICAgIHJldHVybiBleHBvcnRzO1xuICB9XG4gIHByZXBhcmVDb250ZXh0KGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxuICBzZXRDYWNoZShpZCwgbW9kKSB7XG4gICAgaWYgKCF0aGlzLm1vZHVsZUNhY2hlLmhhcyhpZCkpXG4gICAgICB0aGlzLm1vZHVsZUNhY2hlLnNldChpZCwgbW9kKTtcbiAgICBlbHNlXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMubW9kdWxlQ2FjaGUuZ2V0KGlkKSwgbW9kKTtcbiAgfVxufVxuZnVuY3Rpb24gaGFzTmVzdGVkRGVmYXVsdCh0YXJnZXQpIHtcbiAgcmV0dXJuIFwiX19lc01vZHVsZVwiIGluIHRhcmdldCAmJiB0YXJnZXQuX19lc01vZHVsZSAmJiBcImRlZmF1bHRcIiBpbiB0YXJnZXQuZGVmYXVsdDtcbn1cbmZ1bmN0aW9uIHByb3h5TWV0aG9kKG5hbWUsIHRyeURlZmF1bHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHRhcmdldCwga2V5LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdFtuYW1lXSh0YXJnZXQsIGtleSwgLi4uYXJncyk7XG4gICAgaWYgKGlzUHJpbWl0aXZlKHRhcmdldC5kZWZhdWx0KSlcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgaWYgKHRyeURlZmF1bHQgJiYga2V5ID09PSBcImRlZmF1bHRcIiB8fCB0eXBlb2YgcmVzdWx0ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgcmV0dXJuIFJlZmxlY3RbbmFtZV0odGFyZ2V0LmRlZmF1bHQsIGtleSwgLi4uYXJncyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGludGVycHJldGVkSW1wb3J0KHBhdGgsIGludGVycHJldERlZmF1bHQpIHtcbiAgY29uc3QgbW9kID0gYXdhaXQgaW1wb3J0KHBhdGgpO1xuICBpZiAoaW50ZXJwcmV0RGVmYXVsdCAmJiBcImRlZmF1bHRcIiBpbiBtb2QpIHtcbiAgICBjb25zdCB0cnlEZWZhdWx0ID0gaGFzTmVzdGVkRGVmYXVsdChtb2QpO1xuICAgIHJldHVybiBuZXcgUHJveHkobW9kLCB7XG4gICAgICBnZXQ6IHByb3h5TWV0aG9kKFwiZ2V0XCIsIHRyeURlZmF1bHQpLFxuICAgICAgc2V0OiBwcm94eU1ldGhvZChcInNldFwiLCB0cnlEZWZhdWx0KSxcbiAgICAgIGhhczogcHJveHlNZXRob2QoXCJoYXNcIiwgdHJ5RGVmYXVsdCksXG4gICAgICBkZWxldGVQcm9wZXJ0eTogcHJveHlNZXRob2QoXCJkZWxldGVQcm9wZXJ0eVwiLCB0cnlEZWZhdWx0KVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBtb2Q7XG59XG5mdW5jdGlvbiBleHBvcnRBbGwoZXhwb3J0cywgc291cmNlTW9kdWxlKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIHNvdXJjZU1vZHVsZSkge1xuICAgIGlmIChrZXkgIT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZU1vZHVsZVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IFZpdGVOb2RlUnVubmVyIH07XG4iLCJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkZGlyU3luYyB9IGZyb20gJ2ZzJ1xuaW1wb3J0IHsgaXNOb2RlQnVpbHRpbiB9IGZyb20gJ21sbHknXG5pbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSwgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ3BhdGhlJ1xuaW1wb3J0IHsgc3BpZXMsIHNweU9uIH0gZnJvbSAnLi4vaW50ZWdyYXRpb25zL2plc3QtbW9jaydcbmltcG9ydCB7IG1lcmdlU2xhc2hlcywgbm9ybWFsaXplSWQgfSBmcm9tICcuLi91dGlscydcblxuZXhwb3J0IHR5cGUgU3VpdGVNb2NrcyA9IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCAoKCkgPT4gYW55KT4+XG5cbmZ1bmN0aW9uIHJlc29sdmVNb2NrUGF0aChtb2NrUGF0aDogc3RyaW5nLCByb290OiBzdHJpbmcsIGV4dGVybmFsOiBzdHJpbmcgfCBudWxsKSB7XG4gIGNvbnN0IHBhdGggPSBub3JtYWxpemVJZChleHRlcm5hbCB8fCBtb2NrUGF0aClcblxuICAvLyBpdCdzIGEgbm9kZV9tb2R1bGUgYWxpYXNcbiAgLy8gYWxsIG1vY2tzIHNob3VsZCBiZSBpbnNpZGUgPHJvb3Q+L19fbW9ja3NfX1xuICBpZiAoZXh0ZXJuYWwgfHwgaXNOb2RlQnVpbHRpbihtb2NrUGF0aCkpIHtcbiAgICBjb25zdCBtb2NrRGlybmFtZSA9IGRpcm5hbWUocGF0aCkgLy8gZm9yIG5lc3RlZCBtb2NrczogQHZ1ZXVzZS9pbnRlZ3JhdGlvbi91c2VKd3RcbiAgICBjb25zdCBiYXNlRmlsZW5hbWUgPSBiYXNlbmFtZShwYXRoKVxuICAgIGNvbnN0IG1vY2tGb2xkZXIgPSByZXNvbHZlKHJvb3QsICdfX21vY2tzX18nLCBtb2NrRGlybmFtZSlcblxuICAgIGlmICghZXhpc3RzU3luYyhtb2NrRm9sZGVyKSkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IGZpbGVzID0gcmVhZGRpclN5bmMobW9ja0ZvbGRlcilcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgY29uc3QgW2Jhc2VuYW1lXSA9IGZpbGUuc3BsaXQoJy4nKVxuICAgICAgaWYgKGJhc2VuYW1lID09PSBiYXNlRmlsZW5hbWUpXG4gICAgICAgIHJldHVybiByZXNvbHZlKG1vY2tGb2xkZXIsIGZpbGUpLnJlcGxhY2Uocm9vdCwgJycpXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IGRpciA9IGRpcm5hbWUocGF0aClcbiAgY29uc3QgYmFzZUlkID0gYmFzZW5hbWUocGF0aClcbiAgY29uc3QgZnVsbFBhdGggPSByZXNvbHZlKGRpciwgJ19fbW9ja3NfXycsIGJhc2VJZClcbiAgcmV0dXJuIGV4aXN0c1N5bmMoZnVsbFBhdGgpID8gZnVsbFBhdGgucmVwbGFjZShyb290LCAnJykgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGdldE9iamVjdFR5cGUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseSh2YWx1ZSkuc2xpY2UoOCwgLTEpXG59XG5cbmZ1bmN0aW9uIG1vY2tQcm90b3R5cGUocHJvdG86IGFueSkge1xuICBpZiAoIXByb3RvKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IG5ld1Byb3RvOiBhbnkgPSB7fVxuXG4gIGNvbnN0IHByb3RvRGVzY3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhwcm90bylcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgZm9yIChjb25zdCBkIGluIHByb3RvRGVzY3IpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3UHJvdG8sIGQsIHByb3RvRGVzY3JbZF0pXG5cbiAgICBpZiAodHlwZW9mIHByb3RvRGVzY3JbZF0udmFsdWUgPT09ICdmdW5jdGlvbicpXG4gICAgICBzcHlPbihuZXdQcm90bywgZCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KVxuICB9XG5cbiAgcmV0dXJuIG5ld1Byb3RvXG59XG5cbmZ1bmN0aW9uIG1vY2tPYmplY3Qob2JqOiBhbnkpIHtcbiAgY29uc3QgdHlwZSA9IGdldE9iamVjdFR5cGUob2JqKVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpXG4gICAgcmV0dXJuIFtdXG4gIGVsc2UgaWYgKHR5cGUgIT09ICdPYmplY3QnICYmIHR5cGUgIT09ICdNb2R1bGUnKVxuICAgIHJldHVybiBvYmpcblxuICBjb25zdCBuZXdPYmogPSB7IC4uLm9iaiB9XG5cbiAgY29uc3QgcHJvdG8gPSBtb2NrUHJvdG90eXBlKE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopKVxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YobmV3T2JqLCBwcm90bylcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgZm9yIChjb25zdCBrIGluIG9iaikge1xuICAgIG5ld09ialtrXSA9IG1vY2tPYmplY3Qob2JqW2tdKVxuICAgIGNvbnN0IHR5cGUgPSBnZXRPYmplY3RUeXBlKG9ialtrXSlcblxuICAgIGlmICh0eXBlLmluY2x1ZGVzKCdGdW5jdGlvbicpICYmICFvYmpba10uX19pc1NweSkge1xuICAgICAgc3B5T24obmV3T2JqLCBrKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqW2tdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMCB9KSAvLyB0aW55c3B5IHJldGFpbnMgbGVuZ3RoLCBidXQgamVzdCBkb2VzbnRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld09ialxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja2VyKHJvb3Q6IHN0cmluZywgbW9ja01hcDogU3VpdGVNb2Nrcykge1xuICBmdW5jdGlvbiBnZXRTdWl0ZUZpbGVwYXRoKCkge1xuICAgIHJldHVybiBwcm9jZXNzLl9fdml0ZXN0X3dvcmtlcl9fPy5maWxlcGF0aFxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QWN0dWFsUGF0aChwYXRoOiBzdHJpbmcsIGV4dGVybmFsOiBzdHJpbmcpIHtcbiAgICBpZiAoZXh0ZXJuYWwpXG4gICAgICByZXR1cm4gbWVyZ2VTbGFzaGVzKGAvQGZzLyR7cGF0aH1gKVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZUlkKHBhdGgucmVwbGFjZShyb290LCAnJykpXG4gIH1cblxuICBmdW5jdGlvbiB1bm1vY2tQYXRoKHBhdGg6IHN0cmluZywgbm1OYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdWl0ZWZpbGUgPSBnZXRTdWl0ZUZpbGVwYXRoKClcblxuICAgIGlmIChzdWl0ZWZpbGUpIHtcbiAgICAgIGNvbnN0IGZzUGF0aCA9IGdldEFjdHVhbFBhdGgocGF0aCwgbm1OYW1lKVxuICAgICAgbW9ja01hcFtzdWl0ZWZpbGVdID8/PSB7fVxuICAgICAgZGVsZXRlIG1vY2tNYXBbc3VpdGVmaWxlXVtmc1BhdGhdXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbW9ja1BhdGgocGF0aDogc3RyaW5nLCBubU5hbWU6IHN0cmluZywgZmFjdG9yeT86ICgpID0+IGFueSkge1xuICAgIGNvbnN0IHN1aXRlZmlsZSA9IGdldFN1aXRlRmlsZXBhdGgoKVxuXG4gICAgaWYgKHN1aXRlZmlsZSkge1xuICAgICAgY29uc3QgZnNQYXRoID0gZ2V0QWN0dWFsUGF0aChwYXRoLCBubU5hbWUpXG4gICAgICBtb2NrTWFwW3N1aXRlZmlsZV0gPz89IHt9XG4gICAgICBtb2NrTWFwW3N1aXRlZmlsZV1bZnNQYXRoXSA9IGZhY3RvcnkgfHwgcmVzb2x2ZU1vY2tQYXRoKHBhdGgsIHJvb3QsIG5tTmFtZSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhck1vY2tzKHsgY2xlYXJNb2NrcywgbW9ja1Jlc2V0LCByZXN0b3JlTW9ja3MgfTogeyBjbGVhck1vY2tzOiBib29sZWFuOyBtb2NrUmVzZXQ6IGJvb2xlYW47IHJlc3RvcmVNb2NrczogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCFjbGVhck1vY2tzICYmICFtb2NrUmVzZXQgJiYgIXJlc3RvcmVNb2NrcylcbiAgICAgIHJldHVyblxuXG4gICAgc3BpZXMuZm9yRWFjaCgocykgPT4ge1xuICAgICAgaWYgKHJlc3RvcmVNb2NrcylcbiAgICAgICAgcy5tb2NrUmVzdG9yZSgpXG4gICAgICBlbHNlIGlmIChtb2NrUmVzZXQpXG4gICAgICAgIHMubW9ja1Jlc2V0KClcbiAgICAgIGVsc2UgaWYgKGNsZWFyTW9ja3MpXG4gICAgICAgIHMubW9ja0NsZWFyKClcbiAgICB9KVxuICB9XG5cbiAgLy8gbnBtIHJlc29sdmVzIGFzIC9ub2RlX21vZHVsZXMsIGJ1dCB3ZSBzdG9yZSBhcyAvQGZzLy4uLi9ub2RlX21vZHVsZXNcbiAgZnVuY3Rpb24gcmVzb2x2ZURlcGVuZGVuY3koZGVwOiBzdHJpbmcpIHtcbiAgICBpZiAoZGVwLnN0YXJ0c1dpdGgoJy9ub2RlX21vZHVsZXMvJykpXG4gICAgICByZXR1cm4gbWVyZ2VTbGFzaGVzKGAvQGZzLyR7am9pbihyb290LCBkZXApfWApXG5cbiAgICByZXR1cm4gbm9ybWFsaXplSWQoZGVwKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtb2NrUGF0aCxcbiAgICB1bm1vY2tQYXRoLFxuICAgIGNsZWFyTW9ja3MsXG4gICAgZ2V0QWN0dWFsUGF0aCxcblxuICAgIG1vY2tPYmplY3QsXG4gICAgZ2V0U3VpdGVGaWxlcGF0aCxcbiAgICByZXNvbHZlTW9ja1BhdGgsXG4gICAgcmVzb2x2ZURlcGVuZGVuY3ksXG4gIH1cbn1cbiIsImltcG9ydCB7IFZpdGVOb2RlUnVubmVyIH0gZnJvbSAndml0ZS1ub2RlL2NsaWVudCdcbmltcG9ydCB7IHRvRmlsZVBhdGggfSBmcm9tICd2aXRlLW5vZGUvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFZpdGVOb2RlUnVubmVyT3B0aW9ucyB9IGZyb20gJ3ZpdGUtbm9kZSdcbmltcG9ydCB0eXBlIHsgU3VpdGVNb2NrcyB9IGZyb20gJy4vbW9ja2VyJ1xuaW1wb3J0IHsgY3JlYXRlTW9ja2VyIH0gZnJvbSAnLi9tb2NrZXInXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZU9wdGlvbnMgZXh0ZW5kcyBWaXRlTm9kZVJ1bm5lck9wdGlvbnMge1xuICBmaWxlczogc3RyaW5nW11cbiAgbW9ja01hcDogU3VpdGVNb2Nrc1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUluVml0ZU5vZGUob3B0aW9uczogRXhlY3V0ZU9wdGlvbnMpIHtcbiAgY29uc3QgcnVubmVyID0gbmV3IFZpdGVzdFJ1bm5lcihvcHRpb25zKVxuXG4gIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXVxuICBmb3IgKGNvbnN0IGZpbGUgb2Ygb3B0aW9ucy5maWxlcylcbiAgICByZXN1bHQucHVzaChhd2FpdCBydW5uZXIuZXhlY3V0ZUZpbGUoZmlsZSkpXG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgY2xhc3MgVml0ZXN0UnVubmVyIGV4dGVuZHMgVml0ZU5vZGVSdW5uZXIge1xuICBtb2NrZXI6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZU1vY2tlcj5cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgb3B0aW9uczogRXhlY3V0ZU9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKVxuXG4gICAgb3B0aW9ucy5yZXF1ZXN0U3R1YnMgPSBvcHRpb25zLnJlcXVlc3RTdHVicyB8fCB7XG4gICAgICAnL0B2aXRlL2NsaWVudCc6IHtcbiAgICAgICAgaW5qZWN0UXVlcnk6IChpZDogc3RyaW5nKSA9PiBpZCxcbiAgICAgICAgY3JlYXRlSG90Q29udGV4dCgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7fSxcbiAgICAgICAgICAgIHBydW5lOiAoKSA9PiB7fSxcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZVN0eWxlKCkge30sXG4gICAgICB9LFxuICAgIH1cblxuICAgIHRoaXMubW9ja2VyID0gY3JlYXRlTW9ja2VyKHRoaXMucm9vdCwgb3B0aW9ucy5tb2NrTWFwKVxuICB9XG5cbiAgcHJlcGFyZUNvbnRleHQoY29udGV4dDogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIGNvbnN0IHN1aXRlID0gdGhpcy5tb2NrZXIuZ2V0U3VpdGVGaWxlcGF0aCgpXG4gICAgY29uc3QgbW9ja01hcCA9IHRoaXMub3B0aW9ucy5tb2NrTWFwXG4gICAgY29uc3QgcmVxdWVzdCA9IGNvbnRleHQuX192aXRlX3Nzcl9pbXBvcnRfX1xuXG4gICAgY29uc3QgY2FsbEZ1bmN0aW9uTW9jayA9IGFzeW5jKGRlcDogc3RyaW5nLCBtb2NrOiAoKSA9PiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBgJHtkZXB9X19tb2NrYFxuICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5tb2R1bGVDYWNoZS5nZXQobmFtZSk/LmV4cG9ydHNcbiAgICAgIGlmIChjYWNoZWQpXG4gICAgICAgIHJldHVybiBjYWNoZWRcbiAgICAgIGNvbnN0IGV4cG9ydHMgPSBhd2FpdCBtb2NrKClcbiAgICAgIHRoaXMuc2V0Q2FjaGUobmFtZSwgeyBleHBvcnRzIH0pXG4gICAgICByZXR1cm4gZXhwb3J0c1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RXaXRoTW9jayA9IGFzeW5jKGRlcDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtb2NrcyA9IG1vY2tNYXBbc3VpdGUgfHwgJyddIHx8IHt9XG4gICAgICBjb25zdCBtb2NrID0gbW9ja3NbdGhpcy5tb2NrZXIucmVzb2x2ZURlcGVuZGVuY3koZGVwKV1cbiAgICAgIGlmIChtb2NrID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1vY2tlZEtleSA9IGAke2RlcH1fX21vY2tgXG4gICAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5tb2R1bGVDYWNoZS5nZXQobW9ja2VkS2V5KVxuICAgICAgICBpZiAoY2FjaGU/LmV4cG9ydHMpXG4gICAgICAgICAgcmV0dXJuIGNhY2hlLmV4cG9ydHNcbiAgICAgICAgY29uc3QgY2FjaGVLZXkgPSB0b0ZpbGVQYXRoKGRlcCwgdGhpcy5yb290KVxuICAgICAgICBjb25zdCBtb2QgPSB0aGlzLm1vZHVsZUNhY2hlLmdldChjYWNoZUtleSk/LmV4cG9ydHMgfHwgYXdhaXQgcmVxdWVzdChkZXApXG4gICAgICAgIGNvbnN0IGV4cG9ydHMgPSB0aGlzLm1vY2tlci5tb2NrT2JqZWN0KG1vZClcbiAgICAgICAgdGhpcy5zZXRDYWNoZShtb2NrZWRLZXksIHsgZXhwb3J0cyB9KVxuICAgICAgICByZXR1cm4gZXhwb3J0c1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBtb2NrID09PSAnZnVuY3Rpb24nKVxuICAgICAgICByZXR1cm4gY2FsbEZ1bmN0aW9uTW9jayhkZXAsIG1vY2spXG4gICAgICBpZiAodHlwZW9mIG1vY2sgPT09ICdzdHJpbmcnKVxuICAgICAgICBkZXAgPSBtb2NrXG4gICAgICByZXR1cm4gcmVxdWVzdChkZXApXG4gICAgfVxuICAgIGNvbnN0IGltcG9ydEFjdHVhbCA9IChwYXRoOiBzdHJpbmcsIG5tTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gcmVxdWVzdCh0aGlzLm1vY2tlci5nZXRBY3R1YWxQYXRoKHBhdGgsIG5tTmFtZSkpXG4gICAgfVxuICAgIGNvbnN0IGltcG9ydE1vY2sgPSBhc3luYyhwYXRoOiBzdHJpbmcsIG5tTmFtZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICAgIGlmICghc3VpdGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGNhbiBpbXBvcnQgbW9jayBvbmx5IGluc2lkZSBvZiBhIHJ1bm5pbmcgdGVzdCcpXG5cbiAgICAgIGNvbnN0IG1vY2sgPSAobW9ja01hcFtzdWl0ZV0gfHwge30pW3BhdGhdIHx8IHRoaXMubW9ja2VyLnJlc29sdmVNb2NrUGF0aChwYXRoLCB0aGlzLnJvb3QsIG5tTmFtZSlcbiAgICAgIGlmIChtb2NrID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGZzUGF0aCA9IHRoaXMubW9ja2VyLmdldEFjdHVhbFBhdGgocGF0aCwgbm1OYW1lKVxuICAgICAgICBjb25zdCBtb2QgPSBhd2FpdCByZXF1ZXN0KGZzUGF0aClcbiAgICAgICAgcmV0dXJuIHRoaXMubW9ja2VyLm1vY2tPYmplY3QobW9kKVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBtb2NrID09PSAnZnVuY3Rpb24nKVxuICAgICAgICByZXR1cm4gY2FsbEZ1bmN0aW9uTW9jayhwYXRoLCBtb2NrKVxuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoTW9jayhtb2NrKVxuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKGNvbnRleHQsIHtcbiAgICAgIF9fdml0ZV9zc3JfaW1wb3J0X186IHJlcXVlc3RXaXRoTW9jayxcbiAgICAgIF9fdml0ZV9zc3JfZHluYW1pY19pbXBvcnRfXzogcmVxdWVzdFdpdGhNb2NrLFxuXG4gICAgICAvLyB2aXRlc3QubW9jayBBUElcbiAgICAgIF9fdml0ZXN0X19tb2NrX186IHRoaXMubW9ja2VyLm1vY2tQYXRoLFxuICAgICAgX192aXRlc3RfX3VubW9ja19fOiB0aGlzLm1vY2tlci51bm1vY2tQYXRoLFxuICAgICAgX192aXRlc3RfX2ltcG9ydEFjdHVhbF9fOiBpbXBvcnRBY3R1YWwsXG4gICAgICBfX3ZpdGVzdF9faW1wb3J0TW9ja19fOiBpbXBvcnRNb2NrLFxuICAgICAgLy8gc3BpZXMgZnJvbSAnamVzdC1tb2NrJyBhcmUgZGlmZmVyZW50IGluc2lkZSBzdWl0ZXMgYW5kIGV4ZWN1dGUsXG4gICAgICAvLyBzbyB3ZWUgbmVlZCB0byBjYWxsIHRoaXMgdHdpY2UgLSBpbnNpZGUgc3VpdGUgYW5kIGhlcmVcbiAgICAgIF9fdml0ZXN0X19jbGVhck1vY2tzX186IHRoaXMubW9ja2VyLmNsZWFyTW9ja3MsXG4gICAgfSlcbiAgfVxufVxuIiwiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGhlJ1xuaW1wb3J0IHR5cGUgeyBCaXJwY1JldHVybiB9IGZyb20gJ2JpcnBjJ1xuaW1wb3J0IHsgY3JlYXRlQmlycGMgfSBmcm9tICdiaXJwYydcbmltcG9ydCB0eXBlIHsgTW9kdWxlQ2FjaGUsIFJlc29sdmVkQ29uZmlnLCBUZXN0LCBXb3JrZXJDb250ZXh0LCBXb3JrZXJSUEMgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IGRpc3REaXIgfSBmcm9tICcuLi9jb25zdGFudHMnXG5pbXBvcnQgeyBleGVjdXRlSW5WaXRlTm9kZSB9IGZyb20gJy4uL25vZGUvZXhlY3V0ZSdcbmltcG9ydCB7IHJwYyB9IGZyb20gJy4vcnBjJ1xuXG5sZXQgX3ZpdGVOb2RlOiB7XG4gIHJ1bjogKGZpbGVzOiBzdHJpbmdbXSwgY29uZmlnOiBSZXNvbHZlZENvbmZpZykgPT4gUHJvbWlzZTx2b2lkPlxuICBjb2xsZWN0OiAoZmlsZXM6IHN0cmluZ1tdLCBjb25maWc6IFJlc29sdmVkQ29uZmlnKSA9PiBQcm9taXNlPHZvaWQ+XG59XG5jb25zdCBtb2R1bGVDYWNoZTogTWFwPHN0cmluZywgTW9kdWxlQ2FjaGU+ID0gbmV3IE1hcCgpXG5jb25zdCBtb2NrTWFwID0ge31cblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRWaXRlTm9kZShjdHg6IFdvcmtlckNvbnRleHQpIHtcbiAgaWYgKF92aXRlTm9kZSlcbiAgICByZXR1cm4gX3ZpdGVOb2RlXG5cbiAgY29uc3QgcHJvY2Vzc0V4aXQgPSBwcm9jZXNzLmV4aXRcblxuICBwcm9jZXNzLm9uKCdiZWZvcmVFeGl0JywgKGNvZGUpID0+IHtcbiAgICBycGMoKS5vbldvcmtlckV4aXQoY29kZSlcbiAgfSlcblxuICBwcm9jZXNzLmV4aXQgPSAoY29kZSA9IHByb2Nlc3MuZXhpdENvZGUgfHwgMCk6IG5ldmVyID0+IHtcbiAgICBycGMoKS5vbldvcmtlckV4aXQoY29kZSlcbiAgICByZXR1cm4gcHJvY2Vzc0V4aXQoY29kZSlcbiAgfVxuXG4gIGNvbnN0IHsgY29uZmlnIH0gPSBjdHhcblxuICBjb25zdCB7IHJ1biwgY29sbGVjdCB9ID0gKGF3YWl0IGV4ZWN1dGVJblZpdGVOb2RlKHtcbiAgICBmaWxlczogW1xuICAgICAgcmVzb2x2ZShkaXN0RGlyLCAnZW50cnkuanMnKSxcbiAgICBdLFxuICAgIGZldGNoTW9kdWxlKGlkKSB7XG4gICAgICByZXR1cm4gcnBjKCkuZmV0Y2goaWQpXG4gICAgfSxcbiAgICBtb2R1bGVDYWNoZSxcbiAgICBtb2NrTWFwLFxuICAgIGludGVycHJldERlZmF1bHQ6IGNvbmZpZy5kZXBzLmludGVycHJldERlZmF1bHQgPz8gdHJ1ZSxcbiAgICByb290OiBjb25maWcucm9vdCxcbiAgICBiYXNlOiBjb25maWcuYmFzZSxcbiAgfSkpWzBdXG5cbiAgX3ZpdGVOb2RlID0geyBydW4sIGNvbGxlY3QgfVxuXG4gIHJldHVybiBfdml0ZU5vZGVcbn1cblxuZnVuY3Rpb24gaW5pdChjdHg6IFdvcmtlckNvbnRleHQpIHtcbiAgaWYgKHByb2Nlc3MuX192aXRlc3Rfd29ya2VyX18gJiYgY3R4LmNvbmZpZy50aHJlYWRzICYmIGN0eC5jb25maWcuaXNvbGF0ZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHdvcmtlciBmb3IgJHtjdHguZmlsZXMuam9pbignLCcpfSBhbHJlYWR5IGluaXRpYWxpemVkIGJ5ICR7cHJvY2Vzcy5fX3ZpdGVzdF93b3JrZXJfXy5jdHguZmlsZXMuam9pbignLCcpfS4gVGhpcyBpcyBwcm9iYWJseSBhbiBpbnRlcm5hbCBidWcgb2YgVml0ZXN0LmApXG5cbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xcMCcpXG5cbiAgY29uc3QgeyBjb25maWcsIHBvcnQgfSA9IGN0eFxuXG4gIHByb2Nlc3MuX192aXRlc3Rfd29ya2VyX18gPSB7XG4gICAgY3R4LFxuICAgIG1vZHVsZUNhY2hlLFxuICAgIGNvbmZpZyxcbiAgICBycGM6IGNyZWF0ZUJpcnBjPFdvcmtlclJQQz4oXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZXZlbnROYW1lczogWydvblVzZXJDb25zb2xlTG9nJywgJ29uQ29sbGVjdGVkJywgJ29uV29ya2VyRXhpdCddLFxuICAgICAgICBwb3N0KHYpIHsgcG9ydC5wb3N0TWVzc2FnZSh2KSB9LFxuICAgICAgICBvbihmbikgeyBwb3J0LmFkZExpc3RlbmVyKCdtZXNzYWdlJywgZm4pIH0sXG4gICAgICB9LFxuICAgICksXG4gIH1cblxuICBpZiAoY3R4LmludmFsaWRhdGVzKVxuICAgIGN0eC5pbnZhbGlkYXRlcy5mb3JFYWNoKGkgPT4gbW9kdWxlQ2FjaGUuZGVsZXRlKGkpKVxuICBjdHguZmlsZXMuZm9yRWFjaChpID0+IG1vZHVsZUNhY2hlLmRlbGV0ZShpKSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbGxlY3QoY3R4OiBXb3JrZXJDb250ZXh0KSB7XG4gIGluaXQoY3R4KVxuICBjb25zdCB7IGNvbGxlY3QgfSA9IGF3YWl0IHN0YXJ0Vml0ZU5vZGUoY3R4KVxuICByZXR1cm4gY29sbGVjdChjdHguZmlsZXMsIGN0eC5jb25maWcpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW4oY3R4OiBXb3JrZXJDb250ZXh0KSB7XG4gIGluaXQoY3R4KVxuICBjb25zdCB7IHJ1biB9ID0gYXdhaXQgc3RhcnRWaXRlTm9kZShjdHgpXG4gIHJldHVybiBydW4oY3R4LmZpbGVzLCBjdHguY29uZmlnKVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIG5hbWVzcGFjZSBOb2RlSlMge1xuICAgIGludGVyZmFjZSBQcm9jZXNzIHtcbiAgICAgIF9fdml0ZXN0X3dvcmtlcl9fOiB7XG4gICAgICAgIGN0eDogV29ya2VyQ29udGV4dFxuICAgICAgICBjb25maWc6IFJlc29sdmVkQ29uZmlnXG4gICAgICAgIHJwYzogQmlycGNSZXR1cm48V29ya2VyUlBDPlxuICAgICAgICBjdXJyZW50PzogVGVzdFxuICAgICAgICBmaWxlcGF0aD86IHN0cmluZ1xuICAgICAgICBtb2R1bGVDYWNoZTogTWFwPHN0cmluZywgTW9kdWxlQ2FjaGU+XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOlsibm9ybWFsaXplSWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFPLFNBQVMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUU7QUFDdEMsRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztBQUNqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDakw7O0FDQ0EsTUFBTSxjQUFjLENBQUM7QUFDckIsRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFO0FBQ3ZCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlDLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDeEQsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbkMsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFD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
|