occam-verify-cli 0.0.492 → 0.0.494

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.
@@ -1,15 +1,11 @@
1
1
  "use strict";
2
2
 
3
- import ProofStep from "../step/proof";
4
3
  import verifyDerivation from "../verify/derivation";
5
- import verifyQualifiedStatement from "./statement/qualified";
6
4
 
7
5
  import { matchNode } from "../utilities/node";
8
6
  import { nodeQuery } from "../utilities/query";
9
7
 
10
- const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
11
- derivationNodeQuery = nodeQuery("/proof/derivation!"),
12
- qualifiedStatementNodeQuery = nodeQuery("/proof/qualifiedStatement!");
8
+ const derivationNodeQuery = nodeQuery("/proof/derivation!");
13
9
 
14
10
  export default function verifyProof(proofNode, conclusion, proofContext) {
15
11
  let proofVerified = false;
@@ -17,27 +13,9 @@ export default function verifyProof(proofNode, conclusion, proofContext) {
17
13
  proofContext.begin(proofNode);
18
14
 
19
15
  const derivationNode = derivationNodeQuery(proofNode),
20
- qualifiedStatementNode = qualifiedStatementNodeQuery(proofNode);
16
+ derivationVerified = verifyDerivation(derivationNode, proofContext);
21
17
 
22
- let derivationVerified = false,
23
- qualifiedStatementVerified = false;
24
-
25
- if (derivationNode !== null) {
26
- derivationVerified = verifyDerivation(derivationNode, proofContext);
27
- }
28
-
29
- if (qualifiedStatementNode !== null) {
30
- qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, proofContext);
31
-
32
- if (qualifiedStatementVerified) {
33
- const statementNode = statementNodeQuery(qualifiedStatementNode),
34
- proofStep = ProofStep.fromStatementNode(statementNode);
35
-
36
- proofContext.addProofStep(proofStep);
37
- }
38
- }
39
-
40
- if (derivationVerified || qualifiedStatementVerified) {
18
+ if (derivationVerified) {
41
19
  const lastProofStep = proofContext.getLastProofStep(),
42
20
  proofStep = lastProofStep, ///
43
21
  statementNode = proofStep.getStatementNode(),
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
2
 
3
- import verifyStatementAsEquality from "../verify/statementAsEquality";
4
- import verifyStatementTypeAssertion from "../verify/statementTypeAssertion";
3
+ import verifyTypeAssertion from "../verify/assertion/type";
4
+
5
+ import { nodeQuery } from "../utilities/query";
6
+
7
+ const typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
5
8
 
6
9
  export default function verifyStatement(statementNode, qualified, proofContext) {
7
10
  let statementVerified = false;
@@ -9,15 +12,13 @@ export default function verifyStatement(statementNode, qualified, proofContext)
9
12
  proofContext.begin(statementNode);
10
13
 
11
14
  if (!statementVerified) {
12
- const equalityVerifiedAsEquality = verifyStatementAsEquality(statementNode, qualified, proofContext);
15
+ const typeAssertionNode = typeAssertionNodeQuery(statementNode);
13
16
 
14
- statementVerified = equalityVerifiedAsEquality; ///
15
- }
16
-
17
- if (!statementVerified) {
18
- const statementTypeAssertionVerified = verifyStatementTypeAssertion(statementNode, qualified, proofContext);
17
+ if (typeAssertionNode !== null) {
18
+ const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, qualified, proofContext);
19
19
 
20
- statementVerified = statementTypeAssertionVerified; ///
20
+ statementVerified = typeAssertionVerified; ///
21
+ }
21
22
  }
22
23
 
23
24
  statementVerified ?
package/lib/equality.js DELETED
@@ -1,190 +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 Equality;
9
- }
10
- });
11
- var _query = require("./utilities/query");
12
- var _ruleNames = require("./ruleNames");
13
- var _constants = require("./constants");
14
- function _classCallCheck(instance, Constructor) {
15
- if (!(instance instanceof Constructor)) {
16
- throw new TypeError("Cannot call a class as a function");
17
- }
18
- }
19
- function _defineProperties(target, props) {
20
- for(var i = 0; i < props.length; i++){
21
- var descriptor = props[i];
22
- descriptor.enumerable = descriptor.enumerable || false;
23
- descriptor.configurable = true;
24
- if ("value" in descriptor) descriptor.writable = true;
25
- Object.defineProperty(target, descriptor.key, descriptor);
26
- }
27
- }
28
- function _createClass(Constructor, protoProps, staticProps) {
29
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
30
- if (staticProps) _defineProperties(Constructor, staticProps);
31
- return Constructor;
32
- }
33
- var specialNodeQuery = (0, _query.nodeQuery)("/statement/@special!"), leftTermNodeQuery = (0, _query.nodeQuery)("/statement/term[0]"), rightTermNodeQuery = (0, _query.nodeQuery)("/statement/term[1]");
34
- var Equality = /*#__PURE__*/ function() {
35
- function Equality(leftTermNode, rightTermNode) {
36
- _classCallCheck(this, Equality);
37
- this.leftTermNode = leftTermNode;
38
- this.rightTermNode = rightTermNode;
39
- }
40
- _createClass(Equality, [
41
- {
42
- key: "getLeftTermNode",
43
- value: function getLeftTermNode() {
44
- return this.leftTermNode;
45
- }
46
- },
47
- {
48
- key: "getRightTermNode",
49
- value: function getRightTermNode() {
50
- return this.rightTermNode;
51
- }
52
- },
53
- {
54
- key: "match",
55
- value: function match(equality, equalities, proofContext) {
56
- var matches = false;
57
- var leftTermNode = equality.getLeftTermNode(), rightTermNode = equality.getRightTermNode();
58
- if (!matches) {
59
- var reversed = false, leftTermNodeAndRightTermNodeMatch = this.matchLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, reversed, equalities, proofContext);
60
- matches = leftTermNodeAndRightTermNodeMatch; ///
61
- }
62
- if (!matches) {
63
- var reversed1 = true, leftTermNodeAndRightTermNodeMatch1 = this.matchLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, reversed1, equalities, proofContext);
64
- matches = leftTermNodeAndRightTermNodeMatch1; ///
65
- }
66
- return matches;
67
- }
68
- },
69
- {
70
- key: "matchLeftTermNodeAndRightTermNode",
71
- value: function matchLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, reversed, equalities, proofContext) {
72
- var leftTermNodeAndRightTermNodeMatch = true;
73
- if (leftTermNodeAndRightTermNodeMatch) {
74
- var leftNonTerminalNode = reversed ? this.rightTermNode : this.leftTermNode, rightNonTerminalNode = leftTermNode, nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, proofContext);
75
- leftTermNodeAndRightTermNodeMatch = nonTerminalNodeEquates; ///
76
- }
77
- if (leftTermNodeAndRightTermNodeMatch) {
78
- var leftNonTerminalNode1 = reversed ? this.leftTermNode : this.rightTermNode, rightNonTerminalNode1 = rightTermNode, nonTerminalNodeEquates1 = equateNonTerminalNode(leftNonTerminalNode1, rightNonTerminalNode1, equalities, proofContext);
79
- leftTermNodeAndRightTermNodeMatch = nonTerminalNodeEquates1; ///
80
- }
81
- return leftTermNodeAndRightTermNodeMatch;
82
- }
83
- },
84
- {
85
- key: "equate",
86
- value: function equate(equalities, proofContext) {
87
- var leftNonTerminalNode = this.leftTermNode, rightNonTerminalNode = this.rightTermNode, nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, proofContext), equates = nonTerminalNodeEquates; ///
88
- return equates;
89
- }
90
- }
91
- ], [
92
- {
93
- key: "fromProofStep",
94
- value: function fromProofStep(proofStep) {
95
- var equality = null;
96
- var statementNode = proofStep.getStatementNode();
97
- if (statementNode !== null) {
98
- var specialNode = specialNodeQuery(statementNode);
99
- if (specialNode !== null) {
100
- var terminalNode = specialNode, terminalNodeContent = terminalNode.getContent();
101
- if (terminalNodeContent === _constants.EQUALS_CHARACTER) {
102
- var leftTermNode = leftTermNodeQuery(statementNode), rightTermNode = rightTermNodeQuery(statementNode);
103
- equality = new Equality(leftTermNode, rightTermNode);
104
- }
105
- }
106
- }
107
- return equality;
108
- }
109
- },
110
- {
111
- key: "fromLeftTermNodeAndRightTermNode",
112
- value: function fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode) {
113
- var equality = new Equality(leftTermNode, rightTermNode);
114
- return equality;
115
- }
116
- }
117
- ]);
118
- return Equality;
119
- }();
120
- function equateNode(nodeA, nodeB, equalities, proofContext) {
121
- var nodeEquates = false;
122
- var nodeATerminalNode = nodeA.isTerminalNode(), nodeBTerminalNode = nodeB.isTerminalNode();
123
- if (nodeATerminalNode === nodeBTerminalNode) {
124
- if (nodeATerminalNode) {
125
- var terminalNodeA = nodeA, terminalNodeB = nodeB, terminalNodeEquates = equateTerminalNode(terminalNodeA, terminalNodeB, equalities, proofContext);
126
- nodeEquates = terminalNodeEquates; ///
127
- } else {
128
- var nonTerminalNodeA = nodeA, nonTerminalNodeB = nodeB, nonTerminalNodeEquates = equateNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, equalities, proofContext);
129
- nodeEquates = nonTerminalNodeEquates; ///
130
- }
131
- }
132
- return nodeEquates;
133
- }
134
- function equateNodes(leftNodes, rightNodes, equalities, proofContext) {
135
- var nodesEquate = false;
136
- var leftNodesLength = leftNodes.length, rightNodesLength = rightNodes.length;
137
- if (leftNodesLength === rightNodesLength) {
138
- nodesEquate = leftNodes.every(function(LeftNode, index) {
139
- var rightNode = rightNodes[index], nodeEquates = equateNode(LeftNode, rightNode, equalities, proofContext);
140
- if (nodeEquates) {
141
- return true;
142
- }
143
- });
144
- }
145
- return nodesEquate;
146
- }
147
- function equateTerminalNode(terminalNodeA, terminalNodeB, equalities, proofContext) {
148
- var matches = terminalNodeA.match(terminalNodeB), terminalNodeEquates = matches; ///
149
- return terminalNodeEquates;
150
- }
151
- function equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, proofContext) {
152
- var nonTerminalNodeEquates = false;
153
- var leftNonTerminalNodeRuleName = leftNonTerminalNode.getRuleName(), rightNonTerminalNodeRuleName = rightNonTerminalNode.getRuleName();
154
- if (leftNonTerminalNodeRuleName === rightNonTerminalNodeRuleName) {
155
- var ruleName = leftNonTerminalNodeRuleName, ruleNameTermRuleName = ruleName === _ruleNames.TERM_RULE_NAME;
156
- if (ruleNameTermRuleName) {
157
- var leftTermNode = leftNonTerminalNode, rightTermNode = rightNonTerminalNode, termNodeEquates = equateTermNode(leftTermNode, rightTermNode, equalities, proofContext);
158
- nonTerminalNodeEquates = termNodeEquates; ///
159
- }
160
- if (!nonTerminalNodeEquates) {
161
- var leftNonTerminalNodeChildNodes = leftNonTerminalNode.getChildNodes(), rightNonTerminalNodeChildNodes = rightNonTerminalNode.getChildNodes(), leftNodes = leftNonTerminalNodeChildNodes, rightNodes = rightNonTerminalNodeChildNodes, nodesEquate = equateNodes(leftNodes, rightNodes, equalities, proofContext);
162
- nonTerminalNodeEquates = nodesEquate; ///
163
- }
164
- }
165
- return nonTerminalNodeEquates;
166
- }
167
- function equateTermNode(leftTermNode, rightTermNode, equalities, proofContext) {
168
- var equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode), equalityA = equality, equalityMatches = equalities.some(function(equality) {
169
- var equalitiesB = equalities; ///
170
- var equalityB = equality; ///
171
- equalitiesB = pruneEqualities(equalitiesB, equalityB); ///
172
- var equalityAMatchesEqualityB = equalityA.match(equalityB, equalitiesB, proofContext);
173
- if (equalityAMatchesEqualityB) {
174
- return true;
175
- }
176
- }), termNodeEquates = equalityMatches; ///
177
- return termNodeEquates;
178
- }
179
- function pruneEqualities(equalities, equality) {
180
- var equalityA = equality; ///
181
- equalities = equalities.filter(function(equality) {
182
- var equalityB = equality; ///
183
- if (equalityA !== equalityB) {
184
- return true;
185
- }
186
- });
187
- return equalities;
188
- }
189
-
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9lcXVhbGl0eS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBURVJNX1JVTEVfTkFNRSB9IGZyb20gXCIuL3J1bGVOYW1lc1wiO1xuaW1wb3J0IHsgRVFVQUxTX0NIQVJBQ1RFUiB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jb25zdCBzcGVjaWFsTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC9Ac3BlY2lhbCFcIiksXG4gICAgICBsZWZ0VGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvdGVybVswXVwiKSxcbiAgICAgIHJpZ2h0VGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvdGVybVsxXVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXF1YWxpdHkge1xuICBjb25zdHJ1Y3RvcihsZWZ0VGVybU5vZGUsIHJpZ2h0VGVybU5vZGUpIHtcbiAgICB0aGlzLmxlZnRUZXJtTm9kZSA9IGxlZnRUZXJtTm9kZTtcbiAgICB0aGlzLnJpZ2h0VGVybU5vZGUgPSByaWdodFRlcm1Ob2RlO1xuICB9XG5cbiAgZ2V0TGVmdFRlcm1Ob2RlKCkge1xuICAgIHJldHVybiB0aGlzLmxlZnRUZXJtTm9kZTtcbiAgfVxuXG4gIGdldFJpZ2h0VGVybU5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmlnaHRUZXJtTm9kZTtcbiAgfVxuXG4gIG1hdGNoKGVxdWFsaXR5LCBlcXVhbGl0aWVzLCBwcm9vZkNvbnRleHQpIHtcbiAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgbGVmdFRlcm1Ob2RlID0gZXF1YWxpdHkuZ2V0TGVmdFRlcm1Ob2RlKCksXG4gICAgICAgICAgcmlnaHRUZXJtTm9kZSA9IGVxdWFsaXR5LmdldFJpZ2h0VGVybU5vZGUoKTtcblxuICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgY29uc3QgcmV2ZXJzZWQgPSBmYWxzZSxcbiAgICAgICAgICAgIGxlZnRUZXJtTm9kZUFuZFJpZ2h0VGVybU5vZGVNYXRjaCA9IHRoaXMubWF0Y2hMZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgcmlnaHRUZXJtTm9kZSwgcmV2ZXJzZWQsIGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCk7XG5cbiAgICAgIG1hdGNoZXMgPSBsZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlTWF0Y2g7ICAvLy9cbiAgICB9XG5cbiAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgIGNvbnN0IHJldmVyc2VkID0gdHJ1ZSxcbiAgICAgICAgICAgIGxlZnRUZXJtTm9kZUFuZFJpZ2h0VGVybU5vZGVNYXRjaCA9IHRoaXMubWF0Y2hMZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlKGxlZnRUZXJtTm9kZSwgcmlnaHRUZXJtTm9kZSwgcmV2ZXJzZWQsIGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCk7XG5cbiAgICAgIG1hdGNoZXMgPSBsZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlTWF0Y2g7ICAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTGVmdFRlcm1Ob2RlQW5kUmlnaHRUZXJtTm9kZShsZWZ0VGVybU5vZGUsIHJpZ2h0VGVybU5vZGUsIHJldmVyc2VkLCBlcXVhbGl0aWVzLCBwcm9vZkNvbnRleHQpIHtcbiAgICBsZXQgbGVmdFRlcm1Ob2RlQW5kUmlnaHRUZXJtTm9kZU1hdGNoID0gdHJ1ZTtcblxuICAgIGlmIChsZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGxlZnROb25UZXJtaW5hbE5vZGUgPSByZXZlcnNlZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0VGVybU5vZGUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlZnRUZXJtTm9kZSwgIC8vL1xuICAgICAgICAgICAgcmlnaHROb25UZXJtaW5hbE5vZGUgPSBsZWZ0VGVybU5vZGUsICAvLy9cbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZUVxdWF0ZXMgPSBlcXVhdGVOb25UZXJtaW5hbE5vZGUobGVmdE5vblRlcm1pbmFsTm9kZSwgcmlnaHROb25UZXJtaW5hbE5vZGUsIGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCk7XG5cbiAgICAgIGxlZnRUZXJtTm9kZUFuZFJpZ2h0VGVybU5vZGVNYXRjaCA9IG5vblRlcm1pbmFsTm9kZUVxdWF0ZXM7IC8vL1xuICAgIH1cblxuICAgIGlmIChsZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGxlZnROb25UZXJtaW5hbE5vZGUgPSByZXZlcnNlZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlZnRUZXJtTm9kZSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmlnaHRUZXJtTm9kZSwgIC8vL1xuICAgICAgICAgICAgcmlnaHROb25UZXJtaW5hbE5vZGUgPSByaWdodFRlcm1Ob2RlLCAgLy8vXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGVFcXVhdGVzID0gZXF1YXRlTm9uVGVybWluYWxOb2RlKGxlZnROb25UZXJtaW5hbE5vZGUsIHJpZ2h0Tm9uVGVybWluYWxOb2RlLCBlcXVhbGl0aWVzLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgICBsZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlTWF0Y2ggPSBub25UZXJtaW5hbE5vZGVFcXVhdGVzOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gbGVmdFRlcm1Ob2RlQW5kUmlnaHRUZXJtTm9kZU1hdGNoO1xuICB9XG5cbiAgZXF1YXRlKGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCkge1xuICAgIGNvbnN0IGxlZnROb25UZXJtaW5hbE5vZGUgPSB0aGlzLmxlZnRUZXJtTm9kZSwgIC8vL1xuICAgICAgICAgIHJpZ2h0Tm9uVGVybWluYWxOb2RlID0gdGhpcy5yaWdodFRlcm1Ob2RlLCAgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlRXF1YXRlcyA9IGVxdWF0ZU5vblRlcm1pbmFsTm9kZShsZWZ0Tm9uVGVybWluYWxOb2RlLCByaWdodE5vblRlcm1pbmFsTm9kZSwgZXF1YWxpdGllcywgcHJvb2ZDb250ZXh0KSxcbiAgICAgICAgICBlcXVhdGVzID0gbm9uVGVybWluYWxOb2RlRXF1YXRlczsgLy8vXG5cbiAgICByZXR1cm4gZXF1YXRlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUHJvb2ZTdGVwKHByb29mU3RlcCkge1xuICAgIGxldCBlcXVhbGl0eSA9IG51bGw7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gcHJvb2ZTdGVwLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICAgIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzcGVjaWFsTm9kZSA9IHNwZWNpYWxOb2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgIGlmIChzcGVjaWFsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBzcGVjaWFsTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gICAgICAgIGlmICh0ZXJtaW5hbE5vZGVDb250ZW50ID09PSBFUVVBTFNfQ0hBUkFDVEVSKSB7XG4gICAgICAgICAgY29uc3QgbGVmdFRlcm1Ob2RlID0gbGVmdFRlcm1Ob2RlUXVlcnkoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgICAgICAgcmlnaHRUZXJtTm9kZSA9IHJpZ2h0VGVybU5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICAgIGVxdWFsaXR5ID0gbmV3IEVxdWFsaXR5KGxlZnRUZXJtTm9kZSwgcmlnaHRUZXJtTm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXF1YWxpdHk7XG4gIH1cblxuICBzdGF0aWMgZnJvbUxlZnRUZXJtTm9kZUFuZFJpZ2h0VGVybU5vZGUobGVmdFRlcm1Ob2RlLCByaWdodFRlcm1Ob2RlKSB7XG4gICAgY29uc3QgZXF1YWxpdHkgPSBuZXcgRXF1YWxpdHkobGVmdFRlcm1Ob2RlLCByaWdodFRlcm1Ob2RlKTtcblxuICAgIHJldHVybiBlcXVhbGl0eTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlcXVhdGVOb2RlKG5vZGVBLCBub2RlQiwgZXF1YWxpdGllcywgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCBub2RlRXF1YXRlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVBVGVybWluYWxOb2RlID0gbm9kZUEuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgbm9kZUJUZXJtaW5hbE5vZGUgPSBub2RlQi5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlQVRlcm1pbmFsTm9kZSA9PT0gbm9kZUJUZXJtaW5hbE5vZGUpIHtcbiAgICBpZiAobm9kZUFUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZUEgPSBub2RlQSwgIC8vL1xuICAgICAgICAgICAgdGVybWluYWxOb2RlQiA9IG5vZGVCLCAgLy8vXG4gICAgICAgICAgICB0ZXJtaW5hbE5vZGVFcXVhdGVzID0gZXF1YXRlVGVybWluYWxOb2RlKHRlcm1pbmFsTm9kZUEsIHRlcm1pbmFsTm9kZUIsIGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCk7XG5cbiAgICAgIG5vZGVFcXVhdGVzID0gdGVybWluYWxOb2RlRXF1YXRlczsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGVBID0gbm9kZUEsICAvLy9cbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZUIgPSBub2RlQiwgLy8vXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGVFcXVhdGVzID0gZXF1YXRlTm9uVGVybWluYWxOb2RlKG5vblRlcm1pbmFsTm9kZUEsIG5vblRlcm1pbmFsTm9kZUIsIGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCk7XG5cbiAgICAgIG5vZGVFcXVhdGVzID0gbm9uVGVybWluYWxOb2RlRXF1YXRlczsgLy8vXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGVFcXVhdGVzO1xufVxuXG5mdW5jdGlvbiBlcXVhdGVOb2RlcyhsZWZ0Tm9kZXMsIHJpZ2h0Tm9kZXMsIGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCkge1xuICBsZXQgbm9kZXNFcXVhdGUgPSBmYWxzZTtcblxuICBjb25zdCBsZWZ0Tm9kZXNMZW5ndGggPSBsZWZ0Tm9kZXMubGVuZ3RoLFxuICAgICAgICByaWdodE5vZGVzTGVuZ3RoID0gcmlnaHROb2Rlcy5sZW5ndGg7XG5cbiAgaWYgKGxlZnROb2Rlc0xlbmd0aCA9PT0gcmlnaHROb2Rlc0xlbmd0aCkge1xuICAgIG5vZGVzRXF1YXRlID0gbGVmdE5vZGVzLmV2ZXJ5KChMZWZ0Tm9kZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHJpZ2h0Tm9kZSA9IHJpZ2h0Tm9kZXNbaW5kZXhdLFxuICAgICAgICAgICAgbm9kZUVxdWF0ZXMgPSBlcXVhdGVOb2RlKExlZnROb2RlLCByaWdodE5vZGUsIGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCk7XG5cbiAgICAgIGlmIChub2RlRXF1YXRlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBub2Rlc0VxdWF0ZTtcbn1cblxuZnVuY3Rpb24gZXF1YXRlVGVybWluYWxOb2RlKHRlcm1pbmFsTm9kZUEsIHRlcm1pbmFsTm9kZUIsIGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCkge1xuICBjb25zdCBtYXRjaGVzID0gdGVybWluYWxOb2RlQS5tYXRjaCh0ZXJtaW5hbE5vZGVCKSxcbiAgICAgICAgdGVybWluYWxOb2RlRXF1YXRlcyA9IG1hdGNoZXM7ICAvLy9cblxuICByZXR1cm4gdGVybWluYWxOb2RlRXF1YXRlcztcbn1cblxuZnVuY3Rpb24gZXF1YXRlTm9uVGVybWluYWxOb2RlKGxlZnROb25UZXJtaW5hbE5vZGUsIHJpZ2h0Tm9uVGVybWluYWxOb2RlLCBlcXVhbGl0aWVzLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IG5vblRlcm1pbmFsTm9kZUVxdWF0ZXMgPSBmYWxzZTtcblxuICBjb25zdCBsZWZ0Tm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBsZWZ0Tm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgIHJpZ2h0Tm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSByaWdodE5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gIGlmIChsZWZ0Tm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IHJpZ2h0Tm9uVGVybWluYWxOb2RlUnVsZU5hbWUpIHtcbiAgICBjb25zdCBydWxlTmFtZSA9IGxlZnROb25UZXJtaW5hbE5vZGVSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWVUZXJtUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IFRFUk1fUlVMRV9OQU1FKTtcblxuICAgIGlmIChydWxlTmFtZVRlcm1SdWxlTmFtZSkge1xuICAgICAgY29uc3QgbGVmdFRlcm1Ob2RlID0gbGVmdE5vblRlcm1pbmFsTm9kZSwgLy8vXG4gICAgICAgICAgICByaWdodFRlcm1Ob2RlID0gcmlnaHROb25UZXJtaW5hbE5vZGUsIC8vL1xuICAgICAgICAgICAgdGVybU5vZGVFcXVhdGVzID0gZXF1YXRlVGVybU5vZGUobGVmdFRlcm1Ob2RlLCByaWdodFRlcm1Ob2RlLCBlcXVhbGl0aWVzLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgICBub25UZXJtaW5hbE5vZGVFcXVhdGVzID0gdGVybU5vZGVFcXVhdGVzOyAgLy8vXG4gICAgfVxuXG4gICAgaWYgKCFub25UZXJtaW5hbE5vZGVFcXVhdGVzKSB7XG4gICAgICBjb25zdCBsZWZ0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyA9IGxlZnROb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgcmlnaHROb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzID0gcmlnaHROb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgbGVmdE5vZGVzID0gbGVmdE5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgICAgcmlnaHROb2RlcyA9IHJpZ2h0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgICBub2Rlc0VxdWF0ZSA9IGVxdWF0ZU5vZGVzKGxlZnROb2RlcywgcmlnaHROb2RlcywgZXF1YWxpdGllcywgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgbm9uVGVybWluYWxOb2RlRXF1YXRlcyA9IG5vZGVzRXF1YXRlOyAvLy9cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9uVGVybWluYWxOb2RlRXF1YXRlcztcbn1cblxuZnVuY3Rpb24gZXF1YXRlVGVybU5vZGUobGVmdFRlcm1Ob2RlLCByaWdodFRlcm1Ob2RlLCBlcXVhbGl0aWVzLCBwcm9vZkNvbnRleHQpIHtcbiAgY29uc3QgZXF1YWxpdHkgPSBFcXVhbGl0eS5mcm9tTGVmdFRlcm1Ob2RlQW5kUmlnaHRUZXJtTm9kZShsZWZ0VGVybU5vZGUsIHJpZ2h0VGVybU5vZGUpLFxuICAgICAgICBlcXVhbGl0eUEgPSBlcXVhbGl0eSwgLy8vXG4gICAgICAgIGVxdWFsaXR5TWF0Y2hlcyA9IGVxdWFsaXRpZXMuc29tZSgoZXF1YWxpdHkpID0+IHsgLy8vXG4gICAgICAgICAgbGV0IGVxdWFsaXRpZXNCID0gZXF1YWxpdGllczsgLy8vXG5cbiAgICAgICAgICBjb25zdCBlcXVhbGl0eUIgPSBlcXVhbGl0eTsgLy8vXG5cbiAgICAgICAgICBlcXVhbGl0aWVzQiA9IHBydW5lRXF1YWxpdGllcyhlcXVhbGl0aWVzQiwgZXF1YWxpdHlCKTsgIC8vL1xuXG4gICAgICAgICAgY29uc3QgZXF1YWxpdHlBTWF0Y2hlc0VxdWFsaXR5QiA9IGVxdWFsaXR5QS5tYXRjaChlcXVhbGl0eUIsIGVxdWFsaXRpZXNCLCBwcm9vZkNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGVxdWFsaXR5QU1hdGNoZXNFcXVhbGl0eUIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRlcm1Ob2RlRXF1YXRlcyA9IGVxdWFsaXR5TWF0Y2hlczsgIC8vL1xuXG4gIHJldHVybiB0ZXJtTm9kZUVxdWF0ZXM7XG59XG5cbmZ1bmN0aW9uIHBydW5lRXF1YWxpdGllcyhlcXVhbGl0aWVzLCBlcXVhbGl0eSkge1xuICBjb25zdCBlcXVhbGl0eUEgPSBlcXVhbGl0eTsgLy8vXG5cbiAgZXF1YWxpdGllcyA9IGVxdWFsaXRpZXMuZmlsdGVyKChlcXVhbGl0eSkgPT4ge1xuICAgIGNvbnN0IGVxdWFsaXR5QiA9IGVxdWFsaXR5OyAvLy9cblxuICAgIGlmIChlcXVhbGl0eUEgIT09IGVxdWFsaXR5Qikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZXF1YWxpdGllcztcbn1cbiJdLCJuYW1lcyI6WyJFcXVhbGl0eSIsInNwZWNpYWxOb2RlUXVlcnkiLCJub2RlUXVlcnkiLCJsZWZ0VGVybU5vZGVRdWVyeSIsInJpZ2h0VGVybU5vZGVRdWVyeSIsImxlZnRUZXJtTm9kZSIsInJpZ2h0VGVybU5vZGUiLCJnZXRMZWZ0VGVybU5vZGUiLCJnZXRSaWdodFRlcm1Ob2RlIiwibWF0Y2giLCJlcXVhbGl0eSIsImVxdWFsaXRpZXMiLCJwcm9vZkNvbnRleHQiLCJtYXRjaGVzIiwicmV2ZXJzZWQiLCJsZWZ0VGVybU5vZGVBbmRSaWdodFRlcm1Ob2RlTWF0Y2giLCJtYXRjaExlZnRUZXJtTm9kZUFuZFJpZ2h0VGVybU5vZGUiLCJsZWZ0Tm9uVGVybWluYWxOb2RlIiwicmlnaHROb25UZXJtaW5hbE5vZGUiLCJub25UZXJtaW5hbE5vZGVFcXVhdGVzIiwiZXF1YXRlTm9uVGVybWluYWxOb2RlIiwiZXF1YXRlIiwiZXF1YXRlcyIsImZyb21Qcm9vZlN0ZXAiLCJwcm9vZlN0ZXAiLCJzdGF0ZW1lbnROb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsInNwZWNpYWxOb2RlIiwidGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlQ29udGVudCIsImdldENvbnRlbnQiLCJFUVVBTFNfQ0hBUkFDVEVSIiwiZnJvbUxlZnRUZXJtTm9kZUFuZFJpZ2h0VGVybU5vZGUiLCJlcXVhdGVOb2RlIiwibm9kZUEiLCJub2RlQiIsIm5vZGVFcXVhdGVzIiwibm9kZUFUZXJtaW5hbE5vZGUiLCJpc1Rlcm1pbmFsTm9kZSIsIm5vZGVCVGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlQSIsInRlcm1pbmFsTm9kZUIiLCJ0ZXJtaW5hbE5vZGVFcXVhdGVzIiwiZXF1YXRlVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlQSIsIm5vblRlcm1pbmFsTm9kZUIiLCJlcXVhdGVOb2RlcyIsImxlZnROb2RlcyIsInJpZ2h0Tm9kZXMiLCJub2Rlc0VxdWF0ZSIsImxlZnROb2Rlc0xlbmd0aCIsImxlbmd0aCIsInJpZ2h0Tm9kZXNMZW5ndGgiLCJldmVyeSIsIkxlZnROb2RlIiwiaW5kZXgiLCJyaWdodE5vZGUiLCJsZWZ0Tm9uVGVybWluYWxOb2RlUnVsZU5hbWUiLCJnZXRSdWxlTmFtZSIsInJpZ2h0Tm9uVGVybWluYWxOb2RlUnVsZU5hbWUiLCJydWxlTmFtZSIsInJ1bGVOYW1lVGVybVJ1bGVOYW1lIiwiVEVSTV9SVUxFX05BTUUiLCJ0ZXJtTm9kZUVxdWF0ZXMiLCJlcXVhdGVUZXJtTm9kZSIsImxlZnROb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzIiwiZ2V0Q2hpbGROb2RlcyIsInJpZ2h0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyIsImVxdWFsaXR5QSIsImVxdWFsaXR5TWF0Y2hlcyIsInNvbWUiLCJlcXVhbGl0aWVzQiIsImVxdWFsaXR5QiIsInBydW5lRXF1YWxpdGllcyIsImVxdWFsaXR5QU1hdGNoZXNFcXVhbGl0eUIiLCJmaWx0ZXIiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBVXFCQTs7O3FCQVJLO3lCQUNLO3lCQUNFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVqQyxJQUFNQyxtQkFBbUJDLElBQUFBLGdCQUFTLEVBQUMseUJBQzdCQyxvQkFBb0JELElBQUFBLGdCQUFTLEVBQUMsdUJBQzlCRSxxQkFBcUJGLElBQUFBLGdCQUFTLEVBQUM7QUFFdEIsSUFBQSxBQUFNRix5QkF1R2xCLEFBdkdZO2FBQU1BLFNBQ1BLLFlBQVksRUFBRUMsYUFBYTs4QkFEcEJOO1FBRWpCLElBQUksQ0FBQ0ssWUFBWSxHQUFHQTtRQUNwQixJQUFJLENBQUNDLGFBQWEsR0FBR0E7O2lCQUhKTjs7WUFNbkJPLEtBQUFBO21CQUFBQSxTQUFBQSxrQkFBa0I7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDRixZQUFZO1lBQzFCOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBLG1CQUFtQjtnQkFDakIsT0FBTyxJQUFJLENBQUNGLGFBQWE7WUFDM0I7OztZQUVBRyxLQUFBQTttQkFBQUEsU0FBQUEsTUFBTUMsUUFBUSxFQUFFQyxVQUFVLEVBQUVDLFlBQVksRUFBRTtnQkFDeEMsSUFBSUMsVUFBVSxLQUFLO2dCQUVuQixJQUFNUixlQUFlSyxTQUFTSCxlQUFlLElBQ3ZDRCxnQkFBZ0JJLFNBQVNGLGdCQUFnQjtnQkFFL0MsSUFBSSxDQUFDSyxTQUFTO29CQUNaLElBQU1DLFdBQVcsS0FBSyxFQUNoQkMsb0NBQW9DLElBQUksQ0FBQ0MsaUNBQWlDLENBQUNYLGNBQWNDLGVBQWVRLFVBQVVILFlBQVlDO29CQUVwSUMsVUFBVUUsbUNBQW9DLEdBQUc7Z0JBQ25ELENBQUM7Z0JBRUQsSUFBSSxDQUFDRixTQUFTO29CQUNaLElBQU1DLFlBQVcsSUFBSSxFQUNmQyxxQ0FBb0MsSUFBSSxDQUFDQyxpQ0FBaUMsQ0FBQ1gsY0FBY0Ms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
@@ -1,76 +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 verifyStatementAsEquality;
9
- }
10
- });
11
- var _equality = /*#__PURE__*/ _interopRequireDefault(require("../equality"));
12
- var _term = /*#__PURE__*/ _interopRequireDefault(require("../verify/term"));
13
- var _query = require("../utilities/query");
14
- var _string = require("../utilities/string");
15
- var _array = require("../utilities/array");
16
- var _constants = require("../constants");
17
- function _interopRequireDefault(obj) {
18
- return obj && obj.__esModule ? obj : {
19
- default: obj
20
- };
21
- }
22
- var specialNodeQuery = (0, _query.nodeQuery)("/statement/@special!"), leftTermNodeQuery = (0, _query.nodeQuery)("/statement/term[0]"), rightTermNodeQuery = (0, _query.nodeQuery)("/statement/term[1]");
23
- function verifyStatementAsEquality(statementNode, qualified, proofContext) {
24
- var statementVerifiedAsEquality = false;
25
- proofContext.begin(statementNode);
26
- var statementString = (0, _string.nodeAsString)(statementNode);
27
- proofContext.debug("Verifying the '".concat(statementString, "' statement as an equality..."));
28
- var specialNode = specialNodeQuery(statementNode);
29
- if (specialNode !== null) {
30
- var terminalNode = specialNode, terminalNodeContent = terminalNode.getContent();
31
- if (terminalNodeContent === _constants.EQUALS_CHARACTER) {
32
- var types = [], context = proofContext, leftTermNode = leftTermNodeQuery(statementNode), rightTermNode = rightTermNodeQuery(statementNode), leftTermVerified = (0, _term.default)(leftTermNode, types, context), rightTermVerified = (0, _term.default)(rightTermNode, types, context);
33
- if (leftTermVerified && rightTermVerified) {
34
- var firstType = (0, _array.first)(types), secondType = (0, _array.second)(types), leftType = firstType, rightType = secondType, leftTermString = (0, _string.nodeAsString)(leftTermNode), rightTermString = (0, _string.nodeAsString)(rightTermNode);
35
- if (leftType === null && rightType === null) {
36
- proofContext.error("The types of the '".concat(leftTermString, "' and '").concat(rightTermString, "' terms are both undefined and therefore the terms cannot be equated."));
37
- } else if (rightType === null) {
38
- proofContext.info("The type of the right '".concat(rightTermString, "' term is undefined and therefore the types cannot be equated."));
39
- } else if (leftType === null) {
40
- proofContext.info("The type of the left '".concat(leftTermString, "' term is undefined and therefore the types cannot be equated."));
41
- } else {
42
- var leftTypeMatchesRightType = leftType.match(rightType);
43
- if (!leftTypeMatchesRightType) {
44
- proofContext.error("The types of the '".concat(leftTermString, "' and '").concat(rightTermString, "' terms do not match and therefore the terms cannot be equated."));
45
- } else {
46
- if (!qualified) {
47
- statementVerifiedAsEquality = true;
48
- } else {
49
- var equality = _equality.default.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode), proofSteps = proofContext.getProofSteps(), equalities = equalitiesFromProofSteps(proofSteps), equalityEquates = equality.equate(equalities, proofContext);
50
- statementVerifiedAsEquality = equalityEquates; ///
51
- }
52
- }
53
- }
54
- }
55
- }
56
- }
57
- if (statementVerifiedAsEquality) {
58
- proofContext.info("Verified the '".concat(statementString, "' equality."));
59
- }
60
- statementVerifiedAsEquality ? proofContext.complete(statementNode) : proofContext.halt(statementNode);
61
- return statementVerifiedAsEquality;
62
- }
63
- function equalitiesFromProofSteps(proofSteps) {
64
- var start = -_constants.MAXIMUM_INDEXES_LENGTH; ///
65
- proofSteps = proofSteps.slice(start); ///
66
- var equalities = proofSteps.reduce(function(equalities, proofStep, index) {
67
- var equality = _equality.default.fromProofStep(proofStep);
68
- if (equality !== null) {
69
- equalities.push(equality);
70
- }
71
- return equalities;
72
- }, []);
73
- return equalities;
74
- }
75
-
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50QXNFcXVhbGl0eS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVxdWFsaXR5IGZyb20gXCIuLi9lcXVhbGl0eVwiO1xuaW1wb3J0IHZlcmlmeVRlcm0gZnJvbSBcIi4uL3ZlcmlmeS90ZXJtXCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG5vZGVBc1N0cmluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgRVFVQUxTX0NIQVJBQ1RFUiwgTUFYSU1VTV9JTkRFWEVTX0xFTkdUSCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3Qgc3BlY2lhbE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvQHNwZWNpYWwhXCIpLFxuICAgICAgbGVmdFRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L3Rlcm1bMF1cIiksXG4gICAgICByaWdodFRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L3Rlcm1bMV1cIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeVN0YXRlbWVudEFzRXF1YWxpdHkoc3RhdGVtZW50Tm9kZSwgcXVhbGlmaWVkLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSA9IGZhbHNlO1xuXG4gIHByb29mQ29udGV4dC5iZWdpbihzdGF0ZW1lbnROb2RlKTtcblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBub2RlQXNTdHJpbmcoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcHJvb2ZDb250ZXh0LmRlYnVnKGBWZXJpZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS4uLmApO1xuXG4gIGNvbnN0IHNwZWNpYWxOb2RlID0gc3BlY2lhbE5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKTtcblxuICBpZiAoc3BlY2lhbE5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBzcGVjaWFsTm9kZSwgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCk7XG5cbiAgICBpZiAodGVybWluYWxOb2RlQ29udGVudCA9PT0gRVFVQUxTX0NIQVJBQ1RFUikge1xuICAgICAgY29uc3QgdHlwZXMgPSBbXSxcbiAgICAgICAgICAgIGNvbnRleHQgPSBwcm9vZkNvbnRleHQsICAvLy9cbiAgICAgICAgICAgIGxlZnRUZXJtTm9kZSA9IGxlZnRUZXJtTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgICAgcmlnaHRUZXJtTm9kZSA9IHJpZ2h0VGVybU5vZGVRdWVyeShzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICAgIGxlZnRUZXJtVmVyaWZpZWQgPSB2ZXJpZnlUZXJtKGxlZnRUZXJtTm9kZSwgdHlwZXMsIGNvbnRleHQpLFxuICAgICAgICAgICAgcmlnaHRUZXJtVmVyaWZpZWQgPSB2ZXJpZnlUZXJtKHJpZ2h0VGVybU5vZGUsIHR5cGVzLCBjb250ZXh0KTtcblxuICAgICAgaWYgKGxlZnRUZXJtVmVyaWZpZWQgJiYgcmlnaHRUZXJtVmVyaWZpZWQpIHtcbiAgICAgICAgY29uc3QgZmlyc3RUeXBlID0gZmlyc3QodHlwZXMpLFxuICAgICAgICAgICAgICBzZWNvbmRUeXBlID0gc2Vjb25kKHR5cGVzKSxcbiAgICAgICAgICAgICAgbGVmdFR5cGUgPSBmaXJzdFR5cGUsIC8vL1xuICAgICAgICAgICAgICByaWdodFR5cGUgPSBzZWNvbmRUeXBlLCAvLy9cbiAgICAgICAgICAgICAgbGVmdFRlcm1TdHJpbmcgPSBub2RlQXNTdHJpbmcobGVmdFRlcm1Ob2RlKSxcbiAgICAgICAgICAgICAgcmlnaHRUZXJtU3RyaW5nID0gbm9kZUFzU3RyaW5nKHJpZ2h0VGVybU5vZGUpO1xuXG4gICAgICAgIGlmICgobGVmdFR5cGUgPT09IG51bGwpICYmIChyaWdodFR5cGUgPT09IG51bGwpKSB7XG4gICAgICAgICAgcHJvb2ZDb250ZXh0LmVycm9yKGBUaGUgdHlwZXMgb2YgdGhlICcke2xlZnRUZXJtU3RyaW5nfScgYW5kICcke3JpZ2h0VGVybVN0cmluZ30nIHRlcm1zIGFyZSBib3RoIHVuZGVmaW5lZCBhbmQgdGhlcmVmb3JlIHRoZSB0ZXJtcyBjYW5ub3QgYmUgZXF1YXRlZC5gKTtcbiAgICAgICAgfSBlbHNlIGlmIChyaWdodFR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgICBwcm9vZkNvbnRleHQuaW5mbyhgVGhlIHR5cGUgb2YgdGhlIHJpZ2h0ICcke3JpZ2h0VGVybVN0cmluZ30nIHRlcm0gaXMgdW5kZWZpbmVkIGFuZCB0aGVyZWZvcmUgdGhlIHR5cGVzIGNhbm5vdCBiZSBlcXVhdGVkLmApO1xuICAgICAgICB9IGVsc2UgaWYgKGxlZnRUeXBlID09PSBudWxsKSB7XG4gICAgICAgICAgcHJvb2ZDb250ZXh0LmluZm8oYFRoZSB0eXBlIG9mIHRoZSBsZWZ0ICcke2xlZnRUZXJtU3RyaW5nfScgdGVybSBpcyB1bmRlZmluZWQgYW5kIHRoZXJlZm9yZSB0aGUgdHlwZXMgY2Fubm90IGJlIGVxdWF0ZWQuYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbGVmdFR5cGVNYXRjaGVzUmlnaHRUeXBlID0gbGVmdFR5cGUubWF0Y2gocmlnaHRUeXBlKTtcblxuICAgICAgICAgIGlmICghbGVmdFR5cGVNYXRjaGVzUmlnaHRUeXBlKSB7XG4gICAgICAgICAgICBwcm9vZkNvbnRleHQuZXJyb3IoYFRoZSB0eXBlcyBvZiB0aGUgJyR7bGVmdFRlcm1TdHJpbmd9JyBhbmQgJyR7cmlnaHRUZXJtU3RyaW5nfScgdGVybXMgZG8gbm90IG1hdGNoIGFuZCB0aGVyZWZvcmUgdGhlIHRlcm1zIGNhbm5vdCBiZSBlcXVhdGVkLmApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXF1YWxpZmllZCkge1xuICAgICAgICAgICAgICBzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgZXF1YWxpdHkgPSBFcXVhbGl0eS5mcm9tTGVmdFRlcm1Ob2RlQW5kUmlnaHRUZXJtTm9kZShsZWZ0VGVybU5vZGUsIHJpZ2h0VGVybU5vZGUpLFxuICAgICAgICAgICAgICAgICAgICBwcm9vZlN0ZXBzID0gcHJvb2ZDb250ZXh0LmdldFByb29mU3RlcHMoKSxcbiAgICAgICAgICAgICAgICAgICAgZXF1YWxpdGllcyA9IGVxdWFsaXRpZXNGcm9tUHJvb2ZTdGVwcyhwcm9vZlN0ZXBzKSxcbiAgICAgICAgICAgICAgICAgICAgZXF1YWxpdHlFcXVhdGVzID0gZXF1YWxpdHkuZXF1YXRlKGVxdWFsaXRpZXMsIHByb29mQ29udGV4dCk7XG5cbiAgICAgICAgICAgICAgc3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5ID0gZXF1YWxpdHlFcXVhdGVzOyAgLy8vXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlbWVudFZlcmlmaWVkQXNFcXVhbGl0eSkge1xuICAgIHByb29mQ29udGV4dC5pbmZvKGBWZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgZXF1YWxpdHkuYCk7XG4gIH1cblxuICBzdGF0ZW1lbnRWZXJpZmllZEFzRXF1YWxpdHkgP1xuICAgIHByb29mQ29udGV4dC5jb21wbGV0ZShzdGF0ZW1lbnROb2RlKSA6XG4gICAgICBwcm9vZkNvbnRleHQuaGFsdChzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5O1xufVxuXG5mdW5jdGlvbiBlcXVhbGl0aWVzRnJvbVByb29mU3RlcHMocHJvb2ZTdGVwcykge1xuICBjb25zdCBzdGFydCA9IC1NQVhJTVVNX0lOREVYRVNfTEVOR1RIOyAgLy8vXG5cbiAgcHJvb2ZTdGVwcyA9IHByb29mU3RlcHMuc2xpY2Uoc3RhcnQpOyAvLy9cblxuICBjb25zdCBlcXVhbGl0aWVzID0gcHJvb2ZTdGVwcy5yZWR1Y2UoKGVxdWFsaXRpZXMsIHByb29mU3RlcCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBlcXVhbGl0eSA9IEVxdWFsaXR5LmZyb21Qcm9vZlN0ZXAocHJvb2ZTdGVwKTtcblxuICAgIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgICAgZXF1YWxpdGllcy5wdXNoKGVxdWFsaXR5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXF1YWxpdGllcztcbiAgfSwgW10pO1xuXG4gIHJldHVybiBlcXVhbGl0aWVzO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeVN0YXRlbWVudEFzRXF1YWxpdHkiLCJzcGVjaWFsTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwibGVmdFRlcm1Ob2RlUXVlcnkiLCJyaWdodFRlcm1Ob2RlUXVlcnkiLCJzdGF0ZW1lbnROb2RlIiwicXVhbGlmaWVkIiwicHJvb2ZDb250ZXh0Iiwic3RhdGVtZW50VmVyaWZpZWRBc0VxdWFsaXR5IiwiYmVnaW4iLCJzdGF0ZW1lbnRTdHJpbmciLCJub2RlQXNTdHJpbmciLCJkZWJ1ZyIsInNwZWNpYWxOb2RlIiwidGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlQ29udGVudCIsImdldENvbnRlbnQiLCJFUVVBTFNfQ0hBUkFDVEVSIiwidHlwZXMiLCJjb250ZXh0IiwibGVmdFRlcm1Ob2RlIiwicmlnaHRUZXJtTm9kZSIsImxlZnRUZXJtVmVyaWZpZWQiLCJ2ZXJpZnlUZXJtIiwicmlnaHRUZXJtVmVyaWZpZWQiLCJmaXJzdFR5cGUiLCJmaXJzdCIsInNlY29uZFR5cGUiLCJzZWNvbmQiLCJsZWZ0VHlwZSIsInJpZ2h0VHlwZSIsImxlZnRUZXJtU3RyaW5nIiwicmlnaHRUZXJtU3RyaW5nIiwiZXJyb3IiLCJpbmZvIiwibGVmdFR5cGVNYXRjaGVzUmlnaHRUeXBlIiwibWF0Y2giLCJlcXVhbGl0eSIsIkVxdWFsaXR5IiwiZnJvbUxlZnRUZXJtTm9kZUFuZFJpZ2h0VGVybU5vZGUiLCJwcm9vZlN0ZXBzIiwiZ2V0UHJvb2ZTdGVwcyIsImVxdWFsaXRpZXMiLCJlcXVhbGl0aWVzRnJvbVByb29mU3RlcHMiLCJlcXVhbGl0eUVxdWF0ZXMiLCJlcXVhdGUiLCJjb21wbGV0ZSIsImhhbHQiLCJzdGFydCIsIk1BWElNVU1fSU5ERVhFU19MRU5HVEgiLCJzbGljZSIsInJlZHVjZSIsInByb29mU3RlcCIsImluZGV4IiwiZnJvbVByb29mU3RlcCIsInB1c2giXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBd0JBOzs7NkRBWkg7eURBQ0U7cUJBRUc7c0JBQ0c7cUJBQ0M7eUJBQzJCOzs7Ozs7QUFFekQsSUFBTUMsbUJBQW1CQyxJQUFBQSxnQkFBUyxFQUFDLHlCQUM3QkMsb0JBQW9CRCxJQUFBQSxnQkFBUyxFQUFDLHVCQUM5QkUscUJBQXFCRixJQUFBQSxnQkFBUyxFQUFDO0FBRXRCLFNBQVNGLDBCQUEwQkssYUFBYSxFQUFFQyxTQUFTLEVBQUVDLFlBQVksRUFBRTtJQUN4RixJQUFJQyw4QkFBOEIsS0FBSztJQUV2Q0QsYUFBYUUsS0FBSyxDQUFDSjtJQUVuQixJQUFNSyxrQkFBa0JDLElBQUFBLG9CQUFZLEVBQUNOO0lBRXJDRSxhQUFhSyxLQUFLLENBQUMsQUFBQyxrQkFBaUMsT0FBaEJGLGlCQUFnQjtJQUVyRCxJQUFNRyxjQUFjWixpQkFBaUJJO0lBRXJDLElBQUlRLGdCQUFnQixJQUFJLEVBQUU7UUFDeEIsSUFBTUMsZUFBZUQsYUFDZkUsc0JBQXNCRCxhQUFhRSxVQUFVO1FBRW5ELElBQUlELHdCQUF3QkUsMkJBQWdCLEVBQUU7WUFDNUMsSUFBTUMsUUFBUSxFQUFFLEVBQ1ZDLFVBQVVaLGNBQ1Zh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
@@ -1,84 +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 verifyStatementTypeAssertion;
9
- }
10
- });
11
- var _variable = /*#__PURE__*/ _interopRequireDefault(require("../variable"));
12
- var _array = require("../utilities/array");
13
- var _string = require("../utilities/string");
14
- var _query = require("../utilities/query");
15
- var _term = require("../verify/term");
16
- function _interopRequireDefault(obj) {
17
- return obj && obj.__esModule ? obj : {
18
- default: obj
19
- };
20
- }
21
- var termNodeQuery = (0, _query.nodeQuery)("/typeAssertion/term"), typeNodeQuery = (0, _query.nodeQuery)("/typeAssertion/type"), typeAssertionNodeQuery = (0, _query.nodeQuery)("/statement/typeAssertion!");
22
- function verifyStatementTypeAssertion(statementNode, qualified, proofContext) {
23
- var statementTypeAssertionVerified = false;
24
- proofContext.begin(statementNode);
25
- var statementString = (0, _string.nodeAsString)(statementNode);
26
- proofContext.debug("Verifying the '".concat(statementString, "' statement type assertion..."));
27
- var typeAssertionNode = typeAssertionNodeQuery(statementNode);
28
- if (typeAssertionNode !== null) {
29
- var typeNode = typeNodeQuery(typeAssertionNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), typePresent = proofContext.isTypePresentByTypeName(typeName);
30
- if (!typePresent) {
31
- proofContext.error("The ".concat(typeName, " type is not present."));
32
- } else {
33
- if (!statementTypeAssertionVerified) {
34
- var variableTypeAssertionVerified = verifyVariableTypeAssertion(typeAssertionNode, qualified, proofContext);
35
- statementTypeAssertionVerified = variableTypeAssertionVerified; ///
36
- }
37
- if (!statementTypeAssertionVerified) {
38
- var termTypeAssertionVerified = verifyTermTypeAssertion(typeAssertionNode, qualified, proofContext);
39
- statementTypeAssertionVerified = termTypeAssertionVerified; ///
40
- }
41
- }
42
- }
43
- if (statementTypeAssertionVerified) {
44
- proofContext.info("Verified the '".concat(statementString, "' statement type assertion."));
45
- }
46
- statementTypeAssertionVerified ? proofContext.complete(statementNode) : proofContext.halt(statementNode);
47
- return statementTypeAssertionVerified;
48
- }
49
- function verifyVariableTypeAssertion(typeAssertionNode, qualified, proofContext) {
50
- var variableTypeAssertionVerified = false;
51
- var context = proofContext, variables = [], termNode = termNodeQuery(typeAssertionNode), termVerifiedAsVariable = (0, _term.verifyTermAsVariable)(termNode, variables, context);
52
- if (termVerifiedAsVariable) {
53
- var typeNode = typeNodeQuery(typeAssertionNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), assertedTypeName = typeName, assertedType = proofContext.findTypeByTypeName(assertedTypeName), firstVariable = (0, _array.first)(variables), variable = firstVariable, variableName = variable.getName(), variableType = variable.getType();
54
- var assertedTypeEqualToOrSubTypeOfVariableType = variableType === null ? true : assertedType.isEqualToOrSubTypeOf(variableType);
55
- if (!assertedTypeEqualToOrSubTypeOfVariableType) {
56
- proofContext.error("The asserted type is not equal to or a sub-type of the '".concat(variableName, "' variable type."));
57
- } else {
58
- if (!qualified) {
59
- var type = assertedType, name = variableName, variable1 = _variable.default.fromTypeAndName(type, name);
60
- proofContext.addVariable(variable1);
61
- }
62
- variableTypeAssertionVerified = true;
63
- }
64
- }
65
- return variableTypeAssertionVerified;
66
- }
67
- function verifyTermTypeAssertion(typeAssertionNode, qualified, proofContext) {
68
- var termTypeAssertionVerified = false;
69
- var types = [], context = proofContext, termNode = termNodeQuery(typeAssertionNode), termVerifiedAgainstConstructors = (0, _term.verifyTermAgainstConstructors)(termNode, types, context);
70
- if (termVerifiedAgainstConstructors) {
71
- var typeNode = typeNodeQuery(typeAssertionNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), assertedTypeName = typeName, assertedType = proofContext.findTypeByTypeName(assertedTypeName), firstType = (0, _array.first)(types), termType = firstType, termString = (0, _string.nodeAsString)(termNode), assertedTypeEqualToOrSubTypeOfTermType = termType === null ? true : assertedType.isEqualToOrSubTypeOf(termType);
72
- if (!assertedTypeEqualToOrSubTypeOfTermType) {
73
- proofContext.error("The asserted type is not equal to or a sub-type of the '".concat(termString, "' term type."));
74
- } else {
75
- if (!qualified) {
76
- debugger;
77
- }
78
- termTypeAssertionVerified = true;
79
- }
80
- }
81
- return termTypeAssertionVerified;
82
- }
83
-
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50VHlwZUFzc2VydGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZhcmlhYmxlIGZyb20gXCIuLi92YXJpYWJsZVwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG5vZGVBc1N0cmluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBub2RlUXVlcnksIHR5cGVOYW1lRnJvbVR5cGVOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgdmVyaWZ5VGVybUFzVmFyaWFibGUsIHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3JzIH0gZnJvbSBcIi4uL3ZlcmlmeS90ZXJtXCI7XG5cbmNvbnN0IHRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdHlwZUFzc2VydGlvbi90ZXJtXCIpLFxuICAgICAgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlQXNzZXJ0aW9uL3R5cGVcIiksXG4gICAgICB0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC90eXBlQXNzZXJ0aW9uIVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5U3RhdGVtZW50VHlwZUFzc2VydGlvbihzdGF0ZW1lbnROb2RlLCBxdWFsaWZpZWQsIHByb29mQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VHlwZUFzc2VydGlvblZlcmlmaWVkID0gZmFsc2U7XG5cbiAgcHJvb2ZDb250ZXh0LmJlZ2luKHN0YXRlbWVudE5vZGUpO1xuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IG5vZGVBc1N0cmluZyhzdGF0ZW1lbnROb2RlKTtcblxuICBwcm9vZkNvbnRleHQuZGVidWcoYFZlcmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbk5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVOb2RlID0gdHlwZU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgdHlwZU5hbWUgPSB0eXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSksXG4gICAgICAgICAgdHlwZVByZXNlbnQgPSBwcm9vZkNvbnRleHQuaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgaWYgKCF0eXBlUHJlc2VudCkge1xuICAgICAgcHJvb2ZDb250ZXh0LmVycm9yKGBUaGUgJHt0eXBlTmFtZX0gdHlwZSBpcyBub3QgcHJlc2VudC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFzdGF0ZW1lbnRUeXBlQXNzZXJ0aW9uVmVyaWZpZWQpIHtcbiAgICAgICAgY29uc3QgdmFyaWFibGVUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB2ZXJpZnlWYXJpYWJsZVR5cGVBc3NlcnRpb24odHlwZUFzc2VydGlvbk5vZGUsIHF1YWxpZmllZCwgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgICBzdGF0ZW1lbnRUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZDsgIC8vL1xuICAgICAgfVxuXG4gICAgICBpZiAoIXN0YXRlbWVudFR5cGVBc3NlcnRpb25WZXJpZmllZCkge1xuICAgICAgICBjb25zdCB0ZXJtVHlwZUFzc2VydGlvblZlcmlmaWVkID0gdmVyaWZ5VGVybVR5cGVBc3NlcnRpb24odHlwZUFzc2VydGlvbk5vZGUsIHF1YWxpZmllZCwgcHJvb2ZDb250ZXh0KTtcblxuICAgICAgICBzdGF0ZW1lbnRUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB0ZXJtVHlwZUFzc2VydGlvblZlcmlmaWVkOyAgLy8vXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlbWVudFR5cGVBc3NlcnRpb25WZXJpZmllZCkge1xuICAgIHByb29mQ29udGV4dC5pbmZvKGBWZXJpZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHR5cGUgYXNzZXJ0aW9uLmApO1xuICB9XG5cbiAgc3RhdGVtZW50VHlwZUFzc2VydGlvblZlcmlmaWVkID9cbiAgICBwcm9vZkNvbnRleHQuY29tcGxldGUoc3RhdGVtZW50Tm9kZSkgOlxuICAgICAgcHJvb2ZDb250ZXh0LmhhbHQoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFR5cGVBc3NlcnRpb25WZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5VmFyaWFibGVUeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBxdWFsaWZpZWQsIHByb29mQ29udGV4dCkge1xuICBsZXQgdmFyaWFibGVUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCBjb250ZXh0ID0gcHJvb2ZDb250ZXh0LCAvLy9cbiAgICAgICAgdmFyaWFibGVzID0gW10sXG4gICAgICAgIHRlcm1Ob2RlID0gdGVybU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgIHRlcm1WZXJpZmllZEFzVmFyaWFibGUgPSB2ZXJpZnlUZXJtQXNWYXJpYWJsZSh0ZXJtTm9kZSwgdmFyaWFibGVzLCBjb250ZXh0KTtcblxuICBpZiAodGVybVZlcmlmaWVkQXNWYXJpYWJsZSkge1xuICAgIGNvbnN0IHR5cGVOb2RlID0gdHlwZU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgdHlwZU5hbWUgPSB0eXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSksXG4gICAgICAgICAgYXNzZXJ0ZWRUeXBlTmFtZSA9IHR5cGVOYW1lLCAgLy8vXG4gICAgICAgICAgYXNzZXJ0ZWRUeXBlID0gcHJvb2ZDb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZShhc3NlcnRlZFR5cGVOYW1lKSxcbiAgICAgICAgICBmaXJzdFZhcmlhYmxlID0gZmlyc3QodmFyaWFibGVzKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IGZpcnN0VmFyaWFibGUsIC8vL1xuICAgICAgICAgIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlLmdldE5hbWUoKSxcbiAgICAgICAgICB2YXJpYWJsZVR5cGUgPSB2YXJpYWJsZS5nZXRUeXBlKCk7XG5cbiAgICBjb25zdCBhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZWYXJpYWJsZVR5cGUgPSAodmFyaWFibGVUeXBlID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIDogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydGVkVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih2YXJpYWJsZVR5cGUpO1xuXG4gICAgaWYgKCFhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZWYXJpYWJsZVR5cGUpIHtcbiAgICAgIHByb29mQ29udGV4dC5lcnJvcihgVGhlIGFzc2VydGVkIHR5cGUgaXMgbm90IGVxdWFsIHRvIG9yIGEgc3ViLXR5cGUgb2YgdGhlICcke3ZhcmlhYmxlTmFtZX0nIHZhcmlhYmxlIHR5cGUuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghcXVhbGlmaWVkKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBhc3NlcnRlZFR5cGUsICAvLy9cbiAgICAgICAgICAgICAgbmFtZSA9IHZhcmlhYmxlTmFtZSwgIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21UeXBlQW5kTmFtZSh0eXBlLCBuYW1lKTtcblxuICAgICAgICBwcm9vZkNvbnRleHQuYWRkVmFyaWFibGUodmFyaWFibGUpO1xuICAgICAgfVxuXG4gICAgICB2YXJpYWJsZVR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlVHlwZUFzc2VydGlvblZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlUZXJtVHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgcXVhbGlmaWVkLCBwcm9vZkNvbnRleHQpIHtcbiAgbGV0IHRlcm1UeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSBmYWxzZTtcblxuICBjb25zdCB0eXBlcyA9IFtdLFxuICAgICAgICBjb250ZXh0ID0gcHJvb2ZDb250ZXh0LCAvLy9cbiAgICAgICAgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KHR5cGVBc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgdGVybVZlcmlmaWVkQWdhaW5zdENvbnN0cnVjdG9ycyA9IHZlcmlmeVRlcm1BZ2FpbnN0Q29uc3RydWN0b3JzKHRlcm1Ob2RlLCB0eXBlcywgY29udGV4dCk7XG5cbiAgaWYgKHRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMpIHtcbiAgICBjb25zdCB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICAgIGFzc2VydGVkVHlwZU5hbWUgPSB0eXBlTmFtZSwgIC8vL1xuICAgICAgICAgIGFzc2VydGVkVHlwZSA9IHByb29mQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUoYXNzZXJ0ZWRUeXBlTmFtZSksXG4gICAgICAgICAgZmlyc3RUeXBlID0gZmlyc3QodHlwZXMpLFxuICAgICAgICAgIHRlcm1UeXBlID0gZmlyc3RUeXBlLFxuICAgICAgICAgIHRlcm1TdHJpbmcgPSBub2RlQXNTdHJpbmcodGVybU5vZGUpLFxuICAgICAgICAgIGFzc2VydGVkVHlwZUVxdWFsVG9PclN1YlR5cGVPZlRlcm1UeXBlID0gKHRlcm1UeXBlID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRlZFR5cGUuaXNFcXVhbFRvT3JTdWJUeXBlT2YodGVybVR5cGUpO1xuXG4gICAgaWYgKCFhc3NlcnRlZFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUZXJtVHlwZSkge1xuICAgICAgcHJvb2ZDb250ZXh0LmVycm9yKGBUaGUgYXNzZXJ0ZWQgdHlwZSBpcyBub3QgZXF1YWwgdG8gb3IgYSBzdWItdHlwZSBvZiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gdHlwZS5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFxdWFsaWZpZWQpIHtcbiAgICAgICAgZGVidWdnZXJcbiAgICAgIH1cblxuICAgICAgdGVybVR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRlcm1UeXBlQXNzZXJ0aW9uVmVyaWZpZWQ7XG59XG5cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlTdGF0ZW1lbnRUeXBlQXNzZXJ0aW9uIiwidGVybU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInR5cGVOb2RlUXVlcnkiLCJ0eXBlQXNzZXJ0aW9uTm9kZVF1ZXJ5Iiwic3RhdGVtZW50Tm9kZSIsInF1YWxpZmllZCIsInByb29mQ29udGV4dCIsInN0YXRlbWVudFR5cGVBc3NlcnRpb25WZXJpZmllZCIsImJlZ2luIiwic3RhdGVtZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwiZGVidWciLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVOb2RlIiwidHlwZU5hbWUiLCJ0eXBlTmFtZUZyb21UeXBlTm9kZSIsInR5cGVQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUiLCJlcnJvciIsInZhcmlhYmxlVHlwZUFzc2VydGlvblZlcmlmaWVkIiwidmVyaWZ5VmFyaWFibGVUeXBlQXNzZXJ0aW9uIiwidGVybVR5cGVBc3NlcnRpb25WZXJpZmllZCIsInZlcmlmeVRlcm1UeXBlQXNzZXJ0aW9uIiwiaW5mbyIsImNvbXBsZXRlIiwiaGFsdCIsImNvbnRleHQiLCJ2YXJpYWJsZXMiLCJ0ZXJtTm9kZSIsInRlcm1WZXJpZmllZEFzVmFyaWFibGUiLCJ2ZXJpZnlUZXJtQXNWYXJpYWJsZSIsImFzc2VydGVkVHlwZU5hbWUiLCJhc3NlcnRlZFR5cGUiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJmaXJzdFZhcmlhYmxlIiwiZmlyc3QiLCJ2YXJpYWJsZSIsInZhcmlhYmxlTmFtZSIsImdldE5hbWUiLCJ2YXJpYWJsZVR5cGUiLCJnZXRUeXBlIiwiYXNzZXJ0ZWRUeXBlRXF1YWxUb09yU3ViVHlwZU9mVmFyaWFibGVUeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiLCJ0eXBlIiwibmFtZSIsIlZhcmlhYmxlIiwiZnJvbVR5cGVBbmROYW1lIiwiYWRkVmFyaWFibGUiLCJ0eXBlcyIsInRlcm1WZXJpZmllZEFnYWluc3RDb25zdHJ1Y3RvcnMiLCJ2ZXJpZnlUZXJtQWdhaW5zdENvbnN0cnVjdG9ycyIsImZpcnN0VHlwZSIsInRlcm1UeXBlIiwidGVybVN0cmluZyIsImFzc2VydGVkVHlwZUVxdWFsVG9PclN1YlR5cGVPZlRlcm1UeXBlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFhQTs7O2VBQXdCQTs7OzZEQVhIO3FCQUVDO3NCQUNPO3FCQUNtQjtvQkFDb0I7Ozs7OztBQUVwRSxJQUFNQyxnQkFBZ0JDLElBQUFBLGdCQUFTLEVBQUMsd0JBQzFCQyxnQkFBZ0JELElBQUFBLGdCQUFTLEVBQUMsd0JBQzFCRSx5QkFBeUJGLElBQUFBLGdCQUFTLEVBQUM7QUFFMUIsU0FBU0YsNkJBQTZCSyxhQUFhLEVBQUVDLFNBQVMsRUFBRUMsWUFBWSxFQUFFO0lBQzNGLElBQUlDLGlDQUFpQyxLQUFLO0lBRTFDRCxhQUFhRSxLQUFLLENBQUNKO0lBRW5CLElB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