occam-verify-cli 1.0.383 → 1.0.386

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 (223) hide show
  1. package/lib/action/verify.js +2 -1
  2. package/lib/context/file.js +2 -2
  3. package/lib/context/release.js +2 -2
  4. package/lib/mixins/statement/verify.js +3 -3
  5. package/lib/mixins/step/unify.js +4 -4
  6. package/lib/mixins/term/verify.js +4 -4
  7. package/lib/ontology/assertion/contained.js +316 -0
  8. package/lib/ontology/assertion/defined.js +290 -0
  9. package/lib/ontology/assertion/property.js +271 -0
  10. package/lib/ontology/assertion/satisfies.js +254 -0
  11. package/lib/ontology/assertion/subproof.js +186 -0
  12. package/lib/ontology/assertion/type.js +252 -0
  13. package/lib/{dom → ontology}/axiom.js +3 -3
  14. package/lib/{dom → ontology}/combinator/bracketed.js +4 -4
  15. package/lib/ontology/combinator.js +141 -0
  16. package/lib/ontology/conclusion.js +172 -0
  17. package/lib/{dom → ontology}/conjecture.js +3 -3
  18. package/lib/{dom → ontology}/constructor/bracketed.js +5 -5
  19. package/lib/ontology/constructor.js +171 -0
  20. package/lib/ontology/declaration/combinator.js +168 -0
  21. package/lib/ontology/declaration/complexType.js +346 -0
  22. package/lib/ontology/declaration/constructor.js +199 -0
  23. package/lib/ontology/declaration/metavariable.js +209 -0
  24. package/lib/ontology/declaration/simpleType.js +243 -0
  25. package/lib/ontology/declaration/typePrefix.js +181 -0
  26. package/lib/ontology/declaration/variable.js +197 -0
  27. package/lib/ontology/declaration.js +360 -0
  28. package/lib/ontology/deduction.js +186 -0
  29. package/lib/ontology/derivation.js +155 -0
  30. package/lib/ontology/equality.js +288 -0
  31. package/lib/{dom → ontology}/error.js +3 -3
  32. package/lib/ontology/frame.js +362 -0
  33. package/lib/ontology/hypothesis.js +190 -0
  34. package/lib/ontology/judgement.js +241 -0
  35. package/lib/ontology/label.js +199 -0
  36. package/lib/{dom → ontology}/lemma.js +3 -3
  37. package/lib/{dom → ontology}/metaLemma.js +3 -3
  38. package/lib/{dom → ontology}/metaType.js +3 -3
  39. package/lib/{dom → ontology}/metatheorem.js +3 -3
  40. package/lib/ontology/metavariable.js +504 -0
  41. package/lib/{dom → ontology}/parameter.js +3 -3
  42. package/lib/ontology/premise.js +271 -0
  43. package/lib/ontology/procedureCall.js +243 -0
  44. package/lib/{dom → ontology}/procedureReference.js +3 -3
  45. package/lib/{dom → ontology}/proof.js +4 -4
  46. package/lib/ontology/property.js +166 -0
  47. package/lib/ontology/propertyRelation.js +202 -0
  48. package/lib/ontology/reference.js +293 -0
  49. package/lib/ontology/rule.js +375 -0
  50. package/lib/ontology/section.js +255 -0
  51. package/lib/ontology/signature.js +220 -0
  52. package/lib/{dom → ontology}/statement.js +3 -3
  53. package/lib/ontology/step.js +283 -0
  54. package/lib/ontology/subDerivation.js +147 -0
  55. package/lib/ontology/subproof.js +266 -0
  56. package/lib/ontology/substitution/frame.js +216 -0
  57. package/lib/{dom → ontology}/substitution/reference.js +3 -3
  58. package/lib/{dom → ontology}/substitution/statement.js +3 -3
  59. package/lib/ontology/substitution/term.js +230 -0
  60. package/lib/ontology/substitution.js +207 -0
  61. package/lib/ontology/supposition.js +283 -0
  62. package/lib/ontology/term.js +339 -0
  63. package/lib/{dom → ontology}/theorem.js +3 -3
  64. package/lib/ontology/topLevelAssertion.js +432 -0
  65. package/lib/ontology/topLevelMetaAssertion.js +235 -0
  66. package/lib/ontology/type.js +556 -0
  67. package/lib/ontology/typePrefix.js +99 -0
  68. package/lib/ontology/variable.js +331 -0
  69. package/lib/ontology.js +27 -0
  70. package/lib/preamble.js +60 -60
  71. package/lib/unifier/intrinsicLevel.js +3 -3
  72. package/lib/unifier/metaLevel.js +7 -7
  73. package/lib/unifier/metavariable.js +3 -3
  74. package/lib/unifier/statementWithCombinator.js +5 -5
  75. package/lib/unifier/termWithConstructor.js +3 -3
  76. package/lib/utilities/brackets.js +5 -5
  77. package/lib/utilities/context.js +12 -12
  78. package/lib/utilities/fileSystem.js +2 -2
  79. package/lib/utilities/json.js +30 -30
  80. package/lib/utilities/node.js +7 -7
  81. package/lib/utilities/release.js +12 -4
  82. package/lib/utilities/releaseContext.js +1 -1
  83. package/lib/utilities/substitutions.js +6 -6
  84. package/lib/utilities/type.js +2 -2
  85. package/lib/verifier/combinator.js +4 -4
  86. package/lib/verifier/constructor.js +3 -3
  87. package/lib/verifier/topLevel.js +18 -18
  88. package/package.json +1 -1
  89. package/src/action/verify.js +2 -0
  90. package/src/context/file.js +1 -1
  91. package/src/context/release.js +1 -1
  92. package/src/mixins/statement/verify.js +2 -2
  93. package/src/mixins/step/unify.js +3 -3
  94. package/src/mixins/term/verify.js +3 -3
  95. package/src/{dom → ontology}/assertion/contained.js +4 -4
  96. package/src/{dom → ontology}/assertion/defined.js +6 -6
  97. package/src/{dom → ontology}/assertion/property.js +5 -5
  98. package/src/{dom → ontology}/assertion/satisfies.js +5 -5
  99. package/src/{dom → ontology}/assertion/subproof.js +4 -4
  100. package/src/{dom → ontology}/assertion/type.js +5 -5
  101. package/src/{dom → ontology}/axiom.js +2 -2
  102. package/src/{dom → ontology}/combinator/bracketed.js +4 -4
  103. package/src/{dom → ontology}/combinator.js +4 -4
  104. package/src/{dom → ontology}/conclusion.js +4 -4
  105. package/src/{dom → ontology}/conjecture.js +2 -2
  106. package/src/{dom → ontology}/constructor/bracketed.js +5 -5
  107. package/src/{dom → ontology}/constructor.js +5 -5
  108. package/src/{dom → ontology}/declaration/combinator.js +4 -4
  109. package/src/{dom → ontology}/declaration/complexType.js +4 -4
  110. package/src/{dom → ontology}/declaration/constructor.js +4 -4
  111. package/src/{dom → ontology}/declaration/metavariable.js +5 -5
  112. package/src/{dom → ontology}/declaration/simpleType.js +4 -4
  113. package/src/{dom → ontology}/declaration/typePrefix.js +4 -4
  114. package/src/{dom → ontology}/declaration/variable.js +4 -4
  115. package/src/{dom → ontology}/declaration.js +5 -5
  116. package/src/{dom → ontology}/deduction.js +4 -4
  117. package/src/{dom → ontology}/derivation.js +4 -4
  118. package/src/{dom → ontology}/equality.js +6 -6
  119. package/src/{dom → ontology}/error.js +2 -2
  120. package/src/{dom → ontology}/frame.js +6 -6
  121. package/src/{dom → ontology}/hypothesis.js +5 -6
  122. package/src/{dom → ontology}/judgement.js +5 -5
  123. package/src/{dom → ontology}/label.js +4 -4
  124. package/src/{dom → ontology}/lemma.js +2 -2
  125. package/src/{dom → ontology}/metaLemma.js +2 -2
  126. package/src/{dom → ontology}/metaType.js +2 -2
  127. package/src/{dom → ontology}/metatheorem.js +2 -2
  128. package/src/{dom → ontology}/metavariable.js +8 -8
  129. package/src/{dom → ontology}/parameter.js +2 -2
  130. package/src/{dom → ontology}/premise.js +5 -5
  131. package/src/{dom → ontology}/procedureCall.js +5 -5
  132. package/src/{dom → ontology}/procedureReference.js +2 -2
  133. package/src/{dom → ontology}/proof.js +4 -4
  134. package/src/{dom → ontology}/property.js +4 -4
  135. package/src/{dom → ontology}/propertyRelation.js +4 -4
  136. package/src/{dom → ontology}/reference.js +6 -6
  137. package/src/{dom → ontology}/rule.js +7 -7
  138. package/src/{dom → ontology}/section.js +8 -8
  139. package/src/{dom → ontology}/signature.js +4 -4
  140. package/src/{dom → ontology}/statement.js +2 -2
  141. package/src/{dom → ontology}/step.js +4 -4
  142. package/src/{dom → ontology}/subDerivation.js +4 -4
  143. package/src/{dom → ontology}/subproof.js +5 -5
  144. package/src/{dom → ontology}/substitution/frame.js +4 -4
  145. package/src/{dom → ontology}/substitution/reference.js +2 -2
  146. package/src/{dom → ontology}/substitution/statement.js +2 -2
  147. package/src/{dom → ontology}/substitution/term.js +5 -5
  148. package/src/{dom → ontology}/supposition.js +5 -5
  149. package/src/{dom → ontology}/term.js +6 -6
  150. package/src/{dom → ontology}/theorem.js +2 -2
  151. package/src/{dom → ontology}/topLevelAssertion.js +6 -6
  152. package/src/{dom → ontology}/topLevelMetaAssertion.js +2 -2
  153. package/src/{dom → ontology}/type.js +4 -4
  154. package/src/{dom → ontology}/typePrefix.js +3 -5
  155. package/src/{dom → ontology}/variable.js +6 -6
  156. package/src/ontology.js +13 -0
  157. package/src/preamble.js +59 -59
  158. package/src/unifier/intrinsicLevel.js +2 -2
  159. package/src/unifier/metaLevel.js +6 -6
  160. package/src/unifier/metavariable.js +2 -2
  161. package/src/unifier/statementWithCombinator.js +4 -4
  162. package/src/unifier/termWithConstructor.js +2 -2
  163. package/src/utilities/brackets.js +4 -4
  164. package/src/utilities/context.js +11 -11
  165. package/src/utilities/fileSystem.js +1 -1
  166. package/src/utilities/json.js +29 -29
  167. package/src/utilities/node.js +6 -6
  168. package/src/utilities/release.js +1 -1
  169. package/src/utilities/releaseContext.js +3 -3
  170. package/src/utilities/substitutions.js +5 -5
  171. package/src/utilities/type.js +1 -1
  172. package/src/verifier/combinator.js +3 -3
  173. package/src/verifier/constructor.js +2 -2
  174. package/src/verifier/topLevel.js +17 -17
  175. package/lib/dom/assertion/contained.js +0 -316
  176. package/lib/dom/assertion/defined.js +0 -290
  177. package/lib/dom/assertion/property.js +0 -271
  178. package/lib/dom/assertion/satisfies.js +0 -254
  179. package/lib/dom/assertion/subproof.js +0 -186
  180. package/lib/dom/assertion/type.js +0 -252
  181. package/lib/dom/combinator.js +0 -141
  182. package/lib/dom/conclusion.js +0 -172
  183. package/lib/dom/constructor.js +0 -171
  184. package/lib/dom/declaration/combinator.js +0 -168
  185. package/lib/dom/declaration/complexType.js +0 -346
  186. package/lib/dom/declaration/constructor.js +0 -199
  187. package/lib/dom/declaration/metavariable.js +0 -209
  188. package/lib/dom/declaration/simpleType.js +0 -243
  189. package/lib/dom/declaration/typePrefix.js +0 -181
  190. package/lib/dom/declaration/variable.js +0 -197
  191. package/lib/dom/declaration.js +0 -360
  192. package/lib/dom/deduction.js +0 -186
  193. package/lib/dom/derivation.js +0 -155
  194. package/lib/dom/equality.js +0 -288
  195. package/lib/dom/frame.js +0 -362
  196. package/lib/dom/hypothesis.js +0 -191
  197. package/lib/dom/judgement.js +0 -241
  198. package/lib/dom/label.js +0 -199
  199. package/lib/dom/metavariable.js +0 -504
  200. package/lib/dom/premise.js +0 -271
  201. package/lib/dom/procedureCall.js +0 -243
  202. package/lib/dom/property.js +0 -166
  203. package/lib/dom/propertyRelation.js +0 -202
  204. package/lib/dom/reference.js +0 -293
  205. package/lib/dom/rule.js +0 -375
  206. package/lib/dom/section.js +0 -255
  207. package/lib/dom/signature.js +0 -220
  208. package/lib/dom/step.js +0 -283
  209. package/lib/dom/subDerivation.js +0 -147
  210. package/lib/dom/subproof.js +0 -266
  211. package/lib/dom/substitution/frame.js +0 -216
  212. package/lib/dom/substitution/term.js +0 -230
  213. package/lib/dom/substitution.js +0 -207
  214. package/lib/dom/supposition.js +0 -283
  215. package/lib/dom/term.js +0 -339
  216. package/lib/dom/topLevelAssertion.js +0 -432
  217. package/lib/dom/topLevelMetaAssertion.js +0 -235
  218. package/lib/dom/type.js +0 -556
  219. package/lib/dom/typePrefix.js +0 -100
  220. package/lib/dom/variable.js +0 -331
  221. package/lib/dom.js +0 -27
  222. package/src/dom.js +0 -13
  223. /package/src/{dom → ontology}/substitution.js +0 -0
@@ -0,0 +1,375 @@
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 _necessary = require("necessary");
12
+ var _ontology = /*#__PURE__*/ _interop_require_wildcard(require("../ontology"));
13
+ var _local = /*#__PURE__*/ _interop_require_default(require("../context/local"));
14
+ var _substitutions = /*#__PURE__*/ _interop_require_default(require("../substitutions"));
15
+ var _topLevelAssertion = require("./topLevelAssertion");
16
+ var _json = require("../utilities/json");
17
+ function _class_call_check(instance, Constructor) {
18
+ if (!(instance instanceof Constructor)) {
19
+ throw new TypeError("Cannot call a class as a function");
20
+ }
21
+ }
22
+ function _defineProperties(target, props) {
23
+ for(var i = 0; i < props.length; i++){
24
+ var descriptor = props[i];
25
+ descriptor.enumerable = descriptor.enumerable || false;
26
+ descriptor.configurable = true;
27
+ if ("value" in descriptor) descriptor.writable = true;
28
+ Object.defineProperty(target, descriptor.key, descriptor);
29
+ }
30
+ }
31
+ function _create_class(Constructor, protoProps, staticProps) {
32
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
33
+ if (staticProps) _defineProperties(Constructor, staticProps);
34
+ return Constructor;
35
+ }
36
+ function _define_property(obj, key, value) {
37
+ if (key in obj) {
38
+ Object.defineProperty(obj, key, {
39
+ value: value,
40
+ enumerable: true,
41
+ configurable: true,
42
+ writable: true
43
+ });
44
+ } else {
45
+ obj[key] = value;
46
+ }
47
+ return obj;
48
+ }
49
+ function _interop_require_default(obj) {
50
+ return obj && obj.__esModule ? obj : {
51
+ default: obj
52
+ };
53
+ }
54
+ function _getRequireWildcardCache(nodeInterop) {
55
+ if (typeof WeakMap !== "function") return null;
56
+ var cacheBabelInterop = new WeakMap();
57
+ var cacheNodeInterop = new WeakMap();
58
+ return (_getRequireWildcardCache = function(nodeInterop) {
59
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
60
+ })(nodeInterop);
61
+ }
62
+ function _interop_require_wildcard(obj, nodeInterop) {
63
+ if (!nodeInterop && obj && obj.__esModule) {
64
+ return obj;
65
+ }
66
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
67
+ return {
68
+ default: obj
69
+ };
70
+ }
71
+ var cache = _getRequireWildcardCache(nodeInterop);
72
+ if (cache && cache.has(obj)) {
73
+ return cache.get(obj);
74
+ }
75
+ var newObj = {
76
+ __proto__: null
77
+ };
78
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
79
+ for(var key in obj){
80
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
81
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
82
+ if (desc && (desc.get || desc.set)) {
83
+ Object.defineProperty(newObj, key, desc);
84
+ } else {
85
+ newObj[key] = obj[key];
86
+ }
87
+ }
88
+ }
89
+ newObj.default = obj;
90
+ if (cache) {
91
+ cache.set(obj, newObj);
92
+ }
93
+ return newObj;
94
+ }
95
+ var _Rule;
96
+ var reverse = _necessary.arrayUtilities.reverse, extract = _necessary.arrayUtilities.extract, backwardsEvery = _necessary.arrayUtilities.backwardsEvery;
97
+ var _default = (0, _ontology.define)((_Rule = /*#__PURE__*/ function() {
98
+ function Rule(context, node, string, labels, premises, conclusion, proof) {
99
+ _class_call_check(this, Rule);
100
+ this.context = context;
101
+ this.node = node;
102
+ this.string = string;
103
+ this.labels = labels;
104
+ this.premises = premises;
105
+ this.conclusion = conclusion;
106
+ this.proof = proof;
107
+ }
108
+ _create_class(Rule, [
109
+ {
110
+ key: "getContext",
111
+ value: function getContext() {
112
+ return this.context;
113
+ }
114
+ },
115
+ {
116
+ key: "getNode",
117
+ value: function getNode() {
118
+ return this.node;
119
+ }
120
+ },
121
+ {
122
+ key: "getString",
123
+ value: function getString() {
124
+ return this.string;
125
+ }
126
+ },
127
+ {
128
+ key: "getLabels",
129
+ value: function getLabels() {
130
+ return this.labels;
131
+ }
132
+ },
133
+ {
134
+ key: "getPremises",
135
+ value: function getPremises() {
136
+ return this.premises;
137
+ }
138
+ },
139
+ {
140
+ key: "getConclusion",
141
+ value: function getConclusion() {
142
+ return this.conclusion;
143
+ }
144
+ },
145
+ {
146
+ key: "getProof",
147
+ value: function getProof() {
148
+ return this.proof;
149
+ }
150
+ },
151
+ {
152
+ key: "matchMetavariableName",
153
+ value: function matchMetavariableName(metavariableName) {
154
+ var metavariableNameMatches = this.labels.some(function(label) {
155
+ var metavariableNameMatches = label.matchMetavariableName(metavariableName);
156
+ if (metavariableNameMatches) {
157
+ return true;
158
+ }
159
+ });
160
+ return metavariableNameMatches;
161
+ }
162
+ },
163
+ {
164
+ key: "unifyStatementAndStepsOrSubproofs",
165
+ value: function unifyStatementAndStepsOrSubproofs(statement, stepsOrSubproofs, context) {
166
+ var statementAndStepsOrSubproofsUnify = false;
167
+ var generalContext = this.context, specificContext = context; ///
168
+ var substitutions = _substitutions.default.fromNothing(), statementUnifiesWithConclusion = this.unifyStatementWithConclusion(statement, substitutions, generalContext, specificContext);
169
+ if (statementUnifiesWithConclusion) {
170
+ var stepsOrSubproofsUnifyWithPremises = this.unifyStepsOrSubproofsWithPremises(stepsOrSubproofs, substitutions, generalContext, specificContext);
171
+ if (stepsOrSubproofsUnifyWithPremises) {
172
+ var substitutionsResolved = substitutions.areResolved();
173
+ if (substitutionsResolved) {
174
+ statementAndStepsOrSubproofsUnify = true;
175
+ }
176
+ }
177
+ }
178
+ return statementAndStepsOrSubproofsUnify;
179
+ }
180
+ },
181
+ {
182
+ key: "unifyStatementWithConclusion",
183
+ value: function unifyStatementWithConclusion(statement, substitutions, generalContext, specificContext) {
184
+ var statementUnifiesWithConclusion = false;
185
+ var statementUnifies = this.conclusion.unifyStatement(statement, substitutions, generalContext, specificContext);
186
+ if (statementUnifies) {
187
+ statementUnifiesWithConclusion = true;
188
+ }
189
+ return statementUnifiesWithConclusion;
190
+ }
191
+ },
192
+ {
193
+ key: "unifyStepsOrSubproofsWithPremises",
194
+ value: function unifyStepsOrSubproofsWithPremises(stepsOrSubproofs, substitutions, generalContext, specificContext) {
195
+ var _this = this;
196
+ stepsOrSubproofs = reverse(stepsOrSubproofs); ///
197
+ var stepsOrSubproofsUnifyWithPremises = backwardsEvery(this.premises, function(premise) {
198
+ var stepUnifiesWithPremise = _this.unifyStepsOrSubproofsWithPremise(stepsOrSubproofs, premise, substitutions, generalContext, specificContext);
199
+ if (stepUnifiesWithPremise) {
200
+ return true;
201
+ }
202
+ });
203
+ return stepsOrSubproofsUnifyWithPremises;
204
+ }
205
+ },
206
+ {
207
+ key: "unifyStepsOrSubproofsWithPremise",
208
+ value: function unifyStepsOrSubproofsWithPremise(stepsOrSubproofs, premise, substitutions, generalContext, specificContext) {
209
+ var stepsOrSubproofsUnifyWithPremise = false;
210
+ if (!stepsOrSubproofsUnifyWithPremise) {
211
+ var context = specificContext, premiseUnifiesIndependently = premise.unifyIndependently(substitutions, context);
212
+ if (premiseUnifiesIndependently) {
213
+ stepsOrSubproofsUnifyWithPremise = true;
214
+ }
215
+ }
216
+ if (!stepsOrSubproofsUnifyWithPremise) {
217
+ var stepOrSubproof = extract(stepsOrSubproofs, function(stepOrSubproof) {
218
+ var stepOrSubproofUnifies = premise.unifyStepOrSubproof(stepOrSubproof, substitutions, generalContext, specificContext);
219
+ if (stepOrSubproofUnifies) {
220
+ return true;
221
+ }
222
+ }) || null;
223
+ if (stepOrSubproof !== null) {
224
+ stepsOrSubproofsUnifyWithPremise = true;
225
+ }
226
+ }
227
+ return stepsOrSubproofsUnifyWithPremise;
228
+ }
229
+ },
230
+ {
231
+ key: "verify",
232
+ value: function verify() {
233
+ var verifies = false;
234
+ var ruleString = this.string; ///
235
+ this.context.trace("Verifying the '".concat(ruleString, "' rule..."), this.node);
236
+ var labelsVerify = this.verifyLabels();
237
+ if (labelsVerify) {
238
+ var localContext = _local.default.fromContext(this.context), context = localContext, premisesVerify = this.verifyPremises(context);
239
+ if (premisesVerify) {
240
+ var conclusionVerifies = this.verifyConclusion(context);
241
+ if (conclusionVerifies) {
242
+ var proofVerifies = this.verifyProof(context);
243
+ if (proofVerifies) {
244
+ var rule = this; ///
245
+ this.context.addRule(rule);
246
+ verifies = true;
247
+ }
248
+ }
249
+ }
250
+ }
251
+ if (verifies) {
252
+ this.context.debug("...verified the '".concat(ruleString, "' rule."), this.node);
253
+ }
254
+ return verifies;
255
+ }
256
+ },
257
+ {
258
+ key: "verifyLabels",
259
+ value: function verifyLabels() {
260
+ var labelsVerify = this.labels.every(function(label) {
261
+ var nameOnly = true, labelVerifies = label.verify(nameOnly);
262
+ if (labelVerifies) {
263
+ return true;
264
+ }
265
+ });
266
+ return labelsVerify;
267
+ }
268
+ },
269
+ {
270
+ key: "verifyPremises",
271
+ value: function verifyPremises(context) {
272
+ var _this = this;
273
+ var premisesVerify = this.premises.every(function(premise) {
274
+ var premiseVerifies = _this.verifyPremise(premise, context);
275
+ if (premiseVerifies) {
276
+ return true;
277
+ }
278
+ });
279
+ return premisesVerify;
280
+ }
281
+ },
282
+ {
283
+ key: "verifyPremise",
284
+ value: function verifyPremise(premise, context) {
285
+ var premiseVerifies = premise.verify(context);
286
+ return premiseVerifies;
287
+ }
288
+ },
289
+ {
290
+ key: "verifyConclusion",
291
+ value: function verifyConclusion(context) {
292
+ var conclusionVerifies = this.conclusion.verify(context);
293
+ return conclusionVerifies;
294
+ }
295
+ },
296
+ {
297
+ key: "verifyProof",
298
+ value: function verifyProof(context) {
299
+ var proofVerifies;
300
+ if (this.proof === null) {
301
+ proofVerifies = true;
302
+ } else {
303
+ var substitutions = _substitutions.default.fromNothing();
304
+ proofVerifies = this.proof.verify(substitutions, this.conclusion, context);
305
+ }
306
+ return proofVerifies;
307
+ }
308
+ },
309
+ {
310
+ key: "toJSON",
311
+ value: function toJSON() {
312
+ var labelsJSON = (0, _json.labelsToLabelsJSON)(this.labels), premisesJSON = (0, _json.premisesToPremisesJSON)(this.premises), conclusionJSON = (0, _json.conclusionToConclusionJSON)(this.conclusion), labels = labelsJSON, premises = premisesJSON, conclusion = conclusionJSON, json = {
313
+ labels: labels,
314
+ premises: premises,
315
+ conclusion: conclusion
316
+ };
317
+ return json;
318
+ }
319
+ }
320
+ ], [
321
+ {
322
+ key: "fromJSON",
323
+ value: function fromJSON(json, context) {
324
+ var rule;
325
+ var node = null, proof = null, labels = (0, _json.labelsFromJSON)(json, context), premises = (0, _json.premisesFromJSON)(json, context), conclusion = (0, _json.conclusionFromJSON)(json, context), string = stringFromLabelsPremisesAndConclusion(labels, premises, conclusion);
326
+ rule = new Rule(context, node, string, labels, premises, conclusion, proof);
327
+ return rule;
328
+ }
329
+ },
330
+ {
331
+ key: "fromRuleNode",
332
+ value: function fromRuleNode(ruleNode, context) {
333
+ var node = ruleNode, proof = proofFromRuleNode(ruleNode, context), labels = labelsFromRuleNode(ruleNode, context), premises = premisesFromRuleNode(ruleNode, context), conclusion = conclusionFromRuleNode(ruleNode, context), string = stringFromLabelsPremisesAndConclusion(labels, premises, conclusion), rule = new Rule(context, node, string, labels, premises, conclusion, proof);
334
+ return rule;
335
+ }
336
+ }
337
+ ]);
338
+ return Rule;
339
+ }(), _define_property(_Rule, "name", "Rule"), _Rule));
340
+ function proofFromRuleNode(ruleNode, context) {
341
+ var Proof = _ontology.default.Proof, proofNode = ruleNode.getProofNode(), proof = Proof.fromProofNode(proofNode, context);
342
+ return proof;
343
+ }
344
+ function labelsFromRuleNode(ruleNode, context) {
345
+ var Label = _ontology.default.Label, labelNodes = ruleNode.getLabelNodes(), labels = labelNodes.map(function(labelNode) {
346
+ var label = Label.fromLabelNode(labelNode, context);
347
+ return label;
348
+ });
349
+ return labels;
350
+ }
351
+ function premisesFromRuleNode(ruleNode, context) {
352
+ var Premise = _ontology.default.Premise, premiseNodes = ruleNode.getPremiseNodes(), premises = premiseNodes.map(function(premiseNode) {
353
+ var premise = Premise.fromPremiseNode(premiseNode, context);
354
+ return premise;
355
+ });
356
+ return premises;
357
+ }
358
+ function conclusionFromRuleNode(ruleNode, context) {
359
+ var Conclusion = _ontology.default.Conclusion, conclusionNode = ruleNode.getConclusionNode(), conclusion = Conclusion.fromConclusionNode(conclusionNode, context);
360
+ return conclusion;
361
+ }
362
+ function premisesStringFromPremises(premises) {
363
+ var premisesString = premises.reduce(function(premisesString, premise) {
364
+ var premiseString = premise.getString();
365
+ premisesString = premisesString !== null ? "".concat(premisesString, ", ").concat(premiseString) : premiseString; ///
366
+ return premisesString;
367
+ }, null);
368
+ return premisesString;
369
+ }
370
+ function stringFromLabelsPremisesAndConclusion(labels, premises, conclusion) {
371
+ var premisesString = premisesStringFromPremises(premises), conclusionString = conclusion.getString(), labelsString = (0, _topLevelAssertion.labelsStringFromLabels)(labels), string = premisesString !== null ? "".concat(labelsString, " :: [").concat(premisesString, "] ... ").concat(conclusionString) : "".concat(labelsString, " :: ").concat(conclusionString);
372
+ return string;
373
+ }
374
+
375
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vbnRvbG9neS9ydWxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IG9udG9sb2d5IGZyb20gXCIuLi9vbnRvbG9neVwiO1xuaW1wb3J0IExvY2FsQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9sb2NhbFwiO1xuaW1wb3J0IFN1YnN0aXR1dGlvbnMgZnJvbSBcIi4uL3N1YnN0aXR1dGlvbnNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL29udG9sb2d5XCI7XG5pbXBvcnQgeyBsYWJlbHNTdHJpbmdGcm9tTGFiZWxzIH0gZnJvbSBcIi4vdG9wTGV2ZWxBc3NlcnRpb25cIjtcbmltcG9ydCB7IGxhYmVsc0Zyb21KU09OLFxuICAgICAgICAgcHJlbWlzZXNGcm9tSlNPTixcbiAgICAgICAgIGNvbmNsdXNpb25Gcm9tSlNPTixcbiAgICAgICAgIGxhYmVsc1RvTGFiZWxzSlNPTixcbiAgICAgICAgIHByZW1pc2VzVG9QcmVtaXNlc0pTT04sXG4gICAgICAgICBjb25jbHVzaW9uVG9Db25jbHVzaW9uSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IHJldmVyc2UsIGV4dHJhY3QsIGJhY2t3YXJkc0V2ZXJ5IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFJ1bGUge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBub2RlLCBzdHJpbmcsIGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24sIHByb29mKSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xuICAgIHRoaXMubGFiZWxzID0gbGFiZWxzO1xuICAgIHRoaXMucHJlbWlzZXMgPSBwcmVtaXNlcztcbiAgICB0aGlzLmNvbmNsdXNpb24gPSBjb25jbHVzaW9uO1xuICAgIHRoaXMucHJvb2YgPSBwcm9vZjtcbiAgfVxuXG4gIGdldENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgfVxuXG4gIGdldE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmc7XG4gIH1cblxuICBnZXRMYWJlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxzO1xuICB9XG5cbiAgZ2V0UHJlbWlzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJlbWlzZXM7XG4gIH1cblxuICBnZXRDb25jbHVzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmNsdXNpb247XG4gIH1cblxuICBnZXRQcm9vZigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9vZjtcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZU1hdGNoZXMgPSB0aGlzLmxhYmVscy5zb21lKChsYWJlbCkgPT4ge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZU1hdGNoZXMgPSBsYWJlbC5tYXRjaE1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcztcbiAgfVxuXG4gIHVuaWZ5U3RhdGVtZW50QW5kU3RlcHNPclN1YnByb29mcyhzdGF0ZW1lbnQsIHN0ZXBzT3JTdWJwcm9vZnMsIGNvbnRleHQpIHtcbiAgICBsZXQgc3RhdGVtZW50QW5kU3RlcHNPclN1YnByb29mc1VuaWZ5ID0gZmFsc2U7XG5cbiAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IHRoaXMuY29udGV4dCwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgLy8vXG5cbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gU3Vic3RpdHV0aW9ucy5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29uY2x1c2lvbiA9IHRoaXMudW5pZnlTdGF0ZW1lbnRXaXRoQ29uY2x1c2lvbihzdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZXNXaXRoQ29uY2x1c2lvbikge1xuICAgICAgY29uc3Qgc3RlcHNPclN1YnByb29mc1VuaWZ5V2l0aFByZW1pc2VzID0gdGhpcy51bmlmeVN0ZXBzT3JTdWJwcm9vZnNXaXRoUHJlbWlzZXMoc3RlcHNPclN1YnByb29mcywgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgIGlmIChzdGVwc09yU3VicHJvb2ZzVW5pZnlXaXRoUHJlbWlzZXMpIHtcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uc1Jlc29sdmVkID0gc3Vic3RpdHV0aW9ucy5hcmVSZXNvbHZlZCgpO1xuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb25zUmVzb2x2ZWQpIHtcbiAgICAgICAgICBzdGF0ZW1lbnRBbmRTdGVwc09yU3VicHJvb2ZzVW5pZnkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudEFuZFN0ZXBzT3JTdWJwcm9vZnNVbmlmeTtcbiAgfVxuXG4gIHVuaWZ5U3RhdGVtZW50V2l0aENvbmNsdXNpb24oc3RhdGVtZW50LCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoQ29uY2x1c2lvbiA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50VW5pZmllcyA9IHRoaXMuY29uY2x1c2lvbi51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29uY2x1c2lvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29uY2x1c2lvbjtcbiAgfVxuXG4gIHVuaWZ5U3RlcHNPclN1YnByb29mc1dpdGhQcmVtaXNlcyhzdGVwc09yU3VicHJvb2ZzLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgc3RlcHNPclN1YnByb29mcyA9IHJldmVyc2Uoc3RlcHNPclN1YnByb29mcyk7IC8vL1xuXG4gICAgY29uc3Qgc3RlcHNPclN1YnByb29mc1VuaWZ5V2l0aFByZW1pc2VzID0gYmFja3dhcmRzRXZlcnkodGhpcy5wcmVtaXNlcywgKHByZW1pc2UpID0+IHtcbiAgICAgIGNvbnN0IHN0ZXBVbmlmaWVzV2l0aFByZW1pc2UgPSB0aGlzLnVuaWZ5U3RlcHNPclN1YnByb29mc1dpdGhQcmVtaXNlKHN0ZXBzT3JTdWJwcm9vZnMsIHByZW1pc2UsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAoc3RlcFVuaWZpZXNXaXRoUHJlbWlzZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdGVwc09yU3VicHJvb2ZzVW5pZnlXaXRoUHJlbWlzZXM7XG4gIH1cblxuICB1bmlmeVN0ZXBzT3JTdWJwcm9vZnNXaXRoUHJlbWlzZShzdGVwc09yU3VicHJvb2ZzLCBwcmVtaXNlLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHN0ZXBzT3JTdWJwcm9vZnNVbmlmeVdpdGhQcmVtaXNlID0gZmFsc2U7XG5cbiAgICBpZiAoIXN0ZXBzT3JTdWJwcm9vZnNVbmlmeVdpdGhQcmVtaXNlKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgICBwcmVtaXNlVW5pZmllc0luZGVwZW5kZW50bHkgPSBwcmVtaXNlLnVuaWZ5SW5kZXBlbmRlbnRseShzdWJzdGl0dXRpb25zLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHByZW1pc2VVbmlmaWVzSW5kZXBlbmRlbnRseSkge1xuICAgICAgICBzdGVwc09yU3VicHJvb2ZzVW5pZnlXaXRoUHJlbWlzZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFzdGVwc09yU3VicHJvb2ZzVW5pZnlXaXRoUHJlbWlzZSkge1xuICAgICAgY29uc3Qgc3RlcE9yU3VicHJvb2YgPSBleHRyYWN0KHN0ZXBzT3JTdWJwcm9vZnMsIChzdGVwT3JTdWJwcm9vZikgPT4ge1xuICAgICAgICBjb25zdCBzdGVwT3JTdWJwcm9vZlVuaWZpZXMgPSBwcmVtaXNlLnVuaWZ5U3RlcE9yU3VicHJvb2Yoc3RlcE9yU3VicHJvb2YsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdGVwT3JTdWJwcm9vZlVuaWZpZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSkgfHwgbnVsbDtcblxuICAgICAgaWYgKHN0ZXBPclN1YnByb29mICE9PSBudWxsKSB7XG4gICAgICAgIHN0ZXBzT3JTdWJwcm9vZnNVbmlmeVdpdGhQcmVtaXNlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RlcHNPclN1YnByb29mc1VuaWZ5V2l0aFByZW1pc2U7XG4gIH1cblxuICB2ZXJpZnkoKSB7XG4gICAgbGV0IHZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgdGhpcy5jb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3J1bGVTdHJpbmd9JyBydWxlLi4uYCwgdGhpcy5ub2RlKTtcblxuICAgIGNvbnN0IGxhYmVsc1ZlcmlmeSA9IHRoaXMudmVyaWZ5TGFiZWxzKCk7XG5cbiAgICBpZiAobGFiZWxzVmVyaWZ5KSB7XG4gICAgICBjb25zdCBsb2NhbENvbnRleHQgPSBMb2NhbENvbnRleHQuZnJvbUNvbnRleHQodGhpcy5jb250ZXh0KSxcbiAgICAgICAgICAgIGNvbnRleHQgPSBsb2NhbENvbnRleHQsIC8vL1xuICAgICAgICAgICAgcHJlbWlzZXNWZXJpZnkgPSB0aGlzLnZlcmlmeVByZW1pc2VzKGNvbnRleHQpO1xuXG4gICAgICBpZiAocHJlbWlzZXNWZXJpZnkpIHtcbiAgICAgICAgY29uc3QgY29uY2x1c2lvblZlcmlmaWVzID0gdGhpcy52ZXJpZnlDb25jbHVzaW9uKGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChjb25jbHVzaW9uVmVyaWZpZXMpIHtcbiAgICAgICAgICBjb25zdCBwcm9vZlZlcmlmaWVzID0gdGhpcy52ZXJpZnlQcm9vZihjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChwcm9vZlZlcmlmaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlID0gdGhpczsgIC8vL1xuXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuYWRkUnVsZShydWxlKTtcblxuICAgICAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgdGhpcy5jb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuYCwgdGhpcy5ub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZXM7XG4gIH1cblxuICB2ZXJpZnlMYWJlbHMoKSB7XG4gICAgY29uc3QgbGFiZWxzVmVyaWZ5ID0gdGhpcy5sYWJlbHMuZXZlcnkoKGxhYmVsKSA9PiB7XG4gICAgICBjb25zdCBuYW1lT25seSA9IHRydWUsXG4gICAgICAgICAgICBsYWJlbFZlcmlmaWVzID0gbGFiZWwudmVyaWZ5KG5hbWVPbmx5KTtcblxuICAgICAgaWYgKGxhYmVsVmVyaWZpZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFiZWxzVmVyaWZ5O1xuICB9XG5cbiAgdmVyaWZ5UHJlbWlzZXMoY29udGV4dCkge1xuICAgIGNvbnN0IHByZW1pc2VzVmVyaWZ5ID0gdGhpcy5wcmVtaXNlcy5ldmVyeSgocHJlbWlzZSkgPT4ge1xuICAgICAgY29uc3QgcHJlbWlzZVZlcmlmaWVzID0gdGhpcy52ZXJpZnlQcmVtaXNlKHByZW1pc2UsIGNvbnRleHQpO1xuXG4gICAgICBpZiAocHJlbWlzZVZlcmlmaWVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHByZW1pc2VzVmVyaWZ5O1xuICB9XG5cbiAgdmVyaWZ5UHJlbWlzZShwcmVtaXNlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgcHJlbWlzZVZlcmlmaWVzID0gcHJlbWlzZS52ZXJpZnkoY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZVZlcmlmaWVzO1xuICB9XG5cbiAgdmVyaWZ5Q29uY2x1c2lvbihjb250ZXh0KSB7XG4gICAgY29uc3QgY29uY2x1c2lvblZlcmlmaWVzID0gdGhpcy5jb25jbHVzaW9uLnZlcmlmeShjb250ZXh0KTtcblxuICAgIHJldHVybiBjb25jbHVzaW9uVmVyaWZpZXM7XG4gIH1cblxuICB2ZXJpZnlQcm9vZihjb250ZXh0KSB7XG4gICAgbGV0IHByb29mVmVyaWZpZXM7XG5cbiAgICBpZiAodGhpcy5wcm9vZiA9PT0gbnVsbCkge1xuICAgICAgcHJvb2ZWZXJpZmllcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBTdWJzdGl0dXRpb25zLmZyb21Ob3RoaW5nKCk7XG5cbiAgICAgIHByb29mVmVyaWZpZXMgPSB0aGlzLnByb29mLnZlcmlmeShzdWJzdGl0dXRpb25zLCB0aGlzLmNvbmNsdXNpb24sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9vZlZlcmlmaWVzO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGxhYmVsc0pTT04gPSBsYWJlbHNUb0xhYmVsc0pTT04odGhpcy5sYWJlbHMpLFxuICAgICAgICAgIHByZW1pc2VzSlNPTiA9IHByZW1pc2VzVG9QcmVtaXNlc0pTT04odGhpcy5wcmVtaXNlcyksXG4gICAgICAgICAgY29uY2x1c2lvbkpTT04gPSBjb25jbHVzaW9uVG9Db25jbHVzaW9uSlNPTih0aGlzLmNvbmNsdXNpb24pLFxuICAgICAgICAgIGxhYmVscyA9IGxhYmVsc0pTT04sICAvLy9cbiAgICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VzSlNPTiwgIC8vL1xuICAgICAgICAgIGNvbmNsdXNpb24gPSBjb25jbHVzaW9uSlNPTiwgIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICBsYWJlbHMsXG4gICAgICAgICAgICBwcmVtaXNlcyxcbiAgICAgICAgICAgIGNvbmNsdXNpb25cbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiUnVsZVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IHJ1bGU7XG5cbiAgICBjb25zdCBub2RlID0gbnVsbCxcbiAgICAgICAgICBwcm9vZiA9IG51bGwsXG4gICAgICAgICAgbGFiZWxzID0gbGFiZWxzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgcHJlbWlzZXMgPSBwcmVtaXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIGNvbmNsdXNpb24gPSBjb25jbHVzaW9uRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nRnJvbUxhYmVsc1ByZW1pc2VzQW5kQ29uY2x1c2lvbihsYWJlbHMsIHByZW1pc2VzLCBjb25jbHVzaW9uKTtcblxuICAgIHJ1bGUgPSBuZXcgUnVsZShjb250ZXh0LCBub2RlLCBzdHJpbmcsIGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24sIHByb29mKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICAgIGNvbnN0IG5vZGUgPSBydWxlTm9kZSwgIC8vL1xuICAgICAgICAgIHByb29mID0gcHJvb2ZGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIGxhYmVscyA9IGxhYmVsc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgcHJlbWlzZXMgPSBwcmVtaXNlc0Zyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgY29uY2x1c2lvbiA9IGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHN0cmluZyA9IHN0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbiksXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKGNvbnRleHQsIG5vZGUsIHN0cmluZywgbGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbiwgcHJvb2YpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBwcm9vZkZyb21SdWxlTm9kZShydWxlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB7IFByb29mIH0gPSBvbnRvbG9neSxcbiAgICAgICAgcHJvb2ZOb2RlID0gcnVsZU5vZGUuZ2V0UHJvb2ZOb2RlKCksXG4gICAgICAgIHByb29mID0gUHJvb2YuZnJvbVByb29mTm9kZShwcm9vZk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZnVuY3Rpb24gbGFiZWxzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgTGFiZWwgfSA9IG9udG9sb2d5LFxuICAgICAgICBsYWJlbE5vZGVzID0gcnVsZU5vZGUuZ2V0TGFiZWxOb2RlcygpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbE5vZGVzLm1hcCgobGFiZWxOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBMYWJlbC5mcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gbGFiZWw7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG5cbmZ1bmN0aW9uIHByZW1pc2VzRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgUHJlbWlzZSB9ID0gb250b2xvZ3ksXG4gICAgICAgIHByZW1pc2VOb2RlcyA9IHJ1bGVOb2RlLmdldFByZW1pc2VOb2RlcygpLFxuICAgICAgICBwcmVtaXNlcyA9IHByZW1pc2VOb2Rlcy5tYXAoKHByZW1pc2VOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJlbWlzZSA9IFByZW1pc2UuZnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBwcmVtaXNlO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gcHJlbWlzZXM7XG59XG5cbmZ1bmN0aW9uIGNvbmNsdXNpb25Gcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25jbHVzaW9uIH0gPSBvbnRvbG9neSxcbiAgICAgICAgY29uY2x1c2lvbk5vZGUgPSBydWxlTm9kZS5nZXRDb25jbHVzaW9uTm9kZSgpLFxuICAgICAgICBjb25jbHVzaW9uID0gQ29uY2x1c2lvbi5mcm9tQ29uY2x1c2lvbk5vZGUoY29uY2x1c2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gIHJldHVybiBjb25jbHVzaW9uO1xufVxuXG5mdW5jdGlvbiBwcmVtaXNlc1N0cmluZ0Zyb21QcmVtaXNlcyhwcmVtaXNlcykge1xuICBjb25zdCBwcmVtaXNlc1N0cmluZyA9IHByZW1pc2VzLnJlZHVjZSgocHJlbWlzZXNTdHJpbmcsIHByZW1pc2UpID0+IHtcbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gcHJlbWlzZS5nZXRTdHJpbmcoKTtcblxuICAgIHByZW1pc2VzU3RyaW5nID0gKHByZW1pc2VzU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgIGAke3ByZW1pc2VzU3RyaW5nfSwgJHtwcmVtaXNlU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIHByZW1pc2VTdHJpbmc7ICAvLy9cblxuICAgIHJldHVybiBwcmVtaXNlc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHByZW1pc2VzU3RyaW5nO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uKGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pIHtcbiAgY29uc3QgcHJlbWlzZXNTdHJpbmcgPSBwcmVtaXNlc1N0cmluZ0Zyb21QcmVtaXNlcyhwcmVtaXNlcyksXG4gICAgICAgIGNvbmNsdXNpb25TdHJpbmcgPSBjb25jbHVzaW9uLmdldFN0cmluZygpLFxuICAgICAgICBsYWJlbHNTdHJpbmcgPSBsYWJlbHNTdHJpbmdGcm9tTGFiZWxzKGxhYmVscyksXG4gICAgICAgIHN0cmluZyA9IChwcmVtaXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbHNTdHJpbmd9IDo6IFske3ByZW1pc2VzU3RyaW5nfV0gLi4uICR7Y29uY2x1c2lvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbHNTdHJpbmd9IDo6ICR7Y29uY2x1c2lvblN0cmluZ31gO1xuXG4gIHJldHVybiBzdHJpbmc7XG59XG4iXSwibmFtZXMiOlsicmV2ZXJzZSIsImFycmF5VXRpbGl0aWVzIiwiZXh0cmFjdCIsImJhY2t3YXJkc0V2ZXJ5IiwiZGVmaW5lIiwiUnVsZSIsImNvbnRleHQiLCJub2RlIiwic3RyaW5nIiwibGFiZWxzIiwicHJlbWlzZXMiLCJjb25jbHVzaW9uIiwicHJvb2YiLCJnZXRDb250ZXh0IiwiZ2V0Tm9kZSIsImdldFN0cmluZyIsImdldExhYmVscyIsImdldFByZW1pc2VzIiwiZ2V0Q29uY2x1c2lvbiIsImdldFByb29mIiwibWF0Y2hNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWVNYXRjaGVzIiwic29tZSIsImxhYmVsIiwidW5pZnlTdGF0ZW1lbnRBbmRTdGVwc09yU3VicHJvb2ZzIiwic3RhdGVtZW50Iiwic3RlcHNPclN1YnByb29mcyIsInN0YXRlbWVudEFuZFN0ZXBzT3JTdWJwcm9vZnNVbmlmeSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0Iiwic3Vic3RpdHV0aW9ucyIsIlN1YnN0aXR1dGlvbnMiLCJmcm9tTm90aGluZyIsInN0YXRlbWVudFVuaWZpZXNXaXRoQ29uY2x1c2lvbiIsInVuaWZ5U3RhdGVtZW50V2l0aENvbmNsdXNpb24iLCJzdGVwc09yU3VicHJvb2ZzVW5pZnlXaXRoUHJlbWlzZXMiLCJ1bmlmeVN0ZXBzT3JTdWJwcm9vZnNXaXRoUHJlbWlzZXMiLCJzdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJhcmVSZXNvbHZlZCIsInN0YXRlbWVudFVuaWZpZXMiLCJ1bmlmeVN0YXRlbWVudCIsInByZW1pc2UiLCJzdGVwVW5pZmllc1dpdGhQcmVtaXNlIiwidW5pZnlTdGVwc09yU3VicHJvb2ZzV2l0aFByZW1pc2UiLCJzdGVwc09yU3VicHJvb2ZzVW5pZnlXaXRoUHJlbWlzZSIsInByZW1pc2VVbmlmaWVzSW5kZXBlbmRlbnRseSIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInN0ZXBPclN1YnByb29mIiwic3RlcE9yU3VicHJvb2ZVbmlmaWVzIiwidW5pZnlTdGVwT3JTdWJwcm9vZiIsInZlcmlmeSIsInZlcmlmaWVzIiwicnVsZVN0cmluZyIsInRyYWNlIiwibGFiZWxzVmVyaWZ5IiwidmVyaWZ5TGFiZWxzIiwibG9jYWxDb250ZXh0IiwiTG9jYWxDb250ZXh0IiwiZnJvbUNvbnRleHQiLCJwcmVtaXNlc1ZlcmlmeSIsInZlcmlmeVByZW1pc2VzIiwiY29uY2x1c2lvblZlcmlmaWVzIiwidmVyaWZ5Q29uY2x1c2lvbiIsInByb29mVmVyaWZpZXMiLCJ2ZXJpZnlQcm9vZiIsInJ1bGUiLCJhZGRSdWxlIiwiZGVidWciLCJldmVyeSIsIm5hbWVPbmx5IiwibGFiZWxWZXJpZmllcyIsInByZW1pc2VWZXJpZmllcyIsInZlcmlmeVByZW1pc2UiLCJ0b0pTT04iLCJsYWJlbHNKU09OIiwibGFiZWxzVG9MYWJlbHNKU09OIiwicHJlbWlzZXNKU09OIiwicHJlbWlzZXNUb1ByZW1pc2VzSlNPTiIsImNvbmNsdXNpb25KU09OIiwiY29uY2x1c2lvblRvQ29uY2x1c2lvbkpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJsYWJlbHNGcm9tSlNPTiIsInByZW1pc2VzRnJvbUpTT04iLCJjb25jbHVzaW9uRnJvbUpTT04iLCJzdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uIiwiZnJvbVJ1bGVOb2RlIiwicnVsZU5vZGUiLCJwcm9vZkZyb21SdWxlTm9kZSIsImxhYmVsc0Zyb21SdWxlTm9kZSIsInByZW1pc2VzRnJvbVJ1bGVOb2RlIiwiY29uY2x1c2lvbkZyb21SdWxlTm9kZSIsIm5hbWUiLCJQcm9vZiIsIm9udG9sb2d5IiwicHJvb2ZOb2RlIiwiZ2V0UHJvb2ZOb2RlIiwiZnJvbVByb29mTm9kZSIsIkxhYmVsIiwibGFiZWxOb2RlcyIsImdldExhYmVsTm9kZXMiLCJtYXAiLCJsYWJlbE5vZGUiLCJmcm9tTGFiZWxOb2RlIiwiUHJlbWlzZSIsInByZW1pc2VOb2RlcyIsImdldFByZW1pc2VOb2RlcyIsInByZW1pc2VOb2RlIiwiZnJvbVByZW1pc2VOb2RlIiwiQ29uY2x1c2lvbiIsImNvbmNsdXNpb25Ob2RlIiwiZ2V0Q29uY2x1c2lvbk5vZGUiLCJmcm9tQ29uY2x1c2lvbk5vZGUiLCJwcmVtaXNlc1N0cmluZ0Zyb21QcmVtaXNlcyIsInByZW1pc2VzU3RyaW5nIiwicmVkdWNlIiwicHJlbWlzZVN0cmluZyIsImNvbmNsdXNpb25TdHJpbmciLCJsYWJlbHNTdHJpbmciLCJsYWJlbHNTdHJpbmdGcm9tTGFiZWxzIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFtQkE7OztlQUFBOzs7eUJBakIrQjtnRUFFVjs0REFDSTtvRUFDQztpQ0FHYTtvQkFNSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFM0MsSUFBUUEsVUFBcUNDLHlCQUFjLENBQW5ERCxTQUFTRSxVQUE0QkQseUJBQWMsQ0FBMUNDLFNBQVNDLGlCQUFtQkYseUJBQWMsQ0FBakNFO0lBRTFCLFdBQWVDLElBQUFBLGdCQUFNLHlCQUFDO2FBQU1DLEtBQ2RDLE9BQU8sRUFBRUMsSUFBSSxFQUFFQyxNQUFNLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxVQUFVLEVBQUVDLEtBQUs7Z0NBRDVDUDtRQUV4QixJQUFJLENBQUNDLE9BQU8sR0FBR0E7UUFDZixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLE1BQU0sR0FBR0E7UUFDZCxJQUFJLENBQUNDLE1BQU0sR0FBR0E7UUFDZCxJQUFJLENBQUNDLFFBQVEsR0FBR0E7UUFDaEIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTs7OztZQUdmQyxLQUFBQTttQkFB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