occam-verify-cli 0.0.682 → 0.0.684

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 (130) hide show
  1. package/lib/assignment/equality.js +60 -0
  2. package/lib/assignment/variable.js +60 -0
  3. package/lib/axiom.js +4 -4
  4. package/lib/axiomLemmaTheoremConjecture.js +29 -29
  5. package/lib/collection.js +154 -0
  6. package/lib/combinator.js +1 -1
  7. package/lib/conclusion.js +5 -5
  8. package/lib/conjecture.js +4 -4
  9. package/lib/consequent.js +3 -3
  10. package/lib/constructor.js +1 -1
  11. package/lib/context/file.js +9 -2
  12. package/lib/context/local.js +330 -0
  13. package/lib/context/localMeta.js +192 -0
  14. package/lib/context/release.js +1 -1
  15. package/lib/equality.js +19 -87
  16. package/lib/label.js +1 -1
  17. package/lib/lemma.js +4 -4
  18. package/lib/log.js +1 -1
  19. package/lib/metaType.js +1 -1
  20. package/lib/metavariable.js +1 -1
  21. package/lib/ocmbinator/bracketed.js +1 -1
  22. package/lib/premise.js +9 -9
  23. package/lib/rule.js +25 -25
  24. package/lib/step/metaproof.js +1 -1
  25. package/lib/step/proof.js +1 -1
  26. package/lib/substitution/metastatementForMetavariable.js +1 -1
  27. package/lib/substitution/statementForMetavariable.js +1 -1
  28. package/lib/substitution/termForVariable.js +1 -1
  29. package/lib/supposition.js +5 -5
  30. package/lib/term.js +68 -0
  31. package/lib/theorem.js +4 -4
  32. package/lib/type.js +5 -5
  33. package/lib/utilities/array.js +4 -4
  34. package/lib/utilities/collection.js +107 -0
  35. package/lib/variable.js +1 -1
  36. package/lib/verifier/node/metastatement.js +9 -9
  37. package/lib/verifier/node/statementAsCombinator.js +1 -1
  38. package/lib/verifier/node/termAsConstructor.js +2 -2
  39. package/lib/verifier/node.js +1 -1
  40. package/lib/verifier/nodes/metastatementForMetavariable/conclusion.js +1 -1
  41. package/lib/verifier/nodes/metastatementForMetavariable/premise.js +1 -1
  42. package/lib/verifier/nodes/metastatementForMetavariable.js +8 -8
  43. package/lib/verifier/nodes/statement.js +1 -1
  44. package/lib/verifier/nodes/statementForMetavariable/conclusion.js +1 -1
  45. package/lib/verifier/nodes/statementForMetavariable/premise.js +1 -1
  46. package/lib/verifier/nodes/statementForMetavariable.js +9 -9
  47. package/lib/verifier/nodes/term.js +3 -3
  48. package/lib/verifier/nodes/termForVariable/consequent.js +1 -1
  49. package/lib/verifier/nodes/termForVariable/supposition.js +1 -1
  50. package/lib/verifier/nodes/termForVariable.js +11 -11
  51. package/lib/verifier/nodes.js +1 -1
  52. package/lib/verify/axiom.js +6 -6
  53. package/lib/verify/conclusion.js +6 -6
  54. package/lib/verify/conjecture.js +7 -7
  55. package/lib/verify/consequent.js +6 -6
  56. package/lib/verify/derivation.js +17 -17
  57. package/lib/verify/equality.js +50 -18
  58. package/lib/verify/lemma.js +7 -7
  59. package/lib/verify/metastatement/qualified.js +7 -7
  60. package/lib/verify/metastatement/unqualified.js +7 -7
  61. package/lib/verify/metastatement.js +12 -12
  62. package/lib/verify/premise.js +7 -7
  63. package/lib/verify/proof.js +10 -7
  64. package/lib/verify/rule.js +6 -6
  65. package/lib/verify/ruleDerivation.js +17 -17
  66. package/lib/verify/ruleProof.js +6 -6
  67. package/lib/verify/statement/qualified.js +15 -15
  68. package/lib/verify/statement/unqualified.js +7 -7
  69. package/lib/verify/supposition.js +8 -8
  70. package/lib/verify/term.js +32 -31
  71. package/lib/verify/terms.js +11 -17
  72. package/lib/verify/theorem.js +7 -7
  73. package/lib/verify/typeAssertion.js +3 -3
  74. package/package.json +2 -2
  75. package/src/assignment/equality.js +21 -0
  76. package/src/assignment/variable.js +21 -0
  77. package/src/axiom.js +1 -1
  78. package/src/axiomLemmaTheoremConjecture.js +26 -26
  79. package/src/collection.js +101 -0
  80. package/src/conclusion.js +6 -6
  81. package/src/conjecture.js +1 -1
  82. package/src/consequent.js +4 -4
  83. package/src/context/file.js +9 -1
  84. package/src/context/local.js +311 -0
  85. package/src/context/{metaproof.js → localMeta.js} +16 -17
  86. package/src/equality.js +17 -111
  87. package/src/lemma.js +1 -1
  88. package/src/premise.js +12 -12
  89. package/src/rule.js +24 -24
  90. package/src/supposition.js +8 -8
  91. package/src/term.js +30 -0
  92. package/src/theorem.js +1 -1
  93. package/src/type.js +3 -3
  94. package/src/utilities/array.js +1 -1
  95. package/src/utilities/collection.js +83 -0
  96. package/src/verifier/node/metastatement.js +8 -8
  97. package/src/verifier/node/termAsConstructor.js +2 -2
  98. package/src/verifier/nodes/metastatementForMetavariable.js +7 -7
  99. package/src/verifier/nodes/statementForMetavariable.js +8 -8
  100. package/src/verifier/nodes/term.js +5 -4
  101. package/src/verifier/nodes/termForVariable.js +15 -14
  102. package/src/verify/axiom.js +5 -5
  103. package/src/verify/conclusion.js +5 -5
  104. package/src/verify/conjecture.js +6 -6
  105. package/src/verify/consequent.js +5 -5
  106. package/src/verify/derivation.js +16 -16
  107. package/src/verify/equality.js +81 -24
  108. package/src/verify/lemma.js +6 -6
  109. package/src/verify/metastatement/qualified.js +7 -7
  110. package/src/verify/metastatement/unqualified.js +6 -6
  111. package/src/verify/metastatement.js +11 -11
  112. package/src/verify/premise.js +6 -6
  113. package/src/verify/proof.js +13 -10
  114. package/src/verify/rule.js +5 -5
  115. package/src/verify/ruleDerivation.js +16 -16
  116. package/src/verify/ruleProof.js +5 -5
  117. package/src/verify/statement/qualified.js +15 -15
  118. package/src/verify/statement/unqualified.js +6 -6
  119. package/src/verify/supposition.js +7 -7
  120. package/src/verify/term.js +38 -35
  121. package/src/verify/terms.js +14 -28
  122. package/src/verify/theorem.js +6 -6
  123. package/src/verify/typeAssertion.js +3 -2
  124. package/lib/assignment.js +0 -74
  125. package/lib/context/metaproof.js +0 -192
  126. package/lib/context/proof.js +0 -245
  127. package/lib/verifier/nodes/equality.js +0 -155
  128. package/src/assignment.js +0 -36
  129. package/src/context/proof.js +0 -205
  130. package/src/verifier/nodes/equality.js +0 -68
@@ -0,0 +1,330 @@
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 _default;
9
+ }
10
+ });
11
+ var _variable = /*#__PURE__*/ _interop_require_default(require("../variable"));
12
+ var _equality = /*#__PURE__*/ _interop_require_default(require("../equality"));
13
+ var _collection = /*#__PURE__*/ _interop_require_default(require("../collection"));
14
+ var _file = /*#__PURE__*/ _interop_require_default(require("../mixins/file"));
15
+ var _logging = /*#__PURE__*/ _interop_require_default(require("../mixins/logging"));
16
+ var _array = require("../utilities/array");
17
+ var _collection1 = require("../utilities/collection");
18
+ function _array_like_to_array(arr, len) {
19
+ if (len == null || len > arr.length) len = arr.length;
20
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
21
+ return arr2;
22
+ }
23
+ function _array_without_holes(arr) {
24
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
25
+ }
26
+ function _class_call_check(instance, Constructor) {
27
+ if (!(instance instanceof Constructor)) {
28
+ throw new TypeError("Cannot call a class as a function");
29
+ }
30
+ }
31
+ function _defineProperties(target, props) {
32
+ for(var i = 0; i < props.length; i++){
33
+ var descriptor = props[i];
34
+ descriptor.enumerable = descriptor.enumerable || false;
35
+ descriptor.configurable = true;
36
+ if ("value" in descriptor) descriptor.writable = true;
37
+ Object.defineProperty(target, descriptor.key, descriptor);
38
+ }
39
+ }
40
+ function _create_class(Constructor, protoProps, staticProps) {
41
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
42
+ if (staticProps) _defineProperties(Constructor, staticProps);
43
+ return Constructor;
44
+ }
45
+ function _interop_require_default(obj) {
46
+ return obj && obj.__esModule ? obj : {
47
+ default: obj
48
+ };
49
+ }
50
+ function _iterable_to_array(iter) {
51
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
52
+ }
53
+ function _non_iterable_spread() {
54
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
55
+ }
56
+ function _to_consumable_array(arr) {
57
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
58
+ }
59
+ function _unsupported_iterable_to_array(o, minLen) {
60
+ if (!o) return;
61
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
62
+ var n = Object.prototype.toString.call(o).slice(8, -1);
63
+ if (n === "Object" && o.constructor) n = o.constructor.name;
64
+ if (n === "Map" || n === "Set") return Array.from(n);
65
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
66
+ }
67
+ var LocalContext = /*#__PURE__*/ function() {
68
+ function LocalContext(context, variables, proofSteps, collections) {
69
+ _class_call_check(this, LocalContext);
70
+ this.context = context;
71
+ this.variables = variables;
72
+ this.proofSteps = proofSteps;
73
+ this.collections = collections;
74
+ }
75
+ _create_class(LocalContext, [
76
+ {
77
+ key: "getContext",
78
+ value: function getContext() {
79
+ return this.context;
80
+ }
81
+ },
82
+ {
83
+ key: "getVariables",
84
+ value: function getVariables() {
85
+ var variables = this.context.getVariables();
86
+ variables = _to_consumable_array(variables).concat(_to_consumable_array(this.variables));
87
+ return variables;
88
+ }
89
+ },
90
+ {
91
+ key: "getProofSteps",
92
+ value: function getProofSteps() {
93
+ var proofSteps = this.context.getProofSteps();
94
+ proofSteps = _to_consumable_array(proofSteps).concat(_to_consumable_array(this.proofSteps));
95
+ return proofSteps;
96
+ }
97
+ },
98
+ {
99
+ key: "getCollections",
100
+ value: function getCollections() {
101
+ var collections = this.context.getCollections();
102
+ var collectionsA = collections, collectionsB = this.collections;
103
+ collections = (0, _collection1.mergeCollections)(collectionsA, collectionsB); ///
104
+ return collections;
105
+ }
106
+ },
107
+ {
108
+ key: "getEqualities",
109
+ value: function getEqualities() {
110
+ var equalities = this.context.getEqualities();
111
+ this.proofSteps.forEach(function(proofStep) {
112
+ var equality = _equality.default.fromProofStep(proofStep);
113
+ if (equality !== null) {
114
+ equalities.push(equality);
115
+ }
116
+ });
117
+ return equalities;
118
+ }
119
+ },
120
+ {
121
+ key: "getLastProofStep",
122
+ value: function getLastProofStep() {
123
+ var lastProofStep = null;
124
+ var proofStepsLength = this.proofSteps.length;
125
+ if (proofStepsLength > 0) {
126
+ lastProofStep = (0, _array.last)(this.proofSteps);
127
+ }
128
+ return lastProofStep;
129
+ }
130
+ },
131
+ {
132
+ key: "getMetavariables",
133
+ value: function getMetavariables() {
134
+ return this.context.getMetavariables();
135
+ }
136
+ },
137
+ {
138
+ key: "addEquality",
139
+ value: function addEquality(equality) {
140
+ var equalityReflexive = equality.isReflexive();
141
+ if (equalityReflexive) {
142
+ ///
143
+ } else {
144
+ var leftTerm = equality.getLeftTerm(), rightTerm = equality.getRightTerm(), leftCollection = this.findCollectionByTerm(leftTerm), rightCollection = this.findCollectionByTerm(rightTerm);
145
+ if (false) {
146
+ ///
147
+ } else if (leftCollection === null && rightCollection === null) {
148
+ var collection = _collection.default.fromEquality(equality);
149
+ this.addCollection(collection);
150
+ } else if (leftCollection !== null && rightCollection === null) {
151
+ var term = rightTerm, collection1 = leftCollection; ///
152
+ collection1.addTerm(term);
153
+ } else if (leftCollection === null && rightCollection !== null) {
154
+ var term1 = leftTerm, collection2 = rightCollection; ///
155
+ collection2.addTerm(term1);
156
+ } else if (leftCollection !== null && rightCollection !== null) {
157
+ debugger;
158
+ }
159
+ }
160
+ }
161
+ },
162
+ {
163
+ key: "addVariable",
164
+ value: function addVariable(variable) {
165
+ var variableName = variable.getName();
166
+ (0, _array.filter)(this.variables, function(variable) {
167
+ var name = variable.getName(), nameVariableName = name === variableName;
168
+ if (!nameVariableName) {
169
+ return true;
170
+ }
171
+ });
172
+ this.variables.push(variable);
173
+ }
174
+ },
175
+ {
176
+ key: "addProofStep",
177
+ value: function addProofStep(proofStep) {
178
+ this.proofSteps.push(proofStep);
179
+ }
180
+ },
181
+ {
182
+ key: "addCollection",
183
+ value: function addCollection(collection) {
184
+ this.collections.push(collection);
185
+ }
186
+ },
187
+ {
188
+ key: "matchStatement",
189
+ value: function matchStatement(statementNode) {
190
+ var statementMatches = false;
191
+ if (!statementMatches) {
192
+ var proofStepMatchesStatement = this.proofSteps.some(function(proofStep) {
193
+ var proofStepMatchesStatement = proofStep.match(statementNode);
194
+ if (proofStepMatchesStatement) {
195
+ return true;
196
+ }
197
+ });
198
+ statementMatches = proofStepMatchesStatement; ///
199
+ }
200
+ if (!statementMatches) {
201
+ statementMatches = this.context.matchStatement(statementNode);
202
+ }
203
+ return statementMatches;
204
+ }
205
+ },
206
+ {
207
+ key: "findCollectionByType",
208
+ value: function findCollectionByType(type) {
209
+ var collections = this.getCollections(), collection = (0, _collection1.findCollectionByType)(collections, type);
210
+ return collection;
211
+ }
212
+ },
213
+ {
214
+ key: "findCollectionByTerm",
215
+ value: function findCollectionByTerm(term) {
216
+ var collections = this.getCollections(), collection = (0, _collection1.findCollectionByTerm)(collections, term);
217
+ return collection;
218
+ }
219
+ },
220
+ {
221
+ key: "findCollectionByTerms",
222
+ value: function findCollectionByTerms(terms) {
223
+ var collections = this.getCollections(), collection = (0, _collection1.findCollectionByTerms)(collections, terms);
224
+ return collection;
225
+ }
226
+ },
227
+ {
228
+ key: "findVariableByVariableName",
229
+ value: function findVariableByVariableName(variableName) {
230
+ var name = variableName, variables = this.getVariables(), variable = variables.find(function(variable) {
231
+ var matches = variable.matchName(name);
232
+ if (matches) {
233
+ return true;
234
+ }
235
+ }) || null;
236
+ return variable;
237
+ }
238
+ },
239
+ {
240
+ key: "isVariablePresentByVariableName",
241
+ value: function isVariablePresentByVariableName(variableName) {
242
+ var variable = this.findVariableByVariableName(variableName), variablePresent = variable !== null;
243
+ return variablePresent;
244
+ }
245
+ },
246
+ {
247
+ key: "isEqualityEqual",
248
+ value: function isEqualityEqual(equality) {
249
+ var equalityEqual;
250
+ var equalityReflexive = equality.isReflexive();
251
+ if (equalityReflexive) {
252
+ equalityEqual = true;
253
+ } else {
254
+ var leftTerm = equality.getLeftTerm(), rightTerm = equality.getRightTerm(), terms = [
255
+ leftTerm,
256
+ rightTerm
257
+ ], termsEqual = this.areTermsEqual(terms);
258
+ equalityEqual = termsEqual; ///
259
+ }
260
+ return equalityEqual;
261
+ }
262
+ },
263
+ {
264
+ key: "areTermsEqual",
265
+ value: function areTermsEqual(terms) {
266
+ var collection = this.findCollectionByTerms(terms), termsEqual = collection !== null;
267
+ return termsEqual;
268
+ }
269
+ },
270
+ {
271
+ key: "toJSON",
272
+ value: function toJSON(tokens) {
273
+ var variables = this.variables.map(function(variable) {
274
+ var variableJSON = variable.toJSON(tokens);
275
+ variable = variableJSON;
276
+ return variable;
277
+ }), json = {
278
+ variables: variables
279
+ };
280
+ return json;
281
+ }
282
+ }
283
+ ], [
284
+ {
285
+ key: "fromFileContext",
286
+ value: function fromFileContext(fileContext) {
287
+ var context = fileContext, variables = [], proofSteps = [], collections = [], localContext = new LocalContext(context, variables, proofSteps, collections);
288
+ return localContext;
289
+ }
290
+ },
291
+ {
292
+ key: "fromLocalContext",
293
+ value: function fromLocalContext(localContext) {
294
+ var context = localContext, variables = [], proofSteps = [], collections = [];
295
+ localContext = new LocalContext(context, variables, proofSteps, collections);
296
+ return localContext;
297
+ }
298
+ },
299
+ {
300
+ key: "fromJSONAndFileContext",
301
+ value: function fromJSONAndFileContext(json, fileContext) {
302
+ var variables = json.variables;
303
+ var variablesJSON = variables;
304
+ variables = variablesJSON.map(function(variableJSON) {
305
+ var _$json = variableJSON, variable = _variable.default.fromJSONAndFileContext(_$json, fileContext);
306
+ return variable;
307
+ });
308
+ var context = fileContext, proofSteps = [], collections = [], localContext = new LocalContext(context, variables, proofSteps, collections);
309
+ return localContext;
310
+ }
311
+ },
312
+ {
313
+ key: "fromLocalContextAndAssignments",
314
+ value: function fromLocalContextAndAssignments(localContext, assignments) {
315
+ var context = localContext, variables = assignments.map(function(assignment) {
316
+ var variable = assignment.getVariable();
317
+ return variable;
318
+ }), proofSteps = [], collections = [];
319
+ localContext = new LocalContext(context, variables, proofSteps, collections);
320
+ return localContext;
321
+ }
322
+ }
323
+ ]);
324
+ return LocalContext;
325
+ }();
326
+ Object.assign(LocalContext.prototype, _file.default);
327
+ Object.assign(LocalContext.prototype, _logging.default);
328
+ var _default = LocalContext;
329
+
330
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xvY2FsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmFyaWFibGUgZnJvbSBcIi4uL3ZhcmlhYmxlXCI7XG5pbXBvcnQgRXF1YWxpdHkgZnJvbSBcIi4uL2VxdWFsaXR5XCI7XG5pbXBvcnQgQ29sbGVjdGlvbiBmcm9tIFwiLi4vY29sbGVjdGlvblwiO1xuaW1wb3J0IGZpbGVNaXhpbnMgZnJvbSBcIi4uL21peGlucy9maWxlXCI7XG5pbXBvcnQgbG9nZ2luZ01peGlucyBmcm9tIFwiLi4vbWl4aW5zL2xvZ2dpbmdcIjtcblxuaW1wb3J0IHsgbGFzdCwgZmlsdGVyIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgbWVyZ2VDb2xsZWN0aW9ucywgZmluZENvbGxlY3Rpb25CeVR5cGUsIGZpbmRDb2xsZWN0aW9uQnlUZXJtLCBmaW5kQ29sbGVjdGlvbkJ5VGVybXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbGxlY3Rpb25cIjtcblxuY2xhc3MgTG9jYWxDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgdmFyaWFibGVzLCBwcm9vZlN0ZXBzLCBjb2xsZWN0aW9ucykge1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy52YXJpYWJsZXMgPSB2YXJpYWJsZXM7XG4gICAgdGhpcy5wcm9vZlN0ZXBzID0gcHJvb2ZTdGVwcztcbiAgICB0aGlzLmNvbGxlY3Rpb25zID0gY29sbGVjdGlvbnM7XG4gIH1cblxuICBnZXRDb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQ7XG4gIH1cblxuICBnZXRWYXJpYWJsZXMoKSB7XG4gICAgbGV0IHZhcmlhYmxlcyA9IHRoaXMuY29udGV4dC5nZXRWYXJpYWJsZXMoKTtcblxuICAgIHZhcmlhYmxlcyA9IFsgLy8vXG4gICAgICAuLi52YXJpYWJsZXMsXG4gICAgICAuLi50aGlzLnZhcmlhYmxlc1xuICAgIF07XG5cbiAgICByZXR1cm4gdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0UHJvb2ZTdGVwcygpIHtcbiAgICBsZXQgcHJvb2ZTdGVwcyA9IHRoaXMuY29udGV4dC5nZXRQcm9vZlN0ZXBzKCk7XG5cbiAgICBwcm9vZlN0ZXBzID0gWyAgLy8vXG4gICAgICAuLi5wcm9vZlN0ZXBzLFxuICAgICAgLi4udGhpcy5wcm9vZlN0ZXBzXG4gICAgXTtcblxuICAgIHJldHVybiBwcm9vZlN0ZXBzO1xuICB9XG5cbiAgZ2V0Q29sbGVjdGlvbnMoKSB7XG4gICAgbGV0IGNvbGxlY3Rpb25zID0gdGhpcy5jb250ZXh0LmdldENvbGxlY3Rpb25zKCk7XG5cbiAgICBjb25zdCBjb2xsZWN0aW9uc0EgPSBjb2xsZWN0aW9ucywgLy8vXG4gICAgICAgICAgY29sbGVjdGlvbnNCID0gdGhpcy5jb2xsZWN0aW9ucztcblxuICAgIGNvbGxlY3Rpb25zID0gbWVyZ2VDb2xsZWN0aW9ucyhjb2xsZWN0aW9uc0EsIGNvbGxlY3Rpb25zQik7IC8vL1xuXG4gICAgcmV0dXJuIGNvbGxlY3Rpb25zO1xuICB9XG5cbiAgZ2V0RXF1YWxpdGllcygpIHtcbiAgICBjb25zdCBlcXVhbGl0aWVzID0gdGhpcy5jb250ZXh0LmdldEVxdWFsaXRpZXMoKTtcblxuICAgIHRoaXMucHJvb2ZTdGVwcy5mb3JFYWNoKChwcm9vZlN0ZXApID0+IHtcbiAgICAgIGNvbnN0IGVxdWFsaXR5ID0gRXF1YWxpdHkuZnJvbVByb29mU3RlcChwcm9vZlN0ZXApO1xuXG4gICAgICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgICAgZXF1YWxpdGllcy5wdXNoKGVxdWFsaXR5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0TGFzdFByb29mU3RlcCgpIHtcbiAgICBsZXQgbGFzdFByb29mU3RlcCA9IG51bGw7XG5cbiAgICBjb25zdCBwcm9vZlN0ZXBzTGVuZ3RoID0gdGhpcy5wcm9vZlN0ZXBzLmxlbmd0aDtcblxuICAgIGlmIChwcm9vZlN0ZXBzTGVuZ3RoID4gMCkge1xuICAgICAgbGFzdFByb29mU3RlcCA9IGxhc3QodGhpcy5wcm9vZlN0ZXBzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdFByb29mU3RlcDtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZXMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0TWV0YXZhcmlhYmxlcygpOyB9XG5cbiAgYWRkRXF1YWxpdHkoZXF1YWxpdHkpIHtcbiAgICBjb25zdCBlcXVhbGl0eVJlZmxleGl2ZSA9IGVxdWFsaXR5LmlzUmVmbGV4aXZlKCk7XG5cbiAgICBpZiAoZXF1YWxpdHlSZWZsZXhpdmUpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsZWZ0VGVybSA9IGVxdWFsaXR5LmdldExlZnRUZXJtKCksXG4gICAgICAgICAgICByaWdodFRlcm0gPSBlcXVhbGl0eS5nZXRSaWdodFRlcm0oKSxcbiAgICAgICAgICAgIGxlZnRDb2xsZWN0aW9uID0gdGhpcy5maW5kQ29sbGVjdGlvbkJ5VGVybShsZWZ0VGVybSksXG4gICAgICAgICAgICByaWdodENvbGxlY3Rpb24gPSB0aGlzLmZpbmRDb2xsZWN0aW9uQnlUZXJtKHJpZ2h0VGVybSk7XG5cbiAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICAvLy9cbiAgICAgIH0gZWxzZSBpZiAoKGxlZnRDb2xsZWN0aW9uID09PSBudWxsKSAmJiAocmlnaHRDb2xsZWN0aW9uID09PSBudWxsKSkge1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gQ29sbGVjdGlvbi5mcm9tRXF1YWxpdHkoZXF1YWxpdHkpO1xuXG4gICAgICAgIHRoaXMuYWRkQ29sbGVjdGlvbihjb2xsZWN0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoKGxlZnRDb2xsZWN0aW9uICE9PSBudWxsKSAmJiAocmlnaHRDb2xsZWN0aW9uID09PSBudWxsKSkge1xuICAgICAgICBjb25zdCB0ZXJtID0gcmlnaHRUZXJtLCAvLy9cbiAgICAgICAgICAgICAgY29sbGVjdGlvbiA9IGxlZnRDb2xsZWN0aW9uOyAgLy8vXG5cbiAgICAgICAgY29sbGVjdGlvbi5hZGRUZXJtKHRlcm0pO1xuICAgICAgfSBlbHNlIGlmICgobGVmdENvbGxlY3Rpb24gPT09IG51bGwpICYmIChyaWdodENvbGxlY3Rpb24gIT09IG51bGwpKSB7XG4gICAgICAgIGNvbnN0IHRlcm0gPSBsZWZ0VGVybSwgLy8vXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb24gPSByaWdodENvbGxlY3Rpb247ICAvLy9cblxuICAgICAgICBjb2xsZWN0aW9uLmFkZFRlcm0odGVybSk7XG4gICAgICB9IGVsc2UgaWYgKChsZWZ0Q29sbGVjdGlvbiAhPT0gbnVsbCkgJiYgKHJpZ2h0Q29sbGVjdGlvbiAhPT0gbnVsbCkpIHtcblxuICAgICAgICBkZWJ1Z2dlclxuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkVmFyaWFibGUodmFyaWFibGUpIHtcbiAgICBjb25zdCB2YXJpYWJsZU5hbWUgPSB2YXJpYWJsZS5nZXROYW1lKCk7XG5cbiAgICBmaWx0ZXIodGhpcy52YXJpYWJsZXMsICh2YXJpYWJsZSkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IHZhcmlhYmxlLmdldE5hbWUoKSxcbiAgICAgICAgICAgIG5hbWVWYXJpYWJsZU5hbWUgPSAobmFtZSA9PT0gdmFyaWFibGVOYW1lKTtcblxuICAgICAgaWYgKCFuYW1lVmFyaWFibGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy52YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7XG4gIH1cblxuICBhZGRQcm9vZlN0ZXAocHJvb2ZTdGVwKSB7XG4gICAgdGhpcy5wcm9vZlN0ZXBzLnB1c2gocHJvb2ZTdGVwKTtcbiAgfVxuXG4gIGFkZENvbGxlY3Rpb24oY29sbGVjdGlvbikge1xuICAgIHRoaXMuY29sbGVjdGlvbnMucHVzaChjb2xsZWN0aW9uKTtcbiAgfVxuXG4gIG1hdGNoU3RhdGVtZW50KHN0YXRlbWVudE5vZGUpIHtcbiAgICBsZXQgc3RhdGVtZW50TWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgaWYgKCFzdGF0ZW1lbnRNYXRjaGVzKSB7XG4gICAgICBjb25zdCBwcm9vZlN0ZXBNYXRjaGVzU3RhdGVtZW50ID0gdGhpcy5wcm9vZlN0ZXBzLnNvbWUoKHByb29mU3RlcCkgPT4ge1xuICAgICAgICBjb25zdCBwcm9vZlN0ZXBNYXRjaGVzU3RhdGVtZW50ID0gcHJvb2ZTdGVwLm1hdGNoKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgICAgIGlmIChwcm9vZlN0ZXBNYXRjaGVzU3RhdGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzdGF0ZW1lbnRNYXRjaGVzID0gcHJvb2ZTdGVwTWF0Y2hlc1N0YXRlbWVudDsgLy8vXG4gICAgfVxuXG4gICAgaWYgKCFzdGF0ZW1lbnRNYXRjaGVzKSB7XG4gICAgICBzdGF0ZW1lbnRNYXRjaGVzID0gdGhpcy5jb250ZXh0Lm1hdGNoU3RhdGVtZW50KHN0YXRlbWVudE5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRNYXRjaGVzO1xuICB9XG5cbiAgZmluZENvbGxlY3Rpb25CeVR5cGUodHlwZSkge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25zID0gdGhpcy5nZXRDb2xsZWN0aW9ucygpLFxuICAgICAgICAgIGNvbGxlY3Rpb24gPSBmaW5kQ29sbGVjdGlvbkJ5VHlwZShjb2xsZWN0aW9ucywgdHlwZSk7XG5cbiAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgfVxuXG4gIGZpbmRDb2xsZWN0aW9uQnlUZXJtKHRlcm0pIHtcbiAgICBjb25zdCBjb2xsZWN0aW9ucyA9IHRoaXMuZ2V0Q29sbGVjdGlvbnMoKSxcbiAgICAgICAgICBjb2xsZWN0aW9uID0gZmluZENvbGxlY3Rpb25CeVRlcm0oY29sbGVjdGlvbnMsIHRlcm0pO1xuXG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gIH1cblxuICBmaW5kQ29sbGVjdGlvbkJ5VGVybXModGVybXMpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9ucyA9IHRoaXMuZ2V0Q29sbGVjdGlvbnMoKSxcbiAgICAgICAgICBjb2xsZWN0aW9uID0gZmluZENvbGxlY3Rpb25CeVRlcm1zKGNvbGxlY3Rpb25zLCB0ZXJtcyk7XG5cbiAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgfVxuXG4gIGZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IG5hbWUgPSB2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICB2YXJpYWJsZXMgPSB0aGlzLmdldFZhcmlhYmxlcygpLFxuICAgICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVzLmZpbmQoKHZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gdmFyaWFibGUubWF0Y2hOYW1lKG5hbWUpO1xuXG4gICAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlO1xuICB9XG5cbiAgaXNWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCB2YXJpYWJsZSA9IHRoaXMuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKSxcbiAgICAgICAgICB2YXJpYWJsZVByZXNlbnQgPSAodmFyaWFibGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzRXF1YWxpdHlFcXVhbChlcXVhbGl0eSkge1xuICAgIGxldCBlcXVhbGl0eUVxdWFsO1xuXG4gICAgY29uc3QgZXF1YWxpdHlSZWZsZXhpdmUgPSBlcXVhbGl0eS5pc1JlZmxleGl2ZSgpO1xuXG4gICAgaWYgKGVxdWFsaXR5UmVmbGV4aXZlKSB7XG4gICAgICBlcXVhbGl0eUVxdWFsID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGVmdFRlcm0gPSBlcXVhbGl0eS5nZXRMZWZ0VGVybSgpLFxuICAgICAgICAgICAgcmlnaHRUZXJtID0gZXF1YWxpdHkuZ2V0UmlnaHRUZXJtKCksXG4gICAgICAgICAgICB0ZXJtcyA9IFtcbiAgICAgICAgICAgICAgbGVmdFRlcm0sXG4gICAgICAgICAgICAgIHJpZ2h0VGVybVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHRlcm1zRXF1YWwgPSB0aGlzLmFyZVRlcm1zRXF1YWwodGVybXMpO1xuXG4gICAgICBlcXVhbGl0eUVxdWFsID0gdGVybXNFcXVhbDsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIGVxdWFsaXR5RXF1YWw7XG4gIH1cblxuICBhcmVUZXJtc0VxdWFsKHRlcm1zKSB7XG4gICAgY29uc3QgY29sbGVjdGlvbiA9IHRoaXMuZmluZENvbGxlY3Rpb25CeVRlcm1zKHRlcm1zKSxcbiAgICAgICAgICB0ZXJtc0VxdWFsID0gKGNvbGxlY3Rpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHRlcm1zRXF1YWw7XG4gIH1cblxuICB0b0pTT04odG9rZW5zKSB7XG4gICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy52YXJpYWJsZXMubWFwKCh2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVKU09OID0gdmFyaWFibGUudG9KU09OKHRva2Vucyk7XG5cbiAgICAgICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVKU09OO1xuXG4gICAgICAgICAgICByZXR1cm4gdmFyaWFibGU7XG4gICAgICAgICAgfSksXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHZhcmlhYmxlc1xuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRmlsZUNvbnRleHQoZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gZmlsZUNvbnRleHQsICAvLy9cbiAgICAgICAgICB2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBwcm9vZlN0ZXBzID0gW10sXG4gICAgICAgICAgY29sbGVjdGlvbnMgPSBbXSxcbiAgICAgICAgICBsb2NhbENvbnRleHQgPSBuZXcgTG9jYWxDb250ZXh0KGNvbnRleHQsIHZhcmlhYmxlcywgcHJvb2ZTdGVwcywgY29sbGVjdGlvbnMpO1xuXG4gICAgcmV0dXJuIGxvY2FsQ29udGV4dDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTG9jYWxDb250ZXh0KGxvY2FsQ29udGV4dCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBsb2NhbENvbnRleHQsICAvLy9cbiAgICAgICAgICB2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBwcm9vZlN0ZXBzID0gW10sXG4gICAgICAgICAgY29sbGVjdGlvbnMgPSBbXTtcblxuICAgIGxvY2FsQ29udGV4dCA9IG5ldyBMb2NhbENvbnRleHQoY29udGV4dCwgdmFyaWFibGVzLCBwcm9vZlN0ZXBzLCBjb2xsZWN0aW9ucyk7XG5cbiAgICByZXR1cm4gbG9jYWxDb250ZXh0O1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OQW5kRmlsZUNvbnRleHQoanNvbiwgZmlsZUNvbnRleHQpIHtcbiAgICBsZXQgeyB2YXJpYWJsZXMgfSA9IGpzb247XG5cbiAgICBjb25zdCB2YXJpYWJsZXNKU09OID0gdmFyaWFibGVzO1xuXG4gICAgdmFyaWFibGVzID0gdmFyaWFibGVzSlNPTi5tYXAoKHZhcmlhYmxlSlNPTikgPT4ge1xuICAgICAgY29uc3QganNvbiA9IHZhcmlhYmxlSlNPTiwgIC8vL1xuICAgICAgICAgICAgdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tSlNPTkFuZEZpbGVDb250ZXh0KGpzb24sIGZpbGVDb250ZXh0KTtcblxuICAgICAgcmV0dXJuIHZhcmlhYmxlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY29udGV4dCA9IGZpbGVDb250ZXh0LCAgLy8vXG4gICAgICAgICAgcHJvb2ZTdGVwcyA9IFtdLFxuICAgICAgICAgIGNvbGxlY3Rpb25zID0gW10sXG4gICAgICAgICAgbG9jYWxDb250ZXh0ID0gbmV3IExvY2FsQ29udGV4dChjb250ZXh0LCB2YXJpYWJsZXMsIHByb29mU3RlcHMsIGNvbGxlY3Rpb25zKTtcblxuICAgIHJldHVybiBsb2NhbENvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbUxvY2FsQ29udGV4dEFuZEFzc2lnbm1lbnRzKGxvY2FsQ29udGV4dCwgYXNzaWdubWVudHMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gbG9jYWxDb250ZXh0LCAgLy8vXG4gICAgICAgICAgdmFyaWFibGVzID0gYXNzaWdubWVudHMubWFwKChhc3NpZ25tZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGFzc2lnbm1lbnQuZ2V0VmFyaWFibGUoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHByb29mU3RlcHMgPSBbXSxcbiAgICAgICAgICBjb2xsZWN0aW9ucyA9IFtdO1xuXG4gICAgbG9jYWxDb250ZXh0ID0gbmV3IExvY2FsQ29udGV4dChjb250ZXh0LCB2YXJpYWJsZXMsIHByb29mU3RlcHMsIGNvbGxlY3Rpb25zKTtcblxuICAgIHJldHVybiBsb2NhbENvbnRleHQ7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihMb2NhbENvbnRleHQucHJvdG90eXBlLCBmaWxlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oTG9jYWxDb250ZXh0LnByb3RvdHlwZSwgbG9nZ2luZ01peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IExvY2FsQ29udGV4dDtcbiJdLCJuYW1lcyI6WyJMb2NhbENvbnRleHQiLCJjb250ZXh0IiwidmFyaWFibGVzIiwicHJvb2ZTdGVwcyIsImNvbGxlY3Rpb25zIiwiZ2V0Q29udGV4dCIsImdldFZhcmlhYmxlcyIsImdldFByb29mU3RlcHMiLCJnZXRDb2xsZWN0aW9ucyIsImNvbGxlY3Rpb25zQSIsImNvbGxlY3Rpb25zQiIsIm1lcmdlQ29sbGVjdGlvbnMiLCJnZXRFcXVhbGl0aWVzIiwiZXF1YWxpdGllcyIsImZvckVhY2giLCJwcm9vZlN0ZXAiLCJlcXVhbGl0eSIsIkVxdWFsaXR5IiwiZnJvbVByb29mU3RlcCIsInB1c2giLCJnZXRMYXN0UHJvb2ZTdGVwIiwibGFzdFByb29mU3RlcCIsInByb29mU3RlcHNMZW5ndGgiLCJsZW5ndGgiLCJsYXN0IiwiZ2V0TWV0YXZhcmlhYmxlcyIsImFkZEVxdWFsaXR5IiwiZXF1YWxpdHlSZWZsZXhpdmUiLCJpc1JlZmxleGl2ZSIsImxlZnRUZXJtIiwiZ2V0TGVmdFRlcm0iLCJyaWdodFRlcm0iLCJnZXRSaWdodFRlcm0iLCJsZWZ0Q29sbGVjdGlvbiIsImZpbmRDb2xsZWN0aW9uQnlUZXJtIiwicmlnaHRDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsIkNvbGxlY3Rpb24iLCJmcm9tRXF1YWxpdHkiLCJhZGRDb2xsZWN0aW9uIiwidGVybSIsImFkZFRlcm0iLCJhZGRWYXJpYWJsZSIsInZhcmlhYmxlIiwidmFyaWFibGVOYW1lIiwiZ2V0TmFtZSIsImZpbHRlciIsIm5hbWUiLCJuYW1lVmFyaWFibGVOYW1lIiwiYWRkUHJvb2ZTdGVwIiwibWF0Y2hTdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50TWF0Y2hlcyIsInByb29mU3RlcE1hdGNoZXNTdGF0ZW1lbnQiLCJzb21lIiwibWF0Y2giLCJmaW5kQ29sbGVjdGlvbkJ5VHlwZSIsInR5cGUiLCJmaW5kQ29sbGVjdGlvbkJ5VGVybXMiLCJ0ZXJtcyIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lIiwiZmluZCIsIm1hdGNoZXMiLCJtYXRjaE5hbWUiLCJpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lIiwidmFyaWFibGVQcmVzZW50IiwiaXNFcXVhbGl0eUVxdWFsIiwiZXF1YWxpdHlFcXVhbCIsInRlcm1zRXF1YWwiLCJhcmVUZXJtc0VxdWFsIiwidG9KU09OIiwidG9rZW5zIiwibWFwIiwidmFyaWFibGVKU09OIiwianNvbiIsImZyb21GaWxlQ29udGV4dCIsImZpbGVDb250ZXh0IiwibG9jYWxDb250ZXh0IiwiZnJvbUxvY2FsQ29udGV4dCIsImZyb21KU09OQW5kRmlsZUNvbnRleHQiLCJ2YXJpYWJsZXNKU09OIiwiVmFyaWFibGUiLCJmcm9tTG9jYWxDb250ZXh0QW5kQXNzaWdubWVudHMiLCJhc3NpZ25tZW50cyIsImFzc2lnbm1lbnQiLCJnZXRWYXJpYWJsZSIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSIsImZpbGVNaXhpbnMiLCJsb2dnaW5nTWl4aW5zIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFzVEE7OztlQUFBOzs7K0RBcFRxQjsrREFDQTtpRUFDRTsyREFDQTs4REFDRztxQkFFRzsyQkFDdUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXBHLElBQUEsQUFBTUEsNkJBQUQsQUFBTDthQUFNQSxhQUNRQyxPQUFPLEVBQUVDLFNBQVMsRUFBRUMsVUFBVSxFQUFFQyxXQUFXO2dDQURuREo7UUFFRixJQUFJLENBQUNDLE9BQU8sR0FBR0E7UUFDZixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTs7a0JBTGpCSjs7WUFRSkssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSixPQUFPO1lBQ3JCOzs7WUFFQUssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQUlKLFlBQVksSUFBSSxDQUFDRCxPQUFPLENBQUNLLFlBQVk7Z0JBRXpDSixZQUFZLEFBQ1YscUJBQUdBLGtCQUNILHFCQUFHLElBQUksQ0FBQ0EsU0FBUztnQkFHbkIsT0FBT0E7WUFDVDs7O1lBRUFLLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFJSixhQUFhLElB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
@@ -0,0 +1,192 @@
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 _default;
9
+ }
10
+ });
11
+ var _file = /*#__PURE__*/ _interop_require_default(require("../mixins/file"));
12
+ var _logging = /*#__PURE__*/ _interop_require_default(require("../mixins/logging"));
13
+ var _array = require("../utilities/array");
14
+ function _array_like_to_array(arr, len) {
15
+ if (len == null || len > arr.length) len = arr.length;
16
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
17
+ return arr2;
18
+ }
19
+ function _array_without_holes(arr) {
20
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
21
+ }
22
+ function _class_call_check(instance, Constructor) {
23
+ if (!(instance instanceof Constructor)) {
24
+ throw new TypeError("Cannot call a class as a function");
25
+ }
26
+ }
27
+ function _defineProperties(target, props) {
28
+ for(var i = 0; i < props.length; i++){
29
+ var descriptor = props[i];
30
+ descriptor.enumerable = descriptor.enumerable || false;
31
+ descriptor.configurable = true;
32
+ if ("value" in descriptor) descriptor.writable = true;
33
+ Object.defineProperty(target, descriptor.key, descriptor);
34
+ }
35
+ }
36
+ function _create_class(Constructor, protoProps, staticProps) {
37
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
38
+ if (staticProps) _defineProperties(Constructor, staticProps);
39
+ return Constructor;
40
+ }
41
+ function _interop_require_default(obj) {
42
+ return obj && obj.__esModule ? obj : {
43
+ default: obj
44
+ };
45
+ }
46
+ function _iterable_to_array(iter) {
47
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
48
+ }
49
+ function _non_iterable_spread() {
50
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
51
+ }
52
+ function _to_consumable_array(arr) {
53
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
54
+ }
55
+ function _unsupported_iterable_to_array(o, minLen) {
56
+ if (!o) return;
57
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
58
+ var n = Object.prototype.toString.call(o).slice(8, -1);
59
+ if (n === "Object" && o.constructor) n = o.constructor.name;
60
+ if (n === "Map" || n === "Set") return Array.from(n);
61
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
62
+ }
63
+ var LocalMetaContext = /*#__PURE__*/ function() {
64
+ function LocalMetaContext(context, metavariables, metaproofSteps) {
65
+ _class_call_check(this, LocalMetaContext);
66
+ this.context = context;
67
+ this.metavariables = metavariables;
68
+ this.metaproofSteps = metaproofSteps;
69
+ }
70
+ _create_class(LocalMetaContext, [
71
+ {
72
+ key: "getContext",
73
+ value: function getContext() {
74
+ return this.context;
75
+ }
76
+ },
77
+ {
78
+ key: "getMetavariables",
79
+ value: function getMetavariables() {
80
+ var metavariables = this.context.getMetavariables();
81
+ metavariables = _to_consumable_array(metavariables).concat([
82
+ this.metavariables
83
+ ]);
84
+ return metavariables;
85
+ }
86
+ },
87
+ {
88
+ key: "getMetaproofSteps",
89
+ value: function getMetaproofSteps() {
90
+ var metaproofSteps = this.context.getMetaproofSteps();
91
+ metaproofSteps = _to_consumable_array(metaproofSteps).concat(_to_consumable_array(this.metaproofSteps));
92
+ return metaproofSteps;
93
+ }
94
+ },
95
+ {
96
+ key: "getVariables",
97
+ value: function getVariables() {
98
+ return this.context.getVariables();
99
+ }
100
+ },
101
+ {
102
+ key: "getLastMetaproofStep",
103
+ value: function getLastMetaproofStep() {
104
+ var lastMetaproofStep = null;
105
+ var metaproofStepsLength = this.metaproofSteps.length;
106
+ if (metaproofStepsLength > 0) {
107
+ lastMetaproofStep = (0, _array.last)(this.metaproofSteps);
108
+ }
109
+ return lastMetaproofStep;
110
+ }
111
+ },
112
+ {
113
+ key: "addMetavariable",
114
+ value: function addMetavariable(metavariable) {
115
+ var metavariableName = metavariable.getName();
116
+ (0, _array.filter)(this.metavariables, function(metavariable) {
117
+ var name = metavariable.getName(), nameMetavariableName = name === metavariableName;
118
+ if (!nameMetavariableName) {
119
+ return true;
120
+ }
121
+ });
122
+ this.metavariables.push(metavariable);
123
+ }
124
+ },
125
+ {
126
+ key: "addMetaproofStep",
127
+ value: function addMetaproofStep(metaproofStep) {
128
+ this.metaproofSteps.push(metaproofStep);
129
+ }
130
+ },
131
+ {
132
+ key: "matchMetastatement",
133
+ value: function matchMetastatement(metastatementNode) {
134
+ var metastatementMatches = false;
135
+ if (!metastatementMatches) {
136
+ var proofStepMatchesMetastatement = this.metaproofSteps.some(function(metaproofStep) {
137
+ var proofStepMatchesMetastatement = metaproofStep.match(metastatementNode);
138
+ if (proofStepMatchesMetastatement) {
139
+ return true;
140
+ }
141
+ });
142
+ metastatementMatches = proofStepMatchesMetastatement; ///
143
+ }
144
+ if (!metastatementMatches) {
145
+ metastatementMatches = this.context.matchMetastatement(metastatementNode);
146
+ }
147
+ return metastatementMatches;
148
+ }
149
+ },
150
+ {
151
+ key: "findMetavariableByMetavariableName",
152
+ value: function findMetavariableByMetavariableName(metavariableName) {
153
+ var name = metavariableName, metavariables = this.getMetavariables(), metavariable = metavariables.find(function(metavariable) {
154
+ var matches = metavariable.matchName(name);
155
+ if (matches) {
156
+ return true;
157
+ }
158
+ }) || null;
159
+ return metavariable;
160
+ }
161
+ },
162
+ {
163
+ key: "isMetavariablePresentByMetavariableName",
164
+ value: function isMetavariablePresentByMetavariableName(metavariableName) {
165
+ var metavariable = this.findMetavariableByMetavariableName(metavariableName), metavariablePresent = metavariable !== null;
166
+ return metavariablePresent;
167
+ }
168
+ }
169
+ ], [
170
+ {
171
+ key: "fromFileContext",
172
+ value: function fromFileContext(fileContext) {
173
+ var context = fileContext, metavariables = [], metaproofSteps = [], localMetaContext = new LocalMetaContext(context, metavariables, metaproofSteps);
174
+ return localMetaContext;
175
+ }
176
+ },
177
+ {
178
+ key: "fromLocalMetaContext",
179
+ value: function fromLocalMetaContext(localMetaContext) {
180
+ var context = localMetaContext, metavariables = [], metaproofSteps = [];
181
+ localMetaContext = new LocalMetaContext(context, metavariables, metaproofSteps); ///
182
+ return localMetaContext;
183
+ }
184
+ }
185
+ ]);
186
+ return LocalMetaContext;
187
+ }();
188
+ Object.assign(LocalMetaContext.prototype, _file.default);
189
+ Object.assign(LocalMetaContext.prototype, _logging.default);
190
+ var _default = LocalMetaContext;
191
+
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xvY2FsTWV0YS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGZpbGVNaXhpbnMgZnJvbSBcIi4uL21peGlucy9maWxlXCI7XG5pbXBvcnQgbG9nZ2luZ01peGlucyBmcm9tIFwiLi4vbWl4aW5zL2xvZ2dpbmdcIjtcblxuaW1wb3J0IHsgbGFzdCwgZmlsdGVyIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5jbGFzcyBMb2NhbE1ldGFDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgbWV0YXZhcmlhYmxlcywgbWV0YXByb29mU3RlcHMpIHtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMubWV0YXZhcmlhYmxlcyA9IG1ldGF2YXJpYWJsZXM7XG4gICAgdGhpcy5tZXRhcHJvb2ZTdGVwcyA9IG1ldGFwcm9vZlN0ZXBzO1xuICB9XG5cbiAgZ2V0Q29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0O1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcygpIHtcbiAgICBsZXQgbWV0YXZhcmlhYmxlcyA9IHRoaXMuY29udGV4dC5nZXRNZXRhdmFyaWFibGVzKCk7XG5cbiAgICBtZXRhdmFyaWFibGVzID0gWyAvLy9cbiAgICAgIC4uLm1ldGF2YXJpYWJsZXMsXG4gICAgICB0aGlzLm1ldGF2YXJpYWJsZXNcbiAgICBdXG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldE1ldGFwcm9vZlN0ZXBzKCkge1xuICAgIGxldCBtZXRhcHJvb2ZTdGVwcyA9IHRoaXMuY29udGV4dC5nZXRNZXRhcHJvb2ZTdGVwcygpO1xuXG4gICAgbWV0YXByb29mU3RlcHMgPSBbICAvLy9cbiAgICAgIC4uLm1ldGFwcm9vZlN0ZXBzLFxuICAgICAgLi4udGhpcy5tZXRhcHJvb2ZTdGVwc1xuICAgIF07XG5cbiAgICByZXR1cm4gbWV0YXByb29mU3RlcHM7XG4gIH1cblxuICBnZXRWYXJpYWJsZXMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0VmFyaWFibGVzKCk7IH1cblxuICBnZXRMYXN0TWV0YXByb29mU3RlcCgpIHtcbiAgICBsZXQgbGFzdE1ldGFwcm9vZlN0ZXAgPSBudWxsO1xuXG4gICAgY29uc3QgbWV0YXByb29mU3RlcHNMZW5ndGggPSB0aGlzLm1ldGFwcm9vZlN0ZXBzLmxlbmd0aDtcblxuICAgIGlmIChtZXRhcHJvb2ZTdGVwc0xlbmd0aCA+IDApIHtcbiAgICAgIGxhc3RNZXRhcHJvb2ZTdGVwID0gbGFzdCh0aGlzLm1ldGFwcm9vZlN0ZXBzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdE1ldGFwcm9vZlN0ZXA7XG4gIH1cblxuICBhZGRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZS5nZXROYW1lKCk7XG5cbiAgICBmaWx0ZXIodGhpcy5tZXRhdmFyaWFibGVzLCAobWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gbWV0YXZhcmlhYmxlLmdldE5hbWUoKSxcbiAgICAgICAgICAgIG5hbWVNZXRhdmFyaWFibGVOYW1lID0gKG5hbWUgPT09IG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICBpZiAoIW5hbWVNZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGVzLnB1c2gobWV0YXZhcmlhYmxlKTtcbiAgfVxuXG4gIGFkZE1ldGFwcm9vZlN0ZXAobWV0YXByb29mU3RlcCkge1xuICAgIHRoaXMubWV0YXByb29mU3RlcHMucHVzaChtZXRhcHJvb2ZTdGVwKTtcbiAgfVxuXG4gIG1hdGNoTWV0YXN0YXRlbWVudChtZXRhc3RhdGVtZW50Tm9kZSkge1xuICAgIGxldCBtZXRhc3RhdGVtZW50TWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgaWYgKCFtZXRhc3RhdGVtZW50TWF0Y2hlcykge1xuICAgICAgY29uc3QgcHJvb2ZTdGVwTWF0Y2hlc01ldGFzdGF0ZW1lbnQgPSB0aGlzLm1ldGFwcm9vZlN0ZXBzLnNvbWUoKG1ldGFwcm9vZlN0ZXApID0+IHtcbiAgICAgICAgY29uc3QgcHJvb2ZTdGVwTWF0Y2hlc01ldGFzdGF0ZW1lbnQgPSBtZXRhcHJvb2ZTdGVwLm1hdGNoKG1ldGFzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICBpZiAocHJvb2ZTdGVwTWF0Y2hlc01ldGFzdGF0ZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG1ldGFzdGF0ZW1lbnRNYXRjaGVzID0gcHJvb2ZTdGVwTWF0Y2hlc01ldGFzdGF0ZW1lbnQ7IC8vL1xuICAgIH1cblxuICAgIGlmICghbWV0YXN0YXRlbWVudE1hdGNoZXMpIHtcbiAgICAgIG1ldGFzdGF0ZW1lbnRNYXRjaGVzID0gdGhpcy5jb250ZXh0Lm1hdGNoTWV0YXN0YXRlbWVudChtZXRhc3RhdGVtZW50Tm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGFzdGF0ZW1lbnRNYXRjaGVzO1xuICB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgbmFtZSA9IG1ldGF2YXJpYWJsZU5hbWUsICAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gdGhpcy5nZXRNZXRhdmFyaWFibGVzKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlcy5maW5kKChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBtZXRhdmFyaWFibGUubWF0Y2hOYW1lKG5hbWUpO1xuXG4gICAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlID0gdGhpcy5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZVByZXNlbnQgPSAobWV0YXZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21GaWxlQ29udGV4dChmaWxlQ29udGV4dCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBmaWxlQ29udGV4dCwgIC8vL1xuICAgICAgICAgIG1ldGF2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBtZXRhcHJvb2ZTdGVwcyA9IFtdLFxuICAgICAgICAgIGxvY2FsTWV0YUNvbnRleHQgPSBuZXcgTG9jYWxNZXRhQ29udGV4dChjb250ZXh0LCBtZXRhdmFyaWFibGVzLCBtZXRhcHJvb2ZTdGVwcyk7XG5cbiAgICByZXR1cm4gbG9jYWxNZXRhQ29udGV4dDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTG9jYWxNZXRhQ29udGV4dChsb2NhbE1ldGFDb250ZXh0KSB7XG4gICAgY29uc3QgY29udGV4dCA9IGxvY2FsTWV0YUNvbnRleHQsICAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgbWV0YXByb29mU3RlcHMgPSBbXTtcblxuICAgIGxvY2FsTWV0YUNvbnRleHQgPSBuZXcgTG9jYWxNZXRhQ29udGV4dChjb250ZXh0LCBtZXRhdmFyaWFibGVzLCBtZXRhcHJvb2ZTdGVwcyk7ICAvLy9cblxuICAgIHJldHVybiBsb2NhbE1ldGFDb250ZXh0O1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oTG9jYWxNZXRhQ29udGV4dC5wcm90b3R5cGUsIGZpbGVNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihMb2NhbE1ldGFDb250ZXh0LnByb3RvdHlwZSwgbG9nZ2luZ01peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IExvY2FsTWV0YUNvbnRleHQ7Il0sIm5hbWVzIjpbIkxvY2FsTWV0YUNvbnRleHQiLCJjb250ZXh0IiwibWV0YXZhcmlhYmxlcyIsIm1ldGFwcm9vZlN0ZXBzIiwiZ2V0Q29udGV4dCIsImdldE1ldGF2YXJpYWJsZXMiLCJnZXRNZXRhcHJvb2ZTdGVwcyIsImdldFZhcmlhYmxlcyIsImdldExhc3RNZXRhcHJvb2ZTdGVwIiwibGFzdE1ldGFwcm9vZlN0ZXAiLCJtZXRhcHJvb2ZTdGVwc0xlbmd0aCIsImxlbmd0aCIsImxhc3QiLCJhZGRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TmFtZSIsImZpbHRlciIsIm5hbWUiLCJuYW1lTWV0YXZhcmlhYmxlTmFtZSIsInB1c2giLCJhZGRNZXRhcHJvb2ZTdGVwIiwibWV0YXByb29mU3RlcCIsIm1hdGNoTWV0YXN0YXRlbWVudCIsIm1ldGFzdGF0ZW1lbnROb2RlIiwibWV0YXN0YXRlbWVudE1hdGNoZXMiLCJwcm9vZlN0ZXBNYXRjaGVzTWV0YXN0YXRlbWVudCIsInNvbWUiLCJtYXRjaCIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUiLCJmaW5kIiwibWF0Y2hlcyIsIm1hdGNoTmFtZSIsImlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZVByZXNlbnQiLCJmcm9tRmlsZUNvbnRleHQiLCJmaWxlQ29udGV4dCIsImxvY2FsTWV0YUNvbnRleHQiLCJmcm9tTG9jYWxNZXRhQ29udGV4dCIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSIsImZpbGVNaXhpbnMiLCJsb2dnaW5nTWl4aW5zIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkEySUE7OztlQUFB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