@mnaoumov/typescript-dev-toolkit 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/dist/lib/cjs/build.cjs +2 -24
  2. package/dist/lib/cjs/bundlers/esbuild-impl/change-extension-plugin.cjs +2 -24
  3. package/dist/lib/cjs/bundlers/esbuild-impl/custom-esbuild-options-plugin.cjs +1 -56
  4. package/dist/lib/cjs/bundlers/esbuild-impl/fix-esm-plugin.cjs +4 -25
  5. package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +6 -61
  6. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +129 -27
  7. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +3 -1
  8. package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +3 -25
  9. package/dist/lib/cjs/bundlers/index.cjs +2 -57
  10. package/dist/lib/cjs/check-project-types.cjs +3 -25
  11. package/dist/lib/cjs/cli-utils.cjs +5 -33
  12. package/dist/lib/cjs/cli-utils.d.cts +1 -1
  13. package/dist/lib/cjs/code-generator.cjs +1 -56
  14. package/dist/lib/cjs/commitlint-config.cjs +2 -24
  15. package/dist/lib/cjs/commitlint-forbidden-patterns.cjs +1 -56
  16. package/dist/lib/cjs/commitlint-spellcheck-header.cjs +1 -56
  17. package/dist/lib/cjs/env-toggle.cjs +14 -25
  18. package/dist/lib/cjs/env-toggle.d.cts +7 -0
  19. package/dist/lib/cjs/exec.cjs +3 -25
  20. package/dist/lib/cjs/exec.d.cts +1 -0
  21. package/dist/lib/cjs/forbidden-patterns.cjs +3 -25
  22. package/dist/lib/cjs/formatters/dprint.cjs +2 -24
  23. package/dist/lib/cjs/formatters/index.cjs +2 -57
  24. package/dist/lib/cjs/fs.cjs +2 -24
  25. package/dist/lib/cjs/fs.d.cts +1 -0
  26. package/dist/lib/cjs/gate.cjs +1 -56
  27. package/dist/lib/cjs/git.cjs +42 -58
  28. package/dist/lib/cjs/git.d.cts +29 -0
  29. package/dist/lib/cjs/index.cjs +31 -86
  30. package/dist/lib/cjs/json.cjs +2 -24
  31. package/dist/lib/cjs/library-build.cjs +92 -34
  32. package/dist/lib/cjs/library-build.d.cts +10 -4
  33. package/dist/lib/cjs/library-references.d.cts +0 -3
  34. package/dist/lib/cjs/linters/cspell-content.cjs +2 -24
  35. package/dist/lib/cjs/linters/cspell.cjs +1 -56
  36. package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.cjs +1 -56
  37. package/dist/lib/cjs/linters/eslint-config.cjs +8 -30
  38. package/dist/lib/cjs/linters/eslint-no-restricted-syntax.cjs +1 -56
  39. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +1 -56
  40. package/dist/lib/cjs/linters/eslint-rules/index.cjs +13 -68
  41. package/dist/lib/cjs/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +2 -24
  42. package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.cjs +2 -24
  43. package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.cjs +2 -24
  44. package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.cjs +2 -24
  45. package/dist/lib/cjs/linters/eslint-rules/params-options-name-match.cjs +1 -56
  46. package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.cjs +1 -56
  47. package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.cjs +2 -24
  48. package/dist/lib/cjs/linters/eslint-rules/require-method-template.cjs +2 -24
  49. package/dist/lib/cjs/linters/eslint-rules/require-super-call.cjs +2 -24
  50. package/dist/lib/cjs/linters/eslint-rules/rule-tester-helper.cjs +1 -56
  51. package/dist/lib/cjs/linters/eslint-rules/ts-estree-node.cjs +2 -24
  52. package/dist/lib/cjs/linters/eslint.cjs +2 -24
  53. package/dist/lib/cjs/linters/index.cjs +15 -70
  54. package/dist/lib/cjs/linters/lint-ignores.cjs +2 -24
  55. package/dist/lib/cjs/linters/markdownlint-cli2-config.cjs +3 -25
  56. package/dist/lib/cjs/linters/markdownlint-content.cjs +2 -24
  57. package/dist/lib/cjs/linters/markdownlint-ignores.cjs +1 -56
  58. package/dist/lib/cjs/linters/markdownlint-rules/index.cjs +2 -57
  59. package/dist/lib/cjs/linters/markdownlint-rules/no-soft-break-in-paragraph.cjs +1 -56
  60. package/dist/lib/cjs/linters/markdownlint.cjs +5 -26
  61. package/dist/lib/cjs/linters/markdownlint.d.cts +11 -0
  62. package/dist/lib/cjs/linters/over-exposure.cjs +2 -24
  63. package/dist/lib/cjs/nano-staged-config.cjs +2 -57
  64. package/dist/lib/cjs/npm-publish.cjs +1 -56
  65. package/dist/lib/cjs/npm-run.cjs +2 -24
  66. package/dist/lib/cjs/npm.cjs +2 -24
  67. package/dist/lib/cjs/package-lock-integrity.cjs +1 -56
  68. package/dist/lib/cjs/package-manager.cjs +3 -25
  69. package/dist/lib/cjs/released-issues.cjs +2 -24
  70. package/dist/lib/cjs/repo-paths.cjs +1 -56
  71. package/dist/lib/cjs/root.cjs +2 -24
  72. package/dist/lib/cjs/test-runners/index.cjs +3 -58
  73. package/dist/lib/cjs/test-runners/vitest-config.cjs +1 -56
  74. package/dist/lib/cjs/test-runners/vitest.cjs +1 -56
  75. package/dist/lib/cjs/validate-declarations.cjs +2 -24
  76. package/dist/lib/cjs/version.cjs +2 -24
  77. package/dist/lib/cjs/version.d.cts +1 -0
  78. package/dist/lib/esm/build.mjs +2 -11
  79. package/dist/lib/esm/bundlers/esbuild-impl/change-extension-plugin.mjs +2 -11
  80. package/dist/lib/esm/bundlers/esbuild-impl/custom-esbuild-options-plugin.mjs +1 -43
  81. package/dist/lib/esm/bundlers/esbuild-impl/fix-esm-plugin.mjs +4 -12
  82. package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +1 -43
  83. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +3 -1
  84. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +154 -14
  85. package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.mjs +2 -11
  86. package/dist/lib/esm/bundlers/index.mjs +1 -43
  87. package/dist/lib/esm/check-project-types.mjs +2 -11
  88. package/dist/lib/esm/cli-utils.d.mts +1 -1
  89. package/dist/lib/esm/cli-utils.mjs +5 -20
  90. package/dist/lib/esm/code-generator.mjs +1 -43
  91. package/dist/lib/esm/commitlint-config.mjs +2 -11
  92. package/dist/lib/esm/commitlint-forbidden-patterns.mjs +1 -43
  93. package/dist/lib/esm/commitlint-spellcheck-header.mjs +1 -43
  94. package/dist/lib/esm/env-toggle.d.mts +7 -0
  95. package/dist/lib/esm/env-toggle.mjs +12 -11
  96. package/dist/lib/esm/exec.d.mts +1 -0
  97. package/dist/lib/esm/exec.mjs +2 -11
  98. package/dist/lib/esm/forbidden-patterns.mjs +2 -11
  99. package/dist/lib/esm/formatters/dprint.mjs +2 -11
  100. package/dist/lib/esm/formatters/index.mjs +1 -43
  101. package/dist/lib/esm/fs.d.mts +1 -0
  102. package/dist/lib/esm/fs.mjs +2 -11
  103. package/dist/lib/esm/gate.mjs +1 -43
  104. package/dist/lib/esm/git.d.mts +29 -0
  105. package/dist/lib/esm/git.mjs +40 -44
  106. package/dist/lib/esm/index.mjs +1 -43
  107. package/dist/lib/esm/json.mjs +2 -11
  108. package/dist/lib/esm/library-build.d.mts +10 -4
  109. package/dist/lib/esm/library-build.mjs +101 -21
  110. package/dist/lib/esm/library-references.d.mts +0 -3
  111. package/dist/lib/esm/linters/cspell-content.mjs +2 -11
  112. package/dist/lib/esm/linters/cspell.mjs +1 -43
  113. package/dist/lib/esm/linters/eslint-agnostic-core-boundary.mjs +1 -43
  114. package/dist/lib/esm/linters/eslint-config.mjs +2 -11
  115. package/dist/lib/esm/linters/eslint-no-restricted-syntax.mjs +1 -43
  116. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +1 -43
  117. package/dist/lib/esm/linters/eslint-rules/index.mjs +1 -43
  118. package/dist/lib/esm/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +2 -11
  119. package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.mjs +2 -11
  120. package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.mjs +2 -11
  121. package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.mjs +2 -11
  122. package/dist/lib/esm/linters/eslint-rules/params-options-name-match.mjs +1 -43
  123. package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.mjs +1 -43
  124. package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.mjs +2 -11
  125. package/dist/lib/esm/linters/eslint-rules/require-method-template.mjs +2 -11
  126. package/dist/lib/esm/linters/eslint-rules/require-super-call.mjs +2 -11
  127. package/dist/lib/esm/linters/eslint-rules/rule-tester-helper.mjs +1 -43
  128. package/dist/lib/esm/linters/eslint-rules/ts-estree-node.mjs +2 -11
  129. package/dist/lib/esm/linters/eslint.mjs +2 -11
  130. package/dist/lib/esm/linters/index.mjs +1 -43
  131. package/dist/lib/esm/linters/lint-ignores.mjs +2 -11
  132. package/dist/lib/esm/linters/markdownlint-cli2-config.mjs +2 -11
  133. package/dist/lib/esm/linters/markdownlint-content.mjs +2 -11
  134. package/dist/lib/esm/linters/markdownlint-ignores.mjs +1 -43
  135. package/dist/lib/esm/linters/markdownlint-rules/index.mjs +1 -43
  136. package/dist/lib/esm/linters/markdownlint-rules/no-soft-break-in-paragraph.mjs +1 -43
  137. package/dist/lib/esm/linters/markdownlint.d.mts +11 -0
  138. package/dist/lib/esm/linters/markdownlint.mjs +9 -14
  139. package/dist/lib/esm/linters/over-exposure.mjs +2 -11
  140. package/dist/lib/esm/nano-staged-config.mjs +1 -43
  141. package/dist/lib/esm/npm-publish.mjs +1 -43
  142. package/dist/lib/esm/npm-run.mjs +2 -11
  143. package/dist/lib/esm/npm.mjs +2 -11
  144. package/dist/lib/esm/package-lock-integrity.mjs +1 -43
  145. package/dist/lib/esm/package-manager.mjs +2 -11
  146. package/dist/lib/esm/released-issues.mjs +2 -11
  147. package/dist/lib/esm/repo-paths.mjs +1 -43
  148. package/dist/lib/esm/root.mjs +2 -11
  149. package/dist/lib/esm/test-runners/index.mjs +1 -43
  150. package/dist/lib/esm/test-runners/vitest-config.mjs +1 -43
  151. package/dist/lib/esm/test-runners/vitest.mjs +1 -43
  152. package/dist/lib/esm/validate-declarations.mjs +2 -11
  153. package/dist/lib/esm/version.d.mts +1 -0
  154. package/dist/lib/esm/version.mjs +2 -11
  155. package/package.json +2 -2
@@ -2,13 +2,7 @@
2
2
  THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
-
6
5
  (function () {
7
- function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
- }
11
-
12
6
  function ensureBrowserProcess() {
13
7
  const browserProcess = {
14
8
  browser: true,
@@ -39,23 +33,7 @@ function ensureBrowserProcess() {
39
33
  existingProcessRecord['browser'] = true;
40
34
  }
41
35
 
42
- function keepName($unknown) {
43
- return $unknown;
44
- }
45
-
46
- (function initCjs() {
47
- const globalThisRecord = globalThis;
48
- ensureDisposeSymbols();
49
- globalThisRecord['__name'] ??= keepName;
50
- globalThisRecord['__extractDefault'] ??= extractDefault;
51
-
52
- ensureBrowserProcess();
53
-
54
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
55
- function extractDefault(module) {
56
- return module && module.__esModule && 'default' in module ? module.default : module;
57
- }
58
- })();
36
+ ensureBrowserProcess();
59
37
  })();
60
38
 
61
39
  "use strict";
@@ -98,7 +76,7 @@ var import_object_utils = require('@mnaoumov/typescript-lib/object-utils');
98
76
  var import_string = require('@mnaoumov/typescript-lib/string');
99
77
  var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
100
78
  var import_node_child_process = require('node:child_process');
101
- var import_node_process = __toESM(__extractDefault(require('node:process')), 1);
79
+ var import_node_process = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('node:process')), 1);
102
80
  var import_cli_utils = require('./cli-utils.cjs');
103
81
  function appendNodeOption(existingNodeOptions, option) {
104
82
  const trimmed = (existingNodeOptions ?? "").trim();
@@ -452,4 +430,4 @@ function truncateCommand(command) {
452
430
  buildChildEnv,
453
431
  exec
454
432
  });
455
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2V4ZWMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgZXhlY3V0aW5nIGNvbW1hbmRzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGVidWcnO1xuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyB0cmltRW5kIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQge1xuICBjbWRFc2NhcGVDb21tYW5kTGluZSBhcyBjb21tYW5kRXNjYXBlQ29tbWFuZExpbmUsXG4gIHRvQ29tbWFuZExpbmUsXG4gIHRvUG9zaXhDb21tYW5kTGluZVxufSBmcm9tICcuL2NsaS11dGlscy50cyc7XG5cbi8qKlxuICogQSBjb21tYW5kIHBhcnQ6IGVpdGhlciBhIHBsYWluIHN0cmluZyBvciBhbiB7QGxpbmsgRXhlY0FyZ3VtZW50fSB3aXRoIGJhdGNoZWQgYXJndW1lbnRzLlxuICovXG5leHBvcnQgdHlwZSBDb21tYW5kUGFydCA9IEV4ZWNBcmd1bWVudCB8IHN0cmluZztcblxuLyoqXG4gKiBBIGNvbW1hbmQgYXJndW1lbnQgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgYXJncyB0byBiZSBiYXRjaGVkLlxuICogSWYgdGhlIGV4cGFuZGVkIGNvbW1hbmQgZXhjZWVkcyB0aGUgcGxhdGZvcm0ncyBtYXggY29tbWFuZCBsZW5ndGgsXG4gKiB0aGUgYmF0Y2hlZCBhcmdzIGFyZSBzcGxpdCBpbnRvIHNlcXVlbnRpYWwgZXhlY3V0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjQXJndW1lbnQge1xuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyB0byBiYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IGJhdGNoZWRBcmd1bWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBleGVjfSB0aGF0IHJldHVybiBkZXRhaWxlZCByZXN1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNEZXRhaWxlZE9wdGlvbnMgZXh0ZW5kcyBFeGVjT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNdXN0IGJlIGB0cnVlYCB0byByZWNlaXZlIGRldGFpbGVkIHJlc3VsdHMuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRGV0YWlsczogdHJ1ZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBleGVjdXRpbmcgYSBjb21tYW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgY3VycmVudCB3b3JraW5nIGZvbGRlciBmb3IgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGNoaWxkIHByb2Nlc3MsIG1lcmdlZCBvdmVyIHRoZSBpbmhlcml0ZWQgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB7fWBcbiAgICovXG4gIHJlYWRvbmx5IGVudj86IE5vZGVKUy5Qcm9jZXNzRW52O1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGF0dGFjaGVzIHRoZSBjaGlsZCBwcm9jZXNzJ3Mgc3RkaW8gZGlyZWN0bHkgdG8gdGhlIHRlcm1pbmFsIChgc3RkaW86ICdpbmhlcml0J2ApIGluc3RlYWRcbiAgICogb2YgY2FwdHVyaW5nIGl0LiBVc2UgZm9yIGxvbmctcnVubmluZyBvciBpbnRlcmFjdGl2ZSBjb21tYW5kcyBzdWNoIGFzIGRldiBzZXJ2ZXJzIGFuZCB3YXRjaCBtb2RlLlxuICAgKiBCZWNhdXNlIHRoZSBvdXRwdXQgaXMgbm90IGNhcHR1cmVkLCB0aGUgcmVzb2x2ZWQgc3Rkb3V0IGlzIGFuIGVtcHR5IHN0cmluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNJbnRlcmFjdGl2ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgc3VwcHJlc3NlcyB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBpc1F1aWV0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGNvbW1hbmQgZmFpbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRmFpbElmQ2FsbGVkRnJvbU91dHNpZGVSb290PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBpZ25vcmVzIHRoZSBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZElnbm9yZUV4aXRDb2RlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYGZhbHNlYCwgb25seSByZXR1cm5zIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVEZXRhaWxzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW4gaW5wdXQgdG8gYmUgcGFzc2VkIHRvIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSBzdGRpbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHJlc3VsdCBvZiB7QGxpbmsgZXhlY30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBBbiBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQuIEEgdmFsdWUgb2YgYG51bGxgIGluZGljYXRlcyB0aGF0IHRoZSBwcm9jZXNzIGRpZCBub3QgZXhpdCBub3JtYWxseS5cbiAgICovXG4gIHJlYWRvbmx5IGV4aXRDb2RlOiBudWxsIHwgbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHNpZ25hbCB0aGF0IGNhdXNlZCB0aGUgcHJvY2VzcyB0byBiZSB0ZXJtaW5hdGVkLiBBIHZhbHVlIG9mIGBudWxsYCBpbmRpY2F0ZXMgdGhhdCBubyBzaWduYWwgd2FzIHJlY2VpdmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhpdFNpZ25hbDogTm9kZUpTLlNpZ25hbHMgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBIHN0YW5kYXJkIGVycm9yIG91dHB1dCBmcm9tIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RkZXJyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3RhbmRhcmQgb3V0cHV0IGZyb20gdGhlIGNvbW1hbmQuXG4gICAqL1xuICByZWFkb25seSBzdGRvdXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZXhlY30gdGhhdCByZXR1cm4gb25seSBzdGRvdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY1NpbXBsZU9wdGlvbnMgZXh0ZW5kcyBFeGVjT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNdXN0IGJlIGBmYWxzZWAgb3Igb21pdHRlZCB0byByZWNlaXZlIG9ubHkgc3Rkb3V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRGV0YWlscz86IGZhbHNlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBleGVjU3RyaW5nfS5cbiAqL1xuaW50ZXJmYWNlIEV4ZWNTdHJpbmdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvbW1hbmQgc3RyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlYyBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9ucz86IEV4ZWNPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgYXJndW1lbnQgYXJyYXkgKGlmIGF2YWlsYWJsZSksIHVzZWQgYnkgdGhlIFBvd2VyU2hlbGxcbiAgICogZmFsbGJhY2sgcGF0aCB0byBxdW90ZSBhcmd1bWVudHMgd2l0aCBQb3dlclNoZWxsLW5hdGl2ZSBzaW5nbGUgcXVvdGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgcmF3QXJndW1lbnRzPzogc3RyaW5nW107XG59XG4vKipcbiAqIEFwcGVuZHMgYSBzaW5nbGUgYG5vZGVgIENMSSBvcHRpb24gdG8gYSBgTk9ERV9PUFRJT05TYCBzdHJpbmcsIHByZXNlcnZpbmcgYW55IG9wdGlvbnMgYWxyZWFkeSBwcmVzZW50LlxuICpcbiAqIEBwYXJhbSBleGlzdGluZ05vZGVPcHRpb25zIC0gVGhlIGN1cnJlbnQgYE5PREVfT1BUSU9OU2AgdmFsdWUgKGUuZy4gYHByb2Nlc3MuZW52Lk5PREVfT1BUSU9OU2ApLCBpZiBhbnkuXG4gKiBAcGFyYW0gb3B0aW9uIC0gVGhlIGBub2RlYCBDTEkgb3B0aW9uIHRvIGFwcGVuZCAoZS5nLiBgLS1sb2NhbHN0b3JhZ2UtZmlsZT06bWVtb3J5OmApLlxuICogQHJldHVybnMgVGhlIGNvbWJpbmVkIGBOT0RFX09QVElPTlNgIHN0cmluZy4gSWYgYG9wdGlvbmAgaXMgYWxyZWFkeSBwcmVzZW50LCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kTm9kZU9wdGlvbihleGlzdGluZ05vZGVPcHRpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQsIG9wdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdHJpbW1lZCA9IChleGlzdGluZ05vZGVPcHRpb25zID8/ICcnKS50cmltKCk7XG4gIGlmICh0cmltbWVkID09PSAnJykge1xuICAgIHJldHVybiBvcHRpb247XG4gIH1cbiAgcmV0dXJuIHRyaW1tZWQuc3BsaXQoL1xccysvKS5pbmNsdWRlcyhvcHRpb24pID8gdHJpbW1lZCA6IGAke3RyaW1tZWR9ICR7b3B0aW9ufWA7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBlbnZpcm9ubWVudCBmb3IgY2hpbGQgcHJvY2Vzc2VzOiB0aGUgcGFyZW50IGVudmlyb25tZW50IHBsdXMgYERFQlVHX0NPTE9SU2AsIGFuZCBcdTIwMTQgd2hlblxuICogdGhlIHJ1bm5pbmcgYG5vZGVgIHN1cHBvcnRzIGl0IFx1MjAxNCB7QGxpbmsgTE9DQUxfU1RPUkFHRV9OT0RFX09QVElPTn0gYXBwZW5kZWQgdG8gYE5PREVfT1BUSU9OU2AuXG4gKlxuICogVGhlIHN1cHBvcnQgY2hlY2sgZ3VhcmRzIGFnYWluc3Qgb2xkZXIgYG5vZGVgICg8IDIyKTogcGFzc2luZyBhbiBvcHRpb24gYG5vZGVgIGRvZXMgbm90IHJlY29nbml6ZSB2aWFcbiAqIGBOT0RFX09QVElPTlNgIG1ha2VzIGl0IGV4aXQgYmVmb3JlIHJ1bm5pbmcsIHdoaWNoIHdvdWxkIGJyZWFrIGV2ZXJ5IHNwYXduZWQgdG9vbC5cbiAqXG4gKiBAcGFyYW0gYmFzZUVudiAtIFRoZSBwYXJlbnQgZW52aXJvbm1lbnQgdG8gZXh0ZW5kICh0eXBpY2FsbHkgYHByb2Nlc3MuZW52YCkuXG4gKiBAcGFyYW0gYWxsb3dlZE5vZGVFbnZpcm9ubWVudEZsYWdzIC0gVGhlIGBub2RlYCBvcHRpb25zIGFjY2VwdGVkIHZpYSBgTk9ERV9PUFRJT05TYCAodHlwaWNhbGx5IGBwcm9jZXNzLmFsbG93ZWROb2RlRW52aXJvbm1lbnRGbGFnc2ApLlxuICogQHJldHVybnMgVGhlIGVudmlyb25tZW50IHRvIHBhc3MgdG8gc3Bhd25lZCBjaGlsZCBwcm9jZXNzZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENoaWxkRW52KGJhc2VFbnY6IE5vZGVKUy5Qcm9jZXNzRW52LCBhbGxvd2VkTm9kZUVudmlyb25tZW50RmxhZ3M6IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBOb2RlSlMuUHJvY2Vzc0VudiB7XG4gIHJldHVybiB7XG4gICAgREVCVUdfQ09MT1JTOiAnMScsXG4gICAgLi4uYmFzZUVudixcbiAgICAuLi4oYWxsb3dlZE5vZGVFbnZpcm9ubWVudEZsYWdzLmhhcygnLS1sb2NhbHN0b3JhZ2UtZmlsZScpICYmIHsgTk9ERV9PUFRJT05TOiBhcHBlbmROb2RlT3B0aW9uKGJhc2VFbnZbJ05PREVfT1BUSU9OUyddLCBMT0NBTF9TVE9SQUdFX05PREVfT1BUSU9OKSB9KVxuICB9O1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGEgY29tbWFuZC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kLlxuICogQHRocm93cyBJZiB0aGUgY29tbWFuZCBmYWlscyB3aXRoIGEgbm9uLXplcm8gZXhpdCBjb2RlIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgZmFsc2VgLlxuICogICAgICAgICBUaGUgZXJyb3IgbWVzc2FnZSBpbmNsdWRlcyB0aGUgZXhpdCBjb2RlLCB0aGUgY29tbWFuZCwgc3RkZXJyLCBhbmQgc3Rkb3V0IChvciBhIG5vdGUgdGhhdCBpdCB3YXNcbiAqICAgICAgICAgcHJpbnRlZCksIGFuZCBzYXlzIHdoZW4gdGhlIGNoaWxkIGNyYXNoZWQgb3Igd2FzIGtpbGxlZCByYXRoZXIgdGhhbiBleGl0aW5nIG9uIGl0cyBvd24uXG4gKiAgICAgICAgIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBhbmQgaWdub3JlRXhpdENvZGUgaXMgYHRydWVgLFxuICogICAgICAgICB0aGUgZXJyb3IgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjKGNvbW1hbmQ6IENvbW1hbmRQYXJ0W10gfCBzdHJpbmcsIG9wdGlvbnM/OiBFeGVjU2ltcGxlT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPjtcbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIEV4ZWNSZXN1bHQgb2JqZWN0LlxuICogICAgICAgICAgVGhlIEV4ZWNSZXN1bHQgb2JqZWN0IGNvbnRhaW5zIHRoZSBleGl0IGNvZGUsIGV4aXQgc2lnbmFsLCBzdGRlcnIsIGFuZCBzdGRvdXQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUsIHRoZSBjb21tYW5kLCBzdGRlcnIsIGFuZCBzdGRvdXQgKG9yIGEgbm90ZSB0aGF0IGl0IHdhc1xuICogICAgICAgICBwcmludGVkKSwgYW5kIHNheXMgd2hlbiB0aGUgY2hpbGQgY3Jhc2hlZCBvciB3YXMga2lsbGVkIHJhdGhlciB0aGFuIGV4aXRpbmcgb24gaXRzIG93bi5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY29tbWFuZDogQ29tbWFuZFBhcnRbXSB8IHN0cmluZywgb3B0aW9uczogRXhlY0RldGFpbGVkT3B0aW9ucyk6IFByb21pc2U8RXhlY1Jlc3VsdD47XG4vKipcbiAqIEV4ZWN1dGVzIGEgY29tbWFuZC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kIG9yIGFuIEV4ZWNSZXN1bHQgb2JqZWN0LlxuICogICAgICAgICAgVGhlIEV4ZWNSZXN1bHQgb2JqZWN0IGNvbnRhaW5zIHRoZSBleGl0IGNvZGUsIGV4aXQgc2lnbmFsLCBzdGRlcnIsIGFuZCBzdGRvdXQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUsIHRoZSBjb21tYW5kLCBzdGRlcnIsIGFuZCBzdGRvdXQgKG9yIGEgbm90ZSB0aGF0IGl0IHdhc1xuICogICAgICAgICBwcmludGVkKSwgYW5kIHNheXMgd2hlbiB0aGUgY2hpbGQgY3Jhc2hlZCBvciB3YXMga2lsbGVkIHJhdGhlciB0aGFuIGV4aXRpbmcgb24gaXRzIG93bi5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY29tbWFuZDogQ29tbWFuZFBhcnRbXSB8IHN0cmluZywgb3B0aW9uczogRXhlY09wdGlvbnMgPSB7fSk6IFByb21pc2U8RXhlY1Jlc3VsdCB8IHN0cmluZz4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShjb21tYW5kKSkge1xuICAgIGNvbnN0IGJhdGNoUmVzdWx0ID0gaGFuZGxlQmF0Y2hlZENvbW1hbmQoY29tbWFuZCwgb3B0aW9ucyk7XG4gICAgaWYgKGJhdGNoUmVzdWx0KSB7XG4gICAgICByZXR1cm4gYmF0Y2hSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0ICRhcmd1bWVudHMgPSBjb21tYW5kLmZpbHRlcigocGFydCk6IHBhcnQgaXMgc3RyaW5nID0+IHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJyk7XG4gICAgY29uc3QgY29tbWFuZExpbmUgPSBidWlsZENvbW1hbmRMaW5lKCRhcmd1bWVudHMpO1xuXG4gICAgY29uc3QgbWF4Q29tbWFuZExlbmd0aCA9IGdldE1heENvbW1hbmRMZW5ndGgoKTtcbiAgICBjb25zdCBlZmZlY3RpdmVMZW5ndGggPSBnZXRFZmZlY3RpdmVDb21tYW5kTGluZUxlbmd0aChjb21tYW5kTGluZSk7XG4gICAgcmV0dXJuIGVmZmVjdGl2ZUxlbmd0aCA+IG1heENvbW1hbmRMZW5ndGhcbiAgICAgID8gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICBgQ29tbWFuZCBsaW5lIGlzIHRvbyBsb25nICgke1N0cmluZyhlZmZlY3RpdmVMZW5ndGgpfSBjaGFycyBvbmNlIHdyYXBwZWQgZm9yIHRoZSBzaGVsbCwgbWF4ICR7U3RyaW5nKG1heENvbW1hbmRMZW5ndGgpfSBvbiAke3Byb2Nlc3MucGxhdGZvcm19KS4gQ29uc2lkZXIgc3BsaXR0aW5nIGludG8gc21hbGxlciBiYXRjaGVzIG9yIHVzZSBFeGVjQXJnLmBcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgOiBleGVjU3RyaW5nKHtcbiAgICAgICAgY29tbWFuZDogY29tbWFuZExpbmUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHJhd0FyZ3VtZW50czogJGFyZ3VtZW50c1xuICAgICAgfSk7XG4gIH1cblxuICBjb25zdCBtYXhDb21tYW5kTGVuZ3RoID0gZ2V0TWF4Q29tbWFuZExlbmd0aCgpO1xuICBjb25zdCBlZmZlY3RpdmVMZW5ndGggPSBnZXRFZmZlY3RpdmVDb21tYW5kTGluZUxlbmd0aChjb21tYW5kKTtcbiAgcmV0dXJuIGVmZmVjdGl2ZUxlbmd0aCA+IG1heENvbW1hbmRMZW5ndGhcbiAgICA/IFByb21pc2UucmVqZWN0KFxuICAgICAgbmV3IEVycm9yKFxuICAgICAgICBgQ29tbWFuZCBsaW5lIGlzIHRvbyBsb25nICgke1N0cmluZyhlZmZlY3RpdmVMZW5ndGgpfSBjaGFycyBvbmNlIHdyYXBwZWQgZm9yIHRoZSBzaGVsbCwgbWF4ICR7U3RyaW5nKG1heENvbW1hbmRMZW5ndGgpfSBvbiAke3Byb2Nlc3MucGxhdGZvcm19KS4gQ29uc2lkZXIgc3BsaXR0aW5nIGludG8gc21hbGxlciBiYXRjaGVzIG9yIHVzZSBFeGVjQXJnLmBcbiAgICAgIClcbiAgICApXG4gICAgOiBleGVjU3RyaW5nKHtcbiAgICAgIGNvbW1hbmQsXG4gICAgICBvcHRpb25zXG4gICAgfSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBzaW5nbGUgc3RyaW5nIGNvbW1hbmQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBleGVjU3RyaW5nKHBhcmFtczogRXhlY1N0cmluZ1BhcmFtcyk6IFByb21pc2U8RXhlY1Jlc3VsdCB8IHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgY29tbWFuZCxcbiAgICBvcHRpb25zID0ge30sXG4gICAgcmF3QXJndW1lbnRzXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHtcbiAgICBjd2QgPSBwcm9jZXNzLmN3ZCgpLFxuICAgIGVudixcbiAgICBpc0ludGVyYWN0aXZlID0gZmFsc2UsXG4gICAgaXNRdWlldDogcXVpZXQgPSBmYWxzZSxcbiAgICBzaG91bGRJZ25vcmVFeGl0Q29kZTogaWdub3JlRXhpdENvZGUgPSBmYWxzZSxcbiAgICBzaG91bGRJbmNsdWRlRGV0YWlscyA9IGZhbHNlLFxuICAgIHN0ZGluID0gJydcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBnZXRMaWJEZWJ1Z2dlcignRXhlYycpKGBFeGVjdXRpbmcgY29tbWFuZDogJHtjb21tYW5kfWApO1xuXG4gICAgY29uc3QgY2hpbGQgPSBzcGF3blZpYVNoZWxsKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxTcGF3blZpYVNoZWxsUGFyYW1zPih7XG4gICAgICBjb21tYW5kLFxuICAgICAgY3dkLFxuICAgICAgZW52LFxuICAgICAgaXNJbnRlcmFjdGl2ZSxcbiAgICAgIHJhd0FyZ3VtZW50c1xuICAgIH0pKTtcblxuICAgIGxldCBzdGRvdXQgPSAnJztcbiAgICBsZXQgc3RkZXJyID0gJyc7XG5cbiAgICAvLyBJbiBpbnRlcmFjdGl2ZSBtb2RlIHRoZSBjaGlsZCdzIHN0ZGlvIGlzIGluaGVyaXRlZCBieSB0aGUgdGVybWluYWwsIHNvIHRoZXJlIGFyZSBubyBzdHJlYW1zIHRvIHJlYWQgYW5kIG5vdGhpbmcgaXMgY2FwdHVyZWQuXG4gICAgaWYgKCFpc0ludGVyYWN0aXZlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0ZGVycjogY2hpbGRTdGRlcnIsXG4gICAgICAgIHN0ZGluOiBjaGlsZFN0ZGluLFxuICAgICAgICBzdGRvdXQ6IGNoaWxkU3Rkb3V0XG4gICAgICB9ID0gY2hpbGQ7XG4gICAgICBhc3NlcnROb25OdWxsYWJsZShjaGlsZFN0ZGluLCAnQ2hpbGQgcHJvY2VzcyBzdGRpbiBpcyBub3QgYXZhaWxhYmxlJyk7XG4gICAgICBhc3NlcnROb25OdWxsYWJsZShjaGlsZFN0ZG91dCwgJ0NoaWxkIHByb2Nlc3Mgc3Rkb3V0IGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgICAgIGFzc2VydE5vbk51bGxhYmxlKGNoaWxkU3RkZXJyLCAnQ2hpbGQgcHJvY2VzcyBzdGRlcnIgaXMgbm90IGF2YWlsYWJsZScpO1xuXG4gICAgICBjaGlsZFN0ZGluLndyaXRlKHN0ZGluKTtcbiAgICAgIGNoaWxkU3RkaW4uZW5kKCk7XG5cbiAgICAgIGNoaWxkU3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBpZiAoIXF1aWV0KSB7XG4gICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Rkb3V0ICs9IGRhdGEudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGRTdGRvdXQub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgc3Rkb3V0ID0gdHJpbUVuZCh7XG4gICAgICAgICAgJHN0cmluZzogc3Rkb3V0LFxuICAgICAgICAgIHN1ZmZpeDogJ1xcbidcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGRTdGRlcnIub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGlmICghcXVpZXQpIHtcbiAgICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBzdGRlcnIgKz0gZGF0YS50b1N0cmluZygndXRmLTgnKTtcbiAgICAgIH0pO1xuXG4gICAgICBjaGlsZFN0ZGVyci5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBzdGRlcnIgPSB0cmltRW5kKHtcbiAgICAgICAgICAkc3RyaW5nOiBzdGRlcnIsXG4gICAgICAgICAgc3VmZml4OiAnXFxuJ1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoaWxkLm9uKCdjbG9zZScsIChleGl0Q29kZSwgZXhpdFNpZ25hbCkgPT4ge1xuICAgICAgaWYgKGV4aXRDb2RlICE9PSAwICYmICFpZ25vcmVFeGl0Q29kZSkge1xuICAgICAgICByZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKGRlc2NyaWJlRXhpdEZhaWx1cmUoe1xuICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgIGV4aXRDb2RlLFxuICAgICAgICAgICAgZXhpdFNpZ25hbCxcbiAgICAgICAgICAgIGlzSW50ZXJhY3RpdmUsXG4gICAgICAgICAgICBpc1F1aWV0OiBxdWlldCxcbiAgICAgICAgICAgIHN0ZGVycixcbiAgICAgICAgICAgIHN0ZG91dFxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghc2hvdWxkSW5jbHVkZURldGFpbHMpIHtcbiAgICAgICAgcmVzb2x2ZShzdGRvdXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgZXhpdENvZGUsXG4gICAgICAgIGV4aXRTaWduYWwsXG4gICAgICAgIHN0ZGVycixcbiAgICAgICAgc3Rkb3V0XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNoaWxkLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgaWYgKCFpZ25vcmVFeGl0Q29kZSkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDb3VsZCBub3QgcnVuIGNvbW1hbmQ6ICR7dHJ1bmNhdGVDb21tYW5kKGNvbW1hbmQpfVxcbiR7ZXJyb3IubWVzc2FnZX1gLCB7IGNhdXNlOiBlcnJvciB9KSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzaG91bGRJbmNsdWRlRGV0YWlscykge1xuICAgICAgICByZXNvbHZlKHN0ZG91dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIGV4aXRDb2RlOiBudWxsLFxuICAgICAgICBleGl0U2lnbmFsOiBudWxsLFxuICAgICAgICBzdGRlcnIsXG4gICAgICAgIHN0ZG91dFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEEgYG5vZGVgIENMSSBvcHRpb24gKHBhc3NlZCB2aWEgYE5PREVfT1BUSU9OU2ApIHRoYXQgcHJvdmlkZXMgYW4gaW4tbWVtb3J5IGBsb2NhbFN0b3JhZ2VgIHRvIGV2ZXJ5XG4gKiBzcGF3bmVkIGBub2RlYCBwcm9jZXNzLiBOb2RlIDIyKyBleHBvc2VzIGFuIGV4cGVyaW1lbnRhbCBXZWIgU3RvcmFnZSBgbG9jYWxTdG9yYWdlYCwgYnV0IGFjY2Vzc2luZyBpdFxuICogd2l0aG91dCBgLS1sb2NhbHN0b3JhZ2UtZmlsZWAgZW1pdHMgYW4gYEV4cGVyaW1lbnRhbFdhcm5pbmdgIGFuZCBsZWF2ZXMgYGxvY2FsU3RvcmFnZWAgdW5hdmFpbGFibGUuXG4gKiBQb2ludGluZyBpdCBhdCB0aGUgc3BlY2lhbCBgOm1lbW9yeTpgIGRhdGFiYXNlIGdpdmVzIGVhY2ggcHJvY2VzcyBhIHdvcmtpbmcsIG5vbi1wZXJzaXN0ZW50XG4gKiBgbG9jYWxTdG9yYWdlYCAobm8gZmlsZSBvbiBkaXNrLCBubyBzdGF0ZSBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMpIFx1MjAxNCBtYXRjaGluZyB0aGUgcmVhbCBPYnNpZGlhblxuICogKEVsZWN0cm9uKSBydW50aW1lIGFuZCBzaWxlbmNpbmcgdGhlIHdhcm5pbmcgYnkgYWRkcmVzc2luZyBpdHMgcm9vdCBjYXVzZSByYXRoZXIgdGhhbiBzdXBwcmVzc2luZyBpdC5cbiAqXG4gKiBJdCBpcyBhcHBsaWVkIG9ubHkgd2hlbiB0aGUgcnVubmluZyBgbm9kZWAgYWN0dWFsbHkgc3VwcG9ydHMgaXQgKHNlZSB7QGxpbmsgYnVpbGRDaGlsZEVudn0pOiBwYXNzaW5nXG4gKiBhbiBvcHRpb24gYG5vZGVgIGRvZXMgbm90IHJlY29nbml6ZSB2aWEgYE5PREVfT1BUSU9OU2AgbWFrZXMgaXQgcmVmdXNlIHRvIHN0YXJ0LCBzbyBhbiBvbGRlciBgbm9kZWBcbiAqICg8IDIyKSBtdXN0IGJlIGxlZnQgdW50b3VjaGVkLlxuICovXG5jb25zdCBMT0NBTF9TVE9SQUdFX05PREVfT1BUSU9OID0gJy0tbG9jYWxzdG9yYWdlLWZpbGU9Om1lbW9yeTonO1xuXG4vKipcbiAqIFRoZSBsb25nZXN0IGNvbW1hbmQgYSBmYWlsdXJlIG1lc3NhZ2UgcXVvdGVzIGJlZm9yZSB0cnVuY2F0aW5nIGl0LiBBIGJhdGNoZWQgY29tbWFuZCBjYW4gcnVuIHRvIHNldmVyYWxcbiAqIHRob3VzYW5kIGNoYXJhY3RlcnMgb2YgcGF0aHMsIHdoaWNoIHdvdWxkIGJ1cnkgdGhlIG9uZSBsaW5lIG9mIHRoZSBtZXNzYWdlIHRoYXQgc2F5cyB3aGF0IHdlbnQgd3JvbmcuXG4gKi9cbmNvbnN0IE1BWF9DT01NQU5EX0xFTkdUSF9JTl9NRVNTQUdFID0gNTAwO1xuXG4vKipcbiAqIE5hbWVzIG9mIHRoZSBXaW5kb3dzIE5UU1RBVFVTIGNvZGVzIGEgY3Jhc2hlZCBjaGlsZCBtb3N0IG9mdGVuIGV4aXRzIHdpdGgsIGZvciB0aGUgZmFpbHVyZSBtZXNzYWdlLiBBIGNvZGVcbiAqIG91dHNpZGUgdGhpcyBsaXN0IGlzIHN0aWxsIHJlY29nbml6ZWQgYXMgYW4gTlRTVEFUVVMgZmFpbHVyZSAoc2VlIHtAbGluayB0b050U3RhdHVzfSkgYW5kIHNob3duIGluIGhleDsgdGhlXG4gKiBuYW1lIGlzIGEgY291cnRlc3ksIG5vdCB0aGUgY2xhc3NpZmljYXRpb24uXG4gKi9cbmNvbnN0IE5UU1RBVFVTX05BTUVTOiBSZWFkb25seU1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKFtcbiAgWycweEMwMDAwMDA1JywgJ1NUQVRVU19BQ0NFU1NfVklPTEFUSU9OJ10sXG4gIFsnMHhDMDAwMDAxNycsICdTVEFUVVNfTk9fTUVNT1JZJ10sXG4gIFsnMHhDMDAwMDAxRCcsICdTVEFUVVNfSUxMRUdBTF9JTlNUUlVDVElPTiddLFxuICBbJzB4QzAwMDAwOTQnLCAnU1RBVFVTX0lOVEVHRVJfRElWSURFX0JZX1pFUk8nXSxcbiAgWycweEMwMDAwMEZEJywgJ1NUQVRVU19TVEFDS19PVkVSRkxPVyddLFxuICBbJzB4QzAwMDAxMzUnLCAnU1RBVFVTX0RMTF9OT1RfRk9VTkQnXSxcbiAgWycweEMwMDAwMTNBJywgJ1NUQVRVU19DT05UUk9MX0NfRVhJVCddLFxuICBbJzB4QzAwMDAzNzQnLCAnU1RBVFVTX0hFQVBfQ09SUlVQVElPTiddLFxuICBbJzB4QzAwMDA0MDknLCAnU1RBVFVTX1NUQUNLX0JVRkZFUl9PVkVSUlVOJ11cbl0pO1xuXG4vKipcbiAqIENoYXJhY3RlcnMgaGVsZCBiYWNrIGZyb20gdGhlIFdpbmRvd3MgY29tbWFuZC1saW5lIGJ1ZGdldCB3aGVuIHNpemluZyBhbiB7QGxpbmsgRXhlY0FyZ3VtZW50fSBiYXRjaCwgdG9cbiAqIGNvdmVyIGV4cGFuc2lvbnMgdGhhdCBoYXBwZW4gSU5TSURFIHRoZSBjb21tYW5kIHdlIHNwYXduIGFuZCBhcmUgdGhlcmVmb3JlIGludmlzaWJsZSBmcm9tIGhlcmUuXG4gKlxuICogQSBzaGltbWVkIGA8dG9vbD4gPGFyZ3NcdTIwMjY+YCBpbnZvY2F0aW9uIGlzIG5vdCBvbmUgYGNtZC5leGVgIGNvbW1hbmQgbGluZSBidXQgYSBjaGFpbiBvZiB0aGVtOiB0aGVcbiAqIGAuYmluLzx0b29sPi5jbWRgIHNoaW0gcmUtZXhwYW5kcyBgJSpgIGludG8gYSBmcmVzaCBgbm9kZSBcdTIwMjYgPHRvb2w+LWNsaS5qcyA8YXJnc1x1MjAyNj5gIGxpbmUsIGFuZCBlYWNoIGhvcFxuICogcmUtcXVvdGVzIHdoYXQgaXQgZm9yd2FyZHMuIEV2ZXJ5IG9uZSBvZiB0aG9zZSBsaW5lcyBpcyBzdWJqZWN0IHRvIHRoZSBzYW1lIDgxOTEgbGltaXQsIGFuZCBldmVyeSBvbmUgaXNcbiAqIGxvbmdlciB0aGFuIHRoZSBsaW5lIHdlIGFzc2VtYmxlZCBcdTIwMTQgYnV0IGJ5IGhvdyBtdWNoIGlzIHRoZSBjaGlsZCdzIGJ1c2luZXNzLCBub3Qgb3Vycywgc28gbm8gZm9ybXVsYSBjYW5cbiAqIGJlIHJpZ2h0LiBPbmx5IHRoZSBkZWxpYmVyYXRlIHNsYWNrIGJlbG93IGNhbi5cbiAqXG4gKiBgMjA0OGAgaXMgcm91Z2hseSBkb3VibGUgdGhlIG92ZXJoZWFkIG1lYXN1cmVkIHdoZW4gdGhpcyB3YXMgZm91bmQsIGJhY2sgd2hlbiBldmVyeSB0b29sIHdhc1xuICogYWRkaXRpb25hbGx5IGZyb250ZWQgYnkgYG5weGAgYW5kIHNvIHBhaWQgb25lIG1vcmUgcmUtZXhwYW5zaW9uIGhvcCB0aGFuIGl0IGRvZXMgbm93LiBPdmVyIGEgcmVwb3NpdG9yeSdzXG4gKiAxODcgbWFya2Rvd24gcGF0aHMsIGEgYG1hcmtkb3dubGludC1jbGkyIFx1MjAyNmAgbGluZSAqKmFzc2VtYmxlZCBhdCA3MDUxIGNoYXJzKiogXHUyMDE0IDExNDAgdW5kZXIgdGhlIGxpbWl0IFx1MjAxNFxuICogc3RpbGwgZGllZCB3aXRoIGBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nLmA7IHRoZSBzYW1lIHBheWxvYWQgc3BsaXQgaW4gdHdvIHJ1bnMgY2xlYW4uIE5vdGUgdGhlIHRvb2w6XG4gKiB0aGlzIGlzIG5vdCBzcGVjaWZpYyB0byBgbGlua2luYXRvcmAsIGl0IGlzIHRoZSBzaGFwZSBvZiBldmVyeSBzaGltLWZyb250ZWQgaW52b2NhdGlvbi5cbiAqXG4gKiBPdmVyLXJlc2VydmluZyBjb3N0cyBvbmUgZXh0cmEgc2VxdWVudGlhbCBpbnZvY2F0aW9uIG9mIGEgY29tbWFuZCB0aGF0IHdhcyBhbHJlYWR5IGdvaW5nIHRvIGJlIGJhdGNoZWQ7XG4gKiB1bmRlci1yZXNlcnZpbmcgY29zdHMgYSBsaW50IGZhaWx1cmUgdGhhdCBuYW1lcyBub3RoaW5nIHdyb25nIHdpdGggdGhlIGNvbnRlbnQuIFJhaXNlIGl0LCBuZXZlciBsb3dlciBpdCxcbiAqIGlmIHRoZSBzeW1wdG9tIHJldHVybnMuXG4gKi9cbmNvbnN0IFdJTkRPV1NfQ0hJTERfRVhQQU5TSU9OX1JFU0VSVkUgPSAyMDQ4O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBkZXNjcmliZUV4aXRGYWlsdXJlfS5cbiAqL1xuaW50ZXJmYWNlIERlc2NyaWJlRXhpdEZhaWx1cmVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvbW1hbmQgdGhhdCB3YXMgZXhlY3V0ZWQuXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBleGl0IGNvZGUgdGhlIGNoaWxkIHJlcG9ydGVkLCBvciBgbnVsbGAgd2hlbiBpdCBkaWQgbm90IGV4aXQgb24gaXRzIG93bi5cbiAgICovXG4gIHJlYWRvbmx5IGV4aXRDb2RlOiBudWxsIHwgbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc2lnbmFsIHRoYXQgdGVybWluYXRlZCB0aGUgY2hpbGQsIGlmIGFueS5cbiAgICovXG4gIHJlYWRvbmx5IGV4aXRTaWduYWw6IE5vZGVKUy5TaWduYWxzIHwgbnVsbDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY2hpbGQncyBzdGRpbyB3YXMgYXR0YWNoZWQgdG8gdGhlIHRlcm1pbmFsLCBzbyBub3RoaW5nIHdhcyBjYXB0dXJlZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzSW50ZXJhY3RpdmU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNoaWxkJ3Mgb3V0cHV0IHdhcyBzdXBwcmVzc2VkLCBzbyB0aGUgdXNlciBoYXMgbm90IHNlZW4gaXQuXG4gICAqL1xuICByZWFkb25seSBpc1F1aWV0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FwdHVyZWQgc3RhbmRhcmQgZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBzdGRlcnI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNhcHR1cmVkIHN0YW5kYXJkIG91dHB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZG91dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBleGVjdXRlQmF0Y2hlc30uXG4gKi9cbmludGVyZmFjZSBFeGVjdXRlQmF0Y2hlc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYmFzZSBjb21tYW5kIHdpdGhvdXQgYmF0Y2hlZCBhcmdzLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUNvbW1hbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGJhdGNoZXMgb2YgYXJncy5cbiAgICovXG4gIHJlYWRvbmx5IGJhdGNoZXM6IHN0cmluZ1tdW107XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zOiBFeGVjT3B0aW9ucztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgc3Bhd25WaWFTaGVsbH0uXG4gKi9cbmludGVyZmFjZSBTcGF3blZpYVNoZWxsUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHN0cmluZyB0byBleGVjdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBjd2Q6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbWVyZ2VkIG92ZXIgdGhlIGluaGVyaXRlZCBjaGlsZCBlbnZpcm9ubWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGVudj86IE5vZGVKUy5Qcm9jZXNzRW52O1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGF0dGFjaGVzIHRoZSBjaGlsZCdzIHN0ZGlvIHRvIHRoZSB0ZXJtaW5hbCBpbnN0ZWFkIG9mIHBpcGluZyBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGlzSW50ZXJhY3RpdmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgYXJndW1lbnQgYXJyYXkgKGlmIGF2YWlsYWJsZSkuXG4gICAqL1xuICByZWFkb25seSByYXdBcmd1bWVudHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21tYW5kLWxpbmUgc3RyaW5nIGZyb20gYW4gYXJndW1lbnQgYXJyYXksIHF1b3RlZCBmb3IgdGhlIHNoZWxsIHRoYXRcbiAqIHtAbGluayBzcGF3blZpYVNoZWxsfSB3aWxsIHJvdXRlIHRocm91Z2ggb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKlxuICogT24gV2luZG93cyB0aGUgY29tbWFuZCBpcyBleGVjdXRlZCB2aWEgYGNtZC5leGVgLCBzbyBpdCB1c2VzIHRoZVxuICogYENvbW1hbmRMaW5lVG9Bcmd2V2AgY29udmVudGlvbiAoe0BsaW5rIHRvQ29tbWFuZExpbmV9KTsge0BsaW5rIHNwYXduVmlhU2hlbGx9XG4gKiB0aGVuIGFwcGxpZXMge0BsaW5rIGNtZEVzY2FwZUNvbW1hbmRMaW5lfSBvbiB0b3AgZm9yIGBjbWQuZXhlYCBtZXRhY2hhcmFjdGVycy5cbiAqIEVsc2V3aGVyZSB0aGUgY29tbWFuZCBpcyBleGVjdXRlZCB2aWEgYHNoIC1jYCwgc28gaXQgdXNlcyBQT1NJWCBzaW5nbGUtcXVvdGVcbiAqIHF1b3RpbmcgKHtAbGluayB0b1Bvc2l4Q29tbWFuZExpbmV9KSBhbmQgbmVlZHMgbm8gZnVydGhlciBlc2NhcGluZy5cbiAqXG4gKiBUaGUgcGxhdGZvcm0gYnJhbmNoIGhlcmUgTVVTVCBzdGF5IGluIHN5bmMgd2l0aCB0aGUgb25lIGluIHtAbGluayBzcGF3blZpYVNoZWxsfS5cbiAqXG4gKiBAcGFyYW0gJGFyZ3VtZW50cyAtIFRoZSBhcmd1bWVudCBhcnJheSB0byBxdW90ZSBhbmQgam9pbi5cbiAqIEByZXR1cm5zIFRoZSBxdW90ZWQgY29tbWFuZC1saW5lIHN0cmluZyBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0ncyBzaGVsbC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRDb21tYW5kTGluZSgkYXJndW1lbnRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gdG9Db21tYW5kTGluZSgkYXJndW1lbnRzKSA6IHRvUG9zaXhDb21tYW5kTGluZSgkYXJndW1lbnRzKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIG1lc3NhZ2UgYSBmYWlsZWQgY29tbWFuZCByZWplY3RzIHdpdGgsIHNheWluZyBub3Qgb25seSBUSEFUIGl0IGZhaWxlZCBidXQgSE9XLlxuICpcbiAqIFRoZSBtZXNzYWdlIHVzZWQgdG8gYmUgYENvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlIDxuPmAgcGx1cyBzdGRlcnIsIHdoYXRldmVyIHRoZSBjb2RlLiBTbyBhIGNoaWxkIHRoYXRcbiAqIGNyYXNoZWQgYmVmb3JlIHdyaXRpbmcgYSBieXRlIGFuZCBhIGxpbnRlciB0aGF0IGZvdW5kIHJlYWwgcHJvYmxlbXMgcmVhZCB0aGUgc2FtZSwgZGlmZmVyaW5nIG9ubHkgaW4gYVxuICogbnVtYmVyIG5vYm9keSByZWFkcyBhcyBhIHN0YXR1czogYSBXaW5kb3dzIGFjY2VzcyB2aW9sYXRpb24gYXJyaXZlcyBhcyBgZXhpdCBjb2RlIDMyMjEyMjU0NzdgIHdpdGggbm90aGluZ1xuICogYWZ0ZXIgaXQsIGFuZCB3aG9ldmVyIHJlYWRzIGl0IGdvZXMgbG9va2luZyBmb3IgYSBmaW5kaW5nIHRoYXQgZG9lcyBub3QgZXhpc3QuIFRoaXMgaXMgdGhlIGxhc3QgcG9pbnQgdGhhdFxuICogY2FuIHRlbGwgdGhlIHR3byBhcGFydCBcdTIwMTQgdGhlIGAuY21kYCBzaGltIGlzIHNwYXduZWQgZGlyZWN0bHksIHNvIHRoZSBjaGlsZCdzIHJhdyBjb2RlIGlzIHZpc2libGUgaGVyZSwgd2hpbGVcbiAqIGFuIGBucG0gcnVuYCBsYXllciBmdXJ0aGVyIG91dCBpcyBrbm93biB0byBsYXVuZGVyIGl0IGludG8gYSBwbGFpbiBgMWAuXG4gKlxuICogVHdvIHNpZ25hbHMgYXJlIHJlYWQsIGFuZCB0aGVpciBjb25qdW5jdGlvbiBpcyB3aGF0IGVhcm5zIHRoZSB3b3JkIFwiY3Jhc2hlZFwiOiB0aGUgdGVybWluYXRpb24gd2FzIGFibm9ybWFsXG4gKiAoYW4gTlRTVEFUVVMgZXJyb3IgY29kZSwgb3IgYSBzaWduYWwpLCBhbmQgbmVpdGhlciBzdHJlYW0gY2FycmllZCBhbnl0aGluZy4gQSB0b29sIGZhaWxpbmcgb24gaXRzIG93biB0ZXJtc1xuICogc2F5cyBzb21ldGhpbmc7IGEgY2hpbGQgdGhhdCBkaWVkIG1pZC1pbnN0cnVjdGlvbiBkb2VzIG5vdC4gVGhlIENBVVNFIG9mIHN1Y2ggYSBjcmFzaCBpcyBub3QgdGhpc1xuICogZnVuY3Rpb24ncyBidXNpbmVzcywgc28gdGhlIG1lc3NhZ2Ugb25seSBuYW1lcyBpdCBhbmQgc2F5cyB3aGF0IHRvIGRvLlxuICpcbiAqIFRoZSBgQ29tbWFuZCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgPG4+YCBwcmVmaXggaXMga2VwdCwgc28gYSBjYWxsZXIgbWF0Y2hpbmcgb24gaXQgc3RpbGwgbWF0Y2hlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZGVzY3JpYmluZyB0aGUgZmFpbGVkIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIFRoZSBmYWlsdXJlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGRlc2NyaWJlRXhpdEZhaWx1cmUocGFyYW1zOiBEZXNjcmliZUV4aXRGYWlsdXJlUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBjb21tYW5kLCBleGl0Q29kZSwgZXhpdFNpZ25hbCwgaXNJbnRlcmFjdGl2ZSwgaXNRdWlldCwgc3RkZXJyLCBzdGRvdXQgfSA9IHBhcmFtcztcbiAgY29uc3QgbnRTdGF0dXMgPSB0b050U3RhdHVzKGV4aXRDb2RlKTtcblxuICBsZXQgc3RhdHVzID0gYGV4aXQgY29kZSAke2V4aXRDb2RlID09PSBudWxsID8gJyhudWxsKScgOiBTdHJpbmcoZXhpdENvZGUpfWA7XG4gIGxldCBhYm5vcm1hbFJlYXNvbjogbnVsbCB8IHN0cmluZyA9IG51bGw7XG4gIGlmIChudFN0YXR1cyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IEhFWF9SQURJWCA9IDE2O1xuICAgIGNvbnN0IGhleCA9IGAweCR7bnRTdGF0dXMudG9TdHJpbmcoSEVYX1JBRElYKS50b1VwcGVyQ2FzZSgpfWA7XG4gICAgY29uc3QgbmFtZSA9IE5UU1RBVFVTX05BTUVTLmdldChoZXgpO1xuICAgIHN0YXR1cyArPSBgIChOVFNUQVRVUyAke25hbWUgPyBgJHtoZXh9ICR7bmFtZX1gIDogaGV4fSlgO1xuICAgIGFibm9ybWFsUmVhc29uID0gbmFtZSA9PT0gJ1NUQVRVU19DT05UUk9MX0NfRVhJVCcgPyAnd2FzIGludGVycnVwdGVkJyA6ICdjcmFzaGVkJztcbiAgfSBlbHNlIGlmIChleGl0U2lnbmFsICE9PSBudWxsKSB7XG4gICAgc3RhdHVzICs9IGAsIHRlcm1pbmF0ZWQgYnkgc2lnbmFsICR7ZXhpdFNpZ25hbH1gO1xuICAgIGFibm9ybWFsUmVhc29uID0gYHdhcyBraWxsZWQgYnkgJHtleGl0U2lnbmFsfWA7XG4gIH1cblxuICBjb25zdCBsaW5lcyA9IFtgQ29tbWFuZCBmYWlsZWQgd2l0aCAke3N0YXR1c31gLCBgQ29tbWFuZDogJHt0cnVuY2F0ZUNvbW1hbmQoY29tbWFuZCl9YF07XG5cbiAgaWYgKGFibm9ybWFsUmVhc29uICE9PSBudWxsKSB7XG4gICAgbGluZXMucHVzaChcbiAgICAgICFpc0ludGVyYWN0aXZlICYmIHN0ZG91dCA9PT0gJycgJiYgc3RkZXJyID09PSAnJ1xuICAgICAgICA/IGBUaGUgY2hpbGQgcHJvY2VzcyAke2Fibm9ybWFsUmVhc29ufSBiZWZvcmUgd3JpdGluZyBhbnl0aGluZyB0byBzdGRvdXQgb3Igc3RkZXJyLiBUaGlzIGlzIG5vdCBhIGZhaWx1cmUgdGhlIHRvb2wgcmVwb3J0ZWQgKG5vdCBhIGxpbnQgZmluZGluZywgbm90IGEgdHlwZSBlcnJvcik6IHJlLXJ1biB0aGUgY29tbWFuZC5gXG4gICAgICAgIDogYFRoZSBjaGlsZCBwcm9jZXNzICR7YWJub3JtYWxSZWFzb259IHJhdGhlciB0aGFuIGV4aXRpbmcgb24gaXRzIG93biwgc28gYW55IG91dHB1dCBpdCB3cm90ZSBtYXkgYmUgaW5jb21wbGV0ZS5gXG4gICAgKTtcbiAgfVxuXG4gIGlmIChzdGRvdXQgIT09ICcnKSB7XG4gICAgbGluZXMucHVzaChpc1F1aWV0ID8gYHN0ZG91dDpcXG4ke3N0ZG91dH1gIDogYHN0ZG91dDogJHtTdHJpbmcoc3Rkb3V0LnNwbGl0KCdcXG4nKS5sZW5ndGgpfSBsaW5lKHMpLCBwcmludGVkIGFib3ZlLmApO1xuICB9XG5cbiAgaWYgKHN0ZGVyciAhPT0gJycpIHtcbiAgICBsaW5lcy5wdXNoKGBzdGRlcnI6XFxuJHtzdGRlcnJ9YCk7XG4gIH1cblxuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYmF0Y2hlZCBjb21tYW5kcyBzZXF1ZW50aWFsbHkgYW5kIGNvbmNhdGVuYXRlcyB0aGVpciBvdXRwdXQuXG4gKlxuICogYGV4ZWNTdHJpbmdgIHJldHVybnMgYSBgc3RyaW5nYCBvciBhbiB7QGxpbmsgRXhlY1Jlc3VsdH0gZGVwZW5kaW5nIG9uIGBvcHRpb25zLnNob3VsZEluY2x1ZGVEZXRhaWxzYCwgc29cbiAqIGJvdGggc2hhcGVzIGFyZSB1bnBhY2tlZCBcdTIwMTQgcmVhZGluZyBvbmx5IHRoZSBgc3RyaW5nYCBvbmUgc2lsZW50bHkgdGhyZXcgYXdheSBldmVyeSBiYXRjaCdzIG91dHB1dCBpblxuICogZXhhY3RseSB0aGUgbW9kZSB0aGF0IGFza2VkIGZvciBpdC5cbiAqXG4gKiBBIGJhdGNoIHRoYXQgZXhpdHMgbm9uLXplcm8gbm9ybWFsbHkgcmVqZWN0czsgaXQgb25seSByZWFjaGVzIGhlcmUgd2hlbiBgc2hvdWxkSWdub3JlRXhpdENvZGVgIGFza2VkIGZvclxuICogaXQgdG8gYmUgcmVwb3J0ZWQgaW5zdGVhZC4gVGhlIGZpcnN0IHN1Y2ggZmFpbHVyZSBpcyB3aGF0IHRoZSBhZ2dyZWdhdGUgcmVwb3J0cywgc28gc3BsaXR0aW5nIGEgY29tbWFuZFxuICogaW50byBiYXRjaGVzIGNhbm5vdCB0dXJuIGEgZmFpbHVyZSBpbnRvIGEgc3VjY2VzcyBcdTIwMTQgZXhjZXB0IHRoYXQgYW4gYWJub3JtYWwgdGVybWluYXRpb24gKGEgY3Jhc2gsIGFcbiAqIHNpZ25hbCkgaW4gYSBsYXRlciBiYXRjaCBvdXRyYW5rcyBhbiBvcmRpbmFyeSBmYWlsdXJlIGluIGFuIGVhcmxpZXIgb25lLiBPdGhlcndpc2UgYSBjcmFzaCBpbiBiYXRjaCAyIGFmdGVyXG4gKiByZWFsIGZpbmRpbmdzIGluIGJhdGNoIDEgd291bGQgYWdncmVnYXRlIHRvIHRoZSBmaW5kaW5ncycgZXhpdCBjb2RlLCBhbmQgYSBjYWxsZXIgY2xhc3NpZnlpbmcgdGhlIHJlc3VsdFxuICogd291bGQgbmV2ZXIgbGVhcm4gdGhhdCBwYXJ0IG9mIHRoZSBpbnB1dCB3YXMgbm90IGNoZWNrZWQgYXQgYWxsLlxuICpcbiAqIFNpbGVudCBiYXRjaGVzIGNvbnRyaWJ1dGUgbm90aGluZyB0byB0aGUgam9pbmVkIG91dHB1dC4gYGV4ZWNTdHJpbmdgIGFscmVhZHkgdHJpbXMgZWFjaCByZXN1bHQncyB0cmFpbGluZ1xuICogbmV3bGluZSwgc28gam9pbmluZyBlbXB0eSBvbmVzIGJhY2sgaW4gd291bGQgcmVpbnRyb2R1Y2UgZXhhY3RseSB0aGUgYmxhbmstbGluZSBub2lzZSBpdCByZW1vdmVkIFx1MjAxNCBhXG4gKiBjb21tYW5kIHRoYXQgcHJpbnRlZCBub3RoaW5nIG11c3QgYWdncmVnYXRlIHRvIGAnJ2AsIG5vdCB0byBhIHJ1biBvZiBuZXdsaW5lcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBiYXRjaGVkIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNvbmNhdGVuYXRlZCByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVCYXRjaGVzKHBhcmFtczogRXhlY3V0ZUJhdGNoZXNQYXJhbXMpOiBQcm9taXNlPEV4ZWNSZXN1bHQgfCBzdHJpbmc+IHtcbiAgY29uc3QgeyBiYXNlQ29tbWFuZCwgYmF0Y2hlcywgb3B0aW9ucyB9ID0gcGFyYW1zO1xuICBjb25zdCBzdGRvdXRQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc3RkZXJyUGFydHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBmYWlsdXJlOiBFeGVjUmVzdWx0IHwgbnVsbCA9IG51bGw7XG5cbiAgZm9yIChjb25zdCBiYXRjaCBvZiBiYXRjaGVzKSB7XG4gICAgY29uc3QgYmF0Y2hDb21tYW5kID0gYCR7YmFzZUNvbW1hbmR9ICR7YnVpbGRDb21tYW5kTGluZShiYXRjaCl9YDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjU3RyaW5nKHtcbiAgICAgIGNvbW1hbmQ6IGJhdGNoQ29tbWFuZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHB1c2hJZk5vdEVtcHR5KHN0ZG91dFBhcnRzLCByZXN1bHQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcHVzaElmTm90RW1wdHkoc3Rkb3V0UGFydHMsIHJlc3VsdC5zdGRvdXQpO1xuICAgIHB1c2hJZk5vdEVtcHR5KHN0ZGVyclBhcnRzLCByZXN1bHQuc3RkZXJyKTtcbiAgICBpZiAocmVzdWx0LmV4aXRDb2RlICE9PSAwICYmIChmYWlsdXJlID09PSBudWxsIHx8ICghaXNBYm5vcm1hbFRlcm1pbmF0aW9uKGZhaWx1cmUpICYmIGlzQWJub3JtYWxUZXJtaW5hdGlvbihyZXN1bHQpKSkpIHtcbiAgICAgIGZhaWx1cmUgPSByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnMuc2hvdWxkSW5jbHVkZURldGFpbHNcbiAgICA/IHtcbiAgICAgIC8vIE5vdCBgZmFpbHVyZT8uZXhpdENvZGUgPz8gMGA6IGEgYmF0Y2gga2lsbGVkIGJ5IGEgc2lnbmFsIGhhcyBhIGBudWxsYCBjb2RlLCB3aGljaCBgPz9gIHdvdWxkIHJlcG9ydCBhcyBzdWNjZXNzLlxuICAgICAgZXhpdENvZGU6IGZhaWx1cmUgPT09IG51bGwgPyAwIDogZmFpbHVyZS5leGl0Q29kZSxcbiAgICAgIGV4aXRTaWduYWw6IGZhaWx1cmU/LmV4aXRTaWduYWwgPz8gbnVsbCxcbiAgICAgIHN0ZGVycjogc3RkZXJyUGFydHMuam9pbignXFxuJyksXG4gICAgICBzdGRvdXQ6IHN0ZG91dFBhcnRzLmpvaW4oJ1xcbicpXG4gICAgfVxuICAgIDogc3Rkb3V0UGFydHMuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogRGVmYXVsdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcGFzc2VkIHRvIGNoaWxkIHByb2Nlc3NlcywgcmVzb2x2ZWQgYXQgc3Bhd24gdGltZS5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgbm90IGEgbW9kdWxlLWxldmVsIGNvbnN0YW50LiBgLmVudmAgaXMgbG9hZGVkIGJ5IGBsb2FkRW52RmlsZUlmRXhpc3RzYCBmcm9tIGluc2lkZVxuICogYHdyYXBDbGlUYXNrYCwgYW5kIEVTTSBldmFsdWF0ZXMgZXZlcnkgaW1wb3J0IGJlZm9yZSB0aGUgZW50cnkgbW9kdWxlJ3MgZmlyc3Qgc3RhdGVtZW50IFx1MjAxNCBzbyBhXG4gKiBzbmFwc2hvdCB0YWtlbiBoZXJlIHdvdWxkIGFsd2F5cyBwcmVkYXRlIHRoZSBsb2FkLCBhbmQgZXZlcnkgc3Bhd25lZCBjaGlsZCB3b3VsZCBydW4gd2l0aG91dCB0aGVcbiAqIHJlcG8ncyBvd24gYC5lbnZgLiBOb3RoaW5nIHN1cmZhY2VkIHRoYXQgd2hpbGUgVml0ZXN0IDMgY29waWVkIHRoZSBgLmVudmAgaXQgbG9hZGVkIGludG8gdGhlXG4gKiB3b3JrZXIncyBgcHJvY2Vzcy5lbnZgOyBWaXRlc3QgNCB3cml0ZXMgdGhvc2UgdG8gYGltcG9ydC5tZXRhLmVudmAgb25seSwgbGVhdmluZyB0aGlzIHRoZSBzb2xlXG4gKiBwYXRoIGFuZCBhbiBlbXB0eSBvbmUuXG4gKlxuICogQHJldHVybnMgVGhlIGVudmlyb25tZW50IHRvIHBhc3MgdG8gc3Bhd25lZCBjaGlsZCBwcm9jZXNzZXMsIHJlZmxlY3RpbmcgYHByb2Nlc3MuZW52YCBhcyBpdCBzdGFuZHMgbm93LlxuICovXG5mdW5jdGlvbiBnZXRDaGlsZEVudigpOiBOb2RlSlMuUHJvY2Vzc0VudiB7XG4gIHJldHVybiBidWlsZENoaWxkRW52KHByb2Nlc3MuZW52LCBwcm9jZXNzLmFsbG93ZWROb2RlRW52aXJvbm1lbnRGbGFncyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBjb21tYW5kIGxpbmUgYXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2lsbCBhY3R1YWxseSBzZWUgaXQsIHdoaWNoIG9uIFdpbmRvd3MgaXNcbiAqIE5PVCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgcGFzc2VkIGluLlxuICpcbiAqIHtAbGluayBzcGF3blZpYVNoZWxsfSByb3V0ZXMgdGhlIGNvbW1hbmQgdGhyb3VnaCBgY21kLmV4ZWAsIGFuZCB0d28gdGhpbmdzIGFyZSBzcGVudCBiZXR3ZWVuIGhlcmUgYW5kXG4gKiB0aGVyZSwgbmVpdGhlciBvZiB0aGVtIHZpc2libGUgaW4gdGhlIGFzc2VtYmxlZCBjb21tYW5kOlxuICogLSBOb2RlJ3MgYHNwYXduKFx1MjAyNiwgeyBzaGVsbDogdHJ1ZSB9KWAgd3JhcHMgaXQgYXMgYDxjb21zcGVjPiAvZCAvcyAvYyBcIjxjb21tYW5kPlwiYC5cbiAqIC0ge0BsaW5rIGNtZEVzY2FwZUNvbW1hbmRMaW5lfSBgXmAtZXNjYXBlcyBldmVyeSBvbmUgb2YgYGNtZC5leGVgJ3MgbWV0YWNoYXJhY3RlcnMsIHdoaWNoIG9uIGEgbGlzdCBvZlxuICogICBxdW90ZWQgcGF0aHMgaXMgYSBmZXcgcGVyY2VudCBvZiB0aGUgd2hvbGUgKG1lYXN1cmVkOiArMjM2IGNoYXJzIG9uIGEgNzIxNi1jaGFyIGludm9jYXRpb24pLlxuICpcbiAqIEJvdGggYXJlIG91cnMgdG8gY29tcHV0ZSwgc28gdGhleSBhcmUgY29tcHV0ZWQgcmF0aGVyIHRoYW4gZ3Vlc3NlZC4gV2hhdCBpcyBOT1QgY29tcHV0YWJsZSBmcm9tIGhlcmUgaXNcbiAqIHdoYXQgdGhlIHNwYXduZWQgY29tbWFuZCBkb2VzIHRvIGl0cyBvd24gYXJndW1lbnRzIFx1MjAxNCBzZWUge0BsaW5rIFdJTkRPV1NfQ0hJTERfRVhQQU5TSU9OX1JFU0VSVkV9LlxuICpcbiAqIFRoZSBwbGF0Zm9ybSBicmFuY2ggaGVyZSBNVVNUIHN0YXkgaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4ge0BsaW5rIHNwYXduVmlhU2hlbGx9LlxuICpcbiAqIEBwYXJhbSBjb21tYW5kTGluZSAtIFRoZSBhc3NlbWJsZWQgY29tbWFuZCBsaW5lLCBiZWZvcmUgYW55IHNoZWxsIHdyYXBwaW5nLlxuICogQHJldHVybnMgVGhlIGxlbmd0aCBpbiBjaGFyYWN0ZXJzIG9mIHdoYXQgcmVhY2hlcyB0aGUgb3BlcmF0aW5nIHN5c3RlbS5cbiAqL1xuZnVuY3Rpb24gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgoY29tbWFuZExpbmU6IHN0cmluZyk6IG51bWJlciB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIGNvbW1hbmRMaW5lLmxlbmd0aDtcbiAgfVxuXG4gIGNvbnN0IGNvbXNwZWMgPSBwcm9jZXNzLmVudlsnY29tc3BlYyddID8/ICdjbWQuZXhlJztcbiAgY29uc3QgQ01EX1dSQVBQRVIgPSAnIC9kIC9zIC9jIFwiXCInO1xuICByZXR1cm4gY29tc3BlYy5sZW5ndGggKyBDTURfV1JBUFBFUi5sZW5ndGggKyBjb21tYW5kRXNjYXBlQ29tbWFuZExpbmUoY29tbWFuZExpbmUpLmxlbmd0aDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtYXggY29tbWFuZCBsaW5lIGxlbmd0aCB0byBzaXplIGFuIHtAbGluayBFeGVjQXJndW1lbnR9IGJhdGNoIGFnYWluc3QgXHUyMDE0IHRoZSBwbGF0Zm9ybSBtYXhpbXVtXG4gKiBsZXNzIHtAbGluayBXSU5ET1dTX0NISUxEX0VYUEFOU0lPTl9SRVNFUlZFfS5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgbW9yZSBjb25zZXJ2YXRpdmUgdGhhbiB7QGxpbmsgZ2V0TWF4Q29tbWFuZExlbmd0aH0sIGJlY2F1c2UgdGhlIHR3byBhbnN3ZXIgZGlmZmVyZW50XG4gKiBxdWVzdGlvbnMuIEV4Y2VlZGluZyB0aGUgcGxhaW4tY29tbWFuZCBsaW1pdCBpcyBhIGhhcmQgZmFpbHVyZSB0aGUgY2FsbGVyIGNhbm5vdCBhdm9pZCwgc28gdGhhdCBjaGVja1xuICogc3RheXMgZXhhY3QuIEV4Y2VlZGluZyB0aGUgYmF0Y2hpbmcgbGltaXQgb25seSBjb3N0cyBvbmUgZXh0cmEgaW52b2NhdGlvbiwgc28gdGhhdCBjaGVjayBtYXkgXHUyMDE0IGFuZFxuICogc2hvdWxkIFx1MjAxNCBsZWF2ZSByb29tIHRvIHNwYXJlLlxuICpcbiAqIEByZXR1cm5zIFRoZSBtYXggbGVuZ3RoIGluIGNoYXJhY3RlcnMgYXZhaWxhYmxlIHRvIGEgc2luZ2xlIGJhdGNoLlxuICovXG5mdW5jdGlvbiBnZXRNYXhCYXRjaENvbW1hbmRMZW5ndGgoKTogbnVtYmVyIHtcbiAgcmV0dXJuIGdldE1heENvbW1hbmRMZW5ndGgoKSAtIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gV0lORE9XU19DSElMRF9FWFBBTlNJT05fUkVTRVJWRSA6IDApO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIG1heCBjb21tYW5kIGxpbmUgbGVuZ3RoLlxuICpcbiAqIEByZXR1cm5zIFRoZSBtYXggY29tbWFuZCBsZW5ndGggaW4gY2hhcmFjdGVycy5cbiAqL1xuZnVuY3Rpb24gZ2V0TWF4Q29tbWFuZExlbmd0aCgpOiBudW1iZXIge1xuICBjb25zdCBXSU5ET1dTX01BWF9DT01NQU5EX0xFTkdUSCA9IDgxOTE7XG4gIGNvbnN0IFVOSVhfTUFYX0NPTU1BTkRfTEVOR1RIID0gMTMxXzA3MjtcbiAgcmV0dXJuIHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyBXSU5ET1dTX01BWF9DT01NQU5EX0xFTkdUSCA6IFVOSVhfTUFYX0NPTU1BTkRfTEVOR1RIO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgYSBjb21tYW5kIGFycmF5IHRoYXQgbWF5IGNvbnRhaW4gYW4ge0BsaW5rIEV4ZWNBcmd1bWVudH0uXG4gKiBSZXR1cm5zIGEgUHJvbWlzZSBpZiBiYXRjaGluZyBpcyBuZWVkZWQsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBjb21tYW5kXG4gKiBoYXMgbm8gRXhlY0FyZyBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCBub3JtYWxseS5cbiAqXG4gKiBAcGFyYW0gcGFydHMgLSBUaGUgY29tbWFuZCBwYXJ0cy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGV4ZWMgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSBpZiBiYXRjaGluZyBpcyBoYW5kbGVkLCBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlQmF0Y2hlZENvbW1hbmQocGFydHM6IENvbW1hbmRQYXJ0W10sIG9wdGlvbnM6IEV4ZWNPcHRpb25zKTogUHJvbWlzZTxFeGVjUmVzdWx0IHwgc3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGV4ZWNBcmd1bWVudHMgPSBwYXJ0cy5maWx0ZXIoaXNFeGVjQXJndW1lbnQpO1xuICBpZiAoZXhlY0FyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChleGVjQXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdPbmx5IG9uZSBFeGVjQXJnIHdpdGggYmF0Y2hlZEFyZ3VtZW50cyBpcyBhbGxvd2VkIHBlciBjb21tYW5kJykpO1xuICB9XG5cbiAgY29uc3QgZXhlY0FyZ3VtZW50ID0gZXhlY0FyZ3VtZW50c1swXTtcbiAgYXNzZXJ0Tm9uTnVsbGFibGUoZXhlY0FyZ3VtZW50KTtcbiAgY29uc3Qgc3RhdGljUGFydHMgPSBwYXJ0cy5maWx0ZXIoKHBhcnQpOiBwYXJ0IGlzIHN0cmluZyA9PiB0eXBlb2YgcGFydCA9PT0gJ3N0cmluZycpO1xuICBjb25zdCBiYXNlQ29tbWFuZCA9IGJ1aWxkQ29tbWFuZExpbmUoc3RhdGljUGFydHMpO1xuICBjb25zdCBtYXhDb21tYW5kTGVuZ3RoID0gZ2V0TWF4QmF0Y2hDb21tYW5kTGVuZ3RoKCk7XG5cbiAgLy8gVHJ5IGV4cGFuZGluZyBhbGwgYXJncyBpbmxpbmVcbiAgY29uc3QgZnVsbENvbW1hbmQgPSBgJHtiYXNlQ29tbWFuZH0gJHtidWlsZENvbW1hbmRMaW5lKFsuLi5leGVjQXJndW1lbnQuYmF0Y2hlZEFyZ3VtZW50c10pfWA7XG4gIGlmIChnZXRFZmZlY3RpdmVDb21tYW5kTGluZUxlbmd0aChmdWxsQ29tbWFuZCkgPD0gbWF4Q29tbWFuZExlbmd0aCkge1xuICAgIHJldHVybiBleGVjU3RyaW5nKHtcbiAgICAgIGNvbW1hbmQ6IGZ1bGxDb21tYW5kLFxuICAgICAgb3B0aW9uc1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU3BsaXQgaW50byBiYXRjaGVzXG4gIGNvbnN0IGJhdGNoZXM6IHN0cmluZ1tdW10gPSBbXTtcbiAgbGV0IGN1cnJlbnRCYXRjaDogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIGV4ZWNBcmd1bWVudC5iYXRjaGVkQXJndW1lbnRzKSB7XG4gICAgY29uc3QgdGVudGF0aXZlID0gYCR7YmFzZUNvbW1hbmR9ICR7YnVpbGRDb21tYW5kTGluZShbLi4uY3VycmVudEJhdGNoLCBhcmd1bWVudF0pfWA7XG4gICAgaWYgKGdldEVmZmVjdGl2ZUNvbW1hbmRMaW5lTGVuZ3RoKHRlbnRhdGl2ZSkgPiBtYXhDb21tYW5kTGVuZ3RoKSB7XG4gICAgICBpZiAoY3VycmVudEJhdGNoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCBzcGxpdCBjb21tYW5kIGludG8gYmF0Y2hlczogYSBzaW5nbGUgYXJndW1lbnQgKCR7U3RyaW5nKGFyZ3VtZW50Lmxlbmd0aCl9IGNoYXJzKSBwbHVzIHRoZSBiYXNlIGNvbW1hbmQgKCR7U3RyaW5nKGJhc2VDb21tYW5kLmxlbmd0aCl9IGNoYXJzKSBleGNlZWRzIHRoZSBtYXggYmF0Y2ggY29tbWFuZCBsZW5ndGggKCR7U3RyaW5nKG1heENvbW1hbmRMZW5ndGgpfSkuYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJhdGNoZXMucHVzaChjdXJyZW50QmF0Y2gpO1xuICAgICAgY3VycmVudEJhdGNoID0gW2FyZ3VtZW50XTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudEJhdGNoLnB1c2goYXJndW1lbnQpO1xuICAgIH1cbiAgfVxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQWx3YXlzIHRydWUgYWZ0ZXIgdGhlIGxvb3A7IGJhdGNoZWRBcmd1bWVudHMgaXMgbm9uLWVtcHR5IGF0IHRoaXMgcG9pbnQuICovXG4gIGlmIChjdXJyZW50QmF0Y2gubGVuZ3RoID4gMCkge1xuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgYmF0Y2hlcy5wdXNoKGN1cnJlbnRCYXRjaCk7XG4gIH1cblxuICByZXR1cm4gZXhlY3V0ZUJhdGNoZXMoe1xuICAgIGJhc2VDb21tYW5kLFxuICAgIGJhdGNoZXMsXG4gICAgb3B0aW9uc1xuICB9KTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHJlc3VsdCByZWNvcmRzIGFuIGFibm9ybWFsIHRlcm1pbmF0aW9uIFx1MjAxNCBhbiBOVFNUQVRVUyBlcnJvciBjb2RlIG9yIGEgc2lnbmFsIFx1MjAxNCByYXRoZXIgdGhhblxuICogdGhlIGNoaWxkIGV4aXRpbmcgb24gaXRzIG93biB3aXRoIGEgY29kZSBvZiBpdHMgY2hvb3NpbmcuXG4gKlxuICogQHBhcmFtIHJlc3VsdCAtIFRoZSByZXN1bHQgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjaGlsZCB0ZXJtaW5hdGVkIGFibm9ybWFsbHkuXG4gKi9cbmZ1bmN0aW9uIGlzQWJub3JtYWxUZXJtaW5hdGlvbihyZXN1bHQ6IEV4ZWNSZXN1bHQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJlc3VsdC5leGl0U2lnbmFsICE9PSBudWxsIHx8IHRvTnRTdGF0dXMocmVzdWx0LmV4aXRDb2RlKSAhPT0gbnVsbDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBjb21tYW5kIHBhcnQgaXMgYW4ge0BsaW5rIEV4ZWNBcmd1bWVudH0uXG4gKlxuICogQHBhcmFtIHBhcnQgLSBUaGUgY29tbWFuZCBwYXJ0IHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcGFydCBpcyBhbiBFeGVjQXJnLlxuICovXG5mdW5jdGlvbiBpc0V4ZWNBcmd1bWVudChwYXJ0OiBDb21tYW5kUGFydCk6IHBhcnQgaXMgRXhlY0FyZ3VtZW50IHtcbiAgcmV0dXJuIHR5cGVvZiBwYXJ0ID09PSAnb2JqZWN0JyAmJiAnYmF0Y2hlZEFyZ3VtZW50cycgaW4gcGFydDtcbn1cblxuLyoqXG4gKiBBcHBlbmRzIGEgYmF0Y2gncyBjYXB0dXJlZCBvdXRwdXQgdG8gdGhlIGFjY3VtdWxhdG9yLCBza2lwcGluZyBhbiBlbXB0eSBvbmUgc28gdGhlIGV2ZW50dWFsIGpvaW4gZG9lcyBub3RcbiAqIGZhYnJpY2F0ZSBibGFuayBsaW5lcyBmb3IgYmF0Y2hlcyB0aGF0IHByaW50ZWQgbm90aGluZy5cbiAqXG4gKiBAcGFyYW0gYWNjdW11bGF0b3IgLSBUaGUgY29sbGVjdGVkIG91dHB1dHMgc28gZmFyLlxuICogQHBhcmFtIG91dHB1dCAtIFRoZSBvdXRwdXQgb2YgYSBzaW5nbGUgYmF0Y2guXG4gKi9cbmZ1bmN0aW9uIHB1c2hJZk5vdEVtcHR5KGFjY3VtdWxhdG9yOiBzdHJpbmdbXSwgb3V0cHV0OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKG91dHB1dCAhPT0gJycpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG91dHB1dCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTcGF3bnMgYSBjaGlsZCBwcm9jZXNzIHZpYSB0aGUgYXBwcm9wcmlhdGUgc2hlbGwuXG4gKlxuICogT24gV2luZG93cywgaWYgdGhlIGNvbW1hbmQgY29udGFpbnMgbmV3bGluZXMgKHdoaWNoIGBjbWQuZXhlYCBjYW5ub3QgaGFuZGxlKVxuICogYW5kIHRoZSByYXcgYXJncyBhcnJheSBpcyBhdmFpbGFibGUsIHNwYXducyB0aGUgcHJvY2VzcyBkaXJlY3RseSB3aXRob3V0XG4gKiBhbnkgc2hlbGwgXHUyMDE0IHBhc3NpbmcgYXJncyB2aWEgYENyZWF0ZVByb2Nlc3NgLCB3aGljaCBhdm9pZHMgYWxsIHF1b3RpbmcgaXNzdWVzLlxuICpcbiAqIE9uIFdpbmRvd3MgKGNtZC5leGUgcGF0aCksIGFwcGxpZXMgYF5gLWVzY2FwaW5nIGZvciBjbWQgbWV0YWNoYXJhY3RlcnMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBzcGF3bmluZyB0aGUgY2hpbGQgcHJvY2Vzcy5cbiAqIEByZXR1cm5zIFRoZSBzcGF3bmVkIGNoaWxkIHByb2Nlc3MuXG4gKi9cbmZ1bmN0aW9uIHNwYXduVmlhU2hlbGwocGFyYW1zOiBTcGF3blZpYVNoZWxsUGFyYW1zKTogQ2hpbGRQcm9jZXNzIHtcbiAgY29uc3QgeyBjb21tYW5kLCBjd2QsIGVudjogZXh0cmFFbnYsIGlzSW50ZXJhY3RpdmUgPSBmYWxzZSwgcmF3QXJndW1lbnRzIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVudjogTm9kZUpTLlByb2Nlc3NFbnYgPSB7XG4gICAgLi4uZ2V0Q2hpbGRFbnYoKSxcbiAgICAuLi5leHRyYUVudlxuICB9O1xuICBjb25zdCBzdGRpbzogJ2luaGVyaXQnIHwgJ3BpcGUnID0gaXNJbnRlcmFjdGl2ZSA/ICdpbmhlcml0JyA6ICdwaXBlJztcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgJiYgY29tbWFuZC5pbmNsdWRlcygnXFxuJykpIHtcbiAgICBpZiAoIXJhd0FyZ3VtZW50cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21tYW5kcyBjb250YWluaW5nIG5ld2xpbmVzIGNhbm5vdCBiZSBleGVjdXRlZCB0aHJvdWdoIGNtZC5leGUgb24gV2luZG93cy4gUGFzcyBhbiBhcmd1bWVudCBhcnJheSBpbnN0ZWFkIG9mIGEgc3RyaW5nLicpO1xuICAgIH1cbiAgICBjb25zdCBbcHJvZ3JhbSwgLi4uJGFyZ3VtZW50c10gPSByYXdBcmd1bWVudHM7XG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUocHJvZ3JhbSwgJ0NvbW1hbmQgYXJyYXkgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgICByZXR1cm4gc3Bhd24ocHJvZ3JhbSwgJGFyZ3VtZW50cywge1xuICAgICAgY3dkLFxuICAgICAgZW52LFxuICAgICAgc3RkaW9cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHNoZWxsQ29tbWFuZCA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyBjb21tYW5kRXNjYXBlQ29tbWFuZExpbmUoY29tbWFuZCkgOiBjb21tYW5kO1xuICByZXR1cm4gc3Bhd24oc2hlbGxDb21tYW5kLCBbXSwge1xuICAgIGN3ZCxcbiAgICBlbnYsXG4gICAgc2hlbGw6IHRydWUsXG4gICAgc3RkaW9cbiAgfSk7XG59XG5cbi8qKlxuICogUmVhZHMgYW4gZXhpdCBjb2RlIGFzIGEgV2luZG93cyBOVFNUQVRVUyBlcnJvciwgaWYgaXQgaXMgb25lLlxuICpcbiAqIEEgY3Jhc2hlZCBwcm9jZXNzIG9uIFdpbmRvd3MgZXhpdHMgd2l0aCB0aGUgTlRTVEFUVVMgb2YgdGhlIGV4Y2VwdGlvbiB0aGF0IGtpbGxlZCBpdCwgYW5kIGEgYC5jbWRgIHNoaW1cbiAqIGZvcndhcmRzIGl0cyBpbm5lciBwcm9jZXNzJ3MgY29kZSwgc28gYSBjcmFzaGVkIGBub2RlLmV4ZWAgYXJyaXZlcyBoZXJlIGludGFjdCBcdTIwMTQgYDB4QzAwMDAwMDVgIGFzXG4gKiBgMzIyMTIyNTQ3N2AuIFRoZSB0ZXN0IGlzIHRoZSBOVFNUQVRVUyBsYXlvdXQgcmF0aGVyIHRoYW4gYSBiYXJlIGA+PSAweEMwMDAwMDAwYDogdGhlIHRvcCB0d28gYml0cyBhcmUgdGhlXG4gKiBlcnJvciBzZXZlcml0eSBhbmQgdGhlIG5leHQgb25lIGlzIHRoZSBjdXN0b21lciBmbGFnLCB3aGljaCBtdXN0IGJlIGNsZWFyLiBUaGF0IGtlZXBzIG91dCB0d28gY29kZXMgYSBiYXJlXG4gKiByYW5nZSB3b3VsZCBtaXNyZWFkIFx1MjAxNCBgcHJvY2Vzcy5leGl0KC0xKWAsIHdoaWNoIFdpbmRvd3MgcmVwb3J0cyBhcyBgMHhGRkZGRkZGRmAsIGFuZCB0aGUgYDB4RTA2RDczNjNgIG9mIGFuXG4gKiB1bmhhbmRsZWQgQysrIGV4Y2VwdGlvbiwgd2hpY2ggaXMgYSBjcmFzaCBidXQgbm90IGFuIE5UU1RBVFVTLiBBIHNpZ25lZCByZWFkaW5nIG9mIHRoZSBzYW1lIGNvZGUgaXMgYWNjZXB0ZWRcbiAqIHRvby4gTm8gbGludGVyLCBjb21waWxlciBvciB0ZXN0IHJ1bm5lciByZXR1cm5zIGEgY29kZSBvZiB0aGlzIHNoYXBlIGFzIGEgY291bnQgb2YgZmluZGluZ3MuXG4gKlxuICogQHBhcmFtIGV4aXRDb2RlIC0gVGhlIGV4aXQgY29kZSB0aGUgY2hpbGQgcmVwb3J0ZWQuXG4gKiBAcmV0dXJucyBUaGUgY29kZSBhcyBhbiB1bnNpZ25lZCBOVFNUQVRVUywgb3IgYG51bGxgIHdoZW4gaXQgaXMgbm90IGFuIE5UU1RBVFVTIGVycm9yLlxuICovXG5mdW5jdGlvbiB0b050U3RhdHVzKGV4aXRDb2RlOiBudWxsIHwgbnVtYmVyKTogbnVsbCB8IG51bWJlciB7XG4gIGlmIChleGl0Q29kZSA9PT0gbnVsbCB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIoZXhpdENvZGUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBFcnJvciBzZXZlcml0eSAodG9wIHR3byBiaXRzIHNldCkgd2l0aCB0aGUgY3VzdG9tZXIgYml0IGNsZWFyIGlzIGV4YWN0bHkgdGhlIHJhbmdlIFsweEMwMDAwMDAwLCAweEUwMDAwMDAwKS5cbiAgY29uc3QgTlRTVEFUVVNfRVJST1JfU1RBUlQgPSAweEMwXzAwXzAwXzAwO1xuICBjb25zdCBOVFNUQVRVU19FUlJPUl9FTkQgPSAweEUwXzAwXzAwXzAwO1xuICBjb25zdCBVSU5UMzJfUkFOR0UgPSAweDFfMDBfMDBfMDBfMDA7XG4gIGNvbnN0IHVuc2lnbmVkID0gZXhpdENvZGUgPCAwID8gZXhpdENvZGUgKyBVSU5UMzJfUkFOR0UgOiBleGl0Q29kZTtcbiAgcmV0dXJuIHVuc2lnbmVkID49IE5UU1RBVFVTX0VSUk9SX1NUQVJUICYmIHVuc2lnbmVkIDwgTlRTVEFUVVNfRVJST1JfRU5EID8gdW5zaWduZWQgOiBudWxsO1xufVxuXG4vKipcbiAqIFNob3J0ZW5zIGEgY29tbWFuZCBmb3IgcXVvdGluZyBpbiBhbiBlcnJvciBtZXNzYWdlLCBrZWVwaW5nIGl0cyBzdGFydCwgd2hpY2ggbmFtZXMgdGhlIHByb2dyYW0uXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBzaG9ydGVuLlxuICogQHJldHVybnMgVGhlIGNvbW1hbmQsIGN1dCB0byB7QGxpbmsgTUFYX0NPTU1BTkRfTEVOR1RIX0lOX01FU1NBR0V9IGNoYXJhY3RlcnMgcGx1cyBhbiBlbGxpcHNpcyB3aGVuIGxvbmdlci5cbiAqL1xuZnVuY3Rpb24gdHJ1bmNhdGVDb21tYW5kKGNvbW1hbmQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBjb21tYW5kLmxlbmd0aCA+IE1BWF9DT01NQU5EX0xFTkdUSF9JTl9NRVNTQUdFID8gYCR7Y29tbWFuZC5zbGljZSgwLCBNQVhfQ09NTUFORF9MRU5HVEhfSU5fTUVTU0FHRSl9XHUyMDI2YCA6IGNvbW1hbmQ7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSxtQkFBK0I7QUFDL0IsMEJBQTRDO0FBQzVDLG9CQUF3QjtBQUN4Qix5QkFBa0M7QUFDbEMsZ0NBQXNCO0FBQ3RCLDBCQUFvQjtBQUVwQix1QkFJTztBQTBKQSxTQUFTLGlCQUFpQixxQkFBeUMsUUFBd0I7QUFDaEcsUUFBTSxXQUFXLHVCQUF1QixJQUFJLEtBQUs7QUFDakQsTUFBSSxZQUFZLElBQUk7QUFDbEIsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLFFBQVEsTUFBTSxLQUFLLEVBQUUsU0FBUyxNQUFNLElBQUksVUFBVSxHQUFHLE9BQU8sSUFBSSxNQUFNO0FBQy9FO0FBYU8sU0FBUyxjQUFjLFNBQTRCLDZCQUFxRTtBQUM3SCxTQUFPO0FBQUEsSUFDTCxjQUFjO0FBQUEsSUFDZCxHQUFHO0FBQUEsSUFDSCxHQUFJLDRCQUE0QixJQUFJLHFCQUFxQixLQUFLLEVBQUUsY0FBYyxpQkFBaUIsUUFBUSxjQUFjLEdBQUcseUJBQXlCLEVB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
433
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9leGVjLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgZXhlY3V0aW5nIGNvbW1hbmRzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuaW1wb3J0IHsgZ2V0TGliRGVidWdnZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGVidWcnO1xuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyB0cmltRW5kIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQge1xuICBjbWRFc2NhcGVDb21tYW5kTGluZSBhcyBjb21tYW5kRXNjYXBlQ29tbWFuZExpbmUsXG4gIHRvQ29tbWFuZExpbmUsXG4gIHRvUG9zaXhDb21tYW5kTGluZVxufSBmcm9tICcuL2NsaS11dGlscy50cyc7XG5cbi8qKlxuICogQSBjb21tYW5kIHBhcnQ6IGVpdGhlciBhIHBsYWluIHN0cmluZyBvciBhbiB7QGxpbmsgRXhlY0FyZ3VtZW50fSB3aXRoIGJhdGNoZWQgYXJndW1lbnRzLlxuICovXG5leHBvcnQgdHlwZSBDb21tYW5kUGFydCA9IEV4ZWNBcmd1bWVudCB8IHN0cmluZztcblxuLyoqXG4gKiBBIGNvbW1hbmQgYXJndW1lbnQgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgYXJncyB0byBiZSBiYXRjaGVkLlxuICogSWYgdGhlIGV4cGFuZGVkIGNvbW1hbmQgZXhjZWVkcyB0aGUgcGxhdGZvcm0ncyBtYXggY29tbWFuZCBsZW5ndGgsXG4gKiB0aGUgYmF0Y2hlZCBhcmdzIGFyZSBzcGxpdCBpbnRvIHNlcXVlbnRpYWwgZXhlY3V0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjQXJndW1lbnQge1xuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyB0byBiYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IGJhdGNoZWRBcmd1bWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBleGVjfSB0aGF0IHJldHVybiBkZXRhaWxlZCByZXN1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNEZXRhaWxlZE9wdGlvbnMgZXh0ZW5kcyBFeGVjT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNdXN0IGJlIGB0cnVlYCB0byByZWNlaXZlIGRldGFpbGVkIHJlc3VsdHMuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRGV0YWlsczogdHJ1ZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBleGVjdXRpbmcgYSBjb21tYW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgY3VycmVudCB3b3JraW5nIGZvbGRlciBmb3IgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGNoaWxkIHByb2Nlc3MsIG1lcmdlZCBvdmVyIHRoZSBpbmhlcml0ZWQgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB7fWBcbiAgICovXG4gIHJlYWRvbmx5IGVudj86IE5vZGVKUy5Qcm9jZXNzRW52O1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGF0dGFjaGVzIHRoZSBjaGlsZCBwcm9jZXNzJ3Mgc3RkaW8gZGlyZWN0bHkgdG8gdGhlIHRlcm1pbmFsIChgc3RkaW86ICdpbmhlcml0J2ApIGluc3RlYWRcbiAgICogb2YgY2FwdHVyaW5nIGl0LiBVc2UgZm9yIGxvbmctcnVubmluZyBvciBpbnRlcmFjdGl2ZSBjb21tYW5kcyBzdWNoIGFzIGRldiBzZXJ2ZXJzIGFuZCB3YXRjaCBtb2RlLlxuICAgKiBCZWNhdXNlIHRoZSBvdXRwdXQgaXMgbm90IGNhcHR1cmVkLCB0aGUgcmVzb2x2ZWQgc3Rkb3V0IGlzIGFuIGVtcHR5IHN0cmluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNJbnRlcmFjdGl2ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgc3VwcHJlc3NlcyB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBpc1F1aWV0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGNvbW1hbmQgZmFpbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRmFpbElmQ2FsbGVkRnJvbU91dHNpZGVSb290PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBpZ25vcmVzIHRoZSBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZElnbm9yZUV4aXRDb2RlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYGZhbHNlYCwgb25seSByZXR1cm5zIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVEZXRhaWxzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW4gaW5wdXQgdG8gYmUgcGFzc2VkIHRvIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSBzdGRpbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHJlc3VsdCBvZiB7QGxpbmsgZXhlY30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBBbiBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQuIEEgdmFsdWUgb2YgYG51bGxgIGluZGljYXRlcyB0aGF0IHRoZSBwcm9jZXNzIGRpZCBub3QgZXhpdCBub3JtYWxseS5cbiAgICovXG4gIHJlYWRvbmx5IGV4aXRDb2RlOiBudWxsIHwgbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHNpZ25hbCB0aGF0IGNhdXNlZCB0aGUgcHJvY2VzcyB0byBiZSB0ZXJtaW5hdGVkLiBBIHZhbHVlIG9mIGBudWxsYCBpbmRpY2F0ZXMgdGhhdCBubyBzaWduYWwgd2FzIHJlY2VpdmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhpdFNpZ25hbDogTm9kZUpTLlNpZ25hbHMgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBIHN0YW5kYXJkIGVycm9yIG91dHB1dCBmcm9tIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RkZXJyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3RhbmRhcmQgb3V0cHV0IGZyb20gdGhlIGNvbW1hbmQuXG4gICAqL1xuICByZWFkb25seSBzdGRvdXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZXhlY30gdGhhdCByZXR1cm4gb25seSBzdGRvdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY1NpbXBsZU9wdGlvbnMgZXh0ZW5kcyBFeGVjT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNdXN0IGJlIGBmYWxzZWAgb3Igb21pdHRlZCB0byByZWNlaXZlIG9ubHkgc3Rkb3V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRGV0YWlscz86IGZhbHNlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBleGVjU3RyaW5nfS5cbiAqL1xuaW50ZXJmYWNlIEV4ZWNTdHJpbmdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvbW1hbmQgc3RyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlYyBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9ucz86IEV4ZWNPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgYXJndW1lbnQgYXJyYXkgKGlmIGF2YWlsYWJsZSksIHVzZWQgYnkgdGhlIFBvd2VyU2hlbGxcbiAgICogZmFsbGJhY2sgcGF0aCB0byBxdW90ZSBhcmd1bWVudHMgd2l0aCBQb3dlclNoZWxsLW5hdGl2ZSBzaW5nbGUgcXVvdGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgcmF3QXJndW1lbnRzPzogc3RyaW5nW107XG59XG4vKipcbiAqIEFwcGVuZHMgYSBzaW5nbGUgYG5vZGVgIENMSSBvcHRpb24gdG8gYSBgTk9ERV9PUFRJT05TYCBzdHJpbmcsIHByZXNlcnZpbmcgYW55IG9wdGlvbnMgYWxyZWFkeSBwcmVzZW50LlxuICpcbiAqIEBwYXJhbSBleGlzdGluZ05vZGVPcHRpb25zIC0gVGhlIGN1cnJlbnQgYE5PREVfT1BUSU9OU2AgdmFsdWUgKGUuZy4gYHByb2Nlc3MuZW52Lk5PREVfT1BUSU9OU2ApLCBpZiBhbnkuXG4gKiBAcGFyYW0gb3B0aW9uIC0gVGhlIGBub2RlYCBDTEkgb3B0aW9uIHRvIGFwcGVuZCAoZS5nLiBgLS1sb2NhbHN0b3JhZ2UtZmlsZT06bWVtb3J5OmApLlxuICogQHJldHVybnMgVGhlIGNvbWJpbmVkIGBOT0RFX09QVElPTlNgIHN0cmluZy4gSWYgYG9wdGlvbmAgaXMgYWxyZWFkeSBwcmVzZW50LCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kTm9kZU9wdGlvbihleGlzdGluZ05vZGVPcHRpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQsIG9wdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdHJpbW1lZCA9IChleGlzdGluZ05vZGVPcHRpb25zID8/ICcnKS50cmltKCk7XG4gIGlmICh0cmltbWVkID09PSAnJykge1xuICAgIHJldHVybiBvcHRpb247XG4gIH1cbiAgcmV0dXJuIHRyaW1tZWQuc3BsaXQoL1xccysvKS5pbmNsdWRlcyhvcHRpb24pID8gdHJpbW1lZCA6IGAke3RyaW1tZWR9ICR7b3B0aW9ufWA7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBlbnZpcm9ubWVudCBmb3IgY2hpbGQgcHJvY2Vzc2VzOiB0aGUgcGFyZW50IGVudmlyb25tZW50IHBsdXMgYERFQlVHX0NPTE9SU2AsIGFuZCDigJQgd2hlblxuICogdGhlIHJ1bm5pbmcgYG5vZGVgIHN1cHBvcnRzIGl0IOKAlCB7QGxpbmsgTE9DQUxfU1RPUkFHRV9OT0RFX09QVElPTn0gYXBwZW5kZWQgdG8gYE5PREVfT1BUSU9OU2AuXG4gKlxuICogVGhlIHN1cHBvcnQgY2hlY2sgZ3VhcmRzIGFnYWluc3Qgb2xkZXIgYG5vZGVgICg8IDIyKTogcGFzc2luZyBhbiBvcHRpb24gYG5vZGVgIGRvZXMgbm90IHJlY29nbml6ZSB2aWFcbiAqIGBOT0RFX09QVElPTlNgIG1ha2VzIGl0IGV4aXQgYmVmb3JlIHJ1bm5pbmcsIHdoaWNoIHdvdWxkIGJyZWFrIGV2ZXJ5IHNwYXduZWQgdG9vbC5cbiAqXG4gKiBAcGFyYW0gYmFzZUVudiAtIFRoZSBwYXJlbnQgZW52aXJvbm1lbnQgdG8gZXh0ZW5kICh0eXBpY2FsbHkgYHByb2Nlc3MuZW52YCkuXG4gKiBAcGFyYW0gYWxsb3dlZE5vZGVFbnZpcm9ubWVudEZsYWdzIC0gVGhlIGBub2RlYCBvcHRpb25zIGFjY2VwdGVkIHZpYSBgTk9ERV9PUFRJT05TYCAodHlwaWNhbGx5IGBwcm9jZXNzLmFsbG93ZWROb2RlRW52aXJvbm1lbnRGbGFnc2ApLlxuICogQHJldHVybnMgVGhlIGVudmlyb25tZW50IHRvIHBhc3MgdG8gc3Bhd25lZCBjaGlsZCBwcm9jZXNzZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENoaWxkRW52KGJhc2VFbnY6IE5vZGVKUy5Qcm9jZXNzRW52LCBhbGxvd2VkTm9kZUVudmlyb25tZW50RmxhZ3M6IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBOb2RlSlMuUHJvY2Vzc0VudiB7XG4gIHJldHVybiB7XG4gICAgREVCVUdfQ09MT1JTOiAnMScsXG4gICAgLi4uYmFzZUVudixcbiAgICAuLi4oYWxsb3dlZE5vZGVFbnZpcm9ubWVudEZsYWdzLmhhcygnLS1sb2NhbHN0b3JhZ2UtZmlsZScpICYmIHsgTk9ERV9PUFRJT05TOiBhcHBlbmROb2RlT3B0aW9uKGJhc2VFbnZbJ05PREVfT1BUSU9OUyddLCBMT0NBTF9TVE9SQUdFX05PREVfT1BUSU9OKSB9KVxuICB9O1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGEgY29tbWFuZC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kLlxuICogQHRocm93cyBJZiB0aGUgY29tbWFuZCBmYWlscyB3aXRoIGEgbm9uLXplcm8gZXhpdCBjb2RlIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgZmFsc2VgLlxuICogICAgICAgICBUaGUgZXJyb3IgbWVzc2FnZSBpbmNsdWRlcyB0aGUgZXhpdCBjb2RlLCB0aGUgY29tbWFuZCwgc3RkZXJyLCBhbmQgc3Rkb3V0IChvciBhIG5vdGUgdGhhdCBpdCB3YXNcbiAqICAgICAgICAgcHJpbnRlZCksIGFuZCBzYXlzIHdoZW4gdGhlIGNoaWxkIGNyYXNoZWQgb3Igd2FzIGtpbGxlZCByYXRoZXIgdGhhbiBleGl0aW5nIG9uIGl0cyBvd24uXG4gKiAgICAgICAgIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBhbmQgaWdub3JlRXhpdENvZGUgaXMgYHRydWVgLFxuICogICAgICAgICB0aGUgZXJyb3IgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjKGNvbW1hbmQ6IENvbW1hbmRQYXJ0W10gfCBzdHJpbmcsIG9wdGlvbnM/OiBFeGVjU2ltcGxlT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPjtcbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIEV4ZWNSZXN1bHQgb2JqZWN0LlxuICogICAgICAgICAgVGhlIEV4ZWNSZXN1bHQgb2JqZWN0IGNvbnRhaW5zIHRoZSBleGl0IGNvZGUsIGV4aXQgc2lnbmFsLCBzdGRlcnIsIGFuZCBzdGRvdXQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUsIHRoZSBjb21tYW5kLCBzdGRlcnIsIGFuZCBzdGRvdXQgKG9yIGEgbm90ZSB0aGF0IGl0IHdhc1xuICogICAgICAgICBwcmludGVkKSwgYW5kIHNheXMgd2hlbiB0aGUgY2hpbGQgY3Jhc2hlZCBvciB3YXMga2lsbGVkIHJhdGhlciB0aGFuIGV4aXRpbmcgb24gaXRzIG93bi5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY29tbWFuZDogQ29tbWFuZFBhcnRbXSB8IHN0cmluZywgb3B0aW9uczogRXhlY0RldGFpbGVkT3B0aW9ucyk6IFByb21pc2U8RXhlY1Jlc3VsdD47XG4vKipcbiAqIEV4ZWN1dGVzIGEgY29tbWFuZC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kIG9yIGFuIEV4ZWNSZXN1bHQgb2JqZWN0LlxuICogICAgICAgICAgVGhlIEV4ZWNSZXN1bHQgb2JqZWN0IGNvbnRhaW5zIHRoZSBleGl0IGNvZGUsIGV4aXQgc2lnbmFsLCBzdGRlcnIsIGFuZCBzdGRvdXQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUsIHRoZSBjb21tYW5kLCBzdGRlcnIsIGFuZCBzdGRvdXQgKG9yIGEgbm90ZSB0aGF0IGl0IHdhc1xuICogICAgICAgICBwcmludGVkKSwgYW5kIHNheXMgd2hlbiB0aGUgY2hpbGQgY3Jhc2hlZCBvciB3YXMga2lsbGVkIHJhdGhlciB0aGFuIGV4aXRpbmcgb24gaXRzIG93bi5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY29tbWFuZDogQ29tbWFuZFBhcnRbXSB8IHN0cmluZywgb3B0aW9uczogRXhlY09wdGlvbnMgPSB7fSk6IFByb21pc2U8RXhlY1Jlc3VsdCB8IHN0cmluZz4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShjb21tYW5kKSkge1xuICAgIGNvbnN0IGJhdGNoUmVzdWx0ID0gaGFuZGxlQmF0Y2hlZENvbW1hbmQoY29tbWFuZCwgb3B0aW9ucyk7XG4gICAgaWYgKGJhdGNoUmVzdWx0KSB7XG4gICAgICByZXR1cm4gYmF0Y2hSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0ICRhcmd1bWVudHMgPSBjb21tYW5kLmZpbHRlcigocGFydCk6IHBhcnQgaXMgc3RyaW5nID0+IHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJyk7XG4gICAgY29uc3QgY29tbWFuZExpbmUgPSBidWlsZENvbW1hbmRMaW5lKCRhcmd1bWVudHMpO1xuXG4gICAgY29uc3QgbWF4Q29tbWFuZExlbmd0aCA9IGdldE1heENvbW1hbmRMZW5ndGgoKTtcbiAgICBjb25zdCBlZmZlY3RpdmVMZW5ndGggPSBnZXRFZmZlY3RpdmVDb21tYW5kTGluZUxlbmd0aChjb21tYW5kTGluZSk7XG4gICAgcmV0dXJuIGVmZmVjdGl2ZUxlbmd0aCA+IG1heENvbW1hbmRMZW5ndGhcbiAgICAgID8gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICBgQ29tbWFuZCBsaW5lIGlzIHRvbyBsb25nICgke1N0cmluZyhlZmZlY3RpdmVMZW5ndGgpfSBjaGFycyBvbmNlIHdyYXBwZWQgZm9yIHRoZSBzaGVsbCwgbWF4ICR7U3RyaW5nKG1heENvbW1hbmRMZW5ndGgpfSBvbiAke3Byb2Nlc3MucGxhdGZvcm19KS4gQ29uc2lkZXIgc3BsaXR0aW5nIGludG8gc21hbGxlciBiYXRjaGVzIG9yIHVzZSBFeGVjQXJnLmBcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgOiBleGVjU3RyaW5nKHtcbiAgICAgICAgY29tbWFuZDogY29tbWFuZExpbmUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHJhd0FyZ3VtZW50czogJGFyZ3VtZW50c1xuICAgICAgfSk7XG4gIH1cblxuICBjb25zdCBtYXhDb21tYW5kTGVuZ3RoID0gZ2V0TWF4Q29tbWFuZExlbmd0aCgpO1xuICBjb25zdCBlZmZlY3RpdmVMZW5ndGggPSBnZXRFZmZlY3RpdmVDb21tYW5kTGluZUxlbmd0aChjb21tYW5kKTtcbiAgcmV0dXJuIGVmZmVjdGl2ZUxlbmd0aCA+IG1heENvbW1hbmRMZW5ndGhcbiAgICA/IFByb21pc2UucmVqZWN0KFxuICAgICAgbmV3IEVycm9yKFxuICAgICAgICBgQ29tbWFuZCBsaW5lIGlzIHRvbyBsb25nICgke1N0cmluZyhlZmZlY3RpdmVMZW5ndGgpfSBjaGFycyBvbmNlIHdyYXBwZWQgZm9yIHRoZSBzaGVsbCwgbWF4ICR7U3RyaW5nKG1heENvbW1hbmRMZW5ndGgpfSBvbiAke3Byb2Nlc3MucGxhdGZvcm19KS4gQ29uc2lkZXIgc3BsaXR0aW5nIGludG8gc21hbGxlciBiYXRjaGVzIG9yIHVzZSBFeGVjQXJnLmBcbiAgICAgIClcbiAgICApXG4gICAgOiBleGVjU3RyaW5nKHtcbiAgICAgIGNvbW1hbmQsXG4gICAgICBvcHRpb25zXG4gICAgfSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBzaW5nbGUgc3RyaW5nIGNvbW1hbmQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBleGVjU3RyaW5nKHBhcmFtczogRXhlY1N0cmluZ1BhcmFtcyk6IFByb21pc2U8RXhlY1Jlc3VsdCB8IHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgY29tbWFuZCxcbiAgICBvcHRpb25zID0ge30sXG4gICAgcmF3QXJndW1lbnRzXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHtcbiAgICBjd2QgPSBwcm9jZXNzLmN3ZCgpLFxuICAgIGVudixcbiAgICBpc0ludGVyYWN0aXZlID0gZmFsc2UsXG4gICAgaXNRdWlldDogcXVpZXQgPSBmYWxzZSxcbiAgICBzaG91bGRJZ25vcmVFeGl0Q29kZTogaWdub3JlRXhpdENvZGUgPSBmYWxzZSxcbiAgICBzaG91bGRJbmNsdWRlRGV0YWlscyA9IGZhbHNlLFxuICAgIHN0ZGluID0gJydcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBnZXRMaWJEZWJ1Z2dlcignRXhlYycpKGBFeGVjdXRpbmcgY29tbWFuZDogJHtjb21tYW5kfWApO1xuXG4gICAgY29uc3QgY2hpbGQgPSBzcGF3blZpYVNoZWxsKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxTcGF3blZpYVNoZWxsUGFyYW1zPih7XG4gICAgICBjb21tYW5kLFxuICAgICAgY3dkLFxuICAgICAgZW52LFxuICAgICAgaXNJbnRlcmFjdGl2ZSxcbiAgICAgIHJhd0FyZ3VtZW50c1xuICAgIH0pKTtcblxuICAgIGxldCBzdGRvdXQgPSAnJztcbiAgICBsZXQgc3RkZXJyID0gJyc7XG5cbiAgICAvLyBJbiBpbnRlcmFjdGl2ZSBtb2RlIHRoZSBjaGlsZCdzIHN0ZGlvIGlzIGluaGVyaXRlZCBieSB0aGUgdGVybWluYWwsIHNvIHRoZXJlIGFyZSBubyBzdHJlYW1zIHRvIHJlYWQgYW5kIG5vdGhpbmcgaXMgY2FwdHVyZWQuXG4gICAgaWYgKCFpc0ludGVyYWN0aXZlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0ZGVycjogY2hpbGRTdGRlcnIsXG4gICAgICAgIHN0ZGluOiBjaGlsZFN0ZGluLFxuICAgICAgICBzdGRvdXQ6IGNoaWxkU3Rkb3V0XG4gICAgICB9ID0gY2hpbGQ7XG4gICAgICBhc3NlcnROb25OdWxsYWJsZShjaGlsZFN0ZGluLCAnQ2hpbGQgcHJvY2VzcyBzdGRpbiBpcyBub3QgYXZhaWxhYmxlJyk7XG4gICAgICBhc3NlcnROb25OdWxsYWJsZShjaGlsZFN0ZG91dCwgJ0NoaWxkIHByb2Nlc3Mgc3Rkb3V0IGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgICAgIGFzc2VydE5vbk51bGxhYmxlKGNoaWxkU3RkZXJyLCAnQ2hpbGQgcHJvY2VzcyBzdGRlcnIgaXMgbm90IGF2YWlsYWJsZScpO1xuXG4gICAgICBjaGlsZFN0ZGluLndyaXRlKHN0ZGluKTtcbiAgICAgIGNoaWxkU3RkaW4uZW5kKCk7XG5cbiAgICAgIGNoaWxkU3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBpZiAoIXF1aWV0KSB7XG4gICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Rkb3V0ICs9IGRhdGEudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGRTdGRvdXQub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgc3Rkb3V0ID0gdHJpbUVuZCh7XG4gICAgICAgICAgJHN0cmluZzogc3Rkb3V0LFxuICAgICAgICAgIHN1ZmZpeDogJ1xcbidcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGRTdGRlcnIub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGlmICghcXVpZXQpIHtcbiAgICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBzdGRlcnIgKz0gZGF0YS50b1N0cmluZygndXRmLTgnKTtcbiAgICAgIH0pO1xuXG4gICAgICBjaGlsZFN0ZGVyci5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBzdGRlcnIgPSB0cmltRW5kKHtcbiAgICAgICAgICAkc3RyaW5nOiBzdGRlcnIsXG4gICAgICAgICAgc3VmZml4OiAnXFxuJ1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoaWxkLm9uKCdjbG9zZScsIChleGl0Q29kZSwgZXhpdFNpZ25hbCkgPT4ge1xuICAgICAgaWYgKGV4aXRDb2RlICE9PSAwICYmICFpZ25vcmVFeGl0Q29kZSkge1xuICAgICAgICByZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKGRlc2NyaWJlRXhpdEZhaWx1cmUoe1xuICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgIGV4aXRDb2RlLFxuICAgICAgICAgICAgZXhpdFNpZ25hbCxcbiAgICAgICAgICAgIGlzSW50ZXJhY3RpdmUsXG4gICAgICAgICAgICBpc1F1aWV0OiBxdWlldCxcbiAgICAgICAgICAgIHN0ZGVycixcbiAgICAgICAgICAgIHN0ZG91dFxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghc2hvdWxkSW5jbHVkZURldGFpbHMpIHtcbiAgICAgICAgcmVzb2x2ZShzdGRvdXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgZXhpdENvZGUsXG4gICAgICAgIGV4aXRTaWduYWwsXG4gICAgICAgIHN0ZGVycixcbiAgICAgICAgc3Rkb3V0XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNoaWxkLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgaWYgKCFpZ25vcmVFeGl0Q29kZSkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDb3VsZCBub3QgcnVuIGNvbW1hbmQ6ICR7dHJ1bmNhdGVDb21tYW5kKGNvbW1hbmQpfVxcbiR7ZXJyb3IubWVzc2FnZX1gLCB7IGNhdXNlOiBlcnJvciB9KSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzaG91bGRJbmNsdWRlRGV0YWlscykge1xuICAgICAgICByZXNvbHZlKHN0ZG91dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIGV4aXRDb2RlOiBudWxsLFxuICAgICAgICBleGl0U2lnbmFsOiBudWxsLFxuICAgICAgICBzdGRlcnIsXG4gICAgICAgIHN0ZG91dFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEEgYG5vZGVgIENMSSBvcHRpb24gKHBhc3NlZCB2aWEgYE5PREVfT1BUSU9OU2ApIHRoYXQgcHJvdmlkZXMgYW4gaW4tbWVtb3J5IGBsb2NhbFN0b3JhZ2VgIHRvIGV2ZXJ5XG4gKiBzcGF3bmVkIGBub2RlYCBwcm9jZXNzLiBOb2RlIDIyKyBleHBvc2VzIGFuIGV4cGVyaW1lbnRhbCBXZWIgU3RvcmFnZSBgbG9jYWxTdG9yYWdlYCwgYnV0IGFjY2Vzc2luZyBpdFxuICogd2l0aG91dCBgLS1sb2NhbHN0b3JhZ2UtZmlsZWAgZW1pdHMgYW4gYEV4cGVyaW1lbnRhbFdhcm5pbmdgIGFuZCBsZWF2ZXMgYGxvY2FsU3RvcmFnZWAgdW5hdmFpbGFibGUuXG4gKiBQb2ludGluZyBpdCBhdCB0aGUgc3BlY2lhbCBgOm1lbW9yeTpgIGRhdGFiYXNlIGdpdmVzIGVhY2ggcHJvY2VzcyBhIHdvcmtpbmcsIG5vbi1wZXJzaXN0ZW50XG4gKiBgbG9jYWxTdG9yYWdlYCAobm8gZmlsZSBvbiBkaXNrLCBubyBzdGF0ZSBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMpIOKAlCBtYXRjaGluZyB0aGUgcmVhbCBPYnNpZGlhblxuICogKEVsZWN0cm9uKSBydW50aW1lIGFuZCBzaWxlbmNpbmcgdGhlIHdhcm5pbmcgYnkgYWRkcmVzc2luZyBpdHMgcm9vdCBjYXVzZSByYXRoZXIgdGhhbiBzdXBwcmVzc2luZyBpdC5cbiAqXG4gKiBJdCBpcyBhcHBsaWVkIG9ubHkgd2hlbiB0aGUgcnVubmluZyBgbm9kZWAgYWN0dWFsbHkgc3VwcG9ydHMgaXQgKHNlZSB7QGxpbmsgYnVpbGRDaGlsZEVudn0pOiBwYXNzaW5nXG4gKiBhbiBvcHRpb24gYG5vZGVgIGRvZXMgbm90IHJlY29nbml6ZSB2aWEgYE5PREVfT1BUSU9OU2AgbWFrZXMgaXQgcmVmdXNlIHRvIHN0YXJ0LCBzbyBhbiBvbGRlciBgbm9kZWBcbiAqICg8IDIyKSBtdXN0IGJlIGxlZnQgdW50b3VjaGVkLlxuICovXG5jb25zdCBMT0NBTF9TVE9SQUdFX05PREVfT1BUSU9OID0gJy0tbG9jYWxzdG9yYWdlLWZpbGU9Om1lbW9yeTonO1xuXG4vKipcbiAqIFRoZSBsb25nZXN0IGNvbW1hbmQgYSBmYWlsdXJlIG1lc3NhZ2UgcXVvdGVzIGJlZm9yZSB0cnVuY2F0aW5nIGl0LiBBIGJhdGNoZWQgY29tbWFuZCBjYW4gcnVuIHRvIHNldmVyYWxcbiAqIHRob3VzYW5kIGNoYXJhY3RlcnMgb2YgcGF0aHMsIHdoaWNoIHdvdWxkIGJ1cnkgdGhlIG9uZSBsaW5lIG9mIHRoZSBtZXNzYWdlIHRoYXQgc2F5cyB3aGF0IHdlbnQgd3JvbmcuXG4gKi9cbmNvbnN0IE1BWF9DT01NQU5EX0xFTkdUSF9JTl9NRVNTQUdFID0gNTAwO1xuXG4vKipcbiAqIE5hbWVzIG9mIHRoZSBXaW5kb3dzIE5UU1RBVFVTIGNvZGVzIGEgY3Jhc2hlZCBjaGlsZCBtb3N0IG9mdGVuIGV4aXRzIHdpdGgsIGZvciB0aGUgZmFpbHVyZSBtZXNzYWdlLiBBIGNvZGVcbiAqIG91dHNpZGUgdGhpcyBsaXN0IGlzIHN0aWxsIHJlY29nbml6ZWQgYXMgYW4gTlRTVEFUVVMgZmFpbHVyZSAoc2VlIHtAbGluayB0b050U3RhdHVzfSkgYW5kIHNob3duIGluIGhleDsgdGhlXG4gKiBuYW1lIGlzIGEgY291cnRlc3ksIG5vdCB0aGUgY2xhc3NpZmljYXRpb24uXG4gKi9cbmNvbnN0IE5UU1RBVFVTX05BTUVTOiBSZWFkb25seU1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKFtcbiAgWycweEMwMDAwMDA1JywgJ1NUQVRVU19BQ0NFU1NfVklPTEFUSU9OJ10sXG4gIFsnMHhDMDAwMDAxNycsICdTVEFUVVNfTk9fTUVNT1JZJ10sXG4gIFsnMHhDMDAwMDAxRCcsICdTVEFUVVNfSUxMRUdBTF9JTlNUUlVDVElPTiddLFxuICBbJzB4QzAwMDAwOTQnLCAnU1RBVFVTX0lOVEVHRVJfRElWSURFX0JZX1pFUk8nXSxcbiAgWycweEMwMDAwMEZEJywgJ1NUQVRVU19TVEFDS19PVkVSRkxPVyddLFxuICBbJzB4QzAwMDAxMzUnLCAnU1RBVFVTX0RMTF9OT1RfRk9VTkQnXSxcbiAgWycweEMwMDAwMTNBJywgJ1NUQVRVU19DT05UUk9MX0NfRVhJVCddLFxuICBbJzB4QzAwMDAzNzQnLCAnU1RBVFVTX0hFQVBfQ09SUlVQVElPTiddLFxuICBbJzB4QzAwMDA0MDknLCAnU1RBVFVTX1NUQUNLX0JVRkZFUl9PVkVSUlVOJ11cbl0pO1xuXG4vKipcbiAqIENoYXJhY3RlcnMgaGVsZCBiYWNrIGZyb20gdGhlIFdpbmRvd3MgY29tbWFuZC1saW5lIGJ1ZGdldCB3aGVuIHNpemluZyBhbiB7QGxpbmsgRXhlY0FyZ3VtZW50fSBiYXRjaCwgdG9cbiAqIGNvdmVyIGV4cGFuc2lvbnMgdGhhdCBoYXBwZW4gSU5TSURFIHRoZSBjb21tYW5kIHdlIHNwYXduIGFuZCBhcmUgdGhlcmVmb3JlIGludmlzaWJsZSBmcm9tIGhlcmUuXG4gKlxuICogQSBzaGltbWVkIGA8dG9vbD4gPGFyZ3PigKY+YCBpbnZvY2F0aW9uIGlzIG5vdCBvbmUgYGNtZC5leGVgIGNvbW1hbmQgbGluZSBidXQgYSBjaGFpbiBvZiB0aGVtOiB0aGVcbiAqIGAuYmluLzx0b29sPi5jbWRgIHNoaW0gcmUtZXhwYW5kcyBgJSpgIGludG8gYSBmcmVzaCBgbm9kZSDigKYgPHRvb2w+LWNsaS5qcyA8YXJnc+KApj5gIGxpbmUsIGFuZCBlYWNoIGhvcFxuICogcmUtcXVvdGVzIHdoYXQgaXQgZm9yd2FyZHMuIEV2ZXJ5IG9uZSBvZiB0aG9zZSBsaW5lcyBpcyBzdWJqZWN0IHRvIHRoZSBzYW1lIDgxOTEgbGltaXQsIGFuZCBldmVyeSBvbmUgaXNcbiAqIGxvbmdlciB0aGFuIHRoZSBsaW5lIHdlIGFzc2VtYmxlZCDigJQgYnV0IGJ5IGhvdyBtdWNoIGlzIHRoZSBjaGlsZCdzIGJ1c2luZXNzLCBub3Qgb3Vycywgc28gbm8gZm9ybXVsYSBjYW5cbiAqIGJlIHJpZ2h0LiBPbmx5IHRoZSBkZWxpYmVyYXRlIHNsYWNrIGJlbG93IGNhbi5cbiAqXG4gKiBgMjA0OGAgaXMgcm91Z2hseSBkb3VibGUgdGhlIG92ZXJoZWFkIG1lYXN1cmVkIHdoZW4gdGhpcyB3YXMgZm91bmQsIGJhY2sgd2hlbiBldmVyeSB0b29sIHdhc1xuICogYWRkaXRpb25hbGx5IGZyb250ZWQgYnkgYG5weGAgYW5kIHNvIHBhaWQgb25lIG1vcmUgcmUtZXhwYW5zaW9uIGhvcCB0aGFuIGl0IGRvZXMgbm93LiBPdmVyIGEgcmVwb3NpdG9yeSdzXG4gKiAxODcgbWFya2Rvd24gcGF0aHMsIGEgYG1hcmtkb3dubGludC1jbGkyIOKApmAgbGluZSAqKmFzc2VtYmxlZCBhdCA3MDUxIGNoYXJzKiog4oCUIDExNDAgdW5kZXIgdGhlIGxpbWl0IOKAlFxuICogc3RpbGwgZGllZCB3aXRoIGBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nLmA7IHRoZSBzYW1lIHBheWxvYWQgc3BsaXQgaW4gdHdvIHJ1bnMgY2xlYW4uIE5vdGUgdGhlIHRvb2w6XG4gKiB0aGlzIGlzIG5vdCBzcGVjaWZpYyB0byBgbGlua2luYXRvcmAsIGl0IGlzIHRoZSBzaGFwZSBvZiBldmVyeSBzaGltLWZyb250ZWQgaW52b2NhdGlvbi5cbiAqXG4gKiBPdmVyLXJlc2VydmluZyBjb3N0cyBvbmUgZXh0cmEgc2VxdWVudGlhbCBpbnZvY2F0aW9uIG9mIGEgY29tbWFuZCB0aGF0IHdhcyBhbHJlYWR5IGdvaW5nIHRvIGJlIGJhdGNoZWQ7XG4gKiB1bmRlci1yZXNlcnZpbmcgY29zdHMgYSBsaW50IGZhaWx1cmUgdGhhdCBuYW1lcyBub3RoaW5nIHdyb25nIHdpdGggdGhlIGNvbnRlbnQuIFJhaXNlIGl0LCBuZXZlciBsb3dlciBpdCxcbiAqIGlmIHRoZSBzeW1wdG9tIHJldHVybnMuXG4gKi9cbmNvbnN0IFdJTkRPV1NfQ0hJTERfRVhQQU5TSU9OX1JFU0VSVkUgPSAyMDQ4O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBkZXNjcmliZUV4aXRGYWlsdXJlfS5cbiAqL1xuaW50ZXJmYWNlIERlc2NyaWJlRXhpdEZhaWx1cmVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvbW1hbmQgdGhhdCB3YXMgZXhlY3V0ZWQuXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBleGl0IGNvZGUgdGhlIGNoaWxkIHJlcG9ydGVkLCBvciBgbnVsbGAgd2hlbiBpdCBkaWQgbm90IGV4aXQgb24gaXRzIG93bi5cbiAgICovXG4gIHJlYWRvbmx5IGV4aXRDb2RlOiBudWxsIHwgbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc2lnbmFsIHRoYXQgdGVybWluYXRlZCB0aGUgY2hpbGQsIGlmIGFueS5cbiAgICovXG4gIHJlYWRvbmx5IGV4aXRTaWduYWw6IE5vZGVKUy5TaWduYWxzIHwgbnVsbDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY2hpbGQncyBzdGRpbyB3YXMgYXR0YWNoZWQgdG8gdGhlIHRlcm1pbmFsLCBzbyBub3RoaW5nIHdhcyBjYXB0dXJlZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzSW50ZXJhY3RpdmU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNoaWxkJ3Mgb3V0cHV0IHdhcyBzdXBwcmVzc2VkLCBzbyB0aGUgdXNlciBoYXMgbm90IHNlZW4gaXQuXG4gICAqL1xuICByZWFkb25seSBpc1F1aWV0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FwdHVyZWQgc3RhbmRhcmQgZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBzdGRlcnI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNhcHR1cmVkIHN0YW5kYXJkIG91dHB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZG91dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBleGVjdXRlQmF0Y2hlc30uXG4gKi9cbmludGVyZmFjZSBFeGVjdXRlQmF0Y2hlc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYmFzZSBjb21tYW5kIHdpdGhvdXQgYmF0Y2hlZCBhcmdzLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUNvbW1hbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGJhdGNoZXMgb2YgYXJncy5cbiAgICovXG4gIHJlYWRvbmx5IGJhdGNoZXM6IHN0cmluZ1tdW107XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zOiBFeGVjT3B0aW9ucztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgc3Bhd25WaWFTaGVsbH0uXG4gKi9cbmludGVyZmFjZSBTcGF3blZpYVNoZWxsUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHN0cmluZyB0byBleGVjdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBjd2Q6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbWVyZ2VkIG92ZXIgdGhlIGluaGVyaXRlZCBjaGlsZCBlbnZpcm9ubWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGVudj86IE5vZGVKUy5Qcm9jZXNzRW52O1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGF0dGFjaGVzIHRoZSBjaGlsZCdzIHN0ZGlvIHRvIHRoZSB0ZXJtaW5hbCBpbnN0ZWFkIG9mIHBpcGluZyBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGlzSW50ZXJhY3RpdmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgYXJndW1lbnQgYXJyYXkgKGlmIGF2YWlsYWJsZSkuXG4gICAqL1xuICByZWFkb25seSByYXdBcmd1bWVudHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21tYW5kLWxpbmUgc3RyaW5nIGZyb20gYW4gYXJndW1lbnQgYXJyYXksIHF1b3RlZCBmb3IgdGhlIHNoZWxsIHRoYXRcbiAqIHtAbGluayBzcGF3blZpYVNoZWxsfSB3aWxsIHJvdXRlIHRocm91Z2ggb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKlxuICogT24gV2luZG93cyB0aGUgY29tbWFuZCBpcyBleGVjdXRlZCB2aWEgYGNtZC5leGVgLCBzbyBpdCB1c2VzIHRoZVxuICogYENvbW1hbmRMaW5lVG9Bcmd2V2AgY29udmVudGlvbiAoe0BsaW5rIHRvQ29tbWFuZExpbmV9KTsge0BsaW5rIHNwYXduVmlhU2hlbGx9XG4gKiB0aGVuIGFwcGxpZXMge0BsaW5rIGNtZEVzY2FwZUNvbW1hbmRMaW5lfSBvbiB0b3AgZm9yIGBjbWQuZXhlYCBtZXRhY2hhcmFjdGVycy5cbiAqIEVsc2V3aGVyZSB0aGUgY29tbWFuZCBpcyBleGVjdXRlZCB2aWEgYHNoIC1jYCwgc28gaXQgdXNlcyBQT1NJWCBzaW5nbGUtcXVvdGVcbiAqIHF1b3RpbmcgKHtAbGluayB0b1Bvc2l4Q29tbWFuZExpbmV9KSBhbmQgbmVlZHMgbm8gZnVydGhlciBlc2NhcGluZy5cbiAqXG4gKiBUaGUgcGxhdGZvcm0gYnJhbmNoIGhlcmUgTVVTVCBzdGF5IGluIHN5bmMgd2l0aCB0aGUgb25lIGluIHtAbGluayBzcGF3blZpYVNoZWxsfS5cbiAqXG4gKiBAcGFyYW0gJGFyZ3VtZW50cyAtIFRoZSBhcmd1bWVudCBhcnJheSB0byBxdW90ZSBhbmQgam9pbi5cbiAqIEByZXR1cm5zIFRoZSBxdW90ZWQgY29tbWFuZC1saW5lIHN0cmluZyBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0ncyBzaGVsbC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRDb21tYW5kTGluZSgkYXJndW1lbnRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gdG9Db21tYW5kTGluZSgkYXJndW1lbnRzKSA6IHRvUG9zaXhDb21tYW5kTGluZSgkYXJndW1lbnRzKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIG1lc3NhZ2UgYSBmYWlsZWQgY29tbWFuZCByZWplY3RzIHdpdGgsIHNheWluZyBub3Qgb25seSBUSEFUIGl0IGZhaWxlZCBidXQgSE9XLlxuICpcbiAqIFRoZSBtZXNzYWdlIHVzZWQgdG8gYmUgYENvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlIDxuPmAgcGx1cyBzdGRlcnIsIHdoYXRldmVyIHRoZSBjb2RlLiBTbyBhIGNoaWxkIHRoYXRcbiAqIGNyYXNoZWQgYmVmb3JlIHdyaXRpbmcgYSBieXRlIGFuZCBhIGxpbnRlciB0aGF0IGZvdW5kIHJlYWwgcHJvYmxlbXMgcmVhZCB0aGUgc2FtZSwgZGlmZmVyaW5nIG9ubHkgaW4gYVxuICogbnVtYmVyIG5vYm9keSByZWFkcyBhcyBhIHN0YXR1czogYSBXaW5kb3dzIGFjY2VzcyB2aW9sYXRpb24gYXJyaXZlcyBhcyBgZXhpdCBjb2RlIDMyMjEyMjU0NzdgIHdpdGggbm90aGluZ1xuICogYWZ0ZXIgaXQsIGFuZCB3aG9ldmVyIHJlYWRzIGl0IGdvZXMgbG9va2luZyBmb3IgYSBmaW5kaW5nIHRoYXQgZG9lcyBub3QgZXhpc3QuIFRoaXMgaXMgdGhlIGxhc3QgcG9pbnQgdGhhdFxuICogY2FuIHRlbGwgdGhlIHR3byBhcGFydCDigJQgdGhlIGAuY21kYCBzaGltIGlzIHNwYXduZWQgZGlyZWN0bHksIHNvIHRoZSBjaGlsZCdzIHJhdyBjb2RlIGlzIHZpc2libGUgaGVyZSwgd2hpbGVcbiAqIGFuIGBucG0gcnVuYCBsYXllciBmdXJ0aGVyIG91dCBpcyBrbm93biB0byBsYXVuZGVyIGl0IGludG8gYSBwbGFpbiBgMWAuXG4gKlxuICogVHdvIHNpZ25hbHMgYXJlIHJlYWQsIGFuZCB0aGVpciBjb25qdW5jdGlvbiBpcyB3aGF0IGVhcm5zIHRoZSB3b3JkIFwiY3Jhc2hlZFwiOiB0aGUgdGVybWluYXRpb24gd2FzIGFibm9ybWFsXG4gKiAoYW4gTlRTVEFUVVMgZXJyb3IgY29kZSwgb3IgYSBzaWduYWwpLCBhbmQgbmVpdGhlciBzdHJlYW0gY2FycmllZCBhbnl0aGluZy4gQSB0b29sIGZhaWxpbmcgb24gaXRzIG93biB0ZXJtc1xuICogc2F5cyBzb21ldGhpbmc7IGEgY2hpbGQgdGhhdCBkaWVkIG1pZC1pbnN0cnVjdGlvbiBkb2VzIG5vdC4gVGhlIENBVVNFIG9mIHN1Y2ggYSBjcmFzaCBpcyBub3QgdGhpc1xuICogZnVuY3Rpb24ncyBidXNpbmVzcywgc28gdGhlIG1lc3NhZ2Ugb25seSBuYW1lcyBpdCBhbmQgc2F5cyB3aGF0IHRvIGRvLlxuICpcbiAqIFRoZSBgQ29tbWFuZCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgPG4+YCBwcmVmaXggaXMga2VwdCwgc28gYSBjYWxsZXIgbWF0Y2hpbmcgb24gaXQgc3RpbGwgbWF0Y2hlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZGVzY3JpYmluZyB0aGUgZmFpbGVkIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIFRoZSBmYWlsdXJlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIGRlc2NyaWJlRXhpdEZhaWx1cmUocGFyYW1zOiBEZXNjcmliZUV4aXRGYWlsdXJlUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBjb21tYW5kLCBleGl0Q29kZSwgZXhpdFNpZ25hbCwgaXNJbnRlcmFjdGl2ZSwgaXNRdWlldCwgc3RkZXJyLCBzdGRvdXQgfSA9IHBhcmFtcztcbiAgY29uc3QgbnRTdGF0dXMgPSB0b050U3RhdHVzKGV4aXRDb2RlKTtcblxuICBsZXQgc3RhdHVzID0gYGV4aXQgY29kZSAke2V4aXRDb2RlID09PSBudWxsID8gJyhudWxsKScgOiBTdHJpbmcoZXhpdENvZGUpfWA7XG4gIGxldCBhYm5vcm1hbFJlYXNvbjogbnVsbCB8IHN0cmluZyA9IG51bGw7XG4gIGlmIChudFN0YXR1cyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IEhFWF9SQURJWCA9IDE2O1xuICAgIGNvbnN0IGhleCA9IGAweCR7bnRTdGF0dXMudG9TdHJpbmcoSEVYX1JBRElYKS50b1VwcGVyQ2FzZSgpfWA7XG4gICAgY29uc3QgbmFtZSA9IE5UU1RBVFVTX05BTUVTLmdldChoZXgpO1xuICAgIHN0YXR1cyArPSBgIChOVFNUQVRVUyAke25hbWUgPyBgJHtoZXh9ICR7bmFtZX1gIDogaGV4fSlgO1xuICAgIGFibm9ybWFsUmVhc29uID0gbmFtZSA9PT0gJ1NUQVRVU19DT05UUk9MX0NfRVhJVCcgPyAnd2FzIGludGVycnVwdGVkJyA6ICdjcmFzaGVkJztcbiAgfSBlbHNlIGlmIChleGl0U2lnbmFsICE9PSBudWxsKSB7XG4gICAgc3RhdHVzICs9IGAsIHRlcm1pbmF0ZWQgYnkgc2lnbmFsICR7ZXhpdFNpZ25hbH1gO1xuICAgIGFibm9ybWFsUmVhc29uID0gYHdhcyBraWxsZWQgYnkgJHtleGl0U2lnbmFsfWA7XG4gIH1cblxuICBjb25zdCBsaW5lcyA9IFtgQ29tbWFuZCBmYWlsZWQgd2l0aCAke3N0YXR1c31gLCBgQ29tbWFuZDogJHt0cnVuY2F0ZUNvbW1hbmQoY29tbWFuZCl9YF07XG5cbiAgaWYgKGFibm9ybWFsUmVhc29uICE9PSBudWxsKSB7XG4gICAgbGluZXMucHVzaChcbiAgICAgICFpc0ludGVyYWN0aXZlICYmIHN0ZG91dCA9PT0gJycgJiYgc3RkZXJyID09PSAnJ1xuICAgICAgICA/IGBUaGUgY2hpbGQgcHJvY2VzcyAke2Fibm9ybWFsUmVhc29ufSBiZWZvcmUgd3JpdGluZyBhbnl0aGluZyB0byBzdGRvdXQgb3Igc3RkZXJyLiBUaGlzIGlzIG5vdCBhIGZhaWx1cmUgdGhlIHRvb2wgcmVwb3J0ZWQgKG5vdCBhIGxpbnQgZmluZGluZywgbm90IGEgdHlwZSBlcnJvcik6IHJlLXJ1biB0aGUgY29tbWFuZC5gXG4gICAgICAgIDogYFRoZSBjaGlsZCBwcm9jZXNzICR7YWJub3JtYWxSZWFzb259IHJhdGhlciB0aGFuIGV4aXRpbmcgb24gaXRzIG93biwgc28gYW55IG91dHB1dCBpdCB3cm90ZSBtYXkgYmUgaW5jb21wbGV0ZS5gXG4gICAgKTtcbiAgfVxuXG4gIGlmIChzdGRvdXQgIT09ICcnKSB7XG4gICAgbGluZXMucHVzaChpc1F1aWV0ID8gYHN0ZG91dDpcXG4ke3N0ZG91dH1gIDogYHN0ZG91dDogJHtTdHJpbmcoc3Rkb3V0LnNwbGl0KCdcXG4nKS5sZW5ndGgpfSBsaW5lKHMpLCBwcmludGVkIGFib3ZlLmApO1xuICB9XG5cbiAgaWYgKHN0ZGVyciAhPT0gJycpIHtcbiAgICBsaW5lcy5wdXNoKGBzdGRlcnI6XFxuJHtzdGRlcnJ9YCk7XG4gIH1cblxuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYmF0Y2hlZCBjb21tYW5kcyBzZXF1ZW50aWFsbHkgYW5kIGNvbmNhdGVuYXRlcyB0aGVpciBvdXRwdXQuXG4gKlxuICogYGV4ZWNTdHJpbmdgIHJldHVybnMgYSBgc3RyaW5nYCBvciBhbiB7QGxpbmsgRXhlY1Jlc3VsdH0gZGVwZW5kaW5nIG9uIGBvcHRpb25zLnNob3VsZEluY2x1ZGVEZXRhaWxzYCwgc29cbiAqIGJvdGggc2hhcGVzIGFyZSB1bnBhY2tlZCDigJQgcmVhZGluZyBvbmx5IHRoZSBgc3RyaW5nYCBvbmUgc2lsZW50bHkgdGhyZXcgYXdheSBldmVyeSBiYXRjaCdzIG91dHB1dCBpblxuICogZXhhY3RseSB0aGUgbW9kZSB0aGF0IGFza2VkIGZvciBpdC5cbiAqXG4gKiBBIGJhdGNoIHRoYXQgZXhpdHMgbm9uLXplcm8gbm9ybWFsbHkgcmVqZWN0czsgaXQgb25seSByZWFjaGVzIGhlcmUgd2hlbiBgc2hvdWxkSWdub3JlRXhpdENvZGVgIGFza2VkIGZvclxuICogaXQgdG8gYmUgcmVwb3J0ZWQgaW5zdGVhZC4gVGhlIGZpcnN0IHN1Y2ggZmFpbHVyZSBpcyB3aGF0IHRoZSBhZ2dyZWdhdGUgcmVwb3J0cywgc28gc3BsaXR0aW5nIGEgY29tbWFuZFxuICogaW50byBiYXRjaGVzIGNhbm5vdCB0dXJuIGEgZmFpbHVyZSBpbnRvIGEgc3VjY2VzcyDigJQgZXhjZXB0IHRoYXQgYW4gYWJub3JtYWwgdGVybWluYXRpb24gKGEgY3Jhc2gsIGFcbiAqIHNpZ25hbCkgaW4gYSBsYXRlciBiYXRjaCBvdXRyYW5rcyBhbiBvcmRpbmFyeSBmYWlsdXJlIGluIGFuIGVhcmxpZXIgb25lLiBPdGhlcndpc2UgYSBjcmFzaCBpbiBiYXRjaCAyIGFmdGVyXG4gKiByZWFsIGZpbmRpbmdzIGluIGJhdGNoIDEgd291bGQgYWdncmVnYXRlIHRvIHRoZSBmaW5kaW5ncycgZXhpdCBjb2RlLCBhbmQgYSBjYWxsZXIgY2xhc3NpZnlpbmcgdGhlIHJlc3VsdFxuICogd291bGQgbmV2ZXIgbGVhcm4gdGhhdCBwYXJ0IG9mIHRoZSBpbnB1dCB3YXMgbm90IGNoZWNrZWQgYXQgYWxsLlxuICpcbiAqIFNpbGVudCBiYXRjaGVzIGNvbnRyaWJ1dGUgbm90aGluZyB0byB0aGUgam9pbmVkIG91dHB1dC4gYGV4ZWNTdHJpbmdgIGFscmVhZHkgdHJpbXMgZWFjaCByZXN1bHQncyB0cmFpbGluZ1xuICogbmV3bGluZSwgc28gam9pbmluZyBlbXB0eSBvbmVzIGJhY2sgaW4gd291bGQgcmVpbnRyb2R1Y2UgZXhhY3RseSB0aGUgYmxhbmstbGluZSBub2lzZSBpdCByZW1vdmVkIOKAlCBhXG4gKiBjb21tYW5kIHRoYXQgcHJpbnRlZCBub3RoaW5nIG11c3QgYWdncmVnYXRlIHRvIGAnJ2AsIG5vdCB0byBhIHJ1biBvZiBuZXdsaW5lcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBiYXRjaGVkIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNvbmNhdGVuYXRlZCByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVCYXRjaGVzKHBhcmFtczogRXhlY3V0ZUJhdGNoZXNQYXJhbXMpOiBQcm9taXNlPEV4ZWNSZXN1bHQgfCBzdHJpbmc+IHtcbiAgY29uc3QgeyBiYXNlQ29tbWFuZCwgYmF0Y2hlcywgb3B0aW9ucyB9ID0gcGFyYW1zO1xuICBjb25zdCBzdGRvdXRQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc3RkZXJyUGFydHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBmYWlsdXJlOiBFeGVjUmVzdWx0IHwgbnVsbCA9IG51bGw7XG5cbiAgZm9yIChjb25zdCBiYXRjaCBvZiBiYXRjaGVzKSB7XG4gICAgY29uc3QgYmF0Y2hDb21tYW5kID0gYCR7YmFzZUNvbW1hbmR9ICR7YnVpbGRDb21tYW5kTGluZShiYXRjaCl9YDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjU3RyaW5nKHtcbiAgICAgIGNvbW1hbmQ6IGJhdGNoQ29tbWFuZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHB1c2hJZk5vdEVtcHR5KHN0ZG91dFBhcnRzLCByZXN1bHQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcHVzaElmTm90RW1wdHkoc3Rkb3V0UGFydHMsIHJlc3VsdC5zdGRvdXQpO1xuICAgIHB1c2hJZk5vdEVtcHR5KHN0ZGVyclBhcnRzLCByZXN1bHQuc3RkZXJyKTtcbiAgICBpZiAocmVzdWx0LmV4aXRDb2RlICE9PSAwICYmIChmYWlsdXJlID09PSBudWxsIHx8ICghaXNBYm5vcm1hbFRlcm1pbmF0aW9uKGZhaWx1cmUpICYmIGlzQWJub3JtYWxUZXJtaW5hdGlvbihyZXN1bHQpKSkpIHtcbiAgICAgIGZhaWx1cmUgPSByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnMuc2hvdWxkSW5jbHVkZURldGFpbHNcbiAgICA/IHtcbiAgICAgIC8vIE5vdCBgZmFpbHVyZT8uZXhpdENvZGUgPz8gMGA6IGEgYmF0Y2gga2lsbGVkIGJ5IGEgc2lnbmFsIGhhcyBhIGBudWxsYCBjb2RlLCB3aGljaCBgPz9gIHdvdWxkIHJlcG9ydCBhcyBzdWNjZXNzLlxuICAgICAgZXhpdENvZGU6IGZhaWx1cmUgPT09IG51bGwgPyAwIDogZmFpbHVyZS5leGl0Q29kZSxcbiAgICAgIGV4aXRTaWduYWw6IGZhaWx1cmU/LmV4aXRTaWduYWwgPz8gbnVsbCxcbiAgICAgIHN0ZGVycjogc3RkZXJyUGFydHMuam9pbignXFxuJyksXG4gICAgICBzdGRvdXQ6IHN0ZG91dFBhcnRzLmpvaW4oJ1xcbicpXG4gICAgfVxuICAgIDogc3Rkb3V0UGFydHMuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogRGVmYXVsdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcGFzc2VkIHRvIGNoaWxkIHByb2Nlc3NlcywgcmVzb2x2ZWQgYXQgc3Bhd24gdGltZS5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgbm90IGEgbW9kdWxlLWxldmVsIGNvbnN0YW50LiBgLmVudmAgaXMgbG9hZGVkIGJ5IGBsb2FkRW52RmlsZUlmRXhpc3RzYCBmcm9tIGluc2lkZVxuICogYHdyYXBDbGlUYXNrYCwgYW5kIEVTTSBldmFsdWF0ZXMgZXZlcnkgaW1wb3J0IGJlZm9yZSB0aGUgZW50cnkgbW9kdWxlJ3MgZmlyc3Qgc3RhdGVtZW50IOKAlCBzbyBhXG4gKiBzbmFwc2hvdCB0YWtlbiBoZXJlIHdvdWxkIGFsd2F5cyBwcmVkYXRlIHRoZSBsb2FkLCBhbmQgZXZlcnkgc3Bhd25lZCBjaGlsZCB3b3VsZCBydW4gd2l0aG91dCB0aGVcbiAqIHJlcG8ncyBvd24gYC5lbnZgLiBOb3RoaW5nIHN1cmZhY2VkIHRoYXQgd2hpbGUgVml0ZXN0IDMgY29waWVkIHRoZSBgLmVudmAgaXQgbG9hZGVkIGludG8gdGhlXG4gKiB3b3JrZXIncyBgcHJvY2Vzcy5lbnZgOyBWaXRlc3QgNCB3cml0ZXMgdGhvc2UgdG8gYGltcG9ydC5tZXRhLmVudmAgb25seSwgbGVhdmluZyB0aGlzIHRoZSBzb2xlXG4gKiBwYXRoIGFuZCBhbiBlbXB0eSBvbmUuXG4gKlxuICogQHJldHVybnMgVGhlIGVudmlyb25tZW50IHRvIHBhc3MgdG8gc3Bhd25lZCBjaGlsZCBwcm9jZXNzZXMsIHJlZmxlY3RpbmcgYHByb2Nlc3MuZW52YCBhcyBpdCBzdGFuZHMgbm93LlxuICovXG5mdW5jdGlvbiBnZXRDaGlsZEVudigpOiBOb2RlSlMuUHJvY2Vzc0VudiB7XG4gIHJldHVybiBidWlsZENoaWxkRW52KHByb2Nlc3MuZW52LCBwcm9jZXNzLmFsbG93ZWROb2RlRW52aXJvbm1lbnRGbGFncyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBjb21tYW5kIGxpbmUgYXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2lsbCBhY3R1YWxseSBzZWUgaXQsIHdoaWNoIG9uIFdpbmRvd3MgaXNcbiAqIE5PVCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgcGFzc2VkIGluLlxuICpcbiAqIHtAbGluayBzcGF3blZpYVNoZWxsfSByb3V0ZXMgdGhlIGNvbW1hbmQgdGhyb3VnaCBgY21kLmV4ZWAsIGFuZCB0d28gdGhpbmdzIGFyZSBzcGVudCBiZXR3ZWVuIGhlcmUgYW5kXG4gKiB0aGVyZSwgbmVpdGhlciBvZiB0aGVtIHZpc2libGUgaW4gdGhlIGFzc2VtYmxlZCBjb21tYW5kOlxuICogLSBOb2RlJ3MgYHNwYXduKOKApiwgeyBzaGVsbDogdHJ1ZSB9KWAgd3JhcHMgaXQgYXMgYDxjb21zcGVjPiAvZCAvcyAvYyBcIjxjb21tYW5kPlwiYC5cbiAqIC0ge0BsaW5rIGNtZEVzY2FwZUNvbW1hbmRMaW5lfSBgXmAtZXNjYXBlcyBldmVyeSBvbmUgb2YgYGNtZC5leGVgJ3MgbWV0YWNoYXJhY3RlcnMsIHdoaWNoIG9uIGEgbGlzdCBvZlxuICogICBxdW90ZWQgcGF0aHMgaXMgYSBmZXcgcGVyY2VudCBvZiB0aGUgd2hvbGUgKG1lYXN1cmVkOiArMjM2IGNoYXJzIG9uIGEgNzIxNi1jaGFyIGludm9jYXRpb24pLlxuICpcbiAqIEJvdGggYXJlIG91cnMgdG8gY29tcHV0ZSwgc28gdGhleSBhcmUgY29tcHV0ZWQgcmF0aGVyIHRoYW4gZ3Vlc3NlZC4gV2hhdCBpcyBOT1QgY29tcHV0YWJsZSBmcm9tIGhlcmUgaXNcbiAqIHdoYXQgdGhlIHNwYXduZWQgY29tbWFuZCBkb2VzIHRvIGl0cyBvd24gYXJndW1lbnRzIOKAlCBzZWUge0BsaW5rIFdJTkRPV1NfQ0hJTERfRVhQQU5TSU9OX1JFU0VSVkV9LlxuICpcbiAqIFRoZSBwbGF0Zm9ybSBicmFuY2ggaGVyZSBNVVNUIHN0YXkgaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4ge0BsaW5rIHNwYXduVmlhU2hlbGx9LlxuICpcbiAqIEBwYXJhbSBjb21tYW5kTGluZSAtIFRoZSBhc3NlbWJsZWQgY29tbWFuZCBsaW5lLCBiZWZvcmUgYW55IHNoZWxsIHdyYXBwaW5nLlxuICogQHJldHVybnMgVGhlIGxlbmd0aCBpbiBjaGFyYWN0ZXJzIG9mIHdoYXQgcmVhY2hlcyB0aGUgb3BlcmF0aW5nIHN5c3RlbS5cbiAqL1xuZnVuY3Rpb24gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgoY29tbWFuZExpbmU6IHN0cmluZyk6IG51bWJlciB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIGNvbW1hbmRMaW5lLmxlbmd0aDtcbiAgfVxuXG4gIGNvbnN0IGNvbXNwZWMgPSBwcm9jZXNzLmVudlsnY29tc3BlYyddID8/ICdjbWQuZXhlJztcbiAgY29uc3QgQ01EX1dSQVBQRVIgPSAnIC9kIC9zIC9jIFwiXCInO1xuICByZXR1cm4gY29tc3BlYy5sZW5ndGggKyBDTURfV1JBUFBFUi5sZW5ndGggKyBjb21tYW5kRXNjYXBlQ29tbWFuZExpbmUoY29tbWFuZExpbmUpLmxlbmd0aDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtYXggY29tbWFuZCBsaW5lIGxlbmd0aCB0byBzaXplIGFuIHtAbGluayBFeGVjQXJndW1lbnR9IGJhdGNoIGFnYWluc3Qg4oCUIHRoZSBwbGF0Zm9ybSBtYXhpbXVtXG4gKiBsZXNzIHtAbGluayBXSU5ET1dTX0NISUxEX0VYUEFOU0lPTl9SRVNFUlZFfS5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgbW9yZSBjb25zZXJ2YXRpdmUgdGhhbiB7QGxpbmsgZ2V0TWF4Q29tbWFuZExlbmd0aH0sIGJlY2F1c2UgdGhlIHR3byBhbnN3ZXIgZGlmZmVyZW50XG4gKiBxdWVzdGlvbnMuIEV4Y2VlZGluZyB0aGUgcGxhaW4tY29tbWFuZCBsaW1pdCBpcyBhIGhhcmQgZmFpbHVyZSB0aGUgY2FsbGVyIGNhbm5vdCBhdm9pZCwgc28gdGhhdCBjaGVja1xuICogc3RheXMgZXhhY3QuIEV4Y2VlZGluZyB0aGUgYmF0Y2hpbmcgbGltaXQgb25seSBjb3N0cyBvbmUgZXh0cmEgaW52b2NhdGlvbiwgc28gdGhhdCBjaGVjayBtYXkg4oCUIGFuZFxuICogc2hvdWxkIOKAlCBsZWF2ZSByb29tIHRvIHNwYXJlLlxuICpcbiAqIEByZXR1cm5zIFRoZSBtYXggbGVuZ3RoIGluIGNoYXJhY3RlcnMgYXZhaWxhYmxlIHRvIGEgc2luZ2xlIGJhdGNoLlxuICovXG5mdW5jdGlvbiBnZXRNYXhCYXRjaENvbW1hbmRMZW5ndGgoKTogbnVtYmVyIHtcbiAgcmV0dXJuIGdldE1heENvbW1hbmRMZW5ndGgoKSAtIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gV0lORE9XU19DSElMRF9FWFBBTlNJT05fUkVTRVJWRSA6IDApO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIG1heCBjb21tYW5kIGxpbmUgbGVuZ3RoLlxuICpcbiAqIEByZXR1cm5zIFRoZSBtYXggY29tbWFuZCBsZW5ndGggaW4gY2hhcmFjdGVycy5cbiAqL1xuZnVuY3Rpb24gZ2V0TWF4Q29tbWFuZExlbmd0aCgpOiBudW1iZXIge1xuICBjb25zdCBXSU5ET1dTX01BWF9DT01NQU5EX0xFTkdUSCA9IDgxOTE7XG4gIGNvbnN0IFVOSVhfTUFYX0NPTU1BTkRfTEVOR1RIID0gMTMxXzA3MjtcbiAgcmV0dXJuIHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyBXSU5ET1dTX01BWF9DT01NQU5EX0xFTkdUSCA6IFVOSVhfTUFYX0NPTU1BTkRfTEVOR1RIO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgYSBjb21tYW5kIGFycmF5IHRoYXQgbWF5IGNvbnRhaW4gYW4ge0BsaW5rIEV4ZWNBcmd1bWVudH0uXG4gKiBSZXR1cm5zIGEgUHJvbWlzZSBpZiBiYXRjaGluZyBpcyBuZWVkZWQsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBjb21tYW5kXG4gKiBoYXMgbm8gRXhlY0FyZyBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCBub3JtYWxseS5cbiAqXG4gKiBAcGFyYW0gcGFydHMgLSBUaGUgY29tbWFuZCBwYXJ0cy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGV4ZWMgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSBpZiBiYXRjaGluZyBpcyBoYW5kbGVkLCBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlQmF0Y2hlZENvbW1hbmQocGFydHM6IENvbW1hbmRQYXJ0W10sIG9wdGlvbnM6IEV4ZWNPcHRpb25zKTogUHJvbWlzZTxFeGVjUmVzdWx0IHwgc3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGV4ZWNBcmd1bWVudHMgPSBwYXJ0cy5maWx0ZXIoaXNFeGVjQXJndW1lbnQpO1xuICBpZiAoZXhlY0FyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChleGVjQXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdPbmx5IG9uZSBFeGVjQXJnIHdpdGggYmF0Y2hlZEFyZ3VtZW50cyBpcyBhbGxvd2VkIHBlciBjb21tYW5kJykpO1xuICB9XG5cbiAgY29uc3QgZXhlY0FyZ3VtZW50ID0gZXhlY0FyZ3VtZW50c1swXTtcbiAgYXNzZXJ0Tm9uTnVsbGFibGUoZXhlY0FyZ3VtZW50KTtcbiAgY29uc3Qgc3RhdGljUGFydHMgPSBwYXJ0cy5maWx0ZXIoKHBhcnQpOiBwYXJ0IGlzIHN0cmluZyA9PiB0eXBlb2YgcGFydCA9PT0gJ3N0cmluZycpO1xuICBjb25zdCBiYXNlQ29tbWFuZCA9IGJ1aWxkQ29tbWFuZExpbmUoc3RhdGljUGFydHMpO1xuICBjb25zdCBtYXhDb21tYW5kTGVuZ3RoID0gZ2V0TWF4QmF0Y2hDb21tYW5kTGVuZ3RoKCk7XG5cbiAgLy8gVHJ5IGV4cGFuZGluZyBhbGwgYXJncyBpbmxpbmVcbiAgY29uc3QgZnVsbENvbW1hbmQgPSBgJHtiYXNlQ29tbWFuZH0gJHtidWlsZENvbW1hbmRMaW5lKFsuLi5leGVjQXJndW1lbnQuYmF0Y2hlZEFyZ3VtZW50c10pfWA7XG4gIGlmIChnZXRFZmZlY3RpdmVDb21tYW5kTGluZUxlbmd0aChmdWxsQ29tbWFuZCkgPD0gbWF4Q29tbWFuZExlbmd0aCkge1xuICAgIHJldHVybiBleGVjU3RyaW5nKHtcbiAgICAgIGNvbW1hbmQ6IGZ1bGxDb21tYW5kLFxuICAgICAgb3B0aW9uc1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU3BsaXQgaW50byBiYXRjaGVzXG4gIGNvbnN0IGJhdGNoZXM6IHN0cmluZ1tdW10gPSBbXTtcbiAgbGV0IGN1cnJlbnRCYXRjaDogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIGV4ZWNBcmd1bWVudC5iYXRjaGVkQXJndW1lbnRzKSB7XG4gICAgY29uc3QgdGVudGF0aXZlID0gYCR7YmFzZUNvbW1hbmR9ICR7YnVpbGRDb21tYW5kTGluZShbLi4uY3VycmVudEJhdGNoLCBhcmd1bWVudF0pfWA7XG4gICAgaWYgKGdldEVmZmVjdGl2ZUNvbW1hbmRMaW5lTGVuZ3RoKHRlbnRhdGl2ZSkgPiBtYXhDb21tYW5kTGVuZ3RoKSB7XG4gICAgICBpZiAoY3VycmVudEJhdGNoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCBzcGxpdCBjb21tYW5kIGludG8gYmF0Y2hlczogYSBzaW5nbGUgYXJndW1lbnQgKCR7U3RyaW5nKGFyZ3VtZW50Lmxlbmd0aCl9IGNoYXJzKSBwbHVzIHRoZSBiYXNlIGNvbW1hbmQgKCR7U3RyaW5nKGJhc2VDb21tYW5kLmxlbmd0aCl9IGNoYXJzKSBleGNlZWRzIHRoZSBtYXggYmF0Y2ggY29tbWFuZCBsZW5ndGggKCR7U3RyaW5nKG1heENvbW1hbmRMZW5ndGgpfSkuYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJhdGNoZXMucHVzaChjdXJyZW50QmF0Y2gpO1xuICAgICAgY3VycmVudEJhdGNoID0gW2FyZ3VtZW50XTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudEJhdGNoLnB1c2goYXJndW1lbnQpO1xuICAgIH1cbiAgfVxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gQWx3YXlzIHRydWUgYWZ0ZXIgdGhlIGxvb3A7IGJhdGNoZWRBcmd1bWVudHMgaXMgbm9uLWVtcHR5IGF0IHRoaXMgcG9pbnQuICovXG4gIGlmIChjdXJyZW50QmF0Y2gubGVuZ3RoID4gMCkge1xuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgYmF0Y2hlcy5wdXNoKGN1cnJlbnRCYXRjaCk7XG4gIH1cblxuICByZXR1cm4gZXhlY3V0ZUJhdGNoZXMoe1xuICAgIGJhc2VDb21tYW5kLFxuICAgIGJhdGNoZXMsXG4gICAgb3B0aW9uc1xuICB9KTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHJlc3VsdCByZWNvcmRzIGFuIGFibm9ybWFsIHRlcm1pbmF0aW9uIOKAlCBhbiBOVFNUQVRVUyBlcnJvciBjb2RlIG9yIGEgc2lnbmFsIOKAlCByYXRoZXIgdGhhblxuICogdGhlIGNoaWxkIGV4aXRpbmcgb24gaXRzIG93biB3aXRoIGEgY29kZSBvZiBpdHMgY2hvb3NpbmcuXG4gKlxuICogQHBhcmFtIHJlc3VsdCAtIFRoZSByZXN1bHQgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjaGlsZCB0ZXJtaW5hdGVkIGFibm9ybWFsbHkuXG4gKi9cbmZ1bmN0aW9uIGlzQWJub3JtYWxUZXJtaW5hdGlvbihyZXN1bHQ6IEV4ZWNSZXN1bHQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJlc3VsdC5leGl0U2lnbmFsICE9PSBudWxsIHx8IHRvTnRTdGF0dXMocmVzdWx0LmV4aXRDb2RlKSAhPT0gbnVsbDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBjb21tYW5kIHBhcnQgaXMgYW4ge0BsaW5rIEV4ZWNBcmd1bWVudH0uXG4gKlxuICogQHBhcmFtIHBhcnQgLSBUaGUgY29tbWFuZCBwYXJ0IHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcGFydCBpcyBhbiBFeGVjQXJnLlxuICovXG5mdW5jdGlvbiBpc0V4ZWNBcmd1bWVudChwYXJ0OiBDb21tYW5kUGFydCk6IHBhcnQgaXMgRXhlY0FyZ3VtZW50IHtcbiAgcmV0dXJuIHR5cGVvZiBwYXJ0ID09PSAnb2JqZWN0JyAmJiAnYmF0Y2hlZEFyZ3VtZW50cycgaW4gcGFydDtcbn1cblxuLyoqXG4gKiBBcHBlbmRzIGEgYmF0Y2gncyBjYXB0dXJlZCBvdXRwdXQgdG8gdGhlIGFjY3VtdWxhdG9yLCBza2lwcGluZyBhbiBlbXB0eSBvbmUgc28gdGhlIGV2ZW50dWFsIGpvaW4gZG9lcyBub3RcbiAqIGZhYnJpY2F0ZSBibGFuayBsaW5lcyBmb3IgYmF0Y2hlcyB0aGF0IHByaW50ZWQgbm90aGluZy5cbiAqXG4gKiBAcGFyYW0gYWNjdW11bGF0b3IgLSBUaGUgY29sbGVjdGVkIG91dHB1dHMgc28gZmFyLlxuICogQHBhcmFtIG91dHB1dCAtIFRoZSBvdXRwdXQgb2YgYSBzaW5nbGUgYmF0Y2guXG4gKi9cbmZ1bmN0aW9uIHB1c2hJZk5vdEVtcHR5KGFjY3VtdWxhdG9yOiBzdHJpbmdbXSwgb3V0cHV0OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKG91dHB1dCAhPT0gJycpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG91dHB1dCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTcGF3bnMgYSBjaGlsZCBwcm9jZXNzIHZpYSB0aGUgYXBwcm9wcmlhdGUgc2hlbGwuXG4gKlxuICogT24gV2luZG93cywgaWYgdGhlIGNvbW1hbmQgY29udGFpbnMgbmV3bGluZXMgKHdoaWNoIGBjbWQuZXhlYCBjYW5ub3QgaGFuZGxlKVxuICogYW5kIHRoZSByYXcgYXJncyBhcnJheSBpcyBhdmFpbGFibGUsIHNwYXducyB0aGUgcHJvY2VzcyBkaXJlY3RseSB3aXRob3V0XG4gKiBhbnkgc2hlbGwg4oCUIHBhc3NpbmcgYXJncyB2aWEgYENyZWF0ZVByb2Nlc3NgLCB3aGljaCBhdm9pZHMgYWxsIHF1b3RpbmcgaXNzdWVzLlxuICpcbiAqIE9uIFdpbmRvd3MgKGNtZC5leGUgcGF0aCksIGFwcGxpZXMgYF5gLWVzY2FwaW5nIGZvciBjbWQgbWV0YWNoYXJhY3RlcnMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBzcGF3bmluZyB0aGUgY2hpbGQgcHJvY2Vzcy5cbiAqIEByZXR1cm5zIFRoZSBzcGF3bmVkIGNoaWxkIHByb2Nlc3MuXG4gKi9cbmZ1bmN0aW9uIHNwYXduVmlhU2hlbGwocGFyYW1zOiBTcGF3blZpYVNoZWxsUGFyYW1zKTogQ2hpbGRQcm9jZXNzIHtcbiAgY29uc3QgeyBjb21tYW5kLCBjd2QsIGVudjogZXh0cmFFbnYsIGlzSW50ZXJhY3RpdmUgPSBmYWxzZSwgcmF3QXJndW1lbnRzIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVudjogTm9kZUpTLlByb2Nlc3NFbnYgPSB7XG4gICAgLi4uZ2V0Q2hpbGRFbnYoKSxcbiAgICAuLi5leHRyYUVudlxuICB9O1xuICBjb25zdCBzdGRpbzogJ2luaGVyaXQnIHwgJ3BpcGUnID0gaXNJbnRlcmFjdGl2ZSA/ICdpbmhlcml0JyA6ICdwaXBlJztcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgJiYgY29tbWFuZC5pbmNsdWRlcygnXFxuJykpIHtcbiAgICBpZiAoIXJhd0FyZ3VtZW50cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21tYW5kcyBjb250YWluaW5nIG5ld2xpbmVzIGNhbm5vdCBiZSBleGVjdXRlZCB0aHJvdWdoIGNtZC5leGUgb24gV2luZG93cy4gUGFzcyBhbiBhcmd1bWVudCBhcnJheSBpbnN0ZWFkIG9mIGEgc3RyaW5nLicpO1xuICAgIH1cbiAgICBjb25zdCBbcHJvZ3JhbSwgLi4uJGFyZ3VtZW50c10gPSByYXdBcmd1bWVudHM7XG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUocHJvZ3JhbSwgJ0NvbW1hbmQgYXJyYXkgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgICByZXR1cm4gc3Bhd24ocHJvZ3JhbSwgJGFyZ3VtZW50cywge1xuICAgICAgY3dkLFxuICAgICAgZW52LFxuICAgICAgc3RkaW9cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHNoZWxsQ29tbWFuZCA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyBjb21tYW5kRXNjYXBlQ29tbWFuZExpbmUoY29tbWFuZCkgOiBjb21tYW5kO1xuICByZXR1cm4gc3Bhd24oc2hlbGxDb21tYW5kLCBbXSwge1xuICAgIGN3ZCxcbiAgICBlbnYsXG4gICAgc2hlbGw6IHRydWUsXG4gICAgc3RkaW9cbiAgfSk7XG59XG5cbi8qKlxuICogUmVhZHMgYW4gZXhpdCBjb2RlIGFzIGEgV2luZG93cyBOVFNUQVRVUyBlcnJvciwgaWYgaXQgaXMgb25lLlxuICpcbiAqIEEgY3Jhc2hlZCBwcm9jZXNzIG9uIFdpbmRvd3MgZXhpdHMgd2l0aCB0aGUgTlRTVEFUVVMgb2YgdGhlIGV4Y2VwdGlvbiB0aGF0IGtpbGxlZCBpdCwgYW5kIGEgYC5jbWRgIHNoaW1cbiAqIGZvcndhcmRzIGl0cyBpbm5lciBwcm9jZXNzJ3MgY29kZSwgc28gYSBjcmFzaGVkIGBub2RlLmV4ZWAgYXJyaXZlcyBoZXJlIGludGFjdCDigJQgYDB4QzAwMDAwMDVgIGFzXG4gKiBgMzIyMTIyNTQ3N2AuIFRoZSB0ZXN0IGlzIHRoZSBOVFNUQVRVUyBsYXlvdXQgcmF0aGVyIHRoYW4gYSBiYXJlIGA+PSAweEMwMDAwMDAwYDogdGhlIHRvcCB0d28gYml0cyBhcmUgdGhlXG4gKiBlcnJvciBzZXZlcml0eSBhbmQgdGhlIG5leHQgb25lIGlzIHRoZSBjdXN0b21lciBmbGFnLCB3aGljaCBtdXN0IGJlIGNsZWFyLiBUaGF0IGtlZXBzIG91dCB0d28gY29kZXMgYSBiYXJlXG4gKiByYW5nZSB3b3VsZCBtaXNyZWFkIOKAlCBgcHJvY2Vzcy5leGl0KC0xKWAsIHdoaWNoIFdpbmRvd3MgcmVwb3J0cyBhcyBgMHhGRkZGRkZGRmAsIGFuZCB0aGUgYDB4RTA2RDczNjNgIG9mIGFuXG4gKiB1bmhhbmRsZWQgQysrIGV4Y2VwdGlvbiwgd2hpY2ggaXMgYSBjcmFzaCBidXQgbm90IGFuIE5UU1RBVFVTLiBBIHNpZ25lZCByZWFkaW5nIG9mIHRoZSBzYW1lIGNvZGUgaXMgYWNjZXB0ZWRcbiAqIHRvby4gTm8gbGludGVyLCBjb21waWxlciBvciB0ZXN0IHJ1bm5lciByZXR1cm5zIGEgY29kZSBvZiB0aGlzIHNoYXBlIGFzIGEgY291bnQgb2YgZmluZGluZ3MuXG4gKlxuICogQHBhcmFtIGV4aXRDb2RlIC0gVGhlIGV4aXQgY29kZSB0aGUgY2hpbGQgcmVwb3J0ZWQuXG4gKiBAcmV0dXJucyBUaGUgY29kZSBhcyBhbiB1bnNpZ25lZCBOVFNUQVRVUywgb3IgYG51bGxgIHdoZW4gaXQgaXMgbm90IGFuIE5UU1RBVFVTIGVycm9yLlxuICovXG5mdW5jdGlvbiB0b050U3RhdHVzKGV4aXRDb2RlOiBudWxsIHwgbnVtYmVyKTogbnVsbCB8IG51bWJlciB7XG4gIGlmIChleGl0Q29kZSA9PT0gbnVsbCB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIoZXhpdENvZGUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBFcnJvciBzZXZlcml0eSAodG9wIHR3byBiaXRzIHNldCkgd2l0aCB0aGUgY3VzdG9tZXIgYml0IGNsZWFyIGlzIGV4YWN0bHkgdGhlIHJhbmdlIFsweEMwMDAwMDAwLCAweEUwMDAwMDAwKS5cbiAgY29uc3QgTlRTVEFUVVNfRVJST1JfU1RBUlQgPSAweEMwXzAwXzAwXzAwO1xuICBjb25zdCBOVFNUQVRVU19FUlJPUl9FTkQgPSAweEUwXzAwXzAwXzAwO1xuICBjb25zdCBVSU5UMzJfUkFOR0UgPSAweDFfMDBfMDBfMDBfMDA7XG4gIGNvbnN0IHVuc2lnbmVkID0gZXhpdENvZGUgPCAwID8gZXhpdENvZGUgKyBVSU5UMzJfUkFOR0UgOiBleGl0Q29kZTtcbiAgcmV0dXJuIHVuc2lnbmVkID49IE5UU1RBVFVTX0VSUk9SX1NUQVJUICYmIHVuc2lnbmVkIDwgTlRTVEFUVVNfRVJST1JfRU5EID8gdW5zaWduZWQgOiBudWxsO1xufVxuXG4vKipcbiAqIFNob3J0ZW5zIGEgY29tbWFuZCBmb3IgcXVvdGluZyBpbiBhbiBlcnJvciBtZXNzYWdlLCBrZWVwaW5nIGl0cyBzdGFydCwgd2hpY2ggbmFtZXMgdGhlIHByb2dyYW0uXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBzaG9ydGVuLlxuICogQHJldHVybnMgVGhlIGNvbW1hbmQsIGN1dCB0byB7QGxpbmsgTUFYX0NPTU1BTkRfTEVOR1RIX0lOX01FU1NBR0V9IGNoYXJhY3RlcnMgcGx1cyBhbiBlbGxpcHNpcyB3aGVuIGxvbmdlci5cbiAqL1xuZnVuY3Rpb24gdHJ1bmNhdGVDb21tYW5kKGNvbW1hbmQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBjb21tYW5kLmxlbmd0aCA+IE1BWF9DT01NQU5EX0xFTkdUSF9JTl9NRVNTQUdFID8gYCR7Y29tbWFuZC5zbGljZSgwLCBNQVhfQ09NTUFORF9MRU5HVEhfSU5fTUVTU0FHRSl94oCmYCA6IGNvbW1hbmQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsbUJBQStCO0FBQy9CLDBCQUE0QztBQUM1QyxvQkFBd0I7QUFDeEIseUJBQWtDO0FBQ2xDLGdDQUFzQjtBQUN0QiwwQkFBb0I7QUFFcEIsdUJBSU87QUEwSkEsU0FBUyxpQkFBaUIscUJBQXlDLFFBQXdCO0FBQ2hHLFFBQU0sV0FBVyx1QkFBdUIsSUFBSSxLQUFLO0FBQ2pELE1BQUksWUFBWSxJQUFJO0FBQ2xCLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxRQUFRLE1BQU0sS0FBSyxFQUFFLFNBQVMsTUFBTSxJQUFJLFVBQVUsR0FBRyxPQUFPLElBQUksTUFBTTtBQUMvRTtBQWFPLFNBQVMsY0FBYyxTQUE0Qiw2QkFBcUU7QUFDN0gsU0FBTztBQUFBLElBQ0wsY0FBYztBQUFBLElBQ2QsR0FBRztBQUFBLElBQ0gsR0FBSSw0QkFBNEIsSUFBSSxxQkFBcUIsS0FBSyxFQUFFLGNBQWMsaUJBQWlCLFFBQVEsY0FBYyxHQUFHLHlCQUF5QixFQUFFO0FBQUEsRUFDcko7QUFDRjtBQTBDTyxTQUFTLEtBQUssU0FBaUMsVUFBdUIsQ0FBQyxHQUFpQztBQUM3RyxNQUFJLE1BQU0sUUFBUSxPQUFPLEdBQUc7QUFDMUIsVUFBTSxjQUFjLHFCQUFxQixTQUFT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UUFBTSxNQUF5QjtBQUFBLElBQzdCLEdBQUcsWUFBWTtBQUFBLElBQ2YsR0FBRztBQUFBLEVBQ0w7QUFDQSxRQUFNLFFBQTRCLGdCQUFnQixZQUFZO0FBQzlELE1BQUksb0JBQUFBLFFBQVEsYUFBYSxXQUFXLFFBQVEsU0FBUyxJQUFJLEdBQUc7QUFDMUQsUUFBSSxDQUFDLGNBQWM7QUFDakIsWUFBTSxJQUFJLE1BQU0seUhBQXlIO0FBQUEsSUFDM0k7QUFDQSxVQUFNLENBQUMsU0FBUyxHQUFHLFVBQVUsSUFBSTtBQUNqQyw4Q0FBa0IsU0FBUyxpQ0FBaUM7QUFDNUQsZUFBTyxpQ0FBTSxTQUFTLFlBQVk7QUFBQSxNQUNoQztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUVBLFFBQU0sZUFBZSxvQkFBQUEsUUFBUSxhQUFhLGNBQVUsaUJBQUFDLHNCQUF5QixPQUFPLElBQUk7QUFDeEYsYUFBTyxpQ0FBTSxjQUFjLENBQUMsR0FBRztBQUFBLElBQzdCO0FBQUEsSUFDQTtBQUFBLElBQ0EsT0FBTztBQUFBLElBQ1A7QUFBQSxFQUNGLENBQUM7QUFDSDtBQWdCQSxTQUFTLFdBQVcsVUFBd0M7QUFDMUQsTUFBSSxhQUFhLFFBQVEsQ0FBQyxPQUFPLGNBQWMsUUFBUSxHQUFHO0FBQ3hELFdBQU87QUFBQSxFQUNUO0FBR0EsUUFBTSx1QkFBdUI7QUFDN0IsUUFBTSxxQkFBcUI7QUFDM0IsUUFBTSxlQUFlO0FBQ3JCLFFBQU0sV0FBVyxXQUFXLElBQUksV0FBVyxlQUFlO0FBQzFELFNBQU8sWUFBWSx3QkFBd0IsV0FBVyxxQkFBcUIsV0FBVztBQUN4RjtBQVFBLFNBQVMsZ0JBQWdCLFNBQXlCO0FBQ2hELFNBQU8sUUFBUSxTQUFTLGdDQUFnQyxHQUFHLFFBQVEsTUFBTSxHQUFHLDZCQUE2QixDQUFDLFdBQU07QUFDbEg7IiwibmFtZXMiOlsibWF4Q29tbWFuZExlbmd0aCIsImVmZmVjdGl2ZUxlbmd0aCIsInByb2Nlc3MiLCJjb21tYW5kRXNjYXBlQ29tbWFuZExpbmUiXX0=
@@ -1,4 +1,5 @@
1
1
  /// <reference path="./library-references.d.cts" />
2
+ /// <reference types="node" />
2
3
  /**
3
4
  * @file
4
5
  *
@@ -2,13 +2,7 @@
2
2
  THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
-
6
5
  (function () {
7
- function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
- }
11
-
12
6
  function ensureBrowserProcess() {
13
7
  const browserProcess = {
14
8
  browser: true,
@@ -39,23 +33,7 @@ function ensureBrowserProcess() {
39
33
  existingProcessRecord['browser'] = true;
40
34
  }
41
35
 
42
- function keepName($unknown) {
43
- return $unknown;
44
- }
45
-
46
- (function initCjs() {
47
- const globalThisRecord = globalThis;
48
- ensureDisposeSymbols();
49
- globalThisRecord['__name'] ??= keepName;
50
- globalThisRecord['__extractDefault'] ??= extractDefault;
51
-
52
- ensureBrowserProcess();
53
-
54
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
55
- function extractDefault(module) {
56
- return module && module.__esModule && 'default' in module ? module.default : module;
57
- }
58
- })();
36
+ ensureBrowserProcess();
59
37
  })();
60
38
 
61
39
  "use strict";
@@ -95,7 +73,7 @@ __export(forbidden_patterns_exports, {
95
73
  module.exports = __toCommonJS(forbidden_patterns_exports);
96
74
  var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
97
75
  var import_promises = require('node:fs/promises');
98
- var import_node_process = __toESM(__extractDefault(require('node:process')), 1);
76
+ var import_node_process = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('node:process')), 1);
99
77
  var import_env_toggle = require('./env-toggle.cjs');
100
78
  const FORBIDDEN_PATTERNS_FILE_ENV_VARIABLE = "FORBIDDEN_PATTERNS_FILE";
101
79
  const REG_EXP_LITERAL_REG_EXP = /^\/(?<source>.+)\/(?<flags>[a-z]*)$/;
@@ -154,4 +132,4 @@ function toRegExp(line) {
154
132
  findForbiddenPatternMatches,
155
133
  readForbiddenPatterns
156
134
  });
157
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2ZvcmJpZGRlbi1wYXR0ZXJucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEFuIFVOUFVCTElTSEVEIGxpc3Qgb2YgcGF0dGVybnMgdGhhdCBhIHJlbGVhc2UgbXVzdCBuZXZlciBwdWJsaXNoLCByZWFkIGZyb20gYSBmaWxlIHRoZSByZXBvc2l0b3J5IGRvZXMgbm90XG4gKiBjb250YWluLlxuICpcbiAqIFRoZSBsaXN0IGV4aXN0cyBmb3Igdm9jYWJ1bGFyeSB0aGF0IGlzIHByaXZhdGUgdG8gb25lIG1haW50YWluZXIncyBtYWNoaW5lIFx1MjAxNCBhbiBpbnRlcm5hbCB0cmFja2VyJ3MgaWRzLCB0aGVcbiAqIHNob3J0IG5hbWVzIG9mIHRoZWlyIHByb2plY3RzIFx1MjAxNCBhbmQgd2hpY2ggYSBjb21taXQgc3ViamVjdCBjYW4gY2Fycnkgc3RyYWlnaHQgaW50byBhIGdlbmVyYXRlZCBjaGFuZ2Vsb2dcbiAqIHNlY3Rpb24uIE5laXRoZXIgb2YgdGhlIHR3byBvYnZpb3VzIGhvbWVzIHdvcmtzIGZvciBpdDogYSBsaXRlcmFsIGluIHRoaXMgbGlicmFyeSB3b3VsZCBzaGlwIHRoZSBsaXN0IHRvIGV2ZXJ5XG4gKiBjb25zdW1lciBvbiBucG0sIGFuZCBhIGNoZWNrZWQtaW4gcGVyLXJlcG9zaXRvcnkgY29uZmlnIHdvdWxkIHB1Ymxpc2ggaXQgaW4gZXZlcnkgcHVibGljIHJlcG9zaXRvcnkgdGhhdCB1c2VkXG4gKiBpdCwgcGVybWFuZW50bHkuIFNvIHRoZSBsaXN0IGlzIG5hbWVkIGJ5IHRoZSB7QGxpbmsgRk9SQklEREVOX1BBVFRFUk5TX0ZJTEVfRU5WX1ZBUklBQkxFfSBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICogKHdoaWNoIGEgZ2l0aWdub3JlZCBgLmVudmAgY2FuIHNldCksIHBvaW50cyBhdCBhIGZpbGUgb3V0c2lkZSB0aGUgcmVwb3NpdG9yeSwgYW5kIGlzIGEgbm8tb3Agd2hlcmV2ZXIgaXQgaXMgbm90XG4gKiBzZXQgXHUyMDE0IGEgY29uc3VtZXIgd2hvIGhhcyBub3QgY29uZmlndXJlZCBpdCBzZWVzIG5vIGNoYW5nZSBhdCBhbGwuXG4gKlxuICogVGhlIGZpbGUgaG9sZHMgb25lIHBhdHRlcm4gcGVyIGxpbmUuIEJsYW5rIGxpbmVzIGFuZCBsaW5lcyBzdGFydGluZyB3aXRoIGAjYCBhcmUgaWdub3JlZC4gQSBsaW5lIHdyaXR0ZW4gYXMgYVxuICogcmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwgXHUyMDE0IGAvXFxiZm9vXFxiL2lgIFx1MjAxNCB0YWtlcyB0aGUgZmxhZ3MgaXQgbmFtZXM7IGFueSBvdGhlciBsaW5lIGlzIGEgY2FzZS1zZW5zaXRpdmVcbiAqIHJlZ3VsYXIgZXhwcmVzc2lvbiBzb3VyY2UuIFRoZSBnbG9iYWwgYW5kIHN0aWNreSBmbGFncyBhcmUgZHJvcHBlZCwgc2luY2UgYSBtYXRjaCBoZXJlIGlzIGEgeWVzL25vIHF1ZXN0aW9uXG4gKiBhc2tlZCBvZiBvbmUgbGluZSBhdCBhIHRpbWUuXG4gKi9cblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7IGxvYWRFbnZGaWxlSWZFeGlzdHMgfSBmcm9tICcuL2Vudi10b2dnbGUudHMnO1xuXG4vKipcbiAqIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1pbmcgdGhlIGZvcmJpZGRlbi1wYXR0ZXJucyBmaWxlLlxuICovXG5leHBvcnQgY29uc3QgRk9SQklEREVOX1BBVFRFUk5TX0ZJTEVfRU5WX1ZBUklBQkxFID0gJ0ZPUkJJRERFTl9QQVRURVJOU19GSUxFJztcblxuLyoqXG4gKiBPbmUgbGluZSBvZiB0ZXh0IHRoYXQgYSBmb3JiaWRkZW4gcGF0dGVybiBtYXRjaGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcmJpZGRlblBhdHRlcm5NYXRjaCB7XG4gIC8qKlxuICAgKiBUaGUgbGluZSB0aGF0IGNhcnJpZXMgdGhlIG1hdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgbGluZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0aGUgcGF0dGVybiBtYXRjaGVkIHdpdGhpbiB7QGxpbmsgbGluZX0uXG4gICAqL1xuICByZWFkb25seSBtYXRjaDogc3RyaW5nO1xufVxuXG5jb25zdCBSRUdfRVhQX0xJVEVSQUxfUkVHX0VYUCA9IC9eXFwvKD88c291cmNlPi4rKVxcLyg/PGZsYWdzPlthLXpdKikkLztcbmNvbnN0IFNUQVRFRlVMX0ZMQUdTX1JFR19FWFAgPSAvW2d5XS9nO1xuXG4vKipcbiAqIEZpbmRzIGV2ZXJ5IGxpbmUgb2YgYHRleHRgIHRoYXQgb25lIG9mIGBwYXR0ZXJuc2AgbWF0Y2hlcy5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIHNjYW4sIGxpbmUgYnkgbGluZS5cbiAqIEBwYXJhbSBwYXR0ZXJucyAtIFRoZSBwYXR0ZXJucywgYXMge0BsaW5rIHJlYWRGb3JiaWRkZW5QYXR0ZXJuc30gcmV0dXJuZWQgdGhlbS5cbiAqIEByZXR1cm5zIE9uZSB7QGxpbmsgRm9yYmlkZGVuUGF0dGVybk1hdGNofSBwZXIgb2ZmZW5kaW5nIGxpbmUsIG5hbWluZyB0aGUgZmlyc3QgcGF0dGVybiB0aGF0IG1hdGNoZWQgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRm9yYmlkZGVuUGF0dGVybk1hdGNoZXModGV4dDogc3RyaW5nLCBwYXR0ZXJuczogcmVhZG9ubHkgUmVnRXhwW10pOiBGb3JiaWRkZW5QYXR0ZXJuTWF0Y2hbXSB7XG4gIGNvbnN0IG1hdGNoZXM6IEZvcmJpZGRlblBhdHRlcm5NYXRjaFtdID0gW107XG5cbiAgZm9yIChjb25zdCBsaW5lIG9mIHRleHQuc3BsaXQoL1xccj9cXG4vKSkge1xuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgICAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMobGluZSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgbWF0Y2hlcy5wdXNoKHsgbGluZSwgbWF0Y2g6IG1hdGNoWzBdIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlcztcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgZm9yYmlkZGVuIHBhdHRlcm5zIGZyb20gdGhlIGZpbGUge0BsaW5rIEZPUkJJRERFTl9QQVRURVJOU19GSUxFX0VOVl9WQVJJQUJMRX0gbmFtZXMsIGxvYWRpbmcgdGhlXG4gKiBvcHRpb25hbCBgLmVudmAgZmlyc3QuXG4gKlxuICogQW4gdW5zZXQgb3IgYmxhbmsgdmFyaWFibGUgbWVhbnMgbm8gbGlzdCBpcyBjb25maWd1cmVkLCBhbmQgeWllbGRzIG5vIHBhdHRlcm5zLiBBIHZhcmlhYmxlIHRoYXQgSVMgc2V0IGJ1dFxuICogbmFtZXMgYSBmaWxlIHRoYXQgY2Fubm90IGJlIHJlYWQgdGhyb3dzIGluc3RlYWQgb2YgeWllbGRpbmcgbm9uZTogYSBndWFyZCB0aGF0IHN3aXRjaGVzIGl0c2VsZiBvZmYgYmVjYXVzZVxuICogaXRzIGxpc3QgbW92ZWQgaXMgcHJlY2lzZWx5IHRoZSBzaWxlbnQgZmFpbHVyZSBpdCBleGlzdHMgdG8gcHJldmVudC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjb21waWxlZCBwYXR0ZXJucy5cbiAqIEB0aHJvd3MgSWYgdGhlIG5hbWVkIGZpbGUgY2Fubm90IGJlIHJlYWQsIG9yIG9uZSBvZiBpdHMgbGluZXMgaXMgbm90IGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEZvcmJpZGRlblBhdHRlcm5zKCk6IFByb21pc2U8UmVnRXhwW10+IHtcbiAgbG9hZEVudkZpbGVJZkV4aXN0cygpO1xuICBjb25zdCBmaWxlUGF0aCA9IChwcm9jZXNzLmVudltGT1JCSURERU5fUEFUVEVSTlNfRklMRV9FTlZfVkFSSUFCTEVdID8/ICcnKS50cmltKCk7XG4gIGlmIChmaWxlUGF0aCA9PT0gJycpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBsZXQgY29udGVudDogc3RyaW5nO1xuICB0cnkge1xuICAgIGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke0ZPUkJJRERFTl9QQVRURVJOU19GSUxFX0VOVl9WQVJJQUJMRX0gbmFtZXMgJHtmaWxlUGF0aH0sIHdoaWNoIGNhbm5vdCBiZSByZWFkLmAsIHsgY2F1c2U6IGVycm9yIH0pO1xuICB9XG5cbiAgY29uc3QgcGF0dGVybnM6IFJlZ0V4cFtdID0gW107XG4gIGZvciAoY29uc3QgW2luZGV4LCByYXdMaW5lXSBvZiBjb250ZW50LnNwbGl0KC9cXHI/XFxuLykuZW50cmllcygpKSB7XG4gICAgY29uc3QgbGluZSA9IHJhd0xpbmUudHJpbSgpO1xuICAgIGlmIChsaW5lID09PSAnJyB8fCBsaW5lLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHBhdHRlcm5zLnB1c2godG9SZWdFeHAobGluZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExpbmUgJHtTdHJpbmcoaW5kZXggKyAxKX0gb2YgdGhlIGZvcmJpZGRlbi1wYXR0ZXJucyBmaWxlICR7ZmlsZVBhdGh9IGlzIG5vdCBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbi5gLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGF0dGVybnM7XG59XG5cbmZ1bmN0aW9uIHRvUmVnRXhwKGxpbmU6IHN0cmluZyk6IFJlZ0V4cCB7XG4gIGNvbnN0IGdyb3VwcyA9IFJFR19FWFBfTElURVJBTF9SRUdfRVhQLmV4ZWMobGluZSk/Lmdyb3VwcztcbiAgaWYgKCFncm91cHMpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChsaW5lKTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZSA9IGVuc3VyZU5vbk51bGxhYmxlKGdyb3Vwc1snc291cmNlJ10pO1xuICBjb25zdCBmbGFncyA9IGVuc3VyZU5vbk51bGxhYmxlKGdyb3Vwc1snZmxhZ3MnXSk7XG4gIHJldHVybiBuZXcgUmVnRXhwKHNvdXJjZSwgZmxhZ3MucmVwbGFjZUFsbChTVEFURUZVTF9GTEFHU19SRUdfRVhQLCAnJykpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBb0JBLHlCQUFrQztBQUNsQyxzQkFBeUI7QUFDekIsMEJBQW9CO0FBRXBCLHdCQUFvQztBQUs3QixNQUFNLHVDQUF1QztBQWlCcEQsTUFBTSwwQkFBMEI7QUFDaEMsTUFBTSx5QkFBeUI7QUFTeEIsU0FBUyw0QkFBNEIsTUFBYyxVQUFzRDtBQUM5RyxRQUFNLFVBQW1DLENBQUM7QUFFMUMsYUFBVyxRQUFRLEtBQUssTUFBTSxPQUFPLEdBQUc7QUFDdEMsZUFBVyxXQUFXLFVBQVU7QUFDOUIsWUFBTSxRQUFRLFFBQVEsS0FBSyxJQUFJO0FBQy9CLFVBQUksT0FBTztBQUNULGdCQUFRLEtBQUssRUFBRSxNQUFNLE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUN0QztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQWFBLGVBQXNCLHdCQUEyQztBQUMvRCw2Q0FBb0I7QUFDcEIsUUFBTSxZQUFZLG9CQUFBQSxRQUFRLElBQUksb0NBQW9DLEtBQUssSUFBSSxLQUFLO0FBQ2hGLE1BQUksYUFBYSxJQUFJO0FBQ25CLFdBQU8sQ0FBQztBQUFBLEVBQ1Y7QUFFQSxNQUFJO0FBQ0osTUFBSTtBQUNGLGNBQVUsVUFBTSwwQkFBUyxVQUFVLE9BQU87QUFBQSxFQUM1QyxTQUFTLE9BQU87QUFDZCxVQUFNLElBQUksTUFBTSxHQUFHLG9DQUFvQyxVQUFVLFFBQVEsMkJBQTJCLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFBQSxFQUN0SDtBQUVBLFFBQU0sV0FBcUIsQ0FBQztBQUM1QixhQUFXLENBQUMsT0FBTyxPQUFPLEtBQUssUUFBUSxNQUFNLE9BQU8sRUFBRSxRQUFRLEdBQUc7QUFDL0QsVUFBTSxPQUFPLFFBQVEsS0FBSztBQUMxQixRQUFJLFNBQVMsTUFBTSxLQUFLLFdBQVcsR0FBRyxHQUFHO0FBQ3ZDO0FBQUEsSUFDRjtBQUVBLFFBQUk7QUFDRixlQUFTLEtBQUssU0FBUyxJQUFJLENBQUM7QUFBQSxJQUM5QixTQUFTLE9BQU87QUFDZCxZQUFNLElBQUksTUFBTSxRQUFRLE9BQU8sUUFBUSxDQUFDLENBQUMsbUNBQW1DLFFBQVEsdUNBQXVDLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFBQSxJQUM3STtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTLFNBQVMsTUFBc0I7QUFDdEMsUUFBTSxTQUFTLHdCQUF3QixLQUFLLElBQUksR0FBRztBQUNuRCxNQUFJLENBQUMsUUFBUTtBQUNYLFdBQU8sSUFBSSxPQUFPLElBQUk7QUFBQSxFQUN4QjtBQUVBLFFBQU0sYUFBUyxzQ0FBa0IsT0FBTyxRQUFRLENBQUM7QUFDakQsUUFBTSxZQUFRLHNDQUFrQixPQUFPLE9BQU8sQ0FBQztBQUMvQyxTQUFPLElBQUksT0FBTyxRQUFRLE1BQU0sV0FBVyx3QkFBd0IsRUFBRSxDQUFDO0FBQ3hFOyIsCiAgIm5hbWVzIjogWyJwcm9jZXNzIl0KfQo=
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb3JiaWRkZW4tcGF0dGVybnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEFuIFVOUFVCTElTSEVEIGxpc3Qgb2YgcGF0dGVybnMgdGhhdCBhIHJlbGVhc2UgbXVzdCBuZXZlciBwdWJsaXNoLCByZWFkIGZyb20gYSBmaWxlIHRoZSByZXBvc2l0b3J5IGRvZXMgbm90XG4gKiBjb250YWluLlxuICpcbiAqIFRoZSBsaXN0IGV4aXN0cyBmb3Igdm9jYWJ1bGFyeSB0aGF0IGlzIHByaXZhdGUgdG8gb25lIG1haW50YWluZXIncyBtYWNoaW5lIOKAlCBhbiBpbnRlcm5hbCB0cmFja2VyJ3MgaWRzLCB0aGVcbiAqIHNob3J0IG5hbWVzIG9mIHRoZWlyIHByb2plY3RzIOKAlCBhbmQgd2hpY2ggYSBjb21taXQgc3ViamVjdCBjYW4gY2Fycnkgc3RyYWlnaHQgaW50byBhIGdlbmVyYXRlZCBjaGFuZ2Vsb2dcbiAqIHNlY3Rpb24uIE5laXRoZXIgb2YgdGhlIHR3byBvYnZpb3VzIGhvbWVzIHdvcmtzIGZvciBpdDogYSBsaXRlcmFsIGluIHRoaXMgbGlicmFyeSB3b3VsZCBzaGlwIHRoZSBsaXN0IHRvIGV2ZXJ5XG4gKiBjb25zdW1lciBvbiBucG0sIGFuZCBhIGNoZWNrZWQtaW4gcGVyLXJlcG9zaXRvcnkgY29uZmlnIHdvdWxkIHB1Ymxpc2ggaXQgaW4gZXZlcnkgcHVibGljIHJlcG9zaXRvcnkgdGhhdCB1c2VkXG4gKiBpdCwgcGVybWFuZW50bHkuIFNvIHRoZSBsaXN0IGlzIG5hbWVkIGJ5IHRoZSB7QGxpbmsgRk9SQklEREVOX1BBVFRFUk5TX0ZJTEVfRU5WX1ZBUklBQkxFfSBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICogKHdoaWNoIGEgZ2l0aWdub3JlZCBgLmVudmAgY2FuIHNldCksIHBvaW50cyBhdCBhIGZpbGUgb3V0c2lkZSB0aGUgcmVwb3NpdG9yeSwgYW5kIGlzIGEgbm8tb3Agd2hlcmV2ZXIgaXQgaXMgbm90XG4gKiBzZXQg4oCUIGEgY29uc3VtZXIgd2hvIGhhcyBub3QgY29uZmlndXJlZCBpdCBzZWVzIG5vIGNoYW5nZSBhdCBhbGwuXG4gKlxuICogVGhlIGZpbGUgaG9sZHMgb25lIHBhdHRlcm4gcGVyIGxpbmUuIEJsYW5rIGxpbmVzIGFuZCBsaW5lcyBzdGFydGluZyB3aXRoIGAjYCBhcmUgaWdub3JlZC4gQSBsaW5lIHdyaXR0ZW4gYXMgYVxuICogcmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwg4oCUIGAvXFxiZm9vXFxiL2lgIOKAlCB0YWtlcyB0aGUgZmxhZ3MgaXQgbmFtZXM7IGFueSBvdGhlciBsaW5lIGlzIGEgY2FzZS1zZW5zaXRpdmVcbiAqIHJlZ3VsYXIgZXhwcmVzc2lvbiBzb3VyY2UuIFRoZSBnbG9iYWwgYW5kIHN0aWNreSBmbGFncyBhcmUgZHJvcHBlZCwgc2luY2UgYSBtYXRjaCBoZXJlIGlzIGEgeWVzL25vIHF1ZXN0aW9uXG4gKiBhc2tlZCBvZiBvbmUgbGluZSBhdCBhIHRpbWUuXG4gKi9cblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7IGxvYWRFbnZGaWxlSWZFeGlzdHMgfSBmcm9tICcuL2Vudi10b2dnbGUudHMnO1xuXG4vKipcbiAqIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1pbmcgdGhlIGZvcmJpZGRlbi1wYXR0ZXJucyBmaWxlLlxuICovXG5leHBvcnQgY29uc3QgRk9SQklEREVOX1BBVFRFUk5TX0ZJTEVfRU5WX1ZBUklBQkxFID0gJ0ZPUkJJRERFTl9QQVRURVJOU19GSUxFJztcblxuLyoqXG4gKiBPbmUgbGluZSBvZiB0ZXh0IHRoYXQgYSBmb3JiaWRkZW4gcGF0dGVybiBtYXRjaGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcmJpZGRlblBhdHRlcm5NYXRjaCB7XG4gIC8qKlxuICAgKiBUaGUgbGluZSB0aGF0IGNhcnJpZXMgdGhlIG1hdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgbGluZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0aGUgcGF0dGVybiBtYXRjaGVkIHdpdGhpbiB7QGxpbmsgbGluZX0uXG4gICAqL1xuICByZWFkb25seSBtYXRjaDogc3RyaW5nO1xufVxuXG5jb25zdCBSRUdfRVhQX0xJVEVSQUxfUkVHX0VYUCA9IC9eXFwvKD88c291cmNlPi4rKVxcLyg/PGZsYWdzPlthLXpdKikkLztcbmNvbnN0IFNUQVRFRlVMX0ZMQUdTX1JFR19FWFAgPSAvW2d5XS9nO1xuXG4vKipcbiAqIEZpbmRzIGV2ZXJ5IGxpbmUgb2YgYHRleHRgIHRoYXQgb25lIG9mIGBwYXR0ZXJuc2AgbWF0Y2hlcy5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIHNjYW4sIGxpbmUgYnkgbGluZS5cbiAqIEBwYXJhbSBwYXR0ZXJucyAtIFRoZSBwYXR0ZXJucywgYXMge0BsaW5rIHJlYWRGb3JiaWRkZW5QYXR0ZXJuc30gcmV0dXJuZWQgdGhlbS5cbiAqIEByZXR1cm5zIE9uZSB7QGxpbmsgRm9yYmlkZGVuUGF0dGVybk1hdGNofSBwZXIgb2ZmZW5kaW5nIGxpbmUsIG5hbWluZyB0aGUgZmlyc3QgcGF0dGVybiB0aGF0IG1hdGNoZWQgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRm9yYmlkZGVuUGF0dGVybk1hdGNoZXModGV4dDogc3RyaW5nLCBwYXR0ZXJuczogcmVhZG9ubHkgUmVnRXhwW10pOiBGb3JiaWRkZW5QYXR0ZXJuTWF0Y2hbXSB7XG4gIGNvbnN0IG1hdGNoZXM6IEZvcmJpZGRlblBhdHRlcm5NYXRjaFtdID0gW107XG5cbiAgZm9yIChjb25zdCBsaW5lIG9mIHRleHQuc3BsaXQoL1xccj9cXG4vKSkge1xuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgICAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMobGluZSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgbWF0Y2hlcy5wdXNoKHsgbGluZSwgbWF0Y2g6IG1hdGNoWzBdIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlcztcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgZm9yYmlkZGVuIHBhdHRlcm5zIGZyb20gdGhlIGZpbGUge0BsaW5rIEZPUkJJRERFTl9QQVRURVJOU19GSUxFX0VOVl9WQVJJQUJMRX0gbmFtZXMsIGxvYWRpbmcgdGhlXG4gKiBvcHRpb25hbCBgLmVudmAgZmlyc3QuXG4gKlxuICogQW4gdW5zZXQgb3IgYmxhbmsgdmFyaWFibGUgbWVhbnMgbm8gbGlzdCBpcyBjb25maWd1cmVkLCBhbmQgeWllbGRzIG5vIHBhdHRlcm5zLiBBIHZhcmlhYmxlIHRoYXQgSVMgc2V0IGJ1dFxuICogbmFtZXMgYSBmaWxlIHRoYXQgY2Fubm90IGJlIHJlYWQgdGhyb3dzIGluc3RlYWQgb2YgeWllbGRpbmcgbm9uZTogYSBndWFyZCB0aGF0IHN3aXRjaGVzIGl0c2VsZiBvZmYgYmVjYXVzZVxuICogaXRzIGxpc3QgbW92ZWQgaXMgcHJlY2lzZWx5IHRoZSBzaWxlbnQgZmFpbHVyZSBpdCBleGlzdHMgdG8gcHJldmVudC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjb21waWxlZCBwYXR0ZXJucy5cbiAqIEB0aHJvd3MgSWYgdGhlIG5hbWVkIGZpbGUgY2Fubm90IGJlIHJlYWQsIG9yIG9uZSBvZiBpdHMgbGluZXMgaXMgbm90IGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEZvcmJpZGRlblBhdHRlcm5zKCk6IFByb21pc2U8UmVnRXhwW10+IHtcbiAgbG9hZEVudkZpbGVJZkV4aXN0cygpO1xuICBjb25zdCBmaWxlUGF0aCA9IChwcm9jZXNzLmVudltGT1JCSURERU5fUEFUVEVSTlNfRklMRV9FTlZfVkFSSUFCTEVdID8/ICcnKS50cmltKCk7XG4gIGlmIChmaWxlUGF0aCA9PT0gJycpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBsZXQgY29udGVudDogc3RyaW5nO1xuICB0cnkge1xuICAgIGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke0ZPUkJJRERFTl9QQVRURVJOU19GSUxFX0VOVl9WQVJJQUJMRX0gbmFtZXMgJHtmaWxlUGF0aH0sIHdoaWNoIGNhbm5vdCBiZSByZWFkLmAsIHsgY2F1c2U6IGVycm9yIH0pO1xuICB9XG5cbiAgY29uc3QgcGF0dGVybnM6IFJlZ0V4cFtdID0gW107XG4gIGZvciAoY29uc3QgW2luZGV4LCByYXdMaW5lXSBvZiBjb250ZW50LnNwbGl0KC9cXHI/XFxuLykuZW50cmllcygpKSB7XG4gICAgY29uc3QgbGluZSA9IHJhd0xpbmUudHJpbSgpO1xuICAgIGlmIChsaW5lID09PSAnJyB8fCBsaW5lLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHBhdHRlcm5zLnB1c2godG9SZWdFeHAobGluZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExpbmUgJHtTdHJpbmcoaW5kZXggKyAxKX0gb2YgdGhlIGZvcmJpZGRlbi1wYXR0ZXJucyBmaWxlICR7ZmlsZVBhdGh9IGlzIG5vdCBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbi5gLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGF0dGVybnM7XG59XG5cbmZ1bmN0aW9uIHRvUmVnRXhwKGxpbmU6IHN0cmluZyk6IFJlZ0V4cCB7XG4gIGNvbnN0IGdyb3VwcyA9IFJFR19FWFBfTElURVJBTF9SRUdfRVhQLmV4ZWMobGluZSk/Lmdyb3VwcztcbiAgaWYgKCFncm91cHMpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChsaW5lKTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZSA9IGVuc3VyZU5vbk51bGxhYmxlKGdyb3Vwc1snc291cmNlJ10pO1xuICBjb25zdCBmbGFncyA9IGVuc3VyZU5vbk51bGxhYmxlKGdyb3Vwc1snZmxhZ3MnXSk7XG4gIHJldHVybiBuZXcgUmVnRXhwKHNvdXJjZSwgZmxhZ3MucmVwbGFjZUFsbChTVEFURUZVTF9GTEFHU19SRUdfRVhQLCAnJykpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9CQSx5QkFBa0M7QUFDbEMsc0JBQXlCO0FBQ3pCLDBCQUFvQjtBQUVwQix3QkFBb0M7QUFLN0IsTUFBTSx1Q0FBdUM7QUFpQnBELE1BQU0sMEJBQTBCO0FBQ2hDLE1BQU0seUJBQXlCO0FBU3hCLFNBQVMsNEJBQTRCLE1BQWMsVUFBc0Q7QUFDOUcsUUFBTSxVQUFtQyxDQUFDO0FBRTFDLGFBQVcsUUFBUSxLQUFLLE1BQU0sT0FBTyxHQUFHO0FBQ3RDLGVBQVcsV0FBVyxVQUFVO0FBQzlCLFlBQU0sUUFBUSxRQUFRLEtBQUssSUFBSTtBQUMvQixVQUFJLE9BQU87QUFDVCxnQkFBUSxLQUFLLEVBQUUsTUFBTSxPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDdEM7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFhQSxlQUFzQix3QkFBMkM7QUFDL0QsNkNBQW9CO0FBQ3BCLFFBQU0sWUFBWSxvQkFBQUEsUUFBUSxJQUFJLG9DQUFvQyxLQUFLLElBQUksS0FBSztBQUNoRixNQUFJLGFBQWEsSUFBSTtBQUNuQixXQUFPLENBQUM7QUFBQSxFQUNWO0FBRUEsTUFBSTtBQUNKLE1BQUk7QUFDRixjQUFVLFVBQU0sMEJBQVMsVUFBVSxPQUFPO0FBQUEsRUFDNUMsU0FBUyxPQUFPO0FBQ2QsVUFBTSxJQUFJLE1BQU0sR0FBRyxvQ0FBb0MsVUFBVSxRQUFRLDJCQUEyQixFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQUEsRUFDdEg7QUFFQSxRQUFNLFdBQXFCLENBQUM7QUFDNUIsYUFBVyxDQUFDLE9BQU8sT0FBTyxLQUFLLFFBQVEsTUFBTSxPQUFPLEVBQUUsUUFBUSxHQUFHO0FBQy9ELFVBQU0sT0FBTyxRQUFRLEtBQUs7QUFDMUIsUUFBSSxTQUFTLE1BQU0sS0FBSyxXQUFXLEdBQUcsR0FBRztBQUN2QztBQUFBLElBQ0Y7QUFFQSxRQUFJO0FBQ0YsZUFBUyxLQUFLLFNBQVMsSUFBSSxDQUFDO0FBQUEsSUFDOUIsU0FBUyxPQUFPO0FBQ2QsWUFBTSxJQUFJLE1BQU0sUUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLG1DQUFtQyxRQUFRLHVDQUF1QyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQUEsSUFDN0k7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBRUEsU0FBUyxTQUFTLE1BQXNCO0FBQ3RDLFFBQU0sU0FBUyx3QkFBd0IsS0FBSyxJQUFJLEdBQUc7QUFDbkQsTUFBSSxDQUFDLFFBQVE7QUFDWCxXQUFPLElBQUksT0FBTyxJQUFJO0FBQUEsRUFDeEI7QUFFQSxRQUFNLGFBQVMsc0NBQWtCLE9BQU8sUUFBUSxDQUFDO0FBQ2pELFFBQU0sWUFBUSxzQ0FBa0IsT0FBTyxPQUFPLENBQUM7QUFDL0MsU0FBTyxJQUFJLE9BQU8sUUFBUSxNQUFNLFdBQVcsd0JBQXdCLEVBQUUsQ0FBQztBQUN4RTsiLCJuYW1lcyI6WyJwcm9jZXNzIl19
@@ -2,13 +2,7 @@
2
2
  THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
-
6
5
  (function () {
7
- function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
- }
11
-
12
6
  function ensureBrowserProcess() {
13
7
  const browserProcess = {
14
8
  browser: true,
@@ -39,23 +33,7 @@ function ensureBrowserProcess() {
39
33
  existingProcessRecord['browser'] = true;
40
34
  }
41
35
 
42
- function keepName($unknown) {
43
- return $unknown;
44
- }
45
-
46
- (function initCjs() {
47
- const globalThisRecord = globalThis;
48
- ensureDisposeSymbols();
49
- globalThisRecord['__name'] ??= keepName;
50
- globalThisRecord['__extractDefault'] ??= extractDefault;
51
-
52
- ensureBrowserProcess();
53
-
54
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
55
- function extractDefault(module) {
56
- return module && module.__esModule && 'default' in module ? module.default : module;
57
- }
58
- })();
36
+ ensureBrowserProcess();
59
37
  })();
60
38
 
61
39
  "use strict";
@@ -105,4 +83,4 @@ async function format(options) {
105
83
  0 && (module.exports = {
106
84
  format
107
85
  });
108
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2Zvcm1hdHRlcnMvZHByaW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRm9ybWF0IHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5cbmltcG9ydCB7IHJlc29sdmVUb29sQ29tbWFuZCB9IGZyb20gJy4uL3BhY2thZ2UtbWFuYWdlci50cyc7XG5pbXBvcnQgeyBSZXBvUGF0aHMgfSBmcm9tICcuLi9yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgZ2V0Um9vdEZvbGRlcixcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi4vcm9vdC50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBmb3JtYXR9IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGBkcHJpbnQuanNvbmAgdXNlZCB3aGVuIHRoZSBwcm9qZWN0IGhhcyBub25lIG9mIGl0cyBvd24uIFdpdGhvdXQgaXQsIGEgcHJvamVjdCB3aXRoIG5vIGBkcHJpbnQuanNvbmBcbiAgICogZmFpbHMuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Q29uZmlnRmlsZVBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGZpbGUgcGF0aHMgdG8gZm9ybWF0LiBJZiBvbWl0dGVkLCBmb3JtYXRzIHRoZSBlbnRpcmUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV3cml0ZSB0aGUgc291cmNlIGNvZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgcmV3cml0ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRm9ybWF0IHRoZSBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgRm9ybWF0T3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNvdXJjZSBjb2RlIGhhcyBiZWVuIGZvcm1hdHRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZvcm1hdChvcHRpb25zPzogRm9ybWF0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGRlZmF1bHRDb25maWdGaWxlUGF0aCwgcGF0aHMsIHJld3JpdGUgPSB0cnVlIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCByb290Rm9sZGVyID0gZ2V0Um9vdEZvbGRlcigpO1xuICBhc3NlcnROb25OdWxsYWJsZShyb290Rm9sZGVyLCAnUm9vdCBmb2xkZXIgbm90IGZvdW5kJyk7XG4gIGxldCBkcHJpbnRKc29uUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogUmVwb1BhdGhzLkRwcmludEpzb24gfSk7XG4gIGlmICghZXhpc3RzU3luYyhkcHJpbnRKc29uUGF0aCkgJiYgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoKSB7XG4gICAgZHByaW50SnNvblBhdGggPSBkZWZhdWx0Q29uZmlnRmlsZVBhdGg7XG4gIH1cblxuICBpZiAoIWV4aXN0c1N5bmMoZHByaW50SnNvblBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkcHJpbnQuanNvbiBub3QgZm91bmQnKTtcbiAgfVxuXG4gIGNvbnN0IGNvbW1hbmQgPSByZXdyaXRlID8gJ2ZtdCcgOiAnY2hlY2snO1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHRhcmdldHMgPSBwYXRocz8ubGVuZ3RoID8gcGF0aHMgOiBbJyoqLyonXTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsuLi5yZXNvbHZlVG9vbENvbW1hbmQoeyB0b29sOiAnZHByaW50JyB9KSwgY29tbWFuZCwgJy0tY29uZmlnJywgZHByaW50SnNvblBhdGgsIHsgYmF0Y2hlZEFyZ3VtZW50czogdGFyZ2V0cyB9XSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEseUJBQWtDO0FBQ2xDLHFCQUEyQjtBQUUzQiw2QkFBbUM7QUFDbkMsd0JBQTBCO0FBQzFCLGtCQUlPO0FBK0JQLGVBQXNCLE9BQU8sU0FBd0M7QUFDbkUsUUFBTSxFQUFFLHVCQUF1QixPQUFPLFVBQVUsS0FBSyxJQUFJLFdBQVcsQ0FBQztBQUNyRSxRQUFNLGlCQUFhLDJCQUFjO0FBQ2pDLDRDQUFrQixZQUFZLHVCQUF1QjtBQUNyRCxNQUFJLHFCQUFpQixxQ0FBd0IsRUFBRSxNQUFNLDRCQUFVLFdBQVcsQ0FBQztBQUMzRSxNQUFJLEtBQUMsMkJBQVcsY0FBYyxLQUFLLHVCQUF1QjtBQUN4RCxxQkFBaUI7QUFBQSxFQUNuQjtBQUVBLE1BQUksS0FBQywyQkFBVyxjQUFjLEdBQUc7QUFDL0IsVUFBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsRUFDekM7QUFFQSxRQUFNLFVBQVUsVUFBVSxRQUFRO0FBRWxDLFFBQU0sVUFBVSxPQUFPLFNBQVMsUUFBUSxDQUFDLE1BQU07QUFFL0MsWUFBTSwwQkFBYSxDQUFDLE9BQUcsMkNBQW1CLEVBQUUsTUFBTSxTQUFTLENBQUMsR0FBRyxTQUFTLFlBQVksZ0JBQWdCLEVBQUUsa0JBQWtCLFFBQVEsQ0FBQyxDQUFDO0FBQ3BJOyIsCiAgIm5hbWVzIjogW10KfQo=
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9mb3JtYXR0ZXJzL2RwcmludC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogRm9ybWF0IHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuXG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5cbmltcG9ydCB7IHJlc29sdmVUb29sQ29tbWFuZCB9IGZyb20gJy4uL3BhY2thZ2UtbWFuYWdlci50cyc7XG5pbXBvcnQgeyBSZXBvUGF0aHMgfSBmcm9tICcuLi9yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgZ2V0Um9vdEZvbGRlcixcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi4vcm9vdC50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBmb3JtYXR9IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGBkcHJpbnQuanNvbmAgdXNlZCB3aGVuIHRoZSBwcm9qZWN0IGhhcyBub25lIG9mIGl0cyBvd24uIFdpdGhvdXQgaXQsIGEgcHJvamVjdCB3aXRoIG5vIGBkcHJpbnQuanNvbmBcbiAgICogZmFpbHMuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Q29uZmlnRmlsZVBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGZpbGUgcGF0aHMgdG8gZm9ybWF0LiBJZiBvbWl0dGVkLCBmb3JtYXRzIHRoZSBlbnRpcmUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV3cml0ZSB0aGUgc291cmNlIGNvZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgcmV3cml0ZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRm9ybWF0IHRoZSBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgRm9ybWF0T3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNvdXJjZSBjb2RlIGhhcyBiZWVuIGZvcm1hdHRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZvcm1hdChvcHRpb25zPzogRm9ybWF0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGRlZmF1bHRDb25maWdGaWxlUGF0aCwgcGF0aHMsIHJld3JpdGUgPSB0cnVlIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCByb290Rm9sZGVyID0gZ2V0Um9vdEZvbGRlcigpO1xuICBhc3NlcnROb25OdWxsYWJsZShyb290Rm9sZGVyLCAnUm9vdCBmb2xkZXIgbm90IGZvdW5kJyk7XG4gIGxldCBkcHJpbnRKc29uUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogUmVwb1BhdGhzLkRwcmludEpzb24gfSk7XG4gIGlmICghZXhpc3RzU3luYyhkcHJpbnRKc29uUGF0aCkgJiYgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoKSB7XG4gICAgZHByaW50SnNvblBhdGggPSBkZWZhdWx0Q29uZmlnRmlsZVBhdGg7XG4gIH1cblxuICBpZiAoIWV4aXN0c1N5bmMoZHByaW50SnNvblBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkcHJpbnQuanNvbiBub3QgZm91bmQnKTtcbiAgfVxuXG4gIGNvbnN0IGNvbW1hbmQgPSByZXdyaXRlID8gJ2ZtdCcgOiAnY2hlY2snO1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHRhcmdldHMgPSBwYXRocz8ubGVuZ3RoID8gcGF0aHMgOiBbJyoqLyonXTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsuLi5yZXNvbHZlVG9vbENvbW1hbmQoeyB0b29sOiAnZHByaW50JyB9KSwgY29tbWFuZCwgJy0tY29uZmlnJywgZHByaW50SnNvblBhdGgsIHsgYmF0Y2hlZEFyZ3VtZW50czogdGFyZ2V0cyB9XSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLHlCQUFrQztBQUNsQyxxQkFBMkI7QUFFM0IsNkJBQW1DO0FBQ25DLHdCQUEwQjtBQUMxQixrQkFJTztBQStCUCxlQUFzQixPQUFPLFNBQXdDO0FBQ25FLFFBQU0sRUFBRSx1QkFBdUIsT0FBTyxVQUFVLEtBQUssSUFBSSxXQUFXLENBQUM7QUFDckUsUUFBTSxpQkFBYSwyQkFBYztBQUNqQyw0Q0FBa0IsWUFBWSx1QkFBdUI7QUFDckQsTUFBSSxxQkFBaUIscUNBQXdCLEVBQUUsTUFBTSw0QkFBVSxXQUFXLENBQUM7QUFDM0UsTUFBSSxLQUFDLDJCQUFXLGNBQWMsS0FBSyx1QkFBdUI7QUFDeEQscUJBQWlCO0FBQUEsRUFDbkI7QUFFQSxNQUFJLEtBQUMsMkJBQVcsY0FBYyxHQUFHO0FBQy9CLFVBQU0sSUFBSSxNQUFNLHVCQUF1QjtBQUFBLEVBQ3pDO0FBRUEsUUFBTSxVQUFVLFVBQVUsUUFBUTtBQUVsQyxRQUFNLFVBQVUsT0FBTyxTQUFTLFFBQVEsQ0FBQyxNQUFNO0FBRS9DLFlBQU0sMEJBQWEsQ0FBQyxPQUFHLDJDQUFtQixFQUFFLE1BQU0sU0FBUyxDQUFDLEdBQUcsU0FBUyxZQUFZLGdCQUFnQixFQUFFLGtCQUFrQixRQUFRLENBQUMsQ0FBQztBQUNwSTsiLCJuYW1lcyI6W119
@@ -3,61 +3,6 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
5
 
6
- (function () {
7
- function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
10
- }
11
-
12
- function ensureBrowserProcess() {
13
- const browserProcess = {
14
- browser: true,
15
- cwd() {
16
- return '/';
17
- },
18
- env: {},
19
- platform: 'android'
20
- };
21
-
22
- const existingProcess = globalThis.process;
23
-
24
- if (!existingProcess) {
25
- globalThis.process = browserProcess;
26
- return;
27
- }
28
-
29
- if (existingProcess.versions?.node) {
30
- return;
31
- }
32
-
33
- const existingProcessRecord = existingProcess;
34
-
35
- for (const [key, value] of Object.entries(browserProcess)) {
36
- existingProcessRecord[key] ??= value;
37
- }
38
-
39
- existingProcessRecord['browser'] = true;
40
- }
41
-
42
- function keepName($unknown) {
43
- return $unknown;
44
- }
45
-
46
- (function initCjs() {
47
- const globalThisRecord = globalThis;
48
- ensureDisposeSymbols();
49
- globalThisRecord['__name'] ??= keepName;
50
- globalThisRecord['__extractDefault'] ??= extractDefault;
51
-
52
- ensureBrowserProcess();
53
-
54
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
55
- function extractDefault(module) {
56
- return module && module.__esModule && 'default' in module ? module.default : module;
57
- }
58
- })();
59
- })();
60
-
61
6
  "use strict";
62
7
  var __create = Object.create;
63
8
  var __defProp = Object.defineProperty;
@@ -91,9 +36,9 @@ __export(formatters_exports, {
91
36
  dprint: () => dprint
92
37
  });
93
38
  module.exports = __toCommonJS(formatters_exports);
94
- var dprint = __toESM(__extractDefault(require('./dprint.cjs')), 1);
39
+ var dprint = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./dprint.cjs')), 1);
95
40
  // Annotate the CommonJS export names for ESM import in node:
96
41
  0 && (module.exports = {
97
42
  dprint
98
43
  });
99
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2Zvcm1hdHRlcnMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnZHByaW50JyBmcm9tICcuL2RwcmludC50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBLGFBQTBCOyIsCiAgIm5hbWVzIjogW10KfQo=
44
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2Zvcm1hdHRlcnMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnZHByaW50JyBmcm9tICcuL2RwcmludC50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUEsYUFBMEI7IiwKICAibmFtZXMiOiBbXQp9Cg==