@mnaoumov/typescript-dev-toolkit 3.13.1 → 5.0.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 (85) hide show
  1. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +3 -3
  2. package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.d.cts +1 -1
  3. package/dist/lib/cjs/docs-site/api-doc-link-rendering.cjs +1 -1
  4. package/dist/lib/cjs/docs-site/api-doc-settings.cjs +1 -1
  5. package/dist/lib/cjs/docs-site/api-doc-types.cjs +1 -1
  6. package/dist/lib/cjs/docs-site/api-doc-types.d.cts +57 -57
  7. package/dist/lib/cjs/docs-site/link-check.cjs +1 -1
  8. package/dist/lib/cjs/docs-site/link-check.d.cts +8 -8
  9. package/dist/lib/cjs/docs-site/og-images.cjs +1 -1
  10. package/dist/lib/cjs/docs-site/satteri-github-alerts.cjs +1 -1
  11. package/dist/lib/cjs/docs-site/unrendered-alerts.cjs +1 -1
  12. package/dist/lib/cjs/docs-site/unrendered-alerts.d.cts +2 -2
  13. package/dist/lib/cjs/library-build.cjs +8 -8
  14. package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.cjs +1 -1
  15. package/dist/lib/cjs/linters/eslint-agnostic-core-boundary.d.cts +2 -2
  16. package/dist/lib/cjs/linters/eslint-config.cjs +8 -6
  17. package/dist/lib/cjs/linters/eslint-no-restricted-syntax.cjs +1 -1
  18. package/dist/lib/cjs/linters/eslint-no-restricted-syntax.d.cts +2 -2
  19. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +5 -3
  20. package/dist/lib/cjs/linters/eslint-rules/index.cjs +7 -4
  21. package/dist/lib/cjs/linters/eslint-rules/index.d.cts +2 -1
  22. package/dist/lib/cjs/linters/eslint-rules/no-keyword-identifiers.cjs +144 -0
  23. package/dist/lib/cjs/linters/eslint-rules/no-keyword-identifiers.d.cts +11 -0
  24. package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.cjs +5 -5
  25. package/dist/lib/cjs/linters/eslint-rules/no-unused-params-members.cjs +1 -1
  26. package/dist/lib/cjs/linters/eslint-rules/no-used-underscore-variables.cjs +1 -1
  27. package/dist/lib/cjs/linters/eslint-rules/readonly-interface-members.cjs +68 -0
  28. package/dist/lib/cjs/linters/eslint-rules/readonly-interface-members.d.cts +18 -0
  29. package/dist/lib/cjs/linters/eslint-rules/require-method-template.cjs +1 -1
  30. package/dist/lib/cjs/linters/eslint-rules/require-super-call.cjs +1 -1
  31. package/dist/lib/cjs/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.cts +1 -1
  32. package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.cts +279 -279
  33. package/dist/lib/cjs/linters/over-exposure.cjs +1 -1
  34. package/dist/lib/cjs/linters/over-exposure.d.cts +6 -6
  35. package/dist/lib/cjs/npm.cjs +1 -1
  36. package/dist/lib/cjs/npm.d.cts +1 -1
  37. package/dist/lib/cjs/released-issues.cjs +4 -4
  38. package/dist/lib/cjs/upstream-sync.cjs +3 -3
  39. package/dist/lib/cjs/upstream-sync.d.cts +31 -31
  40. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.d.mts +1 -1
  41. package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +3 -3
  42. package/dist/lib/esm/docs-site/api-doc-link-rendering.mjs +1 -1
  43. package/dist/lib/esm/docs-site/api-doc-settings.mjs +1 -1
  44. package/dist/lib/esm/docs-site/api-doc-types.d.mts +57 -57
  45. package/dist/lib/esm/docs-site/link-check.d.mts +8 -8
  46. package/dist/lib/esm/docs-site/link-check.mjs +1 -1
  47. package/dist/lib/esm/docs-site/og-images.mjs +1 -1
  48. package/dist/lib/esm/docs-site/satteri-github-alerts.mjs +1 -1
  49. package/dist/lib/esm/docs-site/unrendered-alerts.d.mts +2 -2
  50. package/dist/lib/esm/docs-site/unrendered-alerts.mjs +1 -1
  51. package/dist/lib/esm/library-build.mjs +8 -8
  52. package/dist/lib/esm/linters/eslint-agnostic-core-boundary.d.mts +2 -2
  53. package/dist/lib/esm/linters/eslint-agnostic-core-boundary.mjs +1 -1
  54. package/dist/lib/esm/linters/eslint-config.mjs +8 -6
  55. package/dist/lib/esm/linters/eslint-no-restricted-syntax.d.mts +2 -2
  56. package/dist/lib/esm/linters/eslint-no-restricted-syntax.mjs +1 -1
  57. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +5 -3
  58. package/dist/lib/esm/linters/eslint-rules/index.d.mts +2 -1
  59. package/dist/lib/esm/linters/eslint-rules/index.mjs +5 -3
  60. package/dist/lib/esm/linters/eslint-rules/no-keyword-identifiers.d.mts +11 -0
  61. package/dist/lib/esm/linters/eslint-rules/no-keyword-identifiers.mjs +120 -0
  62. package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.mjs +5 -5
  63. package/dist/lib/esm/linters/eslint-rules/no-unused-params-members.mjs +1 -1
  64. package/dist/lib/esm/linters/eslint-rules/no-used-underscore-variables.mjs +1 -1
  65. package/dist/lib/esm/linters/eslint-rules/readonly-interface-members.d.mts +18 -0
  66. package/dist/lib/esm/linters/eslint-rules/readonly-interface-members.mjs +43 -0
  67. package/dist/lib/esm/linters/eslint-rules/require-method-template.mjs +1 -1
  68. package/dist/lib/esm/linters/eslint-rules/require-super-call.mjs +1 -1
  69. package/dist/lib/esm/linters/eslint-types/@types/@eslint-community__eslint-plugin-eslint-comments__configs.d.mts +1 -1
  70. package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2-config-schema.d.mts +279 -279
  71. package/dist/lib/esm/linters/over-exposure.d.mts +6 -6
  72. package/dist/lib/esm/linters/over-exposure.mjs +1 -1
  73. package/dist/lib/esm/npm.d.mts +1 -1
  74. package/dist/lib/esm/npm.mjs +1 -1
  75. package/dist/lib/esm/released-issues.mjs +4 -4
  76. package/dist/lib/esm/upstream-sync.d.mts +31 -31
  77. package/dist/lib/esm/upstream-sync.mjs +3 -3
  78. package/linters/eslint-rules/no-keyword-identifiers/package.json +6 -0
  79. package/linters/eslint-rules/readonly-interface-members/package.json +6 -0
  80. package/package.json +1 -1
  81. package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.cjs +0 -103
  82. package/dist/lib/cjs/linters/eslint-rules/readonly-params-options-result-members.d.cts +0 -20
  83. package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.d.mts +0 -20
  84. package/dist/lib/esm/linters/eslint-rules/readonly-params-options-result-members.mjs +0 -78
  85. package/linters/eslint-rules/readonly-params-options-result-members/package.json +0 -6
@@ -1,13 +1,14 @@
1
1
  /// <reference path="../../library-references.d.cts" />
2
2
  export * as 'in-house-plugin' from './in-house-plugin.cjs';
3
3
  export * as 'no-async-callback-to-unsafe-return' from './no-async-callback-to-unsafe-return.cjs';
4
+ export * as 'no-keyword-identifiers' from './no-keyword-identifiers.cjs';
4
5
  export * as 'no-unresolved-jsdoc-link' from './no-unresolved-jsdoc-link.cjs';
5
6
  export * as 'no-unused-params-members' from './no-unused-params-members.cjs';
6
7
  export * as 'no-used-underscore-variables' from './no-used-underscore-variables.cjs';
7
8
  export * as 'params-options-name-match' from './params-options-name-match.cjs';
8
9
  export * as 'prefer-logical-operator-over-ternary' from './prefer-logical-operator-over-ternary.cjs';
9
10
  export * as 'prefer-noop-async' from './prefer-noop-async.cjs';
10
- export * as 'readonly-params-options-result-members' from './readonly-params-options-result-members.cjs';
11
+ export * as 'readonly-interface-members' from './readonly-interface-members.cjs';
11
12
  export * as 'require-method-template' from './require-method-template.cjs';
12
13
  export * as 'require-super-call' from './require-super-call.cjs';
13
14
  export * as 'rule-tester-helper' from './rule-tester-helper.cjs';
@@ -0,0 +1,144 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return '/';
11
+ },
12
+ env: {},
13
+ platform: 'android'
14
+ };
15
+
16
+ const existingProcess = globalThis.process;
17
+
18
+ if (!existingProcess) {
19
+ globalThis.process = browserProcess;
20
+ return;
21
+ }
22
+
23
+ if (existingProcess.versions?.node) {
24
+ return;
25
+ }
26
+
27
+ const existingProcessRecord = existingProcess;
28
+
29
+ for (const [key, value] of Object.entries(browserProcess)) {
30
+ existingProcessRecord[key] ??= value;
31
+ }
32
+
33
+ existingProcessRecord['browser'] = true;
34
+ }
35
+
36
+ ensureBrowserProcess();
37
+ })();
38
+
39
+ "use strict";
40
+ var __defProp = Object.defineProperty;
41
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
42
+ var __getOwnPropNames = Object.getOwnPropertyNames;
43
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
44
+ var __export = (target, all) => {
45
+ for (var name in all)
46
+ __defProp(target, name, { get: all[name], enumerable: true });
47
+ };
48
+ var __copyProps = (to, from, except, desc) => {
49
+ if (from && typeof from === "object" || typeof from === "function") {
50
+ for (let key of __getOwnPropNames(from))
51
+ if (!__hasOwnProp.call(to, key) && key !== except)
52
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
53
+ }
54
+ return to;
55
+ };
56
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
57
+ var no_keyword_identifiers_exports = {};
58
+ __export(no_keyword_identifiers_exports, {
59
+ noKeywordIdentifiers: () => noKeywordIdentifiers
60
+ });
61
+ module.exports = __toCommonJS(no_keyword_identifiers_exports);
62
+ var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
63
+ const RESTRICTED_NAMES = /* @__PURE__ */ new Set([
64
+ "arguments",
65
+ "bigint",
66
+ "boolean",
67
+ "event",
68
+ "function",
69
+ "module",
70
+ "number",
71
+ "object",
72
+ "string",
73
+ "symbol",
74
+ "undefined"
75
+ ]);
76
+ const noKeywordIdentifiers = {
77
+ create(context) {
78
+ const sourceCode = context.sourceCode;
79
+ return {
80
+ "Program:exit"() {
81
+ const scopes = sourceCode.scopeManager.scopes;
82
+ const reported = /* @__PURE__ */ new Set();
83
+ for (const scope of scopes) {
84
+ for (const variable of scope.variables) {
85
+ if (!RESTRICTED_NAMES.has(variable.name)) {
86
+ continue;
87
+ }
88
+ const replacement = `$${variable.name}`;
89
+ const nodes = [.../* @__PURE__ */ new Set([...variable.identifiers, ...variable.references.map((reference) => reference.identifier)])];
90
+ const canRename = variable.defs.every((definition) => definition.type !== "ClassName") && scopes.every(
91
+ (candidate) => candidate.variables.every((binding) => binding.name !== replacement) && candidate.through.every((reference) => reference.identifier.name !== replacement)
92
+ ) && nodes.every(
93
+ (node) => sourceCode.getAncestors(node).every(
94
+ (ancestor) => ![
95
+ "ExportDefaultDeclaration",
96
+ "ExportNamedDeclaration",
97
+ "ExportSpecifier",
98
+ "ImportSpecifier",
99
+ "Property",
100
+ "TSParameterProperty"
101
+ ].includes(ancestor.type)
102
+ )
103
+ );
104
+ for (const identifier of variable.identifiers) {
105
+ if (reported.has(identifier)) {
106
+ continue;
107
+ }
108
+ reported.add(identifier);
109
+ context.report({
110
+ data: { name: variable.name, replacement },
111
+ messageId: "restricted",
112
+ node: identifier,
113
+ suggest: canRename ? [{
114
+ data: { replacement },
115
+ fix: (fixer) => nodes.map((node) => {
116
+ const token = sourceCode.getFirstToken(node);
117
+ (0, import_type_guards.assertNonNullable)(token, "A binding identifier always has a token");
118
+ return fixer.replaceText(token, replacement);
119
+ }),
120
+ messageId: "rename"
121
+ }] : []
122
+ });
123
+ }
124
+ }
125
+ }
126
+ }
127
+ };
128
+ },
129
+ meta: {
130
+ docs: { description: "Require a $ prefix on bare keyword and colliding global binding names" },
131
+ hasSuggestions: true,
132
+ messages: {
133
+ rename: 'Rename this binding and its references to "{{ replacement }}".',
134
+ restricted: 'Rename "{{ name }}" to "{{ replacement }}". Preserve any public contract when renaming.'
135
+ },
136
+ schema: [],
137
+ type: "suggestion"
138
+ }
139
+ };
140
+ // Annotate the CommonJS export names for ESM import in node:
141
+ 0 && (module.exports = {
142
+ noKeywordIdentifiers
143
+ });
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9uby1rZXl3b3JkLWlkZW50aWZpZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZWplY3QgYmFyZSBrZXl3b3JkIGFuZCBjb2xsaWRpbmcgZ2xvYmFsIG5hbWVzIGluIGRlY2xhcmVkIGJpbmRpbmdzLlxuICovXG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tICdlc2xpbnQnO1xuXG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmNvbnN0IFJFU1RSSUNURURfTkFNRVMgPSBuZXcgU2V0KFtcbiAgJ2FyZ3VtZW50cycsXG4gICdiaWdpbnQnLFxuICAnYm9vbGVhbicsXG4gICdldmVudCcsXG4gICdmdW5jdGlvbicsXG4gICdtb2R1bGUnLFxuICAnbnVtYmVyJyxcbiAgJ29iamVjdCcsXG4gICdzdHJpbmcnLFxuICAnc3ltYm9sJyxcbiAgJ3VuZGVmaW5lZCdcbl0pO1xuXG4vKipcbiAqIERpc2FsbG93cyBiYXJlIGtleXdvcmQgbmFtZXMsIHdpdGggY29uc2VydmF0aXZlLCBzY29wZS1hd2FyZSByZW5hbWUgc3VnZ2VzdGlvbnMgZm9yIGxvY2FsIGJpbmRpbmdzLlxuICovXG5leHBvcnQgY29uc3Qgbm9LZXl3b3JkSWRlbnRpZmllcnM6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBzb3VyY2VDb2RlID0gY29udGV4dC5zb3VyY2VDb2RlO1xuICAgIHJldHVybiB7XG4gICAgICAnUHJvZ3JhbTpleGl0JygpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2NvcGVzID0gc291cmNlQ29kZS5zY29wZU1hbmFnZXIuc2NvcGVzO1xuICAgICAgICBjb25zdCByZXBvcnRlZCA9IG5ldyBTZXQ8dW5rbm93bj4oKTtcbiAgICAgICAgZm9yIChjb25zdCBzY29wZSBvZiBzY29wZXMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHZhcmlhYmxlIG9mIHNjb3BlLnZhcmlhYmxlcykge1xuICAgICAgICAgICAgaWYgKCFSRVNUUklDVEVEX05BTUVTLmhhcyh2YXJpYWJsZS5uYW1lKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gYCQke3ZhcmlhYmxlLm5hbWV9YDtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gWy4uLm5ldyBTZXQoWy4uLnZhcmlhYmxlLmlkZW50aWZpZXJzLCAuLi52YXJpYWJsZS5yZWZlcmVuY2VzLm1hcCgocmVmZXJlbmNlKSA9PiByZWZlcmVuY2UuaWRlbnRpZmllcildKV07XG4gICAgICAgICAgICBjb25zdCBjYW5SZW5hbWUgPSB2YXJpYWJsZS5kZWZzLmV2ZXJ5KChkZWZpbml0aW9uKSA9PiBkZWZpbml0aW9uLnR5cGUgIT09ICdDbGFzc05hbWUnKVxuICAgICAgICAgICAgICAmJiBzY29wZXMuZXZlcnkoKGNhbmRpZGF0ZSkgPT5cbiAgICAgICAgICAgICAgICBjYW5kaWRhdGUudmFyaWFibGVzLmV2ZXJ5KChiaW5kaW5nKSA9PiBiaW5kaW5nLm5hbWUgIT09IHJlcGxhY2VtZW50KVxuICAgICAgICAgICAgICAgICYmIGNhbmRpZGF0ZS50aHJvdWdoLmV2ZXJ5KChyZWZlcmVuY2UpID0+IHJlZmVyZW5jZS5pZGVudGlmaWVyLm5hbWUgIT09IHJlcGxhY2VtZW50KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICYmIG5vZGVzLmV2ZXJ5KChub2RlKSA9PlxuICAgICAgICAgICAgICAgIHNvdXJjZUNvZGUuZ2V0QW5jZXN0b3JzKG5vZGUpLmV2ZXJ5KChhbmNlc3RvcikgPT5cbiAgICAgICAgICAgICAgICAgICFbXG4gICAgICAgICAgICAgICAgICAgICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdFeHBvcnRTcGVjaWZpZXInLFxuICAgICAgICAgICAgICAgICAgICAnSW1wb3J0U3BlY2lmaWVyJyxcbiAgICAgICAgICAgICAgICAgICAgJ1Byb3BlcnR5JyxcbiAgICAgICAgICAgICAgICAgICAgJ1RTUGFyYW1ldGVyUHJvcGVydHknXG4gICAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKGFuY2VzdG9yLnR5cGUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZGVudGlmaWVyIG9mIHZhcmlhYmxlLmlkZW50aWZpZXJzKSB7XG4gICAgICAgICAgICAgIGlmIChyZXBvcnRlZC5oYXMoaWRlbnRpZmllcikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXBvcnRlZC5hZGQoaWRlbnRpZmllcik7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7IG5hbWU6IHZhcmlhYmxlLm5hbWUsIHJlcGxhY2VtZW50IH0sXG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkOiAncmVzdHJpY3RlZCcsXG4gICAgICAgICAgICAgICAgbm9kZTogaWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICBzdWdnZXN0OiBjYW5SZW5hbWVcbiAgICAgICAgICAgICAgICAgID8gW3tcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogeyByZXBsYWNlbWVudCB9LFxuICAgICAgICAgICAgICAgICAgICBmaXg6IChmaXhlcik6IFJ1bGUuRml4W10gPT5cbiAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gc291cmNlQ29kZS5nZXRGaXJzdFRva2VuKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0Tm9uTnVsbGFibGUodG9rZW4sICdBIGJpbmRpbmcgaWRlbnRpZmllciBhbHdheXMgaGFzIGEgdG9rZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXhlci5yZXBsYWNlVGV4dCh0b2tlbiwgcmVwbGFjZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6ICdyZW5hbWUnXG4gICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczogeyBkZXNjcmlwdGlvbjogJ1JlcXVpcmUgYSAkIHByZWZpeCBvbiBiYXJlIGtleXdvcmQgYW5kIGNvbGxpZGluZyBnbG9iYWwgYmluZGluZyBuYW1lcycgfSxcbiAgICBoYXNTdWdnZXN0aW9uczogdHJ1ZSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgcmVuYW1lOiAnUmVuYW1lIHRoaXMgYmluZGluZyBhbmQgaXRzIHJlZmVyZW5jZXMgdG8gXCJ7eyByZXBsYWNlbWVudCB9fVwiLicsXG4gICAgICByZXN0cmljdGVkOiAnUmVuYW1lIFwie3sgbmFtZSB9fVwiIHRvIFwie3sgcmVwbGFjZW1lbnQgfX1cIi4gUHJlc2VydmUgYW55IHB1YmxpYyBjb250cmFjdCB3aGVuIHJlbmFtaW5nLidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nXG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU9BLHlCQUFr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
@@ -0,0 +1,11 @@
1
+ /// <reference path="../../library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Reject bare keyword and colliding global names in declared bindings.
6
+ */
7
+ import type { Rule } from 'eslint' with { 'resolution-mode': 'import' };
8
+ /**
9
+ * Disallows bare keyword names, with conservative, scope-aware rename suggestions for local bindings.
10
+ */
11
+ export declare const noKeywordIdentifiers: Rule.RuleModule;
@@ -185,9 +185,9 @@ function findModuleByPathSuffix(program, checker, modulePath) {
185
185
  function flattenName(name) {
186
186
  return (0, import_typescript.isIdentifier)(name) ? [name.text] : [...flattenName(name.left), name.right.text];
187
187
  }
188
- function getMember(checker, symbol, memberName) {
188
+ function getMember(checker, $symbol, memberName) {
189
189
  const escapedName = (0, import_typescript.escapeLeadingUnderscores)(memberName);
190
- const target = resolveAlias(checker, symbol);
190
+ const target = resolveAlias(checker, $symbol);
191
191
  const moduleExport = (target.flags & import_typescript.SymbolFlags.Module) === 0 ? void 0 : checker.tryGetMemberInModuleExports(memberName, target);
192
192
  return moduleExport ?? target.exports?.get(escapedName) ?? target.members?.get(escapedName) ?? checker.getPropertyOfType(checker.getDeclaredTypeOfSymbol(target), memberName) ?? checker.getPropertyOfType(checker.getTypeOfSymbol(target), memberName);
193
193
  }
@@ -247,8 +247,8 @@ function isResolvedName(params) {
247
247
  const roots = [...localRoots, ...index.exportsByName.get(rootName) ?? [], findModule(program, checker, rootName, containingFileName)];
248
248
  return roots.some((root) => !!resolveMemberPath(checker, root, memberNames));
249
249
  }
250
- function resolveAlias(checker, symbol) {
251
- return (symbol.flags & import_typescript.SymbolFlags.Alias) === 0 ? symbol : checker.getAliasedSymbol(symbol);
250
+ function resolveAlias(checker, $symbol) {
251
+ return ($symbol.flags & import_typescript.SymbolFlags.Alias) === 0 ? $symbol : checker.getAliasedSymbol($symbol);
252
252
  }
253
253
  function resolveMemberPath(checker, root, memberNames) {
254
254
  let current = root;
@@ -265,4 +265,4 @@ function resolveMemberPath(checker, root, memberNames) {
265
265
  MESSAGE_ID,
266
266
  noUnresolvedJsdocLink
267
267
  });
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9uby11bnJlc29sdmVkLWpzZG9jLWxpbmsudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiBuby11bnJlc29sdmVkLWpzZG9jLWxpbmtcbiAqXG4gKiBSZXBvcnRzIGEgSlNEb2MgYGxpbmtgLCBgbGlua2NvZGVgIG9yIGBsaW5rcGxhaW5gIGlubGluZSB0YWcgd2hvc2UgdGFyZ2V0IG5vIGxvbmdlciByZXNvbHZlcyB0byBhIHN5bWJvbC5cbiAqXG4gKiBBIHJlbmFtZSBsZWF2ZXMgYHtAbGluayBPbGROYW1lfWAgYmVoaW5kIGFuZCBub3RoaW5nIGVsc2UgcmVwb3J0cyBpdDogYGpzZG9jL25vLXVuZGVmaW5lZC10eXBlc2AgZG9lcyBub3QgcmVzb2x2ZVxuICogbGluayB0YXJnZXRzLCBUU0RvYyBjaGVja3Mgb25seSB0aGUgdGFnIHN5bnRheCwgYW5kIGB0c2NgIHBhcnNlcyBKU0RvYyBsaW5rcyB3aXRob3V0IGV2ZXIgZGlhZ25vc2luZyB0aGVtLiBTbyBhIGRlYWRcbiAqIGxpbmsgc3Vydml2ZXMgdW50aWwgc29tZWJvZHkgaGFwcGVucyB0byBjbGljayBpdC5cbiAqXG4gKiBBIHRhcmdldCByZXNvbHZlcyB3aGVuIGFueSBvZiB0aGVzZSBmaW5kcyBpdCwgdHJpZWQgaW4gb3JkZXI6XG4gKlxuICogMS4gVGhlIHR5cGUgY2hlY2tlciwgYXQgdGhlIGNvbW1lbnQncyBvd24gbG9jYXRpb24sIGV4YWN0bHkgYXMgZWRpdG9yIGdvLXRvLWRlZmluaXRpb24gZG9lcyDigJQgc28gZXZlcnl0aGluZyBpblxuICogICAgc2NvcGUgdGhlcmUgcmVzb2x2ZXM6IHR5cGUgcGFyYW1ldGVycywgcGFyYW1ldGVycywgaW1wb3J0cywgYW5kIHRoZSBET00gLyBFUyBnbG9iYWxzLlxuICogMi4gQSBkZWNsYXJhdGlvbiBhbnl3aGVyZSBpbiB0aGUgc2FtZSBmaWxlIOKAlCBhIGZ1bmN0aW9uIG5lc3RlZCBpbiBhbm90aGVyLCBhIHByaXZhdGUgbWV0aG9kIOKAlCB3aGljaCBpcyBvdXQgb2ZcbiAqICAgIHNjb3BlIGF0IGEgYCpQYXJhbXNgIGludGVyZmFjZSBuYW1pbmcgaXQsIHlldCBpcyBleGFjdGx5IHdoYXQgYSByZW5hbWUgb2YgaXQgd291bGQgYnJlYWsuXG4gKiAzLiBUaGUgZXhwb3J0cyBvZiBhbnkgbW9kdWxlIGluIHRoZSBwcm9ncmFtLCBieSBuYW1lLiBBIGNvbW1lbnQgcm91dGluZWx5IG5hbWVzIGEgdHlwZSBpdHMgZmlsZSBuZXZlciBpbXBvcnRzIChhblxuICogICAgaW50ZWdyYXRpb24gdGVzdCBuYW1pbmcgdGhlIGNsYXNzIGl0IGRyaXZlcyB0aHJvdWdoIGBldmFsSW5PYnNpZGlhbmAsIGEgcmVtYXJrIG5hbWluZyBhbiBPYnNpZGlhbiBBUEkpLCBhbmQgdGhlXG4gKiAgICBBUEkgZG9jcyBnZW5lcmF0b3IgcmVzb2x2ZXMgc3VjaCBhIG5hbWUgbGlicmFyeS13aWRlIHRvby4gVGhpcyBrZWVwcyB0aGUgcnVsZSBhYm91dCBERUFEIGxpbmtzIHJhdGhlciB0aGFuXG4gKiAgICBhYm91dCBpbXBvcnRzOiBhIHJlbmFtZWQgb3IgcmVtb3ZlZCBkZWNsYXJhdGlvbiBpcyBleHBvcnRlZCBieSBubyBtb2R1bGUsIHNvIGl0IGlzIHN0aWxsIHJlcG9ydGVkLlxuICogNC4gQSBtb2R1bGUgbmFtZWQgYnkgaXRzIHNwZWNpZmllciBvciBpdHMgcGF0aCwgaW4gYm90aCBUU0RvYyBmb3JtczogYG9ic2lkaWFuI0V2ZW50cyNvbmAgKHRoZSBwYWNrYWdlIGFzIHRoZSBmaXJzdFxuICogICAgc2VnbWVudCkgYW5kIGBlcnJvciFlcnJvclRvU3RyaW5nYCAvIGBvYnNpZGlhbi9jb21wb25lbnRzL3BsdWdpbi1nYXRlLWNvbXBvbmVudCFQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm5gXG4gKiAgICAoYSBtb2R1bGUgcGF0aCwgZW5kaW5nIHdpdGggYCFgKSDigJQgcGx1cyBUeXBlU2NyaXB0J3Mgb3duIGBpbXBvcnQoJy4vbW9kdWxlLnRzJykuTWVtYmVyYC4gQSBwYXRoIG1hdGNoZXMgYW55XG4gKiAgICBzb3VyY2UgZmlsZSBpbiB0aGUgcHJvZ3JhbSB3aG9zZSBwYXRoIGVuZHMgd2l0aCBpdC5cbiAqXG4gKiBBZnRlciB0aGUgZmlyc3Qgc2VnbWVudCwgZWFjaCBmdXJ0aGVyIGAuYCAvIGAjYCBzZWdtZW50IGlzIGxvb2tlZCB1cCBhcyBhIG1lbWJlcjogYSBuYW1lc3BhY2Ugb3IgbW9kdWxlIGV4cG9ydCwgYVxuICogc3RhdGljIG9yIGluc3RhbmNlIG1lbWJlciwgb3IgYSBwcm9wZXJ0eSBvZiB0aGUgcHJldmlvdXMgbWVtYmVyJ3MgdHlwZSDigJQgc28gYEFwcC52YXVsdC5hZGFwdGVyYCByZXNvbHZlcy5cbiAqXG4gKiBBIGxpbmsgdGhhdCBpcyBub3QgYSBjb2RlIHJlZmVyZW5jZSBpcyBza2lwcGVkOiBhIFVSTCAoYHtAbGluayBodHRwczovL2V4YW1wbGUuY29tfWApIGFuZCBhIEpTRG9jIG5hbWVwYXRoXG4gKiAoYHtAbGluayBtb2R1bGU6Zm9vfWApIGJvdGggcGFyc2UgYXMgYSBuYW1lIGZvbGxvd2VkIGJ5IHRleHQgc3RhcnRpbmcgd2l0aCBgOmAsIGFuZCBhIGxpbmsgd2l0aCBubyBuYW1lIGhhc1xuICogbm90aGluZyB0byByZXNvbHZlLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbixcbiAgVFNFU1RyZWVcbn0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgdHlwZSB7XG4gIENsYXNzRGVjbGFyYXRpb24sXG4gIEVudGl0eU5hbWUsXG4gIEVudW1EZWNsYXJhdGlvbixcbiAgRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgSWRlbnRpZmllcixcbiAgSW50ZXJmYWNlRGVjbGFyYXRpb24sXG4gIEpTRG9jTGluayxcbiAgSlNEb2NMaW5rQ29kZSxcbiAgSlNEb2NMaW5rUGxhaW4sXG4gIEpTRG9jTWVtYmVyTmFtZSxcbiAgTWV0aG9kRGVjbGFyYXRpb24sXG4gIE1ldGhvZFNpZ25hdHVyZSxcbiAgTW9kdWxlRGVjbGFyYXRpb24sXG4gIE5vZGUsXG4gIFByb2dyYW0sXG4gIFByb3BlcnR5RGVjbGFyYXRpb24sXG4gIFByb3BlcnR5U2lnbmF0dXJlLFxuICBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBTeW1ib2wgYXMgVHNTeW1ib2wsXG4gIFR5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBUeXBlQ2hlY2tlcixcbiAgVmFyaWFibGVEZWNsYXJhdGlvblxufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtcbiAgZXNjYXBlTGVhZGluZ1VuZGVyc2NvcmVzLFxuICBmb3JFYWNoQ2hpbGQsXG4gIGdldEpTRG9jQ29tbWVudHNBbmRUYWdzLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRW51bURlY2xhcmF0aW9uLFxuICBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sXG4gIGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgaXNJZGVudGlmaWVyLFxuICBpc0ludGVyZmFjZURlY2xhcmF0aW9uLFxuICBpc0pTRG9jTGluayxcbiAgaXNKU0RvY0xpbmtDb2RlLFxuICBpc0pTRG9jTGlua1BsYWluLFxuICBpc0pTRG9jTWVtYmVyTmFtZSxcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNNZXRob2RTaWduYXR1cmUsXG4gIGlzTW9kdWxlRGVjbGFyYXRpb24sXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNQcm9wZXJ0eVNpZ25hdHVyZSxcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sXG4gIHJlc29sdmVNb2R1bGVOYW1lLFxuICBTeW1ib2xGbGFncyxcbiAgc3lzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgeyB0b1RTRVNUcmVlTm9kZSB9IGZyb20gJy4vdHMtZXN0cmVlLW5vZGUudHMnO1xuXG4vKipcbiAqIE1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIEpTRG9jIGxpbmsgdGFyZ2V0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBzeW1ib2wuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ25vVW5yZXNvbHZlZEpzZG9jTGluayc7XG5cbmludGVyZmFjZSBJc1Jlc29sdmVkTmFtZVBhcmFtcyB7XG4gIHJlYWRvbmx5IGNoZWNrZXI6IFR5cGVDaGVja2VyO1xuICByZWFkb25seSBjb250YWluaW5nRmlsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9jYWxEZWNsYXJhdGlvbk5hbWVzQnlOYW1lOiBSZWFkb25seU1hcDxzdHJpbmcsIHJlYWRvbmx5IElkZW50aWZpZXJbXT47XG4gIHJlYWRvbmx5IG5hbWU6IEVudGl0eU5hbWUgfCBKU0RvY01lbWJlck5hbWU7XG4gIHJlYWRvbmx5IHByb2dyYW06IFByb2dyYW07XG59XG5cbnR5cGUgSlNEb2NMaW5rTGlrZSA9IEpTRG9jTGluayB8IEpTRG9jTGlua0NvZGUgfCBKU0RvY0xpbmtQbGFpbjtcblxudHlwZSBMb2NhbERlY2xhcmF0aW9uID1cbiAgfCBDbGFzc0RlY2xhcmF0aW9uXG4gIHwgRW51bURlY2xhcmF0aW9uXG4gIHwgRnVuY3Rpb25EZWNsYXJhdGlvblxuICB8IEdldEFjY2Vzc29yRGVjbGFyYXRpb25cbiAgfCBJbnRlcmZhY2VEZWNsYXJhdGlvblxuICB8IE1ldGhvZERlY2xhcmF0aW9uXG4gIHwgTWV0aG9kU2lnbmF0dXJlXG4gIHwgTW9kdWxlRGVjbGFyYXRpb25cbiAgfCBQcm9wZXJ0eURlY2xhcmF0aW9uXG4gIHwgUHJvcGVydHlTaWduYXR1cmVcbiAgfCBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uXG4gIHwgVHlwZUFsaWFzRGVjbGFyYXRpb25cbiAgfCBWYXJpYWJsZURlY2xhcmF0aW9uO1xuXG50eXBlIE1vZHVsZVBhdGhNYXRjaEdyb3VwcyA9IFJlYWRvbmx5PFJlY29yZDwnbWVtYmVyUGF0aCcgfCAnbW9kdWxlUGF0aCcsIHN0cmluZz4+O1xuXG5pbnRlcmZhY2UgUHJvZ3JhbUluZGV4IHtcbiAgcmVhZG9ubHkgZXhwb3J0c0J5TmFtZTogTWFwPHN0cmluZywgVHNTeW1ib2xbXT47XG4gIHJlYWRvbmx5IG1vZHVsZXNCeVBhdGg6IE1hcDxzdHJpbmcsIFRzU3ltYm9sPjtcbn1cblxuY29uc3QgTU9EVUxFX1BBVEhfUkVHX0VYUCA9IC9eKD88bW9kdWxlUGF0aD5bXlxccyF8fV0qKSEoPzxtZW1iZXJQYXRoPltcXHckLiNdKykvO1xuY29uc3QgSU1QT1JUX1RZUEVfUkVHX0VYUCA9IC9eaW1wb3J0XFwoXFxzKig/PHF1b3RlPlsnXCJdKSg/PG1vZHVsZVBhdGg+W14nXCJdKylcXGs8cXVvdGU+XFxzKlxcKVxcLig/PG1lbWJlclBhdGg+W1xcdyQuI10rKS87XG5jb25zdCBSRUxBVElWRV9QQVRIX1BSRUZJWF9SRUdfRVhQID0gL14oPzpcXC5cXC4/XFwvKSsvO1xuY29uc3QgTUVNQkVSX1NFUEFSQVRPUl9SRUdfRVhQID0gL1suI10vO1xuY29uc3QgU09VUkNFX0ZJTEVfRVhURU5TSU9OX1JFR19FWFAgPSAvKD86XFwuZCk/XFwuW2NtXT90c3g/JC87XG5jb25zdCBJTkRFWF9TVUZGSVggPSAnL2luZGV4JztcblxuY29uc3QgcHJvZ3JhbUluZGV4Q2FjaGUgPSBuZXcgV2Vha01hcDxQcm9ncmFtLCBQcm9ncmFtSW5kZXg+KCk7XG5cbi8qKlxuICogVGhlIEVTTGludCBydWxlIHRoYXQgcmVwb3J0cyBKU0RvYyBsaW5rcyB3aG9zZSB0YXJnZXQgZG9lcyBub3QgcmVzb2x2ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vVW5yZXNvbHZlZEpzZG9jTGluazogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHNlcnZpY2VzID0gY29udGV4dC5zb3VyY2VDb2RlLnBhcnNlclNlcnZpY2VzIGFzIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbjtcblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHNlcnZpY2VzLnByb2dyYW07XG4gICAgICAgIGNvbnN0IGNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gICAgICAgIGNvbnN0IHRzU291cmNlRmlsZSA9IHNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQodG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuUHJvZ3JhbSk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHNhbWUgbGluayBpcyByZWFjaGFibGUgbW9yZSB0aGFuIG9uY2U6IGEgcGFyYW1ldGVyIHJldHVybnMgaXRzIG93biBgQHBhcmFtYCB0YWcsIHdoaWNoIGl0cyBmdW5jdGlvbidzXG4gICAgICAgICAqIEpTRG9jIGJsb2NrIGFsc28gY29udGFpbnMuIFNvIGRlZHVwbGljYXRlIG9uIHRoZSBsaW5rIGl0c2VsZiByYXRoZXIgdGhhbiBvbiB0aGUgSlNEb2Mgbm9kZS5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxpbmtzID0gbmV3IFNldDxKU0RvY0xpbmtMaWtlPigpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIEEgbGluayBtYXkgbmFtZSBhIGRlY2xhcmF0aW9uIGZ1cnRoZXIgZG93biB0aGUgZmlsZSwgc28gdGhlIHdob2xlIGZpbGUgaXMgd2Fsa2VkIGJlZm9yZSBhbnkgbGluayBpc1xuICAgICAgICAgKiByZXNvbHZlZC5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBJZGVudGlmaWVyW10+KCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlOiBOb2RlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKGlzSlNEb2NMaW5rTGlrZShqc0RvY05vZGUpKSB7XG4gICAgICAgICAgICBsaW5rcy5hZGQoanNEb2NOb2RlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKGpzRG9jTm9kZSwgdmlzaXRKc0RvY05vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXROb2RlKHRzTm9kZTogTm9kZSk6IHZvaWQge1xuICAgICAgICAgIGNvbGxlY3RMb2NhbERlY2xhcmF0aW9uTmFtZSh0c05vZGUsIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSk7XG4gICAgICAgICAgZm9yIChjb25zdCBqc0RvY05vZGUgb2YgZ2V0SlNEb2NDb21tZW50c0FuZFRhZ3ModHNOb2RlKSkge1xuICAgICAgICAgICAgdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKHRzTm9kZSwgdmlzaXROb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlcG9ydElmVW5yZXNvbHZlZChsaW5rOiBKU0RvY0xpbmtMaWtlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKCFsaW5rLm5hbWUgfHwgbGluay50ZXh0LnN0YXJ0c1dpdGgoJzonKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5hbWVUZXh0ID0gbGluay5uYW1lLmdldFRleHQoKTtcbiAgICAgICAgICBjb25zdCBmdWxsVGFyZ2V0ID0gbmFtZVRleHQgKyBsaW5rLnRleHQ7XG4gICAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBJTVBPUlRfVFlQRV9SRUdfRVhQLmV4ZWMoZnVsbFRhcmdldCkgPz8gTU9EVUxFX1BBVEhfUkVHX0VYUC5leGVjKGZ1bGxUYXJnZXQpO1xuICAgICAgICAgIGxldCByZXBvcnRlZE5hbWUgPSBuYW1lVGV4dDtcbiAgICAgICAgICBsZXQgaXNSZXNvbHZlZDogYm9vbGVhbjtcblxuICAgICAgICAgIGlmIChtb2R1bGVNYXRjaD8uZ3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCB7IG1lbWJlclBhdGgsIG1vZHVsZVBhdGggfSA9IG1vZHVsZU1hdGNoLmdyb3VwcyBhcyBNb2R1bGVQYXRoTWF0Y2hHcm91cHM7XG4gICAgICAgICAgICByZXBvcnRlZE5hbWUgPSBtb2R1bGVNYXRjaFswXTtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZVN5bWJvbCA9IGZpbmRNb2R1bGUocHJvZ3JhbSwgY2hlY2tlciwgbW9kdWxlUGF0aCwgdHNTb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQgPSAhIXJlc29sdmVNZW1iZXJQYXRoKGNoZWNrZXIsIG1vZHVsZVN5bWJvbCwgbWVtYmVyUGF0aC5zcGxpdChNRU1CRVJfU0VQQVJBVE9SX1JFR19FWFApKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXNSZXNvbHZlZCA9IGlzUmVzb2x2ZWROYW1lKHtcbiAgICAgICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICAgICAgY29udGFpbmluZ0ZpbGVOYW1lOiB0c1NvdXJjZUZpbGUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSxcbiAgICAgICAgICAgICAgbmFtZTogbGluay5uYW1lLFxuICAgICAgICAgICAgICBwcm9ncmFtXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNSZXNvbHZlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgbmFtZTogcmVwb3J0ZWROYW1lXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9jOiB7XG4gICAgICAgICAgICAgIGVuZDogY29udGV4dC5zb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChsaW5rLm5hbWUuZ2V0RW5kKCkpLFxuICAgICAgICAgICAgICBzdGFydDogY29udGV4dC5zb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChsaW5rLm5hbWUuZ2V0U3RhcnQoKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZpc2l0Tm9kZSh0c1NvdXJjZUZpbGUpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICByZXBvcnRJZlVucmVzb2x2ZWQobGluayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdEaXNhbGxvdyBKU0RvYyBsaW5rIHRhZ3Mgd2hvc2UgdGFyZ2V0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBzeW1ib2wnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnSlNEb2MgbGluayB0YXJnZXQgYHt7bmFtZX19YCBkb2VzIG5vdCByZXNvbHZlLiBXYXMgaXQgcmVuYW1lZCBvciByZW1vdmVkPydcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3Byb2JsZW0nXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNvbGxlY3RMb2NhbERlY2xhcmF0aW9uTmFtZShub2RlOiBOb2RlLCBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWU6IE1hcDxzdHJpbmcsIElkZW50aWZpZXJbXT4pOiB2b2lkIHtcbiAgaWYgKCFpc0xvY2FsRGVjbGFyYXRpb24obm9kZSkgfHwgIW5vZGUubmFtZSB8fCAhaXNJZGVudGlmaWVyKG5vZGUubmFtZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbmFtZXMgPSBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuZ2V0KG5vZGUubmFtZS50ZXh0KSA/PyBbXTtcbiAgbmFtZXMucHVzaChub2RlLm5hbWUpO1xuICBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuc2V0KG5vZGUubmFtZS50ZXh0LCBuYW1lcyk7XG59XG5cbmZ1bmN0aW9uIGZpbmRNb2R1bGUocHJvZ3JhbTogUHJvZ3JhbSwgY2hlY2tlcjogVHlwZUNoZWNrZXIsIHNwZWNpZmllcjogc3RyaW5nLCBjb250YWluaW5nRmlsZU5hbWU6IHN0cmluZyk6IFRzU3ltYm9sIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYW1iaWVudE1vZHVsZSA9IGdldFByb2dyYW1JbmRleChwcm9ncmFtLCBjaGVja2VyKS5tb2R1bGVzQnlQYXRoLmdldChzcGVjaWZpZXIpO1xuICBpZiAoYW1iaWVudE1vZHVsZSkge1xuICAgIHJldHVybiBhbWJpZW50TW9kdWxlO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWRGaWxlTmFtZSA9IHJlc29sdmVNb2R1bGVOYW1lKHNwZWNpZmllciwgY29udGFpbmluZ0ZpbGVOYW1lLCBwcm9ncmFtLmdldENvbXBpbGVyT3B0aW9ucygpLCBzeXMpLnJlc29sdmVkTW9kdWxlPy5yZXNvbHZlZEZpbGVOYW1lO1xuICBjb25zdCByZXNvbHZlZFNvdXJjZUZpbGUgPSByZXNvbHZlZEZpbGVOYW1lID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBwcm9ncmFtLmdldFNvdXJjZUZpbGUocmVzb2x2ZWRGaWxlTmFtZSk7XG4gIGNvbnN0IHJlc29sdmVkTW9kdWxlID0gcmVzb2x2ZWRTb3VyY2VGaWxlICYmIGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihyZXNvbHZlZFNvdXJjZUZpbGUpO1xuICByZXR1cm4gcmVzb2x2ZWRNb2R1bGUgPz8gZmluZE1vZHVsZUJ5UGF0aFN1ZmZpeChwcm9ncmFtLCBjaGVja2VyLCBzcGVjaWZpZXIpO1xufVxuXG5mdW5jdGlvbiBmaW5kTW9kdWxlQnlQYXRoU3VmZml4KHByb2dyYW06IFByb2dyYW0sIGNoZWNrZXI6IFR5cGVDaGVja2VyLCBtb2R1bGVQYXRoOiBzdHJpbmcpOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbW9kdWxlUGF0aC5yZXBsYWNlKFJFTEFUSVZFX1BBVEhfUFJFRklYX1JFR19FWFAsICcnKS5yZXBsYWNlKFNPVVJDRV9GSUxFX0VYVEVOU0lPTl9SRUdfRVhQLCAnJyk7XG4gIGNvbnN0IHN1ZmZpeGVzID0gW2AvJHtub3JtYWxpemVkUGF0aH1gLCBgLyR7bm9ybWFsaXplZFBhdGh9JHtJTkRFWF9TVUZGSVh9YF07XG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBjb25zdCBwYXRoV2l0aG91dEV4dGVuc2lvbiA9IHNvdXJjZUZpbGUuZmlsZU5hbWUucmVwbGFjZShTT1VSQ0VfRklMRV9FWFRFTlNJT05fUkVHX0VYUCwgJycpO1xuICAgIGlmIChzdWZmaXhlcy5ldmVyeSgoc3VmZml4KSA9PiAhcGF0aFdpdGhvdXRFeHRlbnNpb24uZW5kc1dpdGgoc3VmZml4KSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtb2R1bGVTeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oc291cmNlRmlsZSk7XG4gICAgaWYgKG1vZHVsZVN5bWJvbCkge1xuICAgICAgcmV0dXJuIG1vZHVsZVN5bWJvbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZmxhdHRlbk5hbWUobmFtZTogRW50aXR5TmFtZSB8IEpTRG9jTWVtYmVyTmFtZSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGlzSWRlbnRpZmllcihuYW1lKSA/IFtuYW1lLnRleHRdIDogWy4uLmZsYXR0ZW5OYW1lKG5hbWUubGVmdCksIG5hbWUucmlnaHQudGV4dF07XG59XG5cbmZ1bmN0aW9uIGdldE1lbWJlcihjaGVja2VyOiBUeXBlQ2hlY2tlciwgc3ltYm9sOiBUc1N5bWJvbCwgbWVtYmVyTmFtZTogc3RyaW5nKTogVHNTeW1ib2wgfCB1bmRlZmluZWQge1xuICBjb25zdCBlc2NhcGVkTmFtZSA9IGVzY2FwZUxlYWRpbmdVbmRlcnNjb3JlcyhtZW1iZXJOYW1lKTtcbiAgY29uc3QgdGFyZ2V0ID0gcmVzb2x2ZUFsaWFzKGNoZWNrZXIsIHN5bWJvbCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlIC0tIEJpdHdpc2UgZmxhZyB0ZXN0IGlzIGlkaW9tYXRpYyBmb3IgdGhlIFR5cGVTY3JpcHQgY29tcGlsZXIgQVBJLlxuICBjb25zdCBtb2R1bGVFeHBvcnQgPSAodGFyZ2V0LmZsYWdzICYgU3ltYm9sRmxhZ3MuTW9kdWxlKSA9PT0gMCA/IHVuZGVmaW5lZCA6IGNoZWNrZXIudHJ5R2V0TWVtYmVySW5Nb2R1bGVFeHBvcnRzKG1lbWJlck5hbWUsIHRhcmdldCk7XG4gIHJldHVybiBtb2R1bGVFeHBvcnRcbiAgICA/PyB0YXJnZXQuZXhwb3J0cz8uZ2V0KGVzY2FwZWROYW1lKVxuICAgID8/IHRhcmdldC5tZW1iZXJzPy5nZXQoZXNjYXBlZE5hbWUpXG4gICAgPz8gY2hlY2tlci5nZXRQcm9wZXJ0eU9mVHlwZShjaGVja2VyLmdldERlY2xhcmVkVHlwZU9mU3ltYm9sKHRhcmdldCksIG1lbWJlck5hbWUpXG4gICAgPz8gY2hlY2tlci5nZXRQcm9wZXJ0eU9mVHlwZShjaGVja2VyLmdldFR5cGVPZlN5bWJvbCh0YXJnZXQpLCBtZW1iZXJOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvZ3JhbUluZGV4KHByb2dyYW06IFByb2dyYW0sIGNoZWNrZXI6IFR5cGVDaGVja2VyKTogUHJvZ3JhbUluZGV4IHtcbiAgbGV0IGluZGV4ID0gcHJvZ3JhbUluZGV4Q2FjaGUuZ2V0KHByb2dyYW0pO1xuICBpZiAoaW5kZXgpIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBpbmRleCA9IHtcbiAgICBleHBvcnRzQnlOYW1lOiBuZXcgTWFwPHN0cmluZywgVHNTeW1ib2xbXT4oKSxcbiAgICBtb2R1bGVzQnlQYXRoOiBuZXcgTWFwPHN0cmluZywgVHNTeW1ib2w+KClcbiAgfTtcblxuICBjb25zdCBtb2R1bGVTeW1ib2xzOiBUc1N5bWJvbFtdID0gW107XG4gIGZvciAoY29uc3QgYW1iaWVudE1vZHVsZSBvZiBjaGVja2VyLmdldEFtYmllbnRNb2R1bGVzKCkpIHtcbiAgICBpbmRleC5tb2R1bGVzQnlQYXRoLnNldChhbWJpZW50TW9kdWxlLm5hbWUucmVwbGFjZUFsbCgnXCInLCAnJyksIGFtYmllbnRNb2R1bGUpO1xuICAgIG1vZHVsZVN5bWJvbHMucHVzaChhbWJpZW50TW9kdWxlKTtcbiAgfVxuICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2YgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgY29uc3QgbW9kdWxlU3ltYm9sID0gY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKHNvdXJjZUZpbGUpO1xuICAgIGlmIChtb2R1bGVTeW1ib2wpIHtcbiAgICAgIG1vZHVsZVN5bWJvbHMucHVzaChtb2R1bGVTeW1ib2wpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgbW9kdWxlU3ltYm9sIG9mIG1vZHVsZVN5bWJvbHMpIHtcbiAgICBmb3IgKGNvbnN0IGV4cG9ydFN5bWJvbCBvZiBjaGVja2VyLmdldEV4cG9ydHNPZk1vZHVsZShtb2R1bGVTeW1ib2wpKSB7XG4gICAgICBjb25zdCBzeW1ib2xzID0gaW5kZXguZXhwb3J0c0J5TmFtZS5nZXQoZXhwb3J0U3ltYm9sLm5hbWUpID8/IFtdO1xuICAgICAgc3ltYm9scy5wdXNoKGV4cG9ydFN5bWJvbCk7XG4gICAgICBpbmRleC5leHBvcnRzQnlOYW1lLnNldChleHBvcnRTeW1ib2wubmFtZSwgc3ltYm9scyk7XG4gICAgfVxuICB9XG5cbiAgcHJvZ3JhbUluZGV4Q2FjaGUuc2V0KHByb2dyYW0sIGluZGV4KTtcbiAgcmV0dXJuIGluZGV4O1xufVxuXG5mdW5jdGlvbiBpc0pTRG9jTGlua0xpa2Uobm9kZTogTm9kZSk6IG5vZGUgaXMgSlNEb2NMaW5rTGlrZSB7XG4gIHJldHVybiBpc0pTRG9jTGluayhub2RlKSB8fCBpc0pTRG9jTGlua0NvZGUobm9kZSkgfHwgaXNKU0RvY0xpbmtQbGFpbihub2RlKTtcbn1cblxuZnVuY3Rpb24gaXNMb2NhbERlY2xhcmF0aW9uKG5vZGU6IE5vZGUpOiBub2RlIGlzIExvY2FsRGVjbGFyYXRpb24ge1xuICByZXR1cm4gaXNDbGFzc0RlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNFbnVtRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0dldEFjY2Vzc29yRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0ludGVyZmFjZURlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNNZXRob2REZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzTWV0aG9kU2lnbmF0dXJlKG5vZGUpXG4gICAgfHwgaXNNb2R1bGVEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzUHJvcGVydHlEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzUHJvcGVydHlTaWduYXR1cmUobm9kZSlcbiAgICB8fCBpc1NldEFjY2Vzc29yRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc1Jlc29sdmVkTmFtZShwYXJhbXM6IElzUmVzb2x2ZWROYW1lUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHtcbiAgICBjaGVja2VyLFxuICAgIGNvbnRhaW5pbmdGaWxlTmFtZSxcbiAgICBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUsXG4gICAgbmFtZSxcbiAgICBwcm9ncmFtXG4gIH0gPSBwYXJhbXM7XG5cbiAgaWYgKGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihuYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gYEZvbyNiYXJgIGlzIGEgYEpTRG9jTWVtYmVyTmFtZWAsIHdoaWNoIHRoZSBjaGVja2VyIHJlc29sdmVzIG9ubHkgdGhyb3VnaCBpdHMgcmlnaHQtaGFuZCBtZW1iZXIuXG4gIGlmIChpc0pTRG9jTWVtYmVyTmFtZShuYW1lKSAmJiBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obmFtZS5yaWdodCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IFtyb290TmFtZSA9ICcnLCAuLi5tZW1iZXJOYW1lc10gPSBmbGF0dGVuTmFtZShuYW1lKTtcbiAgY29uc3QgaW5kZXggPSBnZXRQcm9ncmFtSW5kZXgocHJvZ3JhbSwgY2hlY2tlcik7XG4gIGNvbnN0IGxvY2FsUm9vdHMgPSAobG9jYWxEZWNsYXJhdGlvbk5hbWVzQnlOYW1lLmdldChyb290TmFtZSkgPz8gW10pLm1hcCgoZGVjbGFyYXRpb25OYW1lKSA9PiBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oZGVjbGFyYXRpb25OYW1lKSk7XG4gIGNvbnN0IHJvb3RzID0gWy4uLmxvY2FsUm9vdHMsIC4uLmluZGV4LmV4cG9ydHNCeU5hbWUuZ2V0KHJvb3ROYW1lKSA/PyBbXSwgZmluZE1vZHVsZShwcm9ncmFtLCBjaGVja2VyLCByb290TmFtZSwgY29udGFpbmluZ0ZpbGVOYW1lKV07XG5cbiAgcmV0dXJuIHJvb3RzLnNvbWUoKHJvb3QpID0+ICEhcmVzb2x2ZU1lbWJlclBhdGgoY2hlY2tlciwgcm9vdCwgbWVtYmVyTmFtZXMpKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFsaWFzKGNoZWNrZXI6IFR5cGVDaGVja2VyLCBzeW1ib2w6IFRzU3ltYm9sKTogVHNTeW1ib2wge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZSAtLSBCaXR3aXNlIGZsYWcgdGVzdCBpcyBpZGlvbWF0aWMgZm9yIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyIEFQSS5cbiAgcmV0dXJuIChzeW1ib2wuZmxhZ3MgJiBTeW1ib2xGbGFncy5BbGlhcykgPT09IDAgPyBzeW1ib2wgOiBjaGVja2VyLmdldEFsaWFzZWRTeW1ib2woc3ltYm9sKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU1lbWJlclBhdGgoY2hlY2tlcjogVHlwZUNoZWNrZXIsIHJvb3Q6IFRzU3ltYm9sIHwgdW5kZWZpbmVkLCBtZW1iZXJOYW1lczogcmVhZG9ubHkgc3RyaW5nW10pOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGxldCBjdXJyZW50OiBUc1N5bWJvbCB8IHVuZGVmaW5lZCA9IHJvb3Q7XG4gIGZvciAoY29uc3QgbWVtYmVyTmFtZSBvZiBtZW1iZXJOYW1lcykge1xuICAgIGlmICghY3VycmVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY3VycmVudCA9IGdldE1lbWJlcihjaGVja2VyLCBjdXJyZW50LCBtZW1iZXJOYW1lKTtcbiAgfVxuICByZXR1cm4gY3VycmVudDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnRUEsd0JBeUJPO0FBRVAsNEJBQStCO0FBS3hCLE1BQU0sYUFBYTtBQWtDMUIsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSwrQkFBK0I7QUFDckMsTUFBTSwyQkFBMkI7QUFDakMsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSxlQUFlO0FBRXJCLE1BQU0sb0JBQW9CLG9CQUFJLFFBQStCO0FBS3RELE1BQU0sd0JBQXlDO0FBQUEsRUFDcEQsT0FBTyxTQUFTO0FBQ2QsVUFBTSxXQUFXLFFBQVEsV0FBVztBQUVwQyxXQUFPO0FBQUEsTUFDTCxRQUFRLE1BQVk7QUFDbEIsY0FBTSxVQUFVLFNB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
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9uby11bnJlc29sdmVkLWpzZG9jLWxpbmsudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiBuby11bnJlc29sdmVkLWpzZG9jLWxpbmtcbiAqXG4gKiBSZXBvcnRzIGEgSlNEb2MgYGxpbmtgLCBgbGlua2NvZGVgIG9yIGBsaW5rcGxhaW5gIGlubGluZSB0YWcgd2hvc2UgdGFyZ2V0IG5vIGxvbmdlciByZXNvbHZlcyB0byBhIHN5bWJvbC5cbiAqXG4gKiBBIHJlbmFtZSBsZWF2ZXMgYHtAbGluayBPbGROYW1lfWAgYmVoaW5kIGFuZCBub3RoaW5nIGVsc2UgcmVwb3J0cyBpdDogYGpzZG9jL25vLXVuZGVmaW5lZC10eXBlc2AgZG9lcyBub3QgcmVzb2x2ZVxuICogbGluayB0YXJnZXRzLCBUU0RvYyBjaGVja3Mgb25seSB0aGUgdGFnIHN5bnRheCwgYW5kIGB0c2NgIHBhcnNlcyBKU0RvYyBsaW5rcyB3aXRob3V0IGV2ZXIgZGlhZ25vc2luZyB0aGVtLiBTbyBhIGRlYWRcbiAqIGxpbmsgc3Vydml2ZXMgdW50aWwgc29tZWJvZHkgaGFwcGVucyB0byBjbGljayBpdC5cbiAqXG4gKiBBIHRhcmdldCByZXNvbHZlcyB3aGVuIGFueSBvZiB0aGVzZSBmaW5kcyBpdCwgdHJpZWQgaW4gb3JkZXI6XG4gKlxuICogMS4gVGhlIHR5cGUgY2hlY2tlciwgYXQgdGhlIGNvbW1lbnQncyBvd24gbG9jYXRpb24sIGV4YWN0bHkgYXMgZWRpdG9yIGdvLXRvLWRlZmluaXRpb24gZG9lcyDigJQgc28gZXZlcnl0aGluZyBpblxuICogICAgc2NvcGUgdGhlcmUgcmVzb2x2ZXM6IHR5cGUgcGFyYW1ldGVycywgcGFyYW1ldGVycywgaW1wb3J0cywgYW5kIHRoZSBET00gLyBFUyBnbG9iYWxzLlxuICogMi4gQSBkZWNsYXJhdGlvbiBhbnl3aGVyZSBpbiB0aGUgc2FtZSBmaWxlIOKAlCBhIGZ1bmN0aW9uIG5lc3RlZCBpbiBhbm90aGVyLCBhIHByaXZhdGUgbWV0aG9kIOKAlCB3aGljaCBpcyBvdXQgb2ZcbiAqICAgIHNjb3BlIGF0IGEgYCpQYXJhbXNgIGludGVyZmFjZSBuYW1pbmcgaXQsIHlldCBpcyBleGFjdGx5IHdoYXQgYSByZW5hbWUgb2YgaXQgd291bGQgYnJlYWsuXG4gKiAzLiBUaGUgZXhwb3J0cyBvZiBhbnkgbW9kdWxlIGluIHRoZSBwcm9ncmFtLCBieSBuYW1lLiBBIGNvbW1lbnQgcm91dGluZWx5IG5hbWVzIGEgdHlwZSBpdHMgZmlsZSBuZXZlciBpbXBvcnRzIChhblxuICogICAgaW50ZWdyYXRpb24gdGVzdCBuYW1pbmcgdGhlIGNsYXNzIGl0IGRyaXZlcyB0aHJvdWdoIGBldmFsSW5PYnNpZGlhbmAsIGEgcmVtYXJrIG5hbWluZyBhbiBPYnNpZGlhbiBBUEkpLCBhbmQgdGhlXG4gKiAgICBBUEkgZG9jcyBnZW5lcmF0b3IgcmVzb2x2ZXMgc3VjaCBhIG5hbWUgbGlicmFyeS13aWRlIHRvby4gVGhpcyBrZWVwcyB0aGUgcnVsZSBhYm91dCBERUFEIGxpbmtzIHJhdGhlciB0aGFuXG4gKiAgICBhYm91dCBpbXBvcnRzOiBhIHJlbmFtZWQgb3IgcmVtb3ZlZCBkZWNsYXJhdGlvbiBpcyBleHBvcnRlZCBieSBubyBtb2R1bGUsIHNvIGl0IGlzIHN0aWxsIHJlcG9ydGVkLlxuICogNC4gQSBtb2R1bGUgbmFtZWQgYnkgaXRzIHNwZWNpZmllciBvciBpdHMgcGF0aCwgaW4gYm90aCBUU0RvYyBmb3JtczogYG9ic2lkaWFuI0V2ZW50cyNvbmAgKHRoZSBwYWNrYWdlIGFzIHRoZSBmaXJzdFxuICogICAgc2VnbWVudCkgYW5kIGBlcnJvciFlcnJvclRvU3RyaW5nYCAvIGBvYnNpZGlhbi9jb21wb25lbnRzL3BsdWdpbi1nYXRlLWNvbXBvbmVudCFQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm5gXG4gKiAgICAoYSBtb2R1bGUgcGF0aCwgZW5kaW5nIHdpdGggYCFgKSDigJQgcGx1cyBUeXBlU2NyaXB0J3Mgb3duIGBpbXBvcnQoJy4vbW9kdWxlLnRzJykuTWVtYmVyYC4gQSBwYXRoIG1hdGNoZXMgYW55XG4gKiAgICBzb3VyY2UgZmlsZSBpbiB0aGUgcHJvZ3JhbSB3aG9zZSBwYXRoIGVuZHMgd2l0aCBpdC5cbiAqXG4gKiBBZnRlciB0aGUgZmlyc3Qgc2VnbWVudCwgZWFjaCBmdXJ0aGVyIGAuYCAvIGAjYCBzZWdtZW50IGlzIGxvb2tlZCB1cCBhcyBhIG1lbWJlcjogYSBuYW1lc3BhY2Ugb3IgbW9kdWxlIGV4cG9ydCwgYVxuICogc3RhdGljIG9yIGluc3RhbmNlIG1lbWJlciwgb3IgYSBwcm9wZXJ0eSBvZiB0aGUgcHJldmlvdXMgbWVtYmVyJ3MgdHlwZSDigJQgc28gYEFwcC52YXVsdC5hZGFwdGVyYCByZXNvbHZlcy5cbiAqXG4gKiBBIGxpbmsgdGhhdCBpcyBub3QgYSBjb2RlIHJlZmVyZW5jZSBpcyBza2lwcGVkOiBhIFVSTCAoYHtAbGluayBodHRwczovL2V4YW1wbGUuY29tfWApIGFuZCBhIEpTRG9jIG5hbWVwYXRoXG4gKiAoYHtAbGluayBtb2R1bGU6Zm9vfWApIGJvdGggcGFyc2UgYXMgYSBuYW1lIGZvbGxvd2VkIGJ5IHRleHQgc3RhcnRpbmcgd2l0aCBgOmAsIGFuZCBhIGxpbmsgd2l0aCBubyBuYW1lIGhhc1xuICogbm90aGluZyB0byByZXNvbHZlLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbixcbiAgVFNFU1RyZWVcbn0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgdHlwZSB7XG4gIENsYXNzRGVjbGFyYXRpb24sXG4gIEVudGl0eU5hbWUsXG4gIEVudW1EZWNsYXJhdGlvbixcbiAgRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgSWRlbnRpZmllcixcbiAgSW50ZXJmYWNlRGVjbGFyYXRpb24sXG4gIEpTRG9jTGluayxcbiAgSlNEb2NMaW5rQ29kZSxcbiAgSlNEb2NMaW5rUGxhaW4sXG4gIEpTRG9jTWVtYmVyTmFtZSxcbiAgTWV0aG9kRGVjbGFyYXRpb24sXG4gIE1ldGhvZFNpZ25hdHVyZSxcbiAgTW9kdWxlRGVjbGFyYXRpb24sXG4gIE5vZGUsXG4gIFByb2dyYW0sXG4gIFByb3BlcnR5RGVjbGFyYXRpb24sXG4gIFByb3BlcnR5U2lnbmF0dXJlLFxuICBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBTeW1ib2wgYXMgVHNTeW1ib2wsXG4gIFR5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBUeXBlQ2hlY2tlcixcbiAgVmFyaWFibGVEZWNsYXJhdGlvblxufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtcbiAgZXNjYXBlTGVhZGluZ1VuZGVyc2NvcmVzLFxuICBmb3JFYWNoQ2hpbGQsXG4gIGdldEpTRG9jQ29tbWVudHNBbmRUYWdzLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRW51bURlY2xhcmF0aW9uLFxuICBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sXG4gIGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgaXNJZGVudGlmaWVyLFxuICBpc0ludGVyZmFjZURlY2xhcmF0aW9uLFxuICBpc0pTRG9jTGluayxcbiAgaXNKU0RvY0xpbmtDb2RlLFxuICBpc0pTRG9jTGlua1BsYWluLFxuICBpc0pTRG9jTWVtYmVyTmFtZSxcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNNZXRob2RTaWduYXR1cmUsXG4gIGlzTW9kdWxlRGVjbGFyYXRpb24sXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNQcm9wZXJ0eVNpZ25hdHVyZSxcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sXG4gIHJlc29sdmVNb2R1bGVOYW1lLFxuICBTeW1ib2xGbGFncyxcbiAgc3lzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgeyB0b1RTRVNUcmVlTm9kZSB9IGZyb20gJy4vdHMtZXN0cmVlLW5vZGUudHMnO1xuXG4vKipcbiAqIE1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIEpTRG9jIGxpbmsgdGFyZ2V0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBzeW1ib2wuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ25vVW5yZXNvbHZlZEpzZG9jTGluayc7XG5cbmludGVyZmFjZSBJc1Jlc29sdmVkTmFtZVBhcmFtcyB7XG4gIHJlYWRvbmx5IGNoZWNrZXI6IFR5cGVDaGVja2VyO1xuICByZWFkb25seSBjb250YWluaW5nRmlsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9jYWxEZWNsYXJhdGlvbk5hbWVzQnlOYW1lOiBSZWFkb25seU1hcDxzdHJpbmcsIHJlYWRvbmx5IElkZW50aWZpZXJbXT47XG4gIHJlYWRvbmx5IG5hbWU6IEVudGl0eU5hbWUgfCBKU0RvY01lbWJlck5hbWU7XG4gIHJlYWRvbmx5IHByb2dyYW06IFByb2dyYW07XG59XG5cbnR5cGUgSlNEb2NMaW5rTGlrZSA9IEpTRG9jTGluayB8IEpTRG9jTGlua0NvZGUgfCBKU0RvY0xpbmtQbGFpbjtcblxudHlwZSBMb2NhbERlY2xhcmF0aW9uID1cbiAgfCBDbGFzc0RlY2xhcmF0aW9uXG4gIHwgRW51bURlY2xhcmF0aW9uXG4gIHwgRnVuY3Rpb25EZWNsYXJhdGlvblxuICB8IEdldEFjY2Vzc29yRGVjbGFyYXRpb25cbiAgfCBJbnRlcmZhY2VEZWNsYXJhdGlvblxuICB8IE1ldGhvZERlY2xhcmF0aW9uXG4gIHwgTWV0aG9kU2lnbmF0dXJlXG4gIHwgTW9kdWxlRGVjbGFyYXRpb25cbiAgfCBQcm9wZXJ0eURlY2xhcmF0aW9uXG4gIHwgUHJvcGVydHlTaWduYXR1cmVcbiAgfCBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uXG4gIHwgVHlwZUFsaWFzRGVjbGFyYXRpb25cbiAgfCBWYXJpYWJsZURlY2xhcmF0aW9uO1xuXG50eXBlIE1vZHVsZVBhdGhNYXRjaEdyb3VwcyA9IFJlYWRvbmx5PFJlY29yZDwnbWVtYmVyUGF0aCcgfCAnbW9kdWxlUGF0aCcsIHN0cmluZz4+O1xuXG5pbnRlcmZhY2UgUHJvZ3JhbUluZGV4IHtcbiAgcmVhZG9ubHkgZXhwb3J0c0J5TmFtZTogTWFwPHN0cmluZywgVHNTeW1ib2xbXT47XG4gIHJlYWRvbmx5IG1vZHVsZXNCeVBhdGg6IE1hcDxzdHJpbmcsIFRzU3ltYm9sPjtcbn1cblxuY29uc3QgTU9EVUxFX1BBVEhfUkVHX0VYUCA9IC9eKD88bW9kdWxlUGF0aD5bXlxccyF8fV0qKSEoPzxtZW1iZXJQYXRoPltcXHckLiNdKykvO1xuY29uc3QgSU1QT1JUX1RZUEVfUkVHX0VYUCA9IC9eaW1wb3J0XFwoXFxzKig/PHF1b3RlPlsnXCJdKSg/PG1vZHVsZVBhdGg+W14nXCJdKylcXGs8cXVvdGU+XFxzKlxcKVxcLig/PG1lbWJlclBhdGg+W1xcdyQuI10rKS87XG5jb25zdCBSRUxBVElWRV9QQVRIX1BSRUZJWF9SRUdfRVhQID0gL14oPzpcXC5cXC4/XFwvKSsvO1xuY29uc3QgTUVNQkVSX1NFUEFSQVRPUl9SRUdfRVhQID0gL1suI10vO1xuY29uc3QgU09VUkNFX0ZJTEVfRVhURU5TSU9OX1JFR19FWFAgPSAvKD86XFwuZCk/XFwuW2NtXT90c3g/JC87XG5jb25zdCBJTkRFWF9TVUZGSVggPSAnL2luZGV4JztcblxuY29uc3QgcHJvZ3JhbUluZGV4Q2FjaGUgPSBuZXcgV2Vha01hcDxQcm9ncmFtLCBQcm9ncmFtSW5kZXg+KCk7XG5cbi8qKlxuICogVGhlIEVTTGludCBydWxlIHRoYXQgcmVwb3J0cyBKU0RvYyBsaW5rcyB3aG9zZSB0YXJnZXQgZG9lcyBub3QgcmVzb2x2ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vVW5yZXNvbHZlZEpzZG9jTGluazogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHNlcnZpY2VzID0gY29udGV4dC5zb3VyY2VDb2RlLnBhcnNlclNlcnZpY2VzIGFzIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbjtcblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHNlcnZpY2VzLnByb2dyYW07XG4gICAgICAgIGNvbnN0IGNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gICAgICAgIGNvbnN0IHRzU291cmNlRmlsZSA9IHNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQodG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuUHJvZ3JhbSk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHNhbWUgbGluayBpcyByZWFjaGFibGUgbW9yZSB0aGFuIG9uY2U6IGEgcGFyYW1ldGVyIHJldHVybnMgaXRzIG93biBgQHBhcmFtYCB0YWcsIHdoaWNoIGl0cyBmdW5jdGlvbidzXG4gICAgICAgICAqIEpTRG9jIGJsb2NrIGFsc28gY29udGFpbnMuIFNvIGRlZHVwbGljYXRlIG9uIHRoZSBsaW5rIGl0c2VsZiByYXRoZXIgdGhhbiBvbiB0aGUgSlNEb2Mgbm9kZS5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxpbmtzID0gbmV3IFNldDxKU0RvY0xpbmtMaWtlPigpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIEEgbGluayBtYXkgbmFtZSBhIGRlY2xhcmF0aW9uIGZ1cnRoZXIgZG93biB0aGUgZmlsZSwgc28gdGhlIHdob2xlIGZpbGUgaXMgd2Fsa2VkIGJlZm9yZSBhbnkgbGluayBpc1xuICAgICAgICAgKiByZXNvbHZlZC5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBJZGVudGlmaWVyW10+KCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlOiBOb2RlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKGlzSlNEb2NMaW5rTGlrZShqc0RvY05vZGUpKSB7XG4gICAgICAgICAgICBsaW5rcy5hZGQoanNEb2NOb2RlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKGpzRG9jTm9kZSwgdmlzaXRKc0RvY05vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXROb2RlKHRzTm9kZTogTm9kZSk6IHZvaWQge1xuICAgICAgICAgIGNvbGxlY3RMb2NhbERlY2xhcmF0aW9uTmFtZSh0c05vZGUsIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSk7XG4gICAgICAgICAgZm9yIChjb25zdCBqc0RvY05vZGUgb2YgZ2V0SlNEb2NDb21tZW50c0FuZFRhZ3ModHNOb2RlKSkge1xuICAgICAgICAgICAgdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKHRzTm9kZSwgdmlzaXROb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlcG9ydElmVW5yZXNvbHZlZChsaW5rOiBKU0RvY0xpbmtMaWtlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKCFsaW5rLm5hbWUgfHwgbGluay50ZXh0LnN0YXJ0c1dpdGgoJzonKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5hbWVUZXh0ID0gbGluay5uYW1lLmdldFRleHQoKTtcbiAgICAgICAgICBjb25zdCBmdWxsVGFyZ2V0ID0gbmFtZVRleHQgKyBsaW5rLnRleHQ7XG4gICAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBJTVBPUlRfVFlQRV9SRUdfRVhQLmV4ZWMoZnVsbFRhcmdldCkgPz8gTU9EVUxFX1BBVEhfUkVHX0VYUC5leGVjKGZ1bGxUYXJnZXQpO1xuICAgICAgICAgIGxldCByZXBvcnRlZE5hbWUgPSBuYW1lVGV4dDtcbiAgICAgICAgICBsZXQgaXNSZXNvbHZlZDogYm9vbGVhbjtcblxuICAgICAgICAgIGlmIChtb2R1bGVNYXRjaD8uZ3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCB7IG1lbWJlclBhdGgsIG1vZHVsZVBhdGggfSA9IG1vZHVsZU1hdGNoLmdyb3VwcyBhcyBNb2R1bGVQYXRoTWF0Y2hHcm91cHM7XG4gICAgICAgICAgICByZXBvcnRlZE5hbWUgPSBtb2R1bGVNYXRjaFswXTtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZVN5bWJvbCA9IGZpbmRNb2R1bGUocHJvZ3JhbSwgY2hlY2tlciwgbW9kdWxlUGF0aCwgdHNTb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQgPSAhIXJlc29sdmVNZW1iZXJQYXRoKGNoZWNrZXIsIG1vZHVsZVN5bWJvbCwgbWVtYmVyUGF0aC5zcGxpdChNRU1CRVJfU0VQQVJBVE9SX1JFR19FWFApKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXNSZXNvbHZlZCA9IGlzUmVzb2x2ZWROYW1lKHtcbiAgICAgICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICAgICAgY29udGFpbmluZ0ZpbGVOYW1lOiB0c1NvdXJjZUZpbGUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSxcbiAgICAgICAgICAgICAgbmFtZTogbGluay5uYW1lLFxuICAgICAgICAgICAgICBwcm9ncmFtXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNSZXNvbHZlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgbmFtZTogcmVwb3J0ZWROYW1lXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9jOiB7XG4gICAgICAgICAgICAgIGVuZDogY29udGV4dC5zb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChsaW5rLm5hbWUuZ2V0RW5kKCkpLFxuICAgICAgICAgICAgICBzdGFydDogY29udGV4dC5zb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChsaW5rLm5hbWUuZ2V0U3RhcnQoKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZpc2l0Tm9kZSh0c1NvdXJjZUZpbGUpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICByZXBvcnRJZlVucmVzb2x2ZWQobGluayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdEaXNhbGxvdyBKU0RvYyBsaW5rIHRhZ3Mgd2hvc2UgdGFyZ2V0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBzeW1ib2wnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnSlNEb2MgbGluayB0YXJnZXQgYHt7bmFtZX19YCBkb2VzIG5vdCByZXNvbHZlLiBXYXMgaXQgcmVuYW1lZCBvciByZW1vdmVkPydcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3Byb2JsZW0nXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNvbGxlY3RMb2NhbERlY2xhcmF0aW9uTmFtZShub2RlOiBOb2RlLCBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWU6IE1hcDxzdHJpbmcsIElkZW50aWZpZXJbXT4pOiB2b2lkIHtcbiAgaWYgKCFpc0xvY2FsRGVjbGFyYXRpb24obm9kZSkgfHwgIW5vZGUubmFtZSB8fCAhaXNJZGVudGlmaWVyKG5vZGUubmFtZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbmFtZXMgPSBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuZ2V0KG5vZGUubmFtZS50ZXh0KSA/PyBbXTtcbiAgbmFtZXMucHVzaChub2RlLm5hbWUpO1xuICBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuc2V0KG5vZGUubmFtZS50ZXh0LCBuYW1lcyk7XG59XG5cbmZ1bmN0aW9uIGZpbmRNb2R1bGUocHJvZ3JhbTogUHJvZ3JhbSwgY2hlY2tlcjogVHlwZUNoZWNrZXIsIHNwZWNpZmllcjogc3RyaW5nLCBjb250YWluaW5nRmlsZU5hbWU6IHN0cmluZyk6IFRzU3ltYm9sIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYW1iaWVudE1vZHVsZSA9IGdldFByb2dyYW1JbmRleChwcm9ncmFtLCBjaGVja2VyKS5tb2R1bGVzQnlQYXRoLmdldChzcGVjaWZpZXIpO1xuICBpZiAoYW1iaWVudE1vZHVsZSkge1xuICAgIHJldHVybiBhbWJpZW50TW9kdWxlO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWRGaWxlTmFtZSA9IHJlc29sdmVNb2R1bGVOYW1lKHNwZWNpZmllciwgY29udGFpbmluZ0ZpbGVOYW1lLCBwcm9ncmFtLmdldENvbXBpbGVyT3B0aW9ucygpLCBzeXMpLnJlc29sdmVkTW9kdWxlPy5yZXNvbHZlZEZpbGVOYW1lO1xuICBjb25zdCByZXNvbHZlZFNvdXJjZUZpbGUgPSByZXNvbHZlZEZpbGVOYW1lID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBwcm9ncmFtLmdldFNvdXJjZUZpbGUocmVzb2x2ZWRGaWxlTmFtZSk7XG4gIGNvbnN0IHJlc29sdmVkTW9kdWxlID0gcmVzb2x2ZWRTb3VyY2VGaWxlICYmIGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihyZXNvbHZlZFNvdXJjZUZpbGUpO1xuICByZXR1cm4gcmVzb2x2ZWRNb2R1bGUgPz8gZmluZE1vZHVsZUJ5UGF0aFN1ZmZpeChwcm9ncmFtLCBjaGVja2VyLCBzcGVjaWZpZXIpO1xufVxuXG5mdW5jdGlvbiBmaW5kTW9kdWxlQnlQYXRoU3VmZml4KHByb2dyYW06IFByb2dyYW0sIGNoZWNrZXI6IFR5cGVDaGVja2VyLCBtb2R1bGVQYXRoOiBzdHJpbmcpOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbW9kdWxlUGF0aC5yZXBsYWNlKFJFTEFUSVZFX1BBVEhfUFJFRklYX1JFR19FWFAsICcnKS5yZXBsYWNlKFNPVVJDRV9GSUxFX0VYVEVOU0lPTl9SRUdfRVhQLCAnJyk7XG4gIGNvbnN0IHN1ZmZpeGVzID0gW2AvJHtub3JtYWxpemVkUGF0aH1gLCBgLyR7bm9ybWFsaXplZFBhdGh9JHtJTkRFWF9TVUZGSVh9YF07XG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBjb25zdCBwYXRoV2l0aG91dEV4dGVuc2lvbiA9IHNvdXJjZUZpbGUuZmlsZU5hbWUucmVwbGFjZShTT1VSQ0VfRklMRV9FWFRFTlNJT05fUkVHX0VYUCwgJycpO1xuICAgIGlmIChzdWZmaXhlcy5ldmVyeSgoc3VmZml4KSA9PiAhcGF0aFdpdGhvdXRFeHRlbnNpb24uZW5kc1dpdGgoc3VmZml4KSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtb2R1bGVTeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oc291cmNlRmlsZSk7XG4gICAgaWYgKG1vZHVsZVN5bWJvbCkge1xuICAgICAgcmV0dXJuIG1vZHVsZVN5bWJvbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZmxhdHRlbk5hbWUobmFtZTogRW50aXR5TmFtZSB8IEpTRG9jTWVtYmVyTmFtZSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGlzSWRlbnRpZmllcihuYW1lKSA/IFtuYW1lLnRleHRdIDogWy4uLmZsYXR0ZW5OYW1lKG5hbWUubGVmdCksIG5hbWUucmlnaHQudGV4dF07XG59XG5cbmZ1bmN0aW9uIGdldE1lbWJlcihjaGVja2VyOiBUeXBlQ2hlY2tlciwgJHN5bWJvbDogVHNTeW1ib2wsIG1lbWJlck5hbWU6IHN0cmluZyk6IFRzU3ltYm9sIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZXNjYXBlZE5hbWUgPSBlc2NhcGVMZWFkaW5nVW5kZXJzY29yZXMobWVtYmVyTmFtZSk7XG4gIGNvbnN0IHRhcmdldCA9IHJlc29sdmVBbGlhcyhjaGVja2VyLCAkc3ltYm9sKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UgLS0gQml0d2lzZSBmbGFnIHRlc3QgaXMgaWRpb21hdGljIGZvciB0aGUgVHlwZVNjcmlwdCBjb21waWxlciBBUEkuXG4gIGNvbnN0IG1vZHVsZUV4cG9ydCA9ICh0YXJnZXQuZmxhZ3MgJiBTeW1ib2xGbGFncy5Nb2R1bGUpID09PSAwID8gdW5kZWZpbmVkIDogY2hlY2tlci50cnlHZXRNZW1iZXJJbk1vZHVsZUV4cG9ydHMobWVtYmVyTmFtZSwgdGFyZ2V0KTtcbiAgcmV0dXJuIG1vZHVsZUV4cG9ydFxuICAgID8/IHRhcmdldC5leHBvcnRzPy5nZXQoZXNjYXBlZE5hbWUpXG4gICAgPz8gdGFyZ2V0Lm1lbWJlcnM/LmdldChlc2NhcGVkTmFtZSlcbiAgICA/PyBjaGVja2VyLmdldFByb3BlcnR5T2ZUeXBlKGNoZWNrZXIuZ2V0RGVjbGFyZWRUeXBlT2ZTeW1ib2wodGFyZ2V0KSwgbWVtYmVyTmFtZSlcbiAgICA/PyBjaGVja2VyLmdldFByb3BlcnR5T2ZUeXBlKGNoZWNrZXIuZ2V0VHlwZU9mU3ltYm9sKHRhcmdldCksIG1lbWJlck5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9ncmFtSW5kZXgocHJvZ3JhbTogUHJvZ3JhbSwgY2hlY2tlcjogVHlwZUNoZWNrZXIpOiBQcm9ncmFtSW5kZXgge1xuICBsZXQgaW5kZXggPSBwcm9ncmFtSW5kZXhDYWNoZS5nZXQocHJvZ3JhbSk7XG4gIGlmIChpbmRleCkge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGluZGV4ID0ge1xuICAgIGV4cG9ydHNCeU5hbWU6IG5ldyBNYXA8c3RyaW5nLCBUc1N5bWJvbFtdPigpLFxuICAgIG1vZHVsZXNCeVBhdGg6IG5ldyBNYXA8c3RyaW5nLCBUc1N5bWJvbD4oKVxuICB9O1xuXG4gIGNvbnN0IG1vZHVsZVN5bWJvbHM6IFRzU3ltYm9sW10gPSBbXTtcbiAgZm9yIChjb25zdCBhbWJpZW50TW9kdWxlIG9mIGNoZWNrZXIuZ2V0QW1iaWVudE1vZHVsZXMoKSkge1xuICAgIGluZGV4Lm1vZHVsZXNCeVBhdGguc2V0KGFtYmllbnRNb2R1bGUubmFtZS5yZXBsYWNlQWxsKCdcIicsICcnKSwgYW1iaWVudE1vZHVsZSk7XG4gICAgbW9kdWxlU3ltYm9scy5wdXNoKGFtYmllbnRNb2R1bGUpO1xuICB9XG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBjb25zdCBtb2R1bGVTeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oc291cmNlRmlsZSk7XG4gICAgaWYgKG1vZHVsZVN5bWJvbCkge1xuICAgICAgbW9kdWxlU3ltYm9scy5wdXNoKG1vZHVsZVN5bWJvbCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBtb2R1bGVTeW1ib2wgb2YgbW9kdWxlU3ltYm9scykge1xuICAgIGZvciAoY29uc3QgZXhwb3J0U3ltYm9sIG9mIGNoZWNrZXIuZ2V0RXhwb3J0c09mTW9kdWxlKG1vZHVsZVN5bWJvbCkpIHtcbiAgICAgIGNvbnN0IHN5bWJvbHMgPSBpbmRleC5leHBvcnRzQnlOYW1lLmdldChleHBvcnRTeW1ib2wubmFtZSkgPz8gW107XG4gICAgICBzeW1ib2xzLnB1c2goZXhwb3J0U3ltYm9sKTtcbiAgICAgIGluZGV4LmV4cG9ydHNCeU5hbWUuc2V0KGV4cG9ydFN5bWJvbC5uYW1lLCBzeW1ib2xzKTtcbiAgICB9XG4gIH1cblxuICBwcm9ncmFtSW5kZXhDYWNoZS5zZXQocHJvZ3JhbSwgaW5kZXgpO1xuICByZXR1cm4gaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGlzSlNEb2NMaW5rTGlrZShub2RlOiBOb2RlKTogbm9kZSBpcyBKU0RvY0xpbmtMaWtlIHtcbiAgcmV0dXJuIGlzSlNEb2NMaW5rKG5vZGUpIHx8IGlzSlNEb2NMaW5rQ29kZShub2RlKSB8fCBpc0pTRG9jTGlua1BsYWluKG5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc0xvY2FsRGVjbGFyYXRpb24obm9kZTogTm9kZSk6IG5vZGUgaXMgTG9jYWxEZWNsYXJhdGlvbiB7XG4gIHJldHVybiBpc0NsYXNzRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0VudW1EZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzRnVuY3Rpb25EZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzSW50ZXJmYWNlRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc01ldGhvZERlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNNZXRob2RTaWduYXR1cmUobm9kZSlcbiAgICB8fCBpc01vZHVsZURlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNQcm9wZXJ0eURlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNQcm9wZXJ0eVNpZ25hdHVyZShub2RlKVxuICAgIHx8IGlzU2V0QWNjZXNzb3JEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzVHlwZUFsaWFzRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24obm9kZSk7XG59XG5cbmZ1bmN0aW9uIGlzUmVzb2x2ZWROYW1lKHBhcmFtczogSXNSZXNvbHZlZE5hbWVQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIGNoZWNrZXIsXG4gICAgY29udGFpbmluZ0ZpbGVOYW1lLFxuICAgIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSxcbiAgICBuYW1lLFxuICAgIHByb2dyYW1cbiAgfSA9IHBhcmFtcztcblxuICBpZiAoY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKG5hbWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBgRm9vI2JhcmAgaXMgYSBgSlNEb2NNZW1iZXJOYW1lYCwgd2hpY2ggdGhlIGNoZWNrZXIgcmVzb2x2ZXMgb25seSB0aHJvdWdoIGl0cyByaWdodC1oYW5kIG1lbWJlci5cbiAgaWYgKGlzSlNEb2NNZW1iZXJOYW1lKG5hbWUpICYmIGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihuYW1lLnJpZ2h0KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgW3Jvb3ROYW1lID0gJycsIC4uLm1lbWJlck5hbWVzXSA9IGZsYXR0ZW5OYW1lKG5hbWUpO1xuICBjb25zdCBpbmRleCA9IGdldFByb2dyYW1JbmRleChwcm9ncmFtLCBjaGVja2VyKTtcbiAgY29uc3QgbG9jYWxSb290cyA9IChsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuZ2V0KHJvb3ROYW1lKSA/PyBbXSkubWFwKChkZWNsYXJhdGlvbk5hbWUpID0+IGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihkZWNsYXJhdGlvbk5hbWUpKTtcbiAgY29uc3Qgcm9vdHMgPSBbLi4ubG9jYWxSb290cywgLi4uaW5kZXguZXhwb3J0c0J5TmFtZS5nZXQocm9vdE5hbWUpID8/IFtdLCBmaW5kTW9kdWxlKHByb2dyYW0sIGNoZWNrZXIsIHJvb3ROYW1lLCBjb250YWluaW5nRmlsZU5hbWUpXTtcblxuICByZXR1cm4gcm9vdHMuc29tZSgocm9vdCkgPT4gISFyZXNvbHZlTWVtYmVyUGF0aChjaGVja2VyLCByb290LCBtZW1iZXJOYW1lcykpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQWxpYXMoY2hlY2tlcjogVHlwZUNoZWNrZXIsICRzeW1ib2w6IFRzU3ltYm9sKTogVHNTeW1ib2wge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZSAtLSBCaXR3aXNlIGZsYWcgdGVzdCBpcyBpZGlvbWF0aWMgZm9yIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyIEFQSS5cbiAgcmV0dXJuICgkc3ltYm9sLmZsYWdzICYgU3ltYm9sRmxhZ3MuQWxpYXMpID09PSAwID8gJHN5bWJvbCA6IGNoZWNrZXIuZ2V0QWxpYXNlZFN5bWJvbCgkc3ltYm9sKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU1lbWJlclBhdGgoY2hlY2tlcjogVHlwZUNoZWNrZXIsIHJvb3Q6IFRzU3ltYm9sIHwgdW5kZWZpbmVkLCBtZW1iZXJOYW1lczogcmVhZG9ubHkgc3RyaW5nW10pOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGxldCBjdXJyZW50OiBUc1N5bWJvbCB8IHVuZGVmaW5lZCA9IHJvb3Q7XG4gIGZvciAoY29uc3QgbWVtYmVyTmFtZSBvZiBtZW1iZXJOYW1lcykge1xuICAgIGlmICghY3VycmVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY3VycmVudCA9IGdldE1lbWJlcihjaGVja2VyLCBjdXJyZW50LCBtZW1iZXJOYW1lKTtcbiAgfVxuICByZXR1cm4gY3VycmVudDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnRUEsd0JBeUJPO0FBRVAsNEJBQStCO0FBS3hCLE1BQU0sYUFBYTtBQWtDMUIsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSwrQkFBK0I7QUFDckMsTUFBTSwyQkFBMkI7QUFDakMsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSxlQUFlO0FBRXJCLE1BQU0sb0JBQW9CLG9CQUFJLFFBQStCO0FBS3RELE1BQU0sd0JBQXlDO0FBQUEsRUFDcEQsT0FBTyxTQUFTO0FBQ2QsVUFBTSxXQUFXLFFBQVEsV0FBVztBQUVwQyxXQUFPO0FBQUEsTUFDTCxRQUFRLE1BQVk7QUFDbEIsY0FBTSxV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
@@ -240,4 +240,4 @@ function record(node) {
240
240
  MESSAGE_ID,
241
241
  noUnusedParamsMembers
242
242
  });
243
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9uby11bnVzZWQtcGFyYW1zLW1lbWJlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiBuby11bnVzZWQtcGFyYW1zLW1lbWJlcnNcbiAqXG4gKiBGbGFncyBtZW1iZXJzIG9mIGEgYCpQYXJhbXNgIC8gYCpPcHRpb25zYCBwYXJhbWV0ZXItYmFnIGludGVyZmFjZSB0aGF0IGFyZVxuICogbmV2ZXIgYWNjZXNzZWQgd2l0aGluIHRoZSBmdW5jdGlvbi9tZXRob2QvY29uc3RydWN0b3IgdGhhdCByZWNlaXZlcyB0aGVcbiAqIGludGVyZmFjZSBhcyBhIHBhcmFtZXRlci5cbiAqXG4gKiBEZXRlY3Rpb24gaXMgcGVyLWZ1bmN0aW9uLCB1c2luZyBzY29wZSBhbmFseXNpcyB0byBmaW5kIHRoZSByZWFsIHJlZmVyZW5jZXNcbiAqIHRvIHRoZSBwYXJhbWV0ZXIgKG5vdCB1bnJlbGF0ZWQgc2FtZS1uYW1lZCBpZGVudGlmaWVycykuIEEgbWVtYmVyIGNvdW50cyBhc1xuICogdXNlZCB3aGVuIGl0IGlzIHJlZmVyZW5jZWQgYnkgbmFtZSDigJQgYHBhcmFtcy5tZW1iZXJgLCBgcGFyYW1zWydtZW1iZXInXWAsIG9yXG4gKiBgY29uc3QgeyBtZW1iZXIgfSA9IHBhcmFtc2AgKHBsdXMgYSBkZXN0cnVjdHVyZWQgc2lnbmF0dXJlXG4gKiBgZm4oeyBtZW1iZXIgfTogRm9vUGFyYW1zKWApLlxuICpcbiAqIENydWNpYWxseSwgaWYgdGhlIG9iamVjdCBldmVyIEVTQ0FQRVMgd2hvbGUg4oCUIHNwcmVhZCAoYHsgLi4ucGFyYW1zIH1gKSwgcmVzdFxuICogKGBjb25zdCB7IC4uLnJlc3QgfSA9IHBhcmFtc2ApLCBwYXNzZWQgYXMgYW4gYXJndW1lbnQgKGBmKHBhcmFtcylgKSwgcmV0dXJuZWQsXG4gKiBvciBzdG9yZWQgKGB0aGlzLnBhcmFtcyA9IHBhcmFtc2ApIOKAlCBldmVyeSBtZW1iZXIgaXMgdHJlYXRlZCBhcyB1c2VkIGFuZFxuICogbm90aGluZyBpcyByZXBvcnRlZCBmb3IgdGhhdCBpbnRlcmZhY2UuIFN1Y2ggYW4gZXNjYXBlIGVpdGhlciByZWFkcyBldmVyeVxuICogbWVtYmVyIChzcHJlYWQvcmVzdCkgb3IgaGFuZHMgdGhlIG9iamVjdCB0byBjb2RlIHRoaXMgcnVsZSBjYW5ub3Qgc2VlLCBzb1xuICogbWVtYmVyIGRlYWRuZXNzIGNhbm5vdCBiZSBkZWNpZGVkIGxvY2FsbHkuXG4gKlxuICogQSBtZW1iZXIgaXMgdGhlcmVmb3JlIGZsYWdnZWQgb25seSB3aGVuIGl0IGlzIG5ldmVyIHJlZmVyZW5jZWQgYnkgbmFtZSBBTkRcbiAqIHRoZSBvYmplY3QgbmV2ZXIgZXNjYXBlcyDigJQgaS5lLiB0aGUgXCJhIGBwYXJhbXMueGAgdXNhZ2Ugd2FzIGRlbGV0ZWQgYnV0IGB4YFxuICogd2FzIGxlZnQgb24gdGhlIGludGVyZmFjZVwiIGNhc2UuIEEgbWVtYmVyIHRoYXQgaXMgYWN0dWFsbHkgc3RpbGwgbmVlZGVkIChyZWFkXG4gKiB2aWEgYW4gZXNjYXBlKSBpcyBuZXZlciB3cm9uZ2x5IGZsYWdnZWQ7IGEgbWVtYmVyIHRoYXQgaXMgZXNjYXBlZCBidXQgZGVhZFxuICogZG93bnN0cmVhbSBpcyBhIHRvbGVyYXRlZCBmYWxzZSBuZWdhdGl2ZSAoaXRzIGRlYWRuZXNzIGlzIG5vdCBsb2NhbCkuXG4gKlxuICogT25seSBpbnRlcmZhY2VzIGRlY2xhcmVkIGluIHRoZSBzYW1lIGZpbGUgYXJlIGNoZWNrZWQ7IGFuIGltcG9ydGVkIHBhcmFtZXRlclxuICogdHlwZSBpcyBza2lwcGVkLiBPbmx5IGlkZW50aWZpZXItbmFtZWQgbWVtYmVycyBhcmUgdHJhY2tlZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFJ1bGUsXG4gIFNjb3BlXG59IGZyb20gJ2VzbGludCc7XG5cbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcblxuY29uc3QgUEFSQU1TX09QVElPTlNfU1VGRklYX1BBVFRFUk4gPSAvKD86UGFyYW1zfE9wdGlvbnMpJC87XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGEgYCpQYXJhbXNgL2AqT3B0aW9uc2AgaW50ZXJmYWNlIG1lbWJlciBpcyBuZXZlciBhY2Nlc3NlZCBieSB0aGUgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSUQgPSAndW51c2VkUGFyYW1zTWVtYmVyJztcblxuaW50ZXJmYWNlIElkZW50aWZpZXJCaW5kaW5nIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiAnaWRlbnRpZmllcic7XG59XG5cbmludGVyZmFjZSBJbnRlcmZhY2VVc2FnZSB7XG4gIHJlYWRvbmx5IHVzZWQ6IFNldDxzdHJpbmc+O1xuICB1c2VzQWxsOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgTWF5YmVUeXBlZE5vZGUge1xuICB0eXBlPzogdW5rbm93bjtcbn1cblxudHlwZSBQYXJhbWV0ZXJCaW5kaW5nID0gSWRlbnRpZmllckJpbmRpbmcgfCBQYXR0ZXJuQmluZGluZztcblxuaW50ZXJmYWNlIFBhcmFtZXRlckluZm8ge1xuICByZWFkb25seSBiaW5kaW5nOiBQYXJhbWV0ZXJCaW5kaW5nO1xuICByZWFkb25seSB0eXBlTmFtZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGF0dGVybkJpbmRpbmcge1xuICBwYXR0ZXJuOiBSdWxlLk5vZGU7XG4gIHR5cGU6ICdwYXR0ZXJuJztcbn1cblxuLyoqXG4gKiBFU0xpbnQgcnVsZSBmbGFnZ2luZyBgKlBhcmFtc2AvYCpPcHRpb25zYCBpbnRlcmZhY2UgbWVtYmVycyB0aGF0IHRoZSBmdW5jdGlvbiByZWNlaXZpbmcgdGhlbSBuZXZlciBhY2Nlc3Nlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vVW51c2VkUGFyYW1zTWVtYmVyczogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGludGVyZmFjZUtleU5vZGVzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIFJ1bGUuTm9kZT4+KCk7XG4gICAgY29uc3QgdXNhZ2VCeUludGVyZmFjZSA9IG5ldyBNYXA8c3RyaW5nLCBJbnRlcmZhY2VVc2FnZT4oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAnOmZ1bmN0aW9uJyhub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgcmVjb3JkKG5vZGUpWydwYXJhbXMnXSBhcyBSdWxlLk5vZGVbXSkge1xuICAgICAgICAgIGNvbnN0IGluZm8gPSBnZXRQYXJhbWV0ZXJJbmZvKHBhcmFtZXRlcik7XG4gICAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB1c2FnZSA9IGdldE9yQ3JlYXRlVXNhZ2UoaW5mby50eXBlTmFtZSk7XG4gICAgICAgICAgaWYgKGluZm8uYmluZGluZy50eXBlID09PSAncGF0dGVybicpIHtcbiAgICAgICAgICAgIGNvbGxlY3RQYXR0ZXJuTWVtYmVycyhpbmZvLmJpbmRpbmcucGF0dGVybiwgdXNhZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2xsZWN0UmVmZXJlbmNlTWVtYmVycyh7XG4gICAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IGluZm8uYmluZGluZy5uYW1lLFxuICAgICAgICAgICAgICBzY29wZTogY29udGV4dC5zb3VyY2VDb2RlLmdldFNjb3BlKG5vZGUpLFxuICAgICAgICAgICAgICB1c2FnZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgJ1Byb2dyYW06ZXhpdCcoKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgW3R5cGVOYW1lLCBrZXlOb2Rlc10gb2YgaW50ZXJmYWNlS2V5Tm9kZXMpIHtcbiAgICAgICAgICBjb25zdCB1c2FnZSA9IHVzYWdlQnlJbnRlcmZhY2UuZ2V0KHR5cGVOYW1lKTtcbiAgICAgICAgICBpZiAoIXVzYWdlIHx8IHVzYWdlLnVzZXNBbGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoY29uc3QgW21lbWJlck5hbWUsIGtleU5vZGVdIG9mIGtleU5vZGVzKSB7XG4gICAgICAgICAgICBpZiAoIXVzYWdlLnVzZWQuaGFzKG1lbWJlck5hbWUpKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lOiB0eXBlTmFtZSxcbiAgICAgICAgICAgICAgICAgIG1lbWJlcjogbWVtYmVyTmFtZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgICAgICAgIG5vZGU6IGtleU5vZGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgVFNJbnRlcmZhY2VEZWNsYXJhdGlvbihub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGdldEludGVyZmFjZU5hbWUobm9kZSk7XG4gICAgICAgIGlmICghUEFSQU1TX09QVElPTlNfU1VGRklYX1BBVFRFUk4udGVzdChuYW1lKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpbnRlcmZhY2VLZXlOb2Rlcy5zZXQobmFtZSwgZ2V0SW50ZXJmYWNlTWVtYmVycyhub2RlKSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldE9yQ3JlYXRlVXNhZ2UodHlwZU5hbWU6IHN0cmluZyk6IEludGVyZmFjZVVzYWdlIHtcbiAgICAgIGxldCB1c2FnZSA9IHVzYWdlQnlJbnRlcmZhY2UuZ2V0KHR5cGVOYW1lKTtcbiAgICAgIGlmICghdXNhZ2UpIHtcbiAgICAgICAgdXNhZ2UgPSB7IHVzZWQ6IG5ldyBTZXQ8c3RyaW5nPigpLCB1c2VzQWxsOiBmYWxzZSB9O1xuICAgICAgICB1c2FnZUJ5SW50ZXJmYWNlLnNldCh0eXBlTmFtZSwgdXNhZ2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVzYWdlO1xuICAgIH1cbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRmxhZyBgKlBhcmFtc2AvYCpPcHRpb25zYCBpbnRlcmZhY2UgbWVtYmVycyBuZXZlciBhY2Nlc3NlZCBieSB0aGUgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyB0aGVtJ1xuICAgIH0sXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIFtNRVNTQUdFX0lEXTogJ01lbWJlciBcInt7IG1lbWJlciB9fVwiIG9mIFwie3sgaW50ZXJmYWNlTmFtZSB9fVwiIGlzIG5ldmVyIGFjY2Vzc2VkIGJ5IHRoZSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGl0LiBSZW1vdmUgaXQgKHRoZSBjb21waWxlciB3aWxsIGNhdGNoIGl0IGlmIGl0IGlzIHN0aWxsIG5lZWRlZCBlbHNld2hlcmUpLidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nXG4gIH1cbn07XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNvbGxlY3RSZWZlcmVuY2VNZW1iZXJzfS5cbiAqL1xuaW50ZXJmYWNlIENvbGxlY3RSZWZlcmVuY2VNZW1iZXJzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgd2hvc2UgcmVmZXJlbmNlcyBhcmUgaW5zcGVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVyTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgaW4gd2hpY2ggdGhlIHBhcmFtZXRlciBpcyBib3VuZC5cbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBTY29wZS5TY29wZTtcblxuICAvKipcbiAgICogVGhlIHVzYWdlIGFjY3VtdWxhdG9yIHRvIHJlY29yZCBhY2Nlc3NlZCBtZW1iZXJzIGludG8uXG4gICAqL1xuICByZWFkb25seSB1c2FnZTogSW50ZXJmYWNlVXNhZ2U7XG59XG5cbmZ1bmN0aW9uIGNsYXNzaWZ5UmVmZXJlbmNlKHJlZmVyZW5jZTogb2JqZWN0LCB1c2FnZTogSW50ZXJmYWNlVXNhZ2UpOiB2b2lkIHtcbiAgY29uc3QgcGFyZW50ID0gcmVjb3JkKHJlZmVyZW5jZSlbJ3BhcmVudCddIGFzIFJ1bGUuTm9kZTtcbiAgaWYgKHBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicgJiYgcmVjb3JkKHBhcmVudClbJ29iamVjdCddID09PSByZWZlcmVuY2UpIHtcbiAgICBjb2xsZWN0TWVtYmVyQWNjZXNzKHBhcmVudCwgdXNhZ2UpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRvcicgJiYgcmVjb3JkKHBhcmVudClbJ2luaXQnXSA9PT0gcmVmZXJlbmNlICYmIChyZWNvcmQocGFyZW50KVsnaWQnXSBhcyBSdWxlLk5vZGUpLnR5cGUgPT09ICdPYmplY3RQYXR0ZXJuJykge1xuICAgIGNvbGxlY3RQYXR0ZXJuTWVtYmVycyhyZWNvcmQocGFyZW50KVsnaWQnXSBhcyBSdWxlLk5vZGUsIHVzYWdlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGUgb2JqZWN0IGVzY2FwZXMgd2hvbGUgKHBhc3NlZCBhcyBhbiBhcmd1bWVudCwgcmV0dXJuZWQsIHN0b3JlZCwgc3ByZWFkLCAuLi4pOiBldmVyeSBtZW1iZXIgbWF5IGJlIHJlYWQgZWxzZXdoZXJlLlxuICB1c2FnZS51c2VzQWxsID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdE1lbWJlckFjY2Vzcyhub2RlOiBSdWxlLk5vZGUsIHVzYWdlOiBJbnRlcmZhY2VVc2FnZSk6IHZvaWQge1xuICBjb25zdCBpc0NvbXB1dGVkID0gcmVjb3JkKG5vZGUpWydjb21wdXRlZCddID09PSB0cnVlO1xuICBjb25zdCBwcm9wZXJ0eSA9IHJlY29yZChub2RlKVsncHJvcGVydHknXSBhcyBSdWxlLk5vZGU7XG4gIGlmIChwcm9wZXJ0eS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICBpZiAoIWlzQ29tcHV0ZWQpIHtcbiAgICAgIHVzYWdlLnVzZWQuYWRkKHJlY29yZChwcm9wZXJ0eSlbJ25hbWUnXSBhcyBzdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvcGVydHkudHlwZSAhPT0gJ0xpdGVyYWwnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdmFsdWUgPSByZWNvcmQocHJvcGVydHkpWyd2YWx1ZSddO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHVzYWdlLnVzZWQuYWRkKHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0UGF0dGVybk1lbWJlcnMocGF0dGVybjogUnVsZS5Ob2RlLCB1c2FnZTogSW50ZXJmYWNlVXNhZ2UpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiByZWNvcmQocGF0dGVybilbJ3Byb3BlcnRpZXMnXSBhcyBSdWxlLk5vZGVbXSkge1xuICAgIGlmIChwcm9wZXJ0eS50eXBlICE9PSAnUHJvcGVydHknKSB7XG4gICAgICAvLyBgY29uc3QgeyAuLi5yZXN0IH0gPSBwYXJhbXNgIHJlYWRzIGV2ZXJ5IHJlbWFpbmluZyBtZW1iZXIuXG4gICAgICB1c2FnZS51c2VzQWxsID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocmVjb3JkKHByb3BlcnR5KVsnY29tcHV0ZWQnXSA9PT0gdHJ1ZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHJlY29yZChwcm9wZXJ0eSlbJ2tleSddIGFzIFJ1bGUuTm9kZTtcbiAgICBpZiAoa2V5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgdXNhZ2UudXNlZC5hZGQocmVjb3JkKGtleSlbJ25hbWUnXSBhcyBzdHJpbmcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0UmVmZXJlbmNlTWVtYmVycyhwYXJhbXM6IENvbGxlY3RSZWZlcmVuY2VNZW1iZXJzUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHsgcGFyYW1ldGVyTmFtZSwgc2NvcGUsIHVzYWdlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHZhcmlhYmxlID0gZW5zdXJlTm9uTnVsbGFibGUoc2NvcGUuc2V0LmdldChwYXJhbWV0ZXJOYW1lKSk7XG4gIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIHZhcmlhYmxlLnJlZmVyZW5jZXMpIHtcbiAgICBjbGFzc2lmeVJlZmVyZW5jZShyZWZlcmVuY2UuaWRlbnRpZmllciwgdXNhZ2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEludGVyZmFjZU1lbWJlcnMobm9kZTogUnVsZS5Ob2RlKTogTWFwPHN0cmluZywgUnVsZS5Ob2RlPiB7XG4gIGNvbnN0IG1lbWJlcnMgPSBuZXcgTWFwPHN0cmluZywgUnVsZS5Ob2RlPigpO1xuICBjb25zdCBpbnRlcmZhY2VCb2R5ID0gcmVjb3JkKG5vZGUpWydib2R5J10gYXMgUnVsZS5Ob2RlO1xuICBmb3IgKGNvbnN0IHNpZ25hdHVyZSBvZiByZWNvcmQoaW50ZXJmYWNlQm9keSlbJ2JvZHknXSBhcyBSdWxlLk5vZGVbXSkge1xuICAgIGlmICgobm9kZVR5cGUoc2lnbmF0dXJlKSAhPT0gJ1RTUHJvcGVydHlTaWduYXR1cmUnICYmIG5vZGVUeXBlKHNpZ25hdHVyZSkgIT09ICdUU01ldGhvZFNpZ25hdHVyZScpIHx8IChyZWNvcmQoc2lnbmF0dXJlKVsnY29tcHV0ZWQnXSA9PT0gdHJ1ZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSByZWNvcmQoc2lnbmF0dXJlKVsna2V5J10gYXMgUnVsZS5Ob2RlO1xuICAgIGlmIChrZXkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBtZW1iZXJzLnNldChyZWNvcmQoa2V5KVsnbmFtZSddIGFzIHN0cmluZywga2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lbWJlcnM7XG59XG5cbmZ1bmN0aW9uIGdldEludGVyZmFjZU5hbWUobm9kZTogUnVsZS5Ob2RlKTogc3RyaW5nIHtcbiAgY29uc3QgaWQgPSByZWNvcmQobm9kZSlbJ2lkJ10gYXMgUnVsZS5Ob2RlO1xuICByZXR1cm4gcmVjb3JkKGlkKVsnbmFtZSddIGFzIHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVySW5mbyhwYXJhbWV0ZXI6IFJ1bGUuTm9kZSk6IFBhcmFtZXRlckluZm8gfCB1bmRlZmluZWQge1xuICBjb25zdCBhY3R1YWxQYXJhbWV0ZXIgPSBub2RlVHlwZShwYXJhbWV0ZXIpID09PSAnVFNQYXJhbWV0ZXJQcm9wZXJ0eScgPyByZWNvcmQocGFyYW1ldGVyKVsncGFyYW1ldGVyJ10gYXMgUnVsZS5Ob2RlIDogcGFyYW1ldGVyO1xuXG4gIGNvbnN0IHR5cGVOYW1lID0gZ2V0VHlwZVJlZmVyZW5jZU5hbWUoYWN0dWFsUGFyYW1ldGVyKTtcbiAgaWYgKCF0eXBlTmFtZSB8fCAhUEFSQU1TX09QVElPTlNfU1VGRklYX1BBVFRFUk4udGVzdCh0eXBlTmFtZSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGFjdHVhbFBhcmFtZXRlci50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICByZXR1cm4geyBiaW5kaW5nOiB7IG5hbWU6IHJlY29yZChhY3R1YWxQYXJhbWV0ZXIpWyduYW1lJ10gYXMgc3RyaW5nLCB0eXBlOiAnaWRlbnRpZmllcicgfSwgdHlwZU5hbWUgfTtcbiAgfVxuXG4gIHJldHVybiBhY3R1YWxQYXJhbWV0ZXIudHlwZSA9PT0gJ09iamVjdFBhdHRlcm4nID8geyBiaW5kaW5nOiB7IHBhdHRlcm46IGFjdHVhbFBhcmFtZXRlciwgdHlwZTogJ3BhdHRlcm4nIH0sIHR5cGVOYW1lIH0gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFR5cGVSZWZlcmVuY2VOYW1lKHBhcmFtZXRlcjogUnVsZS5Ob2RlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYW5ub3RhdGlvbiA9IHJlY29yZChwYXJhbWV0ZXIpWyd0eXBlQW5ub3RhdGlvbiddO1xuICBpZiAoIWlzTm9kZShhbm5vdGF0aW9uKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCB0eXBlTm9kZSA9IHJlY29yZChhbm5vdGF0aW9uKVsndHlwZUFubm90YXRpb24nXSBhcyBSdWxlLk5vZGU7XG4gIGlmIChub2RlVHlwZSh0eXBlTm9kZSkgIT09ICdUU1R5cGVSZWZlcmVuY2UnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHR5cGVOYW1lID0gcmVjb3JkKHR5cGVOb2RlKVsndHlwZU5hbWUnXSBhcyBSdWxlLk5vZGU7XG4gIHJldHVybiB0eXBlTmFtZS50eXBlID09PSAnSWRlbnRpZmllcicgPyAocmVjb3JkKHR5cGVOYW1lKVsnbmFtZSddIGFzIHN0cmluZykgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzTm9kZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJ1bGUuTm9kZSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiAodmFsdWUgYXMgTWF5YmVUeXBlZE5vZGUpLnR5cGUgPT09ICdzdHJpbmcnO1xufVxuXG5mdW5jdGlvbiBub2RlVHlwZShub2RlOiBSdWxlLk5vZGUpOiBzdHJpbmcge1xuICByZXR1cm4gcmVjb3JkKG5vZGUpWyd0eXBlJ10gYXMgc3RyaW5nO1xufVxuXG5mdW5jdGlvbiByZWNvcmQobm9kZTogb2JqZWN0KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gbm9kZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxQ0EseUJBQWtDO0FBRWxDLE1BQU0sZ0NBQWdDO0FBSy9CLE1BQU0sYUFBYTtBQStCbkIsTUFBTSx3QkFBeUM7QUFBQSxFQUNwRCxPQUFPLFNBQVM7QUFDZCxVQUFNLG9CQUFvQixvQkFBSSxJQUFvQztBQUNsRSxVQUFNLG1CQUFtQixvQkFBSSxJQUE0QjtBQUV6RCxXQUFPO0FBQUEsTUFDTCxZQUFZLE1BQXVCO0FBQ2pDLG1CQUFXLGFBQWEsT0FBTyxJQUFJLEVBQUUsUUFBUSxHQUFrQjtBQUM3RCxnQkFBTSxPQUFPLGlCQUFpQixTQUFTO0FBQ3ZDLGNBQUksQ0FBQyxNQUFNO0FBQ1Q7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sUUFBUSxpQkFBaUIsS0FBSyxRQUFRO0FBQzVDLGNBQUksS0FBSyxRQUFRLFNBQVMsV0FBVztBQUNuQyxrQ0FBc0IsS0FBSyxRQUFRLFNBQVMsS0FBSztBQUFBLFVBQ25ELE9BQU87QUFDTCxvQ0FBd0I7QUFBQSxjQUN0QixlQUFlLEtBQUssUUFBUTtBQUFBLGNBQzVCLE9BQU8sUUFBUSxXQUFXLFNBQVMsSUFBSTtBQUFBLGNBQ3ZDO0FBQUEsWUFDRixDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsTUFDQSxpQkFBdUI7QUFDckIsbUJBQVcsQ0FBQyxVQUFVLFFBQVEsS0FBSyxtQkFBbUI7QUFDcEQsZ0JBQU0sUUFBUSxpQkFBaUIsSUFBSSxRQUFRO0FBQzNDLGNBQUksQ0FBQyxTQUFTLE1BQU0sU0FBUztBQUMzQjtBQUFBLFVBQ0Y7QUFFQSxxQkFBVyxDQUFDLFlBQVksT0FBTyxLQUFLLFVBQVU7QUFDNUMsZ0JBQUks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
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9uby11bnVzZWQtcGFyYW1zLW1lbWJlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiBuby11bnVzZWQtcGFyYW1zLW1lbWJlcnNcbiAqXG4gKiBGbGFncyBtZW1iZXJzIG9mIGEgYCpQYXJhbXNgIC8gYCpPcHRpb25zYCBwYXJhbWV0ZXItYmFnIGludGVyZmFjZSB0aGF0IGFyZVxuICogbmV2ZXIgYWNjZXNzZWQgd2l0aGluIHRoZSBmdW5jdGlvbi9tZXRob2QvY29uc3RydWN0b3IgdGhhdCByZWNlaXZlcyB0aGVcbiAqIGludGVyZmFjZSBhcyBhIHBhcmFtZXRlci5cbiAqXG4gKiBEZXRlY3Rpb24gaXMgcGVyLWZ1bmN0aW9uLCB1c2luZyBzY29wZSBhbmFseXNpcyB0byBmaW5kIHRoZSByZWFsIHJlZmVyZW5jZXNcbiAqIHRvIHRoZSBwYXJhbWV0ZXIgKG5vdCB1bnJlbGF0ZWQgc2FtZS1uYW1lZCBpZGVudGlmaWVycykuIEEgbWVtYmVyIGNvdW50cyBhc1xuICogdXNlZCB3aGVuIGl0IGlzIHJlZmVyZW5jZWQgYnkgbmFtZSDigJQgYHBhcmFtcy5tZW1iZXJgLCBgcGFyYW1zWydtZW1iZXInXWAsIG9yXG4gKiBgY29uc3QgeyBtZW1iZXIgfSA9IHBhcmFtc2AgKHBsdXMgYSBkZXN0cnVjdHVyZWQgc2lnbmF0dXJlXG4gKiBgZm4oeyBtZW1iZXIgfTogRm9vUGFyYW1zKWApLlxuICpcbiAqIENydWNpYWxseSwgaWYgdGhlIG9iamVjdCBldmVyIEVTQ0FQRVMgd2hvbGUg4oCUIHNwcmVhZCAoYHsgLi4ucGFyYW1zIH1gKSwgcmVzdFxuICogKGBjb25zdCB7IC4uLnJlc3QgfSA9IHBhcmFtc2ApLCBwYXNzZWQgYXMgYW4gYXJndW1lbnQgKGBmKHBhcmFtcylgKSwgcmV0dXJuZWQsXG4gKiBvciBzdG9yZWQgKGB0aGlzLnBhcmFtcyA9IHBhcmFtc2ApIOKAlCBldmVyeSBtZW1iZXIgaXMgdHJlYXRlZCBhcyB1c2VkIGFuZFxuICogbm90aGluZyBpcyByZXBvcnRlZCBmb3IgdGhhdCBpbnRlcmZhY2UuIFN1Y2ggYW4gZXNjYXBlIGVpdGhlciByZWFkcyBldmVyeVxuICogbWVtYmVyIChzcHJlYWQvcmVzdCkgb3IgaGFuZHMgdGhlIG9iamVjdCB0byBjb2RlIHRoaXMgcnVsZSBjYW5ub3Qgc2VlLCBzb1xuICogbWVtYmVyIGRlYWRuZXNzIGNhbm5vdCBiZSBkZWNpZGVkIGxvY2FsbHkuXG4gKlxuICogQSBtZW1iZXIgaXMgdGhlcmVmb3JlIGZsYWdnZWQgb25seSB3aGVuIGl0IGlzIG5ldmVyIHJlZmVyZW5jZWQgYnkgbmFtZSBBTkRcbiAqIHRoZSBvYmplY3QgbmV2ZXIgZXNjYXBlcyDigJQgaS5lLiB0aGUgXCJhIGBwYXJhbXMueGAgdXNhZ2Ugd2FzIGRlbGV0ZWQgYnV0IGB4YFxuICogd2FzIGxlZnQgb24gdGhlIGludGVyZmFjZVwiIGNhc2UuIEEgbWVtYmVyIHRoYXQgaXMgYWN0dWFsbHkgc3RpbGwgbmVlZGVkIChyZWFkXG4gKiB2aWEgYW4gZXNjYXBlKSBpcyBuZXZlciB3cm9uZ2x5IGZsYWdnZWQ7IGEgbWVtYmVyIHRoYXQgaXMgZXNjYXBlZCBidXQgZGVhZFxuICogZG93bnN0cmVhbSBpcyBhIHRvbGVyYXRlZCBmYWxzZSBuZWdhdGl2ZSAoaXRzIGRlYWRuZXNzIGlzIG5vdCBsb2NhbCkuXG4gKlxuICogT25seSBpbnRlcmZhY2VzIGRlY2xhcmVkIGluIHRoZSBzYW1lIGZpbGUgYXJlIGNoZWNrZWQ7IGFuIGltcG9ydGVkIHBhcmFtZXRlclxuICogdHlwZSBpcyBza2lwcGVkLiBPbmx5IGlkZW50aWZpZXItbmFtZWQgbWVtYmVycyBhcmUgdHJhY2tlZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFJ1bGUsXG4gIFNjb3BlXG59IGZyb20gJ2VzbGludCc7XG5cbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcblxuY29uc3QgUEFSQU1TX09QVElPTlNfU1VGRklYX1BBVFRFUk4gPSAvKD86UGFyYW1zfE9wdGlvbnMpJC87XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGEgYCpQYXJhbXNgL2AqT3B0aW9uc2AgaW50ZXJmYWNlIG1lbWJlciBpcyBuZXZlciBhY2Nlc3NlZCBieSB0aGUgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSUQgPSAndW51c2VkUGFyYW1zTWVtYmVyJztcblxuaW50ZXJmYWNlIElkZW50aWZpZXJCaW5kaW5nIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSB0eXBlOiAnaWRlbnRpZmllcic7XG59XG5cbmludGVyZmFjZSBJbnRlcmZhY2VVc2FnZSB7XG4gIHJlYWRvbmx5IHVzZWQ6IFNldDxzdHJpbmc+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBUcmF2ZXJzYWwgbWFya3MgYW4gaW50ZXJmYWNlIGFzIGVzY2FwZWQgd2hlbiB0aGUgb2JqZWN0IGlzIHBhc3NlZCB3aG9sZS5cbiAgdXNlc0FsbDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIE1heWJlVHlwZWROb2RlIHtcbiAgcmVhZG9ubHkgdHlwZT86IHVua25vd247XG59XG5cbnR5cGUgUGFyYW1ldGVyQmluZGluZyA9IElkZW50aWZpZXJCaW5kaW5nIHwgUGF0dGVybkJpbmRpbmc7XG5cbmludGVyZmFjZSBQYXJhbWV0ZXJJbmZvIHtcbiAgcmVhZG9ubHkgYmluZGluZzogUGFyYW1ldGVyQmluZGluZztcbiAgcmVhZG9ubHkgdHlwZU5hbWU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFBhdHRlcm5CaW5kaW5nIHtcbiAgcmVhZG9ubHkgcGF0dGVybjogUnVsZS5Ob2RlO1xuICByZWFkb25seSB0eXBlOiAncGF0dGVybic7XG59XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgZmxhZ2dpbmcgYCpQYXJhbXNgL2AqT3B0aW9uc2AgaW50ZXJmYWNlIG1lbWJlcnMgdGhhdCB0aGUgZnVuY3Rpb24gcmVjZWl2aW5nIHRoZW0gbmV2ZXIgYWNjZXNzZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBub1VudXNlZFBhcmFtc01lbWJlcnM6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBpbnRlcmZhY2VLZXlOb2RlcyA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBSdWxlLk5vZGU+PigpO1xuICAgIGNvbnN0IHVzYWdlQnlJbnRlcmZhY2UgPSBuZXcgTWFwPHN0cmluZywgSW50ZXJmYWNlVXNhZ2U+KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgJzpmdW5jdGlvbicobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIHJlY29yZChub2RlKVsncGFyYW1zJ10gYXMgUnVsZS5Ob2RlW10pIHtcbiAgICAgICAgICBjb25zdCBpbmZvID0gZ2V0UGFyYW1ldGVySW5mbyhwYXJhbWV0ZXIpO1xuICAgICAgICAgIGlmICghaW5mbykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgdXNhZ2UgPSBnZXRPckNyZWF0ZVVzYWdlKGluZm8udHlwZU5hbWUpO1xuICAgICAgICAgIGlmIChpbmZvLmJpbmRpbmcudHlwZSA9PT0gJ3BhdHRlcm4nKSB7XG4gICAgICAgICAgICBjb2xsZWN0UGF0dGVybk1lbWJlcnMoaW5mby5iaW5kaW5nLnBhdHRlcm4sIHVzYWdlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sbGVjdFJlZmVyZW5jZU1lbWJlcnMoe1xuICAgICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiBpbmZvLmJpbmRpbmcubmFtZSxcbiAgICAgICAgICAgICAgc2NvcGU6IGNvbnRleHQuc291cmNlQ29kZS5nZXRTY29wZShub2RlKSxcbiAgICAgICAgICAgICAgdXNhZ2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICdQcm9ncmFtOmV4aXQnKCk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IFt0eXBlTmFtZSwga2V5Tm9kZXNdIG9mIGludGVyZmFjZUtleU5vZGVzKSB7XG4gICAgICAgICAgY29uc3QgdXNhZ2UgPSB1c2FnZUJ5SW50ZXJmYWNlLmdldCh0eXBlTmFtZSk7XG4gICAgICAgICAgaWYgKCF1c2FnZSB8fCB1c2FnZS51c2VzQWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IFttZW1iZXJOYW1lLCBrZXlOb2RlXSBvZiBrZXlOb2Rlcykge1xuICAgICAgICAgICAgaWYgKCF1c2FnZS51c2VkLmhhcyhtZW1iZXJOYW1lKSkge1xuICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZTogdHlwZU5hbWUsXG4gICAgICAgICAgICAgICAgICBtZW1iZXI6IG1lbWJlck5hbWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRCxcbiAgICAgICAgICAgICAgICBub2RlOiBrZXlOb2RlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFRTSW50ZXJmYWNlRGVjbGFyYXRpb24obm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBnZXRJbnRlcmZhY2VOYW1lKG5vZGUpO1xuICAgICAgICBpZiAoIVBBUkFNU19PUFRJT05TX1NVRkZJWF9QQVRURVJOLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaW50ZXJmYWNlS2V5Tm9kZXMuc2V0KG5hbWUsIGdldEludGVyZmFjZU1lbWJlcnMobm9kZSkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBnZXRPckNyZWF0ZVVzYWdlKHR5cGVOYW1lOiBzdHJpbmcpOiBJbnRlcmZhY2VVc2FnZSB7XG4gICAgICBsZXQgdXNhZ2UgPSB1c2FnZUJ5SW50ZXJmYWNlLmdldCh0eXBlTmFtZSk7XG4gICAgICBpZiAoIXVzYWdlKSB7XG4gICAgICAgIHVzYWdlID0geyB1c2VkOiBuZXcgU2V0PHN0cmluZz4oKSwgdXNlc0FsbDogZmFsc2UgfTtcbiAgICAgICAgdXNhZ2VCeUludGVyZmFjZS5zZXQodHlwZU5hbWUsIHVzYWdlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1c2FnZTtcbiAgICB9XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0ZsYWcgYCpQYXJhbXNgL2AqT3B0aW9uc2AgaW50ZXJmYWNlIG1lbWJlcnMgbmV2ZXIgYWNjZXNzZWQgYnkgdGhlIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgdGhlbSdcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbTUVTU0FHRV9JRF06ICdNZW1iZXIgXCJ7eyBtZW1iZXIgfX1cIiBvZiBcInt7IGludGVyZmFjZU5hbWUgfX1cIiBpcyBuZXZlciBhY2Nlc3NlZCBieSB0aGUgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBpdC4gUmVtb3ZlIGl0ICh0aGUgY29tcGlsZXIgd2lsbCBjYXRjaCBpdCBpZiBpdCBpcyBzdGlsbCBuZWVkZWQgZWxzZXdoZXJlKS4nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6ICdzdWdnZXN0aW9uJ1xuICB9XG59O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb2xsZWN0UmVmZXJlbmNlTWVtYmVyc30uXG4gKi9cbmludGVyZmFjZSBDb2xsZWN0UmVmZXJlbmNlTWVtYmVyc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIHdob3NlIHJlZmVyZW5jZXMgYXJlIGluc3BlY3RlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlck5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNjb3BlIGluIHdoaWNoIHRoZSBwYXJhbWV0ZXIgaXMgYm91bmQuXG4gICAqL1xuICByZWFkb25seSBzY29wZTogU2NvcGUuU2NvcGU7XG5cbiAgLyoqXG4gICAqIFRoZSB1c2FnZSBhY2N1bXVsYXRvciB0byByZWNvcmQgYWNjZXNzZWQgbWVtYmVycyBpbnRvLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNhZ2U6IEludGVyZmFjZVVzYWdlO1xufVxuXG5mdW5jdGlvbiBjbGFzc2lmeVJlZmVyZW5jZShyZWZlcmVuY2U6IG9iamVjdCwgdXNhZ2U6IEludGVyZmFjZVVzYWdlKTogdm9pZCB7XG4gIGNvbnN0IHBhcmVudCA9IHJlY29yZChyZWZlcmVuY2UpWydwYXJlbnQnXSBhcyBSdWxlLk5vZGU7XG4gIGlmIChwYXJlbnQudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nICYmIHJlY29yZChwYXJlbnQpWydvYmplY3QnXSA9PT0gcmVmZXJlbmNlKSB7XG4gICAgY29sbGVjdE1lbWJlckFjY2VzcyhwYXJlbnQsIHVzYWdlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocGFyZW50LnR5cGUgPT09ICdWYXJpYWJsZURlY2xhcmF0b3InICYmIHJlY29yZChwYXJlbnQpWydpbml0J10gPT09IHJlZmVyZW5jZSAmJiAocmVjb3JkKHBhcmVudClbJ2lkJ10gYXMgUnVsZS5Ob2RlKS50eXBlID09PSAnT2JqZWN0UGF0dGVybicpIHtcbiAgICBjb2xsZWN0UGF0dGVybk1lbWJlcnMocmVjb3JkKHBhcmVudClbJ2lkJ10gYXMgUnVsZS5Ob2RlLCB1c2FnZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVGhlIG9iamVjdCBlc2NhcGVzIHdob2xlIChwYXNzZWQgYXMgYW4gYXJndW1lbnQsIHJldHVybmVkLCBzdG9yZWQsIHNwcmVhZCwgLi4uKTogZXZlcnkgbWVtYmVyIG1heSBiZSByZWFkIGVsc2V3aGVyZS5cbiAgdXNhZ2UudXNlc0FsbCA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RNZW1iZXJBY2Nlc3Mobm9kZTogUnVsZS5Ob2RlLCB1c2FnZTogSW50ZXJmYWNlVXNhZ2UpOiB2b2lkIHtcbiAgY29uc3QgaXNDb21wdXRlZCA9IHJlY29yZChub2RlKVsnY29tcHV0ZWQnXSA9PT0gdHJ1ZTtcbiAgY29uc3QgcHJvcGVydHkgPSByZWNvcmQobm9kZSlbJ3Byb3BlcnR5J10gYXMgUnVsZS5Ob2RlO1xuICBpZiAocHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgaWYgKCFpc0NvbXB1dGVkKSB7XG4gICAgICB1c2FnZS51c2VkLmFkZChyZWNvcmQocHJvcGVydHkpWyduYW1lJ10gYXMgc3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByb3BlcnR5LnR5cGUgIT09ICdMaXRlcmFsJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlID0gcmVjb3JkKHByb3BlcnR5KVsndmFsdWUnXTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB1c2FnZS51c2VkLmFkZCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdFBhdHRlcm5NZW1iZXJzKHBhdHRlcm46IFJ1bGUuTm9kZSwgdXNhZ2U6IEludGVyZmFjZVVzYWdlKTogdm9pZCB7XG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcmVjb3JkKHBhdHRlcm4pWydwcm9wZXJ0aWVzJ10gYXMgUnVsZS5Ob2RlW10pIHtcbiAgICBpZiAocHJvcGVydHkudHlwZSAhPT0gJ1Byb3BlcnR5Jykge1xuICAgICAgLy8gYGNvbnN0IHsgLi4ucmVzdCB9ID0gcGFyYW1zYCByZWFkcyBldmVyeSByZW1haW5pbmcgbWVtYmVyLlxuICAgICAgdXNhZ2UudXNlc0FsbCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHJlY29yZChwcm9wZXJ0eSlbJ2NvbXB1dGVkJ10gPT09IHRydWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSByZWNvcmQocHJvcGVydHkpWydrZXknXSBhcyBSdWxlLk5vZGU7XG4gICAgaWYgKGtleS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgIHVzYWdlLnVzZWQuYWRkKHJlY29yZChrZXkpWyduYW1lJ10gYXMgc3RyaW5nKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdFJlZmVyZW5jZU1lbWJlcnMocGFyYW1zOiBDb2xsZWN0UmVmZXJlbmNlTWVtYmVyc1BhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IHBhcmFtZXRlck5hbWUsIHNjb3BlLCB1c2FnZSB9ID0gcGFyYW1zO1xuICBjb25zdCB2YXJpYWJsZSA9IGVuc3VyZU5vbk51bGxhYmxlKHNjb3BlLnNldC5nZXQocGFyYW1ldGVyTmFtZSkpO1xuICBmb3IgKGNvbnN0IHJlZmVyZW5jZSBvZiB2YXJpYWJsZS5yZWZlcmVuY2VzKSB7XG4gICAgY2xhc3NpZnlSZWZlcmVuY2UocmVmZXJlbmNlLmlkZW50aWZpZXIsIHVzYWdlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJbnRlcmZhY2VNZW1iZXJzKG5vZGU6IFJ1bGUuTm9kZSk6IE1hcDxzdHJpbmcsIFJ1bGUuTm9kZT4ge1xuICBjb25zdCBtZW1iZXJzID0gbmV3IE1hcDxzdHJpbmcsIFJ1bGUuTm9kZT4oKTtcbiAgY29uc3QgaW50ZXJmYWNlQm9keSA9IHJlY29yZChub2RlKVsnYm9keSddIGFzIFJ1bGUuTm9kZTtcbiAgZm9yIChjb25zdCBzaWduYXR1cmUgb2YgcmVjb3JkKGludGVyZmFjZUJvZHkpWydib2R5J10gYXMgUnVsZS5Ob2RlW10pIHtcbiAgICBpZiAoKG5vZGVUeXBlKHNpZ25hdHVyZSkgIT09ICdUU1Byb3BlcnR5U2lnbmF0dXJlJyAmJiBub2RlVHlwZShzaWduYXR1cmUpICE9PSAnVFNNZXRob2RTaWduYXR1cmUnKSB8fCAocmVjb3JkKHNpZ25hdHVyZSlbJ2NvbXB1dGVkJ10gPT09IHRydWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gcmVjb3JkKHNpZ25hdHVyZSlbJ2tleSddIGFzIFJ1bGUuTm9kZTtcbiAgICBpZiAoa2V5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgbWVtYmVycy5zZXQocmVjb3JkKGtleSlbJ25hbWUnXSBhcyBzdHJpbmcsIGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBtZW1iZXJzO1xufVxuXG5mdW5jdGlvbiBnZXRJbnRlcmZhY2VOYW1lKG5vZGU6IFJ1bGUuTm9kZSk6IHN0cmluZyB7XG4gIGNvbnN0IGlkID0gcmVjb3JkKG5vZGUpWydpZCddIGFzIFJ1bGUuTm9kZTtcbiAgcmV0dXJuIHJlY29yZChpZClbJ25hbWUnXSBhcyBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckluZm8ocGFyYW1ldGVyOiBSdWxlLk5vZGUpOiBQYXJhbWV0ZXJJbmZvIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYWN0dWFsUGFyYW1ldGVyID0gbm9kZVR5cGUocGFyYW1ldGVyKSA9PT0gJ1RTUGFyYW1ldGVyUHJvcGVydHknID8gcmVjb3JkKHBhcmFtZXRlcilbJ3BhcmFtZXRlciddIGFzIFJ1bGUuTm9kZSA6IHBhcmFtZXRlcjtcblxuICBjb25zdCB0eXBlTmFtZSA9IGdldFR5cGVSZWZlcmVuY2VOYW1lKGFjdHVhbFBhcmFtZXRlcik7XG4gIGlmICghdHlwZU5hbWUgfHwgIVBBUkFNU19PUFRJT05TX1NVRkZJWF9QQVRURVJOLnRlc3QodHlwZU5hbWUpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChhY3R1YWxQYXJhbWV0ZXIudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgcmV0dXJuIHsgYmluZGluZzogeyBuYW1lOiByZWNvcmQoYWN0dWFsUGFyYW1ldGVyKVsnbmFtZSddIGFzIHN0cmluZywgdHlwZTogJ2lkZW50aWZpZXInIH0sIHR5cGVOYW1lIH07XG4gIH1cblxuICByZXR1cm4gYWN0dWFsUGFyYW1ldGVyLnR5cGUgPT09ICdPYmplY3RQYXR0ZXJuJyA/IHsgYmluZGluZzogeyBwYXR0ZXJuOiBhY3R1YWxQYXJhbWV0ZXIsIHR5cGU6ICdwYXR0ZXJuJyB9LCB0eXBlTmFtZSB9IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRUeXBlUmVmZXJlbmNlTmFtZShwYXJhbWV0ZXI6IFJ1bGUuTm9kZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGFubm90YXRpb24gPSByZWNvcmQocGFyYW1ldGVyKVsndHlwZUFubm90YXRpb24nXTtcbiAgaWYgKCFpc05vZGUoYW5ub3RhdGlvbikpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdHlwZU5vZGUgPSByZWNvcmQoYW5ub3RhdGlvbilbJ3R5cGVBbm5vdGF0aW9uJ10gYXMgUnVsZS5Ob2RlO1xuICBpZiAobm9kZVR5cGUodHlwZU5vZGUpICE9PSAnVFNUeXBlUmVmZXJlbmNlJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCB0eXBlTmFtZSA9IHJlY29yZCh0eXBlTm9kZSlbJ3R5cGVOYW1lJ10gYXMgUnVsZS5Ob2RlO1xuICByZXR1cm4gdHlwZU5hbWUudHlwZSA9PT0gJ0lkZW50aWZpZXInID8gKHJlY29yZCh0eXBlTmFtZSlbJ25hbWUnXSBhcyBzdHJpbmcpIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc05vZGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSdWxlLk5vZGUge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgKHZhbHVlIGFzIE1heWJlVHlwZWROb2RlKS50eXBlID09PSAnc3RyaW5nJztcbn1cblxuZnVuY3Rpb24gbm9kZVR5cGUobm9kZTogUnVsZS5Ob2RlKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlY29yZChub2RlKVsndHlwZSddIGFzIHN0cmluZztcbn1cblxuZnVuY3Rpb24gcmVjb3JkKG5vZGU6IG9iamVjdCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIG5vZGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBcUNBLHlCQUFrQztBQUVsQyxNQUFNLGdDQUFnQztBQUsvQixNQUFNLGFBQWE7QUFnQ25CLE1BQU0sd0JBQXlDO0FBQUEsRUFDcEQsT0FBTyxTQUFTO0FBQ2QsVUFBTSxvQkFBb0Isb0JBQUksSUFBb0M7QUFDbEUsVUFBTSxtQkFBbUIsb0JBQUksSUFBNEI7QUFFekQsV0FBTztBQUFBLE1BQ0wsWUFBWSxNQUF1QjtBQUNqQyxtQkFBVyxhQUFhLE9BQU8sSUFBSSxFQUFFLFFBQVEsR0FBa0I7QUFDN0QsZ0JBQU0sT0FBTyxpQkFBaUIsU0FBUztBQUN2QyxjQUFJLENBQUMsTUFBTTtBQUNUO0FBQUEsVUFDRjtBQUVBLGdCQUFNLFFBQVEsaUJBQWlCLEtBQUssUUFBUTtBQUM1QyxjQUFJLEtBQUssUUFBUSxTQUFTLFdBQVc7QUFDbkMsa0NBQXNCLEtBQUssUUFBUSxTQUFTLEtBQUs7QUFBQSxVQUNuRCxPQUFPO0FBQ0wsb0NBQXdCO0FBQUEsY0FDdEIsZUFBZSxLQUFLLFFBQVE7QUFBQSxjQUM1QixPQUFPLFFBQVEsV0FBVyxTQUFTLElBQUk7QUFBQSxjQUN2QztBQUFBLFlBQ0YsQ0FBQztBQUFBLFVBQ0g7QUFB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
@@ -109,4 +109,4 @@ const noUsedUnderscoreVariables = {
109
109
  MESSAGE_ID,
110
110
  noUsedUnderscoreVariables
111
111
  });
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9uby11c2VkLXVuZGVyc2NvcmUtdmFyaWFibGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlc1xuICpcbiAqIFJlcG9ydHMgYW4gZXJyb3Igd2hlbiBhIHBhcmFtZXRlciBvciBsb2NhbCB2YXJpYWJsZSB3aXRoIGEgYF9gIHByZWZpeCBpc1xuICogYWN0dWFsbHkgcmVmZXJlbmNlZCBpbiB0aGUgZnVuY3Rpb24gYm9keS4gVGhlIGBfYCBwcmVmaXggY29udmVudGlvbiBzaWduYWxzXG4gKiBcInRoaXMgaWRlbnRpZmllciBpcyBpbnRlbnRpb25hbGx5IHVudXNlZFwiIOKAlCBpZiBpdCBJUyB1c2VkLCB0aGUgcHJlZml4IGlzXG4gKiBtaXNsZWFkaW5nIGFuZCBzaG91bGQgYmUgcmVtb3ZlZC5cbiAqL1xuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuXG5pbnRlcmZhY2UgTm9kZVdpdGhCb2R5IHtcbiAgYm9keT86IFJ1bGUuTm9kZTtcbn1cblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gYSB2YXJpYWJsZSBjYXJyaWVzIGEgYF9gIHByZWZpeCAoc2lnbmFsbGluZyB1bnVzZWQpIGJ1dCBpcyBhY3R1YWxseSB1c2VkLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRCA9ICdub1VzZWRVbmRlcnNjb3JlVmFyaWFibGVzJztcblxuLyoqXG4gKiBFU0xpbnQgcnVsZSBkaXNhbGxvd2luZyBgX2AtcHJlZml4ZWQgcGFyYW1ldGVycyBhbmQgbG9jYWwgdmFyaWFibGVzIHRoYXQgYXJlIGFjdHVhbGx5IHVzZWQsIHNpbmNlIHRoZSBwcmVmaXggYWR2ZXJ0aXNlcyB0aGVtIGFzIHVudXNlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vVXNlZFVuZGVyc2NvcmVWYXJpYWJsZXM6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJzpmdW5jdGlvbicobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gY29udGV4dC5zb3VyY2VDb2RlLmdldFNjb3BlKG5vZGUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFyaWFibGUgb2Ygc2NvcGUudmFyaWFibGVzKSB7XG4gICAgICAgICAgaWYgKCF2YXJpYWJsZS5uYW1lLnN0YXJ0c1dpdGgoJ18nKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGVmaW5pdGlvbk5vZGUgPSB2YXJpYWJsZS5kZWZzWzBdO1xuICAgICAgICAgIGFzc2VydE5vbk51bGxhYmxlKGRlZmluaXRpb25Ob2RlLCAnVXNlci1kZWNsYXJlZCBfLXByZWZpeGVkIHZhcmlhYmxlcyBhbHdheXMgaGF2ZSBhdCBsZWFzdCBvbmUgZGVmaW5pdGlvbicpO1xuXG4gICAgICAgICAgLy8gRm9yIHBhcmFtZXRlcnMsIG9ubHkgY291bnQgcmVmZXJlbmNlcyBpbnNpZGUgdGhlIGZ1bmN0aW9uIGJvZHlcbiAgICAgICAgICAvLyAobm90IGluIHR5cGUgYW5ub3RhdGlvbnMgbGlrZSBgYXNzZXJ0cyBfb2JqIGlzIFRgKS5cbiAgICAgICAgICAvLyBGb3IgbG9jYWwgdmFyaWFibGVzLCBhbnkgcmVhZCByZWZlcmVuY2UgY291bnRzLlxuICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uQm9keSA9IChub2RlIGFzIE5vZGVXaXRoQm9keSkuYm9keTtcbiAgICAgICAgICBjb25zdCBib2R5UmFuZ2UgPSBmdW5jdGlvbkJvZHk/LnJhbmdlO1xuICAgICAgICAgIGNvbnN0IGlzUGFyYW1ldGVyID0gZGVmaW5pdGlvbk5vZGUudHlwZSA9PT0gJ1BhcmFtZXRlcic7XG4gICAgICAgICAgY29uc3QgaGFzQm9keVJlZmVyZW5jZXMgPSB2YXJpYWJsZS5yZWZlcmVuY2VzLnNvbWUoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZWZlcmVuY2UuaXNSZWFkKCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTG9jYWwgdmFyaWFibGVzIG9yIGZhbGxiYWNrOiBjb3VudCBhbGwgcmVhZHNcbiAgICAgICAgICAgIHJldHVybiAhaXNQYXJhbWV0ZXIgfHwgIWJvZHlSYW5nZSB8fCAhcmVmZXJlbmNlLmlkZW50aWZpZXIucmFuZ2VcbiAgICAgICAgICAgICAgfHwgKHJlZmVyZW5jZS5pZGVudGlmaWVyLnJhbmdlWzBdID49IGJvZHlSYW5nZVswXSAmJiByZWZlcmVuY2UuaWRlbnRpZmllci5yYW5nZVsxXSA8PSBib2R5UmFuZ2VbMV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChoYXNCb2R5UmVmZXJlbmNlcykge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICBkYXRhOiB7IG5hbWU6IHZhcmlhYmxlLm5hbWUgfSxcbiAgICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgICAgICBub2RlOiBkZWZpbml0aW9uTm9kZS5uYW1lXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdEaXNhbGxvdyBgX2AtcHJlZml4ZWQgcGFyYW1ldGVycyBhbmQgbG9jYWwgdmFyaWFibGVzIHRoYXQgYXJlIGFjdHVhbGx5IHVzZWQnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnXCJ7eyBuYW1lIH19XCIgaGFzIGEgYF9gIHByZWZpeCBidXQgaXMgdXNlZC4gUmVtb3ZlIHRoZSBgX2AgcHJlZml4IHNpbmNlIGl0IGlzIG5vdCB1bnVzZWQuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAncHJvYmxlbSdcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZQSx5QkFBa0M7QUFTM0IsTUFBTSxhQUFhO0FBS25CLE1BQU0sNEJBQTZDO0FBQUEsRUFDeEQsT0FBTyxTQUFTO0FBQ2QsV0FBTztBQUFBLE1BQ0wsWUFBWSxNQUF1QjtBQUNqQyxjQUFNLFFBQVEsUUFBUSxXQUFXLFNBQVMsSUFBSTtBQUU5QyxtQkFBVyxZQUFZLE1BQU0sV0FBVztBQUN0QyxjQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsR0FBRyxHQUFHO0FBQ2xDO0FBQUEsVUFDRjtBQUVBLGdCQUFNLGlCQUFpQixTQUFTLEtBQUssQ0FBQztBQUN0QyxvREFBa0IsZ0JBQWdCLHdFQUF3RTtBQUsxRyxnQkFBTSxlQUFnQixLQUFzQjtBQUM1QyxnQkFBTSxZQUFZLGNBQWM7QUFDaEMsZ0JBQU0sY0FBYyxlQUFlLFNBQVM7QUFDNUMsZ0JBQU0sb0JBQW9CLFNBQVMsV0FBVyxLQUFLLENBQUMsY0FBYztBQUNoRSxnQkFBSSxDQUFDLFVBQVUsT0FBTyxHQUFHO0FBQ3ZCLHFCQUFPO0FBQUEsWUFDVDtBQUVBLG1CQUFPLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxVQUFVLFdBQVcsU0FDckQsVUFBVSxXQUFXLE1BQU0sQ0FBQyxLQUFLLFVBQVUsQ0FBQyxLQUFLLFVBQVUsV0FBVyxNQUFNLENBQUMsS0FBSyxVQUFVLENBQUM7QUFBQSxVQUNyRyxDQUFDO0FBQ0QsY0FBSSxtQkFBbUI7QUFDckIsb0JBQVEsT0FBTztBQUFBLGNBQ2IsTUFBTSxFQUFFLE1BQU0sU0FBUyxLQUFLO0FBQUEsY0FDNUIsV0FBVztBQUFBLGNBQ1gsTUFBTSxlQUFlO0FBQUEsWUFDdkIsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsQ0FBQyxVQUFVLEdBQUc7QUFBQSxJQUNoQjtBQUFBLElBQ0EsUUFBUSxDQUFDO0FBQUEsSUFDVCxNQUFNO0FBQUEsRUFDUjtBQUNGOyIsIm5hbWVzIjpbXX0=
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9uby11c2VkLXVuZGVyc2NvcmUtdmFyaWFibGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlc1xuICpcbiAqIFJlcG9ydHMgYW4gZXJyb3Igd2hlbiBhIHBhcmFtZXRlciBvciBsb2NhbCB2YXJpYWJsZSB3aXRoIGEgYF9gIHByZWZpeCBpc1xuICogYWN0dWFsbHkgcmVmZXJlbmNlZCBpbiB0aGUgZnVuY3Rpb24gYm9keS4gVGhlIGBfYCBwcmVmaXggY29udmVudGlvbiBzaWduYWxzXG4gKiBcInRoaXMgaWRlbnRpZmllciBpcyBpbnRlbnRpb25hbGx5IHVudXNlZFwiIOKAlCBpZiBpdCBJUyB1c2VkLCB0aGUgcHJlZml4IGlzXG4gKiBtaXNsZWFkaW5nIGFuZCBzaG91bGQgYmUgcmVtb3ZlZC5cbiAqL1xuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuXG5pbnRlcmZhY2UgTm9kZVdpdGhCb2R5IHtcbiAgcmVhZG9ubHkgYm9keT86IFJ1bGUuTm9kZTtcbn1cblxuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gYSB2YXJpYWJsZSBjYXJyaWVzIGEgYF9gIHByZWZpeCAoc2lnbmFsbGluZyB1bnVzZWQpIGJ1dCBpcyBhY3R1YWxseSB1c2VkLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRCA9ICdub1VzZWRVbmRlcnNjb3JlVmFyaWFibGVzJztcblxuLyoqXG4gKiBFU0xpbnQgcnVsZSBkaXNhbGxvd2luZyBgX2AtcHJlZml4ZWQgcGFyYW1ldGVycyBhbmQgbG9jYWwgdmFyaWFibGVzIHRoYXQgYXJlIGFjdHVhbGx5IHVzZWQsIHNpbmNlIHRoZSBwcmVmaXggYWR2ZXJ0aXNlcyB0aGVtIGFzIHVudXNlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vVXNlZFVuZGVyc2NvcmVWYXJpYWJsZXM6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJzpmdW5jdGlvbicobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gY29udGV4dC5zb3VyY2VDb2RlLmdldFNjb3BlKG5vZGUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFyaWFibGUgb2Ygc2NvcGUudmFyaWFibGVzKSB7XG4gICAgICAgICAgaWYgKCF2YXJpYWJsZS5uYW1lLnN0YXJ0c1dpdGgoJ18nKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGVmaW5pdGlvbk5vZGUgPSB2YXJpYWJsZS5kZWZzWzBdO1xuICAgICAgICAgIGFzc2VydE5vbk51bGxhYmxlKGRlZmluaXRpb25Ob2RlLCAnVXNlci1kZWNsYXJlZCBfLXByZWZpeGVkIHZhcmlhYmxlcyBhbHdheXMgaGF2ZSBhdCBsZWFzdCBvbmUgZGVmaW5pdGlvbicpO1xuXG4gICAgICAgICAgLy8gRm9yIHBhcmFtZXRlcnMsIG9ubHkgY291bnQgcmVmZXJlbmNlcyBpbnNpZGUgdGhlIGZ1bmN0aW9uIGJvZHlcbiAgICAgICAgICAvLyAobm90IGluIHR5cGUgYW5ub3RhdGlvbnMgbGlrZSBgYXNzZXJ0cyBfb2JqIGlzIFRgKS5cbiAgICAgICAgICAvLyBGb3IgbG9jYWwgdmFyaWFibGVzLCBhbnkgcmVhZCByZWZlcmVuY2UgY291bnRzLlxuICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uQm9keSA9IChub2RlIGFzIE5vZGVXaXRoQm9keSkuYm9keTtcbiAgICAgICAgICBjb25zdCBib2R5UmFuZ2UgPSBmdW5jdGlvbkJvZHk/LnJhbmdlO1xuICAgICAgICAgIGNvbnN0IGlzUGFyYW1ldGVyID0gZGVmaW5pdGlvbk5vZGUudHlwZSA9PT0gJ1BhcmFtZXRlcic7XG4gICAgICAgICAgY29uc3QgaGFzQm9keVJlZmVyZW5jZXMgPSB2YXJpYWJsZS5yZWZlcmVuY2VzLnNvbWUoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZWZlcmVuY2UuaXNSZWFkKCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTG9jYWwgdmFyaWFibGVzIG9yIGZhbGxiYWNrOiBjb3VudCBhbGwgcmVhZHNcbiAgICAgICAgICAgIHJldHVybiAhaXNQYXJhbWV0ZXIgfHwgIWJvZHlSYW5nZSB8fCAhcmVmZXJlbmNlLmlkZW50aWZpZXIucmFuZ2VcbiAgICAgICAgICAgICAgfHwgKHJlZmVyZW5jZS5pZGVudGlmaWVyLnJhbmdlWzBdID49IGJvZHlSYW5nZVswXSAmJiByZWZlcmVuY2UuaWRlbnRpZmllci5yYW5nZVsxXSA8PSBib2R5UmFuZ2VbMV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChoYXNCb2R5UmVmZXJlbmNlcykge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICBkYXRhOiB7IG5hbWU6IHZhcmlhYmxlLm5hbWUgfSxcbiAgICAgICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgICAgICBub2RlOiBkZWZpbml0aW9uTm9kZS5uYW1lXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdEaXNhbGxvdyBgX2AtcHJlZml4ZWQgcGFyYW1ldGVycyBhbmQgbG9jYWwgdmFyaWFibGVzIHRoYXQgYXJlIGFjdHVhbGx5IHVzZWQnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnXCJ7eyBuYW1lIH19XCIgaGFzIGEgYF9gIHByZWZpeCBidXQgaXMgdXNlZC4gUmVtb3ZlIHRoZSBgX2AgcHJlZml4IHNpbmNlIGl0IGlzIG5vdCB1bnVzZWQuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAncHJvYmxlbSdcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZQSx5QkFBa0M7QUFTM0IsTUFBTSxhQUFhO0FBS25CLE1BQU0sNEJBQTZDO0FBQUEsRUFDeEQsT0FBTyxTQUFTO0FBQ2QsV0FBTztBQUFBLE1BQ0wsWUFBWSxNQUF1QjtBQUNqQyxjQUFNLFFBQVEsUUFBUSxXQUFXLFNBQVMsSUFBSTtBQUU5QyxtQkFBVyxZQUFZLE1BQU0sV0FBVztBQUN0QyxjQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsR0FBRyxHQUFHO0FBQ2xDO0FBQUEsVUFDRjtBQUVBLGdCQUFNLGlCQUFpQixTQUFTLEtBQUssQ0FBQztBQUN0QyxvREFBa0IsZ0JBQWdCLHdFQUF3RTtBQUsxRyxnQkFBTSxlQUFnQixLQUFzQjtBQUM1QyxnQkFBTSxZQUFZLGNBQWM7QUFDaEMsZ0JBQU0sY0FBYyxlQUFlLFNBQVM7QUFDNUMsZ0JBQU0sb0JBQW9CLFNBQVMsV0FBVyxLQUFLLENBQUMsY0FBYztBQUNoRSxnQkFBSSxDQUFDLFVBQVUsT0FBTyxHQUFHO0FBQ3ZCLHFCQUFPO0FBQUEsWUFDVDtBQUVBLG1CQUFPLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxVQUFVLFdBQVcsU0FDckQsVUFBVSxXQUFXLE1BQU0sQ0FBQyxLQUFLLFVBQVUsQ0FBQyxLQUFLLFVBQVUsV0FBVyxNQUFNLENBQUMsS0FBSyxVQUFVLENBQUM7QUFBQSxVQUNyRyxDQUFDO0FBQ0QsY0FBSSxtQkFBbUI7QUFDckIsb0JBQVEsT0FBTztBQUFBLGNBQ2IsTUFBTSxFQUFFLE1BQU0sU0FBUyxLQUFLO0FBQUEsY0FDNUIsV0FBVztBQUFBLGNBQ1gsTUFBTSxlQUFlO0FBQUEsWUFDdkIsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsQ0FBQyxVQUFVLEdBQUc7QUFBQSxJQUNoQjtBQUFBLElBQ0EsUUFBUSxDQUFDO0FBQUEsSUFDVCxNQUFNO0FBQUEsRUFDUjtBQUNGOyIsIm5hbWVzIjpbXX0=
@@ -0,0 +1,68 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ "use strict";
7
+ var __defProp = Object.defineProperty;
8
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
+ var __getOwnPropNames = Object.getOwnPropertyNames;
10
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __export = (target, all) => {
12
+ for (var name in all)
13
+ __defProp(target, name, { get: all[name], enumerable: true });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from))
18
+ if (!__hasOwnProp.call(to, key) && key !== except)
19
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
20
+ }
21
+ return to;
22
+ };
23
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
+ var readonly_interface_members_exports = {};
25
+ __export(readonly_interface_members_exports, {
26
+ MESSAGE_ID: () => MESSAGE_ID,
27
+ readonlyInterfaceMembers: () => readonlyInterfaceMembers
28
+ });
29
+ module.exports = __toCommonJS(readonly_interface_members_exports);
30
+ const MESSAGE_ID = "readonlyInterfaceMembers";
31
+ const readonlyInterfaceMembers = {
32
+ create(context) {
33
+ return {
34
+ "TSInterfaceDeclaration TSPropertySignature[readonly=false]"(node) {
35
+ reportNonReadonly(context, node);
36
+ },
37
+ "TSTypeAliasDeclaration TSPropertySignature[readonly=false]"(node) {
38
+ reportNonReadonly(context, node);
39
+ }
40
+ };
41
+ },
42
+ meta: {
43
+ docs: {
44
+ description: "Require readonly properties in all interfaces and object type aliases"
45
+ },
46
+ fixable: "code",
47
+ messages: {
48
+ [MESSAGE_ID]: "Property must be `readonly`. Disable this rule with a reason for mutable state."
49
+ },
50
+ schema: [],
51
+ type: "suggestion"
52
+ }
53
+ };
54
+ function reportNonReadonly($context, node) {
55
+ $context.report({
56
+ fix(fixer) {
57
+ return fixer.insertTextBefore(node, "readonly ");
58
+ },
59
+ messageId: MESSAGE_ID,
60
+ node
61
+ });
62
+ }
63
+ // Annotate the CommonJS export names for ESM import in node:
64
+ 0 && (module.exports = {
65
+ MESSAGE_ID,
66
+ readonlyInterfaceMembers
67
+ });
68
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHJ1bGU6IHJlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzXG4gKlxuICogUmVxdWlyZXMgcmVhZG9ubHkgcHJvcGVydHkgc2lnbmF0dXJlcyBpbiBpbnRlcmZhY2VzIGFuZCBvYmplY3QgdHlwZSBhbGlhc2VzLFxuICogaW5jbHVkaW5nIG5lc3RlZCBvYmplY3QgdHlwZXMuIE11dGFibGUgc3RhdGUgcmVxdWlyZXMgYW4gZXhwbGljaXQgZXhjZXB0aW9uLlxuICovXG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tICdlc2xpbnQnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIHByb3BlcnR5IHNpZ25hdHVyZSBpcyBub3QgZGVjbGFyZWQgYHJlYWRvbmx5YC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSUQgPSAncmVhZG9ubHlJbnRlcmZhY2VNZW1iZXJzJztcblxuLyoqXG4gKiBFU0xpbnQgcnVsZSByZXF1aXJpbmcgZXZlcnkgcHJvcGVydHkgb2YgYW4gaW50ZXJmYWNlIG9yIG9iamVjdCB0eXBlIGFsaWFzIHRvIGJlIGByZWFkb25seWAuXG4gKi9cbmV4cG9ydCBjb25zdCByZWFkb25seUludGVyZmFjZU1lbWJlcnM6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ1RTSW50ZXJmYWNlRGVjbGFyYXRpb24gVFNQcm9wZXJ0eVNpZ25hdHVyZVtyZWFkb25seT1mYWxzZV0nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICByZXBvcnROb25SZWFkb25seShjb250ZXh0LCBub2RlKTtcbiAgICAgIH0sXG4gICAgICAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbiBUU1Byb3BlcnR5U2lnbmF0dXJlW3JlYWRvbmx5PWZhbHNlXScobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIHJlcG9ydE5vblJlYWRvbmx5KGNvbnRleHQsIG5vZGUpO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1JlcXVpcmUgcmVhZG9ubHkgcHJvcGVydGllcyBpbiBhbGwgaW50ZXJmYWNlcyBhbmQgb2JqZWN0IHR5cGUgYWxpYXNlcydcbiAgICB9LFxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnUHJvcGVydHkgbXVzdCBiZSBgcmVhZG9ubHlgLiBEaXNhYmxlIHRoaXMgcnVsZSB3aXRoIGEgcmVhc29uIGZvciBtdXRhYmxlIHN0YXRlLidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nXG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlcG9ydE5vblJlYWRvbmx5KCRjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LCBub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgJGNvbnRleHQucmVwb3J0KHtcbiAgICBmaXgoZml4ZXIpIHtcbiAgICAgIHJldHVybiBmaXhlci5pbnNlcnRUZXh0QmVmb3JlKG5vZGUsICdyZWFkb25seSAnKTtcbiAgICB9LFxuICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRCxcbiAgICBub2RlXG4gIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFhTyxNQUFNLGFBQWE7QUFLbkIsTUFBTSwyQkFBNEM7QUFBQSxFQUN2RCxPQUFPLFNBQVM7QUFDZCxXQUFPO0FBQUEsTUFDTCw2REFBNkQsTUFBdUI7QUFDbEYsMEJBQWtCLFNBQVMsSUFBSTtBQUFBLE1BQ2pDO0FBQUEsTUFDQSw2REFBNkQsTUFBdUI7QUFDbEYsMEJBQWtCLFNBQVMsSUFBSTtBQUFBLE1BQ2pDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxNQUNKLGFBQWE7QUFBQSxJQUNmO0FBQUEsSUFDQSxTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsTUFDUixDQUFDLFVBQVUsR0FBRztBQUFBLElBQ2hCO0FBQUEsSUFDQSxRQUFRLENBQUM7QUFBQSxJQUNULE1BQU07QUFBQSxFQUNSO0FBQ0Y7QUFFQSxTQUFTLGtCQUFrQixVQUE0QixNQUF1QjtBQUM1RSxXQUFTLE9BQU87QUFBQSxJQUNkLElBQUksT0FBTztBQUNULGFBQU8sTUFBTSxpQkFBaUIsTUFBTSxXQUFXO0FBQUEsSUFDakQ7QUFBQSxJQUNBLFdBQVc7QUFBQSxJQUNYO0FBQUEsRUFDRixDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,18 @@
1
+ /// <reference path="../../library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * ESLint rule: readonly-interface-members
6
+ *
7
+ * Requires readonly property signatures in interfaces and object type aliases,
8
+ * including nested object types. Mutable state requires an explicit exception.
9
+ */
10
+ import type { Rule } from 'eslint' with { 'resolution-mode': 'import' };
11
+ /**
12
+ Message ID reported when a property signature is not declared `readonly`.
13
+ */
14
+ export declare const MESSAGE_ID = "readonlyInterfaceMembers";
15
+ /**
16
+ * ESLint rule requiring every property of an interface or object type alias to be `readonly`.
17
+ */
18
+ export declare const readonlyInterfaceMembers: Rule.RuleModule;
@@ -156,4 +156,4 @@ function parseTypeParameterTags(params) {
156
156
  MESSAGE_ID_MISSING_TEMPLATE_DESCRIPTION,
157
157
  requireMethodTemplate
158
158
  });
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9yZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHJ1bGU6IHJlcXVpcmUtbWV0aG9kLXRlbXBsYXRlXG4gKlxuICogUmVxdWlyZXMgdGhhdCBnZW5lcmljIG1ldGhvZHMgKG1ldGhvZHMgd2l0aCB0eXBlIHBhcmFtZXRlcnMpIGhhdmVcbiAqIGNvcnJlc3BvbmRpbmcgYEB0eXBlUGFyYW1gIChvciBgQHRlbXBsYXRlYCkgSlNEb2MgdGFncyBmb3IgZWFjaCB0eXBlIHBhcmFtZXRlci5cbiAqXG4gKiBUaGlzIGZpbGxzIGEgZ2FwIGluIGBlc2xpbnQtcGx1Z2luLWpzZG9jYCdzIGByZXF1aXJlLXRlbXBsYXRlYCBydWxlLCB3aGljaFxuICogb25seSBjaGVja3MgdG9wLWxldmVsIGRlY2xhcmF0aW9ucyAoZnVuY3Rpb25zLCBjbGFzc2VzLCBpbnRlcmZhY2VzLCB0eXBlIGFsaWFzZXMpXG4gKiBidXQgbm90IG1ldGhvZHMgd2l0aGluIGNsYXNzZXMuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2dhanVzL2VzbGludC1wbHVnaW4tanNkb2MvaXNzdWVzLzEzODZ9XG4gKi9cbmltcG9ydCB0eXBlIHsgVFNFU1RyZWUgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcbmltcG9ydCB0eXBlIHsgQ29tbWVudCB9IGZyb20gJ2VzdHJlZSc7XG5cbmltcG9ydCB7IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5cbmltcG9ydCB7IHRvVFNFU1RyZWVOb2RlIH0gZnJvbSAnLi90cy1lc3RyZWUtbm9kZS50cyc7XG5cbmludGVyZmFjZSBKc2RvY1NldHRpbmdzIHtcbiAgdGFnTmFtZVByZWZlcmVuY2U/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG5jb25zdCBUQUdfTkFNRSA9ICd0eXBlUGFyYW0nO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIG1ldGhvZCB0eXBlIHBhcmFtZXRlciBoYXMgbm8gbWF0Y2hpbmcgYEB0eXBlUGFyYW1gIHRhZy5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfTUlTU0lOR19URU1QTEFURSA9ICdtaXNzaW5nVGVtcGxhdGUnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIG1ldGhvZCdzIGBAdHlwZVBhcmFtYCB0YWcgaXMgbWlzc2luZyBhIGRlc2NyaXB0aW9uLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9NSVNTSU5HX1RFTVBMQVRFX0RFU0NSSVBUSU9OID0gJ21pc3NpbmdUZW1wbGF0ZURlc2NyaXB0aW9uJztcblxuLyoqXG4gKiBFU0xpbnQgcnVsZSByZXF1aXJpbmcgZXZlcnkgZ2VuZXJpYyBtZXRob2QgdHlwZSBwYXJhbWV0ZXIgdG8gY2FycnkgYSBgQHR5cGVQYXJhbWAgdGFnIHdpdGggYSBkZXNjcmlwdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlcXVpcmVNZXRob2RUZW1wbGF0ZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHNldHRpbmdzID0gY29udGV4dC5zZXR0aW5nc1snanNkb2MnXSBhcyBKc2RvY1NldHRpbmdzIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByZWZlcnJlZFRhZ05hbWUgPSBzZXR0aW5ncz8udGFnTmFtZVByZWZlcmVuY2U/LlsndGVtcGxhdGUnXSA/PyBUQUdfTkFNRTtcblxuICAgIHJldHVybiB7XG4gICAgICAnTWV0aG9kRGVmaW5pdGlvbicobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1ldGhvZE5vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5NZXRob2REZWZpbml0aW9uO1xuICAgICAgICBjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSBtZXRob2ROb2RlLnZhbHVlO1xuXG4gICAgICAgIGNvbnN0IHR5cGVQYXJhbXMgPSBmdW5jdGlvbkV4cHJlc3Npb24udHlwZVBhcmFtZXRlcnM/LnBhcmFtcztcbiAgICAgICAgaWYgKCF0eXBlUGFyYW1zIHx8IHR5cGVQYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuc291cmNlQ29kZTtcbiAgICAgICAgY29uc3QgY29tbWVudHMgPSBzb3VyY2VDb2RlLmdldENvbW1lbnRzQmVmb3JlKG5vZGUpO1xuICAgICAgICBjb25zdCBqc2RvY0NvbW1lbnQgPSBmaW5kSnNkb2NDb21tZW50KGNvbW1lbnRzKTtcblxuICAgICAgICBpZiAoIWpzZG9jQ29tbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnNlZFRhZ3MgPSBwYXJzZVR5cGVQYXJhbWV0ZXJUYWdzKHtcbiAgICAgICAgICBjb21tZW50Qm9keToganNkb2NDb21tZW50LnZhbHVlLFxuICAgICAgICAgIHRhZ05hbWU6IHByZWZlcnJlZFRhZ05hbWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCB0eXBlUGFyYW1ldGVyIG9mIHR5cGVQYXJhbXMpIHtcbiAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gdHlwZVBhcmFtZXRlci5uYW1lLm5hbWU7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdUYWcgPSBwYXJzZWRUYWdzLmZpbmQoKHRhZykgPT4gdGFnLm5hbWUgPT09IHBhcmFtZXRlck5hbWUpO1xuXG4gICAgICAgICAgaWYgKCFtYXRjaGluZ1RhZykge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHBhcmFtTmFtZWAgaXMgdGhlIHBsYWNlaG9sZGVyIHRoaXMgcnVsZSdzIG93biBtZXNzYWdlIHRlbXBsYXRlIHJlYWRzLlxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgICAgICAgICAgICB0YWdOYW1lOiBwcmVmZXJyZWRUYWdOYW1lXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9NSVNTSU5HX1RFTVBMQVRFLFxuICAgICAgICAgICAgICBub2RlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFtYXRjaGluZ1RhZy5oYXNEZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHBhcmFtTmFtZWAgaXMgdGhlIHBsYWNlaG9sZGVyIHRoaXMgcnVsZSdzIG93biBtZXNzYWdlIHRlbXBsYXRlIHJlYWRzLlxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgICAgICAgICAgICB0YWdOYW1lOiBwcmVmZXJyZWRUYWdOYW1lXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9NSVNTSU5HX1RFTVBMQVRFX0RFU0NSSVBUSU9OLFxuICAgICAgICAgICAgICBub2RlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdSZXF1aXJlIGBAdHlwZVBhcmFtYCB0YWdzIHdpdGggZGVzY3JpcHRpb25zIGZvciBnZW5lcmljIG1ldGhvZCB0eXBlIHBhcmFtZXRlcnMnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURfTUlTU0lOR19URU1QTEFURV06ICdNaXNzaW5nIEB7eyB0YWdOYW1lIH19IHt7IHBhcmFtTmFtZSB9fScsXG4gICAgICBbTUVTU0FHRV9JRF9NSVNTSU5HX1RFTVBMQVRFX0RFU0NSSVBUSU9OXTogJ0B7eyB0YWdOYW1lIH19IHt7IHBhcmFtTmFtZSB9fSBpcyBtaXNzaW5nIGEgZGVzY3JpcHRpb24nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6ICdzdWdnZXN0aW9uJ1xuICB9XG59O1xuXG5pbnRlcmZhY2UgUGFyc2VkVGFnIHtcbiAgaGFzRGVzY3JpcHRpb246IGJvb2xlYW47XG4gIG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcGFyc2VUeXBlUGFyYW1ldGVyVGFnc30uXG4gKi9cbmludGVyZmFjZSBQYXJzZVR5cGVQYXJhbWV0ZXJUYWdzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSByYXcgY29tbWVudCBib2R5ICh3aXRob3V0IHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBjb21tZW50IGRlbGltaXRlcnMpLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWVudEJvZHk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByZWZlcnJlZCB0YWcgbmFtZSAoYHR5cGVQYXJhbWAgb3IgYHRlbXBsYXRlYCkuXG4gICAqL1xuICByZWFkb25seSB0YWdOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIEpTRG9jIGJsb2NrIGNvbW1lbnQgZnJvbSBhIGxpc3Qgb2YgY29tbWVudHMuXG4gKlxuICogQHBhcmFtIGNvbW1lbnRzIC0gVGhlIGNvbW1lbnRzIGJlZm9yZSB0aGUgbm9kZS5cbiAqIEByZXR1cm5zIFRoZSBKU0RvYyBibG9jayBjb21tZW50LCBvciBgdW5kZWZpbmVkYCBpZiBub25lIGZvdW5kLlxuICovXG5mdW5jdGlvbiBmaW5kSnNkb2NDb21tZW50KGNvbW1lbnRzOiByZWFkb25seSBDb21tZW50W10pOiBDb21tZW50IHwgdW5kZWZpbmVkIHtcbiAgZm9yIChsZXQgaW5kZXggPSBjb21tZW50cy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgY29tbWVudCA9IGNvbW1lbnRzW2luZGV4XTtcbiAgICBpZiAoY29tbWVudD8udHlwZSA9PT0gJ0Jsb2NrJyAmJiBjb21tZW50LnZhbHVlLnN0YXJ0c1dpdGgoJyonKSkge1xuICAgICAgcmV0dXJuIGNvbW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYEB0eXBlUGFyYW1gIC8gYEB0ZW1wbGF0ZWAgdGFncyBmcm9tIGEgSlNEb2MgY29tbWVudCBib2R5LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHBhcnNlLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgcGFyc2VkIHRhZyBlbnRyaWVzLlxuICovXG5mdW5jdGlvbiBwYXJzZVR5cGVQYXJhbWV0ZXJUYWdzKHBhcmFtczogUGFyc2VUeXBlUGFyYW1ldGVyVGFnc1BhcmFtcyk6IFBhcnNlZFRhZ1tdIHtcbiAgY29uc3QgeyBjb21tZW50Qm9keSwgdGFnTmFtZSB9ID0gcGFyYW1zO1xuICBjb25zdCB0YWdzOiBQYXJzZWRUYWdbXSA9IFtdO1xuICAvKlxuICAgKiBUaGUgYCRgIGNoYXJhY3RlciBpcyBhIGxlZ2FsIGlkZW50aWZpZXIgY2hhcmFjdGVyIHRoYXQgYFxcd2AgZXhjbHVkZXMsIHNvIGEgdGFnIGxpa2UgYEB0eXBlUGFyYW0gJE9iamVjdGBcbiAgICogd291bGQgZmFpbCB0byBtYXRjaCBhdCBhbGwgYW5kIHRoZSB0eXBlIHBhcmFtZXRlciB3b3VsZCBiZSByZXBvcnRlZCBhcyB1bmRvY3VtZW50ZWQgZGVzcGl0ZSBoYXZpbmcgYSB0YWcuXG4gICAqL1xuICBjb25zdCB0YWdQYXR0ZXJuID0gbmV3IFJlZ0V4cChTdHJpbmcucmF3YEAoPzoke3RhZ05hbWV9fHRlbXBsYXRlfHR5cGVQYXJhbSlcXHMrKD88dHlwZU5hbWU+W1xcdyRdKykoPzxyZXN0Pi4qKWAsICdnJyk7XG5cbiAgbGV0IG1hdGNoO1xuICB3aGlsZSAoKG1hdGNoID0gdGFnUGF0dGVybi5leGVjKGNvbW1lbnRCb2R5KSkgIT09IG51bGwpIHtcbiAgICBjb25zdCBuYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3R5cGVOYW1lJyk7XG4gICAgY29uc3QgcmVzdCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdyZXN0JykudHJpbSgpO1xuICAgIGNvbnN0IGhhc0Rlc2NyaXB0aW9uID0gcmVzdC5sZW5ndGggPiAwICYmIHJlc3QgIT09ICctJztcbiAgICB0YWdzLnB1c2goeyBoYXNEZXNjcmlwdGlvbiwgbmFtZSB9KTtcbiAgfVxuXG4gIHJldHVybiB0YWdzO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBa0JBLHFCQUF1QztBQUV2Qyw0QkFBK0I7QUFNL0IsTUFBTSxXQUFXO0FBS1YsTUFBTSw4QkFBOEI7QUFLcEMsTUFBTSwwQ0FBMEM7QUFLaEQsTUFBTSx3QkFBeUM7QUFBQSxFQUNwRCxPQUFPLFNBQVM7QUFDZCxVQUFNLFdBQVcsUUFBUSxTQUFTLE9BQU87QUFDekMsVUFBTSxtQkFBbUIsVUFBVSxvQkFBb0IsVUFBVSxLQUFLO0FBRXRFLFdBQU87QUFBQSxNQUNMLG1CQUFtQixNQUF1QjtBQUN4QyxjQUFNLGlCQUFhLHNDQUFlLElBQUk7QUFDdEMsY0FBTSxxQkFBcUIsV0FBVztBQUV0QyxjQUFNLGFBQWEsbUJBQW1CLGdCQUFnQjtBQUN0RCxZQUFJLENBQUMsY0FBYyxXQUFXLFdBQVcsR0FBRztBQUMxQztBQUFBLFFBQ0Y7QUFFQSxjQUFNLGFBQWEsUUFBUTtBQUMzQixjQUFNLFdBQVcsV0FBVyxrQkFBa0IsSUFBSTtBQUNsRCxjQUFNLGVBQWUsaUJBQWlCLFFBQVE7QUFFOUMsWUFBSSxDQUFDLGNBQWM7QUFDakI7QUFBQSxRQUNGO0FBRUEsY0FBTSxhQUFhLHVCQUF1QjtBQUFBLFVBQ3hDLGFBQWEsYUFBYTtBQUFBLFVBQzFCLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFFRCxtQkFBVyxpQkFBaUIsWUFBWTtBQUN0QyxnQkFBTSxnQkFBZ0IsY0FBYyxLQUFLO0FBQ3pDLGdCQUFNLGNBQWMsV0FBVyxLQUFLLENBQUMsUUFBUSxJQUFJLFNBQVMsYUFBYTtBQUV2RSxjQUFJLENBQUMsYUFBYTtBQUNoQixvQkFBUSxPQUFPO0FBQUEsY0FDYixNQUFNO0FBQUE7QUFBQSxnQkFFSixXQUFXO0FBQUEsZ0JBQ1gsU0FBUztBQUFBLGNBQ1g7QUFBQSxjQUNBLFdBQVc7QUFBQSxjQUNYO0FBQUEsWUFDRixDQUFDO0FBQUEsVUFDSCxXQUFXLENBQUMsWUFBWSxnQkFBZ0I7QUFDdEMsb0JBQVEsT0FBTztBQUFBLGNBQ2IsTUFBTTtBQUFBO0FBQUEsZ0JBRUosV0FBVztBQUFBLGdCQUNYLFNBQVM7QUFBQSxjQUNYO0FBQUEsY0FDQSxXQUFXO0FBQUEsY0FDWDtBQUFBLFlBQ0YsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsQ0FBQywyQkFBMkIsR0FBRztBQUFBLE1BQy9CLENBQUMsdUNBQXVDLEdBQUc7QUFBQSxJQUM3QztBQUFBLElBQ0EsUUFBUSxDQUFDO0FBQUEsSUFDVCxNQUFNO0FBQUEsRUFDUjtBQUNGO0FBNEJBLFNBQVMsaUJBQWlCLFVBQW1EO0FBQzNFLFdBQVMsUUFBUSxTQUFTLFNBQVMsR0FBRyxTQUFTLEdBQUcsU0FBUztBQUN6RCxVQUFNLFVBQVUsU0FBUyxLQUFLO0FBQzlCLFFBQUksU0FBUyxTQUFTLFdBQVcsUUFBUSxNQUFNLFdBQVcsR0FBRyxHQUFHO0FBQzlELGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQVFBLFNBQVMsdUJBQXVCLFFBQW1EO0FBQ2pGLFFBQU0sRUFBRSxhQUFhLFFBQVEsSUFBSTtBQUNqQyxRQUFNLE9BQW9CLENBQUM7QUFLM0IsUUFBTSxhQUFhLElBQUksT0FBTyxPQUFPLFVBQVUsT0FBTyx5REFBeUQsR0FBRztBQUVsSCxNQUFJO0FBQ0osVUFBUSxRQUFRLFdBQVcsS0FBSyxXQUFXLE9BQU8sTUFBTTtBQUN0RCxVQUFNLFdBQU8sdUNBQXVCLE9BQU8sVUFBVTtBQUNyRCxVQUFNLFdBQU8sdUNBQXVCLE9BQU8sTUFBTSxFQUFFLEtBQUs7QUFDeEQsVUFBTSxpQkFBaUIsS0FBSyxTQUFTLEtBQUssU0FBUztBQUNuRCxTQUFLLEtBQUssRUFBRSxnQkFBZ0IsS0FBSyxDQUFDO0FBQUEsRUFDcEM7QUFFQSxTQUFPO0FBQ1Q7IiwibmFtZXMiOltdfQ==
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9yZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHJ1bGU6IHJlcXVpcmUtbWV0aG9kLXRlbXBsYXRlXG4gKlxuICogUmVxdWlyZXMgdGhhdCBnZW5lcmljIG1ldGhvZHMgKG1ldGhvZHMgd2l0aCB0eXBlIHBhcmFtZXRlcnMpIGhhdmVcbiAqIGNvcnJlc3BvbmRpbmcgYEB0eXBlUGFyYW1gIChvciBgQHRlbXBsYXRlYCkgSlNEb2MgdGFncyBmb3IgZWFjaCB0eXBlIHBhcmFtZXRlci5cbiAqXG4gKiBUaGlzIGZpbGxzIGEgZ2FwIGluIGBlc2xpbnQtcGx1Z2luLWpzZG9jYCdzIGByZXF1aXJlLXRlbXBsYXRlYCBydWxlLCB3aGljaFxuICogb25seSBjaGVja3MgdG9wLWxldmVsIGRlY2xhcmF0aW9ucyAoZnVuY3Rpb25zLCBjbGFzc2VzLCBpbnRlcmZhY2VzLCB0eXBlIGFsaWFzZXMpXG4gKiBidXQgbm90IG1ldGhvZHMgd2l0aGluIGNsYXNzZXMuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2dhanVzL2VzbGludC1wbHVnaW4tanNkb2MvaXNzdWVzLzEzODZ9XG4gKi9cbmltcG9ydCB0eXBlIHsgVFNFU1RyZWUgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcbmltcG9ydCB0eXBlIHsgQ29tbWVudCB9IGZyb20gJ2VzdHJlZSc7XG5cbmltcG9ydCB7IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5cbmltcG9ydCB7IHRvVFNFU1RyZWVOb2RlIH0gZnJvbSAnLi90cy1lc3RyZWUtbm9kZS50cyc7XG5cbmludGVyZmFjZSBKc2RvY1NldHRpbmdzIHtcbiAgcmVhZG9ubHkgdGFnTmFtZVByZWZlcmVuY2U/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG5jb25zdCBUQUdfTkFNRSA9ICd0eXBlUGFyYW0nO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIG1ldGhvZCB0eXBlIHBhcmFtZXRlciBoYXMgbm8gbWF0Y2hpbmcgYEB0eXBlUGFyYW1gIHRhZy5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSURfTUlTU0lOR19URU1QTEFURSA9ICdtaXNzaW5nVGVtcGxhdGUnO1xuXG4vKipcbk1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIG1ldGhvZCdzIGBAdHlwZVBhcmFtYCB0YWcgaXMgbWlzc2luZyBhIGRlc2NyaXB0aW9uLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRF9NSVNTSU5HX1RFTVBMQVRFX0RFU0NSSVBUSU9OID0gJ21pc3NpbmdUZW1wbGF0ZURlc2NyaXB0aW9uJztcblxuLyoqXG4gKiBFU0xpbnQgcnVsZSByZXF1aXJpbmcgZXZlcnkgZ2VuZXJpYyBtZXRob2QgdHlwZSBwYXJhbWV0ZXIgdG8gY2FycnkgYSBgQHR5cGVQYXJhbWAgdGFnIHdpdGggYSBkZXNjcmlwdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlcXVpcmVNZXRob2RUZW1wbGF0ZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHNldHRpbmdzID0gY29udGV4dC5zZXR0aW5nc1snanNkb2MnXSBhcyBKc2RvY1NldHRpbmdzIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByZWZlcnJlZFRhZ05hbWUgPSBzZXR0aW5ncz8udGFnTmFtZVByZWZlcmVuY2U/LlsndGVtcGxhdGUnXSA/PyBUQUdfTkFNRTtcblxuICAgIHJldHVybiB7XG4gICAgICAnTWV0aG9kRGVmaW5pdGlvbicobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1ldGhvZE5vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5NZXRob2REZWZpbml0aW9uO1xuICAgICAgICBjb25zdCBmdW5jdGlvbkV4cHJlc3Npb24gPSBtZXRob2ROb2RlLnZhbHVlO1xuXG4gICAgICAgIGNvbnN0IHR5cGVQYXJhbXMgPSBmdW5jdGlvbkV4cHJlc3Npb24udHlwZVBhcmFtZXRlcnM/LnBhcmFtcztcbiAgICAgICAgaWYgKCF0eXBlUGFyYW1zIHx8IHR5cGVQYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuc291cmNlQ29kZTtcbiAgICAgICAgY29uc3QgY29tbWVudHMgPSBzb3VyY2VDb2RlLmdldENvbW1lbnRzQmVmb3JlKG5vZGUpO1xuICAgICAgICBjb25zdCBqc2RvY0NvbW1lbnQgPSBmaW5kSnNkb2NDb21tZW50KGNvbW1lbnRzKTtcblxuICAgICAgICBpZiAoIWpzZG9jQ29tbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnNlZFRhZ3MgPSBwYXJzZVR5cGVQYXJhbWV0ZXJUYWdzKHtcbiAgICAgICAgICBjb21tZW50Qm9keToganNkb2NDb21tZW50LnZhbHVlLFxuICAgICAgICAgIHRhZ05hbWU6IHByZWZlcnJlZFRhZ05hbWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCB0eXBlUGFyYW1ldGVyIG9mIHR5cGVQYXJhbXMpIHtcbiAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gdHlwZVBhcmFtZXRlci5uYW1lLm5hbWU7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdUYWcgPSBwYXJzZWRUYWdzLmZpbmQoKHRhZykgPT4gdGFnLm5hbWUgPT09IHBhcmFtZXRlck5hbWUpO1xuXG4gICAgICAgICAgaWYgKCFtYXRjaGluZ1RhZykge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHBhcmFtTmFtZWAgaXMgdGhlIHBsYWNlaG9sZGVyIHRoaXMgcnVsZSdzIG93biBtZXNzYWdlIHRlbXBsYXRlIHJlYWRzLlxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgICAgICAgICAgICB0YWdOYW1lOiBwcmVmZXJyZWRUYWdOYW1lXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9NSVNTSU5HX1RFTVBMQVRFLFxuICAgICAgICAgICAgICBub2RlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFtYXRjaGluZ1RhZy5oYXNEZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHBhcmFtTmFtZWAgaXMgdGhlIHBsYWNlaG9sZGVyIHRoaXMgcnVsZSdzIG93biBtZXNzYWdlIHRlbXBsYXRlIHJlYWRzLlxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgICAgICAgICAgICB0YWdOYW1lOiBwcmVmZXJyZWRUYWdOYW1lXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRF9NSVNTSU5HX1RFTVBMQVRFX0RFU0NSSVBUSU9OLFxuICAgICAgICAgICAgICBub2RlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdSZXF1aXJlIGBAdHlwZVBhcmFtYCB0YWdzIHdpdGggZGVzY3JpcHRpb25zIGZvciBnZW5lcmljIG1ldGhvZCB0eXBlIHBhcmFtZXRlcnMnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURfTUlTU0lOR19URU1QTEFURV06ICdNaXNzaW5nIEB7eyB0YWdOYW1lIH19IHt7IHBhcmFtTmFtZSB9fScsXG4gICAgICBbTUVTU0FHRV9JRF9NSVNTSU5HX1RFTVBMQVRFX0RFU0NSSVBUSU9OXTogJ0B7eyB0YWdOYW1lIH19IHt7IHBhcmFtTmFtZSB9fSBpcyBtaXNzaW5nIGEgZGVzY3JpcHRpb24nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6ICdzdWdnZXN0aW9uJ1xuICB9XG59O1xuXG5pbnRlcmZhY2UgUGFyc2VkVGFnIHtcbiAgcmVhZG9ubHkgaGFzRGVzY3JpcHRpb246IGJvb2xlYW47XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcGFyc2VUeXBlUGFyYW1ldGVyVGFnc30uXG4gKi9cbmludGVyZmFjZSBQYXJzZVR5cGVQYXJhbWV0ZXJUYWdzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSByYXcgY29tbWVudCBib2R5ICh3aXRob3V0IHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBjb21tZW50IGRlbGltaXRlcnMpLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWVudEJvZHk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByZWZlcnJlZCB0YWcgbmFtZSAoYHR5cGVQYXJhbWAgb3IgYHRlbXBsYXRlYCkuXG4gICAqL1xuICByZWFkb25seSB0YWdOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIEpTRG9jIGJsb2NrIGNvbW1lbnQgZnJvbSBhIGxpc3Qgb2YgY29tbWVudHMuXG4gKlxuICogQHBhcmFtIGNvbW1lbnRzIC0gVGhlIGNvbW1lbnRzIGJlZm9yZSB0aGUgbm9kZS5cbiAqIEByZXR1cm5zIFRoZSBKU0RvYyBibG9jayBjb21tZW50LCBvciBgdW5kZWZpbmVkYCBpZiBub25lIGZvdW5kLlxuICovXG5mdW5jdGlvbiBmaW5kSnNkb2NDb21tZW50KGNvbW1lbnRzOiByZWFkb25seSBDb21tZW50W10pOiBDb21tZW50IHwgdW5kZWZpbmVkIHtcbiAgZm9yIChsZXQgaW5kZXggPSBjb21tZW50cy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgY29tbWVudCA9IGNvbW1lbnRzW2luZGV4XTtcbiAgICBpZiAoY29tbWVudD8udHlwZSA9PT0gJ0Jsb2NrJyAmJiBjb21tZW50LnZhbHVlLnN0YXJ0c1dpdGgoJyonKSkge1xuICAgICAgcmV0dXJuIGNvbW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYEB0eXBlUGFyYW1gIC8gYEB0ZW1wbGF0ZWAgdGFncyBmcm9tIGEgSlNEb2MgY29tbWVudCBib2R5LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHBhcnNlLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgcGFyc2VkIHRhZyBlbnRyaWVzLlxuICovXG5mdW5jdGlvbiBwYXJzZVR5cGVQYXJhbWV0ZXJUYWdzKHBhcmFtczogUGFyc2VUeXBlUGFyYW1ldGVyVGFnc1BhcmFtcyk6IFBhcnNlZFRhZ1tdIHtcbiAgY29uc3QgeyBjb21tZW50Qm9keSwgdGFnTmFtZSB9ID0gcGFyYW1zO1xuICBjb25zdCB0YWdzOiBQYXJzZWRUYWdbXSA9IFtdO1xuICAvKlxuICAgKiBUaGUgYCRgIGNoYXJhY3RlciBpcyBhIGxlZ2FsIGlkZW50aWZpZXIgY2hhcmFjdGVyIHRoYXQgYFxcd2AgZXhjbHVkZXMsIHNvIGEgdGFnIGxpa2UgYEB0eXBlUGFyYW0gJE9iamVjdGBcbiAgICogd291bGQgZmFpbCB0byBtYXRjaCBhdCBhbGwgYW5kIHRoZSB0eXBlIHBhcmFtZXRlciB3b3VsZCBiZSByZXBvcnRlZCBhcyB1bmRvY3VtZW50ZWQgZGVzcGl0ZSBoYXZpbmcgYSB0YWcuXG4gICAqL1xuICBjb25zdCB0YWdQYXR0ZXJuID0gbmV3IFJlZ0V4cChTdHJpbmcucmF3YEAoPzoke3RhZ05hbWV9fHRlbXBsYXRlfHR5cGVQYXJhbSlcXHMrKD88dHlwZU5hbWU+W1xcdyRdKykoPzxyZXN0Pi4qKWAsICdnJyk7XG5cbiAgbGV0IG1hdGNoO1xuICB3aGlsZSAoKG1hdGNoID0gdGFnUGF0dGVybi5leGVjKGNvbW1lbnRCb2R5KSkgIT09IG51bGwpIHtcbiAgICBjb25zdCBuYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3R5cGVOYW1lJyk7XG4gICAgY29uc3QgcmVzdCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdyZXN0JykudHJpbSgpO1xuICAgIGNvbnN0IGhhc0Rlc2NyaXB0aW9uID0gcmVzdC5sZW5ndGggPiAwICYmIHJlc3QgIT09ICctJztcbiAgICB0YWdzLnB1c2goeyBoYXNEZXNjcmlwdGlvbiwgbmFtZSB9KTtcbiAgfVxuXG4gIHJldHVybiB0YWdzO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBa0JBLHFCQUF1QztBQUV2Qyw0QkFBK0I7QUFNL0IsTUFBTSxXQUFXO0FBS1YsTUFBTSw4QkFBOEI7QUFLcEMsTUFBTSwwQ0FBMEM7QUFLaEQsTUFBTSx3QkFBeUM7QUFBQSxFQUNwRCxPQUFPLFNBQVM7QUFDZCxVQUFNLFdBQVcsUUFBUSxTQUFTLE9BQU87QUFDekMsVUFBTSxtQkFBbUIsVUFBVSxvQkFBb0IsVUFBVSxLQUFLO0FBRXRFLFdBQU87QUFBQSxNQUNMLG1CQUFtQixNQUF1QjtBQUN4QyxjQUFNLGlCQUFhLHNDQUFlLElBQUk7QUFDdEMsY0FBTSxxQkFBcUIsV0FBVztBQUV0QyxjQUFNLGFBQWEsbUJBQW1CLGdCQUFnQjtBQUN0RCxZQUFJLENBQUMsY0FBYyxXQUFXLFdBQVcsR0FBRztBQUMxQztBQUFBLFFBQ0Y7QUFFQSxjQUFNLGFBQWEsUUFBUTtBQUMzQixjQUFNLFdBQVcsV0FBVyxrQkFBa0IsSUFBSTtBQUNsRCxjQUFNLGVBQWUsaUJBQWlCLFFBQVE7QUFFOUMsWUFBSSxDQUFDLGNBQWM7QUFDakI7QUFBQSxRQUNGO0FBRUEsY0FBTSxhQUFhLHVCQUF1QjtBQUFBLFVBQ3hDLGFBQWEsYUFBYTtBQUFBLFVBQzFCLFNBQVM7QUFBQSxRQUNYLENBQUM7QUFFRCxtQkFBVyxpQkFBaUIsWUFBWTtBQUN0QyxnQkFBTSxnQkFBZ0IsY0FBYyxLQUFLO0FBQ3pDLGdCQUFNLGNBQWMsV0FBVyxLQUFLLENBQUMsUUFBUSxJQUFJLFNBQVMsYUFBYTtBQUV2RSxjQUFJLENBQUMsYUFBYTtBQUNoQixvQkFBUSxPQUFPO0FBQUEsY0FDYixNQUFNO0FBQUE7QUFBQSxnQkFFSixXQUFXO0FBQUEsZ0JBQ1gsU0FBUztBQUFBLGNBQ1g7QUFBQSxjQUNBLFdBQVc7QUFBQSxjQUNYO0FBQUEsWUFDRixDQUFDO0FBQUEsVUFDSCxXQUFXLENBQUMsWUFBWSxnQkFBZ0I7QUFDdEMsb0JBQVEsT0FBTztBQUFBLGNBQ2IsTUFBTTtBQUFBO0FBQUEsZ0JBRUosV0FBVztBQUFBLGdCQUNYLFNBQVM7QUFBQSxjQUNYO0FBQUEsY0FDQSxXQUFXO0FBQUEsY0FDWDtBQUFBLFlBQ0YsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLElBQ0EsVUFBVTtBQUFBLE1BQ1IsQ0FBQywyQkFBMkIsR0FBRztBQUFBLE1BQy9CLENBQUMsdUNBQXVDLEdBQUc7QUFBQSxJQUM3QztBQUFBLElBQ0EsUUFBUSxDQUFDO0FBQUEsSUFDVCxNQUFNO0FBQUEsRUFDUjtBQUNGO0FBNEJBLFNBQVMsaUJBQWlCLFVBQW1EO0FBQzNFLFdBQVMsUUFBUSxTQUFTLFNBQVMsR0FBRyxTQUFTLEdBQUcsU0FBUztBQUN6RCxVQUFNLFVBQVUsU0FBUyxLQUFLO0FBQzlCLFFBQUksU0FBUyxTQUFTLFdBQVcsUUFBUSxNQUFNLFdBQVcsR0FBRyxHQUFHO0FBQzlELGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQVFBLFNBQVMsdUJBQXVCLFFBQW1EO0FBQ2pGLFFBQU0sRUFBRSxhQUFhLFFBQVEsSUFBSTtBQUNqQyxRQUFNLE9BQW9CLENBQUM7QUFLM0IsUUFBTSxhQUFhLElBQUksT0FBTyxPQUFPLFVBQVUsT0FBTyx5REFBeUQsR0FBRztBQUVsSCxNQUFJO0FBQ0osVUFBUSxRQUFRLFdBQVcsS0FBSyxXQUFXLE9BQU8sTUFBTTtBQUN0RCxVQUFNLFdBQU8sdUNBQXVCLE9BQU8sVUFBVTtBQUNyRCxVQUFNLFdBQU8sdUNBQXVCLE9BQU8sTUFBTSxFQUFFLEtBQUs7QUFDeEQsVUFBTSxpQkFBaUIsS0FBSyxTQUFTLEtBQUssU0FBUztBQUNuRCxTQUFLLEtBQUssRUFBRSxnQkFBZ0IsS0FBSyxDQUFDO0FBQUEsRUFDcEM7QUFFQSxTQUFPO0FBQ1Q7IiwibmFtZXMiOltdfQ==