@anansi/core 0.16.13 → 0.16.15

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/CHANGELOG.md CHANGED
@@ -3,6 +3,26 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ### [0.16.15](https://github.com/ntucker/anansi/compare/@anansi/core@0.16.14...@anansi/core@0.16.15) (2023-03-13)
7
+
8
+ ### 💅 Enhancement
9
+
10
+ * Improve error messaging for devserver ([ba0a4f6](https://github.com/ntucker/anansi/commit/ba0a4f6249faaee02627f907380a47c1520ee9e9))
11
+ * Move CSP to header; report-only in dev-mode ([#1878](https://github.com/ntucker/anansi/issues/1878)) ([f8544ec](https://github.com/ntucker/anansi/commit/f8544ec179e26d45453cb79e04c3300c750c2f7e))
12
+
13
+ ### 📦 Package
14
+
15
+ * Update `webpack` to v5.76.1 ([#1876](https://github.com/ntucker/anansi/issues/1876)) ([16341ef](https://github.com/ntucker/anansi/commit/16341efd8bc5e3a5811d88dbf575cca77ef03cc4))
16
+
17
+ ### [0.16.14](https://github.com/ntucker/anansi/compare/@anansi/core@0.16.13...@anansi/core@0.16.14) (2023-03-09)
18
+
19
+ ### 📦 Package
20
+
21
+ * Update `rimraf` to v4.3.1 ([#1870](https://github.com/ntucker/anansi/issues/1870)) ([5dbf9b6](https://github.com/ntucker/anansi/commit/5dbf9b660e42b8105789722ac16ae8fb2f9dc023))
22
+ * Update all non-major dependencies ([#1874](https://github.com/ntucker/anansi/issues/1874)) ([42d2d5c](https://github.com/ntucker/anansi/commit/42d2d5c7ed2c73fe79ceabd9c140f25f56766c79))
23
+ * Update JS test packages to ^29.5.0 ([#1868](https://github.com/ntucker/anansi/issues/1868)) ([2f7ba87](https://github.com/ntucker/anansi/commit/2f7ba87312ed49a817f607020f48058b69b0ca4f))
24
+ * Update webpack packages ([#1872](https://github.com/ntucker/anansi/issues/1872)) ([d868841](https://github.com/ntucker/anansi/commit/d868841390c288e99dcd81a130e67dfaaa1df7d8))
25
+
6
26
  ### [0.16.13](https://github.com/ntucker/anansi/compare/@anansi/core@0.16.12...@anansi/core@0.16.13) (2023-03-05)
7
27
 
8
28
  ### 📦 Package
package/dist/server.js CHANGED
@@ -215,11 +215,22 @@ function buildPolicy(policyObj) {
215
215
  return `${key} ${val}`;
216
216
  }).join('; ');
217
217
  }
218
+ function joinNonce(policyObj, nonce) {
219
+ if (!nonce) return policyObj;
220
+ const policy = {
221
+ ...policyObj
222
+ };
223
+ if (typeof policy['script-src'] === 'string') {
224
+ policy['script-src'] = [policy['script-src'], `'nonce-${nonce}'`];
225
+ } else {
226
+ policy['script-src'] = [...policy['script-src'], `'nonce-${nonce}'`];
227
+ }
228
+ return policy;
229
+ }
218
230
  ;// CONCATENATED MODULE: ./src/spouts/DocumentComponent.tsx
219
231
  var _jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/DocumentComponent.tsx",
220
232
  _process$env$WEBPACK_;
221
233
 
222
-
223
234
  function Document({
224
235
  assets,
225
236
  head,
@@ -227,47 +238,21 @@ function Document({
227
238
  title,
228
239
  rootId,
229
240
  charSet,
230
- csPolicy,
231
- nonce,
232
241
  scripts,
233
242
  extraStyle
234
243
  }) {
235
- let cspMeta = null;
236
- if (csPolicy) {
237
- // add nonce to policy
238
- const policy = {
239
- ...csPolicy
240
- };
241
- if (nonce) {
242
- if (typeof policy['script-src'] === 'string') {
243
- policy['script-src'] = [policy['script-src'], `'nonce-${nonce}'`];
244
- } else {
245
- policy['script-src'] = [...policy['script-src'], `'nonce-${nonce}'`];
246
- }
247
- }
248
- cspMeta = /*#__PURE__*/external_react_default().createElement("meta", {
249
- httpEquiv: "Content-Security-Policy",
250
- content: buildPolicy(policy),
251
- __self: this,
252
- __source: {
253
- fileName: _jsxFileName,
254
- lineNumber: 43,
255
- columnNumber: 7
256
- }
257
- });
258
- }
259
244
  return /*#__PURE__*/external_react_default().createElement("html", {
260
245
  __self: this,
261
246
  __source: {
262
247
  fileName: _jsxFileName,
263
- lineNumber: 47,
248
+ lineNumber: 23,
264
249
  columnNumber: 5
265
250
  }
266
251
  }, /*#__PURE__*/external_react_default().createElement("head", {
267
252
  __self: this,
268
253
  __source: {
269
254
  fileName: _jsxFileName,
270
- lineNumber: 48,
255
+ lineNumber: 24,
271
256
  columnNumber: 7
272
257
  }
273
258
  }, /*#__PURE__*/external_react_default().createElement("meta", {
@@ -275,31 +260,31 @@ function Document({
275
260
  __self: this,
276
261
  __source: {
277
262
  fileName: _jsxFileName,
278
- lineNumber: 49,
263
+ lineNumber: 25,
279
264
  columnNumber: 9
280
265
  }
281
- }), cspMeta, head, extraStyle, assets.map((asset, i) => /*#__PURE__*/external_react_default().createElement("link", {
266
+ }), head, extraStyle, assets.map((asset, i) => /*#__PURE__*/external_react_default().createElement("link", {
282
267
  key: i,
283
268
  rel: "preload",
284
269
  ...asset,
285
270
  __self: this,
286
271
  __source: {
287
272
  fileName: _jsxFileName,
288
- lineNumber: 54,
273
+ lineNumber: 29,
289
274
  columnNumber: 11
290
275
  }
291
276
  })), /*#__PURE__*/external_react_default().createElement("title", {
292
277
  __self: this,
293
278
  __source: {
294
279
  fileName: _jsxFileName,
295
- lineNumber: 56,
280
+ lineNumber: 31,
296
281
  columnNumber: 9
297
282
  }
298
283
  }, title)), /*#__PURE__*/external_react_default().createElement("body", {
299
284
  __self: this,
300
285
  __source: {
301
286
  fileName: _jsxFileName,
302
- lineNumber: 58,
287
+ lineNumber: 33,
303
288
  columnNumber: 7
304
289
  }
305
290
  }, /*#__PURE__*/external_react_default().createElement("div", {
@@ -307,7 +292,7 @@ function Document({
307
292
  __self: this,
308
293
  __source: {
309
294
  fileName: _jsxFileName,
310
- lineNumber: 59,
295
+ lineNumber: 34,
311
296
  columnNumber: 9
312
297
  }
313
298
  }, children), scripts, assets.filter(({
@@ -321,7 +306,7 @@ function Document({
321
306
  __self: this,
322
307
  __source: {
323
308
  fileName: _jsxFileName,
324
- lineNumber: 64,
309
+ lineNumber: 39,
325
310
  columnNumber: 13
326
311
  }
327
312
  }))));
@@ -333,7 +318,7 @@ Document.defaultProps = {
333
318
  __self: undefined,
334
319
  __source: {
335
320
  fileName: _jsxFileName,
336
- lineNumber: 73,
321
+ lineNumber: 48,
337
322
  columnNumber: 7
338
323
  }
339
324
  }), /*#__PURE__*/external_react_default().createElement("link", {
@@ -342,7 +327,7 @@ Document.defaultProps = {
342
327
  __self: undefined,
343
328
  __source: {
344
329
  fileName: _jsxFileName,
345
- lineNumber: 74,
330
+ lineNumber: 49,
346
331
  columnNumber: 7
347
332
  }
348
333
  })),
@@ -354,9 +339,10 @@ Document.defaultProps = {
354
339
  var document_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/document.server.tsx";
355
340
 
356
341
 
342
+
357
343
  function DocumentSpout(options) {
358
344
  return next => async props => {
359
- var _props$clientManifest, _props$clientManifest2, _props$clientManifest3, _props$clientManifest4, _props$clientManifest5, _props$req, _nextProps$title;
345
+ var _props$clientManifest, _props$clientManifest2, _props$clientManifest3, _props$clientManifest4, _props$clientManifest5, _nextProps$title;
360
346
  const nextProps = await next(props);
361
347
  const publicPath = props.clientManifest.publicPath;
362
348
  if (Object.keys((_props$clientManifest = (_props$clientManifest2 = props.clientManifest) == null ? void 0 : _props$clientManifest2.entrypoints) != null ? _props$clientManifest : {}).length < 1 || publicPath === undefined) throw new Error('Manifest missing entries needed');
@@ -390,9 +376,10 @@ function DocumentSpout(options) {
390
376
  } : {
391
377
  href: asset
392
378
  });
393
- const nonce =
394
- // nonces negate 'unsafe-inline' so do not add it in development to keep things easier
395
- props.nonce && (process.env.NODE_ENV === 'production' || ((_props$req = props.req) == null ? void 0 : _props$req.protocol) !== 'http') ? props.nonce : undefined;
379
+ if (options.csPolicy) {
380
+ const httpEquiv = process.env.NODE_ENV === 'production' ? 'Content-Security-Policy' : 'Content-Security-Policy-Report-Only';
381
+ props.res.setHeader(httpEquiv, buildPolicy(joinNonce(options.csPolicy, props.nonce)));
382
+ }
396
383
  return {
397
384
  ...nextProps,
398
385
  app: /*#__PURE__*/external_react_default().createElement(Document, {
@@ -401,13 +388,11 @@ function DocumentSpout(options) {
401
388
  title: (_nextProps$title = nextProps.title) != null ? _nextProps$title : options.title,
402
389
  assets: assets,
403
390
  rootId: options.rootId,
404
- nonce: nonce,
405
- csPolicy: options.csPolicy,
406
391
  scripts: nextProps.scripts,
407
392
  __self: this,
408
393
  __source: {
409
394
  fileName: document_server_jsxFileName,
410
- lineNumber: 85,
395
+ lineNumber: 90,
411
396
  columnNumber: 9
412
397
  }
413
398
  }, nextProps.app)
@@ -661,4 +646,4 @@ const appSpout = app => props => Promise.resolve({
661
646
  module.exports = __webpack_exports__;
662
647
  /******/ })()
663
648
  ;
664
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEtBQUssQ0FBQ3pFLEtBQU07WUFBQWlELE1BQUE7WUFBQUMsUUFBQTtjQUFBQyxRQUFBLEVBQUFDLHVCQUFBO2NBQUFDLFVBQUE7Y0FBQUMsWUFBQTtZQUFBO1VBQUEsRUFDbkI7UUFFTixDQUFDLENBQUMsT0FBTzNDLENBQUMsRUFBRTtVQUNWO1VBQ0FDLE9BQU8sQ0FBQ0MsS0FBSyxDQUFFLDhCQUE2Qk8sR0FBSSxFQUFDLENBQUM7VUFDbERSLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDRixDQUFDLENBQUM7VUFDaEIsT0FBTyxJQUFJO1FBQ2I7TUFDRixDQUFDO01BQ0Q4QixPQUFPLENBQUNtRCxJQUFJLGVBQ1YvQyxzQ0FBQSxDQUFDcUcsdUNBQVE7UUFBQzlILEdBQUcsRUFBRW1JLFFBQVM7UUFBQXRHLE1BQUE7UUFBQUMsUUFBQTtVQUFBQyxRQUFBLEVBQUFDLHVCQUFBO1VBQUFDLFVBQUE7VUFBQUMsWUFBQTtRQUFBO01BQUEsZ0JBQ3RCVCxzQ0FBQSxDQUFDMkcsTUFBTTtRQUFBdkcsTUFBQTtRQUFBQyxRQUFBO1VBQUFDLFFBQUEsRUFBQUMsdUJBQUE7VUFBQUMsVUFBQTtVQUFBQyxZQUFBO1FBQUE7TUFBQSxFQUFHLENBQ0QsQ0FDWjtJQUNILENBQUMsQ0FBQztJQUVGLE9BQU87TUFDTCxHQUFHMkIsU0FBUztNQUNaeEM7SUFDRixDQUFDO0VBQ0gsQ0FBQztBQUNIOztBQ3REQSxNQUFNcUgsUUFBUSxHQUNYM0osR0FBZ0IsSUFDT3NFLEtBQVEsSUFDOUJ1RSxPQUFPLENBQUNlLE9BQU8sQ0FBQztFQUFFLEdBQUd0RixLQUFLO0VBQUV0RTtBQUFJLENBQUMsQ0FBQztBQUV0QyxpREFBZTJKLFFBQVE7O0FDUCtCO0FBQ2lCO0FBQ0U7QUFDVjtBQUNJO0FBQ0k7QUFDUiIsInNvdXJjZXMiOlsid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcIkByZXN0LWhvb2tzL3JlYWN0XCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiQHJlc3QtaG9va3Mvc3NyXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGltcG9ydCBcIkBhbnQtZGVzaWduL2Nzc2luanNcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvY3JlYXRlIGZha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiY3J5cHRvXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QtZG9tL3NlcnZlclwiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9sYXlTcG91dHMudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0XCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9jc3AudHMiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9Eb2N1bWVudENvbXBvbmVudC50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9kb2N1bWVudC5zZXJ2ZXIudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9zcG91dHMvcmVzdEhvb2tzLnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9hbnRkLnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiQGFuYW5zaS9yb3V0ZXJcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJoaXN0b3J5XCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9yb3V0ZXIuc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL3ByZWZldGNoLnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9qc29uLnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9hcHAuc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvaW5kZXguc2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkByZXN0LWhvb2tzL3JlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkByZXN0LWhvb2tzL3NzclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IGltcG9ydChcIkBhbnQtZGVzaWduL2Nzc2luanNcIik7OyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsInZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiA/IChvYmopID0+IChPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSkgOiAob2JqKSA9PiAob2JqLl9fcHJvdG9fXyk7XG52YXIgbGVhZlByb3RvdHlwZXM7XG4vLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLy8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8vIG1vZGUgJiAxNjogcmV0dXJuIHZhbHVlIHdoZW4gaXQncyBQcm9taXNlLWxpa2Vcbi8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbl9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG5cdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IHRoaXModmFsdWUpO1xuXHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuXHRpZih0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlKSB7XG5cdFx0aWYoKG1vZGUgJiA0KSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG5cdFx0aWYoKG1vZGUgJiAxNikgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHJldHVybiB2YWx1ZTtcblx0fVxuXHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuXHR2YXIgZGVmID0ge307XG5cdGxlYWZQcm90b3R5cGVzID0gbGVhZlByb3RvdHlwZXMgfHwgW251bGwsIGdldFByb3RvKHt9KSwgZ2V0UHJvdG8oW10pLCBnZXRQcm90byhnZXRQcm90byldO1xuXHRmb3IodmFyIGN1cnJlbnQgPSBtb2RlICYgMiAmJiB2YWx1ZTsgdHlwZW9mIGN1cnJlbnQgPT0gJ29iamVjdCcgJiYgIX5sZWFmUHJvdG90eXBlcy5pbmRleE9mKGN1cnJlbnQpOyBjdXJyZW50ID0gZ2V0UHJvdG8oY3VycmVudCkpIHtcblx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdXJyZW50KS5mb3JFYWNoKChrZXkpID0+IChkZWZba2V5XSA9ICgpID0+ICh2YWx1ZVtrZXldKSkpO1xuXHR9XG5cdGRlZlsnZGVmYXVsdCddID0gKCkgPT4gKHZhbHVlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBkZWYpO1xuXHRyZXR1cm4gbnM7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNyeXB0b1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcInJlYWN0LWRvbS9zZXJ2ZXJcIik7IiwiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgcmVuZGVyVG9QaXBlYWJsZVN0cmVhbSBhcyByZWFjdFJlbmRlciB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuXG5pbXBvcnQgdHlwZSB7IFJlbmRlciB9IGZyb20gJy4vc2NyaXB0cy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlcnZlclByb3BzIH0gZnJvbSAnLi9zcG91dHMvdHlwZXMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsYXlTcG91dHMoXG4gIHNwb3V0czogKHByb3BzOiBTZXJ2ZXJQcm9wcykgPT4gUHJvbWlzZTx7XG4gICAgYXBwOiBKU1guRWxlbWVudDtcbiAgfT4sXG4gIHtcbiAgICB0aW1lb3V0TVMgPSAxMDAwMCxcbiAgICBvbkVycm9yLFxuICB9OiB7IHRpbWVvdXRNUz86IG51bWJlcjsgb25FcnJvcj86IChlcnJvcjogdW5rbm93bikgPT4gdm9pZCB9ID0ge30sXG4pIHtcbiAgY29uc3QgcmVuZGVyOiBSZW5kZXIgPSBhc3luYyAoY2xpZW50TWFuaWZlc3QsIHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3Qgbm9uY2UgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKCdiYXNlNjQnKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGFwcCB9ID0gYXdhaXQgc3BvdXRzKHsgY2xpZW50TWFuaWZlc3QsIHJlcSwgcmVzLCBub25jZSB9KTtcblxuICAgICAgbGV0IGRpZEVycm9yID0gZmFsc2U7XG4gICAgICBjb25zdCB7IHBpcGUsIGFib3J0IH0gPSByZWFjdFJlbmRlcihhcHAsIHtcbiAgICAgICAgbm9uY2UsXG4gICAgICAgIC8vYm9vdHN0cmFwU2NyaXB0czogYXNzZXRzLmZpbHRlcihhc3NldCA9PiBhc3NldC5lbmRzV2l0aCgnLmpzJykpLFxuICAgICAgICBvblNoZWxsUmVhZHkoKSB7XG4gICAgICAgICAgLy9tYW5hZ2Vycy5mb3JFYWNoKG1hbmFnZXIgPT4gbWFuYWdlci5jbGVhbnVwKCkpO1xuICAgICAgICAgIC8vIElmIHNvbWV0aGluZyBlcnJvcmVkIGJlZm9yZSB3ZSBzdGFydGVkIHN0cmVhbWluZywgd2Ugc2V0IHRoZSBlcnJvciBjb2RlIGFwcHJvcHJpYXRlbHkuXG4gICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSBkaWRFcnJvciA/IDUwMCA6IDIwMDtcbiAgICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAndGV4dC9odG1sJyk7XG4gICAgICAgICAgcGlwZShyZXMpO1xuICAgICAgICB9LFxuICAgICAgICBvblNoZWxsRXJyb3IoKSB7XG4gICAgICAgICAgZGlkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xuICAgICAgICAgIHBpcGUocmVzKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcihlOiBhbnkpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDUwMDtcbiAgICAgICAgICAvL3BpcGUocmVzKTsgUmVtb3ZpbmcgdGhpcyBhdm9pZHMsIFwiUmVhY3QgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgcGlwaW5nIHRvIG9uZSB3cml0YWJsZSBzdHJlYW0uXCJcbiAgICAgICAgICBpZiAob25FcnJvcikgb25FcnJvcihlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgLy8gQWJhbmRvbiBhbmQgc3dpdGNoIHRvIGNsaWVudCByZW5kZXJpbmcgaWYgZW5vdWdoIHRpbWUgcGFzc2VzLlxuICAgICAgLy8gVHJ5IGxvd2VyaW5nIHRoaXMgdG8gc2VlIHRoZSBjbGllbnQgcmVjb3Zlci5cbiAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IChhYm9ydCBhcyBhbnkpKGBUaW1lb3V0IG9mICR7dGltZW91dE1TfW1zIGV4Y2VlZGVkYCksXG4gICAgICAgIHRpbWVvdXRNUyxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgaWYgKG9uRXJyb3IpIG9uRXJyb3IoZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHJlbmRlcjtcbn1cbiIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwicmVhY3RcIik7IiwiZXhwb3J0IGludGVyZmFjZSBQb2xpY3kge1xuICBbZGlyZWN0aXZlOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbn1cblxuLy8gVE9ETzogbWVtb2l6ZSB0aGlzXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQb2xpY3kocG9saWN5T2JqOiBQb2xpY3kpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHBvbGljeU9iailcbiAgICAubWFwKGtleSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBBcnJheS5pc0FycmF5KHBvbGljeU9ialtrZXldKVxuICAgICAgICA/IFsuLi5uZXcgU2V0KHBvbGljeU9ialtrZXldKS52YWx1ZXMoKV0uZmlsdGVyKHYgPT4gdikuam9pbignICcpXG4gICAgICAgIDogcG9saWN5T2JqW2tleV07XG5cbiAgICAgIC8vIG1vdmUgc3RyaWN0IGR5bmFtaWMgdG8gdGhlIGVuZCBvZiB0aGUgcG9saWN5IGlmIGl0IGV4aXN0cyB0byBiZSBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIGNzcDJcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9Db250ZW50LVNlY3VyaXR5LVBvbGljeS9zY3JpcHQtc3JjI3N0cmljdC1keW5hbWljXG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgdmFsLmluY2x1ZGVzKFwiJ3N0cmljdC1keW5hbWljJ1wiKSkge1xuICAgICAgICBjb25zdCBuZXdWYWwgPSBgJHt2YWxcbiAgICAgICAgICAucmVwbGFjZSgvXFxzPydzdHJpY3QtZHluYW1pYydcXHM/L2dpLCAnICcpXG4gICAgICAgICAgLnRyaW0oKX0gJ3N0cmljdC1keW5hbWljJ2A7XG4gICAgICAgIHJldHVybiBgJHtrZXl9ICR7bmV3VmFsfWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgJHtrZXl9ICR7dmFsfWA7XG4gICAgfSlcbiAgICAuam9pbignOyAnKTtcbn1cbiIsImltcG9ydCB0eXBlIHsgUG9saWN5IH0gZnJvbSAnLi9jc3AuanMnO1xuaW1wb3J0IHsgYnVpbGRQb2xpY3kgfSBmcm9tICcuL2NzcC5qcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGFzc2V0czogeyBocmVmOiBzdHJpbmc7IGFzPzogc3RyaW5nOyByZWw/OiBzdHJpbmcgfVtdO1xuICBoZWFkOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGV4dHJhU3R5bGU6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgc2NyaXB0czogUmVhY3QuUmVhY3ROb2RlO1xuICB0aXRsZTogc3RyaW5nO1xuICByb290SWQ6IHN0cmluZztcbiAgY2hhclNldDogc3RyaW5nO1xuICBjc1BvbGljeT86IFBvbGljeTtcbiAgbm9uY2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEb2N1bWVudCh7XG4gIGFzc2V0cyxcbiAgaGVhZCxcbiAgY2hpbGRyZW4sXG4gIHRpdGxlLFxuICByb290SWQsXG4gIGNoYXJTZXQsXG4gIGNzUG9saWN5LFxuICBub25jZSxcbiAgc2NyaXB0cyxcbiAgZXh0cmFTdHlsZSxcbn06IFByb3BzKSB7XG4gIGxldCBjc3BNZXRhOiBudWxsIHwgUmVhY3QuUmVhY3ROb2RlID0gbnVsbDtcbiAgaWYgKGNzUG9saWN5KSB7XG4gICAgLy8gYWRkIG5vbmNlIHRvIHBvbGljeVxuICAgIGNvbnN0IHBvbGljeSA9IHtcbiAgICAgIC4uLmNzUG9saWN5LFxuICAgIH07XG4gICAgaWYgKG5vbmNlKSB7XG4gICAgICBpZiAodHlwZW9mIHBvbGljeVsnc2NyaXB0LXNyYyddID09PSAnc3RyaW5nJykge1xuICAgICAgICBwb2xpY3lbJ3NjcmlwdC1zcmMnXSA9IFtwb2xpY3lbJ3NjcmlwdC1zcmMnXSwgYCdub25jZS0ke25vbmNlfSdgXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvbGljeVsnc2NyaXB0LXNyYyddID0gWy4uLnBvbGljeVsnc2NyaXB0LXNyYyddLCBgJ25vbmNlLSR7bm9uY2V9J2BdO1xuICAgICAgfVxuICAgIH1cbiAgICBjc3BNZXRhID0gKFxuICAgICAgPG1ldGEgaHR0cEVxdWl2PVwiQ29udGVudC1TZWN1cml0eS1Qb2xpY3lcIiBjb250ZW50PXtidWlsZFBvbGljeShwb2xpY3kpfSAvPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8aHRtbD5cbiAgICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyU2V0PXtjaGFyU2V0fSAvPlxuICAgICAgICB7Y3NwTWV0YX1cbiAgICAgICAge2hlYWR9XG4gICAgICAgIHtleHRyYVN0eWxlfVxuICAgICAgICB7YXNzZXRzLm1hcCgoYXNzZXQsIGkpID0+IChcbiAgICAgICAgICA8bGluayBrZXk9e2l9IHJlbD1cInByZWxvYWRcIiB7Li4uYXNzZXR9IC8+XG4gICAgICAgICkpfVxuICAgICAgICA8dGl0bGU+e3RpdGxlfTwvdGl0bGU+XG4gICAgICA8L2hlYWQ+XG4gICAgICA8Ym9keT5cbiAgICAgICAgPGRpdiBpZD17cm9vdElkfT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICAgIHtzY3JpcHRzfVxuICAgICAgICB7YXNzZXRzXG4gICAgICAgICAgLmZpbHRlcigoeyBocmVmIH0pID0+IGhyZWYuZW5kc1dpdGgoJy5qcycpKVxuICAgICAgICAgIC5tYXAoKHsgaHJlZiB9LCBpKSA9PiAoXG4gICAgICAgICAgICA8c2NyaXB0IGtleT17aX0gc3JjPXtocmVmfSBhc3luYyAvPlxuICAgICAgICAgICkpfVxuICAgICAgPC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgKTtcbn1cbkRvY3VtZW50LmRlZmF1bHRQcm9wcyA9IHtcbiAgaGVhZDogKFxuICAgIDw+XG4gICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTFcIiAvPlxuICAgICAgPGxpbmtcbiAgICAgICAgcmVsPVwic2hvcnRjdXQgaWNvblwiXG4gICAgICAgIGhyZWY9e2Ake3Byb2Nlc3MuZW52LldFQlBBQ0tfUFVCTElDX1BBVEggPz8gJy8nfWZhdmljb24uaWNvYH1cbiAgICAgIC8+XG4gICAgPC8+XG4gICksXG4gIGNoYXJTZXQ6ICd1dGYtOCcsXG4gIHJvb3RJZDogJ2FuYW5zaS1yb290JyxcbiAgc2NyaXB0czogbnVsbCxcbn07XG4iLCJpbXBvcnQgdHlwZSB7IFJvdXRlIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuaW1wb3J0IHsgUmVxdWVzdCB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFN0YXRzQ2h1bmtHcm91cCB9IGZyb20gJ3dlYnBhY2snO1xuXG5pbXBvcnQgdHlwZSB7IFBvbGljeSB9IGZyb20gJy4vY3NwLmpzJztcbmltcG9ydCBEb2N1bWVudCBmcm9tICcuL0RvY3VtZW50Q29tcG9uZW50LmpzJztcbmltcG9ydCB0eXBlIHsgU2VydmVyU3BvdXQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxudHlwZSBOZWVkZWROZXh0ID0ge1xuICBtYXRjaGVkUm91dGVzOiBSb3V0ZTxhbnk+W107XG4gIHRpdGxlPzogc3RyaW5nO1xuICBzY3JpcHRzPzogUmVhY3QuUmVhY3ROb2RlW107XG4gIGV4dHJhU3R5bGU/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERvY3VtZW50U3BvdXQob3B0aW9uczoge1xuICBoZWFkPzogUmVhY3QuUmVhY3ROb2RlO1xuICB0aXRsZTogc3RyaW5nO1xuICByb290SWQ/OiBzdHJpbmc7XG4gIGNoYXJTZXQ/OiBzdHJpbmc7XG4gIGNzUG9saWN5PzogUG9saWN5O1xufSk6IFNlcnZlclNwb3V0PFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgTmVlZGVkTmV4dD4ge1xuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dChwcm9wcyk7XG5cbiAgICBjb25zdCBwdWJsaWNQYXRoID0gcHJvcHMuY2xpZW50TWFuaWZlc3QucHVibGljUGF0aDtcblxuICAgIGlmIChcbiAgICAgIE9iamVjdC5rZXlzKHByb3BzLmNsaWVudE1hbmlmZXN0Py5lbnRyeXBvaW50cyA/PyB7fSkubGVuZ3RoIDwgMSB8fFxuICAgICAgcHVibGljUGF0aCA9PT0gdW5kZWZpbmVkXG4gICAgKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYW5pZmVzdCBtaXNzaW5nIGVudHJpZXMgbmVlZGVkJyk7XG5cbiAgICAvLyBUT0RPOiBjb25zaWRlciB1c2luZyB0aGlzIHBhY2thZ2UgZm9yIGJ1aWxkIHN0YXRzIGluIGZ1dHVyZTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvdHJlZS9tYWluL3BhY2thZ2VzL3JlYWN0LXNlcnZlci1kb20td2VicGFja1xuICAgIGNvbnN0IGFzc2V0TWFwID0gKGFzc2V0czogeyBuYW1lOiBzdHJpbmc7IHNpemU/OiBudW1iZXIgfVtdKSA9PlxuICAgICAgYXNzZXRzLm1hcCgoeyBuYW1lIH0pID0+IGAke3B1YmxpY1BhdGh9JHtuYW1lfWApO1xuXG4gICAgY29uc3QgYXNzZXRMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICAgIE9iamVjdC52YWx1ZXMocHJvcHMuY2xpZW50TWFuaWZlc3Q/LmVudHJ5cG9pbnRzID8/IHt9KS5mb3JFYWNoKFxuICAgICAgZW50cnlwb2ludCA9PiB7XG4gICAgICAgIGFzc2V0TGlzdC5wdXNoKC4uLmFzc2V0TWFwKGVudHJ5cG9pbnQuYXNzZXRzID8/IFtdKSk7XG4gICAgICB9LFxuICAgICk7XG4gICAgbmV3IFNldChcbiAgICAgIGFzc2V0TWFwKFxuICAgICAgICBPYmplY3QudmFsdWVzKHByb3BzLmNsaWVudE1hbmlmZXN0Lm5hbWVkQ2h1bmtHcm91cHMgPz8ge30pXG4gICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+XG4gICAgICAgICAgICBuZXh0UHJvcHMubWF0Y2hlZFJvdXRlcy5zb21lKHJvdXRlID0+IG5hbWU/LmluY2x1ZGVzKHJvdXRlLm5hbWUpKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLmZsYXRNYXAoY2h1bmsgPT4gW1xuICAgICAgICAgICAgLi4uKGNodW5rLmFzc2V0cyA/PyBbXSksXG4gICAgICAgICAgICAvLyBhbnkgY2h1bmsgcHJlbG9hZHNcbiAgICAgICAgICAgIC4uLmNoaWxkcmVuQXNzZXRzKGNodW5rKSxcbiAgICAgICAgICBdKSxcbiAgICAgICksXG4gICAgKS5mb3JFYWNoKGFzc2V0ID0+IGFzc2V0TGlzdC5wdXNoKGFzc2V0KSk7XG5cbiAgICAvLyBmaW5kIGFkZGl0aW9uYWwgYXNzZXRzIHRvIHByZWxvYWQgYmFzZWQgb24gbWF0Y2hlZCByb3V0ZVxuICAgIGNvbnN0IGFzc2V0czoge1xuICAgICAgaHJlZjogc3RyaW5nO1xuICAgICAgYXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICByZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgfVtdID0gYXNzZXRMaXN0XG4gICAgICAuZmlsdGVyKGFzc2V0ID0+ICFhc3NldC5lbmRzV2l0aCgnLmhvdC11cGRhdGUuanMnKSlcbiAgICAgIC5tYXAoYXNzZXQgPT5cbiAgICAgICAgYXNzZXQuZW5kc1dpdGgoJy5jc3MnKVxuICAgICAgICAgID8geyBocmVmOiBhc3NldCwgcmVsOiAnc3R5bGVzaGVldCcgfVxuICAgICAgICAgIDogYXNzZXQuZW5kc1dpdGgoJy5qcycpXG4gICAgICAgICAgPyB7IGhyZWY6IGFzc2V0LCBhczogJ3NjcmlwdCcgfVxuICAgICAgICAgIDogeyBocmVmOiBhc3NldCB9LFxuICAgICAgKTtcbiAgICBjb25zdCBub25jZSA9XG4gICAgICAvLyBub25jZXMgbmVnYXRlICd1bnNhZmUtaW5saW5lJyBzbyBkbyBub3QgYWRkIGl0IGluIGRldmVsb3BtZW50IHRvIGtlZXAgdGhpbmdzIGVhc2llclxuICAgICAgcHJvcHMubm9uY2UgJiZcbiAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nIHx8XG4gICAgICAgIChwcm9wcy5yZXEgYXMgUmVxdWVzdCk/LnByb3RvY29sICE9PSAnaHR0cCcpXG4gICAgICAgID8gcHJvcHMubm9uY2VcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgYXBwOiAoXG4gICAgICAgIDxEb2N1bWVudFxuICAgICAgICAgIHsuLi5vcHRpb25zfVxuICAgICAgICAgIGV4dHJhU3R5bGU9e25leHRQcm9wcy5leHRyYVN0eWxlfVxuICAgICAgICAgIHRpdGxlPXtuZXh0UHJvcHMudGl0bGUgPz8gb3B0aW9ucy50aXRsZX1cbiAgICAgICAgICBhc3NldHM9e2Fzc2V0c31cbiAgICAgICAgICByb290SWQ9e29wdGlvbnMucm9vdElkfVxuICAgICAgICAgIG5vbmNlPXtub25jZX1cbiAgICAgICAgICBjc1BvbGljeT17b3B0aW9ucy5jc1BvbGljeX1cbiAgICAgICAgICBzY3JpcHRzPXtuZXh0UHJvcHMuc2NyaXB0c31cbiAgICAgICAgPlxuICAgICAgICAgIHtuZXh0UHJvcHMuYXBwfVxuICAgICAgICA8L0RvY3VtZW50PlxuICAgICAgKSxcbiAgICB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBjaGlsZHJlbkFzc2V0cyhjaHVuazogU3RhdHNDaHVua0dyb3VwKSB7XG4gIHJldHVybiBjaHVuay5jaGlsZHJlblxuICAgID8gT2JqZWN0LnZhbHVlcyhjaHVuay5jaGlsZHJlbikuZmxhdE1hcChwcmVsb2FkID0+XG4gICAgICAgIHByZWxvYWQuZmxhdE1hcChjID0+IGMuYXNzZXRzID8/IFtdKSxcbiAgICAgIClcbiAgICA6IFtdO1xufVxuIiwiaW1wb3J0IHsgdHlwZSBDb250cm9sbGVyLCB0eXBlIE1hbmFnZXIsIHR5cGUgU3RhdGUgfSBmcm9tICdAcmVzdC1ob29rcy9yZWFjdCc7XG5pbXBvcnQgdHlwZSB7IFN0b3JlIH0gZnJvbSAncmVkdXgnO1xuXG5pbXBvcnQgdHlwZSB7IFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc3RIb29rc1Nwb3V0KFxuICBvcHRpb25zOiB7XG4gICAgZ2V0TWFuYWdlcnM/OiAoKSA9PiBNYW5hZ2VyW107XG4gIH0gPSB7fSxcbik6IFNlcnZlclNwb3V0PFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgeyBjb250cm9sbGVyOiBDb250cm9sbGVyIH0gJiB7IHN0b3JlOiBTdG9yZTxTdGF0ZTx1bmtub3duPj4gfSxcbiAgeyBpbml0RGF0YT86IFJlY29yZDxzdHJpbmcsICgpID0+IHVua25vd24+OyBzY3JpcHRzPzogUmVhY3QuUmVhY3ROb2RlW10gfVxuPiB7XG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCBtYW5hZ2VycyA9IG9wdGlvbnM/LmdldE1hbmFnZXJzPy4oKSA/PyBbXG4gICAgICBuZXcgKGF3YWl0IGltcG9ydCgnQHJlc3QtaG9va3MvcmVhY3QnKSkuTmV0d29ya01hbmFnZXIoKSxcbiAgICBdO1xuICAgIGNvbnN0IHsgY3JlYXRlUGVyc2lzdGVkU3RvcmUgfSA9IGF3YWl0IGltcG9ydCgnQHJlc3QtaG9va3Mvc3NyJyk7XG4gICAgY29uc3QgW1NlcnZlckNhY2hlUHJvdmlkZXIsIHVzZVJlYWR5Q2FjaGVTdGF0ZSwgY29udHJvbGxlciwgc3RvcmVdID1cbiAgICAgIGNyZWF0ZVBlcnNpc3RlZFN0b3JlKG1hbmFnZXJzKTtcblxuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBjb250cm9sbGVyLFxuICAgICAgc3RvcmUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5leHRQcm9wcyxcbiAgICAgIGluaXREYXRhOiB7XG4gICAgICAgIC4uLm5leHRQcm9wcy5pbml0RGF0YSxcbiAgICAgICAgcmVzdGhvb2tzOiB1c2VSZWFkeUNhY2hlU3RhdGUsXG4gICAgICB9LFxuICAgICAgYXBwOiA8U2VydmVyQ2FjaGVQcm92aWRlcj57bmV4dFByb3BzLmFwcH08L1NlcnZlckNhY2hlUHJvdmlkZXI+LFxuICAgICAgLy8gVE9ETzogZmlndXJlIG91dCBob3cgdG8gb25seSBpbmplY3QgaW4gbmV4dCBhbmQgbm90IGhhdmUgdG8gYWxzbyBwdXQgaGVyZVxuICAgICAgY29udHJvbGxlcixcbiAgICAgIHN0b3JlLFxuICAgIH07XG4gIH07XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgdHlwZSB7IFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbnR5cGUgTmVlZGVkTmV4dCA9IHtcbiAgaW5pdERhdGE/OiBSZWNvcmQ8c3RyaW5nLCAoKSA9PiB1bmtub3duPjtcbiAgc2NyaXB0cz86IFJlYWN0LlJlYWN0Tm9kZVtdO1xuICBleHRyYVN0eWxlPzogUmVhY3QuUmVhY3ROb2RlW107XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhbnRkU3BvdXQoKTogU2VydmVyU3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgTmVlZGVkTmV4dFxuPiB7XG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCB7IGNyZWF0ZUNhY2hlLCBleHRyYWN0U3R5bGUsIFN0eWxlUHJvdmlkZXIgfSA9IGF3YWl0IGltcG9ydChcbiAgICAgICdAYW50LWRlc2lnbi9jc3NpbmpzJ1xuICAgICk7XG4gICAgY29uc3QgY2FjaGUgPSBjcmVhdGVDYWNoZSgpO1xuXG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dChwcm9wcyk7XG5cbiAgICBjb25zdCBzY3JpcHRzOiBSZWFjdC5SZWFjdE5vZGVbXSA9IG5leHRQcm9wcy5zY3JpcHRzID8/IFtdO1xuXG4gICAgY29uc3QgQW50ZFNoZWV0cyA9ICgpOiBKU1guRWxlbWVudCA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgIF9faHRtbDogYDwvc2NyaXB0PiR7ZXh0cmFjdFN0eWxlKGNhY2hlKX08c2NyaXB0PmAsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfTtcbiAgICAvLyB1bmZvcnR1bmF0ZWx5IHdlIGhhdmUgdG8gaW5qZWN0IHRoaXMgYWZ0ZXIgdGhlIGVudGlyZSBjb250ZW50IGhhcyBzdHJlYW1lZCBpbiBvciBpdCBkb2Vzbid0IGNvcnJlY3RseSBwb3B1bGF0ZVxuICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vY3NzaW5qcy9pc3N1ZXMvNzlcbiAgICBzY3JpcHRzLnB1c2goPEFudGRTaGVldHMgLz4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5leHRQcm9wcyxcbiAgICAgIGFwcDogPFN0eWxlUHJvdmlkZXIgY2FjaGU9e2NhY2hlfT57bmV4dFByb3BzLmFwcH08L1N0eWxlUHJvdmlkZXI+LFxuICAgICAgc2NyaXB0cyxcbiAgICB9O1xuICB9O1xufVxuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJAYW5hbnNpL3JvdXRlclwiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImhpc3RvcnlcIik7IiwiaW1wb3J0IHsgUm91dGUsIFJvdXRlUHJvdmlkZXIsIFJvdXRlQ29udHJvbGxlciB9IGZyb20gJ0BhbmFuc2kvcm91dGVyJztcbmltcG9ydCB7IGNyZWF0ZU1lbW9yeUhpc3RvcnkgfSBmcm9tICdoaXN0b3J5JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB0eXBlIHsgQ3JlYXRlUm91dGVyLCBTZXJ2ZXJTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByb3V0ZXJTcG91dDxSZXNvbHZlV2l0aD4ob3B0aW9uczoge1xuICByZXNvbHZlV2l0aD86IGFueTtcbiAgdXNlUmVzb2x2ZVdpdGg6ICgpID0+IFJlc29sdmVXaXRoO1xuICBjcmVhdGVSb3V0ZXI6IENyZWF0ZVJvdXRlcjxSZXNvbHZlV2l0aD47XG59KTogU2VydmVyU3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICB7XG4gICAgbWF0Y2hlZFJvdXRlczogUm91dGU8UmVzb2x2ZVdpdGg+W107XG4gIH0gJiB7XG4gICAgcm91dGVyOiBSb3V0ZUNvbnRyb2xsZXI8Um91dGU8UmVzb2x2ZVdpdGgsIGFueT4+O1xuICB9XG4+IHtcbiAgY29uc3QgY3JlYXRlUm91dGVDb21wb25lbnQgPSAoXG4gICAgcm91dGVyOiBSb3V0ZUNvbnRyb2xsZXI8Um91dGU8UmVzb2x2ZVdpdGgsIGFueT4+LFxuICApID0+XG4gICAgZnVuY3Rpb24gUm91dGVyKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0pIHtcbiAgICAgIGNvbnN0IHJlc29sdmVXaXRoID0gb3B0aW9ucy51c2VSZXNvbHZlV2l0aCgpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Um91dGVQcm92aWRlciByb3V0ZXI9e3JvdXRlcn0gcmVzb2x2ZVdpdGg9e3Jlc29sdmVXaXRofT5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvUm91dGVQcm92aWRlcj5cbiAgICAgICk7XG4gICAgfTtcblxuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgdXJsID0gcHJvcHMucmVxLnVybCB8fCAnJztcbiAgICBjb25zdCByb3V0ZXIgPSBvcHRpb25zLmNyZWF0ZVJvdXRlcihcbiAgICAgIGNyZWF0ZU1lbW9yeUhpc3RvcnkoeyBpbml0aWFsRW50cmllczogW3VybF0gfSksXG4gICAgKTtcbiAgICBjb25zdCBtYXRjaGVkUm91dGVzOiBSb3V0ZTxSZXNvbHZlV2l0aD5bXSA9IHJvdXRlci5nZXRNYXRjaGVkUm91dGVzKHVybCk7XG5cbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgbWF0Y2hlZFJvdXRlcyxcbiAgICAgIHJvdXRlcixcbiAgICB9KTtcblxuICAgIGNvbnN0IFJvdXRlciA9IGNyZWF0ZVJvdXRlQ29tcG9uZW50KHJvdXRlcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgYXBwOiA8Um91dGVyPntuZXh0UHJvcHMuYXBwfTwvUm91dGVyPixcbiAgICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgaG93IHRvIG9ubHkgaW5qZWN0IGluIG5leHQgYW5kIG5vdCBoYXZlIHRvIGFsc28gcHV0IGhlcmVcbiAgICAgIG1hdGNoZWRSb3V0ZXMsXG4gICAgICByb3V0ZXIsXG4gICAgfTtcbiAgfTtcbn1cbiIsImltcG9ydCB7IFJvdXRlIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuXG5pbXBvcnQgdHlwZSB7IFJlc29sdmVQcm9wcywgU2VydmVyUHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJztcblxudHlwZSBOZWVkZWRQcm9wczxSb3V0ZVdpdGg+ID0ge1xuICBtYXRjaGVkUm91dGVzOiBSb3V0ZTxSb3V0ZVdpdGg+W107XG59ICYgUmVzb2x2ZVByb3BzO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcmVmZXRjaFNwb3V0PEYgZXh0ZW5kcyBzdHJpbmc+KGZpZWxkOiBGKSB7XG4gIHJldHVybiBmdW5jdGlvbiA8XG4gICAgUm91dGVXaXRoLFxuICAgIE4gZXh0ZW5kcyBOZWVkZWRQcm9wczxSb3V0ZVdpdGg+LFxuICAgIEkgZXh0ZW5kcyBTZXJ2ZXJQcm9wcyxcbiAgPihcbiAgICBuZXh0OiAocHJvcHM6IEkpID0+IFByb21pc2U8XG4gICAgICB7XG4gICAgICAgIFtLIGluIEZdOiBSb3V0ZVdpdGg7XG4gICAgICB9ICYgTlxuICAgID4sXG4gICkge1xuICAgIHJldHVybiBhc3luYyAocHJvcHM6IEkpID0+IHtcbiAgICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQocHJvcHMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0b0ZldGNoOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcbiAgICAgICAgbmV4dFByb3BzLm1hdGNoZWRSb3V0ZXMuZm9yRWFjaChyb3V0ZSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByb3V0ZS5yZXNvbHZlRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdG9GZXRjaC5wdXNoKHJvdXRlLnJlc29sdmVEYXRhKG5leHRQcm9wc1tmaWVsZF0sIHJvdXRlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodG9GZXRjaCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dFByb3BzO1xuICAgIH07XG4gIH07XG59XG4iLCJpbXBvcnQgUmVhY3QsIHsgU3VzcGVuc2UgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB0eXBlIHsgU2VydmVyU3BvdXQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxudHlwZSBOZWVkZWROZXh0ID0ge1xuICBpbml0RGF0YT86IFJlY29yZDxzdHJpbmcsICgpID0+IHVua25vd24+O1xuICBzY3JpcHRzPzogUmVhY3QuUmVhY3ROb2RlW107XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBKU09OU3BvdXQoe1xuICBpZCA9ICdhbmFuc2ktanNvbicsXG59OiB7IGlkPzogc3RyaW5nIH0gPSB7fSk6IFNlcnZlclNwb3V0PFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIE5lZWRlZE5leHRcbj4ge1xuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dChwcm9wcyk7XG5cbiAgICBjb25zdCBzY3JpcHRzOiBSZWFjdC5SZWFjdE5vZGVbXSA9IG5leHRQcm9wcy5zY3JpcHRzID8/IFtdO1xuXG4gICAgT2JqZWN0LmVudHJpZXMobmV4dFByb3BzLmluaXREYXRhID8/IHt9KS5mb3JFYWNoKChba2V5LCB1c2VEYXRhXSkgPT4ge1xuICAgICAgY29uc3QgZ2xvYmFsSWQgPSBgJHtpZH0uJHtrZXl9YDtcbiAgICAgIGNvbnN0IFNjcmlwdCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0gdXNlRGF0YSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGVuY29kZWQgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHNjcmlwdFxuICAgICAgICAgICAgICBpZD17Z2xvYmFsSWR9XG4gICAgICAgICAgICAgIHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgICAgICBfX2h0bWw6IGVuY29kZWQsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG5vbmNlPXtwcm9wcy5ub25jZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIFRPRE86IFVzZSB1bmlmaWVkIGxvZ2dpbmdcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBzZXJpYWxpemluZyBqc29uIGZvciAke2tleX1gKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2NyaXB0cy5wdXNoKFxuICAgICAgICA8U3VzcGVuc2Uga2V5PXtnbG9iYWxJZH0+XG4gICAgICAgICAgPFNjcmlwdCAvPlxuICAgICAgICA8L1N1c3BlbnNlPixcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgc2NyaXB0cyxcbiAgICB9O1xuICB9O1xufVxuIiwiaW1wb3J0IHsgU2VydmVyUHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuY29uc3QgYXBwU3BvdXQgPVxuICAoYXBwOiBKU1guRWxlbWVudCkgPT5cbiAgPFAgZXh0ZW5kcyBTZXJ2ZXJQcm9wcz4ocHJvcHM6IFApID0+XG4gICAgUHJvbWlzZS5yZXNvbHZlKHsgLi4ucHJvcHMsIGFwcCB9KTtcblxuZXhwb3J0IGRlZmF1bHQgYXBwU3BvdXQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIGxheVNwb3V0cyB9IGZyb20gJy4vbGF5U3BvdXRzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZG9jdW1lbnRTcG91dCB9IGZyb20gJy4vc3BvdXRzL2RvY3VtZW50LnNlcnZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlc3RIb29rc1Nwb3V0IH0gZnJvbSAnLi9zcG91dHMvcmVzdEhvb2tzLnNlcnZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFudGRTcG91dCB9IGZyb20gJy4vc3BvdXRzL2FudGQuc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcm91dGVyU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9yb3V0ZXIuc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcHJlZmV0Y2hTcG91dCB9IGZyb20gJy4vc3BvdXRzL3ByZWZldGNoLnNlcnZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEpTT05TcG91dCB9IGZyb20gJy4vc3BvdXRzL2pzb24uc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXBwU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9hcHAuc2VydmVyLmpzJztcbmV4cG9ydCB0eXBlIHsgU2VydmVyUHJvcHMgfSBmcm9tICcuL3Nwb3V0cy90eXBlcy5qcyc7XG5leHBvcnQgdHlwZSB7IFNlcnZlclNwb3V0IGFzIFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvdHlwZXMuanMnO1xuIl0sIm5hbWVzIjpbImNyeXB0byIsInJlbmRlclRvUGlwZWFibGVTdHJlYW0iLCJyZWFjdFJlbmRlciIsImxheVNwb3V0cyIsInNwb3V0cyIsInRpbWVvdXRNUyIsIm9uRXJyb3IiLCJyZW5kZXIiLCJjbGllbnRNYW5pZmVzdCIsInJlcSIsInJlcyIsIm5vbmNlIiwicmFuZG9tQnl0ZXMiLCJ0b1N0cmluZyIsImFwcCIsImRpZEVycm9yIiwicGlwZSIsImFib3J0Iiwib25TaGVsbFJlYWR5Iiwic3RhdHVzQ29kZSIsInNldEhlYWRlciIsIm9uU2hlbGxFcnJvciIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJzZXRUaW1lb3V0IiwiYnVpbGRQb2xpY3kiLCJwb2xpY3lPYmoiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwia2V5IiwidmFsIiwiQXJyYXkiLCJpc0FycmF5IiwiU2V0IiwidmFsdWVzIiwiZmlsdGVyIiwidiIsImpvaW4iLCJpbmNsdWRlcyIsIm5ld1ZhbCIsInJlcGxhY2UiLCJ0cmltIiwiRG9jdW1lbnQiLCJhc3NldHMiLCJoZWFkIiwiY2hpbGRyZW4iLCJ0aXRsZSIsInJvb3RJZCIsImNoYXJTZXQiLCJjc1BvbGljeSIsInNjcmlwdHMiLCJleHRyYVN0eWxlIiwiY3NwTWV0YSIsInBvbGljeSIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsImh0dHBFcXVpdiIsImNvbnRlbnQiLCJfX3NlbGYiLCJfX3NvdXJjZSIsImZpbGVOYW1lIiwiX2pzeEZpbGVOYW1lIiwibGluZU51bWJlciIsImNvbHVtbk51bWJlciIsImFzc2V0IiwiaSIsInJlbCIsImlkIiwiaHJlZiIsImVuZHNXaXRoIiwic3JjIiwiYXN5bmMiLCJkZWZhdWx0UHJvcHMiLCJGcmFnbWVudCIsIm5hbWUiLCJfcHJvY2VzcyRlbnYkV0VCUEFDS18iLCJwcm9jZXNzIiwiZW52IiwiV0VCUEFDS19QVUJMSUNfUEFUSCIsIkRvY3VtZW50U3BvdXQiLCJvcHRpb25zIiwibmV4dCIsInByb3BzIiwiX3Byb3BzJGNsaWVudE1hbmlmZXN0IiwiX3Byb3BzJGNsaWVudE1hbmlmZXN0MiIsIl9wcm9wcyRjbGllbnRNYW5pZmVzdDMiLCJfcHJvcHMkY2xpZW50TWFuaWZlc3Q0IiwiX3Byb3BzJGNsaWVudE1hbmlmZXN0NSIsIl9wcm9wcyRyZXEiLCJfbmV4dFByb3BzJHRpdGxlIiwibmV4dFByb3BzIiwicHVibGljUGF0aCIsImVudHJ5cG9pbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiRXJyb3IiLCJhc3NldE1hcCIsImFzc2V0TGlzdCIsImZvckVhY2giLCJlbnRyeXBvaW50IiwiX2VudHJ5cG9pbnQkYXNzZXRzIiwicHVzaCIsIm5hbWVkQ2h1bmtHcm91cHMiLCJtYXRjaGVkUm91dGVzIiwic29tZSIsInJvdXRlIiwiZmxhdE1hcCIsImNodW5rIiwiX2NodW5rJGFzc2V0cyIsImNoaWxkcmVuQXNzZXRzIiwiYXMiLCJOT0RFX0VOViIsInByb3RvY29sIiwicHJlbG9hZCIsImMiLCJfYyRhc3NldHMiLCJyZXN0SG9va3NTcG91dCIsIl9vcHRpb25zJGdldE1hbmFnZXJzIiwibWFuYWdlcnMiLCJnZXRNYW5hZ2VycyIsIk5ldHdvcmtNYW5hZ2VyIiwiY3JlYXRlUGVyc2lzdGVkU3RvcmUiLCJTZXJ2ZXJDYWNoZVByb3ZpZGVyIiwidXNlUmVhZHlDYWNoZVN0YXRlIiwiY29udHJvbGxlciIsInN0b3JlIiwiaW5pdERhdGEiLCJyZXN0aG9va3MiLCJhbnRkU3BvdXQiLCJfbmV4dFByb3BzJHNjcmlwdHMiLCJjcmVhdGVDYWNoZSIsImV4dHJhY3RTdHlsZSIsIlN0eWxlUHJvdmlkZXIiLCJjYWNoZSIsIkFudGRTaGVldHMiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsIlJvdXRlUHJvdmlkZXIiLCJjcmVhdGVNZW1vcnlIaXN0b3J5Iiwicm91dGVyU3BvdXQiLCJjcmVhdGVSb3V0ZUNvbXBvbmVudCIsInJvdXRlciIsIlJvdXRlciIsInJlc29sdmVXaXRoIiwidXNlUmVzb2x2ZVdpdGgiLCJ1cmwiLCJjcmVhdGVSb3V0ZXIiLCJpbml0aWFsRW50cmllcyIsImdldE1hdGNoZWRSb3V0ZXMiLCJwcmVmZXRjaFNwb3V0IiwiZmllbGQiLCJ0b0ZldGNoIiwicmVzb2x2ZURhdGEiLCJQcm9taXNlIiwiYWxsIiwiU3VzcGVuc2UiLCJKU09OU3BvdXQiLCJfbmV4dFByb3BzJGluaXREYXRhIiwiZW50cmllcyIsInVzZURhdGEiLCJnbG9iYWxJZCIsIlNjcmlwdCIsImRhdGEiLCJlbmNvZGVkIiwiSlNPTiIsInN0cmluZ2lmeSIsInR5cGUiLCJhcHBTcG91dCIsInJlc29sdmUiLCJkZWZhdWx0IiwiZG9jdW1lbnRTcG91dCJdLCJzb3VyY2VSb290IjoiIn0=
649
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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TyxDQUFDQyxLQUFLLENBQUNGLENBQUMsQ0FBQztVQUNoQixPQUFPLElBQUk7UUFDYjtNQUNGLENBQUM7TUFDRCtCLE9BQU8sQ0FBQytDLElBQUksZUFDVjdDLHNDQUFBLENBQUNvRyx1Q0FBUTtRQUFDNUgsR0FBRyxFQUFFaUksUUFBUztRQUFBdkcsTUFBQTtRQUFBQyxRQUFBO1VBQUFDLFFBQUEsRUFBQUMsdUJBQUE7VUFBQUMsVUFBQTtVQUFBQyxZQUFBO1FBQUE7TUFBQSxnQkFDdEJQLHNDQUFBLENBQUMwRyxNQUFNO1FBQUF4RyxNQUFBO1FBQUFDLFFBQUE7VUFBQUMsUUFBQSxFQUFBQyx1QkFBQTtVQUFBQyxVQUFBO1VBQUFDLFlBQUE7UUFBQTtNQUFBLEVBQUcsQ0FDRCxDQUNaO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsT0FBTztNQUNMLEdBQUcyQixTQUFTO01BQ1pwQztJQUNGLENBQUM7RUFDSCxDQUFDO0FBQ0g7O0FDdERBLE1BQU1rSCxRQUFRLEdBQ1h6SixHQUFnQixJQUNPb0UsS0FBUSxJQUM5QnVFLE9BQU8sQ0FBQ2UsT0FBTyxDQUFDO0VBQUUsR0FBR3RGLEtBQUs7RUFBRXBFO0FBQUksQ0FBQyxDQUFDO0FBRXRDLGlEQUFleUosUUFBUTs7QUNQK0I7QUFDaUI7QUFDRTtBQUNWO0FBQ0k7QUFDSTtBQUNSIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiQHJlc3QtaG9va3MvcmVhY3RcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJAcmVzdC1ob29rcy9zc3JcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgaW1wb3J0IFwiQGFudC1kZXNpZ24vY3NzaW5qc1wiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svcnVudGltZS9jcmVhdGUgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1kb20vc2VydmVyXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL2xheVNwb3V0cy50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3RcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2NzcC50cyIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL0RvY3VtZW50Q29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2RvY3VtZW50LnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9yZXN0SG9va3Muc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2FudGQuc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJAYW5hbnNpL3JvdXRlclwiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImhpc3RvcnlcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL3JvdXRlci5zZXJ2ZXIudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9zcG91dHMvcHJlZmV0Y2guc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2pzb24uc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2FwcC5zZXJ2ZXIudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9pbmRleC5zZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHJlc3QtaG9va3MvcmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHJlc3QtaG9va3Mvc3NyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gaW1wb3J0KFwiQGFudC1kZXNpZ24vY3NzaW5qc1wiKTs7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwidmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mID8gKG9iaikgPT4gKE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopKSA6IChvYmopID0+IChvYmouX19wcm90b19fKTtcbnZhciBsZWFmUHJvdG90eXBlcztcbi8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLy8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLy8gbW9kZSAmIDE2OiByZXR1cm4gdmFsdWUgd2hlbiBpdCdzIFByb21pc2UtbGlrZVxuLy8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuX193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcblx0aWYobW9kZSAmIDEpIHZhbHVlID0gdGhpcyh2YWx1ZSk7XG5cdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG5cdGlmKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUpIHtcblx0XHRpZigobW9kZSAmIDQpICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcblx0XHRpZigobW9kZSAmIDE2KSAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHZhbHVlO1xuXHR9XG5cdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG5cdHZhciBkZWYgPSB7fTtcblx0bGVhZlByb3RvdHlwZXMgPSBsZWFmUHJvdG90eXBlcyB8fCBbbnVsbCwgZ2V0UHJvdG8oe30pLCBnZXRQcm90byhbXSksIGdldFByb3RvKGdldFByb3RvKV07XG5cdGZvcih2YXIgY3VycmVudCA9IG1vZGUgJiAyICYmIHZhbHVlOyB0eXBlb2YgY3VycmVudCA9PSAnb2JqZWN0JyAmJiAhfmxlYWZQcm90b3R5cGVzLmluZGV4T2YoY3VycmVudCk7IGN1cnJlbnQgPSBnZXRQcm90byhjdXJyZW50KSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN1cnJlbnQpLmZvckVhY2goKGtleSkgPT4gKGRlZltrZXldID0gKCkgPT4gKHZhbHVlW2tleV0pKSk7XG5cdH1cblx0ZGVmWydkZWZhdWx0J10gPSAoKSA9PiAodmFsdWUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGRlZik7XG5cdHJldHVybiBucztcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiY3J5cHRvXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwicmVhY3QtZG9tL3NlcnZlclwiKTsiLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyByZW5kZXJUb1BpcGVhYmxlU3RyZWFtIGFzIHJlYWN0UmVuZGVyIH0gZnJvbSAncmVhY3QtZG9tL3NlcnZlcic7XG5cbmltcG9ydCB0eXBlIHsgUmVuZGVyIH0gZnJvbSAnLi9zY3JpcHRzL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2VydmVyUHJvcHMgfSBmcm9tICcuL3Nwb3V0cy90eXBlcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxheVNwb3V0cyhcbiAgc3BvdXRzOiAocHJvcHM6IFNlcnZlclByb3BzKSA9PiBQcm9taXNlPHtcbiAgICBhcHA6IEpTWC5FbGVtZW50O1xuICB9PixcbiAge1xuICAgIHRpbWVvdXRNUyA9IDEwMDAwLFxuICAgIG9uRXJyb3IsXG4gIH06IHsgdGltZW91dE1TPzogbnVtYmVyOyBvbkVycm9yPzogKGVycm9yOiB1bmtub3duKSA9PiB2b2lkIH0gPSB7fSxcbikge1xuICBjb25zdCByZW5kZXI6IFJlbmRlciA9IGFzeW5jIChjbGllbnRNYW5pZmVzdCwgcmVxLCByZXMpID0+IHtcbiAgICBjb25zdCBub25jZSA9IGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgYXBwIH0gPSBhd2FpdCBzcG91dHMoeyBjbGllbnRNYW5pZmVzdCwgcmVxLCByZXMsIG5vbmNlIH0pO1xuXG4gICAgICBsZXQgZGlkRXJyb3IgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHsgcGlwZSwgYWJvcnQgfSA9IHJlYWN0UmVuZGVyKGFwcCwge1xuICAgICAgICBub25jZSxcbiAgICAgICAgLy9ib290c3RyYXBTY3JpcHRzOiBhc3NldHMuZmlsdGVyKGFzc2V0ID0+IGFzc2V0LmVuZHNXaXRoKCcuanMnKSksXG4gICAgICAgIG9uU2hlbGxSZWFkeSgpIHtcbiAgICAgICAgICAvL21hbmFnZXJzLmZvckVhY2gobWFuYWdlciA9PiBtYW5hZ2VyLmNsZWFudXAoKSk7XG4gICAgICAgICAgLy8gSWYgc29tZXRoaW5nIGVycm9yZWQgYmVmb3JlIHdlIHN0YXJ0ZWQgc3RyZWFtaW5nLCB3ZSBzZXQgdGhlIGVycm9yIGNvZGUgYXBwcm9wcmlhdGVseS5cbiAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IGRpZEVycm9yID8gNTAwIDogMjAwO1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICBwaXBlKHJlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2hlbGxFcnJvcigpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XG4gICAgICAgICAgcGlwZShyZXMpO1xuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yKGU6IGFueSkge1xuICAgICAgICAgIGRpZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xuICAgICAgICAgIC8vcGlwZShyZXMpOyBSZW1vdmluZyB0aGlzIGF2b2lkcywgXCJSZWFjdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBwaXBpbmcgdG8gb25lIHdyaXRhYmxlIHN0cmVhbS5cIlxuICAgICAgICAgIGlmIChvbkVycm9yKSBvbkVycm9yKGUpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICAvLyBBYmFuZG9uIGFuZCBzd2l0Y2ggdG8gY2xpZW50IHJlbmRlcmluZyBpZiBlbm91Z2ggdGltZSBwYXNzZXMuXG4gICAgICAvLyBUcnkgbG93ZXJpbmcgdGhpcyB0byBzZWUgdGhlIGNsaWVudCByZWNvdmVyLlxuICAgICAgc2V0VGltZW91dChcbiAgICAgICAgKCkgPT4gKGFib3J0IGFzIGFueSkoYFRpbWVvdXQgb2YgJHt0aW1lb3V0TVN9bXMgZXhjZWVkZWRgKSxcbiAgICAgICAgdGltZW91dE1TLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBpZiAob25FcnJvcikgb25FcnJvcihlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9O1xuICByZXR1cm4gcmVuZGVyO1xufVxuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJleHBvcnQgaW50ZXJmYWNlIFBvbGljeSB7XG4gIFtkaXJlY3RpdmU6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuXG4vLyBUT0RPOiBtZW1vaXplIHRoaXNcbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBvbGljeShwb2xpY3lPYmo6IFBvbGljeSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMocG9saWN5T2JqKVxuICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IEFycmF5LmlzQXJyYXkocG9saWN5T2JqW2tleV0pXG4gICAgICAgID8gWy4uLm5ldyBTZXQocG9saWN5T2JqW2tleV0pLnZhbHVlcygpXS5maWx0ZXIodiA9PiB2KS5qb2luKCcgJylcbiAgICAgICAgOiBwb2xpY3lPYmpba2V5XTtcblxuICAgICAgLy8gbW92ZSBzdHJpY3QgZHluYW1pYyB0byB0aGUgZW5kIG9mIHRoZSBwb2xpY3kgaWYgaXQgZXhpc3RzIHRvIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggY3NwMlxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtU2VjdXJpdHktUG9saWN5L3NjcmlwdC1zcmMjc3RyaWN0LWR5bmFtaWNcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwuaW5jbHVkZXMoXCInc3RyaWN0LWR5bmFtaWMnXCIpKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGAke3ZhbFxuICAgICAgICAgIC5yZXBsYWNlKC9cXHM/J3N0cmljdC1keW5hbWljJ1xccz8vZ2ksICcgJylcbiAgICAgICAgICAudHJpbSgpfSAnc3RyaWN0LWR5bmFtaWMnYDtcbiAgICAgICAgcmV0dXJuIGAke2tleX0gJHtuZXdWYWx9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke2tleX0gJHt2YWx9YDtcbiAgICB9KVxuICAgIC5qb2luKCc7ICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gam9pbk5vbmNlKHBvbGljeU9iajogUG9saWN5LCBub25jZT86IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICBpZiAoIW5vbmNlKSByZXR1cm4gcG9saWN5T2JqO1xuICBjb25zdCBwb2xpY3kgPSB7XG4gICAgLi4ucG9saWN5T2JqLFxuICB9O1xuICBpZiAodHlwZW9mIHBvbGljeVsnc2NyaXB0LXNyYyddID09PSAnc3RyaW5nJykge1xuICAgIHBvbGljeVsnc2NyaXB0LXNyYyddID0gW3BvbGljeVsnc2NyaXB0LXNyYyddLCBgJ25vbmNlLSR7bm9uY2V9J2BdO1xuICB9IGVsc2Uge1xuICAgIHBvbGljeVsnc2NyaXB0LXNyYyddID0gWy4uLnBvbGljeVsnc2NyaXB0LXNyYyddLCBgJ25vbmNlLSR7bm9uY2V9J2BdO1xuICB9XG4gIHJldHVybiBwb2xpY3k7XG59XG4iLCJ0eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBhc3NldHM6IHsgaHJlZjogc3RyaW5nOyBhcz86IHN0cmluZzsgcmVsPzogc3RyaW5nIH1bXTtcbiAgaGVhZDogUmVhY3QuUmVhY3ROb2RlO1xuICBleHRyYVN0eWxlOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHNjcmlwdHM6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgdGl0bGU6IHN0cmluZztcbiAgcm9vdElkOiBzdHJpbmc7XG4gIGNoYXJTZXQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERvY3VtZW50KHtcbiAgYXNzZXRzLFxuICBoZWFkLFxuICBjaGlsZHJlbixcbiAgdGl0bGUsXG4gIHJvb3RJZCxcbiAgY2hhclNldCxcbiAgc2NyaXB0cyxcbiAgZXh0cmFTdHlsZSxcbn06IFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGh0bWw+XG4gICAgICA8aGVhZD5cbiAgICAgICAgPG1ldGEgY2hhclNldD17Y2hhclNldH0gLz5cbiAgICAgICAge2hlYWR9XG4gICAgICAgIHtleHRyYVN0eWxlfVxuICAgICAgICB7YXNzZXRzLm1hcCgoYXNzZXQsIGkpID0+IChcbiAgICAgICAgICA8bGluayBrZXk9e2l9IHJlbD1cInByZWxvYWRcIiB7Li4uYXNzZXR9IC8+XG4gICAgICAgICkpfVxuICAgICAgICA8dGl0bGU+e3RpdGxlfTwvdGl0bGU+XG4gICAgICA8L2hlYWQ+XG4gICAgICA8Ym9keT5cbiAgICAgICAgPGRpdiBpZD17cm9vdElkfT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICAgIHtzY3JpcHRzfVxuICAgICAgICB7YXNzZXRzXG4gICAgICAgICAgLmZpbHRlcigoeyBocmVmIH0pID0+IGhyZWYuZW5kc1dpdGgoJy5qcycpKVxuICAgICAgICAgIC5tYXAoKHsgaHJlZiB9LCBpKSA9PiAoXG4gICAgICAgICAgICA8c2NyaXB0IGtleT17aX0gc3JjPXtocmVmfSBhc3luYyAvPlxuICAgICAgICAgICkpfVxuICAgICAgPC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgKTtcbn1cbkRvY3VtZW50LmRlZmF1bHRQcm9wcyA9IHtcbiAgaGVhZDogKFxuICAgIDw+XG4gICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTFcIiAvPlxuICAgICAgPGxpbmtcbiAgICAgICAgcmVsPVwic2hvcnRjdXQgaWNvblwiXG4gICAgICAgIGhyZWY9e2Ake3Byb2Nlc3MuZW52LldFQlBBQ0tfUFVCTElDX1BBVEggPz8gJy8nfWZhdmljb24uaWNvYH1cbiAgICAgIC8+XG4gICAgPC8+XG4gICksXG4gIGNoYXJTZXQ6ICd1dGYtOCcsXG4gIHJvb3RJZDogJ2FuYW5zaS1yb290JyxcbiAgc2NyaXB0czogbnVsbCxcbn07XG4iLCJpbXBvcnQgdHlwZSB7IFJvdXRlIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuaW1wb3J0IHsgUmVxdWVzdCB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFN0YXRzQ2h1bmtHcm91cCB9IGZyb20gJ3dlYnBhY2snO1xuXG5pbXBvcnQgeyBidWlsZFBvbGljeSwgam9pbk5vbmNlLCBQb2xpY3kgfSBmcm9tICcuL2NzcC5qcyc7XG5pbXBvcnQgRG9jdW1lbnQgZnJvbSAnLi9Eb2N1bWVudENvbXBvbmVudC5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbnR5cGUgTmVlZGVkTmV4dCA9IHtcbiAgbWF0Y2hlZFJvdXRlczogUm91dGU8YW55PltdO1xuICB0aXRsZT86IHN0cmluZztcbiAgc2NyaXB0cz86IFJlYWN0LlJlYWN0Tm9kZVtdO1xuICBleHRyYVN0eWxlPzogUmVhY3QuUmVhY3ROb2RlW107XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEb2N1bWVudFNwb3V0KG9wdGlvbnM6IHtcbiAgaGVhZD86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgdGl0bGU6IHN0cmluZztcbiAgcm9vdElkPzogc3RyaW5nO1xuICBjaGFyU2V0Pzogc3RyaW5nO1xuICBjc1BvbGljeT86IFBvbGljeTtcbn0pOiBTZXJ2ZXJTcG91dDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIE5lZWRlZE5leHQ+IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQocHJvcHMpO1xuXG4gICAgY29uc3QgcHVibGljUGF0aCA9IHByb3BzLmNsaWVudE1hbmlmZXN0LnB1YmxpY1BhdGg7XG5cbiAgICBpZiAoXG4gICAgICBPYmplY3Qua2V5cyhwcm9wcy5jbGllbnRNYW5pZmVzdD8uZW50cnlwb2ludHMgPz8ge30pLmxlbmd0aCA8IDEgfHxcbiAgICAgIHB1YmxpY1BhdGggPT09IHVuZGVmaW5lZFxuICAgIClcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWFuaWZlc3QgbWlzc2luZyBlbnRyaWVzIG5lZWRlZCcpO1xuXG4gICAgLy8gVE9ETzogY29uc2lkZXIgdXNpbmcgdGhpcyBwYWNrYWdlIGZvciBidWlsZCBzdGF0cyBpbiBmdXR1cmU6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3RyZWUvbWFpbi9wYWNrYWdlcy9yZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2tcbiAgICBjb25zdCBhc3NldE1hcCA9IChhc3NldHM6IHsgbmFtZTogc3RyaW5nOyBzaXplPzogbnVtYmVyIH1bXSkgPT5cbiAgICAgIGFzc2V0cy5tYXAoKHsgbmFtZSB9KSA9PiBgJHtwdWJsaWNQYXRofSR7bmFtZX1gKTtcblxuICAgIGNvbnN0IGFzc2V0TGlzdDogc3RyaW5nW10gPSBbXTtcbiAgICBPYmplY3QudmFsdWVzKHByb3BzLmNsaWVudE1hbmlmZXN0Py5lbnRyeXBvaW50cyA/PyB7fSkuZm9yRWFjaChcbiAgICAgIGVudHJ5cG9pbnQgPT4ge1xuICAgICAgICBhc3NldExpc3QucHVzaCguLi5hc3NldE1hcChlbnRyeXBvaW50LmFzc2V0cyA/PyBbXSkpO1xuICAgICAgfSxcbiAgICApO1xuICAgIG5ldyBTZXQoXG4gICAgICBhc3NldE1hcChcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhwcm9wcy5jbGllbnRNYW5pZmVzdC5uYW1lZENodW5rR3JvdXBzID8/IHt9KVxuICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PlxuICAgICAgICAgICAgbmV4dFByb3BzLm1hdGNoZWRSb3V0ZXMuc29tZShyb3V0ZSA9PiBuYW1lPy5pbmNsdWRlcyhyb3V0ZS5uYW1lKSksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5mbGF0TWFwKGNodW5rID0+IFtcbiAgICAgICAgICAgIC4uLihjaHVuay5hc3NldHMgPz8gW10pLFxuICAgICAgICAgICAgLy8gYW55IGNodW5rIHByZWxvYWRzXG4gICAgICAgICAgICAuLi5jaGlsZHJlbkFzc2V0cyhjaHVuayksXG4gICAgICAgICAgXSksXG4gICAgICApLFxuICAgICkuZm9yRWFjaChhc3NldCA9PiBhc3NldExpc3QucHVzaChhc3NldCkpO1xuXG4gICAgLy8gZmluZCBhZGRpdGlvbmFsIGFzc2V0cyB0byBwcmVsb2FkIGJhc2VkIG9uIG1hdGNoZWQgcm91dGVcbiAgICBjb25zdCBhc3NldHM6IHtcbiAgICAgIGhyZWY6IHN0cmluZztcbiAgICAgIGFzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgcmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIH1bXSA9IGFzc2V0TGlzdFxuICAgICAgLmZpbHRlcihhc3NldCA9PiAhYXNzZXQuZW5kc1dpdGgoJy5ob3QtdXBkYXRlLmpzJykpXG4gICAgICAubWFwKGFzc2V0ID0+XG4gICAgICAgIGFzc2V0LmVuZHNXaXRoKCcuY3NzJylcbiAgICAgICAgICA/IHsgaHJlZjogYXNzZXQsIHJlbDogJ3N0eWxlc2hlZXQnIH1cbiAgICAgICAgICA6IGFzc2V0LmVuZHNXaXRoKCcuanMnKVxuICAgICAgICAgID8geyBocmVmOiBhc3NldCwgYXM6ICdzY3JpcHQnIH1cbiAgICAgICAgICA6IHsgaHJlZjogYXNzZXQgfSxcbiAgICAgICk7XG5cbiAgICBpZiAob3B0aW9ucy5jc1BvbGljeSkge1xuICAgICAgY29uc3QgaHR0cEVxdWl2ID1cbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJ1xuICAgICAgICAgID8gJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5J1xuICAgICAgICAgIDogJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5LVJlcG9ydC1Pbmx5JztcblxuICAgICAgcHJvcHMucmVzLnNldEhlYWRlcihcbiAgICAgICAgaHR0cEVxdWl2LFxuICAgICAgICBidWlsZFBvbGljeShqb2luTm9uY2Uob3B0aW9ucy5jc1BvbGljeSwgcHJvcHMubm9uY2UpKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5leHRQcm9wcyxcbiAgICAgIGFwcDogKFxuICAgICAgICA8RG9jdW1lbnRcbiAgICAgICAgICB7Li4ub3B0aW9uc31cbiAgICAgICAgICBleHRyYVN0eWxlPXtuZXh0UHJvcHMuZXh0cmFTdHlsZX1cbiAgICAgICAgICB0aXRsZT17bmV4dFByb3BzLnRpdGxlID8/IG9wdGlvbnMudGl0bGV9XG4gICAgICAgICAgYXNzZXRzPXthc3NldHN9XG4gICAgICAgICAgcm9vdElkPXtvcHRpb25zLnJvb3RJZH1cbiAgICAgICAgICBzY3JpcHRzPXtuZXh0UHJvcHMuc2NyaXB0c31cbiAgICAgICAgPlxuICAgICAgICAgIHtuZXh0UHJvcHMuYXBwfVxuICAgICAgICA8L0RvY3VtZW50PlxuICAgICAgKSxcbiAgICB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBjaGlsZHJlbkFzc2V0cyhjaHVuazogU3RhdHNDaHVua0dyb3VwKSB7XG4gIHJldHVybiBjaHVuay5jaGlsZHJlblxuICAgID8gT2JqZWN0LnZhbHVlcyhjaHVuay5jaGlsZHJlbikuZmxhdE1hcChwcmVsb2FkID0+XG4gICAgICAgIHByZWxvYWQuZmxhdE1hcChjID0+IGMuYXNzZXRzID8/IFtdKSxcbiAgICAgIClcbiAgICA6IFtdO1xufVxuIiwiaW1wb3J0IHsgdHlwZSBDb250cm9sbGVyLCB0eXBlIE1hbmFnZXIsIHR5cGUgU3RhdGUgfSBmcm9tICdAcmVzdC1ob29rcy9yZWFjdCc7XG5pbXBvcnQgdHlwZSB7IFN0b3JlIH0gZnJvbSAncmVkdXgnO1xuXG5pbXBvcnQgdHlwZSB7IFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc3RIb29rc1Nwb3V0KFxuICBvcHRpb25zOiB7XG4gICAgZ2V0TWFuYWdlcnM/OiAoKSA9PiBNYW5hZ2VyW107XG4gIH0gPSB7fSxcbik6IFNlcnZlclNwb3V0PFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgeyBjb250cm9sbGVyOiBDb250cm9sbGVyIH0gJiB7IHN0b3JlOiBTdG9yZTxTdGF0ZTx1bmtub3duPj4gfSxcbiAgeyBpbml0RGF0YT86IFJlY29yZDxzdHJpbmcsICgpID0+IHVua25vd24+OyBzY3JpcHRzPzogUmVhY3QuUmVhY3ROb2RlW10gfVxuPiB7XG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCBtYW5hZ2VycyA9IG9wdGlvbnM/LmdldE1hbmFnZXJzPy4oKSA/PyBbXG4gICAgICBuZXcgKGF3YWl0IGltcG9ydCgnQHJlc3QtaG9va3MvcmVhY3QnKSkuTmV0d29ya01hbmFnZXIoKSxcbiAgICBdO1xuICAgIGNvbnN0IHsgY3JlYXRlUGVyc2lzdGVkU3RvcmUgfSA9IGF3YWl0IGltcG9ydCgnQHJlc3QtaG9va3Mvc3NyJyk7XG4gICAgY29uc3QgW1NlcnZlckNhY2hlUHJvdmlkZXIsIHVzZVJlYWR5Q2FjaGVTdGF0ZSwgY29udHJvbGxlciwgc3RvcmVdID1cbiAgICAgIGNyZWF0ZVBlcnNpc3RlZFN0b3JlKG1hbmFnZXJzKTtcblxuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBjb250cm9sbGVyLFxuICAgICAgc3RvcmUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5leHRQcm9wcyxcbiAgICAgIGluaXREYXRhOiB7XG4gICAgICAgIC4uLm5leHRQcm9wcy5pbml0RGF0YSxcbiAgICAgICAgcmVzdGhvb2tzOiB1c2VSZWFkeUNhY2hlU3RhdGUsXG4gICAgICB9LFxuICAgICAgYXBwOiA8U2VydmVyQ2FjaGVQcm92aWRlcj57bmV4dFByb3BzLmFwcH08L1NlcnZlckNhY2hlUHJvdmlkZXI+LFxuICAgICAgLy8gVE9ETzogZmlndXJlIG91dCBob3cgdG8gb25seSBpbmplY3QgaW4gbmV4dCBhbmQgbm90IGhhdmUgdG8gYWxzbyBwdXQgaGVyZVxuICAgICAgY29udHJvbGxlcixcbiAgICAgIHN0b3JlLFxuICAgIH07XG4gIH07XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgdHlwZSB7IFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbnR5cGUgTmVlZGVkTmV4dCA9IHtcbiAgaW5pdERhdGE/OiBSZWNvcmQ8c3RyaW5nLCAoKSA9PiB1bmtub3duPjtcbiAgc2NyaXB0cz86IFJlYWN0LlJlYWN0Tm9kZVtdO1xuICBleHRyYVN0eWxlPzogUmVhY3QuUmVhY3ROb2RlW107XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhbnRkU3BvdXQoKTogU2VydmVyU3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgTmVlZGVkTmV4dFxuPiB7XG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCB7IGNyZWF0ZUNhY2hlLCBleHRyYWN0U3R5bGUsIFN0eWxlUHJvdmlkZXIgfSA9IGF3YWl0IGltcG9ydChcbiAgICAgICdAYW50LWRlc2lnbi9jc3NpbmpzJ1xuICAgICk7XG4gICAgY29uc3QgY2FjaGUgPSBjcmVhdGVDYWNoZSgpO1xuXG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dChwcm9wcyk7XG5cbiAgICBjb25zdCBzY3JpcHRzOiBSZWFjdC5SZWFjdE5vZGVbXSA9IG5leHRQcm9wcy5zY3JpcHRzID8/IFtdO1xuXG4gICAgY29uc3QgQW50ZFNoZWV0cyA9ICgpOiBKU1guRWxlbWVudCA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgIF9faHRtbDogYDwvc2NyaXB0PiR7ZXh0cmFjdFN0eWxlKGNhY2hlKX08c2NyaXB0PmAsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfTtcbiAgICAvLyB1bmZvcnR1bmF0ZWx5IHdlIGhhdmUgdG8gaW5qZWN0IHRoaXMgYWZ0ZXIgdGhlIGVudGlyZSBjb250ZW50IGhhcyBzdHJlYW1lZCBpbiBvciBpdCBkb2Vzbid0IGNvcnJlY3RseSBwb3B1bGF0ZVxuICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vY3NzaW5qcy9pc3N1ZXMvNzlcbiAgICBzY3JpcHRzLnB1c2goPEFudGRTaGVldHMgLz4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5leHRQcm9wcyxcbiAgICAgIGFwcDogPFN0eWxlUHJvdmlkZXIgY2FjaGU9e2NhY2hlfT57bmV4dFByb3BzLmFwcH08L1N0eWxlUHJvdmlkZXI+LFxuICAgICAgc2NyaXB0cyxcbiAgICB9O1xuICB9O1xufVxuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJAYW5hbnNpL3JvdXRlclwiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImhpc3RvcnlcIik7IiwiaW1wb3J0IHsgUm91dGUsIFJvdXRlUHJvdmlkZXIsIFJvdXRlQ29udHJvbGxlciB9IGZyb20gJ0BhbmFuc2kvcm91dGVyJztcbmltcG9ydCB7IGNyZWF0ZU1lbW9yeUhpc3RvcnkgfSBmcm9tICdoaXN0b3J5JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB0eXBlIHsgQ3JlYXRlUm91dGVyLCBTZXJ2ZXJTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByb3V0ZXJTcG91dDxSZXNvbHZlV2l0aD4ob3B0aW9uczoge1xuICByZXNvbHZlV2l0aD86IGFueTtcbiAgdXNlUmVzb2x2ZVdpdGg6ICgpID0+IFJlc29sdmVXaXRoO1xuICBjcmVhdGVSb3V0ZXI6IENyZWF0ZVJvdXRlcjxSZXNvbHZlV2l0aD47XG59KTogU2VydmVyU3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICB7XG4gICAgbWF0Y2hlZFJvdXRlczogUm91dGU8UmVzb2x2ZVdpdGg+W107XG4gIH0gJiB7XG4gICAgcm91dGVyOiBSb3V0ZUNvbnRyb2xsZXI8Um91dGU8UmVzb2x2ZVdpdGgsIGFueT4+O1xuICB9XG4+IHtcbiAgY29uc3QgY3JlYXRlUm91dGVDb21wb25lbnQgPSAoXG4gICAgcm91dGVyOiBSb3V0ZUNvbnRyb2xsZXI8Um91dGU8UmVzb2x2ZVdpdGgsIGFueT4+LFxuICApID0+XG4gICAgZnVuY3Rpb24gUm91dGVyKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0pIHtcbiAgICAgIGNvbnN0IHJlc29sdmVXaXRoID0gb3B0aW9ucy51c2VSZXNvbHZlV2l0aCgpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Um91dGVQcm92aWRlciByb3V0ZXI9e3JvdXRlcn0gcmVzb2x2ZVdpdGg9e3Jlc29sdmVXaXRofT5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvUm91dGVQcm92aWRlcj5cbiAgICAgICk7XG4gICAgfTtcblxuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgdXJsID0gcHJvcHMucmVxLnVybCB8fCAnJztcbiAgICBjb25zdCByb3V0ZXIgPSBvcHRpb25zLmNyZWF0ZVJvdXRlcihcbiAgICAgIGNyZWF0ZU1lbW9yeUhpc3RvcnkoeyBpbml0aWFsRW50cmllczogW3VybF0gfSksXG4gICAgKTtcbiAgICBjb25zdCBtYXRjaGVkUm91dGVzOiBSb3V0ZTxSZXNvbHZlV2l0aD5bXSA9IHJvdXRlci5nZXRNYXRjaGVkUm91dGVzKHVybCk7XG5cbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgbWF0Y2hlZFJvdXRlcyxcbiAgICAgIHJvdXRlcixcbiAgICB9KTtcblxuICAgIGNvbnN0IFJvdXRlciA9IGNyZWF0ZVJvdXRlQ29tcG9uZW50KHJvdXRlcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgYXBwOiA8Um91dGVyPntuZXh0UHJvcHMuYXBwfTwvUm91dGVyPixcbiAgICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgaG93IHRvIG9ubHkgaW5qZWN0IGluIG5leHQgYW5kIG5vdCBoYXZlIHRvIGFsc28gcHV0IGhlcmVcbiAgICAgIG1hdGNoZWRSb3V0ZXMsXG4gICAgICByb3V0ZXIsXG4gICAgfTtcbiAgfTtcbn1cbiIsImltcG9ydCB7IFJvdXRlIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuXG5pbXBvcnQgdHlwZSB7IFJlc29sdmVQcm9wcywgU2VydmVyUHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJztcblxudHlwZSBOZWVkZWRQcm9wczxSb3V0ZVdpdGg+ID0ge1xuICBtYXRjaGVkUm91dGVzOiBSb3V0ZTxSb3V0ZVdpdGg+W107XG59ICYgUmVzb2x2ZVByb3BzO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcmVmZXRjaFNwb3V0PEYgZXh0ZW5kcyBzdHJpbmc+KGZpZWxkOiBGKSB7XG4gIHJldHVybiBmdW5jdGlvbiA8XG4gICAgUm91dGVXaXRoLFxuICAgIE4gZXh0ZW5kcyBOZWVkZWRQcm9wczxSb3V0ZVdpdGg+LFxuICAgIEkgZXh0ZW5kcyBTZXJ2ZXJQcm9wcyxcbiAgPihcbiAgICBuZXh0OiAocHJvcHM6IEkpID0+IFByb21pc2U8XG4gICAgICB7XG4gICAgICAgIFtLIGluIEZdOiBSb3V0ZVdpdGg7XG4gICAgICB9ICYgTlxuICAgID4sXG4gICkge1xuICAgIHJldHVybiBhc3luYyAocHJvcHM6IEkpID0+IHtcbiAgICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQocHJvcHMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0b0ZldGNoOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcbiAgICAgICAgbmV4dFByb3BzLm1hdGNoZWRSb3V0ZXMuZm9yRWFjaChyb3V0ZSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByb3V0ZS5yZXNvbHZlRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdG9GZXRjaC5wdXNoKHJvdXRlLnJlc29sdmVEYXRhKG5leHRQcm9wc1tmaWVsZF0sIHJvdXRlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodG9GZXRjaCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dFByb3BzO1xuICAgIH07XG4gIH07XG59XG4iLCJpbXBvcnQgUmVhY3QsIHsgU3VzcGVuc2UgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB0eXBlIHsgU2VydmVyU3BvdXQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxudHlwZSBOZWVkZWROZXh0ID0ge1xuICBpbml0RGF0YT86IFJlY29yZDxzdHJpbmcsICgpID0+IHVua25vd24+O1xuICBzY3JpcHRzPzogUmVhY3QuUmVhY3ROb2RlW107XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBKU09OU3BvdXQoe1xuICBpZCA9ICdhbmFuc2ktanNvbicsXG59OiB7IGlkPzogc3RyaW5nIH0gPSB7fSk6IFNlcnZlclNwb3V0PFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIE5lZWRlZE5leHRcbj4ge1xuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dChwcm9wcyk7XG5cbiAgICBjb25zdCBzY3JpcHRzOiBSZWFjdC5SZWFjdE5vZGVbXSA9IG5leHRQcm9wcy5zY3JpcHRzID8/IFtdO1xuXG4gICAgT2JqZWN0LmVudHJpZXMobmV4dFByb3BzLmluaXREYXRhID8/IHt9KS5mb3JFYWNoKChba2V5LCB1c2VEYXRhXSkgPT4ge1xuICAgICAgY29uc3QgZ2xvYmFsSWQgPSBgJHtpZH0uJHtrZXl9YDtcbiAgICAgIGNvbnN0IFNjcmlwdCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0gdXNlRGF0YSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGVuY29kZWQgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHNjcmlwdFxuICAgICAgICAgICAgICBpZD17Z2xvYmFsSWR9XG4gICAgICAgICAgICAgIHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgICAgICBfX2h0bWw6IGVuY29kZWQsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG5vbmNlPXtwcm9wcy5ub25jZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIFRPRE86IFVzZSB1bmlmaWVkIGxvZ2dpbmdcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBzZXJpYWxpemluZyBqc29uIGZvciAke2tleX1gKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2NyaXB0cy5wdXNoKFxuICAgICAgICA8U3VzcGVuc2Uga2V5PXtnbG9iYWxJZH0+XG4gICAgICAgICAgPFNjcmlwdCAvPlxuICAgICAgICA8L1N1c3BlbnNlPixcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgc2NyaXB0cyxcbiAgICB9O1xuICB9O1xufVxuIiwiaW1wb3J0IHsgU2VydmVyUHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuY29uc3QgYXBwU3BvdXQgPVxuICAoYXBwOiBKU1guRWxlbWVudCkgPT5cbiAgPFAgZXh0ZW5kcyBTZXJ2ZXJQcm9wcz4ocHJvcHM6IFApID0+XG4gICAgUHJvbWlzZS5yZXNvbHZlKHsgLi4ucHJvcHMsIGFwcCB9KTtcblxuZXhwb3J0IGRlZmF1bHQgYXBwU3BvdXQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIGxheVNwb3V0cyB9IGZyb20gJy4vbGF5U3BvdXRzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZG9jdW1lbnRTcG91dCB9IGZyb20gJy4vc3BvdXRzL2RvY3VtZW50LnNlcnZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlc3RIb29rc1Nwb3V0IH0gZnJvbSAnLi9zcG91dHMvcmVzdEhvb2tzLnNlcnZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFudGRTcG91dCB9IGZyb20gJy4vc3BvdXRzL2FudGQuc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcm91dGVyU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9yb3V0ZXIuc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcHJlZmV0Y2hTcG91dCB9IGZyb20gJy4vc3BvdXRzL3ByZWZldGNoLnNlcnZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEpTT05TcG91dCB9IGZyb20gJy4vc3BvdXRzL2pzb24uc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXBwU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9hcHAuc2VydmVyLmpzJztcbmV4cG9ydCB0eXBlIHsgU2VydmVyUHJvcHMgfSBmcm9tICcuL3Nwb3V0cy90eXBlcy5qcyc7XG5leHBvcnQgdHlwZSB7IFNlcnZlclNwb3V0IGFzIFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvdHlwZXMuanMnO1xuIl0sIm5hbWVzIjpbImNyeXB0byIsInJlbmRlclRvUGlwZWFibGVTdHJlYW0iLCJyZWFjdFJlbmRlciIsImxheVNwb3V0cyIsInNwb3V0cyIsInRpbWVvdXRNUyIsIm9uRXJyb3IiLCJyZW5kZXIiLCJjbGllbnRNYW5pZmVzdCIsInJlcSIsInJlcyIsIm5vbmNlIiwicmFuZG9tQnl0ZXMiLCJ0b1N0cmluZyIsImFwcCIsImRpZEVycm9yIiwicGlwZSIsImFib3J0Iiwib25TaGVsbFJlYWR5Iiwic3RhdHVzQ29kZSIsInNldEhlYWRlciIsIm9uU2hlbGxFcnJvciIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJzZXRUaW1lb3V0IiwiYnVpbGRQb2xpY3kiLCJwb2xpY3lPYmoiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwia2V5IiwidmFsIiwiQXJyYXkiLCJpc0FycmF5IiwiU2V0IiwidmFsdWVzIiwiZmlsdGVyIiwidiIsImpvaW4iLCJpbmNsdWRlcyIsIm5ld1ZhbCIsInJlcGxhY2UiLCJ0cmltIiwiam9pbk5vbmNlIiwicG9saWN5IiwiRG9jdW1lbnQiLCJhc3NldHMiLCJoZWFkIiwiY2hpbGRyZW4iLCJ0aXRsZSIsInJvb3RJZCIsImNoYXJTZXQiLCJzY3JpcHRzIiwiZXh0cmFTdHlsZSIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsIl9fc2VsZiIsIl9fc291cmNlIiwiZmlsZU5hbWUiLCJfanN4RmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwiYXNzZXQiLCJpIiwicmVsIiwiaWQiLCJocmVmIiwiZW5kc1dpdGgiLCJzcmMiLCJhc3luYyIsImRlZmF1bHRQcm9wcyIsIkZyYWdtZW50IiwibmFtZSIsImNvbnRlbnQiLCJfcHJvY2VzcyRlbnYkV0VCUEFDS18iLCJwcm9jZXNzIiwiZW52IiwiV0VCUEFDS19QVUJMSUNfUEFUSCIsIkRvY3VtZW50U3BvdXQiLCJvcHRpb25zIiwibmV4dCIsInByb3BzIiwiX3Byb3BzJGNsaWVudE1hbmlmZXN0IiwiX3Byb3BzJGNsaWVudE1hbmlmZXN0MiIsIl9wcm9wcyRjbGllbnRNYW5pZmVzdDMiLCJfcHJvcHMkY2xpZW50TWFuaWZlc3Q0IiwiX3Byb3BzJGNsaWVudE1hbmlmZXN0NSIsIl9uZXh0UHJvcHMkdGl0bGUiLCJuZXh0UHJvcHMiLCJwdWJsaWNQYXRoIiwiZW50cnlwb2ludHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJFcnJvciIsImFzc2V0TWFwIiwiYXNzZXRMaXN0IiwiZm9yRWFjaCIsImVudHJ5cG9pbnQiLCJfZW50cnlwb2ludCRhc3NldHMiLCJwdXNoIiwibmFtZWRDaHVua0dyb3VwcyIsIm1hdGNoZWRSb3V0ZXMiLCJzb21lIiwicm91dGUiLCJmbGF0TWFwIiwiY2h1bmsiLCJfY2h1bmskYXNzZXRzIiwiY2hpbGRyZW5Bc3NldHMiLCJhcyIsImNzUG9saWN5IiwiaHR0cEVxdWl2IiwiTk9ERV9FTlYiLCJwcmVsb2FkIiwiYyIsIl9jJGFzc2V0cyIsInJlc3RIb29rc1Nwb3V0IiwiX29wdGlvbnMkZ2V0TWFuYWdlcnMiLCJtYW5hZ2VycyIsImdldE1hbmFnZXJzIiwiTmV0d29ya01hbmFnZXIiLCJjcmVhdGVQZXJzaXN0ZWRTdG9yZSIsIlNlcnZlckNhY2hlUHJvdmlkZXIiLCJ1c2VSZWFkeUNhY2hlU3RhdGUiLCJjb250cm9sbGVyIiwic3RvcmUiLCJpbml0RGF0YSIsInJlc3Rob29rcyIsImFudGRTcG91dCIsIl9uZXh0UHJvcHMkc2NyaXB0cyIsImNyZWF0ZUNhY2hlIiwiZXh0cmFjdFN0eWxlIiwiU3R5bGVQcm92aWRlciIsImNhY2hlIiwiQW50ZFNoZWV0cyIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwiUm91dGVQcm92aWRlciIsImNyZWF0ZU1lbW9yeUhpc3RvcnkiLCJyb3V0ZXJTcG91dCIsImNyZWF0ZVJvdXRlQ29tcG9uZW50Iiwicm91dGVyIiwiUm91dGVyIiwicmVzb2x2ZVdpdGgiLCJ1c2VSZXNvbHZlV2l0aCIsInVybCIsImNyZWF0ZVJvdXRlciIsImluaXRpYWxFbnRyaWVzIiwiZ2V0TWF0Y2hlZFJvdXRlcyIsInByZWZldGNoU3BvdXQiLCJmaWVsZCIsInRvRmV0Y2giLCJyZXNvbHZlRGF0YSIsIlByb21pc2UiLCJhbGwiLCJTdXNwZW5zZSIsIkpTT05TcG91dCIsIl9uZXh0UHJvcHMkaW5pdERhdGEiLCJlbnRyaWVzIiwidXNlRGF0YSIsImdsb2JhbElkIiwiU2NyaXB0IiwiZGF0YSIsImVuY29kZWQiLCJKU09OIiwic3RyaW5naWZ5IiwidHlwZSIsImFwcFNwb3V0IiwicmVzb2x2ZSIsImRlZmF1bHQiLCJkb2N1bWVudFNwb3V0Il0sInNvdXJjZVJvb3QiOiIifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"startDevserver.d.ts","sourceRoot":"","sources":["../../src/scripts/startDevserver.ts"],"names":[],"mappings":";AAoBA,OAAO,mCAAmC,CAAC;AAmB3C,wBAA8B,cAAc,CAC1C,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,iBAmPlC"}
1
+ {"version":3,"file":"startDevserver.d.ts","sourceRoot":"","sources":["../../src/scripts/startDevserver.ts"],"names":[],"mappings":";AAoBA,OAAO,mCAAmC,CAAC;AAmB3C,wBAA8B,cAAc,CAC1C,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,iBAwPlC"}
@@ -168,7 +168,10 @@ export default async function startDevServer(entrypoint, env = {}) {
168
168
  return;
169
169
  }
170
170
  res.socket.on('error', error => {
171
- console.error('Fatal', error);
171
+ log.error('Fatal:', error);
172
+ if (error.code === 'ECONNRESET') {
173
+ log.error('ECONNRESET is usually due to browser closing the connection');
174
+ }
172
175
  });
173
176
  await render(req, res);
174
177
  }));
@@ -228,4 +231,4 @@ export default async function startDevServer(entrypoint, env = {}) {
228
231
  });
229
232
  runServer();
230
233
  }
231
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJoYXNPd24iLCJpdCIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRpc2tGcyIsImNyZWF0ZUZzUmVxdWlyZSIsImNyZWF0ZUZzRnJvbVZvbHVtZSIsIlZvbHVtZSIsInBhdGgiLCJzb3VyY2VNYXBTdXBwb3J0IiwidG1wIiwidWZzIiwicHJvbWlzaWZ5Iiwid2VicGFjayIsImxvZ2dpbmciLCJXZWJwYWNrRGV2U2VydmVyIiwiZ2V0V2VicGFja0NvbmZpZyIsImltcG9ydCIsIm1ldGEiLCJlbnRyeXBvaW50IiwicHJvY2VzcyIsImFyZ3YiLCJjb25zb2xlIiwibG9nIiwiZXhpdCIsInN0YXJ0RGV2U2VydmVyIiwic2VydmVyRmlsZUNvbnRlbnRzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXJ2ZXJFbnRyeSIsImVudiIsIl93ZWJwYWNrQ29uZmlncyQiLCJfd2VicGFja0NvbmZpZ3MkJGRldlMiLCJ3ZWJwYWNrQ29uZmlnIiwiZ2V0TG9nZ2VyIiwidm9sdW1lIiwiZnMiLCJ1c2UiLCJmc1JlcXVpcmUiLCJyZWFkRmlsZSIsInNlcnZlciIsImhvdEVudHJ5IiwiZW50cnlQYXRoIiwiZ2VuZXJhdGVkRW50cnlwb2ludCIsImZpbGVTeW5jIiwicG9zdGZpeCIsIndyaXRlU3luYyIsImZkIiwiY3dkIiwid2VicGFja0NvbmZpZ3MiLCJlbnRyeXBhdGgiLCJuYW1lIiwibW9kZSIsInJlcGxhY2UiLCJCUk9XU0VSU0xJU1RfRU5WIiwidGFyZ2V0IiwiY29tcGlsZXIiLCJpbnN0YWxsIiwiaG9va1JlcXVpcmUiLCJnZXRTZXJ2ZXJCdW5kbGUiLCJzZXJ2ZXJTdGF0cyIsIl9zZXJ2ZXJKc29uJG91dHB1dFBhdCIsInNlcnZlckpzb24iLCJ0b0pzb24iLCJhc3NldHMiLCJqb2luIiwib3V0cHV0UGF0aCIsImhhbmRsZUVycm9ycyIsImZuIiwicmVxIiwicmVzIiwibmV4dCIsIngiLCJpbml0UmVuZGVyIiwicmVuZGVyIiwiYXJncyIsIl9pbml0UmVuZGVyIiwicHVzaCIsImltcG9ydFJlbmRlciIsInN0YXRzIiwiX2NsaWVudFN0YXRzJGNvbXBpbGF0IiwiX2NsaWVudFN0YXRzJGNvbXBpbGF0MiIsIl9zZXJ2ZXJTdGF0cyRjb21waWxhdCIsIl9zZXJ2ZXJTdGF0cyRjb21waWxhdDIiLCJjbGllbnRTdGF0cyIsImNvbXBpbGF0aW9uIiwiZXJyb3JzIiwibGVuZ3RoIiwiZXJyb3IiLCJBcnJheSIsImlzQXJyYXkiLCJpbmZvIiwiY2xpZW50TWFuaWZlc3QiLCJ0aGVuIiwiYnVmIiwidG9TdHJpbmciLCJrZXlzIiwiY2FjaGUiLCJmb3JFYWNoIiwiZGVmYXVsdCIsImJpbmQiLCJ1bmRlZmluZWQiLCJpbml0IiwiZSIsImRldlNlcnZlciIsImRldk1pZGRsZXdhcmUiLCJvdXRwdXRGaWxlU3lzdGVtIiwic2V0dXBNaWRkbGV3YXJlcyIsIm1pZGRsZXdhcmVzIiwiX3dlYnBhY2tDb25maWdzJDAkZGV2IiwiX3dlYnBhY2tDb25maWdzJDAkZGV2MiIsIl9kZXZTZXJ2ZXIkYXBwIiwiX3dlYnBhY2tDb25maWdzJDAkZGV2MyIsIkVycm9yIiwib3RoZXJSb3V0ZXMiLCJXRUJQQUNLX1BVQkxJQ19QQVRIIiwicHJveHkiLCJhcHAiLCJnZXQiLCJSZWdFeHAiLCJ1cmwiLCJlbmRzV2l0aCIsInN0YXR1c0NvZGUiLCJzZXRIZWFkZXIiLCJzZW5kIiwic29ja2V0Iiwib24iLCJydW5TZXJ2ZXIiLCJzdGFydCIsImhvb2tzIiwiZG9uZSIsInRhcCIsIm11bHRpU3RhdHMiLCJmaW5kZXIiLCJmaWxlVGV4dCIsInRleHRSb3dzIiwic3BsaXQiLCJtYXRjaCIsIl9lJHN0YWNrJG1hdGNoQWxsIiwic3RhY2siLCJtYXRjaEFsbCIsInJvdyIsIk51bWJlciIsInBhcnNlSW50IiwiY29sIiwiYmFzZW5hbWUiLCJ3cml0ZUZpbGVTeW5jIiwic3RvcFNlcnZlciIsInN0b3AiLCJ3YXJuIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvc3RhcnREZXZzZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuT2JqZWN0Lmhhc093biA9XG4gIE9iamVjdC5oYXNPd24gfHxcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xuICB9O1xuaW1wb3J0IHR5cGUgeyBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCBkaXNrRnMgZnJvbSAnZnMnO1xuaW1wb3J0IHsgY3JlYXRlRnNSZXF1aXJlIH0gZnJvbSAnZnMtcmVxdWlyZSc7XG5pbXBvcnQgeyBTZXJ2ZXIsIEluY29taW5nTWVzc2FnZSwgU2VydmVyUmVzcG9uc2UgfSBmcm9tICdodHRwJztcbmltcG9ydCB7IGNyZWF0ZUZzRnJvbVZvbHVtZSwgVm9sdW1lIH0gZnJvbSAnbWVtZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgc291cmNlTWFwU3VwcG9ydCBmcm9tICdzb3VyY2UtbWFwLXN1cHBvcnQnO1xuaW1wb3J0IHRtcCBmcm9tICd0bXAnO1xuaW1wb3J0IHsgdWZzIH0gZnJvbSAndW5pb25mcyc7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJztcbmltcG9ydCB3ZWJwYWNrLCB7IE11bHRpQ29tcGlsZXIgfSBmcm9tICd3ZWJwYWNrJztcbmltcG9ydCBsb2dnaW5nIGZyb20gJ3dlYnBhY2svbGliL2xvZ2dpbmcvcnVudGltZS5qcyc7XG5pbXBvcnQgV2VicGFja0RldlNlcnZlciBmcm9tICd3ZWJwYWNrLWRldi1zZXJ2ZXInO1xuXG5pbXBvcnQgJ2Nyb3NzLWZldGNoL2Rpc3Qvbm9kZS1wb2x5ZmlsbC5qcyc7XG5pbXBvcnQgeyBnZXRXZWJwYWNrQ29uZmlnIH0gZnJvbSAnLi9nZXRXZWJwYWNrQ29uZmlnLmpzJztcbmltcG9ydCB7IEJvdW5kUmVuZGVyIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIHJ1biBkaXJlY3RseSBmcm9tIG5vZGVcbmlmICgnbWFpbicgaW4gaW1wb3J0Lm1ldGEpIHtcbiAgY29uc3QgZW50cnlwb2ludCA9IHByb2Nlc3MuYXJndlsyXTtcblxuICBpZiAoIWVudHJ5cG9pbnQpIHtcbiAgICBjb25zb2xlLmxvZyhgVXNhZ2U6IHN0YXJ0LWFuYW5zaSA8ZW50cnlwb2ludC1maWxlPmApO1xuICAgIHByb2Nlc3MuZXhpdCgtMSk7XG4gIH1cblxuICBzdGFydERldlNlcnZlcihlbnRyeXBvaW50KTtcbn1cblxubGV0IHNlcnZlckZpbGVDb250ZW50czogUHJvbWlzZTxzdHJpbmc+ID0gUHJvbWlzZS5yZXNvbHZlKCcnKTtcbmxldCBzZXJ2ZXJFbnRyeSA9ICcnO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBzdGFydERldlNlcnZlcihcbiAgZW50cnlwb2ludDogc3RyaW5nLFxuICBlbnY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30sXG4pIHtcbiAgY29uc3Qgd2VicGFja0NvbmZpZyA9IGF3YWl0IGdldFdlYnBhY2tDb25maWcoKTtcblxuICBjb25zdCBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignYW5hbnNpLWRldnNlcnZlcicpO1xuXG4gIC8vIFNldCB1cCBpbiBtZW1vcnkgZmlsZXN5c3RlbVxuICBjb25zdCB2b2x1bWUgPSBuZXcgVm9sdW1lKCk7XG4gIGNvbnN0IGZzID0gY3JlYXRlRnNGcm9tVm9sdW1lKHZvbHVtZSk7XG4gIHVmcy51c2UoZGlza0ZzKS51c2UoZnMgYXMgYW55KTtcblxuICBjb25zdCBmc1JlcXVpcmUgPSBjcmVhdGVGc1JlcXVpcmUodWZzKTtcbiAgY29uc3QgcmVhZEZpbGUgPSBwcm9taXNpZnkodWZzLnJlYWRGaWxlKTtcbiAgbGV0IHNlcnZlcjogU2VydmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8vIEdlbmVyYXRlIGEgdGVtcG9yYXJ5IGZpbGUgc28gd2UgY2FuIGhvdCByZWxvYWQgZnJvbSB0aGUgcm9vdCBvZiB0aGUgYXBwbGljYXRpb25cbiAgZnVuY3Rpb24gaG90RW50cnkoZW50cnlQYXRoOiBzdHJpbmcpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAvLyBAdHMtaWdub3JlIGZvciBzb21lIHJlYXNvbiBpdCdzIG5vdCBwaWNraW5nIHVwIHRoYXQgb3RoZXIgb3B0aW9ucyBhcmUgb3B0aW9uYWxcbiAgICBjb25zdCBnZW5lcmF0ZWRFbnRyeXBvaW50ID0gdG1wLmZpbGVTeW5jKHsgcG9zdGZpeDogJy5qcycgfSk7XG4gICAgZGlza0ZzLndyaXRlU3luYyhcbiAgICAgIGdlbmVyYXRlZEVudHJ5cG9pbnQuZmQsXG4gICAgICBgXG4gIGltcG9ydCBlbnRyeSBmcm9tIFwiJHtwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgZW50cnlQYXRoKX1cIjtcblxuICBpZiAoaW1wb3J0Lm1ldGEud2VicGFja0hvdCkge1xuICAgIGltcG9ydC5tZXRhLndlYnBhY2tIb3QuYWNjZXB0KCk7XG4gIH1cblxuICBleHBvcnQgZGVmYXVsdCBlbnRyeTtcbiAgICBgLFxuICAgICk7XG4gICAgcmV0dXJuIGdlbmVyYXRlZEVudHJ5cG9pbnQ7XG4gIH1cblxuICBjb25zdCB3ZWJwYWNrQ29uZmlncyA9IFtcbiAgICB3ZWJwYWNrQ29uZmlnKFxuICAgICAge1xuICAgICAgICAuLi5lbnYsXG4gICAgICAgIGVudHJ5cGF0aDogaG90RW50cnkoZW50cnlwb2ludCkubmFtZSxcbiAgICAgICAgbmFtZTogJ2NsaWVudCcsXG4gICAgICB9LFxuICAgICAgeyBtb2RlOiAnZGV2ZWxvcG1lbnQnIH0sXG4gICAgKSxcbiAgICB3ZWJwYWNrQ29uZmlnKFxuICAgICAge1xuICAgICAgICAuLi5lbnYsXG4gICAgICAgIGVudHJ5cGF0aDogZW50cnlwb2ludC5yZXBsYWNlKCcudHN4JywgJy5zZXJ2ZXIudHN4JyksXG4gICAgICAgIG5hbWU6ICdzZXJ2ZXInLFxuICAgICAgICBCUk9XU0VSU0xJU1RfRU5WOiAnY3VycmVudCBub2RlJyxcbiAgICAgIH0sXG4gICAgICB7IG1vZGU6ICdkZXZlbG9wbWVudCcsIHRhcmdldDogJ25vZGUnIH0sXG4gICAgKSxcbiAgXSBhcyBjb25zdDtcblxuICAvLyBpbml0aWFsaXplIHRoZSB3ZWJwYWNrIGNvbXBpbGVyXG4gIGNvbnN0IGNvbXBpbGVyOiBNdWx0aUNvbXBpbGVyID0gd2VicGFjayh3ZWJwYWNrQ29uZmlncyk7XG5cbiAgc291cmNlTWFwU3VwcG9ydC5pbnN0YWxsKHsgaG9va1JlcXVpcmU6IHRydWUgfSk7XG5cbiAgZnVuY3Rpb24gZ2V0U2VydmVyQnVuZGxlKHNlcnZlclN0YXRzOiB3ZWJwYWNrLlN0YXRzKSB7XG4gICAgY29uc3Qgc2VydmVySnNvbiA9IHNlcnZlclN0YXRzLnRvSnNvbih7IGFzc2V0czogdHJ1ZSB9KTtcbiAgICByZXR1cm4gcGF0aC5qb2luKHNlcnZlckpzb24ub3V0cHV0UGF0aCA/PyAnJywgJ3NlcnZlci5qcycpO1xuICB9XG4gIGZ1bmN0aW9uIGhhbmRsZUVycm9yczxcbiAgICBGIGV4dGVuZHMgKFxuICAgICAgcmVxOiBSZXF1ZXN0IHwgSW5jb21pbmdNZXNzYWdlLFxuICAgICAgcmVzOiBSZXNwb25zZSB8IFNlcnZlclJlc3BvbnNlLFxuICAgICkgPT4gUHJvbWlzZTx2b2lkPixcbiAgPihmbjogRikge1xuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiAoXG4gICAgICByZXE6IFJlcXVlc3QgfCBJbmNvbWluZ01lc3NhZ2UsXG4gICAgICByZXM6IFJlc3BvbnNlIHwgU2VydmVyUmVzcG9uc2UsXG4gICAgICBuZXh0OiBOZXh0RnVuY3Rpb24sXG4gICAgKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZm4ocmVxLCByZXMpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBuZXh0KHgpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBsZXQgaW5pdFJlbmRlcjpcbiAgICB8IHsgYXJnczogUGFyYW1ldGVyczxCb3VuZFJlbmRlcj47IHJlc29sdmU6ICgpID0+IHZvaWQgfVtdXG4gICAgfCB1bmRlZmluZWQgPSBbXTtcbiAgbGV0IHJlbmRlcjogQm91bmRSZW5kZXIgPSAoLi4uYXJncykgPT5cbiAgICBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGluaXRSZW5kZXI/LnB1c2goeyBhcmdzLCByZXNvbHZlIH0pO1xuICAgIH0pO1xuXG4gIGZ1bmN0aW9uIGltcG9ydFJlbmRlcihzdGF0czogd2VicGFjay5TdGF0c1tdKSB7XG4gICAgY29uc3QgW2NsaWVudFN0YXRzLCBzZXJ2ZXJTdGF0c10gPSBzdGF0cztcbiAgICBpZiAoXG4gICAgICBjbGllbnRTdGF0cz8uY29tcGlsYXRpb24/LmVycm9ycz8ubGVuZ3RoIHx8XG4gICAgICBzZXJ2ZXJTdGF0cz8uY29tcGlsYXRpb24/LmVycm9ycz8ubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsb2cuZXJyb3IoJ0Vycm9ycyBmb3IgY2xpZW50IGJ1aWxkOiAnICsgY2xpZW50U3RhdHMuY29tcGlsYXRpb24uZXJyb3JzKTtcbiAgICAgIGxvZy5lcnJvcignRXJyb3JzIGZvciBzZXJ2ZXIgYnVpbGQ6ICcgKyBzZXJ2ZXJTdGF0cy5jb21waWxhdGlvbi5lcnJvcnMpO1xuICAgICAgLy8gZmlyc3QgdGltZSwgcmF0aGVyIHRoYW4gcmUtcmVuZGVyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpbml0UmVuZGVyKSkge1xuICAgICAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICAgICAgfVxuICAgICAgbG9nLmVycm9yKCdBYm92ZSBjb21waWxlciBlcnJvcnMgYmxvY2tpbmcgcmVsb2FkJyk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5pbmZvKCdMYXVuY2hpbmcgU1NSJyk7XG4gICAgfVxuXG4gICAgLy8gQVNTRVRTXG4gICAgY29uc3QgY2xpZW50TWFuaWZlc3QgPSBjbGllbnRTdGF0cy50b0pzb24oKTtcblxuICAgIHNlcnZlckVudHJ5ID0gZ2V0U2VydmVyQnVuZGxlKHNlcnZlclN0YXRzKTtcbiAgICBzZXJ2ZXJGaWxlQ29udGVudHMgPSByZWFkRmlsZShzZXJ2ZXJFbnRyeSkudGhlbihidWYgPT4gYnVmLnRvU3RyaW5nKCkpO1xuICAgIC8vIHJlbG9hZCBtb2R1bGVzXG4gICAgT2JqZWN0LmtleXMoZnNSZXF1aXJlLmNhY2hlKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBkZWxldGUgZnNSZXF1aXJlLmNhY2hlW2tleV07XG4gICAgfSk7XG4gICAgcmVuZGVyID0gKGZzUmVxdWlyZShzZXJ2ZXJFbnRyeSkgYXMgYW55KS5kZWZhdWx0LmJpbmQoXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBjbGllbnRNYW5pZmVzdCxcbiAgICApO1xuICAgIC8vIFNFUlZFUiBTSURFIEVOVFJZUE9JTlRcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbml0UmVuZGVyKSkge1xuICAgICAgaW5pdFJlbmRlci5mb3JFYWNoKGFzeW5jIGluaXQgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvZy5pbmZvKCdSZXNvbHZpbmcgcXVldWVkIHJlcXVlc3RzJyk7XG4gICAgICAgICAgYXdhaXQgcmVuZGVyKC4uLmluaXQuYXJncyk7XG4gICAgICAgICAgaW5pdC5yZXNvbHZlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2cuZXJyb3IoJ0Vycm9yIHdoZW4gYXR0ZW1wdGluZyB0byByZW5kZXIgcXVldWVkIHJlcXVlc3RzJyk7XG4gICAgICAgICAgbG9nLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGluaXRSZW5kZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZGV2U2VydmVyID0gbmV3IFdlYnBhY2tEZXZTZXJ2ZXIoXG4gICAgLy8gd3JpdGUgdG8gbWVtb3J5IGZpbGVzeXN0ZW0gc28gd2UgY2FuIGltcG9ydFxuICAgIHtcbiAgICAgIC4uLndlYnBhY2tDb25maWdzWzBdLmRldlNlcnZlcixcbiAgICAgIGRldk1pZGRsZXdhcmU6IHtcbiAgICAgICAgLi4ud2VicGFja0NvbmZpZ3NbMF0/LmRldlNlcnZlcj8uZGV2TWlkZGxld2FyZSxcbiAgICAgICAgb3V0cHV0RmlsZVN5c3RlbToge1xuICAgICAgICAgIC4uLmZzLFxuICAgICAgICAgIGpvaW46IHBhdGguam9pbiBhcyBhbnksXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgfSxcbiAgICAgIHNldHVwTWlkZGxld2FyZXM6IChtaWRkbGV3YXJlcywgZGV2U2VydmVyKSA9PiB7XG4gICAgICAgIGlmICghZGV2U2VydmVyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3ZWJwYWNrLWRldi1zZXJ2ZXIgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG90aGVyUm91dGVzID0gW1xuICAgICAgICAgIHByb2Nlc3MuZW52LldFQlBBQ0tfUFVCTElDX1BBVEgsXG4gICAgICAgICAgLi4uT2JqZWN0LmtleXMod2VicGFja0NvbmZpZ3NbMF0uZGV2U2VydmVyPy5wcm94eSA/PyB7fSksXG4gICAgICAgIF07XG4gICAgICAgIC8vIHNlcnZlIFNTUiBmb3Igbm9uLVdFQlBBQ0tfUFVCTElDX1BBVEhcbiAgICAgICAgZGV2U2VydmVyLmFwcD8uZ2V0KFxuICAgICAgICAgIG5ldyBSZWdFeHAoYF4oPyEke290aGVyUm91dGVzLmpvaW4oJ3wnKX0pYCksXG4gICAgICAgICAgaGFuZGxlRXJyb3JzKGFzeW5jIGZ1bmN0aW9uIChyZXE6IGFueSwgcmVzOiBhbnkpIHtcbiAgICAgICAgICAgIGlmIChyZXEudXJsLmVuZHNXaXRoKCdmYXZpY29uLmljbycpKSB7XG4gICAgICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xuICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAndGV4dC9odG1sJyk7XG4gICAgICAgICAgICAgIHJlcy5zZW5kKCdub3QgZm91bmQnKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzLnNvY2tldC5vbignZXJyb3InLCAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmF0YWwnLCBlcnJvcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXdhaXQgcmVuZGVyKHJlcSwgcmVzKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAod2VicGFja0NvbmZpZ3NbMF0uZGV2U2VydmVyPy5zZXR1cE1pZGRsZXdhcmVzKSB7XG4gICAgICAgICAgcmV0dXJuIHdlYnBhY2tDb25maWdzWzBdLmRldlNlcnZlci5zZXR1cE1pZGRsZXdhcmVzKFxuICAgICAgICAgICAgbWlkZGxld2FyZXMsXG4gICAgICAgICAgICBkZXZTZXJ2ZXIsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtaWRkbGV3YXJlcztcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb21waWxlcixcbiAgKTtcbiAgY29uc3QgcnVuU2VydmVyID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGRldlNlcnZlci5zdGFydCgpO1xuICAgIGRldlNlcnZlci5jb21waWxlci5ob29rcy5kb25lLnRhcChcbiAgICAgICdBbmFuc2kgU2VydmVyJyxcbiAgICAgIChtdWx0aVN0YXRzOiB3ZWJwYWNrLk11bHRpU3RhdHMgfCB3ZWJwYWNrLlN0YXRzKSA9PiB7XG4gICAgICAgIGlmICghbXVsdGlTdGF0cykge1xuICAgICAgICAgIGxvZy5lcnJvcignc3RhdHMgbm90IHNlbmQnKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFPYmplY3QuaGFzT3duKG11bHRpU3RhdHMsICdzdGF0cycpKSByZXR1cm47XG4gICAgICAgIGlmICgobXVsdGlTdGF0cyBhcyB3ZWJwYWNrLk11bHRpU3RhdHMpLnN0YXRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW1wb3J0UmVuZGVyKChtdWx0aVN0YXRzIGFzIHdlYnBhY2suTXVsdGlTdGF0cykuc3RhdHMpO1xuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBzZXJ2ZSBlbnRyeXBvaW50Jyk7XG4gICAgICAgICAgICBjb25zdCBmaW5kZXIgPSBuZXcgUmVnRXhwKGAke3NlcnZlckVudHJ5fTooW1xcXFxkXSspOihbXFxcXGRdKylgLCAnZycpO1xuICAgICAgICAgICAgc2VydmVyRmlsZUNvbnRlbnRzLnRoZW4oZmlsZVRleHQgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0ZXh0Um93cyA9IGZpbGVUZXh0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgICAgbG9nLmVycm9yKCc+Pj4gU3RhY2sgQ29udGV4dCBbc2VydmUgZW50cnlwb2ludF0gPDw8Jyk7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgZS5zdGFjay5tYXRjaEFsbChmaW5kZXIpID8/IFtdKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gTnVtYmVyLnBhcnNlSW50KG1hdGNoWzFdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSBOdW1iZXIucGFyc2VJbnQobWF0Y2hbMl0pO1xuICAgICAgICAgICAgICAgIGxvZy5lcnJvcihwYXRoLmJhc2VuYW1lKHNlcnZlckVudHJ5KSArICcgJyArIHJvdyArICc6JyArIGNvbCk7XG4gICAgICAgICAgICAgICAgbG9nLmVycm9yKHRleHRSb3dzW3JvdyAtIDJdKTtcbiAgICAgICAgICAgICAgICBsb2cuZXJyb3IodGV4dFJvd3Nbcm93IC0gMV0pO1xuICAgICAgICAgICAgICAgIGxvZy5lcnJvcihBcnJheShjb2wpLmpvaW4oJyAnKSArICdeJyk7XG4gICAgICAgICAgICAgICAgbG9nLmVycm9yKHRleHRSb3dzW3Jvd10pO1xuICAgICAgICAgICAgICAgIGxvZy5lcnJvcih0ZXh0Um93c1tyb3cgKyAxXSk7XG4gICAgICAgICAgICAgICAgbG9nLmVycm9yKHRleHRSb3dzW3JvdyArIDJdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkaXNrRnMud3JpdGVGaWxlU3luYyhzZXJ2ZXJFbnRyeSwgZmlsZVRleHQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZy5lcnJvcignT25seSBjb21waWxlciBvbmUgc3RhdCcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH07XG4gIGNvbnN0IHN0b3BTZXJ2ZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgbG9nLmluZm8oJ1N0b3BwaW5nIHNlcnZlci4uLicpO1xuICAgIGF3YWl0IGRldlNlcnZlci5zdG9wKCk7XG4gICAgbG9nLmluZm8oJ1NlcnZlciBjbG9zZWQnKTtcbiAgfTtcblxuICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgbG9nLndhcm4oJ1JlY2VpdmVkIFNJR0lOVCwgZGV2c2VydmVyIHNodXR0aW5nIGRvd24nKTtcbiAgICBzdG9wU2VydmVyKCk7XG4gICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgfSk7XG5cbiAgcnVuU2VydmVyKCk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0FBLE1BQU0sQ0FBQ0MsTUFBTSxHQUNYRCxNQUFNLENBQUNDLE1BQU0sSUFDYiwwQkFBMkIsU0FBU0EsTUFBTUEsQ0FBQ0MsRUFBRSxFQUFFQyxHQUFHLEVBQUU7RUFDbEQsT0FBT0gsTUFBTSxDQUFDSSxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDSixFQUFFLEVBQUVDLEdBQUcsQ0FBQztBQUN0RCxDQUFDO0FBRUgsT0FBT0ksTUFBTSxNQUFNLElBQUk7QUFDdkIsU0FBU0MsZUFBZSxRQUFRLFlBQVk7QUFFNUMsU0FBU0Msa0JBQWtCLEVBQUVDLE1BQU0sUUFBUSxPQUFPO0FBQ2xELE9BQU9DLElBQUksTUFBTSxNQUFNO0FBQ3ZCLE9BQU9DLGdCQUFnQixNQUFNLG9CQUFvQjtBQUNqRCxPQUFPQyxHQUFHLE1BQU0sS0FBSztBQUNyQixTQUFTQyxHQUFHLFFBQVEsU0FBUztBQUM3QixTQUFTQyxTQUFTLFFBQVEsTUFBTTtBQUNoQyxPQUFPQyxPQUFPLE1BQXlCLFNBQVM7QUFDaEQsT0FBT0MsT0FBTyxNQUFNLGdDQUFnQztBQUNwRCxPQUFPQyxnQkFBZ0IsTUFBTSxvQkFBb0I7QUFFakQsT0FBTyxtQ0FBbUM7QUFDMUMsU0FBU0MsZ0JBQWdCLFFBQVEsdUJBQXVCO0FBR3hEO0FBQ0EsSUFBSSxNQUFNLElBQUlDLE1BQU0sQ0FBQ0MsSUFBSSxFQUFFO0VBQ3pCLE1BQU1DLFVBQVUsR0FBR0MsT0FBTyxDQUFDQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBRWxDLElBQUksQ0FBQ0YsVUFBVSxFQUFFO0lBQ2ZHLE9BQU8sQ0FBQ0MsR0FBRyxDQUFFLHVDQUFzQyxDQUFDO0lBQ3BESCxPQUFPLENBQUNJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQjtFQUVBQyxjQUFjLENBQUNOLFVBQVUsQ0FBQztBQUM1QjtBQUVBLElBQUlPLGtCQUFtQyxHQUFHQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxFQUFFLENBQUM7QUFDN0QsSUFBSUMsV0FBVyxHQUFHLEVBQUU7QUFFcEIsZUFBZSxlQUFlSixjQUFjQSxDQUMxQ04sVUFBa0IsRUFDbEJXLEdBQTRCLEdBQUcsQ0FBQyxDQUFDLEVBQ2pDO0VBQUEsSUFBQUMsZ0JBQUEsRUFBQUMscUJBQUE7RUFDQSxNQUFNQyxhQUFhLEdBQUcsTUFBTWpCLGdCQUFnQixFQUFFO0VBRTlDLE1BQU1PLEdBQUcsR0FBR1QsT0FBTyxDQUFDb0IsU0FBUyxDQUFDLGtCQUFrQixDQUFDOztFQUVqRDtFQUNBLE1BQU1DLE1BQU0sR0FBRyxJQUFJNUIsTUFBTSxFQUFFO0VBQzNCLE1BQU02QixFQUFFLEdBQUc5QixrQkFBa0IsQ0FBQzZCLE1BQU0sQ0FBQztFQUNyQ3hCLEdBQUcsQ0FBQzBCLEdBQUcsQ0FBQ2pDLE1BQU0sQ0FBQyxDQUFDaUMsR0FBRyxDQUFDRCxFQUFFLENBQVE7RUFFOUIsTUFBTUUsU0FBUyxHQUFHakMsZUFBZSxDQUFDTSxHQUFHLENBQUM7RUFDdEMsTUFBTTRCLFFBQVEsR0FBRzNCLFNBQVMsQ0FBQ0QsR0FBRyxDQUFDNEIsUUFBUSxDQUFDO0VBQ3hDLElBQUlDLE1BQTBCOztFQUU5QjtFQUNBLFNBQVNDLFFBQVFBLENBQUNDLFNBQWlCLEVBQUU7SUFDbkM7SUFDQTtJQUNBLE1BQU1DLG1CQUFtQixHQUFHakMsR0FBRyxDQUFDa0MsUUFBUSxDQUFDO01BQUVDLE9BQU8sRUFBRTtJQUFNLENBQUMsQ0FBQztJQUM1RHpDLE1BQU0sQ0FBQzBDLFNBQVMsQ0FDZEgsbUJBQW1CLENBQUNJLEVBQUUsRUFDckI7QUFDUCx1QkFBdUJ2QyxJQUFJLENBQUNvQixPQUFPLENBQUNSLE9BQU8sQ0FBQzRCLEdBQUcsRUFBRSxFQUFFTixTQUFTLENBQUU7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxDQUNBO0lBQ0QsT0FBT0MsbUJBQW1CO0VBQzVCO0VBRUEsTUFBTU0sY0FBYyxHQUFHLENBQ3JCaEIsYUFBYSxDQUNYO0lBQ0UsR0FBR0gsR0FBRztJQUNOb0IsU0FBUyxFQUFFVCxRQUFRLENBQUN0QixVQUFVLENBQUMsQ0FBQ2dDLElBQUk7SUFDcENBLElBQUksRUFBRTtFQUNSLENBQUMsRUFDRDtJQUFFQyxJQUFJLEVBQUU7RUFBYyxDQUFDLENBQ3hCLEVBQ0RuQixhQUFhLENBQ1g7SUFDRSxHQUFHSCxHQUFHO0lBQ05vQixTQUFTLEVBQUUvQixVQUFVLENBQUNrQyxPQUFPLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQztJQUNwREYsSUFBSSxFQUFFLFFBQVE7SUFDZEcsZ0JBQWdCLEVBQUU7RUFDcEIsQ0FBQyxFQUNEO0lBQUVGLElBQUksRUFBRSxhQUFhO0lBQUVHLE1BQU0sRUFBRTtFQUFPLENBQUMsQ0FDeEMsQ0FDTzs7RUFFVjtFQUNBLE1BQU1DLFFBQXVCLEdBQUczQyxPQUFPLENBQUNvQyxjQUFjLENBQUM7RUFFdkR4QyxnQkFBZ0IsQ0FBQ2dELE9BQU8sQ0FBQztJQUFFQyxXQUFXLEVBQUU7RUFBSyxDQUFDLENBQUM7RUFFL0MsU0FBU0MsZUFBZUEsQ0FBQ0MsV0FBMEIsRUFBRTtJQUFBLElBQUFDLHFCQUFBO0lBQ25ELE1BQU1DLFVBQVUsR0FBR0YsV0FBVyxDQUFDRyxNQUFNLENBQUM7TUFBRUMsTUFBTSxFQUFFO0lBQUssQ0FBQyxDQUFDO0lBQ3ZELE9BQU94RCxJQUFJLENBQUN5RCxJQUFJLEVBQUFKLHFCQUFBLEdBQUNDLFVBQVUsQ0FBQ0ksVUFBVSxZQUFBTCxxQkFBQSxHQUFJLEVBQUUsRUFBRSxXQUFXLENBQUM7RUFDNUQ7RUFDQSxTQUFTTSxZQUFZQSxDQUtuQkMsRUFBSyxFQUFFO0lBQ1AsT0FBTyxnQkFDTEMsR0FBOEIsRUFDOUJDLEdBQThCLEVBQzlCQyxJQUFrQixFQUNsQjtNQUNBLElBQUk7UUFDRixPQUFPLE1BQU1ILEVBQUUsQ0FBQ0MsR0FBRyxFQUFFQyxHQUFHLENBQUM7TUFDM0IsQ0FBQyxDQUFDLE9BQU9FLENBQUMsRUFBRTtRQUNWRCxJQUFJLENBQUNDLENBQUMsQ0FBQztNQUNUO0lBQ0YsQ0FBQztFQUNIO0VBRUEsSUFBSUMsVUFFUyxHQUFHLEVBQUU7RUFDbEIsSUFBSUMsTUFBbUIsR0FBR0EsQ0FBQyxHQUFHQyxJQUFJLEtBQ2hDLElBQUloRCxPQUFPLENBQUNDLE9BQU8sSUFBSTtJQUFBLElBQUFnRCxXQUFBO0lBQ3JCLENBQUFBLFdBQUEsR0FBQUgsVUFBVSxxQkFBVkcsV0FBQSxDQUFZQyxJQUFJLENBQUM7TUFBRUYsSUFBSTtNQUFFL0M7SUFBUSxDQUFDLENBQUM7RUFDckMsQ0FBQyxDQUFDO0VBRUosU0FBU2tELFlBQVlBLENBQUNDLEtBQXNCLEVBQUU7SUFBQSxJQUFBQyxxQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxzQkFBQTtJQUM1QyxNQUFNLENBQUNDLFdBQVcsRUFBRXhCLFdBQVcsQ0FBQyxHQUFHbUIsS0FBSztJQUN4QyxJQUNFSyxXQUFXLGFBQUFKLHFCQUFBLEdBQVhJLFdBQVcsQ0FBRUMsV0FBVyxjQUFBSixzQkFBQSxHQUF4QkQscUJBQUEsQ0FBMEJNLE1BQU0sYUFBaENMLHNCQUFBLENBQWtDTSxNQUFNLElBQ3hDM0IsV0FBVyxhQUFBc0IscUJBQUEsR0FBWHRCLFdBQVcsQ0FBRXlCLFdBQVcsY0FBQUYsc0JBQUEsR0FBeEJELHFCQUFBLENBQTBCSSxNQUFNLGFBQWhDSCxzQkFBQSxDQUFrQ0ksTUFBTSxFQUN4QztNQUNBaEUsR0FBRyxDQUFDaUUsS0FBSyxDQUFDLDJCQUEyQixHQUFHSixXQUFXLENBQUNDLFdBQVcsQ0FBQ0MsTUFBTSxDQUFDO01BQ3ZFL0QsR0FBRyxDQUFDaUUsS0FBSyxDQUFDLDJCQUEyQixHQUFHNUIsV0FBVyxDQUFDeUIsV0FBVyxDQUFDQyxNQUFNLENBQUM7TUFDdkU7TUFDQSxJQUFJRyxLQUFLLENBQUNDLE9BQU8sQ0FBQ2pCLFVBQVUsQ0FBQyxFQUFFO1FBQzdCckQsT0FBTyxDQUFDSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDbEI7TUFDQUQsR0FBRyxDQUFDaUUsS0FBSyxDQUFDLHVDQUF1QyxDQUFDO01BQ2xEO0lBQ0YsQ0FBQyxNQUFNO01BQ0xqRSxHQUFHLENBQUNvRSxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzNCOztJQUVBO0lBQ0EsTUFBTUMsY0FBYyxHQUFHUixXQUFXLENBQUNyQixNQUFNLEVBQUU7SUFFM0NsQyxXQUFXLEdBQUc4QixlQUFlLENBQUNDLFdBQVcsQ0FBQztJQUMxQ2xDLGtCQUFrQixHQUFHYSxRQUFRLENBQUNWLFdBQVcsQ0FBQyxDQUFDZ0UsSUFBSSxDQUFDQyxHQUFHLElBQUlBLEdBQUcsQ0FBQ0MsUUFBUSxFQUFFLENBQUM7SUFDdEU7SUFDQWxHLE1BQU0sQ0FBQ21HLElBQUksQ0FBQzFELFNBQVMsQ0FBQzJELEtBQUssQ0FBQyxDQUFDQyxPQUFPLENBQUNsRyxHQUFHLElBQUk7TUFDMUMsT0FBT3NDLFNBQVMsQ0FBQzJELEtBQUssQ0FBQ2pHLEdBQUcsQ0FBQztJQUM3QixDQUFDLENBQUM7SUFDRjBFLE1BQU0sR0FBSXBDLFNBQVMsQ0FBQ1QsV0FBVyxDQUFDLENBQVNzRSxPQUFPLENBQUNDLElBQUksQ0FDbkRDLFNBQVMsRUFDVFQsY0FBYyxDQUNmO0lBQ0Q7SUFDQSxJQUFJSCxLQUFLLENBQUNDLE9BQU8sQ0FBQ2pCLFVBQVUsQ0FBQyxFQUFFO01BQzdCQSxVQUFVLENBQUN5QixPQUFPLENBQUMsTUFBTUksSUFBSSxJQUFJO1FBQy9CLElBQUk7VUFDRi9FLEdBQUcsQ0FBQ29FLElBQUksQ0FBQywyQkFBMkIsQ0FBQztVQUNyQyxNQUFNakIsTUFBTSxDQUFDLEdBQUc0QixJQUFJLENBQUMzQixJQUFJLENBQUM7VUFDMUIyQixJQUFJLENBQUMxRSxPQUFPLEVBQUU7UUFDaEIsQ0FBQyxDQUFDLE9BQU8yRSxDQUFDLEVBQUU7VUFDVmhGLEdBQUcsQ0FBQ2lFLEtBQUssQ0FBQyxpREFBaUQsQ0FBQztVQUM1RGpFLEdBQUcsQ0FBQ2lFLEtBQUssQ0FBQ2UsQ0FBQyxDQUFDO1FBQ2Q7TUFDRixDQUFDLENBQUM7TUFDRjlCLFVBQVUsR0FBRzRCLFNBQVM7SUFDeEI7RUFDRjtFQUVBLE1BQU1HLFNBQVMsR0FBRyxJQUFJekYsZ0JBQWdCO0VBQ3BDO0VBQ0E7SUFDRSxHQUFHa0MsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDdUQsU0FBUztJQUM5QkMsYUFBYSxFQUFFO01BQ2IsS0FBQTFFLGdCQUFBLEdBQUdrQixjQUFjLENBQUMsQ0FBQyxDQUFDLHNCQUFBakIscUJBQUEsR0FBakJELGdCQUFBLENBQW1CeUUsU0FBUyxxQkFBNUJ4RSxxQkFBQSxDQUE4QnlFLGFBQWE7TUFDOUNDLGdCQUFnQixFQUFFO1FBQ2hCLEdBQUd0RSxFQUFFO1FBQ0w2QixJQUFJLEVBQUV6RCxJQUFJLENBQUN5RDtNQUNiO0lBQ0YsQ0FBQztJQUNEMEMsZ0JBQWdCLEVBQUVBLENBQUNDLFdBQVcsRUFBRUosU0FBUyxLQUFLO01BQUEsSUFBQUsscUJBQUEsRUFBQUMsc0JBQUEsRUFBQUMsY0FBQSxFQUFBQyxzQkFBQTtNQUM1QyxJQUFJLENBQUNSLFNBQVMsRUFBRTtRQUNkLE1BQU0sSUFBSVMsS0FBSyxDQUFDLG1DQUFtQyxDQUFDO01BQ3REO01BRUEsTUFBTUMsV0FBVyxHQUFHLENBQ2xCOUYsT0FBTyxDQUFDVSxHQUFHLENBQUNxRixtQkFBbUIsRUFDL0IsR0FBR3RILE1BQU0sQ0FBQ21HLElBQUksRUFBQWEscUJBQUEsSUFBQUMsc0JBQUEsR0FBQzdELGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3VELFNBQVMscUJBQTNCTSxzQkFBQSxDQUE2Qk0sS0FBSyxZQUFBUCxxQkFBQSxHQUFJLENBQUMsQ0FBQyxDQUFDLENBQ3pEO01BQ0Q7TUFDQSxDQUFBRSxjQUFBLEdBQUFQLFNBQVMsQ0FBQ2EsR0FBRyxxQkFBYk4sY0FBQSxDQUFlTyxHQUFHLENBQ2hCLElBQUlDLE1BQU0sQ0FBRSxPQUFNTCxXQUFXLENBQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFFLEdBQUUsQ0FBQyxFQUMzQ0UsWUFBWSxDQUFDLGdCQUFnQkUsR0FBUSxFQUFFQyxHQUFRLEVBQUU7UUFDL0MsSUFBSUQsR0FBRyxDQUFDbUQsR0FBRyxDQUFDQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUU7VUFDbkNuRCxHQUFHLENBQUNvRCxVQUFVLEdBQUcsR0FBRztVQUNwQnBELEdBQUcsQ0FBQ3FELFNBQVMsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDO1VBQzFDckQsR0FBRyxDQUFDc0QsSUFBSSxDQUFDLFdBQVcsQ0FBQztVQUNyQjtRQUNGO1FBQ0F0RCxHQUFHLENBQUN1RCxNQUFNLENBQUNDLEVBQUUsQ0FBQyxPQUFPLEVBQUd0QyxLQUFjLElBQUs7VUFDekNsRSxPQUFPLENBQUNrRSxLQUFLLENBQUMsT0FBTyxFQUFFQSxLQUFLLENBQUM7UUFDL0IsQ0FBQyxDQUFDO1FBRUYsTUFBTWQsTUFBTSxDQUFDTCxHQUFHLEVBQUVDLEdBQUcsQ0FBQztNQUN4QixDQUFDLENBQUMsQ0FDSDtNQUVELEtBQUEwQyxzQkFBQSxHQUFJL0QsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDdUQsU0FBUyxhQUEzQlEsc0JBQUEsQ0FBNkJMLGdCQUFnQixFQUFFO1FBQ2pELE9BQU8xRCxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUN1RCxTQUFTLENBQUNHLGdCQUFnQixDQUNqREMsV0FBVyxFQUNYSixTQUFTLENBQ1Y7TUFDSDtNQUVBLE9BQU9JLFdBQVc7SUFDcEI7RUFDRixDQUFDLEVBQ0RwRCxRQUFRLENBQ1Q7RUFDRCxNQUFNdUUsU0FBUyxHQUFHLE1BQUFBLENBQUEsS0FBWTtJQUM1QixNQUFNdkIsU0FBUyxDQUFDd0IsS0FBSyxFQUFFO0lBQ3ZCeEIsU0FBUyxDQUFDaEQsUUFBUSxDQUFDeUUsS0FBSyxDQUFDQyxJQUFJLENBQUNDLEdBQUcsQ0FDL0IsZUFBZSxFQUNkQyxVQUE4QyxJQUFLO01BQ2xELElBQUksQ0FBQ0EsVUFBVSxFQUFFO1FBQ2Y3RyxHQUFHLENBQUNpRSxLQUFLLENBQUMsZ0JBQWdCLENBQUM7UUFDM0JwRSxPQUFPLENBQUNJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNsQjtNQUVBLElBQUksQ0FBQzNCLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDc0ksVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFO01BQ3pDLElBQUtBLFVBQVUsQ0FBd0JyRCxLQUFLLENBQUNRLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDdkQsSUFBSTtVQUNGVCxZQUFZLENBQUVzRCxVQUFVLENBQXdCckQsS0FBSyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxPQUFPd0IsQ0FBTSxFQUFFO1VBQ2ZoRixHQUFHLENBQUNpRSxLQUFLLENBQUMsaUNBQWlDLENBQUM7VUFDNUMsTUFBTTZDLE1BQU0sR0FBRyxJQUFJZCxNQUFNLENBQUUsR0FBRTFGLFdBQVksb0JBQW1CLEVBQUUsR0FBRyxDQUFDO1VBQ2xFSCxrQkFBa0IsQ0FBQ21FLElBQUksQ0FBQ3lDLFFBQVEsSUFBSTtZQUNsQyxNQUFNQyxRQUFRLEdBQUdELFFBQVEsQ0FBQ0UsS0FBSyxDQUFDLElBQUksQ0FBQztZQUNyQ2pILEdBQUcsQ0FBQ2lFLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQztZQUNyRCxLQUFLLE1BQU1pRCxLQUFLLEtBQUFDLGlCQUFBLEdBQUluQyxDQUFDLENBQUNvQyxLQUFLLENBQUNDLFFBQVEsQ0FBQ1AsTUFBTSxDQUFDLFlBQUFLLGlCQUFBLEdBQUksRUFBRSxFQUFFO2NBQUEsSUFBQUEsaUJBQUE7Y0FDbEQsTUFBTUcsR0FBRyxHQUFHQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ04sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3JDLE1BQU1PLEdBQUcsR0FBR0YsTUFBTSxDQUFDQyxRQUFRLENBQUNOLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUNyQ2xILEdBQUcsQ0FBQ2lFLEtBQUssQ0FBQ2hGLElBQUksQ0FBQ3lJLFFBQVEsQ0FBQ3BILFdBQVcsQ0FBQyxHQUFHLEdBQUcsR0FBR2dILEdBQUcsR0FBRyxHQUFHLEdBQUdHLEdBQUcsQ0FBQztjQUM3RHpILEdBQUcsQ0FBQ2lFLEtBQUssQ0FBQytDLFFBQVEsQ0FBQ00sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQzVCdEgsR0FBRyxDQUFDaUUsS0FBSyxDQUFDK0MsUUFBUSxDQUFDTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDNUJ0SCxHQUFHLENBQUNpRSxLQUFLLENBQUNDLEtBQUssQ0FBQ3VELEdBQUcsQ0FBQyxDQUFDL0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztjQUNyQzFDLEdBQUcsQ0FBQ2lFLEtBQUssQ0FBQytDLFFBQVEsQ0FBQ00sR0FBRyxDQUFDLENBQUM7Y0FDeEJ0SCxHQUFHLENBQUNpRSxLQUFLLENBQUMrQyxRQUFRLENBQUNNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztjQUM1QnRILEdBQUcsQ0FBQ2lFLEtBQUssQ0FBQytDLFFBQVEsQ0FBQ00sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzlCO1lBQ0F6SSxNQUFNLENBQUM4SSxhQUFhLENBQUNySCxXQUFXLEVBQUV5RyxRQUFRLENBQUM7VUFDN0MsQ0FBQyxDQUFDO1VBRUYsTUFBTS9CLENBQUM7UUFDVDtNQUNGLENBQUMsTUFBTTtRQUNMaEYsR0FBRyxDQUFDaUUsS0FBSyxDQUFDLHdCQUF3QixDQUFDO01BQ3JDO0lBQ0YsQ0FBQyxDQUNGO0VBQ0gsQ0FBQztFQUNELE1BQU0yRCxVQUFVLEdBQUcsTUFBQUEsQ0FBQSxLQUFZO0lBQzdCNUgsR0FBRyxDQUFDb0UsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQzlCLE1BQU1hLFNBQVMsQ0FBQzRDLElBQUksRUFBRTtJQUN0QjdILEdBQUcsQ0FBQ29FLElBQUksQ0FBQyxlQUFlLENBQUM7RUFDM0IsQ0FBQztFQUVEdkUsT0FBTyxDQUFDMEcsRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNO0lBQ3pCdkcsR0FBRyxDQUFDOEgsSUFBSSxDQUFDLDBDQUEwQyxDQUFDO0lBQ3BERixVQUFVLEVBQUU7SUFDWi9ILE9BQU8sQ0FBQ0ksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xCLENBQUMsQ0FBQztFQUVGdUcsU0FBUyxFQUFFO0FBQ2IifQ==
234
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJoYXNPd24iLCJpdCIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRpc2tGcyIsImNyZWF0ZUZzUmVxdWlyZSIsImNyZWF0ZUZzRnJvbVZvbHVtZSIsIlZvbHVtZSIsInBhdGgiLCJzb3VyY2VNYXBTdXBwb3J0IiwidG1wIiwidWZzIiwicHJvbWlzaWZ5Iiwid2VicGFjayIsImxvZ2dpbmciLCJXZWJwYWNrRGV2U2VydmVyIiwiZ2V0V2VicGFja0NvbmZpZyIsImltcG9ydCIsIm1ldGEiLCJlbnRyeXBvaW50IiwicHJvY2VzcyIsImFyZ3YiLCJjb25zb2xlIiwibG9nIiwiZXhpdCIsInN0YXJ0RGV2U2VydmVyIiwic2VydmVyRmlsZUNvbnRlbnRzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXJ2ZXJFbnRyeSIsImVudiIsIl93ZWJwYWNrQ29uZmlncyQiLCJfd2VicGFja0NvbmZpZ3MkJGRldlMiLCJ3ZWJwYWNrQ29uZmlnIiwiZ2V0TG9nZ2VyIiwidm9sdW1lIiwiZnMiLCJ1c2UiLCJmc1JlcXVpcmUiLCJyZWFkRmlsZSIsInNlcnZlciIsImhvdEVudHJ5IiwiZW50cnlQYXRoIiwiZ2VuZXJhdGVkRW50cnlwb2ludCIsImZpbGVTeW5jIiwicG9zdGZpeCIsIndyaXRlU3luYyIsImZkIiwiY3dkIiwid2VicGFja0NvbmZpZ3MiLCJlbnRyeXBhdGgiLCJuYW1lIiwibW9kZSIsInJlcGxhY2UiLCJCUk9XU0VSU0xJU1RfRU5WIiwidGFyZ2V0IiwiY29tcGlsZXIiLCJpbnN0YWxsIiwiaG9va1JlcXVpcmUiLCJnZXRTZXJ2ZXJCdW5kbGUiLCJzZXJ2ZXJTdGF0cyIsIl9zZXJ2ZXJKc29uJG91dHB1dFBhdCIsInNlcnZlckpzb24iLCJ0b0pzb24iLCJhc3NldHMiLCJqb2luIiwib3V0cHV0UGF0aCIsImhhbmRsZUVycm9ycyIsImZuIiwicmVxIiwicmVzIiwibmV4dCIsIngiLCJpbml0UmVuZGVyIiwicmVuZGVyIiwiYXJncyIsIl9pbml0UmVuZGVyIiwicHVzaCIsImltcG9ydFJlbmRlciIsInN0YXRzIiwiX2NsaWVudFN0YXRzJGNvbXBpbGF0IiwiX2NsaWVudFN0YXRzJGNvbXBpbGF0MiIsIl9zZXJ2ZXJTdGF0cyRjb21waWxhdCIsIl9zZXJ2ZXJTdGF0cyRjb21waWxhdDIiLCJjbGllbnRTdGF0cyIsImNvbXBpbGF0aW9uIiwiZXJyb3JzIiwibGVuZ3RoIiwiZXJyb3IiLCJBcnJheSIsImlzQXJyYXkiLCJpbmZvIiwiY2xpZW50TWFuaWZlc3QiLCJ0aGVuIiwiYnVmIiwidG9TdHJpbmciLCJrZXlzIiwiY2FjaGUiLCJmb3JFYWNoIiwiZGVmYXVsdCIsImJpbmQiLCJ1bmRlZmluZWQiLCJpbml0IiwiZSIsImRldlNlcnZlciIsImRldk1pZGRsZXdhcmUiLCJvdXRwdXRGaWxlU3lzdGVtIiwic2V0dXBNaWRkbGV3YXJlcyIsIm1pZGRsZXdhcmVzIiwiX3dlYnBhY2tDb25maWdzJDAkZGV2IiwiX3dlYnBhY2tDb25maWdzJDAkZGV2MiIsIl9kZXZTZXJ2ZXIkYXBwIiwiX3dlYnBhY2tDb25maWdzJDAkZGV2MyIsIkVycm9yIiwib3RoZXJSb3V0ZXMiLCJXRUJQQUNLX1BVQkxJQ19QQVRIIiwicHJveHkiLCJhcHAiLCJnZXQiLCJSZWdFeHAiLCJ1cmwiLCJlbmRzV2l0aCIsInN0YXR1c0NvZGUiLCJzZXRIZWFkZXIiLCJzZW5kIiwic29ja2V0Iiwib24iLCJjb2RlIiwicnVuU2VydmVyIiwic3RhcnQiLCJob29rcyIsImRvbmUiLCJ0YXAiLCJtdWx0aVN0YXRzIiwiZmluZGVyIiwiZmlsZVRleHQiLCJ0ZXh0Um93cyIsInNwbGl0IiwibWF0Y2giLCJfZSRzdGFjayRtYXRjaEFsbCIsInN0YWNrIiwibWF0Y2hBbGwiLCJyb3ciLCJOdW1iZXIiLCJwYXJzZUludCIsImNvbCIsImJhc2VuYW1lIiwid3JpdGVGaWxlU3luYyIsInN0b3BTZXJ2ZXIiLCJzdG9wIiwid2FybiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3N0YXJ0RGV2c2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbk9iamVjdC5oYXNPd24gPVxuICBPYmplY3QuaGFzT3duIHx8XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbiAgfTtcbmltcG9ydCB0eXBlIHsgTmV4dEZ1bmN0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgZGlza0ZzIGZyb20gJ2ZzJztcbmltcG9ydCB7IGNyZWF0ZUZzUmVxdWlyZSB9IGZyb20gJ2ZzLXJlcXVpcmUnO1xuaW1wb3J0IHsgU2VydmVyLCBJbmNvbWluZ01lc3NhZ2UsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgeyBjcmVhdGVGc0Zyb21Wb2x1bWUsIFZvbHVtZSB9IGZyb20gJ21lbWZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHNvdXJjZU1hcFN1cHBvcnQgZnJvbSAnc291cmNlLW1hcC1zdXBwb3J0JztcbmltcG9ydCB0bXAgZnJvbSAndG1wJztcbmltcG9ydCB7IHVmcyB9IGZyb20gJ3VuaW9uZnMnO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgd2VicGFjaywgeyBNdWx0aUNvbXBpbGVyIH0gZnJvbSAnd2VicGFjayc7XG5pbXBvcnQgbG9nZ2luZyBmcm9tICd3ZWJwYWNrL2xpYi9sb2dnaW5nL3J1bnRpbWUuanMnO1xuaW1wb3J0IFdlYnBhY2tEZXZTZXJ2ZXIgZnJvbSAnd2VicGFjay1kZXYtc2VydmVyJztcblxuaW1wb3J0ICdjcm9zcy1mZXRjaC9kaXN0L25vZGUtcG9seWZpbGwuanMnO1xuaW1wb3J0IHsgZ2V0V2VicGFja0NvbmZpZyB9IGZyb20gJy4vZ2V0V2VicGFja0NvbmZpZy5qcyc7XG5pbXBvcnQgeyBCb3VuZFJlbmRlciB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyBydW4gZGlyZWN0bHkgZnJvbSBub2RlXG5pZiAoJ21haW4nIGluIGltcG9ydC5tZXRhKSB7XG4gIGNvbnN0IGVudHJ5cG9pbnQgPSBwcm9jZXNzLmFyZ3ZbMl07XG5cbiAgaWYgKCFlbnRyeXBvaW50KSB7XG4gICAgY29uc29sZS5sb2coYFVzYWdlOiBzdGFydC1hbmFuc2kgPGVudHJ5cG9pbnQtZmlsZT5gKTtcbiAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICB9XG5cbiAgc3RhcnREZXZTZXJ2ZXIoZW50cnlwb2ludCk7XG59XG5cbmxldCBzZXJ2ZXJGaWxlQ29udGVudHM6IFByb21pc2U8c3RyaW5nPiA9IFByb21pc2UucmVzb2x2ZSgnJyk7XG5sZXQgc2VydmVyRW50cnkgPSAnJztcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gc3RhcnREZXZTZXJ2ZXIoXG4gIGVudHJ5cG9pbnQ6IHN0cmluZyxcbiAgZW52OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9LFxuKSB7XG4gIGNvbnN0IHdlYnBhY2tDb25maWcgPSBhd2FpdCBnZXRXZWJwYWNrQ29uZmlnKCk7XG5cbiAgY29uc3QgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2FuYW5zaS1kZXZzZXJ2ZXInKTtcblxuICAvLyBTZXQgdXAgaW4gbWVtb3J5IGZpbGVzeXN0ZW1cbiAgY29uc3Qgdm9sdW1lID0gbmV3IFZvbHVtZSgpO1xuICBjb25zdCBmcyA9IGNyZWF0ZUZzRnJvbVZvbHVtZSh2b2x1bWUpO1xuICB1ZnMudXNlKGRpc2tGcykudXNlKGZzIGFzIGFueSk7XG5cbiAgY29uc3QgZnNSZXF1aXJlID0gY3JlYXRlRnNSZXF1aXJlKHVmcyk7XG4gIGNvbnN0IHJlYWRGaWxlID0gcHJvbWlzaWZ5KHVmcy5yZWFkRmlsZSk7XG4gIGxldCBzZXJ2ZXI6IFNlcnZlciB8IHVuZGVmaW5lZDtcblxuICAvLyBHZW5lcmF0ZSBhIHRlbXBvcmFyeSBmaWxlIHNvIHdlIGNhbiBob3QgcmVsb2FkIGZyb20gdGhlIHJvb3Qgb2YgdGhlIGFwcGxpY2F0aW9uXG4gIGZ1bmN0aW9uIGhvdEVudHJ5KGVudHJ5UGF0aDogc3RyaW5nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgLy8gQHRzLWlnbm9yZSBmb3Igc29tZSByZWFzb24gaXQncyBub3QgcGlja2luZyB1cCB0aGF0IG90aGVyIG9wdGlvbnMgYXJlIG9wdGlvbmFsXG4gICAgY29uc3QgZ2VuZXJhdGVkRW50cnlwb2ludCA9IHRtcC5maWxlU3luYyh7IHBvc3RmaXg6ICcuanMnIH0pO1xuICAgIGRpc2tGcy53cml0ZVN5bmMoXG4gICAgICBnZW5lcmF0ZWRFbnRyeXBvaW50LmZkLFxuICAgICAgYFxuICBpbXBvcnQgZW50cnkgZnJvbSBcIiR7cGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIGVudHJ5UGF0aCl9XCI7XG5cbiAgaWYgKGltcG9ydC5tZXRhLndlYnBhY2tIb3QpIHtcbiAgICBpbXBvcnQubWV0YS53ZWJwYWNrSG90LmFjY2VwdCgpO1xuICB9XG5cbiAgZXhwb3J0IGRlZmF1bHQgZW50cnk7XG4gICAgYCxcbiAgICApO1xuICAgIHJldHVybiBnZW5lcmF0ZWRFbnRyeXBvaW50O1xuICB9XG5cbiAgY29uc3Qgd2VicGFja0NvbmZpZ3MgPSBbXG4gICAgd2VicGFja0NvbmZpZyhcbiAgICAgIHtcbiAgICAgICAgLi4uZW52LFxuICAgICAgICBlbnRyeXBhdGg6IGhvdEVudHJ5KGVudHJ5cG9pbnQpLm5hbWUsXG4gICAgICAgIG5hbWU6ICdjbGllbnQnLFxuICAgICAgfSxcbiAgICAgIHsgbW9kZTogJ2RldmVsb3BtZW50JyB9LFxuICAgICksXG4gICAgd2VicGFja0NvbmZpZyhcbiAgICAgIHtcbiAgICAgICAgLi4uZW52LFxuICAgICAgICBlbnRyeXBhdGg6IGVudHJ5cG9pbnQucmVwbGFjZSgnLnRzeCcsICcuc2VydmVyLnRzeCcpLFxuICAgICAgICBuYW1lOiAnc2VydmVyJyxcbiAgICAgICAgQlJPV1NFUlNMSVNUX0VOVjogJ2N1cnJlbnQgbm9kZScsXG4gICAgICB9LFxuICAgICAgeyBtb2RlOiAnZGV2ZWxvcG1lbnQnLCB0YXJnZXQ6ICdub2RlJyB9LFxuICAgICksXG4gIF0gYXMgY29uc3Q7XG5cbiAgLy8gaW5pdGlhbGl6ZSB0aGUgd2VicGFjayBjb21waWxlclxuICBjb25zdCBjb21waWxlcjogTXVsdGlDb21waWxlciA9IHdlYnBhY2sod2VicGFja0NvbmZpZ3MpO1xuXG4gIHNvdXJjZU1hcFN1cHBvcnQuaW5zdGFsbCh7IGhvb2tSZXF1aXJlOiB0cnVlIH0pO1xuXG4gIGZ1bmN0aW9uIGdldFNlcnZlckJ1bmRsZShzZXJ2ZXJTdGF0czogd2VicGFjay5TdGF0cykge1xuICAgIGNvbnN0IHNlcnZlckpzb24gPSBzZXJ2ZXJTdGF0cy50b0pzb24oeyBhc3NldHM6IHRydWUgfSk7XG4gICAgcmV0dXJuIHBhdGguam9pbihzZXJ2ZXJKc29uLm91dHB1dFBhdGggPz8gJycsICdzZXJ2ZXIuanMnKTtcbiAgfVxuICBmdW5jdGlvbiBoYW5kbGVFcnJvcnM8XG4gICAgRiBleHRlbmRzIChcbiAgICAgIHJlcTogUmVxdWVzdCB8IEluY29taW5nTWVzc2FnZSxcbiAgICAgIHJlczogUmVzcG9uc2UgfCBTZXJ2ZXJSZXNwb25zZSxcbiAgICApID0+IFByb21pc2U8dm9pZD4sXG4gID4oZm46IEYpIHtcbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKFxuICAgICAgcmVxOiBSZXF1ZXN0IHwgSW5jb21pbmdNZXNzYWdlLFxuICAgICAgcmVzOiBSZXNwb25zZSB8IFNlcnZlclJlc3BvbnNlLFxuICAgICAgbmV4dDogTmV4dEZ1bmN0aW9uLFxuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZuKHJlcSwgcmVzKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgbmV4dCh4KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgbGV0IGluaXRSZW5kZXI6XG4gICAgfCB7IGFyZ3M6IFBhcmFtZXRlcnM8Qm91bmRSZW5kZXI+OyByZXNvbHZlOiAoKSA9PiB2b2lkIH1bXVxuICAgIHwgdW5kZWZpbmVkID0gW107XG4gIGxldCByZW5kZXI6IEJvdW5kUmVuZGVyID0gKC4uLmFyZ3MpID0+XG4gICAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpbml0UmVuZGVyPy5wdXNoKHsgYXJncywgcmVzb2x2ZSB9KTtcbiAgICB9KTtcblxuICBmdW5jdGlvbiBpbXBvcnRSZW5kZXIoc3RhdHM6IHdlYnBhY2suU3RhdHNbXSkge1xuICAgIGNvbnN0IFtjbGllbnRTdGF0cywgc2VydmVyU3RhdHNdID0gc3RhdHM7XG4gICAgaWYgKFxuICAgICAgY2xpZW50U3RhdHM/LmNvbXBpbGF0aW9uPy5lcnJvcnM/Lmxlbmd0aCB8fFxuICAgICAgc2VydmVyU3RhdHM/LmNvbXBpbGF0aW9uPy5lcnJvcnM/Lmxlbmd0aFxuICAgICkge1xuICAgICAgbG9nLmVycm9yKCdFcnJvcnMgZm9yIGNsaWVudCBidWlsZDogJyArIGNsaWVudFN0YXRzLmNvbXBpbGF0aW9uLmVycm9ycyk7XG4gICAgICBsb2cuZXJyb3IoJ0Vycm9ycyBmb3Igc2VydmVyIGJ1aWxkOiAnICsgc2VydmVyU3RhdHMuY29tcGlsYXRpb24uZXJyb3JzKTtcbiAgICAgIC8vIGZpcnN0IHRpbWUsIHJhdGhlciB0aGFuIHJlLXJlbmRlclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5pdFJlbmRlcikpIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvcignQWJvdmUgY29tcGlsZXIgZXJyb3JzIGJsb2NraW5nIHJlbG9hZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuaW5mbygnTGF1bmNoaW5nIFNTUicpO1xuICAgIH1cblxuICAgIC8vIEFTU0VUU1xuICAgIGNvbnN0IGNsaWVudE1hbmlmZXN0ID0gY2xpZW50U3RhdHMudG9Kc29uKCk7XG5cbiAgICBzZXJ2ZXJFbnRyeSA9IGdldFNlcnZlckJ1bmRsZShzZXJ2ZXJTdGF0cyk7XG4gICAgc2VydmVyRmlsZUNvbnRlbnRzID0gcmVhZEZpbGUoc2VydmVyRW50cnkpLnRoZW4oYnVmID0+IGJ1Zi50b1N0cmluZygpKTtcbiAgICAvLyByZWxvYWQgbW9kdWxlc1xuICAgIE9iamVjdC5rZXlzKGZzUmVxdWlyZS5jYWNoZSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgZGVsZXRlIGZzUmVxdWlyZS5jYWNoZVtrZXldO1xuICAgIH0pO1xuICAgIHJlbmRlciA9IChmc1JlcXVpcmUoc2VydmVyRW50cnkpIGFzIGFueSkuZGVmYXVsdC5iaW5kKFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgY2xpZW50TWFuaWZlc3QsXG4gICAgKTtcbiAgICAvLyBTRVJWRVIgU0lERSBFTlRSWVBPSU5UXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5pdFJlbmRlcikpIHtcbiAgICAgIGluaXRSZW5kZXIuZm9yRWFjaChhc3luYyBpbml0ID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsb2cuaW5mbygnUmVzb2x2aW5nIHF1ZXVlZCByZXF1ZXN0cycpO1xuICAgICAgICAgIGF3YWl0IHJlbmRlciguLi5pbml0LmFyZ3MpO1xuICAgICAgICAgIGluaXQucmVzb2x2ZSgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nLmVycm9yKCdFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gcmVuZGVyIHF1ZXVlZCByZXF1ZXN0cycpO1xuICAgICAgICAgIGxvZy5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpbml0UmVuZGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRldlNlcnZlciA9IG5ldyBXZWJwYWNrRGV2U2VydmVyKFxuICAgIC8vIHdyaXRlIHRvIG1lbW9yeSBmaWxlc3lzdGVtIHNvIHdlIGNhbiBpbXBvcnRcbiAgICB7XG4gICAgICAuLi53ZWJwYWNrQ29uZmlnc1swXS5kZXZTZXJ2ZXIsXG4gICAgICBkZXZNaWRkbGV3YXJlOiB7XG4gICAgICAgIC4uLndlYnBhY2tDb25maWdzWzBdPy5kZXZTZXJ2ZXI/LmRldk1pZGRsZXdhcmUsXG4gICAgICAgIG91dHB1dEZpbGVTeXN0ZW06IHtcbiAgICAgICAgICAuLi5mcyxcbiAgICAgICAgICBqb2luOiBwYXRoLmpvaW4gYXMgYW55LFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgIH0sXG4gICAgICBzZXR1cE1pZGRsZXdhcmVzOiAobWlkZGxld2FyZXMsIGRldlNlcnZlcikgPT4ge1xuICAgICAgICBpZiAoIWRldlNlcnZlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignd2VicGFjay1kZXYtc2VydmVyIGlzIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvdGhlclJvdXRlcyA9IFtcbiAgICAgICAgICBwcm9jZXNzLmVudi5XRUJQQUNLX1BVQkxJQ19QQVRILFxuICAgICAgICAgIC4uLk9iamVjdC5rZXlzKHdlYnBhY2tDb25maWdzWzBdLmRldlNlcnZlcj8ucHJveHkgPz8ge30pLFxuICAgICAgICBdO1xuICAgICAgICAvLyBzZXJ2ZSBTU1IgZm9yIG5vbi1XRUJQQUNLX1BVQkxJQ19QQVRIXG4gICAgICAgIGRldlNlcnZlci5hcHA/LmdldChcbiAgICAgICAgICBuZXcgUmVnRXhwKGBeKD8hJHtvdGhlclJvdXRlcy5qb2luKCd8Jyl9KWApLFxuICAgICAgICAgIGhhbmRsZUVycm9ycyhhc3luYyBmdW5jdGlvbiAocmVxOiBhbnksIHJlczogYW55KSB7XG4gICAgICAgICAgICBpZiAocmVxLnVybC5lbmRzV2l0aCgnZmF2aWNvbi5pY28nKSkge1xuICAgICAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDQwNDtcbiAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC10eXBlJywgJ3RleHQvaHRtbCcpO1xuICAgICAgICAgICAgICByZXMuc2VuZCgnbm90IGZvdW5kJyk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcy5zb2NrZXQub24oJ2Vycm9yJywgKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgIGxvZy5lcnJvcignRmF0YWw6JywgZXJyb3IpO1xuICAgICAgICAgICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSA9PT0gJ0VDT05OUkVTRVQnKSB7XG4gICAgICAgICAgICAgICAgbG9nLmVycm9yKFxuICAgICAgICAgICAgICAgICAgJ0VDT05OUkVTRVQgaXMgdXN1YWxseSBkdWUgdG8gYnJvd3NlciBjbG9zaW5nIHRoZSBjb25uZWN0aW9uJyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXdhaXQgcmVuZGVyKHJlcSwgcmVzKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAod2VicGFja0NvbmZpZ3NbMF0uZGV2U2VydmVyPy5zZXR1cE1pZGRsZXdhcmVzKSB7XG4gICAgICAgICAgcmV0dXJuIHdlYnBhY2tDb25maWdzWzBdLmRldlNlcnZlci5zZXR1cE1pZGRsZXdhcmVzKFxuICAgICAgICAgICAgbWlkZGxld2FyZXMsXG4gICAgICAgICAgICBkZXZTZXJ2ZXIsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtaWRkbGV3YXJlcztcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb21waWxlcixcbiAgKTtcbiAgY29uc3QgcnVuU2VydmVyID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGRldlNlcnZlci5zdGFydCgpO1xuICAgIGRldlNlcnZlci5jb21waWxlci5ob29rcy5kb25lLnRhcChcbiAgICAgICdBbmFuc2kgU2VydmVyJyxcbiAgICAgIChtdWx0aVN0YXRzOiB3ZWJwYWNrLk11bHRpU3RhdHMgfCB3ZWJwYWNrLlN0YXRzKSA9PiB7XG4gICAgICAgIGlmICghbXVsdGlTdGF0cykge1xuICAgICAgICAgIGxvZy5lcnJvcignc3RhdHMgbm90IHNlbmQnKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFPYmplY3QuaGFzT3duKG11bHRpU3RhdHMsICdzdGF0cycpKSByZXR1cm47XG4gICAgICAgIGlmICgobXVsdGlTdGF0cyBhcyB3ZWJwYWNrLk11bHRpU3RhdHMpLnN0YXRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW1wb3J0UmVuZGVyKChtdWx0aVN0YXRzIGFzIHdlYnBhY2suTXVsdGlTdGF0cykuc3RhdHMpO1xuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBzZXJ2ZSBlbnRyeXBvaW50Jyk7XG4gICAgICAgICAgICBjb25zdCBmaW5kZXIgPSBuZXcgUmVnRXhwKGAke3NlcnZlckVudHJ5fTooW1xcXFxkXSspOihbXFxcXGRdKylgLCAnZycpO1xuICAgICAgICAgICAgc2VydmVyRmlsZUNvbnRlbnRzLnRoZW4oZmlsZVRleHQgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0ZXh0Um93cyA9IGZpbGVUZXh0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgICAgbG9nLmVycm9yKCc+Pj4gU3RhY2sgQ29udGV4dCBbc2VydmUgZW50cnlwb2ludF0gPDw8Jyk7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgZS5zdGFjay5tYXRjaEFsbChmaW5kZXIpID8/IFtdKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gTnVtYmVyLnBhcnNlSW50KG1hdGNoWzFdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSBOdW1iZXIucGFyc2VJbnQobWF0Y2hbMl0pO1xuICAgICAgICAgICAgICAgIGxvZy5lcnJvcihwYXRoLmJhc2VuYW1lKHNlcnZlckVudHJ5KSArICcgJyArIHJvdyArICc6JyArIGNvbCk7XG4gICAgICAgICAgICAgICAgbG9nLmVycm9yKHRleHRSb3dzW3JvdyAtIDJdKTtcbiAgICAgICAgICAgICAgICBsb2cuZXJyb3IodGV4dFJvd3Nbcm93IC0gMV0pO1xuICAgICAgICAgICAgICAgIGxvZy5lcnJvcihBcnJheShjb2wpLmpvaW4oJyAnKSArICdeJyk7XG4gICAgICAgICAgICAgICAgbG9nLmVycm9yKHRleHRSb3dzW3Jvd10pO1xuICAgICAgICAgICAgICAgIGxvZy5lcnJvcih0ZXh0Um93c1tyb3cgKyAxXSk7XG4gICAgICAgICAgICAgICAgbG9nLmVycm9yKHRleHRSb3dzW3JvdyArIDJdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkaXNrRnMud3JpdGVGaWxlU3luYyhzZXJ2ZXJFbnRyeSwgZmlsZVRleHQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZy5lcnJvcignT25seSBjb21waWxlciBvbmUgc3RhdCcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH07XG4gIGNvbnN0IHN0b3BTZXJ2ZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgbG9nLmluZm8oJ1N0b3BwaW5nIHNlcnZlci4uLicpO1xuICAgIGF3YWl0IGRldlNlcnZlci5zdG9wKCk7XG4gICAgbG9nLmluZm8oJ1NlcnZlciBjbG9zZWQnKTtcbiAgfTtcblxuICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgbG9nLndhcm4oJ1JlY2VpdmVkIFNJR0lOVCwgZGV2c2VydmVyIHNodXR0aW5nIGRvd24nKTtcbiAgICBzdG9wU2VydmVyKCk7XG4gICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgfSk7XG5cbiAgcnVuU2VydmVyKCk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0FB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
@@ -1,5 +1,4 @@
1
1
  /// <reference types="react" />
2
- import type { Policy } from './csp.js';
3
2
  type Props = {
4
3
  children: React.ReactNode;
5
4
  assets: {
@@ -13,10 +12,8 @@ type Props = {
13
12
  title: string;
14
13
  rootId: string;
15
14
  charSet: string;
16
- csPolicy?: Policy;
17
- nonce?: string | undefined;
18
15
  };
19
- declare function Document({ assets, head, children, title, rootId, charSet, csPolicy, nonce, scripts, extraStyle, }: Props): JSX.Element;
16
+ declare function Document({ assets, head, children, title, rootId, charSet, scripts, extraStyle, }: Props): JSX.Element;
20
17
  declare namespace Document {
21
18
  var defaultProps: {
22
19
  head: JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentComponent.d.ts","sourceRoot":"","sources":["../../src/spouts/DocumentComponent.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGvC,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,CAAC;AAEF,iBAAwB,QAAQ,CAAC,EAC/B,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,MAAM,EACN,OAAO,EACP,QAAQ,EACR,KAAK,EACL,OAAO,EACP,UAAU,GACX,EAAE,KAAK,eAyCP;kBApDuB,QAAQ;;;;;;;;eAAR,QAAQ"}
1
+ {"version":3,"file":"DocumentComponent.d.ts","sourceRoot":"","sources":["../../src/spouts/DocumentComponent.tsx"],"names":[],"mappings":";AAAA,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,iBAAwB,QAAQ,CAAC,EAC/B,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,UAAU,GACX,EAAE,KAAK,eAuBP;kBAhCuB,QAAQ;;;;;;;;eAAR,QAAQ"}
@@ -1,7 +1,6 @@
1
1
  import _jsx from "@babel/runtime/helpers/jsx";
2
2
  var _process$env$WEBPACK_;
3
3
  import React from "react";
4
- import { buildPolicy } from './csp.js';
5
4
  export default function Document({
6
5
  assets,
7
6
  head,
@@ -9,32 +8,12 @@ export default function Document({
9
8
  title,
10
9
  rootId,
11
10
  charSet,
12
- csPolicy,
13
- nonce,
14
11
  scripts,
15
12
  extraStyle
16
13
  }) {
17
- let cspMeta = null;
18
- if (csPolicy) {
19
- // add nonce to policy
20
- const policy = {
21
- ...csPolicy
22
- };
23
- if (nonce) {
24
- if (typeof policy['script-src'] === 'string') {
25
- policy['script-src'] = [policy['script-src'], `'nonce-${nonce}'`];
26
- } else {
27
- policy['script-src'] = [...policy['script-src'], `'nonce-${nonce}'`];
28
- }
29
- }
30
- cspMeta = /*#__PURE__*/_jsx("meta", {
31
- httpEquiv: "Content-Security-Policy",
32
- content: buildPolicy(policy)
33
- });
34
- }
35
14
  return /*#__PURE__*/_jsx("html", {}, void 0, /*#__PURE__*/_jsx("head", {}, void 0, /*#__PURE__*/_jsx("meta", {
36
15
  charSet: charSet
37
- }), cspMeta, head, extraStyle, assets.map((asset, i) => /*#__PURE__*/React.createElement("link", {
16
+ }), head, extraStyle, assets.map((asset, i) => /*#__PURE__*/React.createElement("link", {
38
17
  key: i,
39
18
  rel: "preload",
40
19
  ...asset
@@ -61,4 +40,4 @@ Document.defaultProps = {
61
40
  rootId: 'anansi-root',
62
41
  scripts: null
63
42
  };
64
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJidWlsZFBvbGljeSIsIkRvY3VtZW50IiwiYXNzZXRzIiwiaGVhZCIsImNoaWxkcmVuIiwidGl0bGUiLCJyb290SWQiLCJjaGFyU2V0IiwiY3NQb2xpY3kiLCJub25jZSIsInNjcmlwdHMiLCJleHRyYVN0eWxlIiwiY3NwTWV0YSIsInBvbGljeSIsIl9qc3giLCJodHRwRXF1aXYiLCJjb250ZW50IiwibWFwIiwiYXNzZXQiLCJpIiwiUmVhY3QiLCJjcmVhdGVFbGVtZW50Iiwia2V5IiwicmVsIiwiaWQiLCJmaWx0ZXIiLCJocmVmIiwiZW5kc1dpdGgiLCJzcmMiLCJhc3luYyIsImRlZmF1bHRQcm9wcyIsIkZyYWdtZW50IiwibmFtZSIsIl9wcm9jZXNzJGVudiRXRUJQQUNLXyIsInByb2Nlc3MiLCJlbnYiLCJXRUJQQUNLX1BVQkxJQ19QQVRIIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nwb3V0cy9Eb2N1bWVudENvbXBvbmVudC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQb2xpY3kgfSBmcm9tICcuL2NzcC5qcyc7XG5pbXBvcnQgeyBidWlsZFBvbGljeSB9IGZyb20gJy4vY3NwLmpzJztcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgYXNzZXRzOiB7IGhyZWY6IHN0cmluZzsgYXM/OiBzdHJpbmc7IHJlbD86IHN0cmluZyB9W107XG4gIGhlYWQ6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgZXh0cmFTdHlsZTogUmVhY3QuUmVhY3ROb2RlO1xuICBzY3JpcHRzOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHJvb3RJZDogc3RyaW5nO1xuICBjaGFyU2V0OiBzdHJpbmc7XG4gIGNzUG9saWN5PzogUG9saWN5O1xuICBub25jZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERvY3VtZW50KHtcbiAgYXNzZXRzLFxuICBoZWFkLFxuICBjaGlsZHJlbixcbiAgdGl0bGUsXG4gIHJvb3RJZCxcbiAgY2hhclNldCxcbiAgY3NQb2xpY3ksXG4gIG5vbmNlLFxuICBzY3JpcHRzLFxuICBleHRyYVN0eWxlLFxufTogUHJvcHMpIHtcbiAgbGV0IGNzcE1ldGE6IG51bGwgfCBSZWFjdC5SZWFjdE5vZGUgPSBudWxsO1xuICBpZiAoY3NQb2xpY3kpIHtcbiAgICAvLyBhZGQgbm9uY2UgdG8gcG9saWN5XG4gICAgY29uc3QgcG9saWN5ID0ge1xuICAgICAgLi4uY3NQb2xpY3ksXG4gICAgfTtcbiAgICBpZiAobm9uY2UpIHtcbiAgICAgIGlmICh0eXBlb2YgcG9saWN5WydzY3JpcHQtc3JjJ10gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHBvbGljeVsnc2NyaXB0LXNyYyddID0gW3BvbGljeVsnc2NyaXB0LXNyYyddLCBgJ25vbmNlLSR7bm9uY2V9J2BdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9saWN5WydzY3JpcHQtc3JjJ10gPSBbLi4ucG9saWN5WydzY3JpcHQtc3JjJ10sIGAnbm9uY2UtJHtub25jZX0nYF07XG4gICAgICB9XG4gICAgfVxuICAgIGNzcE1ldGEgPSAoXG4gICAgICA8bWV0YSBodHRwRXF1aXY9XCJDb250ZW50LVNlY3VyaXR5LVBvbGljeVwiIGNvbnRlbnQ9e2J1aWxkUG9saWN5KHBvbGljeSl9IC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxodG1sPlxuICAgICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJTZXQ9e2NoYXJTZXR9IC8+XG4gICAgICAgIHtjc3BNZXRhfVxuICAgICAgICB7aGVhZH1cbiAgICAgICAge2V4dHJhU3R5bGV9XG4gICAgICAgIHthc3NldHMubWFwKChhc3NldCwgaSkgPT4gKFxuICAgICAgICAgIDxsaW5rIGtleT17aX0gcmVsPVwicHJlbG9hZFwiIHsuLi5hc3NldH0gLz5cbiAgICAgICAgKSl9XG4gICAgICAgIDx0aXRsZT57dGl0bGV9PC90aXRsZT5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8ZGl2IGlkPXtyb290SWR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICAge3NjcmlwdHN9XG4gICAgICAgIHthc3NldHNcbiAgICAgICAgICAuZmlsdGVyKCh7IGhyZWYgfSkgPT4gaHJlZi5lbmRzV2l0aCgnLmpzJykpXG4gICAgICAgICAgLm1hcCgoeyBocmVmIH0sIGkpID0+IChcbiAgICAgICAgICAgIDxzY3JpcHQga2V5PXtpfSBzcmM9e2hyZWZ9IGFzeW5jIC8+XG4gICAgICAgICAgKSl9XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICApO1xufVxuRG9jdW1lbnQuZGVmYXVsdFByb3BzID0ge1xuICBoZWFkOiAoXG4gICAgPD5cbiAgICAgIDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MVwiIC8+XG4gICAgICA8bGlua1xuICAgICAgICByZWw9XCJzaG9ydGN1dCBpY29uXCJcbiAgICAgICAgaHJlZj17YCR7cHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSCA/PyAnLyd9ZmF2aWNvbi5pY29gfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKSxcbiAgY2hhclNldDogJ3V0Zi04JyxcbiAgcm9vdElkOiAnYW5hbnNpLXJvb3QnLFxuICBzY3JpcHRzOiBudWxsLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsU0FBU0EsV0FBVyxRQUFRLFVBQVU7QUFldEMsZUFBZSxTQUFTQyxRQUFRQSxDQUFDO0VBQy9CQyxNQUFNO0VBQ05DLElBQUk7RUFDSkMsUUFBUTtFQUNSQyxLQUFLO0VBQ0xDLE1BQU07RUFDTkMsT0FBTztFQUNQQyxRQUFRO0VBQ1JDLEtBQUs7RUFDTEMsT0FBTztFQUNQQztBQUNLLENBQUMsRUFBRTtFQUNSLElBQUlDLE9BQStCLEdBQUcsSUFBSTtFQUMxQyxJQUFJSixRQUFRLEVBQUU7SUFDWjtJQUNBLE1BQU1LLE1BQU0sR0FBRztNQUNiLEdBQUdMO0lBQ0wsQ0FBQztJQUNELElBQUlDLEtBQUssRUFBRTtNQUNULElBQUksT0FBT0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLFFBQVEsRUFBRTtRQUM1Q0EsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUNBLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRyxVQUFTSixLQUFNLEdBQUUsQ0FBQztNQUNuRSxDQUFDLE1BQU07UUFDTEksTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBR0EsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFHLFVBQVNKLEtBQU0sR0FBRSxDQUFDO01BQ3RFO0lBQ0Y7SUFDQUcsT0FBTyxnQkFDTEUsSUFBQTtNQUFNQyxTQUFTLEVBQUMseUJBQXlCO01BQUNDLE9BQU8sRUFBRWhCLFdBQVcsQ0FBQ2EsTUFBTTtJQUFFLEVBQ3hFO0VBQ0g7RUFDQSxvQkFDRUMsSUFBQSxrQ0FDRUEsSUFBQSxrQ0FDRUEsSUFBQTtJQUFNUCxPQUFPLEVBQUVBO0VBQVEsRUFBRyxFQUN6QkssT0FBTyxFQUNQVCxJQUFJLEVBQ0pRLFVBQVUsRUFDVlQsTUFBTSxDQUFDZSxHQUFHLENBQUMsQ0FBQ0MsS0FBSyxFQUFFQyxDQUFDLGtCQUNuQkMsS0FBQSxDQUFBQyxhQUFBO0lBQU1DLEdBQUcsRUFBRUgsQ0FBRTtJQUFDSSxHQUFHLEVBQUMsU0FBUztJQUFBLEdBQUtMO0VBQUssRUFDdEMsQ0FBQyxlQUNGSixJQUFBLHNCQUFRVCxLQUFLLENBQVMsQ0FDakIsZUFDUFMsSUFBQSxrQ0FDRUEsSUFBQTtJQUFLVSxFQUFFLEVBQUVsQjtFQUFPLFdBQUVGLFFBQVEsQ0FBTyxFQUNoQ00sT0FBTyxFQUNQUixNQUFNLENBQ0p1QixNQUFNLENBQUMsQ0FBQztJQUFFQztFQUFLLENBQUMsS0FBS0EsSUFBSSxDQUFDQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDMUNWLEdBQUcsQ0FBQyxDQUFDO0lBQUVTO0VBQUssQ0FBQyxFQUFFUCxDQUFDLGtCQUNmTCxJQUFBO0lBQWdCYyxHQUFHLEVBQUVGLElBQUs7SUFBQ0csS0FBSztFQUFBLEdBQW5CVixDQUFDLENBQ2YsQ0FBQyxDQUNDLENBQ0Y7QUFFWDtBQUNBbEIsUUFBUSxDQUFDNkIsWUFBWSxHQUFHO0VBQ3RCM0IsSUFBSSxlQUNGaUIsS0FBQSxDQUFBQyxhQUFBLENBQUFELEtBQUEsQ0FBQVcsUUFBQSxxQkFDRWpCLElBQUE7SUFBTWtCLElBQUksRUFBQyxVQUFVO0lBQUNoQixPQUFPLEVBQUM7RUFBcUMsRUFBRyxlQUN0RUYsSUFBQTtJQUNFUyxHQUFHLEVBQUMsZUFBZTtJQUNuQkcsSUFBSSxFQUFHLElBQUFPLHFCQUFBLEdBQUVDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxtQkFBbUIsWUFBQUgscUJBQUEsR0FBSSxHQUFJO0VBQWEsRUFDN0QsQ0FFTDtFQUNEMUIsT0FBTyxFQUFFLE9BQU87RUFDaEJELE1BQU0sRUFBRSxhQUFhO0VBQ3JCSSxPQUFPLEVBQUU7QUFDWCxDQUFDIn0=
43
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEb2N1bWVudCIsImFzc2V0cyIsImhlYWQiLCJjaGlsZHJlbiIsInRpdGxlIiwicm9vdElkIiwiY2hhclNldCIsInNjcmlwdHMiLCJleHRyYVN0eWxlIiwiX2pzeCIsIm1hcCIsImFzc2V0IiwiaSIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsImtleSIsInJlbCIsImlkIiwiZmlsdGVyIiwiaHJlZiIsImVuZHNXaXRoIiwic3JjIiwiYXN5bmMiLCJkZWZhdWx0UHJvcHMiLCJGcmFnbWVudCIsIm5hbWUiLCJjb250ZW50IiwiX3Byb2Nlc3MkZW52JFdFQlBBQ0tfIiwicHJvY2VzcyIsImVudiIsIldFQlBBQ0tfUFVCTElDX1BBVEgiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BvdXRzL0RvY3VtZW50Q29tcG9uZW50LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBhc3NldHM6IHsgaHJlZjogc3RyaW5nOyBhcz86IHN0cmluZzsgcmVsPzogc3RyaW5nIH1bXTtcbiAgaGVhZDogUmVhY3QuUmVhY3ROb2RlO1xuICBleHRyYVN0eWxlOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHNjcmlwdHM6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgdGl0bGU6IHN0cmluZztcbiAgcm9vdElkOiBzdHJpbmc7XG4gIGNoYXJTZXQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERvY3VtZW50KHtcbiAgYXNzZXRzLFxuICBoZWFkLFxuICBjaGlsZHJlbixcbiAgdGl0bGUsXG4gIHJvb3RJZCxcbiAgY2hhclNldCxcbiAgc2NyaXB0cyxcbiAgZXh0cmFTdHlsZSxcbn06IFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGh0bWw+XG4gICAgICA8aGVhZD5cbiAgICAgICAgPG1ldGEgY2hhclNldD17Y2hhclNldH0gLz5cbiAgICAgICAge2hlYWR9XG4gICAgICAgIHtleHRyYVN0eWxlfVxuICAgICAgICB7YXNzZXRzLm1hcCgoYXNzZXQsIGkpID0+IChcbiAgICAgICAgICA8bGluayBrZXk9e2l9IHJlbD1cInByZWxvYWRcIiB7Li4uYXNzZXR9IC8+XG4gICAgICAgICkpfVxuICAgICAgICA8dGl0bGU+e3RpdGxlfTwvdGl0bGU+XG4gICAgICA8L2hlYWQ+XG4gICAgICA8Ym9keT5cbiAgICAgICAgPGRpdiBpZD17cm9vdElkfT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICAgIHtzY3JpcHRzfVxuICAgICAgICB7YXNzZXRzXG4gICAgICAgICAgLmZpbHRlcigoeyBocmVmIH0pID0+IGhyZWYuZW5kc1dpdGgoJy5qcycpKVxuICAgICAgICAgIC5tYXAoKHsgaHJlZiB9LCBpKSA9PiAoXG4gICAgICAgICAgICA8c2NyaXB0IGtleT17aX0gc3JjPXtocmVmfSBhc3luYyAvPlxuICAgICAgICAgICkpfVxuICAgICAgPC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgKTtcbn1cbkRvY3VtZW50LmRlZmF1bHRQcm9wcyA9IHtcbiAgaGVhZDogKFxuICAgIDw+XG4gICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTFcIiAvPlxuICAgICAgPGxpbmtcbiAgICAgICAgcmVsPVwic2hvcnRjdXQgaWNvblwiXG4gICAgICAgIGhyZWY9e2Ake3Byb2Nlc3MuZW52LldFQlBBQ0tfUFVCTElDX1BBVEggPz8gJy8nfWZhdmljb24uaWNvYH1cbiAgICAgIC8+XG4gICAgPC8+XG4gICksXG4gIGNoYXJTZXQ6ICd1dGYtOCcsXG4gIHJvb3RJZDogJ2FuYW5zaS1yb290JyxcbiAgc2NyaXB0czogbnVsbCxcbn07XG4iXSwibWFwcGluZ3MiOiI7OztBQVdBLGVBQWUsU0FBU0EsUUFBUUEsQ0FBQztFQUMvQkMsTUFBTTtFQUNOQyxJQUFJO0VBQ0pDLFFBQVE7RUFDUkMsS0FBSztFQUNMQyxNQUFNO0VBQ05DLE9BQU87RUFDUEMsT0FBTztFQUNQQztBQUNLLENBQUMsRUFBRTtFQUNSLG9CQUNFQyxJQUFBLGtDQUNFQSxJQUFBLGtDQUNFQSxJQUFBO0lBQU1ILE9BQU8sRUFBRUE7RUFBUSxFQUFHLEVBQ3pCSixJQUFJLEVBQ0pNLFVBQVUsRUFDVlAsTUFBTSxDQUFDUyxHQUFHLENBQUMsQ0FBQ0MsS0FBSyxFQUFFQyxDQUFDLGtCQUNuQkMsS0FBQSxDQUFBQyxhQUFBO0lBQU1DLEdBQUcsRUFBRUgsQ0FBRTtJQUFDSSxHQUFHLEVBQUMsU0FBUztJQUFBLEdBQUtMO0VBQUssRUFDdEMsQ0FBQyxlQUNGRixJQUFBLHNCQUFRTCxLQUFLLENBQVMsQ0FDakIsZUFDUEssSUFBQSxrQ0FDRUEsSUFBQTtJQUFLUSxFQUFFLEVBQUVaO0VBQU8sV0FBRUYsUUFBUSxDQUFPLEVBQ2hDSSxPQUFPLEVBQ1BOLE1BQU0sQ0FDSmlCLE1BQU0sQ0FBQyxDQUFDO0lBQUVDO0VBQUssQ0FBQyxLQUFLQSxJQUFJLENBQUNDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUMxQ1YsR0FBRyxDQUFDLENBQUM7SUFBRVM7RUFBSyxDQUFDLEVBQUVQLENBQUMsa0JBQ2ZILElBQUE7SUFBZ0JZLEdBQUcsRUFBRUYsSUFBSztJQUFDRyxLQUFLO0VBQUEsR0FBbkJWLENBQUMsQ0FDZixDQUFDLENBQ0MsQ0FDRjtBQUVYO0FBQ0FaLFFBQVEsQ0FBQ3VCLFlBQVksR0FBRztFQUN0QnJCLElBQUksZUFDRlcsS0FBQSxDQUFBQyxhQUFBLENBQUFELEtBQUEsQ0FBQVcsUUFBQSxxQkFDRWYsSUFBQTtJQUFNZ0IsSUFBSSxFQUFDLFVBQVU7SUFBQ0MsT0FBTyxFQUFDO0VBQXFDLEVBQUcsZUFDdEVqQixJQUFBO0lBQ0VPLEdBQUcsRUFBQyxlQUFlO0lBQ25CRyxJQUFJLEVBQUcsSUFBQVEscUJBQUEsR0FBRUMsT0FBTyxDQUFDQyxHQUFHLENBQUNDLG1CQUFtQixZQUFBSCxxQkFBQSxHQUFJLEdBQUk7RUFBYSxFQUM3RCxDQUVMO0VBQ0RyQixPQUFPLEVBQUUsT0FBTztFQUNoQkQsTUFBTSxFQUFFLGFBQWE7RUFDckJFLE9BQU8sRUFBRTtBQUNYLENBQUMifQ==
@@ -2,4 +2,5 @@ export interface Policy {
2
2
  [directive: string]: string | string[];
3
3
  }
4
4
  export declare function buildPolicy(policyObj: Policy): string;
5
+ export declare function joinNonce(policyObj: Policy, nonce?: string | undefined): Policy;
5
6
  //# sourceMappingURL=csp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"csp.d.ts","sourceRoot":"","sources":["../../src/spouts/csp.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;CACxC;AAGD,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,UAmB5C"}
1
+ {"version":3,"file":"csp.d.ts","sourceRoot":"","sources":["../../src/spouts/csp.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;CACxC;AAGD,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,UAmB5C;AAED,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,UAWtE"}
package/lib/spouts/csp.js CHANGED
@@ -12,4 +12,16 @@ export function buildPolicy(policyObj) {
12
12
  return `${key} ${val}`;
13
13
  }).join('; ');
14
14
  }
15
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJidWlsZFBvbGljeSIsInBvbGljeU9iaiIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJrZXkiLCJ2YWwiLCJBcnJheSIsImlzQXJyYXkiLCJTZXQiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJ2Iiwiam9pbiIsImluY2x1ZGVzIiwibmV3VmFsIiwicmVwbGFjZSIsInRyaW0iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BvdXRzL2NzcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFBvbGljeSB7XG4gIFtkaXJlY3RpdmU6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuXG4vLyBUT0RPOiBtZW1vaXplIHRoaXNcbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBvbGljeShwb2xpY3lPYmo6IFBvbGljeSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMocG9saWN5T2JqKVxuICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IEFycmF5LmlzQXJyYXkocG9saWN5T2JqW2tleV0pXG4gICAgICAgID8gWy4uLm5ldyBTZXQocG9saWN5T2JqW2tleV0pLnZhbHVlcygpXS5maWx0ZXIodiA9PiB2KS5qb2luKCcgJylcbiAgICAgICAgOiBwb2xpY3lPYmpba2V5XTtcblxuICAgICAgLy8gbW92ZSBzdHJpY3QgZHluYW1pYyB0byB0aGUgZW5kIG9mIHRoZSBwb2xpY3kgaWYgaXQgZXhpc3RzIHRvIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggY3NwMlxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtU2VjdXJpdHktUG9saWN5L3NjcmlwdC1zcmMjc3RyaWN0LWR5bmFtaWNcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwuaW5jbHVkZXMoXCInc3RyaWN0LWR5bmFtaWMnXCIpKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGAke3ZhbFxuICAgICAgICAgIC5yZXBsYWNlKC9cXHM/J3N0cmljdC1keW5hbWljJ1xccz8vZ2ksICcgJylcbiAgICAgICAgICAudHJpbSgpfSAnc3RyaWN0LWR5bmFtaWMnYDtcbiAgICAgICAgcmV0dXJuIGAke2tleX0gJHtuZXdWYWx9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke2tleX0gJHt2YWx9YDtcbiAgICB9KVxuICAgIC5qb2luKCc7ICcpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFJQTtBQUNBLE9BQU8sU0FBU0EsV0FBV0EsQ0FBQ0MsU0FBaUIsRUFBRTtFQUM3QyxPQUFPQyxNQUFNLENBQUNDLElBQUksQ0FBQ0YsU0FBUyxDQUFDLENBQzFCRyxHQUFHLENBQUNDLEdBQUcsSUFBSTtJQUNWLE1BQU1DLEdBQUcsR0FBR0MsS0FBSyxDQUFDQyxPQUFPLENBQUNQLFNBQVMsQ0FBQ0ksR0FBRyxDQUFDLENBQUMsR0FDckMsQ0FBQyxHQUFHLElBQUlJLEdBQUcsQ0FBQ1IsU0FBUyxDQUFDSSxHQUFHLENBQUMsQ0FBQyxDQUFDSyxNQUFNLEVBQUUsQ0FBQyxDQUFDQyxNQUFNLENBQUNDLENBQUMsSUFBSUEsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FDOURaLFNBQVMsQ0FBQ0ksR0FBRyxDQUFDOztJQUVsQjtJQUNBO0lBQ0EsSUFBSSxPQUFPQyxHQUFHLEtBQUssUUFBUSxJQUFJQSxHQUFHLENBQUNRLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO01BQy9ELE1BQU1DLE1BQU0sR0FBSSxHQUFFVCxHQUFHLENBQ2xCVSxPQUFPLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxDQUFDLENBQ3hDQyxJQUFJLEVBQUcsbUJBQWtCO01BQzVCLE9BQVEsR0FBRVosR0FBSSxJQUFHVSxNQUFPLEVBQUM7SUFDM0I7SUFFQSxPQUFRLEdBQUVWLEdBQUksSUFBR0MsR0FBSSxFQUFDO0VBQ3hCLENBQUMsQ0FBQyxDQUNETyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2YifQ==
15
+ export function joinNonce(policyObj, nonce) {
16
+ if (!nonce) return policyObj;
17
+ const policy = {
18
+ ...policyObj
19
+ };
20
+ if (typeof policy['script-src'] === 'string') {
21
+ policy['script-src'] = [policy['script-src'], `'nonce-${nonce}'`];
22
+ } else {
23
+ policy['script-src'] = [...policy['script-src'], `'nonce-${nonce}'`];
24
+ }
25
+ return policy;
26
+ }
27
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJidWlsZFBvbGljeSIsInBvbGljeU9iaiIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJrZXkiLCJ2YWwiLCJBcnJheSIsImlzQXJyYXkiLCJTZXQiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJ2Iiwiam9pbiIsImluY2x1ZGVzIiwibmV3VmFsIiwicmVwbGFjZSIsInRyaW0iLCJqb2luTm9uY2UiLCJub25jZSIsInBvbGljeSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zcG91dHMvY3NwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUG9saWN5IHtcbiAgW2RpcmVjdGl2ZTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbi8vIFRPRE86IG1lbW9pemUgdGhpc1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUG9saWN5KHBvbGljeU9iajogUG9saWN5KSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhwb2xpY3lPYmopXG4gICAgLm1hcChrZXkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gQXJyYXkuaXNBcnJheShwb2xpY3lPYmpba2V5XSlcbiAgICAgICAgPyBbLi4ubmV3IFNldChwb2xpY3lPYmpba2V5XSkudmFsdWVzKCldLmZpbHRlcih2ID0+IHYpLmpvaW4oJyAnKVxuICAgICAgICA6IHBvbGljeU9ialtrZXldO1xuXG4gICAgICAvLyBtb3ZlIHN0cmljdCBkeW5hbWljIHRvIHRoZSBlbmQgb2YgdGhlIHBvbGljeSBpZiBpdCBleGlzdHMgdG8gYmUgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCBjc3AyXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1TZWN1cml0eS1Qb2xpY3kvc2NyaXB0LXNyYyNzdHJpY3QtZHluYW1pY1xuICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbC5pbmNsdWRlcyhcIidzdHJpY3QtZHluYW1pYydcIikpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsID0gYCR7dmFsXG4gICAgICAgICAgLnJlcGxhY2UoL1xccz8nc3RyaWN0LWR5bmFtaWMnXFxzPy9naSwgJyAnKVxuICAgICAgICAgIC50cmltKCl9ICdzdHJpY3QtZHluYW1pYydgO1xuICAgICAgICByZXR1cm4gYCR7a2V5fSAke25ld1ZhbH1gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7a2V5fSAke3ZhbH1gO1xuICAgIH0pXG4gICAgLmpvaW4oJzsgJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqb2luTm9uY2UocG9saWN5T2JqOiBQb2xpY3ksIG5vbmNlPzogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gIGlmICghbm9uY2UpIHJldHVybiBwb2xpY3lPYmo7XG4gIGNvbnN0IHBvbGljeSA9IHtcbiAgICAuLi5wb2xpY3lPYmosXG4gIH07XG4gIGlmICh0eXBlb2YgcG9saWN5WydzY3JpcHQtc3JjJ10gPT09ICdzdHJpbmcnKSB7XG4gICAgcG9saWN5WydzY3JpcHQtc3JjJ10gPSBbcG9saWN5WydzY3JpcHQtc3JjJ10sIGAnbm9uY2UtJHtub25jZX0nYF07XG4gIH0gZWxzZSB7XG4gICAgcG9saWN5WydzY3JpcHQtc3JjJ10gPSBbLi4ucG9saWN5WydzY3JpcHQtc3JjJ10sIGAnbm9uY2UtJHtub25jZX0nYF07XG4gIH1cbiAgcmV0dXJuIHBvbGljeTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBSUE7QUFDQSxPQUFPLFNBQVNBLFdBQVdBLENBQUNDLFNBQWlCLEVBQUU7RUFDN0MsT0FBT0MsTUFBTSxDQUFDQyxJQUFJLENBQUNGLFNBQVMsQ0FBQyxDQUMxQkcsR0FBRyxDQUFDQyxHQUFHLElBQUk7SUFDVixNQUFNQyxHQUFHLEdBQUdDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDUCxTQUFTLENBQUNJLEdBQUcsQ0FBQyxDQUFDLEdBQ3JDLENBQUMsR0FBRyxJQUFJSSxHQUFHLENBQUNSLFNBQVMsQ0FBQ0ksR0FBRyxDQUFDLENBQUMsQ0FBQ0ssTUFBTSxFQUFFLENBQUMsQ0FBQ0MsTUFBTSxDQUFDQyxDQUFDLElBQUlBLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQzlEWixTQUFTLENBQUNJLEdBQUcsQ0FBQzs7SUFFbEI7SUFDQTtJQUNBLElBQUksT0FBT0MsR0FBRyxLQUFLLFFBQVEsSUFBSUEsR0FBRyxDQUFDUSxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRTtNQUMvRCxNQUFNQyxNQUFNLEdBQUksR0FBRVQsR0FBRyxDQUNsQlUsT0FBTyxDQUFDLDBCQUEwQixFQUFFLEdBQUcsQ0FBQyxDQUN4Q0MsSUFBSSxFQUFHLG1CQUFrQjtNQUM1QixPQUFRLEdBQUVaLEdBQUksSUFBR1UsTUFBTyxFQUFDO0lBQzNCO0lBRUEsT0FBUSxHQUFFVixHQUFJLElBQUdDLEdBQUksRUFBQztFQUN4QixDQUFDLENBQUMsQ0FDRE8sSUFBSSxDQUFDLElBQUksQ0FBQztBQUNmO0FBRUEsT0FBTyxTQUFTSyxTQUFTQSxDQUFDakIsU0FBaUIsRUFBRWtCLEtBQTBCLEVBQUU7RUFDdkUsSUFBSSxDQUFDQSxLQUFLLEVBQUUsT0FBT2xCLFNBQVM7RUFDNUIsTUFBTW1CLE1BQU0sR0FBRztJQUNiLEdBQUduQjtFQUNMLENBQUM7RUFDRCxJQUFJLE9BQU9tQixNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssUUFBUSxFQUFFO0lBQzVDQSxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQ0EsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFHLFVBQVNELEtBQU0sR0FBRSxDQUFDO0VBQ25FLENBQUMsTUFBTTtJQUNMQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHQSxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUcsVUFBU0QsS0FBTSxHQUFFLENBQUM7RUFDdEU7RUFDQSxPQUFPQyxNQUFNO0FBQ2YifQ==
@@ -1,6 +1,6 @@
1
1
  import type { Route } from '@anansi/router';
2
2
  import React from 'react';
3
- import type { Policy } from './csp.js';
3
+ import { Policy } from './csp.js';
4
4
  import type { ServerSpout } from './types.js';
5
5
  type NeededNext = {
6
6
  matchedRoutes: Route<any>[];
@@ -1 +1 @@
1
- {"version":3,"file":"document.server.d.ts","sourceRoot":"","sources":["../../src/spouts/document.server.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,KAAK,UAAU,GAAG;IAChB,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAO,EAAE;IAC7C,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,CA6E5E"}
1
+ {"version":3,"file":"document.server.d.ts","sourceRoot":"","sources":["../../src/spouts/document.server.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAA0B,MAAM,EAAE,MAAM,UAAU,CAAC;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,KAAK,UAAU,GAAG;IAChB,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAO,EAAE;IAC7C,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,CAgF5E"}
@@ -1,8 +1,9 @@
1
1
  import React from 'react';
2
+ import { buildPolicy, joinNonce } from './csp.js';
2
3
  import Document from './DocumentComponent.js';
3
4
  export default function DocumentSpout(options) {
4
5
  return next => async props => {
5
- var _props$clientManifest, _props$clientManifest2, _props$clientManifest3, _props$clientManifest4, _props$clientManifest5, _props$req, _nextProps$title;
6
+ var _props$clientManifest, _props$clientManifest2, _props$clientManifest3, _props$clientManifest4, _props$clientManifest5, _nextProps$title;
6
7
  const nextProps = await next(props);
7
8
  const publicPath = props.clientManifest.publicPath;
8
9
  if (Object.keys((_props$clientManifest = (_props$clientManifest2 = props.clientManifest) == null ? void 0 : _props$clientManifest2.entrypoints) != null ? _props$clientManifest : {}).length < 1 || publicPath === undefined) throw new Error('Manifest missing entries needed');
@@ -36,9 +37,10 @@ export default function DocumentSpout(options) {
36
37
  } : {
37
38
  href: asset
38
39
  });
39
- const nonce =
40
- // nonces negate 'unsafe-inline' so do not add it in development to keep things easier
41
- props.nonce && (process.env.NODE_ENV === 'production' || ((_props$req = props.req) == null ? void 0 : _props$req.protocol) !== 'http') ? props.nonce : undefined;
40
+ if (options.csPolicy) {
41
+ const httpEquiv = process.env.NODE_ENV === 'production' ? 'Content-Security-Policy' : 'Content-Security-Policy-Report-Only';
42
+ props.res.setHeader(httpEquiv, buildPolicy(joinNonce(options.csPolicy, props.nonce)));
43
+ }
42
44
  return {
43
45
  ...nextProps,
44
46
  app: /*#__PURE__*/React.createElement(Document, {
@@ -47,8 +49,6 @@ export default function DocumentSpout(options) {
47
49
  title: (_nextProps$title = nextProps.title) != null ? _nextProps$title : options.title,
48
50
  assets: assets,
49
51
  rootId: options.rootId,
50
- nonce: nonce,
51
- csPolicy: options.csPolicy,
52
52
  scripts: nextProps.scripts
53
53
  }, nextProps.app)
54
54
  };
@@ -60,4 +60,4 @@ function childrenAssets(chunk) {
60
60
  return (_c$assets = c.assets) != null ? _c$assets : [];
61
61
  })) : [];
62
62
  }
63
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkRvY3VtZW50IiwiRG9jdW1lbnRTcG91dCIsIm9wdGlvbnMiLCJuZXh0IiwicHJvcHMiLCJfcHJvcHMkY2xpZW50TWFuaWZlc3QiLCJfcHJvcHMkY2xpZW50TWFuaWZlc3QyIiwiX3Byb3BzJGNsaWVudE1hbmlmZXN0MyIsIl9wcm9wcyRjbGllbnRNYW5pZmVzdDQiLCJfcHJvcHMkY2xpZW50TWFuaWZlc3Q1IiwiX3Byb3BzJHJlcSIsIl9uZXh0UHJvcHMkdGl0bGUiLCJuZXh0UHJvcHMiLCJwdWJsaWNQYXRoIiwiY2xpZW50TWFuaWZlc3QiLCJPYmplY3QiLCJrZXlzIiwiZW50cnlwb2ludHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJFcnJvciIsImFzc2V0TWFwIiwiYXNzZXRzIiwibWFwIiwibmFtZSIsImFzc2V0TGlzdCIsInZhbHVlcyIsImZvckVhY2giLCJlbnRyeXBvaW50IiwiX2VudHJ5cG9pbnQkYXNzZXRzIiwicHVzaCIsIlNldCIsIm5hbWVkQ2h1bmtHcm91cHMiLCJmaWx0ZXIiLCJtYXRjaGVkUm91dGVzIiwic29tZSIsInJvdXRlIiwiaW5jbHVkZXMiLCJmbGF0TWFwIiwiY2h1bmsiLCJfY2h1bmskYXNzZXRzIiwiY2hpbGRyZW5Bc3NldHMiLCJhc3NldCIsImVuZHNXaXRoIiwiaHJlZiIsInJlbCIsImFzIiwibm9uY2UiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJyZXEiLCJwcm90b2NvbCIsImFwcCIsImNyZWF0ZUVsZW1lbnQiLCJleHRyYVN0eWxlIiwidGl0bGUiLCJyb290SWQiLCJjc1BvbGljeSIsInNjcmlwdHMiLCJjaGlsZHJlbiIsInByZWxvYWQiLCJjIiwiX2MkYXNzZXRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nwb3V0cy9kb2N1bWVudC5zZXJ2ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUm91dGUgfSBmcm9tICdAYW5hbnNpL3JvdXRlcic7XG5pbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU3RhdHNDaHVua0dyb3VwIH0gZnJvbSAnd2VicGFjayc7XG5cbmltcG9ydCB0eXBlIHsgUG9saWN5IH0gZnJvbSAnLi9jc3AuanMnO1xuaW1wb3J0IERvY3VtZW50IGZyb20gJy4vRG9jdW1lbnRDb21wb25lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG50eXBlIE5lZWRlZE5leHQgPSB7XG4gIG1hdGNoZWRSb3V0ZXM6IFJvdXRlPGFueT5bXTtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHNjcmlwdHM/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbiAgZXh0cmFTdHlsZT86IFJlYWN0LlJlYWN0Tm9kZVtdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRG9jdW1lbnRTcG91dChvcHRpb25zOiB7XG4gIGhlYWQ/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHJvb3RJZD86IHN0cmluZztcbiAgY2hhclNldD86IHN0cmluZztcbiAgY3NQb2xpY3k/OiBQb2xpY3k7XG59KTogU2VydmVyU3BvdXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4sIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBOZWVkZWROZXh0PiB7XG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHByb3BzKTtcblxuICAgIGNvbnN0IHB1YmxpY1BhdGggPSBwcm9wcy5jbGllbnRNYW5pZmVzdC5wdWJsaWNQYXRoO1xuXG4gICAgaWYgKFxuICAgICAgT2JqZWN0LmtleXMocHJvcHMuY2xpZW50TWFuaWZlc3Q/LmVudHJ5cG9pbnRzID8/IHt9KS5sZW5ndGggPCAxIHx8XG4gICAgICBwdWJsaWNQYXRoID09PSB1bmRlZmluZWRcbiAgICApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbmlmZXN0IG1pc3NpbmcgZW50cmllcyBuZWVkZWQnKTtcblxuICAgIC8vIFRPRE86IGNvbnNpZGVyIHVzaW5nIHRoaXMgcGFja2FnZSBmb3IgYnVpbGQgc3RhdHMgaW4gZnV0dXJlOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC90cmVlL21haW4vcGFja2FnZXMvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrXG4gICAgY29uc3QgYXNzZXRNYXAgPSAoYXNzZXRzOiB7IG5hbWU6IHN0cmluZzsgc2l6ZT86IG51bWJlciB9W10pID0+XG4gICAgICBhc3NldHMubWFwKCh7IG5hbWUgfSkgPT4gYCR7cHVibGljUGF0aH0ke25hbWV9YCk7XG5cbiAgICBjb25zdCBhc3NldExpc3Q6IHN0cmluZ1tdID0gW107XG4gICAgT2JqZWN0LnZhbHVlcyhwcm9wcy5jbGllbnRNYW5pZmVzdD8uZW50cnlwb2ludHMgPz8ge30pLmZvckVhY2goXG4gICAgICBlbnRyeXBvaW50ID0+IHtcbiAgICAgICAgYXNzZXRMaXN0LnB1c2goLi4uYXNzZXRNYXAoZW50cnlwb2ludC5hc3NldHMgPz8gW10pKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgICBuZXcgU2V0KFxuICAgICAgYXNzZXRNYXAoXG4gICAgICAgIE9iamVjdC52YWx1ZXMocHJvcHMuY2xpZW50TWFuaWZlc3QubmFtZWRDaHVua0dyb3VwcyA/PyB7fSlcbiAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT5cbiAgICAgICAgICAgIG5leHRQcm9wcy5tYXRjaGVkUm91dGVzLnNvbWUocm91dGUgPT4gbmFtZT8uaW5jbHVkZXMocm91dGUubmFtZSkpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuZmxhdE1hcChjaHVuayA9PiBbXG4gICAgICAgICAgICAuLi4oY2h1bmsuYXNzZXRzID8/IFtdKSxcbiAgICAgICAgICAgIC8vIGFueSBjaHVuayBwcmVsb2Fkc1xuICAgICAgICAgICAgLi4uY2hpbGRyZW5Bc3NldHMoY2h1bmspLFxuICAgICAgICAgIF0pLFxuICAgICAgKSxcbiAgICApLmZvckVhY2goYXNzZXQgPT4gYXNzZXRMaXN0LnB1c2goYXNzZXQpKTtcblxuICAgIC8vIGZpbmQgYWRkaXRpb25hbCBhc3NldHMgdG8gcHJlbG9hZCBiYXNlZCBvbiBtYXRjaGVkIHJvdXRlXG4gICAgY29uc3QgYXNzZXRzOiB7XG4gICAgICBocmVmOiBzdHJpbmc7XG4gICAgICBhcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIHJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB9W10gPSBhc3NldExpc3RcbiAgICAgIC5maWx0ZXIoYXNzZXQgPT4gIWFzc2V0LmVuZHNXaXRoKCcuaG90LXVwZGF0ZS5qcycpKVxuICAgICAgLm1hcChhc3NldCA9PlxuICAgICAgICBhc3NldC5lbmRzV2l0aCgnLmNzcycpXG4gICAgICAgICAgPyB7IGhyZWY6IGFzc2V0LCByZWw6ICdzdHlsZXNoZWV0JyB9XG4gICAgICAgICAgOiBhc3NldC5lbmRzV2l0aCgnLmpzJylcbiAgICAgICAgICA/IHsgaHJlZjogYXNzZXQsIGFzOiAnc2NyaXB0JyB9XG4gICAgICAgICAgOiB7IGhyZWY6IGFzc2V0IH0sXG4gICAgICApO1xuICAgIGNvbnN0IG5vbmNlID1cbiAgICAgIC8vIG5vbmNlcyBuZWdhdGUgJ3Vuc2FmZS1pbmxpbmUnIHNvIGRvIG5vdCBhZGQgaXQgaW4gZGV2ZWxvcG1lbnQgdG8ga2VlcCB0aGluZ3MgZWFzaWVyXG4gICAgICBwcm9wcy5ub25jZSAmJlxuICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgfHxcbiAgICAgICAgKHByb3BzLnJlcSBhcyBSZXF1ZXN0KT8ucHJvdG9jb2wgIT09ICdodHRwJylcbiAgICAgICAgPyBwcm9wcy5ub25jZVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBhcHA6IChcbiAgICAgICAgPERvY3VtZW50XG4gICAgICAgICAgey4uLm9wdGlvbnN9XG4gICAgICAgICAgZXh0cmFTdHlsZT17bmV4dFByb3BzLmV4dHJhU3R5bGV9XG4gICAgICAgICAgdGl0bGU9e25leHRQcm9wcy50aXRsZSA/PyBvcHRpb25zLnRpdGxlfVxuICAgICAgICAgIGFzc2V0cz17YXNzZXRzfVxuICAgICAgICAgIHJvb3RJZD17b3B0aW9ucy5yb290SWR9XG4gICAgICAgICAgbm9uY2U9e25vbmNlfVxuICAgICAgICAgIGNzUG9saWN5PXtvcHRpb25zLmNzUG9saWN5fVxuICAgICAgICAgIHNjcmlwdHM9e25leHRQcm9wcy5zY3JpcHRzfVxuICAgICAgICA+XG4gICAgICAgICAge25leHRQcm9wcy5hcHB9XG4gICAgICAgIDwvRG9jdW1lbnQ+XG4gICAgICApLFxuICAgIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuQXNzZXRzKGNodW5rOiBTdGF0c0NodW5rR3JvdXApIHtcbiAgcmV0dXJuIGNodW5rLmNoaWxkcmVuXG4gICAgPyBPYmplY3QudmFsdWVzKGNodW5rLmNoaWxkcmVuKS5mbGF0TWFwKHByZWxvYWQgPT5cbiAgICAgICAgcHJlbG9hZC5mbGF0TWFwKGMgPT4gYy5hc3NldHMgPz8gW10pLFxuICAgICAgKVxuICAgIDogW107XG59XG4iXSwibWFwcGluZ3MiOiJBQUVBLE9BQU9BLEtBQUssTUFBTSxPQUFPO0FBSXpCLE9BQU9DLFFBQVEsTUFBTSx3QkFBd0I7QUFVN0MsZUFBZSxTQUFTQyxhQUFhQSxDQUFDQyxPQU1yQyxFQUE2RTtFQUM1RSxPQUFPQyxJQUFJLElBQUksTUFBTUMsS0FBSyxJQUFJO0lBQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUEsRUFBQUMsc0JBQUEsRUFBQUMsc0JBQUEsRUFBQUMsc0JBQUEsRUFBQUMsVUFBQSxFQUFBQyxnQkFBQTtJQUM1QixNQUFNQyxTQUFTLEdBQUcsTUFBTVQsSUFBSSxDQUFDQyxLQUFLLENBQUM7SUFFbkMsTUFBTVMsVUFBVSxHQUFHVCxLQUFLLENBQUNVLGNBQWMsQ0FBQ0QsVUFBVTtJQUVsRCxJQUNFRSxNQUFNLENBQUNDLElBQUksRUFBQVgscUJBQUEsSUFBQUMsc0JBQUEsR0FBQ0YsS0FBSyxDQUFDVSxjQUFjLHFCQUFwQlIsc0JBQUEsQ0FBc0JXLFdBQVcsWUFBQVoscUJBQUEsR0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDYSxNQUFNLEdBQUcsQ0FBQyxJQUMvREwsVUFBVSxLQUFLTSxTQUFTLEVBRXhCLE1BQU0sSUFBSUMsS0FBSyxDQUFDLGlDQUFpQyxDQUFDOztJQUVwRDtJQUNBO0lBQ0EsTUFBTUMsUUFBUSxHQUFJQyxNQUF5QyxJQUN6REEsTUFBTSxDQUFDQyxHQUFHLENBQUMsQ0FBQztNQUFFQztJQUFLLENBQUMsS0FBTSxHQUFFWCxVQUFXLEdBQUVXLElBQUssRUFBQyxDQUFDO0lBRWxELE1BQU1DLFNBQW1CLEdBQUcsRUFBRTtJQUM5QlYsTUFBTSxDQUFDVyxNQUFNLEVBQUFuQixzQkFBQSxJQUFBQyxzQkFBQSxHQUFDSixLQUFLLENBQUNVLGNBQWMscUJBQXBCTixzQkFBQSxDQUFzQlMsV0FBVyxZQUFBVixzQkFBQSxHQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNvQixPQUFPLENBQzVEQyxVQUFVLElBQUk7TUFBQSxJQUFBQyxrQkFBQTtNQUNaSixTQUFTLENBQUNLLElBQUksQ0FBQyxHQUFHVCxRQUFRLEVBQUFRLGtCQUFBLEdBQUNELFVBQVUsQ0FBQ04sTUFBTSxZQUFBTyxrQkFBQSxHQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUMsQ0FDRjtJQUNELElBQUlFLEdBQUcsQ0FDTFYsUUFBUSxDQUNOTixNQUFNLENBQUNXLE1BQU0sRUFBQWpCLHNCQUFBLEdBQUNMLEtBQUssQ0FBQ1UsY0FBYyxDQUFDa0IsZ0JBQWdCLFlBQUF2QixzQkFBQSxHQUFJLENBQUMsQ0FBQyxDQUFDLENBQ3ZEd0IsTUFBTSxDQUFDLENBQUM7TUFBRVQ7SUFBSyxDQUFDLEtBQ2ZaLFNBQVMsQ0FBQ3NCLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDQyxLQUFLLElBQUlaLElBQUksb0JBQUpBLElBQUksQ0FBRWEsUUFBUSxDQUFDRCxLQUFLLENBQUNaLElBQUksQ0FBQyxDQUFDLENBQ2xFLENBQ0FjLE9BQU8sQ0FBQ0MsS0FBSztNQUFBLElBQUFDLGFBQUE7TUFBQSxPQUFJLENBQ2hCLEtBQUFBLGFBQUEsR0FBSUQsS0FBSyxDQUFDakIsTUFBTSxZQUFBa0IsYUFBQSxHQUFJLEVBQUUsQ0FBQztNQUN2QjtNQUNBLEdBQUdDLGNBQWMsQ0FBQ0YsS0FBSyxDQUFDLENBQ3pCO0lBQUEsRUFBQyxDQUNMLENBQ0YsQ0FBQ1osT0FBTyxDQUFDZSxLQUFLLElBQUlqQixTQUFTLENBQUNLLElBQUksQ0FBQ1ksS0FBSyxDQUFDLENBQUM7O0lBRXpDO0lBQ0EsTUFBTXBCLE1BSUgsR0FBR0csU0FBUyxDQUNaUSxNQUFNLENBQUNTLEtBQUssSUFBSSxDQUFDQSxLQUFLLENBQUNDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQ2xEcEIsR0FBRyxDQUFDbUIsS0FBSyxJQUNSQSxLQUFLLENBQUNDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FDbEI7TUFBRUMsSUFBSSxFQUFFRixLQUFLO01BQUVHLEdBQUcsRUFBRTtJQUFhLENBQUMsR0FDbENILEtBQUssQ0FBQ0MsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUNyQjtNQUFFQyxJQUFJLEVBQUVGLEtBQUs7TUFBRUksRUFBRSxFQUFFO0lBQVMsQ0FBQyxHQUM3QjtNQUFFRixJQUFJLEVBQUVGO0lBQU0sQ0FBQyxDQUNwQjtJQUNILE1BQU1LLEtBQUs7SUFDVDtJQUNBM0MsS0FBSyxDQUFDMkMsS0FBSyxLQUNWQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0MsUUFBUSxLQUFLLFlBQVksSUFDcEMsRUFBQXhDLFVBQUEsR0FBQ04sS0FBSyxDQUFDK0MsR0FBRyxxQkFBVnpDLFVBQUEsQ0FBd0IwQyxRQUFRLE1BQUssTUFBTSxDQUFDLEdBQzFDaEQsS0FBSyxDQUFDMkMsS0FBSyxHQUNYNUIsU0FBUztJQUVmLE9BQU87TUFDTCxHQUFHUCxTQUFTO01BQ1p5QyxHQUFHLGVBQ0R0RCxLQUFBLENBQUF1RCxhQUFBLENBQUN0RCxRQUFRO1FBQUEsR0FDSEUsT0FBTztRQUNYcUQsVUFBVSxFQUFFM0MsU0FBUyxDQUFDMkMsVUFBVztRQUNqQ0MsS0FBSyxHQUFBN0MsZ0JBQUEsR0FBRUMsU0FBUyxDQUFDNEMsS0FBSyxZQUFBN0MsZ0JBQUEsR0FBSVQsT0FBTyxDQUFDc0QsS0FBTTtRQUN4Q2xDLE1BQU0sRUFBRUEsTUFBTztRQUNmbUMsTUFBTSxFQUFFdkQsT0FBTyxDQUFDdUQsTUFBTztRQUN2QlYsS0FBSyxFQUFFQSxLQUFNO1FBQ2JXLFFBQVEsRUFBRXhELE9BQU8sQ0FBQ3dELFFBQVM7UUFDM0JDLE9BQU8sRUFBRS9DLFNBQVMsQ0FBQytDO01BQVEsR0FFMUIvQyxTQUFTLENBQUN5QyxHQUFHO0lBR3BCLENBQUM7RUFDSCxDQUFDO0FBQ0g7QUFFQSxTQUFTWixjQUFjQSxDQUFDRixLQUFzQixFQUFFO0VBQzlDLE9BQU9BLEtBQUssQ0FBQ3FCLFFBQVEsR0FDakI3QyxNQUFNLENBQUNXLE1BQU0sQ0FBQ2EsS0FBSyxDQUFDcUIsUUFBUSxDQUFDLENBQUN0QixPQUFPLENBQUN1QixPQUFPLElBQzNDQSxPQUFPLENBQUN2QixPQUFPLENBQUN3QixDQUFDO0lBQUEsSUFBQUMsU0FBQTtJQUFBLFFBQUFBLFNBQUEsR0FBSUQsQ0FBQyxDQUFDeEMsTUFBTSxZQUFBeUMsU0FBQSxHQUFJLEVBQUU7RUFBQSxFQUFDLENBQ3JDLEdBQ0QsRUFBRTtBQUNSIn0=
63
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImJ1aWxkUG9saWN5Iiwiam9pbk5vbmNlIiwiRG9jdW1lbnQiLCJEb2N1bWVudFNwb3V0Iiwib3B0aW9ucyIsIm5leHQiLCJwcm9wcyIsIl9wcm9wcyRjbGllbnRNYW5pZmVzdCIsIl9wcm9wcyRjbGllbnRNYW5pZmVzdDIiLCJfcHJvcHMkY2xpZW50TWFuaWZlc3QzIiwiX3Byb3BzJGNsaWVudE1hbmlmZXN0NCIsIl9wcm9wcyRjbGllbnRNYW5pZmVzdDUiLCJfbmV4dFByb3BzJHRpdGxlIiwibmV4dFByb3BzIiwicHVibGljUGF0aCIsImNsaWVudE1hbmlmZXN0IiwiT2JqZWN0Iiwia2V5cyIsImVudHJ5cG9pbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiRXJyb3IiLCJhc3NldE1hcCIsImFzc2V0cyIsIm1hcCIsIm5hbWUiLCJhc3NldExpc3QiLCJ2YWx1ZXMiLCJmb3JFYWNoIiwiZW50cnlwb2ludCIsIl9lbnRyeXBvaW50JGFzc2V0cyIsInB1c2giLCJTZXQiLCJuYW1lZENodW5rR3JvdXBzIiwiZmlsdGVyIiwibWF0Y2hlZFJvdXRlcyIsInNvbWUiLCJyb3V0ZSIsImluY2x1ZGVzIiwiZmxhdE1hcCIsImNodW5rIiwiX2NodW5rJGFzc2V0cyIsImNoaWxkcmVuQXNzZXRzIiwiYXNzZXQiLCJlbmRzV2l0aCIsImhyZWYiLCJyZWwiLCJhcyIsImNzUG9saWN5IiwiaHR0cEVxdWl2IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwicmVzIiwic2V0SGVhZGVyIiwibm9uY2UiLCJhcHAiLCJjcmVhdGVFbGVtZW50IiwiZXh0cmFTdHlsZSIsInRpdGxlIiwicm9vdElkIiwic2NyaXB0cyIsImNoaWxkcmVuIiwicHJlbG9hZCIsImMiLCJfYyRhc3NldHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BvdXRzL2RvY3VtZW50LnNlcnZlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSb3V0ZSB9IGZyb20gJ0BhbmFuc2kvcm91dGVyJztcbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTdGF0c0NodW5rR3JvdXAgfSBmcm9tICd3ZWJwYWNrJztcblxuaW1wb3J0IHsgYnVpbGRQb2xpY3ksIGpvaW5Ob25jZSwgUG9saWN5IH0gZnJvbSAnLi9jc3AuanMnO1xuaW1wb3J0IERvY3VtZW50IGZyb20gJy4vRG9jdW1lbnRDb21wb25lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG50eXBlIE5lZWRlZE5leHQgPSB7XG4gIG1hdGNoZWRSb3V0ZXM6IFJvdXRlPGFueT5bXTtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHNjcmlwdHM/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbiAgZXh0cmFTdHlsZT86IFJlYWN0LlJlYWN0Tm9kZVtdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRG9jdW1lbnRTcG91dChvcHRpb25zOiB7XG4gIGhlYWQ/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHJvb3RJZD86IHN0cmluZztcbiAgY2hhclNldD86IHN0cmluZztcbiAgY3NQb2xpY3k/OiBQb2xpY3k7XG59KTogU2VydmVyU3BvdXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4sIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBOZWVkZWROZXh0PiB7XG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHByb3BzKTtcblxuICAgIGNvbnN0IHB1YmxpY1BhdGggPSBwcm9wcy5jbGllbnRNYW5pZmVzdC5wdWJsaWNQYXRoO1xuXG4gICAgaWYgKFxuICAgICAgT2JqZWN0LmtleXMocHJvcHMuY2xpZW50TWFuaWZlc3Q/LmVudHJ5cG9pbnRzID8/IHt9KS5sZW5ndGggPCAxIHx8XG4gICAgICBwdWJsaWNQYXRoID09PSB1bmRlZmluZWRcbiAgICApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbmlmZXN0IG1pc3NpbmcgZW50cmllcyBuZWVkZWQnKTtcblxuICAgIC8vIFRPRE86IGNvbnNpZGVyIHVzaW5nIHRoaXMgcGFja2FnZSBmb3IgYnVpbGQgc3RhdHMgaW4gZnV0dXJlOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC90cmVlL21haW4vcGFja2FnZXMvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrXG4gICAgY29uc3QgYXNzZXRNYXAgPSAoYXNzZXRzOiB7IG5hbWU6IHN0cmluZzsgc2l6ZT86IG51bWJlciB9W10pID0+XG4gICAgICBhc3NldHMubWFwKCh7IG5hbWUgfSkgPT4gYCR7cHVibGljUGF0aH0ke25hbWV9YCk7XG5cbiAgICBjb25zdCBhc3NldExpc3Q6IHN0cmluZ1tdID0gW107XG4gICAgT2JqZWN0LnZhbHVlcyhwcm9wcy5jbGllbnRNYW5pZmVzdD8uZW50cnlwb2ludHMgPz8ge30pLmZvckVhY2goXG4gICAgICBlbnRyeXBvaW50ID0+IHtcbiAgICAgICAgYXNzZXRMaXN0LnB1c2goLi4uYXNzZXRNYXAoZW50cnlwb2ludC5hc3NldHMgPz8gW10pKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgICBuZXcgU2V0KFxuICAgICAgYXNzZXRNYXAoXG4gICAgICAgIE9iamVjdC52YWx1ZXMocHJvcHMuY2xpZW50TWFuaWZlc3QubmFtZWRDaHVua0dyb3VwcyA/PyB7fSlcbiAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT5cbiAgICAgICAgICAgIG5leHRQcm9wcy5tYXRjaGVkUm91dGVzLnNvbWUocm91dGUgPT4gbmFtZT8uaW5jbHVkZXMocm91dGUubmFtZSkpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuZmxhdE1hcChjaHVuayA9PiBbXG4gICAgICAgICAgICAuLi4oY2h1bmsuYXNzZXRzID8/IFtdKSxcbiAgICAgICAgICAgIC8vIGFueSBjaHVuayBwcmVsb2Fkc1xuICAgICAgICAgICAgLi4uY2hpbGRyZW5Bc3NldHMoY2h1bmspLFxuICAgICAgICAgIF0pLFxuICAgICAgKSxcbiAgICApLmZvckVhY2goYXNzZXQgPT4gYXNzZXRMaXN0LnB1c2goYXNzZXQpKTtcblxuICAgIC8vIGZpbmQgYWRkaXRpb25hbCBhc3NldHMgdG8gcHJlbG9hZCBiYXNlZCBvbiBtYXRjaGVkIHJvdXRlXG4gICAgY29uc3QgYXNzZXRzOiB7XG4gICAgICBocmVmOiBzdHJpbmc7XG4gICAgICBhcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIHJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB9W10gPSBhc3NldExpc3RcbiAgICAgIC5maWx0ZXIoYXNzZXQgPT4gIWFzc2V0LmVuZHNXaXRoKCcuaG90LXVwZGF0ZS5qcycpKVxuICAgICAgLm1hcChhc3NldCA9PlxuICAgICAgICBhc3NldC5lbmRzV2l0aCgnLmNzcycpXG4gICAgICAgICAgPyB7IGhyZWY6IGFzc2V0LCByZWw6ICdzdHlsZXNoZWV0JyB9XG4gICAgICAgICAgOiBhc3NldC5lbmRzV2l0aCgnLmpzJylcbiAgICAgICAgICA/IHsgaHJlZjogYXNzZXQsIGFzOiAnc2NyaXB0JyB9XG4gICAgICAgICAgOiB7IGhyZWY6IGFzc2V0IH0sXG4gICAgICApO1xuXG4gICAgaWYgKG9wdGlvbnMuY3NQb2xpY3kpIHtcbiAgICAgIGNvbnN0IGh0dHBFcXVpdiA9XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbidcbiAgICAgICAgICA/ICdDb250ZW50LVNlY3VyaXR5LVBvbGljeSdcbiAgICAgICAgICA6ICdDb250ZW50LVNlY3VyaXR5LVBvbGljeS1SZXBvcnQtT25seSc7XG5cbiAgICAgIHByb3BzLnJlcy5zZXRIZWFkZXIoXG4gICAgICAgIGh0dHBFcXVpdixcbiAgICAgICAgYnVpbGRQb2xpY3koam9pbk5vbmNlKG9wdGlvbnMuY3NQb2xpY3ksIHByb3BzLm5vbmNlKSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBhcHA6IChcbiAgICAgICAgPERvY3VtZW50XG4gICAgICAgICAgey4uLm9wdGlvbnN9XG4gICAgICAgICAgZXh0cmFTdHlsZT17bmV4dFByb3BzLmV4dHJhU3R5bGV9XG4gICAgICAgICAgdGl0bGU9e25leHRQcm9wcy50aXRsZSA/PyBvcHRpb25zLnRpdGxlfVxuICAgICAgICAgIGFzc2V0cz17YXNzZXRzfVxuICAgICAgICAgIHJvb3RJZD17b3B0aW9ucy5yb290SWR9XG4gICAgICAgICAgc2NyaXB0cz17bmV4dFByb3BzLnNjcmlwdHN9XG4gICAgICAgID5cbiAgICAgICAgICB7bmV4dFByb3BzLmFwcH1cbiAgICAgICAgPC9Eb2N1bWVudD5cbiAgICAgICksXG4gICAgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hpbGRyZW5Bc3NldHMoY2h1bms6IFN0YXRzQ2h1bmtHcm91cCkge1xuICByZXR1cm4gY2h1bmsuY2hpbGRyZW5cbiAgICA/IE9iamVjdC52YWx1ZXMoY2h1bmsuY2hpbGRyZW4pLmZsYXRNYXAocHJlbG9hZCA9PlxuICAgICAgICBwcmVsb2FkLmZsYXRNYXAoYyA9PiBjLmFzc2V0cyA/PyBbXSksXG4gICAgICApXG4gICAgOiBbXTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBRUEsT0FBT0EsS0FBSyxNQUFNLE9BQU87QUFHekIsU0FBU0MsV0FBVyxFQUFFQyxTQUFTLFFBQWdCLFVBQVU7QUFDekQsT0FBT0MsUUFBUSxNQUFNLHdCQUF3QjtBQVU3QyxlQUFlLFNBQVNDLGFBQWFBLENBQUNDLE9BTXJDLEVBQTZFO0VBQzVFLE9BQU9DLElBQUksSUFBSSxNQUFNQyxLQUFLLElBQUk7SUFBQSxJQUFBQyxxQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxnQkFBQTtJQUM1QixNQUFNQyxTQUFTLEdBQUcsTUFBTVIsSUFBSSxD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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anansi/core",
3
- "version": "0.16.13",
3
+ "version": "0.16.15",
4
4
  "description": "React 18 Framework",
5
5
  "homepage": "https://github.com/ntucker/anansi/tree/master/packages/core#readme",
6
6
  "repository": {
@@ -66,22 +66,22 @@
66
66
  "browser"
67
67
  ],
68
68
  "devDependencies": {
69
- "@anansi/babel-preset": "4.0.1",
69
+ "@anansi/babel-preset": "4.0.2",
70
70
  "@anansi/browserslist-config": "1.4.1",
71
- "@anansi/webpack-config": "14.3.4",
71
+ "@anansi/webpack-config": "14.3.6",
72
72
  "@babel/cli": "7.21.0",
73
73
  "@babel/core": "7.21.0",
74
74
  "@types/compression": "1.7.2",
75
75
  "@types/source-map-support": "0.5.6",
76
76
  "@types/tmp": "0.2.3",
77
77
  "@types/webpack-hot-middleware": "2.25.6",
78
- "jest": "29.4.3",
79
- "rimraf": "4.3.0",
80
- "webpack": "5.75.0",
78
+ "jest": "29.5.0",
79
+ "rimraf": "4.4.0",
80
+ "webpack": "5.76.1",
81
81
  "webpack-cli": "5.0.1"
82
82
  },
83
83
  "dependencies": {
84
- "@anansi/router": "^0.7.22",
84
+ "@anansi/router": "^0.7.24",
85
85
  "@babel/runtime": "^7.17.0",
86
86
  "@rest-hooks/ssr": "^0.7.10",
87
87
  "chalk": "^4.1.2",
@@ -208,7 +208,12 @@ export default async function startDevServer(
208
208
  return;
209
209
  }
210
210
  res.socket.on('error', (error: unknown) => {
211
- console.error('Fatal', error);
211
+ log.error('Fatal:', error);
212
+ if ((error as any).code === 'ECONNRESET') {
213
+ log.error(
214
+ 'ECONNRESET is usually due to browser closing the connection',
215
+ );
216
+ }
212
217
  });
213
218
 
214
219
  await render(req, res);
@@ -1,6 +1,3 @@
1
- import type { Policy } from './csp.js';
2
- import { buildPolicy } from './csp.js';
3
-
4
1
  type Props = {
5
2
  children: React.ReactNode;
6
3
  assets: { href: string; as?: string; rel?: string }[];
@@ -10,8 +7,6 @@ type Props = {
10
7
  title: string;
11
8
  rootId: string;
12
9
  charSet: string;
13
- csPolicy?: Policy;
14
- nonce?: string | undefined;
15
10
  };
16
11
 
17
12
  export default function Document({
@@ -21,33 +16,13 @@ export default function Document({
21
16
  title,
22
17
  rootId,
23
18
  charSet,
24
- csPolicy,
25
- nonce,
26
19
  scripts,
27
20
  extraStyle,
28
21
  }: Props) {
29
- let cspMeta: null | React.ReactNode = null;
30
- if (csPolicy) {
31
- // add nonce to policy
32
- const policy = {
33
- ...csPolicy,
34
- };
35
- if (nonce) {
36
- if (typeof policy['script-src'] === 'string') {
37
- policy['script-src'] = [policy['script-src'], `'nonce-${nonce}'`];
38
- } else {
39
- policy['script-src'] = [...policy['script-src'], `'nonce-${nonce}'`];
40
- }
41
- }
42
- cspMeta = (
43
- <meta httpEquiv="Content-Security-Policy" content={buildPolicy(policy)} />
44
- );
45
- }
46
22
  return (
47
23
  <html>
48
24
  <head>
49
25
  <meta charSet={charSet} />
50
- {cspMeta}
51
26
  {head}
52
27
  {extraStyle}
53
28
  {assets.map((asset, i) => (
package/src/spouts/csp.ts CHANGED
@@ -23,3 +23,16 @@ export function buildPolicy(policyObj: Policy) {
23
23
  })
24
24
  .join('; ');
25
25
  }
26
+
27
+ export function joinNonce(policyObj: Policy, nonce?: string | undefined) {
28
+ if (!nonce) return policyObj;
29
+ const policy = {
30
+ ...policyObj,
31
+ };
32
+ if (typeof policy['script-src'] === 'string') {
33
+ policy['script-src'] = [policy['script-src'], `'nonce-${nonce}'`];
34
+ } else {
35
+ policy['script-src'] = [...policy['script-src'], `'nonce-${nonce}'`];
36
+ }
37
+ return policy;
38
+ }
@@ -3,7 +3,7 @@ import { Request } from 'express';
3
3
  import React from 'react';
4
4
  import { StatsChunkGroup } from 'webpack';
5
5
 
6
- import type { Policy } from './csp.js';
6
+ import { buildPolicy, joinNonce, Policy } from './csp.js';
7
7
  import Document from './DocumentComponent.js';
8
8
  import type { ServerSpout } from './types.js';
9
9
 
@@ -71,13 +71,18 @@ export default function DocumentSpout(options: {
71
71
  ? { href: asset, as: 'script' }
72
72
  : { href: asset },
73
73
  );
74
- const nonce =
75
- // nonces negate 'unsafe-inline' so do not add it in development to keep things easier
76
- props.nonce &&
77
- (process.env.NODE_ENV === 'production' ||
78
- (props.req as Request)?.protocol !== 'http')
79
- ? props.nonce
80
- : undefined;
74
+
75
+ if (options.csPolicy) {
76
+ const httpEquiv =
77
+ process.env.NODE_ENV === 'production'
78
+ ? 'Content-Security-Policy'
79
+ : 'Content-Security-Policy-Report-Only';
80
+
81
+ props.res.setHeader(
82
+ httpEquiv,
83
+ buildPolicy(joinNonce(options.csPolicy, props.nonce)),
84
+ );
85
+ }
81
86
 
82
87
  return {
83
88
  ...nextProps,
@@ -88,8 +93,6 @@ export default function DocumentSpout(options: {
88
93
  title={nextProps.title ?? options.title}
89
94
  assets={assets}
90
95
  rootId={options.rootId}
91
- nonce={nonce}
92
- csPolicy={options.csPolicy}
93
96
  scripts={nextProps.scripts}
94
97
  >
95
98
  {nextProps.app}