occam-verify-cli 0.0.538 → 0.0.540

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 (91) hide show
  1. package/bin/action/verify.js +7 -24
  2. package/bin/actions.js +20 -6
  3. package/lib/axiom.js +7 -7
  4. package/lib/axiomLemmaTheoremConjecture.js +33 -30
  5. package/lib/combinator.js +4 -4
  6. package/lib/conclusion.js +8 -8
  7. package/lib/conjecture.js +7 -7
  8. package/lib/consequence.js +3 -3
  9. package/lib/constructor.js +6 -6
  10. package/lib/context/file.js +215 -45
  11. package/lib/context/metaproof.js +3 -3
  12. package/lib/context/release.js +215 -2
  13. package/lib/kinds.js +13 -1
  14. package/lib/label.js +4 -4
  15. package/lib/lemma.js +7 -7
  16. package/lib/metaType.js +201 -0
  17. package/lib/metavariable.js +81 -0
  18. package/lib/premise.js +12 -12
  19. package/lib/rule.js +42 -35
  20. package/lib/ruleNames.js +16 -4
  21. package/lib/supposition.js +8 -8
  22. package/lib/theorem.js +7 -7
  23. package/lib/type.js +7 -7
  24. package/lib/utilities/node.js +17 -3
  25. package/lib/utilities/query.js +13 -2
  26. package/lib/variable.js +18 -12
  27. package/lib/verifier/metastatementForMetavariable.js +8 -8
  28. package/lib/verifier/statementForMetavariable.js +9 -9
  29. package/lib/verifier/termForVariable.js +22 -11
  30. package/lib/verifier.js +1 -1
  31. package/lib/verify/assertion/type.js +2 -2
  32. package/lib/verify/axiom.js +2 -2
  33. package/lib/verify/conjecture.js +2 -2
  34. package/lib/verify/declaration/metavariable.js +26 -0
  35. package/lib/verify/declaration/topLevel.js +7 -3
  36. package/lib/verify/lemma.js +2 -2
  37. package/lib/verify/metastatement/qualified.js +3 -3
  38. package/lib/verify/metastatement.js +147 -3
  39. package/lib/verify/metavariable.js +34 -0
  40. package/lib/verify/rule.js +2 -2
  41. package/lib/verify/statement/qualified.js +7 -7
  42. package/lib/verify/statement.js +6 -6
  43. package/lib/verify/theorem.js +2 -2
  44. package/lib/verify/variable.js +4 -4
  45. package/package.json +3 -3
  46. package/src/axiom.js +2 -2
  47. package/src/axiomLemmaTheoremConjecture.js +31 -32
  48. package/src/combinator.js +3 -3
  49. package/src/conclusion.js +11 -7
  50. package/src/conjecture.js +2 -2
  51. package/src/consequence.js +2 -2
  52. package/src/constructor.js +5 -5
  53. package/src/context/file.js +248 -45
  54. package/src/context/metaproof.js +1 -1
  55. package/src/context/release.js +254 -2
  56. package/src/kinds.js +3 -0
  57. package/src/label.js +3 -3
  58. package/src/lemma.js +2 -2
  59. package/src/metaType.js +81 -0
  60. package/src/metavariable.js +39 -0
  61. package/src/premise.js +19 -11
  62. package/src/rule.js +37 -32
  63. package/src/ruleNames.js +4 -1
  64. package/src/supposition.js +11 -7
  65. package/src/theorem.js +2 -2
  66. package/src/type.js +5 -5
  67. package/src/utilities/node.js +32 -2
  68. package/src/utilities/query.js +14 -0
  69. package/src/variable.js +12 -8
  70. package/src/verifier/metastatementForMetavariable.js +7 -7
  71. package/src/verifier/statementForMetavariable.js +8 -8
  72. package/src/verifier/termForVariable.js +33 -13
  73. package/src/verifier.js +1 -1
  74. package/src/verify/assertion/type.js +3 -3
  75. package/src/verify/axiom.js +1 -1
  76. package/src/verify/conjecture.js +2 -1
  77. package/src/verify/declaration/metavariable.js +20 -0
  78. package/src/verify/declaration/topLevel.js +9 -2
  79. package/src/verify/lemma.js +1 -1
  80. package/src/verify/metastatement/qualified.js +3 -2
  81. package/src/verify/metastatement.js +65 -2
  82. package/src/verify/metavariable.js +32 -0
  83. package/src/verify/rule.js +1 -1
  84. package/src/verify/statement/qualified.js +7 -6
  85. package/src/verify/statement.js +14 -14
  86. package/src/verify/theorem.js +2 -1
  87. package/src/verify/variable.js +4 -4
  88. package/lib/context/release/directory.js +0 -313
  89. package/lib/context/release/file.js +0 -387
  90. package/src/context/release/directory.js +0 -251
  91. package/src/context/release/file.js +0 -312
@@ -1,313 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return DirectoryReleaseContext;
9
- }
10
- });
11
- var _release = /*#__PURE__*/ _interopRequireDefault(require("../../context/release"));
12
- var _array = require("../../utilities/array");
13
- var _customGrammar = require("../../utilities/customGrammar");
14
- function _assertThisInitialized(self) {
15
- if (self === void 0) {
16
- throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
17
- }
18
- return self;
19
- }
20
- function _classCallCheck(instance, Constructor) {
21
- if (!(instance instanceof Constructor)) {
22
- throw new TypeError("Cannot call a class as a function");
23
- }
24
- }
25
- function _defineProperties(target, props) {
26
- for(var i = 0; i < props.length; i++){
27
- var descriptor = props[i];
28
- descriptor.enumerable = descriptor.enumerable || false;
29
- descriptor.configurable = true;
30
- if ("value" in descriptor) descriptor.writable = true;
31
- Object.defineProperty(target, descriptor.key, descriptor);
32
- }
33
- }
34
- function _createClass(Constructor, protoProps, staticProps) {
35
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
36
- if (staticProps) _defineProperties(Constructor, staticProps);
37
- return Constructor;
38
- }
39
- function _getPrototypeOf(o) {
40
- _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
41
- return o.__proto__ || Object.getPrototypeOf(o);
42
- };
43
- return _getPrototypeOf(o);
44
- }
45
- function _inherits(subClass, superClass) {
46
- if (typeof superClass !== "function" && superClass !== null) {
47
- throw new TypeError("Super expression must either be null or a function");
48
- }
49
- subClass.prototype = Object.create(superClass && superClass.prototype, {
50
- constructor: {
51
- value: subClass,
52
- writable: true,
53
- configurable: true
54
- }
55
- });
56
- if (superClass) _setPrototypeOf(subClass, superClass);
57
- }
58
- function _interopRequireDefault(obj) {
59
- return obj && obj.__esModule ? obj : {
60
- default: obj
61
- };
62
- }
63
- function _possibleConstructorReturn(self, call) {
64
- if (call && (_typeof(call) === "object" || typeof call === "function")) {
65
- return call;
66
- }
67
- return _assertThisInitialized(self);
68
- }
69
- function _setPrototypeOf(o, p) {
70
- _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
71
- o.__proto__ = p;
72
- return o;
73
- };
74
- return _setPrototypeOf(o, p);
75
- }
76
- var _typeof = function(obj) {
77
- "@swc/helpers - typeof";
78
- return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
79
- };
80
- function _isNativeReflectConstruct() {
81
- if (typeof Reflect === "undefined" || !Reflect.construct) return false;
82
- if (Reflect.construct.sham) return false;
83
- if (typeof Proxy === "function") return true;
84
- try {
85
- Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
86
- return true;
87
- } catch (e) {
88
- return false;
89
- }
90
- }
91
- function _createSuper(Derived) {
92
- var hasNativeReflectConstruct = _isNativeReflectConstruct();
93
- return function _createSuperInternal() {
94
- var Super = _getPrototypeOf(Derived), result;
95
- if (hasNativeReflectConstruct) {
96
- var NewTarget = _getPrototypeOf(this).constructor;
97
- result = Reflect.construct(Super, arguments, NewTarget);
98
- } else {
99
- result = Super.apply(this, arguments);
100
- }
101
- return _possibleConstructorReturn(this, result);
102
- };
103
- }
104
- var DirectoryReleaseContext = /*#__PURE__*/ function(ReleaseContext) {
105
- _inherits(DirectoryReleaseContext, ReleaseContext);
106
- var _super = _createSuper(DirectoryReleaseContext);
107
- function DirectoryReleaseContext(log, name, entries, lexer, parser, verified, customGrammar, dependencyReleaseContexts, fileContexts) {
108
- _classCallCheck(this, DirectoryReleaseContext);
109
- var _this;
110
- _this = _super.call(this, log, name, entries, lexer, parser, verified, customGrammar, dependencyReleaseContexts);
111
- _this.fileContexts = fileContexts;
112
- return _this;
113
- }
114
- _createClass(DirectoryReleaseContext, [
115
- {
116
- key: "getFileContexts",
117
- value: function getFileContexts() {
118
- return this.fileContexts;
119
- }
120
- },
121
- {
122
- key: "getLabels",
123
- value: function getLabels() {
124
- var includeDependencies = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
125
- var labels = [];
126
- this.fileContexts.forEach(function(fileContext) {
127
- var includeRelease = false, fileContextLabels = fileContext.getLabels(includeRelease);
128
- (0, _array.push)(labels, fileContextLabels);
129
- });
130
- if (includeDependencies) {
131
- var dependencyReleaseContexts = this.getDependencyReleaseContexts();
132
- dependencyReleaseContexts.forEach(function(releaseContext) {
133
- var includeDependencies = false, releaseContextLabels = releaseContext.getLabels(includeDependencies);
134
- (0, _array.push)(labels, releaseContextLabels);
135
- });
136
- }
137
- return labels;
138
- }
139
- },
140
- {
141
- key: "getTypes",
142
- value: function getTypes() {
143
- var includeDependencies = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
144
- var types = [];
145
- this.fileContexts.forEach(function(fileContext) {
146
- var includeRelease = false, fileContextTypes = fileContext.getTypes(includeRelease);
147
- (0, _array.push)(types, fileContextTypes);
148
- });
149
- if (includeDependencies) {
150
- var dependencyReleaseContexts = this.getDependencyReleaseContexts();
151
- dependencyReleaseContexts.forEach(function(releaseContext) {
152
- var includeDependencies = false, releaseContextTypes = releaseContext.getTypes(includeDependencies);
153
- (0, _array.push)(types, releaseContextTypes);
154
- });
155
- }
156
- return types;
157
- }
158
- },
159
- {
160
- key: "getRules",
161
- value: function getRules() {
162
- var includeDependencies = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
163
- var rules = [];
164
- this.fileContexts.forEach(function(fileContext) {
165
- var includeRelease = false, fileContextRules = fileContext.getRules(includeRelease);
166
- (0, _array.push)(rules, fileContextRules);
167
- });
168
- if (includeDependencies) {
169
- var dependencyReleaseContexts = this.getDependencyReleaseContexts();
170
- dependencyReleaseContexts.forEach(function(releaseContext) {
171
- var includeDependencies = false, releaseContextRules = releaseContext.getRules(includeDependencies);
172
- (0, _array.push)(rules, releaseContextRules);
173
- });
174
- }
175
- return rules;
176
- }
177
- },
178
- {
179
- key: "getAxioms",
180
- value: function getAxioms() {
181
- var includeDependencies = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
182
- var axioms = [];
183
- this.fileContexts.forEach(function(fileContext) {
184
- var includeRelease = false, fileContextAxioms = fileContext.getAxioms(includeRelease);
185
- (0, _array.push)(axioms, fileContextAxioms);
186
- });
187
- if (includeDependencies) {
188
- var dependencyReleaseContexts = this.getDependencyReleaseContexts();
189
- dependencyReleaseContexts.forEach(function(releaseContext) {
190
- var includeDependencies = false, releaseContextAxioms = releaseContext.getAxioms(includeDependencies);
191
- (0, _array.push)(axioms, releaseContextAxioms);
192
- });
193
- }
194
- return axioms;
195
- }
196
- },
197
- {
198
- key: "getLemmas",
199
- value: function getLemmas() {
200
- var lemmas = [];
201
- this.fileContexts.forEach(function(fileContext) {
202
- var includeRelease = false, fileContextLemmas = fileContext.getLemmas(includeRelease);
203
- (0, _array.push)(lemmas, fileContextLemmas);
204
- });
205
- return lemmas;
206
- }
207
- },
208
- {
209
- key: "getTheorems",
210
- value: function getTheorems() {
211
- var includeDependencies = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
212
- var theorems = [];
213
- this.fileContexts.forEach(function(fileContext) {
214
- var includeRelease = false, fileContextTheorems = fileContext.getTheorems(includeRelease);
215
- (0, _array.push)(theorems, fileContextTheorems);
216
- });
217
- if (includeDependencies) {
218
- var dependencyReleaseContexts = this.getDependencyReleaseContexts();
219
- dependencyReleaseContexts.forEach(function(releaseContext) {
220
- var includeDependencies = false, releaseContextTheorems = releaseContext.getTheorems(includeDependencies);
221
- (0, _array.push)(theorems, releaseContextTheorems);
222
- });
223
- }
224
- return theorems;
225
- }
226
- },
227
- {
228
- key: "getConjectures",
229
- value: function getConjectures() {
230
- var includeDependencies = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
231
- var conjectures = [];
232
- this.fileContexts.forEach(function(fileContext) {
233
- var includeRelease = false, fileContextConjectures = fileContext.getConjectures(includeRelease);
234
- (0, _array.push)(conjectures, fileContextConjectures);
235
- });
236
- if (includeDependencies) {
237
- var dependencyReleaseContexts = this.getDependencyReleaseContexts();
238
- dependencyReleaseContexts.forEach(function(releaseContext) {
239
- var includeDependencies = false, releaseContextConjectures = releaseContext.getConjectures(includeDependencies);
240
- (0, _array.push)(conjectures, releaseContextConjectures);
241
- });
242
- }
243
- return conjectures;
244
- }
245
- },
246
- {
247
- key: "getCombinators",
248
- value: function getCombinators() {
249
- var includeDependencies = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
250
- var combinators = [];
251
- this.fileContexts.forEach(function(fileContext) {
252
- var includeRelease = false, fileContextCombinators = fileContext.getCombinators(includeRelease);
253
- (0, _array.push)(combinators, fileContextCombinators);
254
- });
255
- if (includeDependencies) {
256
- var dependencyReleaseContexts = this.getDependencyReleaseContexts();
257
- dependencyReleaseContexts.forEach(function(releaseContext) {
258
- var includeDependencies = false, releaseContextCombinators = releaseContext.getCombinators(includeDependencies);
259
- (0, _array.push)(combinators, releaseContextCombinators);
260
- });
261
- }
262
- return combinators;
263
- }
264
- },
265
- {
266
- key: "getConstructors",
267
- value: function getConstructors() {
268
- var includeDependencies = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
269
- var constructors = [];
270
- this.fileContexts.forEach(function(fileContext) {
271
- var includeRelease = false, fileContextConstructors = fileContext.getConstructors(includeRelease);
272
- (0, _array.push)(constructors, fileContextConstructors);
273
- });
274
- if (includeDependencies) {
275
- var dependencyReleaseContexts = this.getDependencyReleaseContexts();
276
- dependencyReleaseContexts.forEach(function(releaseContext) {
277
- var includeDependencies = false, releaseContextConstructors = releaseContext.getConstructors(includeDependencies);
278
- (0, _array.push)(constructors, releaseContextConstructors);
279
- });
280
- }
281
- return constructors;
282
- }
283
- },
284
- {
285
- key: "addFileContext",
286
- value: function addFileContext(fileContext) {
287
- this.fileContexts.push(fileContext);
288
- }
289
- },
290
- {
291
- key: "toJSON",
292
- value: function toJSON() {
293
- var json = [];
294
- this.fileContexts.forEach(function(fileContext) {
295
- var fileContextJSON = fileContext.toJSON();
296
- (0, _array.push)(json, fileContextJSON);
297
- });
298
- return json;
299
- }
300
- }
301
- ], [
302
- {
303
- key: "fromLogNameAndEntries",
304
- value: function fromLogNameAndEntries(log, name, entries) {
305
- var lexer = null, parser = null, verified = false, customGrammar = (0, _customGrammar.customGrammarFromNameAndEntries)(name, entries), dependencyReleaseContexts = null, fileContexts = [], directoryReleaseContext = new DirectoryReleaseContext(log, name, entries, lexer, parser, verified, customGrammar, dependencyReleaseContexts, fileContexts);
306
- return directoryReleaseContext;
307
- }
308
- }
309
- ]);
310
- return DirectoryReleaseContext;
311
- }(_release.default);
312
-
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0L3JlbGVhc2UvZGlyZWN0b3J5LmpzIiwiPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUmVsZWFzZUNvbnRleHQgZnJvbSBcIi4uLy4uL2NvbnRleHQvcmVsZWFzZVwiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgY3VzdG9tR3JhbW1hckZyb21OYW1lQW5kRW50cmllcyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY3VzdG9tR3JhbW1hclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXJlY3RvcnlSZWxlYXNlQ29udGV4dCBleHRlbmRzIFJlbGVhc2VDb250ZXh0IHtcbiAgY29uc3RydWN0b3IobG9nLCBuYW1lLCBlbnRyaWVzLCBsZXhlciwgcGFyc2VyLCB2ZXJpZmllZCwgY3VzdG9tR3JhbW1hciwgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cywgZmlsZUNvbnRleHRzKSB7XG4gICAgc3VwZXIobG9nLCBuYW1lLCBlbnRyaWVzLCBsZXhlciwgcGFyc2VyLCB2ZXJpZmllZCwgY3VzdG9tR3JhbW1hciwgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyk7XG5cbiAgICB0aGlzLmZpbGVDb250ZXh0cyA9IGZpbGVDb250ZXh0cztcbiAgfVxuXG4gIGdldEZpbGVDb250ZXh0cygpIHtcbiAgICByZXR1cm4gdGhpcy5maWxlQ29udGV4dHM7XG4gIH1cblxuICBnZXRMYWJlbHMoaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCBsYWJlbHMgPSBbXTtcblxuICAgIHRoaXMuZmlsZUNvbnRleHRzLmZvckVhY2goKGZpbGVDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBpbmNsdWRlUmVsZWFzZSA9IGZhbHNlLFxuICAgICAgICAgICAgZmlsZUNvbnRleHRMYWJlbHMgPSBmaWxlQ29udGV4dC5nZXRMYWJlbHMoaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgICBwdXNoKGxhYmVscywgZmlsZUNvbnRleHRMYWJlbHMpO1xuICAgIH0pO1xuXG4gICAgaWYgKGluY2x1ZGVEZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMgPSB0aGlzLmdldERlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoKTtcblxuICAgICAgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cy5mb3JFYWNoKChyZWxlYXNlQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gZmFsc2UsXG4gICAgICAgICAgICAgIHJlbGVhc2VDb250ZXh0TGFiZWxzID0gcmVsZWFzZUNvbnRleHQuZ2V0TGFiZWxzKGluY2x1ZGVEZXBlbmRlbmNpZXMpO1xuXG4gICAgICAgIHB1c2gobGFiZWxzLCByZWxlYXNlQ29udGV4dExhYmVscyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFiZWxzO1xuICB9XG5cbiAgZ2V0VHlwZXMoaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlcyA9IFtdO1xuXG4gICAgdGhpcy5maWxlQ29udGV4dHMuZm9yRWFjaCgoZmlsZUNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGluY2x1ZGVSZWxlYXNlID0gZmFsc2UsXG4gICAgICAgICAgICBmaWxlQ29udGV4dFR5cGVzID0gZmlsZUNvbnRleHQuZ2V0VHlwZXMoaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgICBwdXNoKHR5cGVzLCBmaWxlQ29udGV4dFR5cGVzKTtcbiAgICB9KTtcblxuICAgIGlmIChpbmNsdWRlRGVwZW5kZW5jaWVzKSB7XG4gICAgICBjb25zdCBkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzID0gdGhpcy5nZXREZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKCk7XG5cbiAgICAgIGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMuZm9yRWFjaCgocmVsZWFzZUNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgaW5jbHVkZURlcGVuZGVuY2llcyA9IGZhbHNlLFxuICAgICAgICAgICAgICByZWxlYXNlQ29udGV4dFR5cGVzID0gcmVsZWFzZUNvbnRleHQuZ2V0VHlwZXMoaW5jbHVkZURlcGVuZGVuY2llcyk7XG5cbiAgICAgICAgcHVzaCh0eXBlcywgcmVsZWFzZUNvbnRleHRUeXBlcyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cblxuICBnZXRSdWxlcyhpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHJ1bGVzID0gW107XG5cbiAgICB0aGlzLmZpbGVDb250ZXh0cy5mb3JFYWNoKChmaWxlQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZVJlbGVhc2UgPSBmYWxzZSxcbiAgICAgICAgICAgIGZpbGVDb250ZXh0UnVsZXMgPSBmaWxlQ29udGV4dC5nZXRSdWxlcyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICAgIHB1c2gocnVsZXMsIGZpbGVDb250ZXh0UnVsZXMpO1xuICAgIH0pO1xuXG4gICAgaWYgKGluY2x1ZGVEZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMgPSB0aGlzLmdldERlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoKTtcblxuICAgICAgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cy5mb3JFYWNoKChyZWxlYXNlQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gZmFsc2UsXG4gICAgICAgICAgICAgIHJlbGVhc2VDb250ZXh0UnVsZXMgPSByZWxlYXNlQ29udGV4dC5nZXRSdWxlcyhpbmNsdWRlRGVwZW5kZW5jaWVzKTtcblxuICAgICAgICBwdXNoKHJ1bGVzLCByZWxlYXNlQ29udGV4dFJ1bGVzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIGdldEF4aW9tcyhpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IGF4aW9tcyA9IFtdO1xuXG4gICAgdGhpcy5maWxlQ29udGV4dHMuZm9yRWFjaCgoZmlsZUNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGluY2x1ZGVSZWxlYXNlID0gZmFsc2UsXG4gICAgICAgICAgICBmaWxlQ29udGV4dEF4aW9tcyA9IGZpbGVDb250ZXh0LmdldEF4aW9tcyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICAgIHB1c2goYXhpb21zLCBmaWxlQ29udGV4dEF4aW9tcyk7XG4gICAgfSk7XG5cbiAgICBpZiAoaW5jbHVkZURlcGVuZGVuY2llcykge1xuICAgICAgY29uc3QgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyA9IHRoaXMuZ2V0RGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cygpO1xuXG4gICAgICBkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzLmZvckVhY2goKHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGluY2x1ZGVEZXBlbmRlbmNpZXMgPSBmYWxzZSxcbiAgICAgICAgICAgICAgcmVsZWFzZUNvbnRleHRBeGlvbXMgPSByZWxlYXNlQ29udGV4dC5nZXRBeGlvbXMoaW5jbHVkZURlcGVuZGVuY2llcyk7XG5cbiAgICAgICAgcHVzaChheGlvbXMsIHJlbGVhc2VDb250ZXh0QXhpb21zKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBheGlvbXM7XG4gIH1cblxuICBnZXRMZW1tYXMoKSB7XG4gICAgY29uc3QgbGVtbWFzID0gW107XG5cbiAgICB0aGlzLmZpbGVDb250ZXh0cy5mb3JFYWNoKChmaWxlQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZVJlbGVhc2UgPSBmYWxzZSxcbiAgICAgICAgICAgIGZpbGVDb250ZXh0TGVtbWFzID0gZmlsZUNvbnRleHQuZ2V0TGVtbWFzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgICAgcHVzaChsZW1tYXMsIGZpbGVDb250ZXh0TGVtbWFzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBsZW1tYXM7XG4gIH1cblxuICBnZXRUaGVvcmVtcyhpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHRoZW9yZW1zID0gW107XG5cbiAgICB0aGlzLmZpbGVDb250ZXh0cy5mb3JFYWNoKChmaWxlQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZVJlbGVhc2UgPSBmYWxzZSxcbiAgICAgICAgICAgIGZpbGVDb250ZXh0VGhlb3JlbXMgPSBmaWxlQ29udGV4dC5nZXRUaGVvcmVtcyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICAgIHB1c2godGhlb3JlbXMsIGZpbGVDb250ZXh0VGhlb3JlbXMpO1xuICAgIH0pO1xuXG4gICAgaWYgKGluY2x1ZGVEZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMgPSB0aGlzLmdldERlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoKTtcblxuICAgICAgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cy5mb3JFYWNoKChyZWxlYXNlQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gZmFsc2UsXG4gICAgICAgICAgICAgIHJlbGVhc2VDb250ZXh0VGhlb3JlbXMgPSByZWxlYXNlQ29udGV4dC5nZXRUaGVvcmVtcyhpbmNsdWRlRGVwZW5kZW5jaWVzKTtcblxuICAgICAgICBwdXNoKHRoZW9yZW1zLCByZWxlYXNlQ29udGV4dFRoZW9yZW1zKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGVvcmVtcztcbiAgfVxuXG4gIGdldENvbmplY3R1cmVzKGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgY29uamVjdHVyZXMgPSBbXTtcblxuICAgIHRoaXMuZmlsZUNvbnRleHRzLmZvckVhY2goKGZpbGVDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBpbmNsdWRlUmVsZWFzZSA9IGZhbHNlLFxuICAgICAgICAgICAgZmlsZUNvbnRleHRDb25qZWN0dXJlcyA9IGZpbGVDb250ZXh0LmdldENvbmplY3R1cmVzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgICAgcHVzaChjb25qZWN0dXJlcywgZmlsZUNvbnRleHRDb25qZWN0dXJlcyk7XG4gICAgfSk7XG5cbiAgICBpZiAoaW5jbHVkZURlcGVuZGVuY2llcykge1xuICAgICAgY29uc3QgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyA9IHRoaXMuZ2V0RGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cygpO1xuXG4gICAgICBkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzLmZvckVhY2goKHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGluY2x1ZGVEZXBlbmRlbmNpZXMgPSBmYWxzZSxcbiAgICAgICAgICAgICAgcmVsZWFzZUNvbnRleHRDb25qZWN0dXJlcyA9IHJlbGVhc2VDb250ZXh0LmdldENvbmplY3R1cmVzKGluY2x1ZGVEZXBlbmRlbmNpZXMpO1xuXG4gICAgICAgIHB1c2goY29uamVjdHVyZXMsIHJlbGVhc2VDb250ZXh0Q29uamVjdHVyZXMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmplY3R1cmVzO1xuICB9XG5cbiAgZ2V0Q29tYmluYXRvcnMoaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCBjb21iaW5hdG9ycyA9IFtdO1xuXG4gICAgdGhpcy5maWxlQ29udGV4dHMuZm9yRWFjaCgoZmlsZUNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGluY2x1ZGVSZWxlYXNlID0gZmFsc2UsXG4gICAgICAgICAgICBmaWxlQ29udGV4dENvbWJpbmF0b3JzID0gZmlsZUNvbnRleHQuZ2V0Q29tYmluYXRvcnMoaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgICBwdXNoKGNvbWJpbmF0b3JzLCBmaWxlQ29udGV4dENvbWJpbmF0b3JzKTtcbiAgICB9KTtcblxuICAgIGlmIChpbmNsdWRlRGVwZW5kZW5jaWVzKSB7XG4gICAgICBjb25zdCBkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzID0gdGhpcy5nZXREZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKCk7XG5cbiAgICAgIGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMuZm9yRWFjaCgocmVsZWFzZUNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgaW5jbHVkZURlcGVuZGVuY2llcyA9IGZhbHNlLFxuICAgICAgICAgICAgICByZWxlYXNlQ29udGV4dENvbWJpbmF0b3JzID0gcmVsZWFzZUNvbnRleHQuZ2V0Q29tYmluYXRvcnMoaW5jbHVkZURlcGVuZGVuY2llcyk7XG5cbiAgICAgICAgcHVzaChjb21iaW5hdG9ycywgcmVsZWFzZUNvbnRleHRDb21iaW5hdG9ycyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tYmluYXRvcnM7XG4gIH1cblxuICBnZXRDb25zdHJ1Y3RvcnMoaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBbXTtcblxuICAgIHRoaXMuZmlsZUNvbnRleHRzLmZvckVhY2goKGZpbGVDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBpbmNsdWRlUmVsZWFzZSA9IGZhbHNlLFxuICAgICAgICAgICAgZmlsZUNvbnRleHRDb25zdHJ1Y3RvcnMgPSBmaWxlQ29udGV4dC5nZXRDb25zdHJ1Y3RvcnMoaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgICBwdXNoKGNvbnN0cnVjdG9ycywgZmlsZUNvbnRleHRDb25zdHJ1Y3RvcnMpO1xuICAgIH0pO1xuXG4gICAgaWYgKGluY2x1ZGVEZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMgPSB0aGlzLmdldERlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoKTtcblxuICAgICAgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cy5mb3JFYWNoKChyZWxlYXNlQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gZmFsc2UsXG4gICAgICAgICAgICAgIHJlbGVhc2VDb250ZXh0Q29uc3RydWN0b3JzID0gcmVsZWFzZUNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKGluY2x1ZGVEZXBlbmRlbmNpZXMpO1xuXG4gICAgICAgIHB1c2goY29uc3RydWN0b3JzLCByZWxlYXNlQ29udGV4dENvbnN0cnVjdG9ycyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3JzO1xuICB9XG5cbiAgYWRkRmlsZUNvbnRleHQoZmlsZUNvbnRleHQpIHtcbiAgICB0aGlzLmZpbGVDb250ZXh0cy5wdXNoKGZpbGVDb250ZXh0KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBqc29uID0gW107XG5cbiAgICB0aGlzLmZpbGVDb250ZXh0cy5mb3JFYWNoKChmaWxlQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgZmlsZUNvbnRleHRKU09OID0gZmlsZUNvbnRleHQudG9KU09OKCk7XG5cbiAgICAgIHB1c2goanNvbiwgZmlsZUNvbnRleHRKU09OKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21Mb2dOYW1lQW5kRW50cmllcyhsb2csIG5hbWUsIGVudHJpZXMpIHtcbiAgICBjb25zdCBsZXhlciA9IG51bGwsXG4gICAgICAgICAgcGFyc2VyID0gbnVsbCxcbiAgICAgICAgICB2ZXJpZmllZCA9IGZhbHNlLFxuICAgICAgICAgIGN1c3RvbUdyYW1tYXIgPSBjdXN0b21HcmFtbWFyRnJvbU5hbWVBbmRFbnRyaWVzKG5hbWUsIGVudHJpZXMpLFxuICAgICAgICAgIGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMgPSBudWxsLFxuICAgICAgICAgIGZpbGVDb250ZXh0cyA9IFtdLFxuICAgICAgICAgIGRpcmVjdG9yeVJlbGVhc2VDb250ZXh0ID0gbmV3IERpcmVjdG9yeVJlbGVhc2VDb250ZXh0KGxvZywgbmFtZSwgZW50cmllcywgbGV4ZXIsIHBhcnNlciwgdmVyaWZpZWQsIGN1c3RvbUdyYW1tYXIsIGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMsIGZpbGVDb250ZXh0cyk7XG5cbiAgICByZXR1cm4gZGlyZWN0b3J5UmVsZWFzZUNvbnRleHQ7XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiRGlyZWN0b3J5UmVsZWFzZUNvbnRleHQiLCJsb2ciLCJuYW1lIiwiZW50cmllcyIsImxleGVyIiwicGFyc2VyIiwidmVyaWZpZWQiLCJjdXN0b21HcmFtbWFyIiwiZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyIsImZpbGVDb250ZXh0cyIsImdldEZpbGVDb250ZXh0cyIsImdldExhYmVscyIsImluY2x1ZGVEZXBlbmRlbmNpZXMiLCJsYWJlbHMiLCJmb3JFYWNoIiwiZmlsZUNvbnRleHQiLCJpbmNsdWRlUmVsZWFzZSIsImZpbGVDb250ZXh0TGFiZWxzIiwicHVzaCIsImdldERlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMiLCJyZWxlYXNlQ29udGV4dCIsInJlbGVhc2VDb250ZXh0TGFiZWxzIiwiZ2V0VHlwZXMiLCJ0eXBlcyIsImZpbGVDb250ZXh0VHlwZXMiLCJyZWxlYXNlQ29udGV4dFR5cGVzIiwiZ2V0UnVsZXMiLCJydWxlcyIsImZpbGVDb250ZXh0UnVsZXMiLCJyZWxlYXNlQ29udGV4dFJ1bGVzIiwiZ2V0QXhpb21zIiwiYXhpb21zIiwiZmlsZUNvbnRleHRBeGlvbXMiLCJyZWxlYXNlQ29udGV4dEF4aW9tcyIsImdldExlbW1hcyIsImxlbW1hcyIsImZpbGVDb250ZXh0TGVtbWFzIiwiZ2V0VGhlb3JlbXMiLCJ0aGVvcmVtcyIsImZpbGVDb250ZXh0VGhlb3JlbXMiLCJyZWxlYXNlQ29udGV4dFRoZW9yZW1zIiwiZ2V0Q29uamVjdHVyZXMiLCJjb25qZWN0dXJlcyIsImZpbGVDb250ZXh0Q29uamVjdHVyZXMiLCJyZWxlYXNlQ29udGV4dENvbmplY3R1cmVzIiwiZ2V0Q29tYmluYXRvcnMiLCJjb21iaW5hdG9ycyIsImZpbGVDb250ZXh0Q29tYmluYXRvcnMiLCJyZWxlYXNlQ29udGV4dENvbWJpbmF0b3JzIiwiZ2V0Q29uc3RydWN0b3JzIiwiY29uc3RydWN0b3JzIiwiZmlsZUNvbnRleHRDb25zdHJ1Y3RvcnMiLCJyZWxlYXNlQ29udGV4dENvbnN0cnVjdG9ycyIsImFkZEZpbGVDb250ZXh0IiwidG9KU09OIiwianNvbiIsImZpbGVDb250ZXh0SlNPTiIsImZyb21Mb2dOYW1lQW5kRW50cmllcyIsImN1c3RvbUdyYW1tYXJGcm9tTmFtZUFuZEVudHJpZXMiLCJkaXJlY3RvcnlSZWxlYXNlQ29udGV4dCIsIlJlbGVhc2VDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQU9xQkE7Ozs0REFMTTtxQkFFTjs2QkFDMkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFakMsSUFBQSxBQUFNQSx3Q0FBTjtjQUFNQTs4QkFBQUE7YUFBQUEsd0JBQ1BDLEdBQUcsRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLGFBQWEsRUFBRUMseUJBQXlCLEVBQUVDLFlBQVk7OEJBRDVGVDs7a0NBRVhDLEtBQUtDLE1BQU1DLFNBQVNDLE9BQU9DLFFBQVFDLFVBQVVDLGVBQWVDO1FBRWxFLE1BQUtDLFlBQVksR0FBR0E7OztpQkFKSFQ7O1lBT25CVSxLQUFBQTttQkFBQUEsU0FBQUEsa0JBQWtCO2dCQUNoQixPQUFPLElBQUksQ0FBQ0QsWUFBWTtZQUMxQjs7O1lBRUFFLEtBQUFBO21CQUFBQSxTQUFBQSxZQUFzQztvQkFBNUJDLHNCQUFBQSxpRUFBc0IsSUFBSTtnQkFDbEMsSUFBTUMs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