tnp-helpers 16.444.20 → 16.444.22

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.
Files changed (114) hide show
  1. package/assets/shared/shared_folder_info.txt +1 -1
  2. package/browser/esm2022/lib/base/base-git.mjs +85 -2
  3. package/browser/esm2022/lib/base/base-library-build.mjs +4 -2
  4. package/browser/esm2022/lib/base/base-npm-helpers.mjs +168 -15
  5. package/browser/esm2022/lib/base/base-project.mjs +14 -1
  6. package/browser/esm2022/lib/base/base-release-process.mjs +582 -0
  7. package/browser/esm2022/lib/base/base-vscode.mjs +10 -1
  8. package/browser/esm2022/lib/base/commit-data.mjs +116 -44
  9. package/browser/esm2022/lib/base/core-project.mjs +1 -1
  10. package/browser/esm2022/lib/base/index.mjs +3 -1
  11. package/browser/esm2022/lib/models.mjs +1 -1
  12. package/browser/fesm2022/tnp-helpers.mjs +1016 -113
  13. package/browser/fesm2022/tnp-helpers.mjs.map +1 -1
  14. package/browser/lib/base/base-git.d.ts +22 -4
  15. package/browser/lib/base/base-library-build.d.ts +1 -1
  16. package/browser/lib/base/base-npm-helpers.d.ts +28 -1
  17. package/browser/lib/base/base-project.d.ts +7 -0
  18. package/browser/lib/base/base-release-process.d.ts +70 -0
  19. package/browser/lib/base/commit-data.d.ts +18 -13
  20. package/browser/lib/base/core-project.d.ts +9 -0
  21. package/browser/lib/base/index.d.ts +1 -0
  22. package/browser/lib/models.d.ts +11 -1
  23. package/client/esm2022/lib/base/base-git.mjs +85 -2
  24. package/client/esm2022/lib/base/base-library-build.mjs +4 -2
  25. package/client/esm2022/lib/base/base-npm-helpers.mjs +168 -15
  26. package/client/esm2022/lib/base/base-project.mjs +14 -1
  27. package/client/esm2022/lib/base/base-release-process.mjs +582 -0
  28. package/client/esm2022/lib/base/base-vscode.mjs +10 -1
  29. package/client/esm2022/lib/base/commit-data.mjs +116 -44
  30. package/client/esm2022/lib/base/core-project.mjs +1 -1
  31. package/client/esm2022/lib/base/index.mjs +3 -1
  32. package/client/esm2022/lib/models.mjs +1 -1
  33. package/client/fesm2022/tnp-helpers.mjs +1016 -113
  34. package/client/fesm2022/tnp-helpers.mjs.map +1 -1
  35. package/client/lib/base/base-git.d.ts +22 -4
  36. package/client/lib/base/base-library-build.d.ts +1 -1
  37. package/client/lib/base/base-npm-helpers.d.ts +28 -1
  38. package/client/lib/base/base-project.d.ts +7 -0
  39. package/client/lib/base/base-release-process.d.ts +70 -0
  40. package/client/lib/base/commit-data.d.ts +18 -13
  41. package/client/lib/base/core-project.d.ts +9 -0
  42. package/client/lib/base/index.d.ts +1 -0
  43. package/client/lib/models.d.ts +11 -1
  44. package/client/package.json +32 -31
  45. package/lib/base/base-command-line.backend.d.ts +4 -0
  46. package/lib/base/base-command-line.backend.js +113 -1
  47. package/lib/base/base-command-line.backend.js.map +1 -1
  48. package/lib/base/base-git.d.ts +19 -1
  49. package/lib/base/base-git.js +156 -41
  50. package/lib/base/base-git.js.map +1 -1
  51. package/lib/base/base-library-build.d.ts +1 -1
  52. package/lib/base/base-library-build.js +33 -31
  53. package/lib/base/base-library-build.js.map +1 -1
  54. package/lib/base/base-npm-helpers.d.ts +30 -2
  55. package/lib/base/base-npm-helpers.js +212 -17
  56. package/lib/base/base-npm-helpers.js.map +1 -1
  57. package/lib/base/base-project.d.ts +7 -0
  58. package/lib/base/base-project.js +26 -2
  59. package/lib/base/base-project.js.map +1 -1
  60. package/lib/base/base-release-process.d.ts +69 -0
  61. package/lib/base/base-release-process.js +894 -0
  62. package/lib/base/base-release-process.js.map +1 -0
  63. package/lib/base/base-vscode.js +9 -0
  64. package/lib/base/base-vscode.js.map +1 -1
  65. package/lib/base/commit-data.d.ts +17 -12
  66. package/lib/base/commit-data.js +138 -78
  67. package/lib/base/commit-data.js.map +1 -1
  68. package/lib/base/core-project.d.ts +9 -0
  69. package/lib/base/core-project.js.map +1 -1
  70. package/lib/base/index.d.ts +2 -0
  71. package/lib/base/index.js +2 -0
  72. package/lib/base/index.js.map +1 -1
  73. package/lib/base/translate.d.ts +227 -1
  74. package/lib/base/translate.js +566 -54
  75. package/lib/base/translate.js.map +1 -1
  76. package/lib/helpers/for-backend/helpers-console-gui.d.ts +2 -1
  77. package/lib/helpers/for-backend/helpers-console-gui.js +3 -2
  78. package/lib/helpers/for-backend/helpers-console-gui.js.map +1 -1
  79. package/lib/helpers/for-backend/helpers-dependencies.backend.js +1 -2
  80. package/lib/helpers/for-backend/helpers-dependencies.backend.js.map +1 -1
  81. package/lib/helpers/for-backend/helpers-git.backend.d.ts +29 -1
  82. package/lib/helpers/for-backend/helpers-git.backend.js +204 -15
  83. package/lib/helpers/for-backend/helpers-git.backend.js.map +1 -1
  84. package/lib/helpers/for-backend/helpers-process.backend.d.ts +10 -8
  85. package/lib/helpers/for-backend/helpers-process.backend.js +56 -56
  86. package/lib/helpers/for-backend/helpers-process.backend.js.map +1 -1
  87. package/lib/helpers/for-browser/angular.helper.js +3 -3
  88. package/lib/models.d.ts +11 -1
  89. package/lib/old/base-component.js +3 -3
  90. package/lib/old/base-formly-component.js +3 -3
  91. package/lib/old/dual-component-ctrl.js +3 -3
  92. package/package.json +4 -4
  93. package/tmp-environment.json +36 -35
  94. package/websql/esm2022/lib/base/base-git.mjs +85 -2
  95. package/websql/esm2022/lib/base/base-library-build.mjs +4 -2
  96. package/websql/esm2022/lib/base/base-npm-helpers.mjs +168 -15
  97. package/websql/esm2022/lib/base/base-project.mjs +16 -3
  98. package/websql/esm2022/lib/base/base-release-process.mjs +582 -0
  99. package/websql/esm2022/lib/base/base-vscode.mjs +10 -1
  100. package/websql/esm2022/lib/base/commit-data.mjs +116 -44
  101. package/websql/esm2022/lib/base/core-project.mjs +1 -1
  102. package/websql/esm2022/lib/base/index.mjs +3 -1
  103. package/websql/esm2022/lib/models.mjs +1 -1
  104. package/websql/fesm2022/tnp-helpers.mjs +1018 -115
  105. package/websql/fesm2022/tnp-helpers.mjs.map +1 -1
  106. package/websql/lib/base/base-git.d.ts +22 -4
  107. package/websql/lib/base/base-library-build.d.ts +1 -1
  108. package/websql/lib/base/base-npm-helpers.d.ts +28 -1
  109. package/websql/lib/base/base-project.d.ts +7 -0
  110. package/websql/lib/base/base-release-process.d.ts +70 -0
  111. package/websql/lib/base/commit-data.d.ts +18 -13
  112. package/websql/lib/base/core-project.d.ts +9 -0
  113. package/websql/lib/base/index.d.ts +1 -0
  114. package/websql/lib/models.d.ts +11 -1
@@ -1,5 +1,11 @@
1
1
  /* */
2
2
  /* */
3
+ /* */
4
+ /* */
5
+ /* */
6
+ /* */
7
+ /* */
8
+ /* */
3
9
  import { _ } from 'tnp-core/websql';
4
10
  import { Helpers } from '../index';
5
11
  import { BaseFeatureForProject } from './base-feature-for-project';
@@ -7,7 +13,15 @@ import { config } from 'tnp-config/websql';
7
13
  export class BaseNpmHelpers extends BaseFeatureForProject {
8
14
  constructor(project) {
9
15
  super(project);
10
- this.packageJSON = project.readJson(config.file.package_json);
16
+ this.project = project;
17
+ this.reloadPackageJsonInMemory();
18
+ }
19
+ /**
20
+ * if something else change package.json in this project
21
+ * and you know that you need to reload it..
22
+ */
23
+ reloadPackageJsonInMemory() {
24
+ this.packageJSON = this.project.readJson(config.file.package_json);
11
25
  }
12
26
  get name() {
13
27
  return this.packageJSON?.name || '';
@@ -18,6 +32,56 @@ export class BaseNpmHelpers extends BaseFeatureForProject {
18
32
  get version() {
19
33
  return this.packageJSON?.version;
20
34
  }
35
+ set version(newVersion) {
36
+ this.packageJSON.version = newVersion;
37
+ this.project.writeJson(config.file.package_json, this.packageJSON);
38
+ }
39
+ updateDependency(packageName, version) {
40
+ /* */
41
+ /* */
42
+ /* */
43
+ /* */
44
+ /* */
45
+ /* */
46
+ /* */
47
+ /* */
48
+ /* */
49
+ /* */
50
+ return (void 0);
51
+ }
52
+ get versionWithPatchPlusOne() {
53
+ const ver = this.version.split('.');
54
+ if (ver.length > 0) {
55
+ ver[ver.length - 1] = (parseInt(_.last(ver)) + 1).toString();
56
+ }
57
+ return ver.join('.');
58
+ }
59
+ get versionWithMinorPlusOneAndPatchZero() {
60
+ const ver = this.version.split('.');
61
+ if (ver.length > 1) {
62
+ ver[1] = (parseInt(ver[1]) + 1).toString();
63
+ for (let index = 2; index < ver.length; index++) {
64
+ ver[index] = '0';
65
+ }
66
+ }
67
+ else {
68
+ Helpers.warn(`[npm-project] something went wrong with bumping minor version`);
69
+ }
70
+ return ver.join('.');
71
+ }
72
+ get versionWithMajorPlusOneAndMinorZeroAndPatchZero() {
73
+ const ver = this.version.split('.');
74
+ if (ver.length > 0) {
75
+ ver[0] = (parseInt(_.first(ver)) + 1).toString();
76
+ for (let index = 1; index < ver.length; index++) {
77
+ ver[index] = '0';
78
+ }
79
+ }
80
+ else {
81
+ Helpers.warn(`[npm-project] something went wrong with bumping major version`);
82
+ }
83
+ return ver.join('.');
84
+ }
21
85
  /**
22
86
  * Major Version from package.json
23
87
  */
@@ -117,18 +181,6 @@ export class BaseNpmHelpers extends BaseFeatureForProject {
117
181
  ...(packageJson.resolutions || {}),
118
182
  });
119
183
  }
120
- checkIfLogginInToNpm() {
121
- /* */
122
- /* */
123
- /* */
124
- /* */
125
- /* */
126
- /* */
127
- /* */
128
- /* */
129
- /* */
130
- return (void 0);
131
- }
132
184
  linkNodeModulesTo(proj) {
133
185
  /* */
134
186
  /* */
@@ -285,7 +337,10 @@ export class BaseNpmHelpers extends BaseFeatureForProject {
285
337
  }
286
338
  const command = `npm run ${taskName} ${additionalArguments ? ' -- ' + additionalArguments : ''}`;
287
339
  Helpers.info(`Starting npm task: "${command}"`);
288
- return this.project.run(command, { output: true, biggerBuffer: true });
340
+ return this.project.run(command, {
341
+ output: true,
342
+ biggerBuffer: true,
343
+ });
289
344
  }
290
345
  async prepareCommand(optiosn) {
291
346
  let { pkg, remove, silent, useYarn, force, removeYarnOrPackageJsonLock, generateYarnOrPackageJsonLock, ignoreOptional, } = optiosn || {};
@@ -321,7 +376,105 @@ export class BaseNpmHelpers extends BaseFeatureForProject {
321
376
  }
322
377
  return command;
323
378
  }
379
+ /**
380
+ *
381
+ * @param registry without specified registr is checking npm registry
382
+ * @returns
383
+ */
384
+ async isLoggedInToRegistry(registry) {
385
+ /* */
386
+ /* */
387
+ /* */
388
+ /* */
389
+ /* */
390
+ /* */
391
+ /* */
392
+ /* */
393
+ /* */
394
+ /* */
395
+ /* */
396
+ /* */
397
+ /* */
398
+ /* */
399
+ /* */
400
+ /* */
401
+ /* */
402
+ /* */
403
+ /* */
404
+ /* */
405
+ /* */
406
+ /* */
407
+ return (void 0);
408
+ }
409
+ /**
410
+ * Prompt the user to log in to a specific npm registry.
411
+ * @param {string} [registry] - Optional npm registry URL.
412
+ * @returns {Promise<void>} - A promise that resolves when the login process completes.
413
+ */
414
+ async loginToRegistry(registry) {
415
+ /* */
416
+ /* */
417
+ /* */
418
+ /* */
419
+ /* */
420
+ /* */
421
+ /* */
422
+ /* */
423
+ /* */
424
+ /* */
425
+ /* */
426
+ /* */
427
+ /* */
428
+ /* */
429
+ /* */
430
+ /* */
431
+ /* */
432
+ /* */
433
+ return (void 0);
434
+ }
435
+ async makeSureLoggedInToNpmRegistry(registry) {
436
+ /* */
437
+ /* */
438
+ /* */
439
+ /* */
440
+ /* */
441
+ /* */
442
+ /* */
443
+ /* */
444
+ /* */
445
+ /* */
446
+ /* */
447
+ /* */
448
+ /* */
449
+ /* */
450
+ /* */
451
+ /* */
452
+ /* */
453
+ /* */
454
+ /* */
455
+ /* */
456
+ /* */
457
+ /* */
458
+ /* */
459
+ return (void 0);
460
+ }
461
+ /**
462
+ * @deprecated
463
+ * use makeSureLoggedInToNpmRegistry()
464
+ */
465
+ checkIfLogginInToNpm() {
466
+ /* */
467
+ /* */
468
+ /* */
469
+ /* */
470
+ /* */
471
+ /* */
472
+ /* */
473
+ /* */
474
+ /* */
475
+ return (void 0);
476
+ }
324
477
  }
325
478
  ;
326
479
  ({}); // @--end-of-file-for-module=tnp-helpers lib/base/base-npm-helpers.ts
327
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1ucG0taGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0LXdlYnNxbC90bnAtaGVscGVycy9wcm9qZWN0cy90bnAtaGVscGVycy9zcmMvbGliL2Jhc2UvYmFzZS1ucG0taGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxLQUFLO0FBQ0wsS0FBSztBQUVMLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRW5FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUszQyxNQUFNLE9BQU8sY0FFWCxTQUFRLHFCQUFxQjtJQUU3QixZQUFZLE9BQWdCO1FBQzFCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFHRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBSUQ7O09BRUc7SUFDSCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDO0lBQ25DLENBQUM7SUFJRDs7T0FFRztJQUNILGFBQWE7SUFDYixJQUFJLFlBQVk7UUFDbEIsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBSUQ7O09BRUc7SUFDSCxhQUFhO0lBQ2IsSUFBSSxZQUFZO1FBQ2xCLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FB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QyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHO29CQUNoRCxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUc7b0JBQ3BELElBQUksb0JBQW9CLEdBQUcsQ0FBQztTQUUvQjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FFRjtBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMscUVBQXFFIiwic291cmNlc0NvbnRlbnQiOlsiXG5cblxuLyogKi9cbi8qICovXG4gIFxuaW1wb3J0IHsgXyB9IGZyb20gJ3RucC1jb3JlL3dlYnNxbCc7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IHsgQmFzZUZlYXR1cmVGb3JQcm9qZWN0IH0gZnJvbSAnLi9iYXNlLWZlYXR1cmUtZm9yLXByb2plY3QnO1xuaW1wb3J0IHR5cGUgeyBCYXNlUHJvamVjdCB9IGZyb20gJy4vYmFzZS1wcm9qZWN0JztcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJ3RucC1jb25maWcvd2Vic3FsJztcbmltcG9ydCB7IFBhY2thZ2VKc29uIH0gZnJvbSAndHlwZS1mZXN0JztcbmltcG9ydCB7IENvcmVNb2RlbHMgfSBmcm9tICd0bnAtY29yZS93ZWJzcWwnO1xuXG5cbmV4cG9ydCBjbGFzcyBCYXNlTnBtSGVscGVyczxcbiAgUFJPSkNFVCBleHRlbmRzIEJhc2VQcm9qZWN0ID0gYW55LFxuPiBleHRlbmRzIEJhc2VGZWF0dXJlRm9yUHJvamVjdCB7XG4gIHByaXZhdGUgcGFja2FnZUpTT046IFBhY2thZ2VKc29uO1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQUk9KQ0VUKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG4gICAgdGhpcy5wYWNrYWdlSlNPTiA9IHByb2plY3QucmVhZEpzb24oY29uZmlnLmZpbGUucGFja2FnZV9qc29uKTtcbiAgfVxuXG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYWNrYWdlSlNPTj8ubmFtZSB8fCAnJztcbiAgfVxuXG5cblxuICAvKipcbiAgICogdmVyc2lvbiBmcm9tIHBhY2thZ2UuanNvbiAtPiBwcm9wZXJ0eSB2ZXJzaW9uXG4gICAqL1xuICBnZXQgdmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2VKU09OPy52ZXJzaW9uO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBNYWpvciBWZXJzaW9uIGZyb20gcGFja2FnZS5qc29uXG4gICAqL1xuICAvLyBAdHMtaWdub3JlXG4gIGdldCBtYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogTWlub3IgVmVyc2lvbiBmcm9tIHBhY2thZ2UuanNvblxuICAgKi9cbiAgLy8gQHRzLWlnbm9yZVxuICBnZXQgbWlub3JWZXJzaW9uKCk6IG51bWJlciB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgYXN5bmMgYnVtcFBhdGNoVmVyc2lvbigpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBnZXQgdmVyc2lvblBhdGhBc051bWJlcigpOiBudW1iZXIge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIG5wbSBkZXBlbmRlbmNpZXMgZnJvbSBwYWNrYWdlLmpzb25cbiAgICovXG4gIGdldCBkZXBlbmRlbmNpZXMoKSB7XG4gICAgcmV0dXJuICh0aGlzLnBhY2thZ2VKU09OID8gdGhpcy5wYWNrYWdlSlNPTi5kZXBlbmRlbmNpZXMgOiB7fSkgfHwge307XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIHBlZXJEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzXG4gICAqL1xuICBnZXQgcGVlckRlcGVuZGVuY2llcygpIHtcbiAgICByZXR1cm4gKHRoaXMucGFja2FnZUpTT04gPyB0aGlzLnBhY2thZ2VKU09OLnBlZXJEZXBlbmRlbmNpZXMgOiB7fSkgfHwge307XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGRldkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXNcbiAgICovXG4gIGdldCBkZXZEZXBlbmRlbmNpZXMoKSB7XG4gICAgcmV0dXJuICh0aGlzLnBhY2thZ2VKU09OID8gdGhpcy5wYWNrYWdlSlNPTi5kZXZEZXBlbmRlbmNpZXMgOiB7fSkgfHwge307XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIHJlc29sdXRpb25zIGRlcGVuZGVuY2llc1xuICAgKi9cbiAgZ2V0IHJlc29sdXRpb25zKCkge1xuICAgIHJldHVybiAodGhpcy5wYWNrYWdlSlNPTiA/IHRoaXMucGFja2FnZUpTT05bJ3Jlc29sdXRpb25zJ10gOiB7fSkgfHwge307XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIG9iamVjdCB3aXRsIGFsbCBkZXBzIGZyb20gY3VycmVudCBwcm9qZWN0IHBhY2thZ2UganNvblxuICAgKi9cbiAgZ2V0IGFsbERlcGVuZGVuY2llcygpOiB7IFtwYWNrYWdlTmFtZTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB0aGlzLmFsbERlcHNGcm9tUGFja2FnZUpzb24odGhpcy5wYWNrYWdlSlNPTik7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgb2JqZWN0IHdpdGwgYWxsIGRlcHMgZnJvbSBwYWNrYWdlIGpzb25cbiAgICovXG4gIGFsbERlcHNGcm9tUGFja2FnZUpzb24ocGFja2FnZUpzb246IFBhY2thZ2VKc29uKSB7XG4gICAgcmV0dXJuIF8ubWVyZ2Uoe1xuICAgICAgLi4uKHBhY2thZ2VKc29uLmRldkRlcGVuZGVuY2llcyB8fCB7fSksXG4gICAgICAuLi4ocGFja2FnZUpzb24ucGVlckRlcGVuZGVuY2llcyB8fCB7fSksXG4gICAgICAuLi4ocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzIHx8IHt9KSxcbiAgICAgIC4uLihwYWNrYWdlSnNvbi5yZXNvbHV0aW9ucyB8fCB7fSksXG4gICAgfSkgYXMgYW55O1xuICB9XG5cblxuXG4gIGNoZWNrSWZMb2dnaW5JblRvTnBtKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBsaW5rTm9kZU1vZHVsZXNUbyhwcm9qOiBQYXJ0aWFsPEJhc2VQcm9qZWN0Pikge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByZWZlcllhcm5PdmVyTnBtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG5cblxuICBhc3luYyBtYWtlU3VyZU5vZGVNb2R1bGVzSW5zdGFsbGVkKG9wdGlvbnM/OiB7XG4gICAgdXNlWWFybj86IGJvb2xlYW47XG4gICAgZm9yY2U/OiBib29sZWFuO1xuICB9KSB7XG4gICAgaWYgKHRoaXMuZW1wdHlOb2RlTW9kdWxlcykge1xuICAgICAgdGhpcy5yZWluc3RhbE5vZGVNb2R1bGVzKG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG5cblxuICBkZWxldGVOb2RlTW9kdWxlcygpIHtcbiAgICB0aGlzLnByb2plY3QucmVtb3ZlKGNvbmZpZy5mb2xkZXIubm9kZV9tb2R1bGVzKTtcbiAgfVxuXG5cblxuICBhc3luYyByZWluc3RhbGxOb2RlTW9kdWxlcyhmb3JjZXJSZW1vdmVOb2RlTW9kdWxlcyA9IGZhbHNlKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcmVpbnN0YWxOb2RlTW9kdWxlcyhvcHRpb25zPzogeyB1c2VZYXJuPzogYm9vbGVhbjsgZm9yY2U/OiBib29sZWFuIH0pIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHRydWUgaWYgbm9kZV9tb2R1bGVzIGZvbGRlciBpcyBlbXB0eVxuICAgKi9cbiAgZ2V0IGVtcHR5Tm9kZU1vZHVsZXMoKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgYXN5bmMgcmVzZXRQYWNrYWdlTG9ja0pzb24oKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgc3RhcnROcG1UYXNrKHRhc2tOYW1lOiBzdHJpbmcsIGFkZGl0aW9uYWxBcmd1bWVudHM/OiBzdHJpbmcgfCBvYmplY3QpIHtcbiAgICBpZiAoXy5pc09iamVjdChhZGRpdGlvbmFsQXJndW1lbnRzKSkge1xuICAgICAgYWRkaXRpb25hbEFyZ3VtZW50cyA9IE9iamVjdC5rZXlzKGFkZGl0aW9uYWxBcmd1bWVudHMpXG4gICAgICAgIC5tYXAoayA9PiBgLS0ke2t9ICR7YWRkaXRpb25hbEFyZ3VtZW50c1trXX1gKVxuICAgICAgICAuam9pbignICcpO1xuICAgIH1cbiAgICBjb25zdCBjb21tYW5kID0gYG5wbSBydW4gJHt0YXNrTmFtZX0gJHthZGRpdGlvbmFsQXJndW1lbnRzID8gJyAtLSAnICsgYWRkaXRpb25hbEFyZ3VtZW50cyA6ICcnfWBcbiAgICBIZWxwZXJzLmluZm8oYFN0YXJ0aW5nIG5wbSB0YXNrOiBcIiR7Y29tbWFuZH1cImApO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvamVjdC5ydW4oY29tbWFuZCxcbiAgICAgIHsgb3V0cHV0OiB0cnVlLCBiaWdnZXJCdWZmZXI6dHJ1ZSB9LFxuICAgICk7XG4gIH1cblxuXG5cbiAgYXN5bmMgcHJlcGFyZUNvbW1hbmQoXG4gICAgb3B0aW9zbj86IENvcmVNb2RlbHMuTnBtSW5zdGFsbE9wdGlvbnMsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbGV0IHtcbiAgICAgIHBrZyxcbiAgICAgIHJlbW92ZSxcbiAgICAgIHNpbGVudCxcbiAgICAgIHVzZVlhcm4sXG4gICAgICBmb3JjZSxcbiAgICAgIHJlbW92ZVlhcm5PclBhY2thZ2VKc29uTG9jayxcbiAgICAgIGdlbmVyYXRlWWFybk9yUGFja2FnZUpzb25Mb2NrLFxuICAgICAgaWdub3JlT3B0aW9uYWwsXG4gICAgfSA9IG9wdGlvc24gfHwge307XG5cbiAgICBmb3JjZSA9IHRydWU7IC8vIFRPRE8gUVVJQ0tfRklYXG5cbiAgICBsZXQgY29tbWFuZCA9ICcnO1xuICAgIGNvbnN0IGNvbW1vbk9wdGlvbnMgPSBgLS1pZ25vcmUtZW5naW5lc2A7XG5cbiAgICBpZiAodXNlWWFybikge1xuXG4gICAgICBjb25zdCBhcmdzRm9yRmFzdGVySW5zdGFsbCA9IGAke2ZvcmNlID8gJy0tZm9yY2UnIDogJyd9ICR7Y29tbW9uT3B0aW9uc30gYDtcbiAgICAgIGNvbW1hbmQgPVxuICAgICAgICBgJHtcbiAgICAgICAgICByZW1vdmVZYXJuT3JQYWNrYWdlSnNvbkxvY2tcbiAgICAgICAgICAgID8gYHJtICR7Y29uZmlnLmZpbGUueWFybl9sb2NrfSBgICtcbiAgICAgICAgICAgICAgYCYmIHRvdWNoICR7Y29uZmlnLmZpbGUueWFybl9sb2NrfSAmJiBgXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH1gICtcbiAgICAgICAgYHlhcm4gJHtwa2cgPyAocmVtb3ZlID8gJ3JlbW92ZScgOiAnYWRkJykgOiAnaW5zdGFsbCd9ICR7cGtnID8gcGtnLm5hbWUgOiAnJ30gYCArXG4gICAgICAgIGAgJHtnZW5lcmF0ZVlhcm5PclBhY2thZ2VKc29uTG9jayA/ICcnIDogJy0tbm8tbG9ja2ZpbGUnfSBgICtcbiAgICAgICAgYCAke2FyZ3NGb3JGYXN0ZXJJbnN0YWxsfSBgICtcbiAgICAgICAgYCAke3BrZyAmJiBwa2cuaW5zdGFsbFR5cGUgJiYgcGtnLmluc3RhbGxUeXBlID09PSAnLS1zYXZlLWRldicgPyAnLWRldicgOiAnJ30gYDtcblxuICAgIH0gZWxzZSB7XG5cbiAgICAgIGNvbnN0IGFyZ3NGb3JGYXN0ZXJJbnN0YWxsID1cbiAgICAgICAgYCR7Zm9yY2UgPyAnLS1mb3JjZScgOiAnJ30gJHtjb21tb25PcHRpb25zfSAtLW5vLWF1ZGl0IGAgK1xuICAgICAgICBgJHtzaWxlbnQgPyAnLS1zaWxlbnQgLS1uby1wcm9ncmVzcycgOiAnJ30gICBgO1xuXG4gICAgICBjb21tYW5kID1cbiAgICAgICAgYCR7XG4gICAgICAgICAgcmVtb3ZlWWFybk9yUGFja2FnZUpzb25Mb2NrXG4gICAgICAgICAgICA/IGBybSAke2NvbmZpZy5maWxlLnBhY2thZ2VfbG9ja19qc29ufSBgICtcbiAgICAgICAgICAgICAgYCYmIHRvdWNoICR7Y29uZmlnLmZpbGUucGFja2FnZV9sb2NrX2pzb259ICAmJiBgXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH1gICtcbiAgICAgICAgYG5weCAtLW5vZGUtb3B0aW9ucz0tLW1heC1vbGQtc3BhY2Utc2l6ZT04MDAwIG5wbSBgICtcbiAgICAgICAgYCR7cmVtb3ZlID8gJ3VuaW5zdGFsbCcgOiAnaW5zdGFsbCd9ICR7cGtnID8gcGtnLm5hbWUgOiAnJ30gYCArXG4gICAgICAgIGAgJHtnZW5lcmF0ZVlhcm5PclBhY2thZ2VKc29uTG9jayA/ICcnIDogJy0tbm8tcGFja2FnZS1sb2NrJ30gYCArXG4gICAgICAgIGAgJHtpZ25vcmVPcHRpb25hbCA/ICctLWlnbm9yZS1vcHRpb25hbCcgOiAnJ30gYCArXG4gICAgICAgIGAgJHtwa2cgJiYgcGtnLmluc3RhbGxUeXBlID8gcGtnLmluc3RhbGxUeXBlIDogJyd9IGAgK1xuICAgICAgICBgICR7YXJnc0ZvckZhc3Rlckluc3RhbGx9IGA7XG5cbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmQ7XG4gIH1cblxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dG5wLWhlbHBlcnMgbGliL2Jhc2UvYmFzZS1ucG0taGVscGVycy50cyJdfQ==
480
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1ucG0taGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0LXdlYnNxbC90bnAtaGVscGVycy9wcm9qZWN0cy90bnAtaGVscGVycy9zcmMvbGliL2Jhc2UvYmFzZS1ucG0taGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUVMLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRW5FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUszQyxNQUFNLE9BQU8sY0FFWCxTQUFRLHFCQUFxQjtJQUU3QixZQUFZLE9BQWdCO1FBQzFCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFHRDs7O09BR0c7SUFDSCx5QkFBeUI7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFJRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBSUQ7O09BRUc7SUFDSCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxVQUFrQjtRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFJRCxnQkFBZ0IsQ0FBQyxXQUFtQixFQUFFLE9BQWU7UUFDdkQsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJRCxJQUFJLHVCQUF1QjtRQUN6QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xCLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUM5RDtRQUNELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBSUQsSUFBSSxtQ0FBbUM7UUFDckMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0MsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQy9DLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7YUFDbEI7U0FDRjthQUFNO1lBQ0wsT0FBTyxDQUFDLElBQUksQ0FDViwrREFBK0QsQ0FDaEUsQ0FBQztTQUNIO1FBQ0QsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFJRCxJQUFJLCtDQUErQztRQUNqRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakQsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQy9DLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7YUFDbEI7U0FDRjthQUFNO1lBQ0wsT0FBTyxDQUFDLElBQUksQ0FDViwrREFBK0QsQ0FDaEUsQ0FBQztTQUNIO1FBQ0QsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFJRDs7T0FFRztJQUNILGFBQWE7SUFDYixJQUFJLFlBQVk7UUFDbEIsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBSUQ7O09BRUc7SUFDSCxhQUFhO0lBQ2IsSUFBSSxZQUFZO1FBQ2xCLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJRDs7T0FFRztJQUNILEtBQUssQ0FBQyxnQkFBZ0I7UUFDeEIsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBSUQsSUFBSSxtQkFBbUI7UUFDekIsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJRDs7T0FFRztJQUNILElBQUksWUFBWTtRQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZFLENBQUM7SUFJRDs7T0FFRztJQUNILElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0UsQ0FBQztJQUlEOztPQUVHO0lBQ0gsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFFLENBQUM7SUFJRDs7T0FFRztJQUNILElBQUksV0FBVztRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekUsQ0FBQztJQUlEOztPQUVHO0lBQ0gsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxzQkFBc0IsQ0FBQyxXQUF3QjtRQUM3QyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDYixHQUFHLENBQUMsV0FBVyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUM7WUFDdEMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7WUFDdkMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1lBQ25DLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztTQUNuQyxDQUFRLENBQUM7SUFDWixDQUFDO0lBSUQsaUJBQWlCLENBQUMsSUFBMEI7UUFDOUMsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBSUQsaUJBQWlCO1FBQ2YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBSUQsS0FBSyxDQUFDLDRCQUE0QixDQUFDLE9BR2xDO1FBQ0MsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUlELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUlELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyx1QkFBdUIsR0FBRyxLQUFLO1FBQzVELEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUlELG1CQUFtQixDQUFDLE9BQWdEO1FBQ3RFLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJRDs7T0FFRztJQUNILElBQUksZ0JBQWdCO1FBQ3RCLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FB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Q0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILG9CQUFvQjtRQUN0QixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0NBRUY7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHFFQUFxRSIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbmltcG9ydCB7IF8gfSBmcm9tICd0bnAtY29yZS93ZWJzcWwnO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCB7IEJhc2VGZWF0dXJlRm9yUHJvamVjdCB9IGZyb20gJy4vYmFzZS1mZWF0dXJlLWZvci1wcm9qZWN0JztcbmltcG9ydCB0eXBlIHsgQmFzZVByb2plY3QgfSBmcm9tICcuL2Jhc2UtcHJvamVjdCc7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICd0bnAtY29uZmlnL3dlYnNxbCc7XG5pbXBvcnQgeyBQYWNrYWdlSnNvbiB9IGZyb20gJ3R5cGUtZmVzdCc7XG5pbXBvcnQgeyBDb3JlTW9kZWxzIH0gZnJvbSAndG5wLWNvcmUvd2Vic3FsJztcblxuXG5leHBvcnQgY2xhc3MgQmFzZU5wbUhlbHBlcnM8XG4gIFBST0pDRVQgZXh0ZW5kcyBCYXNlUHJvamVjdCA9IGFueSxcbj4gZXh0ZW5kcyBCYXNlRmVhdHVyZUZvclByb2plY3Qge1xuICBwcml2YXRlIHBhY2thZ2VKU09OOiBQYWNrYWdlSnNvbjtcbiAgY29uc3RydWN0b3IocHJvamVjdDogUFJPSkNFVCkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuICAgIHRoaXMucHJvamVjdCA9IHByb2plY3Q7XG4gICAgdGhpcy5yZWxvYWRQYWNrYWdlSnNvbkluTWVtb3J5KCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBpZiBzb21ldGhpbmcgZWxzZSBjaGFuZ2UgcGFja2FnZS5qc29uIGluIHRoaXMgcHJvamVjdFxuICAgKiBhbmQgeW91IGtub3cgdGhhdCB5b3UgbmVlZCB0byByZWxvYWQgaXQuLlxuICAgKi9cbiAgcmVsb2FkUGFja2FnZUpzb25Jbk1lbW9yeSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhY2thZ2VKU09OID0gdGhpcy5wcm9qZWN0LnJlYWRKc29uKGNvbmZpZy5maWxlLnBhY2thZ2VfanNvbik7XG4gIH1cblxuXG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYWNrYWdlSlNPTj8ubmFtZSB8fCAnJztcbiAgfVxuXG5cblxuICAvKipcbiAgICogdmVyc2lvbiBmcm9tIHBhY2thZ2UuanNvbiAtPiBwcm9wZXJ0eSB2ZXJzaW9uXG4gICAqL1xuICBnZXQgdmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2VKU09OPy52ZXJzaW9uO1xuICB9XG5cbiAgc2V0IHZlcnNpb24obmV3VmVyc2lvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5wYWNrYWdlSlNPTi52ZXJzaW9uID0gbmV3VmVyc2lvbjtcbiAgICB0aGlzLnByb2plY3Qud3JpdGVKc29uKGNvbmZpZy5maWxlLnBhY2thZ2VfanNvbiwgdGhpcy5wYWNrYWdlSlNPTik7XG4gIH1cblxuXG5cbiAgdXBkYXRlRGVwZW5kZW5jeShwYWNrYWdlTmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB2b2lkIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGdldCB2ZXJzaW9uV2l0aFBhdGNoUGx1c09uZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlciA9IHRoaXMudmVyc2lvbi5zcGxpdCgnLicpO1xuICAgIGlmICh2ZXIubGVuZ3RoID4gMCkge1xuICAgICAgdmVyW3Zlci5sZW5ndGggLSAxXSA9IChwYXJzZUludChfLmxhc3QodmVyKSkgKyAxKS50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gdmVyLmpvaW4oJy4nKTtcbiAgfVxuXG5cblxuICBnZXQgdmVyc2lvbldpdGhNaW5vclBsdXNPbmVBbmRQYXRjaFplcm8oKTogc3RyaW5nIHtcbiAgICBjb25zdCB2ZXIgPSB0aGlzLnZlcnNpb24uc3BsaXQoJy4nKTtcbiAgICBpZiAodmVyLmxlbmd0aCA+IDEpIHtcbiAgICAgIHZlclsxXSA9IChwYXJzZUludCh2ZXJbMV0pICsgMSkudG9TdHJpbmcoKTtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMjsgaW5kZXggPCB2ZXIubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZlcltpbmRleF0gPSAnMCc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIEhlbHBlcnMud2FybihcbiAgICAgICAgYFtucG0tcHJvamVjdF0gc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBidW1waW5nIG1pbm9yIHZlcnNpb25gLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHZlci5qb2luKCcuJyk7XG4gIH1cblxuXG5cbiAgZ2V0IHZlcnNpb25XaXRoTWFqb3JQbHVzT25lQW5kTWlub3JaZXJvQW5kUGF0Y2haZXJvKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmVyID0gdGhpcy52ZXJzaW9uLnNwbGl0KCcuJyk7XG4gICAgaWYgKHZlci5sZW5ndGggPiAwKSB7XG4gICAgICB2ZXJbMF0gPSAocGFyc2VJbnQoXy5maXJzdCh2ZXIpKSArIDEpLnRvU3RyaW5nKCk7XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgdmVyLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICB2ZXJbaW5kZXhdID0gJzAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBIZWxwZXJzLndhcm4oXG4gICAgICAgIGBbbnBtLXByb2plY3RdIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggYnVtcGluZyBtYWpvciB2ZXJzaW9uYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB2ZXIuam9pbignLicpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBNYWpvciBWZXJzaW9uIGZyb20gcGFja2FnZS5qc29uXG4gICAqL1xuICAvLyBAdHMtaWdub3JlXG4gIGdldCBtYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogTWlub3IgVmVyc2lvbiBmcm9tIHBhY2thZ2UuanNvblxuICAgKi9cbiAgLy8gQHRzLWlnbm9yZVxuICBnZXQgbWlub3JWZXJzaW9uKCk6IG51bWJlciB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgYXN5bmMgYnVtcFBhdGNoVmVyc2lvbigpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBnZXQgdmVyc2lvblBhdGhBc051bWJlcigpOiBudW1iZXIge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIG5wbSBkZXBlbmRlbmNpZXMgZnJvbSBwYWNrYWdlLmpzb25cbiAgICovXG4gIGdldCBkZXBlbmRlbmNpZXMoKSB7XG4gICAgcmV0dXJuICh0aGlzLnBhY2thZ2VKU09OID8gdGhpcy5wYWNrYWdlSlNPTi5kZXBlbmRlbmNpZXMgOiB7fSkgfHwge307XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIHBlZXJEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzXG4gICAqL1xuICBnZXQgcGVlckRlcGVuZGVuY2llcygpIHtcbiAgICByZXR1cm4gKHRoaXMucGFja2FnZUpTT04gPyB0aGlzLnBhY2thZ2VKU09OLnBlZXJEZXBlbmRlbmNpZXMgOiB7fSkgfHwge307XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGRldkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXNcbiAgICovXG4gIGdldCBkZXZEZXBlbmRlbmNpZXMoKSB7XG4gICAgcmV0dXJuICh0aGlzLnBhY2thZ2VKU09OID8gdGhpcy5wYWNrYWdlSlNPTi5kZXZEZXBlbmRlbmNpZXMgOiB7fSkgfHwge307XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIHJlc29sdXRpb25zIGRlcGVuZGVuY2llc1xuICAgKi9cbiAgZ2V0IHJlc29sdXRpb25zKCkge1xuICAgIHJldHVybiAodGhpcy5wYWNrYWdlSlNPTiA/IHRoaXMucGFja2FnZUpTT05bJ3Jlc29sdXRpb25zJ10gOiB7fSkgfHwge307XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIG9iamVjdCB3aXRsIGFsbCBkZXBzIGZyb20gY3VycmVudCBwcm9qZWN0IHBhY2thZ2UganNvblxuICAgKi9cbiAgZ2V0IGFsbERlcGVuZGVuY2llcygpOiB7IFtwYWNrYWdlTmFtZTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB0aGlzLmFsbERlcHNGcm9tUGFja2FnZUpzb24odGhpcy5wYWNrYWdlSlNPTik7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgb2JqZWN0IHdpdGwgYWxsIGRlcHMgZnJvbSBwYWNrYWdlIGpzb25cbiAgICovXG4gIGFsbERlcHNGcm9tUGFja2FnZUpzb24ocGFja2FnZUpzb246IFBhY2thZ2VKc29uKSB7XG4gICAgcmV0dXJuIF8ubWVyZ2Uoe1xuICAgICAgLi4uKHBhY2thZ2VKc29uLmRldkRlcGVuZGVuY2llcyB8fCB7fSksXG4gICAgICAuLi4ocGFja2FnZUpzb24ucGVlckRlcGVuZGVuY2llcyB8fCB7fSksXG4gICAgICAuLi4ocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzIHx8IHt9KSxcbiAgICAgIC4uLihwYWNrYWdlSnNvbi5yZXNvbHV0aW9ucyB8fCB7fSksXG4gICAgfSkgYXMgYW55O1xuICB9XG5cblxuXG4gIGxpbmtOb2RlTW9kdWxlc1RvKHByb2o6IFBhcnRpYWw8QmFzZVByb2plY3Q+KSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJlZmVyWWFybk92ZXJOcG0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cblxuXG4gIGFzeW5jIG1ha2VTdXJlTm9kZU1vZHVsZXNJbnN0YWxsZWQob3B0aW9ucz86IHtcbiAgICB1c2VZYXJuPzogYm9vbGVhbjtcbiAgICBmb3JjZT86IGJvb2xlYW47XG4gIH0pIHtcbiAgICBpZiAodGhpcy5lbXB0eU5vZGVNb2R1bGVzKSB7XG4gICAgICB0aGlzLnJlaW5zdGFsTm9kZU1vZHVsZXMob3B0aW9ucyk7XG4gICAgfVxuICB9XG5cblxuXG4gIGRlbGV0ZU5vZGVNb2R1bGVzKCkge1xuICAgIHRoaXMucHJvamVjdC5yZW1vdmUoY29uZmlnLmZvbGRlci5ub2RlX21vZHVsZXMpO1xuICB9XG5cblxuXG4gIGFzeW5jIHJlaW5zdGFsbE5vZGVNb2R1bGVzKGZvcmNlclJlbW92ZU5vZGVNb2R1bGVzID0gZmFsc2UpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICByZWluc3RhbE5vZGVNb2R1bGVzKG9wdGlvbnM/OiB7IHVzZVlhcm4/OiBib29sZWFuOyBmb3JjZT86IGJvb2xlYW4gfSkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBub2RlX21vZHVsZXMgZm9sZGVyIGlzIGVtcHR5XG4gICAqL1xuICBnZXQgZW1wdHlOb2RlTW9kdWxlcygpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBhc3luYyByZXNldFBhY2thZ2VMb2NrSnNvbigpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBzdGFydE5wbVRhc2sodGFza05hbWU6IHN0cmluZywgYWRkaXRpb25hbEFyZ3VtZW50cz86IHN0cmluZyB8IG9iamVjdCkge1xuICAgIGlmIChfLmlzT2JqZWN0KGFkZGl0aW9uYWxBcmd1bWVudHMpKSB7XG4gICAgICBhZGRpdGlvbmFsQXJndW1lbnRzID0gT2JqZWN0LmtleXMoYWRkaXRpb25hbEFyZ3VtZW50cylcbiAgICAgICAgLm1hcChrID0+IGAtLSR7a30gJHthZGRpdGlvbmFsQXJndW1lbnRzW2tdfWApXG4gICAgICAgIC5qb2luKCcgJyk7XG4gICAgfVxuICAgIGNvbnN0IGNvbW1hbmQgPSBgbnBtIHJ1biAke3Rhc2tOYW1lfSAke1xuICAgICAgYWRkaXRpb25hbEFyZ3VtZW50cyA/ICcgLS0gJyArIGFkZGl0aW9uYWxBcmd1bWVudHMgOiAnJ1xuICAgIH1gO1xuICAgIEhlbHBlcnMuaW5mbyhgU3RhcnRpbmcgbnBtIHRhc2s6IFwiJHtjb21tYW5kfVwiYCk7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9qZWN0LnJ1bihjb21tYW5kLCB7XG4gICAgICBvdXRwdXQ6IHRydWUsXG4gICAgICBiaWdnZXJCdWZmZXI6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuXG5cbiAgYXN5bmMgcHJlcGFyZUNvbW1hbmQoXG4gICAgb3B0aW9zbj86IENvcmVNb2RlbHMuTnBtSW5zdGFsbE9wdGlvbnMsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbGV0IHtcbiAgICAgIHBrZyxcbiAgICAgIHJlbW92ZSxcbiAgICAgIHNpbGVudCxcbiAgICAgIHVzZVlhcm4sXG4gICAgICBmb3JjZSxcbiAgICAgIHJlbW92ZVlhcm5PclBhY2thZ2VKc29uTG9jayxcbiAgICAgIGdlbmVyYXRlWWFybk9yUGFja2FnZUpzb25Mb2NrLFxuICAgICAgaWdub3JlT3B0aW9uYWwsXG4gICAgfSA9IG9wdGlvc24gfHwge307XG5cbiAgICBmb3JjZSA9IHRydWU7IC8vIFRPRE8gUVVJQ0tfRklYXG5cbiAgICBsZXQgY29tbWFuZCA9ICcnO1xuICAgIGNvbnN0IGNvbW1vbk9wdGlvbnMgPSBgLS1pZ25vcmUtZW5naW5lc2A7XG5cbiAgICBpZiAodXNlWWFybikge1xuXG4gICAgICBjb25zdCBhcmdzRm9yRmFzdGVySW5zdGFsbCA9IGAke2ZvcmNlID8gJy0tZm9yY2UnIDogJyd9ICR7Y29tbW9uT3B0aW9uc30gYDtcbiAgICAgIGNvbW1hbmQgPVxuICAgICAgICBgJHtcbiAgICAgICAgICByZW1vdmVZYXJuT3JQYWNrYWdlSnNvbkxvY2tcbiAgICAgICAgICAgID8gYHJtICR7Y29uZmlnLmZpbGUueWFybl9sb2NrfSBgICtcbiAgICAgICAgICAgICAgYCYmIHRvdWNoICR7Y29uZmlnLmZpbGUueWFybl9sb2NrfSAmJiBgXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH1gICtcbiAgICAgICAgYHlhcm4gJHtwa2cgPyAocmVtb3ZlID8gJ3JlbW92ZScgOiAnYWRkJykgOiAnaW5zdGFsbCd9ICR7cGtnID8gcGtnLm5hbWUgOiAnJ30gYCArXG4gICAgICAgIGAgJHtnZW5lcmF0ZVlhcm5PclBhY2thZ2VKc29uTG9jayA/ICcnIDogJy0tbm8tbG9ja2ZpbGUnfSBgICtcbiAgICAgICAgYCAke2FyZ3NGb3JGYXN0ZXJJbnN0YWxsfSBgICtcbiAgICAgICAgYCAke3BrZyAmJiBwa2cuaW5zdGFsbFR5cGUgJiYgcGtnLmluc3RhbGxUeXBlID09PSAnLS1zYXZlLWRldicgPyAnLWRldicgOiAnJ30gYDtcblxuICAgIH0gZWxzZSB7XG5cbiAgICAgIGNvbnN0IGFyZ3NGb3JGYXN0ZXJJbnN0YWxsID1cbiAgICAgICAgYCR7Zm9yY2UgPyAnLS1mb3JjZScgOiAnJ30gJHtjb21tb25PcHRpb25zfSAtLW5vLWF1ZGl0IGAgK1xuICAgICAgICBgJHtzaWxlbnQgPyAnLS1zaWxlbnQgLS1uby1wcm9ncmVzcycgOiAnJ30gICBgO1xuXG4gICAgICBjb21tYW5kID1cbiAgICAgICAgYCR7XG4gICAgICAgICAgcmVtb3ZlWWFybk9yUGFja2FnZUpzb25Mb2NrXG4gICAgICAgICAgICA/IGBybSAke2NvbmZpZy5maWxlLnBhY2thZ2VfbG9ja19qc29ufSBgICtcbiAgICAgICAgICAgICAgYCYmIHRvdWNoICR7Y29uZmlnLmZpbGUucGFja2FnZV9sb2NrX2pzb259ICAmJiBgXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH1gICtcbiAgICAgICAgYG5weCAtLW5vZGUtb3B0aW9ucz0tLW1heC1vbGQtc3BhY2Utc2l6ZT04MDAwIG5wbSBgICtcbiAgICAgICAgYCR7cmVtb3ZlID8gJ3VuaW5zdGFsbCcgOiAnaW5zdGFsbCd9ICR7cGtnID8gcGtnLm5hbWUgOiAnJ30gYCArXG4gICAgICAgIGAgJHtnZW5lcmF0ZVlhcm5PclBhY2thZ2VKc29uTG9jayA/ICcnIDogJy0tbm8tcGFja2FnZS1sb2NrJ30gYCArXG4gICAgICAgIGAgJHtpZ25vcmVPcHRpb25hbCA/ICctLWlnbm9yZS1vcHRpb25hbCcgOiAnJ30gYCArXG4gICAgICAgIGAgJHtwa2cgJiYgcGtnLmluc3RhbGxUeXBlID8gcGtnLmluc3RhbGxUeXBlIDogJyd9IGAgK1xuICAgICAgICBgICR7YXJnc0ZvckZhc3Rlckluc3RhbGx9IGA7XG5cbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmQ7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByZWdpc3RyeSB3aXRob3V0IHNwZWNpZmllZCByZWdpc3RyIGlzIGNoZWNraW5nIG5wbSByZWdpc3RyeVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgaXNMb2dnZWRJblRvUmVnaXN0cnkocmVnaXN0cnk/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBQcm9tcHQgdGhlIHVzZXIgdG8gbG9nIGluIHRvIGEgc3BlY2lmaWMgbnBtIHJlZ2lzdHJ5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlZ2lzdHJ5XSAtIE9wdGlvbmFsIG5wbSByZWdpc3RyeSBVUkwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGxvZ2luIHByb2Nlc3MgY29tcGxldGVzLlxuICAgKi9cbiAgYXN5bmMgbG9naW5Ub1JlZ2lzdHJ5KHJlZ2lzdHJ5Pzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGFzeW5jIG1ha2VTdXJlTG9nZ2VkSW5Ub05wbVJlZ2lzdHJ5KHJlZ2lzdHJ5Pzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogdXNlIG1ha2VTdXJlTG9nZ2VkSW5Ub05wbVJlZ2lzdHJ5KClcbiAgICovXG4gIGNoZWNrSWZMb2dnaW5JblRvTnBtKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10bnAtaGVscGVycyBsaWIvYmFzZS9iYXNlLW5wbS1oZWxwZXJzLnRzIl19
@@ -56,6 +56,9 @@ class BaseProject {
56
56
  /* */
57
57
  /* */
58
58
  /* */
59
+ /* */
60
+ /* */
61
+ /* */
59
62
  }
60
63
  get isMonorepo() {
61
64
  return false;
@@ -214,13 +217,13 @@ class BaseProject {
214
217
  .split('/')
215
218
  .slice(-1 * sliceMinus)
216
219
  .join('/');
217
- const result = (shortPath.includes(crossPlatformPath(this.location)) ? '' : '(..)') +
220
+ const result = (shortPath.includes(crossPlatformPath(this.location)) ? '/' : '(..)') +
218
221
  this.checkAndBoldenPath(this.location)
219
222
  .split('/')
220
223
  .slice(-1 * sliceMinus)
221
224
  .join('/') +
222
225
  `(${nameFromPackageJson})`;
223
- this.cache['genericName'] = result;
226
+ this.cache['genericName'] = result.replace(/\/\//g, '/');
224
227
  return this.cache['genericName'];
225
228
  }
226
229
  checkAndBoldenPath(fullPath) {
@@ -375,6 +378,7 @@ class BaseProject {
375
378
  /* */
376
379
  /* */
377
380
  /* */
381
+ /* */
378
382
  return (void 0);
379
383
  }
380
384
  readJson(fileRelativeToProjectPath) {
@@ -642,6 +646,15 @@ class BaseProject {
642
646
  async build(buildOptions) {
643
647
  throw new Error('TODO IMPLEMENT');
644
648
  }
649
+ /**
650
+ * publish project to npm
651
+ */
652
+ async publish(publishOptions) {
653
+ throw new Error('TODO IMPLEMENT');
654
+ }
655
+ async release(releaseOptions) {
656
+ throw new Error('TODO IMPLEMENT');
657
+ }
645
658
  /**
646
659
  * lint porject
647
660
  */
@@ -685,4 +698,4 @@ ${(this.linkedProjects.linkedProjects || [])
685
698
  export { BaseProject };
686
699
  ;
687
700
  ({}); // @--end-of-file-for-module=tnp-helpers lib/base/base-project.ts
688
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3Qtd2Vic3FsL3RucC1oZWxwZXJzL3Byb2plY3RzL3RucC1oZWxwZXJzL3NyYy9saWIvYmFzZS9iYXNlLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUlMLE9BQU8sRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEMsT0FBTyxFQUFrQixXQUFXLEVBQUksT0FBTyxHQUE0RCxNQUFNLFVBQVUsQ0FBQyxDQUFBLEtBQUs7QUFDakksS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBRUwsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFjOUQsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBRXRCLE1BQXNCLFdBQVc7YUFPeEIsUUFBRyxHQUFHLElBQUksbUJBQW1CLENBQWMsV0FBVyxDQUFDLEFBQXBELENBQXFEO2FBT2pELFVBQUssR0FBUSxFQUFFLEFBQVYsQ0FBVztJQUM5QixJQUFXLFdBQVc7UUFDcEIsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFxQkQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxDQUFTO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUdELGFBQWE7SUFDYjtJQUNFOztPQUVHO0lBQ0gsUUFB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QUFDLGlFQUFpRSIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuaW1wb3J0IHsgQ29yZU1vZGVscyB9IGZyb20gJ3RucC1jb3JlL3dlYnNxbCc7XG5pbXBvcnQgeyBDTEkgfSBmcm9tICd0bnAtY2xpL3dlYnNxbCc7XG5pbXBvcnQgeyBwYXRoLCBjcm9zc1BsYXRmb3JtUGF0aCB9IGZyb20gJ3RucC1jb3JlL3dlYnNxbCc7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICd0bnAtY29uZmlnL3dlYnNxbCc7XG5pbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvd2Vic3FsJztcbmltcG9ydCB7ICAgQ29tbWl0RGF0YSwgICBDb3JlUHJvamVjdCwgICBIZWxwZXJzLCAgIExpbmtlZFBvcmplY3RzQ29uZmlnLCAgIExpbmtlZFByb2plY3QsICAgVHlwZU9mQ29tbWl0LCB9IGZyb20gJy4uL2luZGV4JzsvKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuXG5pbXBvcnQgeyBCYXNlUHJvamVjdFJlc29sdmVyIH0gZnJvbSAnLi9iYXNlLXByb2plY3QtcmVzb2x2ZXInO1xuaW1wb3J0IHsgICBCYXNlUHJvamVjdFR5cGUsICAgTGlicmFyaWVzQnVpbGRPcHRpb25zLCAgIExpYnJhcnlCdWlsZENvbW1hbmRPcHRpb25zLCAgIE5nUHJvamVjdCwgfSBmcm9tICcuLi9tb2RlbHMnOy8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuXG5pbXBvcnQgdHlwZSB7IEJhc2VMaWJyYXJ5QnVpbGQgfSBmcm9tICcuL2Jhc2UtbGlicmFyeS1idWlsZCc7XG5pbXBvcnQgeyBCYXNlTnBtSGVscGVycyB9IGZyb20gJy4vYmFzZS1ucG0taGVscGVycyc7XG5pbXBvcnQgeyBCYXNlTGlua2VkUHJvamVjdHMgfSBmcm9tICcuL2Jhc2UtbGlua2VkLXByb2plY3RzJztcbmltcG9ydCB7IEJhc2VHaXQgfSBmcm9tICcuL2Jhc2UtZ2l0JztcbmltcG9ydCB7IEJhc2VWc2NvZGVIZWxwZXJzIH0gZnJvbSAnLi9iYXNlLXZzY29kZSc7XG5cblxuY29uc3QgdGFrZW5Qb3J0cyA9IFtdO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVByb2plY3Q8XG4gIFBST0pDRVQgZXh0ZW5kcyBCYXNlUHJvamVjdCA9IGFueSxcbiAgVFlQRSA9IEJhc2VQcm9qZWN0VHlwZSxcbj4ge1xuXG5cblxuICBzdGF0aWMgaW5zID0gbmV3IEJhc2VQcm9qZWN0UmVzb2x2ZXI8QmFzZVByb2plY3Q+KEJhc2VQcm9qZWN0KTtcblxuXG5cblxuXG4gIHB1YmxpYyBjYWNoZTogYW55ID0ge307XG4gIHB1YmxpYyBzdGF0aWMgY2FjaGU6IGFueSA9IHt9O1xuICBwdWJsaWMgZ2V0IGdsb2JhbENhY2hlKCkge1xuICAgIHJldHVybiBCYXNlUHJvamVjdC5jYWNoZTtcbiAgfVxuICByZWFkb25seSB0eXBlOiBUWVBFIHwgc3RyaW5nID0gJ3Vua25vdyc7XG5cbiAgLyoqXG4gICAqIHJlc29sdmUgaW5zdGFuY2VcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGluczogQmFzZVByb2plY3RSZXNvbHZlcjxQUk9KQ0VUPjtcbiAgLyoqXG4gICAqIFVuaXF1ZSBmcmVlIHBvcnQgZm9yIHByb2plY3QgaW5zdGFuY2VcbiAgICogb25seSBhdmFpbGFibGUgYWZ0ZXIgZXhlY3V0aW5nICp0aGlzLmFzc2lnbkZyZWVQb3J0KCkqXG4gICAqL1xuICByZWFkb25seSBwb3J0OiBzdHJpbmc7XG5cbiAgcHVibGljIGxpYnJhcnlCdWlsZDogQmFzZUxpYnJhcnlCdWlsZDtcbiAgcHVibGljIG5wbUhlbHBlcnM6IEJhc2VOcG1IZWxwZXJzO1xuICBwdWJsaWMgbGlua2VkUHJvamVjdHM6IEJhc2VMaW5rZWRQcm9qZWN0cztcbiAgcHVibGljIHZzQ29kZUhlbHBlcnM6IEJhc2VWc2NvZGVIZWxwZXJzO1xuICBwdWJsaWMgZ2l0OiBCYXNlR2l0O1xuXG5cbiAgcHJpdmF0ZSBfX2xvY2F0aW9uOiBzdHJpbmc7XG4gIGdldCBsb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9fbG9jYXRpb247XG4gIH1cbiAgc2V0IGxvY2F0aW9uKHY6IHN0cmluZykge1xuICAgIHRoaXMuX19sb2NhdGlvbiA9IGNyb3NzUGxhdGZvcm1QYXRoKHYpO1xuICB9XG5cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0cnVjdG9yKFxuICAgIC8qKlxuICAgICAqIGRvZXNuJ3QgbmVlZCB0byBiZSByZWFsIHBhdGggLT4gY2FuIGJlIGxpbmtcbiAgICAgKi9cbiAgICBsb2NhdGlvbjogc3RyaW5nLFxuICApIHtcbiAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG5cblxuICBnZXQgaXNNb25vcmVwbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIG9yZGVyQ29yZVByb2plY3RzKGNvcmVQcm9qZWN0czogQ29yZVByb2plY3RbXSk6IENvcmVQcm9qZWN0W10ge1xuICAgIGNvbnN0IHByb2plY3RNYXAgPSBuZXcgTWFwPENvcmVQcm9qZWN0LCBDb3JlUHJvamVjdFtdPigpO1xuXG5cbiAgICBmb3IgKGNvbnN0IHByb2plY3Qgb2YgY29yZVByb2plY3RzKSB7XG4gICAgICBwcm9qZWN0TWFwLnNldChwcm9qZWN0LCBbXSk7XG4gICAgfVxuXG5cbiAgICBmb3IgKGNvbnN0IHByb2plY3Qgb2YgY29yZVByb2plY3RzKSB7XG4gICAgICBpZiAoIXByb2plY3RNYXAuaGFzKHByb2plY3QuZXh0ZW5kcykpIHtcbiAgICAgICAgcHJvamVjdE1hcC5zZXQocHJvamVjdC5leHRlbmRzLCBbXSk7XG4gICAgICB9XG4gICAgICBwcm9qZWN0TWFwLmdldChwcm9qZWN0LmV4dGVuZHMpIS5wdXNoKHByb2plY3QpO1xuICAgIH1cblxuICAgIGNvbnN0IG9yZGVyZWRQcm9qZWN0czogQ29yZVByb2plY3RbXSA9IFtdO1xuICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PENvcmVQcm9qZWN0PigpO1xuXG4gICAgY29uc3QgdmlzaXQgPSAocHJvamVjdDogQ29yZVByb2plY3QpID0+IHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMocHJvamVjdCkpIHtcbiAgICAgICAgdmlzaXRlZC5hZGQocHJvamVjdCk7XG4gICAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHByb2plY3RNYXAuZ2V0KHByb2plY3QpO1xuICAgICAgICBpZiAoZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBkZXAgb2YgZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICB2aXNpdChkZXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvcmRlcmVkUHJvamVjdHMucHVzaChwcm9qZWN0KTtcbiAgICAgIH1cbiAgICB9O1xuXG5cbiAgICBmb3IgKGNvbnN0IHByb2plY3Qgb2YgY29yZVByb2plY3RzKSB7XG4gICAgICB2aXNpdChwcm9qZWN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3JkZXJlZFByb2plY3RzLnJldmVyc2UoKTtcbiAgfVxuXG5cblxuXG4gIGdldCBjb3JlKCk6IENvcmVQcm9qZWN0IHtcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5jYWNoZVsnY29yZSddKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVbJ2NvcmUnXTtcbiAgICB9XG5cbiAgICBsZXQgY29yZVByb2plY3RzID0gQ29yZVByb2plY3QuY29yZVByb2plY3RzLmZpbHRlcihwID0+XG4gICAgICBwLnJlY29nbml6ZWRGbih0aGlzIGFzIGFueSksXG4gICAgKTtcbiAgICBjb3JlUHJvamVjdHMgPSB0aGlzLm9yZGVyQ29yZVByb2plY3RzKGNvcmVQcm9qZWN0cyk7XG5cblxuICAgIHRoaXMuY2FjaGVbJ2NvcmUnXSA9IF8uZmlyc3QoY29yZVByb2plY3RzKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVsnY29yZSddO1xuICB9XG5cblxuXG4gIGdldCBsaW5rZWRQcm9qZWN0c0V4aXN0ZWQoKTogUFJPSkNFVFtdIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHB1YmxpYyBzZXRUeXBlKHR5cGU6IFRZUEUpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG5cblxuICBwdWJsaWMgdHlwZUlzKC4uLnR5cGVzOiBUWVBFW10pIHtcbiAgICByZXR1cm4gdGhpcy50eXBlICYmIHR5cGVzLmluY2x1ZGVzKHRoaXMudHlwZSBhcyBhbnkpO1xuICB9XG5cblxuXG4gIHB1YmxpYyB0eXBlSXNOb3QoLi4udHlwZXM6IFRZUEVbXSkge1xuICAgIHJldHVybiAhdGhpcy50eXBlSXMoLi4udHlwZXMpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBwcm9qZWN0IGZvbGRlciBiYXNlbmFtZVxuICAgKi9cbiAgZ2V0IGJhc2VuYW1lKCk6IHN0cmluZyB7XG5cbiAgICByZXR1cm4gcGF0aC5iYXNlbmFtZSh0aGlzLmxvY2F0aW9uKTtcblxuICB9XG5cblxuXG4gIC8qKlxuICAgKiBuYW1lIGZyb20gcGFja2FnZS5qc29uXG4gICAqL1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5wbUhlbHBlcnM/Lm5hbWUgfHwgdGhpcy5uYW1lRnJvbVBvbVhNTDtcbiAgfVxuXG4gIGdldCBuYW1lRnJvbVBvbVhNTCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFydGlmYWN0SWRQYXR0ZXJuID0gLzxhcnRpZmFjdElkPihbXjxdKyk8XFwvYXJ0aWZhY3RJZD4vO1xuICAgIGNvbnN0IG1hdGNoID0gKHRoaXMucmVhZEZpbGUoJ3BvbS54bWwnKSB8fCAnJykubWF0Y2goYXJ0aWZhY3RJZFBhdHRlcm4pO1xuICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkge1xuICAgICAgcmV0dXJuIG1hdGNoWzFdO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGdldEZvbGRlcnNGb3JQb3NzaWJsZVByb2plY3RDaGlsZHJlbigpOiBzdHJpbmdbXSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCBnZXRBbGxDaGlsZHJlbigpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGFsaWFzIHRvIGdldEFsbENoaWxkcmVuXG4gICAqL1xuICBnZXQgY2hpbGRyZW4oKTogUFJPSkNFVFtdIHtcblxuICAgIHJldHVybiB0aGlzLmdldEFsbENoaWxkcmVuKCk7XG5cbiAgfVxuXG5cblxuICBnZXRDaGlsZEJ5KG5hbWVPckJhc2VuYW1lOiBzdHJpbmcsIGVycm9ycyA9IHRydWUpOiBQUk9KQ0VUIHtcblxuICAgIGNvbnN0IGMgPSB0aGlzLmNoaWxkcmVuLmZpbmQoXG4gICAgICBjID0+IGMubmFtZSA9PT0gbmFtZU9yQmFzZW5hbWUgfHwgYy5iYXNlbmFtZSA9PT0gbmFtZU9yQmFzZW5hbWUsXG4gICAgKTtcbiAgICBpZiAoZXJyb3JzICYmICFjKSB7XG4gICAgICBIZWxwZXJzLndhcm4oXG4gICAgICAgIGBQcm9qZWN0IGRvZXNudCBjb250YWluIGNoaWxkIHdpdGggbmFtZSBvciBiYXNlbmFtZTogJHtuYW1lT3JCYXNlbmFtZX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGM7XG5cbiAgfVxuXG5cblxuICBnZXQgcGFyZW50KCk6IFBST0pDRVQge1xuXG4gICAgaWYgKCFfLmlzU3RyaW5nKHRoaXMubG9jYXRpb24pIHx8IHRoaXMubG9jYXRpb24udHJpbSgpID09PSAnJykge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW5zLkZyb20ocGF0aC5qb2luKHRoaXMubG9jYXRpb24sICcuLicpKTtcblxuICB9XG5cblxuXG4gIGdldCBncmFuZHBhKCk6IFBST0pDRVQge1xuXG4gICAgaWYgKCFfLmlzU3RyaW5nKHRoaXMubG9jYXRpb24pIHx8IHRoaXMubG9jYXRpb24udHJpbSgpID09PSAnJykge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgY29uc3QgZ3JhbmRwYSA9IHRoaXMuaW5zLkZyb20ocGF0aC5qb2luKHRoaXMubG9jYXRpb24sICcuLicsICcuLicpKTtcbiAgICByZXR1cm4gZ3JhbmRwYTtcblxuICB9XG5cblxuXG4gIGdldCBnZW5lcmljTmFtZSgpIHtcblxuICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLmNhY2hlWydnZW5lcmljTmFtZSddKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVbJ2dlbmVyaWNOYW1lJ107XG4gICAgfVxuICAgIGxldCBuYW1lRnJvbVBhY2thZ2VKc29uID0gdGhpcy5uYW1lO1xuLyogKi9cbi8qICovXG4gIFxuXG4gICAgY29uc3Qgc2xpY2VNaW51cyA9IDg7XG4gICAgY29uc3Qgc2hvcnRQYXRoID1cbiAgICAgICcvJyArXG4gICAgICBjcm9zc1BsYXRmb3JtUGF0aCh0aGlzLmxvY2F0aW9uKVxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuc2xpY2UoLTEgKiBzbGljZU1pbnVzKVxuICAgICAgICAuam9pbignLycpO1xuXG4gICAgY29uc3QgcmVzdWx0ID1cbiAgICAgIChzaG9ydFBhdGguaW5jbHVkZXMoY3Jvc3NQbGF0Zm9ybVBhdGgodGhpcy5sb2NhdGlvbikpID8gJycgOiAnKC4uKScpICtcbiAgICAgIHRoaXMuY2hlY2tBbmRCb2xkZW5QYXRoKHRoaXMubG9jYXRpb24pXG4gICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgIC5zbGljZSgtMSAqIHNsaWNlTWludXMpXG4gICAgICAgIC5qb2luKCcvJykgK1xuICAgICAgYCgke25hbWVGcm9tUGFja2FnZUpzb259KWA7XG5cbiAgICB0aGlzLmNhY2hlWydnZW5lcmljTmFtZSddID0gcmVzdWx0O1xuICAgIHJldHVybiB0aGlzLmNhY2hlWydnZW5lcmljTmFtZSddO1xuXG4gIH1cblxuXG5cbiAgcHJpdmF0ZSBjaGVja0FuZEJvbGRlblBhdGgoZnVsbFBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnRzID0gZnVsbFBhdGguc3BsaXQoJy8nKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnRzLm1hcCgocGFydCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBhdGhUb2NoZWNrID0gcGFydHMuc2xpY2UoMCwgaW5kZXggKyAxKS5qb2luKCcvJyk7XG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0LmpvaW4oJy8nKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogc2FtZSBoYXMgcHJvamVjdC5oYXNGaWxlKCk7XG4gICAqL1xuICBwYXRoRXhpc3RzKHJlbGF0aXZlUGF0aDogc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNGaWxlKHJlbGF0aXZlUGF0aCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIHNhbWUgYXMgcHJvamVjdC5wYXRoRXhpc3RzKCk7XG4gICAqL1xuICBoYXNGaWxlKHJlbGF0aXZlUGF0aDogc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuICBoYXNGb2xkZXIocmVsYXRpdmVQYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBzYW1lIGFzIHByb2plY3QucGF0aGhhc0ZpbGVFeGlzdHMoKTtcbiAgICogYnV0IHdpdGggcGF0aC5yZXNvbHZlXG4gICAqL1xuICBjb250YWluc0ZpbGUoZmlsZVJlbGF0aXZlVG9Qcm9qZWN0UGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUoXG4gICAgICBwYXRoLmpvaW4odGhpcy5sb2NhdGlvbiwgZmlsZVJlbGF0aXZlVG9Qcm9qZWN0UGF0aCksXG4gICAgKTtcbiAgICByZXR1cm4gSGVscGVycy5leGlzdHMoZnVsbFBhdGgpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBhYnNvbHV0ZSBwYXRoOlxuICAgKiBjb25jYXRlZCBwcm9qZWN0IGxvY2F0aW9uIHdpdGggcmVsYXRpdmUgcGF0aFxuICAgKi9cbiAgcGF0aEZvcihyZWxhdGl2ZVBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgd3JpdGVKc29uKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBqc29uOiBvYmplY3QpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXMgZXhlY3V0ZSBpbnN0ZWFkXG4gICAqIHVzZSBvdXRwdXQgZnJvbSBvciBtb3JlIHByZWNpZXNlIGNyYWZ0ZWQgYXBpXG4gICAqL1xuICBydW4oY29tbWFuZDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDb3JlTW9kZWxzLlJ1bk9wdGlvbnMsICdjd2QnPikge1xuICAgIGxldCBvcHQ6IENvcmVNb2RlbHMuUnVuT3B0aW9ucztcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgICByZXR1cm4gSGVscGVycy5ydW4oY29tbWFuZCwgb3B0KTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogc2FtZSBhcyBydW4gYnV0IGFzeW5jXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXhlY3V0ZShcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IENvcmVNb2RlbHMuRXhlY3V0ZU9wdGlvbnMgJiB7IHNob3dDb21tYW5kPzogYm9vbGVhbiB9LFxuICApOiBQcm9taXNlPGFueT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIHRyeSBydW4gYnV0IGNvbnRpbnVlIHdoZW4gaXQgZmFpbHNcbiAgICogQHBhcmFtIGNvbW1hbmRcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHRyeVJ1blN5bmMoXG4gICAgY29tbWFuZDogc3RyaW5nLFxuLyogKi9cbi8qICovXG4gIFxuICApOiB2b2lkIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgb3V0cHV0RnJvbShcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4vKiAqL1xuLyogKi9cbiAgXG4gICkge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHJlbW92ZUZpbGUoZmlsZVJlbGF0aXZlVG9Qcm9qZWN0UGF0aDogc3RyaW5nKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcmVhZEZpbGUoZmlsZVJlbGF0aXZlVG9Qcm9qZWN0UGF0aDogc3RyaW5nKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcmVhZEpzb248VCA9IHt9PihmaWxlUmVsYXRpdmVUb1Byb2plY3RQYXRoOiBzdHJpbmcpOiBUIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICByZW1vdmUocmVsYXRpdmVQYXRoOiBzdHJpbmcsIGV4YWN0UGF0aCA9IHRydWUpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgcmVtb3ZlRm9sZGVyQnlSZWxhdGl2ZVBhdGgocmVsYXRpdmVQYXRoVG9Gb2xkZXI6IHN0cmluZykge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICB9XG5cblxuXG4gIGFzeW5jIGFzc2lnbkZyZWVQb3J0KFxuICAgIHN0YXJ0RnJvbTogbnVtYmVyID0gNDIwMCxcbiAgICBob3dNYW55RnJlZVBvcnRzQWZ0ZXJUaGF0UG9ydDogbnVtYmVyID0gMCxcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcmVtb3ZlSXRzZWxmKCkge1xuLyogKi9cbi8qICovXG4gIFxuICB9XG5cblxuXG4gIC8qKlxuICAgKiBQdXJwb3NlOiBub3QgaW5pdGlhbGl6aW5nIGFsbCBjbGFzc2VzIGF0IHRoZSBiZWdpbm5pbmdcbiAgICogT25seSBmb3IgQmFzZUZlYXR1cmVGb3JQcm9qZWN0IGNsYXNzXG4gICAqL1xuICBkZWZpbmVQcm9wZXJ0eTxQUk9KRUNUPihcbiAgICB2YXJpYWJsZU5hbWU6IGtleW9mIFBST0pFQ1QsXG4gICAgY2xhc3NGbjogRnVuY3Rpb24sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGN1c3RvbUluc3RhbmNlUmV0dXJuPzogKCkgPT4gb2JqZWN0O1xuICAgIH0sXG4gICkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGZzLmNvcHkgb3B0aW9uIGZpbHRlciBmdW5jdGlvbiBmb3IgY29weWluZyBvbmx5IHNlbGVjdGVkIGZvbGRlcnMgZnJvbSBwcm9qZWN0XG4gICAqL1xuICBmaWx0ZXJPbmx5Q29weShiYXNlUGF0aEZvbGRlcnNPbmx5VG9JbmNsdWRlOiBzdHJpbmdbXSkge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBmcy5jb3B5IG9wdGlvbiBmaWx0ZXIgZnVuY3Rpb24gZm9yIGNvcHlpbmcgb25seSBub3Qgc2VsZWN0ZWQgZm9sZGVycyBmcm9tIHByb2plY3RcbiAgICovXG4gIGZpbHRlckRvbnRDb3B5KGJhc2VQYXRoRm9sZGVyc1Rvc1NraXA6IHN0cmluZ1tdKSB7XG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGdlbmVyYWwgZGVmYXVsdCBkZXZlbG9wbWVudCBicmFuY2ggZm9yIGFsbCBraW5kcyBvZiBwcm9qZWN0c1xuICAgKi9cbiAgZ2V0RGVmYXVsdERldmVsb3BtZW50QnJhbmNoKCkge1xuICAgIHJldHVybiAnZGV2ZWxvcCc7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIG1haW4vZGVmYXVsdCBoYXJkY29kZWQgYnJhbmNoZXNcbiAgICovXG4gIGdldE1haW5CcmFuY2hlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnbWFzdGVyJywgJ2RldmVsb3AnLCAnc3RhZ2UnLCAncHJvZCcsICd0ZXN0J107XG4gIH1cblxuXG5cbiAgaXNVbnNpbmdBY3Rpb25Db21taXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cblxuXG4gIGFzeW5jIHJlc2V0UHJvY2VzcyhvdmVycmlkZUJyYW5jaD86IHN0cmluZywgcmVjcnVzaXZlID0gZmFsc2UpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG5cblxuICBsaW5rVG8oZGVzdFBhY2thZ2VMb2NhdGlvbjogc3RyaW5nKSB7XG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgc2V0VmFsdWVUb0pTT04oXG4gICAgcmVsYXRpdmVQYXRoOiBzdHJpbmcsXG4gICAgbG9kYXNoR2V0UGF0aDogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnksXG4gICk6IHZvaWQge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGdldFZhbHVlRnJvbUpTT04oXG4gICAgcmVsYXRpdmVQYXRoOiBzdHJpbmcsXG4gICAgbG9kYXNoR2V0UGF0aDogc3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogYW55ID0gdm9pZCAwLFxuICApOiBhbnkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBnZXRWYWx1ZUZyb21KU09OQyhcbiAgICByZWxhdGl2ZVBhdGg6IHN0cmluZyxcbiAgICBsb2Rhc2hHZXRQYXRoOiBzdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiBhbnkgPSB2b2lkIDAsXG4gICk6IGFueSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG5cbiAgd3JpdGVGaWxlKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpIHtcbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG5cblxuICBwdWJsaWMgcnVuQ29tbWFuZEdldFN0cmluZyh0aGlzOiBCYXNlUHJvamVjdCwgY29tbWFuZDogc3RyaW5nKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICB0b1N0cmluZyA9ICgpID0+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfT0+JHt0aGlzLmxvY2F0aW9ufWA7XG4gIH07XG5cblxuXG4gIGdldCBwYXJlbnRzTmFtZXMoKSB7XG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG4gIG9wZW5Mb2NhdGlvbihyZWxhdGl2ZUZvbGRlclBhdGg6IHN0cmluZykge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuICBwcml2YXRlIGZpbmRQYXJlbnRzTmFtZXMoXG4gICAgcHJvamVjdD86IFBST0pDRVQsXG4gICAgcGFyZW50PzogUFJPSkNFVCxcbiAgICByZXN1bHQgPSBbXSxcbiAgKTogc3RyaW5nW10ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHRyeUtpbGxBbGxFbGVjdHJvbkluc3RhbmNlcygpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBpbml0IHByb2plY3QgZmlsZXMgc3RydWN0dXJlIGFuZCBkZXBlZGVuY2llc1xuICAgKi9cbiAgYXN5bmMgaW5pdChpbml0T3B0aW9ucz86IGFueSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVE9ETyBJTVBMRU1FTlQnKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogZ2xvYmFsbHkgbGluayBucG0gYXMgcGFja2FnZVxuICAgKi9cbiAgYXN5bmMgbGluaygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RPRE8gSU1QTEVNRU5UJyk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGluaXQgcHJvamVjdCBmaWxlcyBzdHJ1Y3R1cmUgd2l0aG91dCBkZXBlZGVuY2llc1xuICAgKi9cbiAgYXN5bmMgc3RydWN0KGluaXRPcHRpb25zPzogYW55KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUT0RPIElNUExFTUVOVCcpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBpbml0IGFuZCBidWlsZCgpIHByb2plY3RcbiAgICovXG4gIGFzeW5jIGJ1aWxkKGJ1aWxkT3B0aW9ucz86IGFueSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVE9ETyBJTVBMRU1FTlQnKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogbGludCBwb3JqZWN0XG4gICAqL1xuICBhc3luYyBsaW50KGxpbnRPcHRpb25zPzogYW55KSB7XG4gICAgSGVscGVycy5pbmZvKGBcblxuXG4gICAgQ09NTUlUIExJTlQgTk9UIElNUExFTUVOVEVEXG5cblxuICAgIGApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBnZXQgaW5mbyBhYm91dCBwb3JqZWN0XG4gICAqL1xuICBhc3luYyBpbmZvKCkge1xuICAgIGNvbnN0IHByb2ogPSB0aGlzO1xuICAgIEhlbHBlcnMuaW5mbyhcbiAgICAgIGBcblxuICBuYW1lOiAke3Byb2o/Lm5hbWV9XG4gIHR5cGU6ICR7cHJvaj8udHlwZX1cbiAgY29yZSBwcm9qZWN0IG5hbWU6ICcke3Byb2o/LmNvcmU/Lm5hbWV9J1xuICBlbWJlZGRlZCBwcm9qZWN0OiAke3Byb2o/LmxpbmtlZFByb2plY3RzLmVtYmVkZGVkUHJvamVjdD8uZ2VuZXJpY05hbWUgfHwgJzwgbm9uZSA+J31cbiAgY2hpbGRyZW4gKCR7cHJvaj8uY2hpbGRyZW4ubGVuZ3RofSk6ICR7IXByb2ogfHwgIXByb2ouY2hpbGRyZW4ubGVuZ3RoID8gJzwgbm9uZSA+JyA6ICcnfVxuJHtwcm9qPy5jaGlsZHJlbi5tYXAoYyA9PiAnKycgKyBjLmdlbmVyaWNOYW1lKS5qb2luKCdcXG4nKX1cbmAgK1xuICAgICAgICBgXG5saW5rZWQgcG9yamVjdCBwcmVmaXg6IFwiJHt0aGlzLmxpbmtlZFByb2plY3RzLmxpbmtlZFByb2plY3RzUHJlZml4fVwiXG5cbmxpbmtlZCBwcm9qZWN0cyBmcm9tIGpzb24gKCR7dGhpcy5saW5rZWRQcm9qZWN0cy5saW5rZWRQcm9qZWN0cz8ubGVuZ3RoIHx8IDB9KTpcbiR7KHRoaXMubGlua2VkUHJvamVjdHMubGlua2VkUHJvamVjdHMgfHwgW10pXG4gIC5tYXAoYyA9PiB7XG4gICAgY29uc3QgcHJvaiA9IHRoaXMuaW5zLkZyb20odGhpcy5wYXRoRm9yKGMucmVsYXRpdmVDbG9uZVBhdGgpKTtcbiAgICByZXR1cm4gJy0gJyArIHByb2ogPyBwcm9qLmdlbmVyaWNOYW1lIDogYy5yZWxhdGl2ZUNsb25lUGF0aDtcbiAgfSlcbiAgLmpvaW4oJ1xcbicpfVxuXG4gIGAsXG4gICAgKTtcblxuXG5cbiAgfVxuXG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10bnAtaGVscGVycyBsaWIvYmFzZS9iYXNlLXByb2plY3QudHMiXX0=
701
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3Qtd2Vic3FsL3RucC1oZWxwZXJzL3Byb2plY3RzL3RucC1oZWxwZXJzL3NyYy9saWIvYmFzZS9iYXNlLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUlMLE9BQU8sRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEMsT0FBTyxFQUFrQixXQUFXLEVBQUksT0FBTyxHQUE0RCxNQUFNLFVBQVUsQ0FBQyxDQUFBLEtBQUs7QUFDakksS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBRUwsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFlOUQsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBRXRCLE1BQXNCLFdBQVc7YUFPeEIsUUFBRyxHQUFHLElBQUksbUJBQW1CLENBQWMsV0FBVyxDQUFDLEFBQXBELENBQXFEO2FBT2pELFVBQUssR0FBUSxFQUFFLEFBQVYsQ0FBVztJQUM5QixJQUFXLFdBQVc7UUFDcEIsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFzQkQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxDQUFTO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUdELGFBQWE7SUFDYjtJQUNFOztPQUVHO0lBQ0gsUUFB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QUFPLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztnQkFDOUQsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7WUFDOUQsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxJQUFJLENBQUM7O0dBRVYsQ0FDRSxDQUFDO0lBSUosQ0FBQzs7U0F0OUJtQixXQUFXO0FBMDlCaEMsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxpRUFBaUUiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbmltcG9ydCB7IENvcmVNb2RlbHMgfSBmcm9tICd0bnAtY29yZS93ZWJzcWwnO1xuaW1wb3J0IHsgQ0xJIH0gZnJvbSAndG5wLWNsaS93ZWJzcWwnO1xuaW1wb3J0IHsgcGF0aCwgY3Jvc3NQbGF0Zm9ybVBhdGggfSBmcm9tICd0bnAtY29yZS93ZWJzcWwnO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAndG5wLWNvbmZpZy93ZWJzcWwnO1xuaW1wb3J0IHsgXyB9IGZyb20gJ3RucC1jb3JlL3dlYnNxbCc7XG5pbXBvcnQgeyAgIENvbW1pdERhdGEsICAgQ29yZVByb2plY3QsICAgSGVscGVycywgICBMaW5rZWRQb3JqZWN0c0NvbmZpZywgICBMaW5rZWRQcm9qZWN0LCAgIFR5cGVPZkNvbW1pdCwgfSBmcm9tICcuLi9pbmRleCc7LyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cblxuaW1wb3J0IHsgQmFzZVByb2plY3RSZXNvbHZlciB9IGZyb20gJy4vYmFzZS1wcm9qZWN0LXJlc29sdmVyJztcbmltcG9ydCB7ICAgQmFzZVByb2plY3RUeXBlLCAgIExpYnJhcmllc0J1aWxkT3B0aW9ucywgICBMaWJyYXJ5QnVpbGRDb21tYW5kT3B0aW9ucywgICBOZ1Byb2plY3QsIH0gZnJvbSAnLi4vbW9kZWxzJzsvKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cblxuaW1wb3J0IHR5cGUgeyBCYXNlTGlicmFyeUJ1aWxkIH0gZnJvbSAnLi9iYXNlLWxpYnJhcnktYnVpbGQnO1xuaW1wb3J0IHsgQmFzZU5wbUhlbHBlcnMgfSBmcm9tICcuL2Jhc2UtbnBtLWhlbHBlcnMnO1xuaW1wb3J0IHsgQmFzZUxpbmtlZFByb2plY3RzIH0gZnJvbSAnLi9iYXNlLWxpbmtlZC1wcm9qZWN0cyc7XG5pbXBvcnQgeyBCYXNlR2l0IH0gZnJvbSAnLi9iYXNlLWdpdCc7XG5pbXBvcnQgeyBCYXNlVnNjb2RlSGVscGVycyB9IGZyb20gJy4vYmFzZS12c2NvZGUnO1xuaW1wb3J0IHsgQmFzZVJlbGVhc2VQcm9jZXNzIH0gZnJvbSAnLi9iYXNlLXJlbGVhc2UtcHJvY2Vzcyc7XG5cblxuY29uc3QgdGFrZW5Qb3J0cyA9IFtdO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVByb2plY3Q8XG4gIFBST0pDRVQgZXh0ZW5kcyBCYXNlUHJvamVjdCA9IGFueSxcbiAgVFlQRSA9IEJhc2VQcm9qZWN0VHlwZSxcbj4ge1xuXG5cblxuICBzdGF0aWMgaW5zID0gbmV3IEJhc2VQcm9qZWN0UmVzb2x2ZXI8QmFzZVByb2plY3Q+KEJhc2VQcm9qZWN0KTtcblxuXG5cblxuXG4gIHB1YmxpYyBjYWNoZTogYW55ID0ge307XG4gIHB1YmxpYyBzdGF0aWMgY2FjaGU6IGFueSA9IHt9O1xuICBwdWJsaWMgZ2V0IGdsb2JhbENhY2hlKCkge1xuICAgIHJldHVybiBCYXNlUHJvamVjdC5jYWNoZTtcbiAgfVxuICByZWFkb25seSB0eXBlOiBUWVBFIHwgc3RyaW5nID0gJ3Vua25vdyc7XG5cbiAgLyoqXG4gICAqIHJlc29sdmUgaW5zdGFuY2VcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGluczogQmFzZVByb2plY3RSZXNvbHZlcjxQUk9KQ0VUPjtcbiAgLyoqXG4gICAqIFVuaXF1ZSBmcmVlIHBvcnQgZm9yIHByb2plY3QgaW5zdGFuY2VcbiAgICogb25seSBhdmFpbGFibGUgYWZ0ZXIgZXhlY3V0aW5nICp0aGlzLmFzc2lnbkZyZWVQb3J0KCkqXG4gICAqL1xuICByZWFkb25seSBwb3J0OiBzdHJpbmc7XG5cbiAgcHVibGljIGxpYnJhcnlCdWlsZDogQmFzZUxpYnJhcnlCdWlsZDtcbiAgcHVibGljIG5wbUhlbHBlcnM6IEJhc2VOcG1IZWxwZXJzO1xuICBwdWJsaWMgbGlua2VkUHJvamVjdHM6IEJhc2VMaW5rZWRQcm9qZWN0cztcbiAgcHVibGljIHZzQ29kZUhlbHBlcnM6IEJhc2VWc2NvZGVIZWxwZXJzO1xuICBwdWJsaWMgcmVsZWFzZVByb2Nlc3M6IEJhc2VSZWxlYXNlUHJvY2VzcztcbiAgcHVibGljIGdpdDogQmFzZUdpdDtcblxuXG4gIHByaXZhdGUgX19sb2NhdGlvbjogc3RyaW5nO1xuICBnZXQgbG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fX2xvY2F0aW9uO1xuICB9XG4gIHNldCBsb2NhdGlvbih2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9fbG9jYXRpb24gPSBjcm9zc1BsYXRmb3JtUGF0aCh2KTtcbiAgfVxuXG5cbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiBkb2Vzbid0IG5lZWQgdG8gYmUgcmVhbCBwYXRoIC0+IGNhbiBiZSBsaW5rXG4gICAgICovXG4gICAgbG9jYXRpb246IHN0cmluZyxcbiAgKSB7XG4gICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uO1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgZ2V0IGlzTW9ub3JlcG8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCBvcmRlckNvcmVQcm9qZWN0cyhjb3JlUHJvamVjdHM6IENvcmVQcm9qZWN0W10pOiBDb3JlUHJvamVjdFtdIHtcbiAgICBjb25zdCBwcm9qZWN0TWFwID0gbmV3IE1hcDxDb3JlUHJvamVjdCwgQ29yZVByb2plY3RbXT4oKTtcblxuXG4gICAgZm9yIChjb25zdCBwcm9qZWN0IG9mIGNvcmVQcm9qZWN0cykge1xuICAgICAgcHJvamVjdE1hcC5zZXQocHJvamVjdCwgW10pO1xuICAgIH1cblxuXG4gICAgZm9yIChjb25zdCBwcm9qZWN0IG9mIGNvcmVQcm9qZWN0cykge1xuICAgICAgaWYgKCFwcm9qZWN0TWFwLmhhcyhwcm9qZWN0LmV4dGVuZHMpKSB7XG4gICAgICAgIHByb2plY3RNYXAuc2V0KHByb2plY3QuZXh0ZW5kcywgW10pO1xuICAgICAgfVxuICAgICAgcHJvamVjdE1hcC5nZXQocHJvamVjdC5leHRlbmRzKSEucHVzaChwcm9qZWN0KTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmRlcmVkUHJvamVjdHM6IENvcmVQcm9qZWN0W10gPSBbXTtcbiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxDb3JlUHJvamVjdD4oKTtcblxuICAgIGNvbnN0IHZpc2l0ID0gKHByb2plY3Q6IENvcmVQcm9qZWN0KSA9PiB7XG4gICAgICBpZiAoIXZpc2l0ZWQuaGFzKHByb2plY3QpKSB7XG4gICAgICAgIHZpc2l0ZWQuYWRkKHByb2plY3QpO1xuICAgICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBwcm9qZWN0TWFwLmdldChwcm9qZWN0KTtcbiAgICAgICAgaWYgKGRlcGVuZGVuY2llcykge1xuICAgICAgICAgIGZvciAoY29uc3QgZGVwIG9mIGRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgdmlzaXQoZGVwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb3JkZXJlZFByb2plY3RzLnB1c2gocHJvamVjdCk7XG4gICAgICB9XG4gICAgfTtcblxuXG4gICAgZm9yIChjb25zdCBwcm9qZWN0IG9mIGNvcmVQcm9qZWN0cykge1xuICAgICAgdmlzaXQocHJvamVjdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9yZGVyZWRQcm9qZWN0cy5yZXZlcnNlKCk7XG4gIH1cblxuXG5cblxuICBnZXQgY29yZSgpOiBDb3JlUHJvamVjdCB7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuY2FjaGVbJ2NvcmUnXSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlWydjb3JlJ107XG4gICAgfVxuXG4gICAgbGV0IGNvcmVQcm9qZWN0cyA9IENvcmVQcm9qZWN0LmNvcmVQcm9qZWN0cy5maWx0ZXIocCA9PlxuICAgICAgcC5yZWNvZ25pemVkRm4odGhpcyBhcyBhbnkpLFxuICAgICk7XG4gICAgY29yZVByb2plY3RzID0gdGhpcy5vcmRlckNvcmVQcm9qZWN0cyhjb3JlUHJvamVjdHMpO1xuXG5cbiAgICB0aGlzLmNhY2hlWydjb3JlJ10gPSBfLmZpcnN0KGNvcmVQcm9qZWN0cyk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVbJ2NvcmUnXTtcbiAgfVxuXG5cblxuICBnZXQgbGlua2VkUHJvamVjdHNFeGlzdGVkKCk6IFBST0pDRVRbXSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBwdWJsaWMgc2V0VHlwZSh0eXBlOiBUWVBFKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gIH1cblxuXG5cbiAgcHVibGljIHR5cGVJcyguLi50eXBlczogVFlQRVtdKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSAmJiB0eXBlcy5pbmNsdWRlcyh0aGlzLnR5cGUgYXMgYW55KTtcbiAgfVxuXG5cblxuICBwdWJsaWMgdHlwZUlzTm90KC4uLnR5cGVzOiBUWVBFW10pIHtcbiAgICByZXR1cm4gIXRoaXMudHlwZUlzKC4uLnR5cGVzKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogcHJvamVjdCBmb2xkZXIgYmFzZW5hbWVcbiAgICovXG4gIGdldCBiYXNlbmFtZSgpOiBzdHJpbmcge1xuXG4gICAgcmV0dXJuIHBhdGguYmFzZW5hbWUodGhpcy5sb2NhdGlvbik7XG5cbiAgfVxuXG5cblxuICAvKipcbiAgICogbmFtZSBmcm9tIHBhY2thZ2UuanNvblxuICAgKi9cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ucG1IZWxwZXJzPy5uYW1lIHx8IHRoaXMubmFtZUZyb21Qb21YTUw7XG4gIH1cblxuICBnZXQgbmFtZUZyb21Qb21YTUwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBhcnRpZmFjdElkUGF0dGVybiA9IC88YXJ0aWZhY3RJZD4oW148XSspPFxcL2FydGlmYWN0SWQ+LztcbiAgICBjb25zdCBtYXRjaCA9ICh0aGlzLnJlYWRGaWxlKCdwb20ueG1sJykgfHwgJycpLm1hdGNoKGFydGlmYWN0SWRQYXR0ZXJuKTtcbiAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMV0pIHtcbiAgICAgIHJldHVybiBtYXRjaFsxXTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCBnZXRGb2xkZXJzRm9yUG9zc2libGVQcm9qZWN0Q2hpbGRyZW4oKTogc3RyaW5nW10ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBwcm90ZWN0ZWQgZ2V0QWxsQ2hpbGRyZW4oKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBhbGlhcyB0byBnZXRBbGxDaGlsZHJlblxuICAgKi9cbiAgZ2V0IGNoaWxkcmVuKCk6IFBST0pDRVRbXSB7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRBbGxDaGlsZHJlbigpO1xuXG4gIH1cblxuXG5cbiAgZ2V0Q2hpbGRCeShuYW1lT3JCYXNlbmFtZTogc3RyaW5nLCBlcnJvcnMgPSB0cnVlKTogUFJPSkNFVCB7XG5cbiAgICBjb25zdCBjID0gdGhpcy5jaGlsZHJlbi5maW5kKFxuICAgICAgYyA9PiBjLm5hbWUgPT09IG5hbWVPckJhc2VuYW1lIHx8IGMuYmFzZW5hbWUgPT09IG5hbWVPckJhc2VuYW1lLFxuICAgICk7XG4gICAgaWYgKGVycm9ycyAmJiAhYykge1xuICAgICAgSGVscGVycy53YXJuKFxuICAgICAgICBgUHJvamVjdCBkb2VzbnQgY29udGFpbiBjaGlsZCB3aXRoIG5hbWUgb3IgYmFzZW5hbWU6ICR7bmFtZU9yQmFzZW5hbWV9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBjO1xuXG4gIH1cblxuXG5cbiAgZ2V0IHBhcmVudCgpOiBQUk9KQ0VUIHtcblxuICAgIGlmICghXy5pc1N0cmluZyh0aGlzLmxvY2F0aW9uKSB8fCB0aGlzLmxvY2F0aW9uLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmlucy5Gcm9tKHBhdGguam9pbih0aGlzLmxvY2F0aW9uLCAnLi4nKSk7XG5cbiAgfVxuXG5cblxuICBnZXQgZ3JhbmRwYSgpOiBQUk9KQ0VUIHtcblxuICAgIGlmICghXy5pc1N0cmluZyh0aGlzLmxvY2F0aW9uKSB8fCB0aGlzLmxvY2F0aW9uLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIGNvbnN0IGdyYW5kcGEgPSB0aGlzLmlucy5Gcm9tKHBhdGguam9pbih0aGlzLmxvY2F0aW9uLCAnLi4nLCAnLi4nKSk7XG4gICAgcmV0dXJuIGdyYW5kcGE7XG5cbiAgfVxuXG5cblxuICBnZXQgZ2VuZXJpY05hbWUoKSB7XG5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5jYWNoZVsnZ2VuZXJpY05hbWUnXSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlWydnZW5lcmljTmFtZSddO1xuICAgIH1cbiAgICBsZXQgbmFtZUZyb21QYWNrYWdlSnNvbiA9IHRoaXMubmFtZTtcbi8qICovXG4vKiAqL1xuICBcblxuICAgIGNvbnN0IHNsaWNlTWludXMgPSA4O1xuICAgIGNvbnN0IHNob3J0UGF0aCA9XG4gICAgICAnLycgK1xuICAgICAgY3Jvc3NQbGF0Zm9ybVBhdGgodGhpcy5sb2NhdGlvbilcbiAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgLnNsaWNlKC0xICogc2xpY2VNaW51cylcbiAgICAgICAgLmpvaW4oJy8nKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICAoc2hvcnRQYXRoLmluY2x1ZGVzKGNyb3NzUGxhdGZvcm1QYXRoKHRoaXMubG9jYXRpb24pKSA/ICcvJyA6ICcoLi4pJykgK1xuICAgICAgdGhpcy5jaGVja0FuZEJvbGRlblBhdGgodGhpcy5sb2NhdGlvbilcbiAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgLnNsaWNlKC0xICogc2xpY2VNaW51cylcbiAgICAgICAgLmpvaW4oJy8nKSArXG4gICAgICBgKCR7bmFtZUZyb21QYWNrYWdlSnNvbn0pYDtcblxuICAgIHRoaXMuY2FjaGVbJ2dlbmVyaWNOYW1lJ10gPSByZXN1bHQucmVwbGFjZSgvXFwvXFwvL2csICcvJyk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVbJ2dlbmVyaWNOYW1lJ107XG5cbiAgfVxuXG5cblxuICBwcml2YXRlIGNoZWNrQW5kQm9sZGVuUGF0aChmdWxsUGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFydHMgPSBmdWxsUGF0aC5zcGxpdCgnLycpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gcGFydHMubWFwKChwYXJ0LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcGF0aFRvY2hlY2sgPSBwYXJ0cy5zbGljZSgwLCBpbmRleCArIDEpLmpvaW4oJy8nKTtcblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgICByZXR1cm4gcGFydDtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQuam9pbignLycpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBzYW1lIGhhcyBwcm9qZWN0Lmhhc0ZpbGUoKTtcbiAgICovXG4gIHBhdGhFeGlzdHMocmVsYXRpdmVQYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0ZpbGUocmVsYXRpdmVQYXRoKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogc2FtZSBhcyBwcm9qZWN0LnBhdGhFeGlzdHMoKTtcbiAgICovXG4gIGhhc0ZpbGUocmVsYXRpdmVQYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG4gIGhhc0ZvbGRlcihyZWxhdGl2ZVBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIHNhbWUgYXMgcHJvamVjdC5wYXRoaGFzRmlsZUV4aXN0cygpO1xuICAgKiBidXQgd2l0aCBwYXRoLnJlc29sdmVcbiAgICovXG4gIGNvbnRhaW5zRmlsZShmaWxlUmVsYXRpdmVUb1Byb2plY3RQYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZShcbiAgICAgIHBhdGguam9pbih0aGlzLmxvY2F0aW9uLCBmaWxlUmVsYXRpdmVUb1Byb2plY3RQYXRoKSxcbiAgICApO1xuICAgIHJldHVybiBIZWxwZXJzLmV4aXN0cyhmdWxsUGF0aCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGFic29sdXRlIHBhdGg6XG4gICAqIGNvbmNhdGVkIHByb2plY3QgbG9jYXRpb24gd2l0aCByZWxhdGl2ZSBwYXRoXG4gICAqL1xuICBwYXRoRm9yKHJlbGF0aXZlUGF0aDogc3RyaW5nIHwgc3RyaW5nW10pIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICB3cml0ZUpzb24ocmVsYXRpdmVQYXRoOiBzdHJpbmcsIGpzb246IG9iamVjdCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1cyBleGVjdXRlIGluc3RlYWRcbiAgICogdXNlIG91dHB1dCBmcm9tIG9yIG1vcmUgcHJlY2llc2UgY3JhZnRlZCBhcGlcbiAgICovXG4gIHJ1bihjb21tYW5kOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENvcmVNb2RlbHMuUnVuT3B0aW9ucywgJ2N3ZCc+KSB7XG4gICAgbGV0IG9wdDogQ29yZU1vZGVscy5SdW5PcHRpb25zO1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgIHJldHVybiBIZWxwZXJzLnJ1bihjb21tYW5kLCBvcHQpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBzYW1lIGFzIHJ1biBidXQgYXN5bmNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBleGVjdXRlKFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQ29yZU1vZGVscy5FeGVjdXRlT3B0aW9ucyAmIHsgc2hvd0NvbW1hbmQ/OiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8YW55PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogdHJ5IHJ1biBidXQgY29udGludWUgd2hlbiBpdCBmYWlsc1xuICAgKiBAcGFyYW0gY29tbWFuZFxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdHJ5UnVuU3luYyhcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4vKiAqL1xuLyogKi9cbiAgXG4gICk6IHZvaWQge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBvdXRwdXRGcm9tKFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbi8qICovXG4vKiAqL1xuICBcbiAgKSB7XG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcmVtb3ZlRmlsZShmaWxlUmVsYXRpdmVUb1Byb2plY3RQYXRoOiBzdHJpbmcpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICByZWFkRmlsZShmaWxlUmVsYXRpdmVUb1Byb2plY3RQYXRoOiBzdHJpbmcpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcmVhZEpzb248VCA9IHt9PihmaWxlUmVsYXRpdmVUb1Byb2plY3RQYXRoOiBzdHJpbmcpOiBUIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICByZW1vdmUocmVsYXRpdmVQYXRoOiBzdHJpbmcsIGV4YWN0UGF0aCA9IHRydWUpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgcmVtb3ZlRm9sZGVyQnlSZWxhdGl2ZVBhdGgocmVsYXRpdmVQYXRoVG9Gb2xkZXI6IHN0cmluZykge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICB9XG5cblxuXG4gIGFzeW5jIGFzc2lnbkZyZWVQb3J0KFxuICAgIHN0YXJ0RnJvbTogbnVtYmVyID0gNDIwMCxcbiAgICBob3dNYW55RnJlZVBvcnRzQWZ0ZXJUaGF0UG9ydDogbnVtYmVyID0gMCxcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcmVtb3ZlSXRzZWxmKCkge1xuLyogKi9cbi8qICovXG4gIFxuICB9XG5cblxuXG4gIC8qKlxuICAgKiBQdXJwb3NlOiBub3QgaW5pdGlhbGl6aW5nIGFsbCBjbGFzc2VzIGF0IHRoZSBiZWdpbm5pbmdcbiAgICogT25seSBmb3IgQmFzZUZlYXR1cmVGb3JQcm9qZWN0IGNsYXNzXG4gICAqL1xuICBkZWZpbmVQcm9wZXJ0eTxQUk9KRUNUPihcbiAgICB2YXJpYWJsZU5hbWU6IGtleW9mIFBST0pFQ1QsXG4gICAgY2xhc3NGbjogRnVuY3Rpb24sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGN1c3RvbUluc3RhbmNlUmV0dXJuPzogKCkgPT4gb2JqZWN0O1xuICAgIH0sXG4gICkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGZzLmNvcHkgb3B0aW9uIGZpbHRlciBmdW5jdGlvbiBmb3IgY29weWluZyBvbmx5IHNlbGVjdGVkIGZvbGRlcnMgZnJvbSBwcm9qZWN0XG4gICAqL1xuICBmaWx0ZXJPbmx5Q29weShiYXNlUGF0aEZvbGRlcnNPbmx5VG9JbmNsdWRlOiBzdHJpbmdbXSkge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBmcy5jb3B5IG9wdGlvbiBmaWx0ZXIgZnVuY3Rpb24gZm9yIGNvcHlpbmcgb25seSBub3Qgc2VsZWN0ZWQgZm9sZGVycyBmcm9tIHByb2plY3RcbiAgICovXG4gIGZpbHRlckRvbnRDb3B5KGJhc2VQYXRoRm9sZGVyc1Rvc1NraXA6IHN0cmluZ1tdKSB7XG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGdlbmVyYWwgZGVmYXVsdCBkZXZlbG9wbWVudCBicmFuY2ggZm9yIGFsbCBraW5kcyBvZiBwcm9qZWN0c1xuICAgKi9cbiAgZ2V0RGVmYXVsdERldmVsb3BtZW50QnJhbmNoKCkge1xuICAgIHJldHVybiAnZGV2ZWxvcCc7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIG1haW4vZGVmYXVsdCBoYXJkY29kZWQgYnJhbmNoZXNcbiAgICovXG4gIGdldE1haW5CcmFuY2hlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnbWFzdGVyJywgJ2RldmVsb3AnLCAnc3RhZ2UnLCAncHJvZCcsICd0ZXN0J107XG4gIH1cblxuXG5cbiAgaXNVbnNpbmdBY3Rpb25Db21taXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cblxuXG4gIGFzeW5jIHJlc2V0UHJvY2VzcyhvdmVycmlkZUJyYW5jaD86IHN0cmluZywgcmVjcnVzaXZlID0gZmFsc2UpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG5cblxuICBsaW5rVG8oZGVzdFBhY2thZ2VMb2NhdGlvbjogc3RyaW5nKSB7XG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgc2V0VmFsdWVUb0pTT04oXG4gICAgcmVsYXRpdmVQYXRoOiBzdHJpbmcsXG4gICAgbG9kYXNoR2V0UGF0aDogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnksXG4gICk6IHZvaWQge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGdldFZhbHVlRnJvbUpTT04oXG4gICAgcmVsYXRpdmVQYXRoOiBzdHJpbmcsXG4gICAgbG9kYXNoR2V0UGF0aDogc3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogYW55ID0gdm9pZCAwLFxuICApOiBhbnkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBnZXRWYWx1ZUZyb21KU09OQyhcbiAgICByZWxhdGl2ZVBhdGg6IHN0cmluZyxcbiAgICBsb2Rhc2hHZXRQYXRoOiBzdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiBhbnkgPSB2b2lkIDAsXG4gICk6IGFueSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG5cbiAgd3JpdGVGaWxlKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpIHtcbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG5cblxuICBwdWJsaWMgcnVuQ29tbWFuZEdldFN0cmluZyh0aGlzOiBCYXNlUHJvamVjdCwgY29tbWFuZDogc3RyaW5nKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICB0b1N0cmluZyA9ICgpID0+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfT0+JHt0aGlzLmxvY2F0aW9ufWA7XG4gIH07XG5cblxuXG4gIGdldCBwYXJlbnRzTmFtZXMoKSB7XG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG4gIG9wZW5Mb2NhdGlvbihyZWxhdGl2ZUZvbGRlclBhdGg6IHN0cmluZykge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuICBwcml2YXRlIGZpbmRQYXJlbnRzTmFtZXMoXG4gICAgcHJvamVjdD86IFBST0pDRVQsXG4gICAgcGFyZW50PzogUFJPSkNFVCxcbiAgICByZXN1bHQgPSBbXSxcbiAgKTogc3RyaW5nW10ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHRyeUtpbGxBbGxFbGVjdHJvbkluc3RhbmNlcygpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBpbml0IHByb2plY3QgZmlsZXMgc3RydWN0dXJlIGFuZCBkZXBlZGVuY2llc1xuICAgKi9cbiAgYXN5bmMgaW5pdChpbml0T3B0aW9ucz86IGFueSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVE9ETyBJTVBMRU1FTlQnKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogZ2xvYmFsbHkgbGluayBucG0gYXMgcGFja2FnZVxuICAgKi9cbiAgYXN5bmMgbGluaygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RPRE8gSU1QTEVNRU5UJyk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGluaXQgcHJvamVjdCBmaWxlcyBzdHJ1Y3R1cmUgd2l0aG91dCBkZXBlZGVuY2llc1xuICAgKi9cbiAgYXN5bmMgc3RydWN0KGluaXRPcHRpb25zPzogYW55KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUT0RPIElNUExFTUVOVCcpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBpbml0IGFuZCBidWlsZCgpIHByb2plY3RcbiAgICovXG4gIGFzeW5jIGJ1aWxkKGJ1aWxkT3B0aW9ucz86IGFueSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVE9ETyBJTVBMRU1FTlQnKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogcHVibGlzaCBwcm9qZWN0IHRvIG5wbVxuICAgKi9cbiAgYXN5bmMgcHVibGlzaChwdWJsaXNoT3B0aW9ucz86IGFueSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVE9ETyBJTVBMRU1FTlQnKTtcbiAgfVxuXG5cblxuICBhc3luYyByZWxlYXNlKHJlbGVhc2VPcHRpb25zPzogYW55KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUT0RPIElNUExFTUVOVCcpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBsaW50IHBvcmplY3RcbiAgICovXG4gIGFzeW5jIGxpbnQobGludE9wdGlvbnM/OiBhbnkpIHtcbiAgICBIZWxwZXJzLmluZm8oYFxuXG5cbiAgICBDT01NSVQgTElOVCBOT1QgSU1QTEVNRU5URURcblxuXG4gICAgYCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGdldCBpbmZvIGFib3V0IHBvcmplY3RcbiAgICovXG4gIGFzeW5jIGluZm8oKSB7XG4gICAgY29uc3QgcHJvaiA9IHRoaXM7XG4gICAgSGVscGVycy5pbmZvKFxuICAgICAgYFxuXG4gIG5hbWU6ICR7cHJvaj8ubmFtZX1cbiAgdHlwZTogJHtwcm9qPy50eXBlfVxuICBjb3JlIHByb2plY3QgbmFtZTogJyR7cHJvaj8uY29yZT8ubmFtZX0nXG4gIGVtYmVkZGVkIHByb2plY3Q6ICR7cHJvaj8ubGlua2VkUHJvamVjdHMuZW1iZWRkZWRQcm9qZWN0Py5nZW5lcmljTmFtZSB8fCAnPCBub25lID4nfVxuICBjaGlsZHJlbiAoJHtwcm9qPy5jaGlsZHJlbi5sZW5ndGh9KTogJHshcHJvaiB8fCAhcHJvai5jaGlsZHJlbi5sZW5ndGggPyAnPCBub25lID4nIDogJyd9XG4ke3Byb2o/LmNoaWxkcmVuLm1hcChjID0+ICcrJyArIGMuZ2VuZXJpY05hbWUpLmpvaW4oJ1xcbicpfVxuYCArXG4gICAgICAgIGBcbmxpbmtlZCBwb3JqZWN0IHByZWZpeDogXCIke3RoaXMubGlua2VkUHJvamVjdHMubGlua2VkUHJvamVjdHNQcmVmaXh9XCJcblxubGlua2VkIHByb2plY3RzIGZyb20ganNvbiAoJHt0aGlzLmxpbmtlZFByb2plY3RzLmxpbmtlZFByb2plY3RzPy5sZW5ndGggfHwgMH0pOlxuJHsodGhpcy5saW5rZWRQcm9qZWN0cy5saW5rZWRQcm9qZWN0cyB8fCBbXSlcbiAgLm1hcChjID0+IHtcbiAgICBjb25zdCBwcm9qID0gdGhpcy5pbnMuRnJvbSh0aGlzLnBhdGhGb3IoYy5yZWxhdGl2ZUNsb25lUGF0aCkpO1xuICAgIHJldHVybiAnLSAnICsgcHJvaiA/IHByb2ouZ2VuZXJpY05hbWUgOiBjLnJlbGF0aXZlQ2xvbmVQYXRoO1xuICB9KVxuICAuam9pbignXFxuJyl9XG5cbiAgYCxcbiAgICApO1xuXG5cblxuICB9XG5cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRucC1oZWxwZXJzIGxpYi9iYXNlL2Jhc2UtcHJvamVjdC50cyJdfQ==