occam-verify-cli 0.0.921 → 0.0.923
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.
- package/lib/axiomLemmaTheoremConjecture.js +3 -4
- package/lib/conclusion.js +13 -43
- package/lib/constants.js +1 -5
- package/lib/context/local.js +386 -0
- package/lib/declaration.js +15 -15
- package/lib/metaLemmaMetatheorem.js +59 -59
- package/lib/mixins/context.js +17 -13
- package/lib/mixins/nodesVerifier/metaLevel.js +6 -6
- package/lib/premise.js +16 -94
- package/lib/{step/proof.js → proofStep.js} +1 -1
- package/lib/rule.js +1 -45
- package/lib/ruleNames.js +1 -9
- package/lib/substitution/statementForMetavariable.js +9 -1
- package/lib/substitution.js +1 -8
- package/lib/supposition.js +55 -1
- package/lib/utilities/customGrammar.js +2 -2
- package/lib/utilities/match.js +13 -50
- package/lib/utilities/node.js +2 -27
- package/lib/utilities/tokens.js +1 -8
- package/lib/utilities/verify.js +8 -24
- package/lib/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +29 -29
- package/lib/verifier/nodes/metaLevel.js +13 -13
- package/lib/verify/axiom.js +3 -3
- package/lib/verify/conclusion.js +10 -11
- package/lib/verify/conjecture.js +3 -3
- package/lib/verify/declaration.js +6 -6
- package/lib/verify/lemma.js +3 -3
- package/lib/verify/metaLemma.js +13 -13
- package/lib/verify/metastatement.js +64 -64
- package/lib/verify/metatheorem.js +13 -13
- package/lib/verify/premise.js +11 -30
- package/lib/verify/proof.js +3 -4
- package/lib/verify/proofStep.js +5 -5
- package/lib/verify/rule.js +11 -11
- package/lib/verify/statement/qualified.js +35 -9
- package/lib/verify/statement/unqualified.js +1 -1
- package/lib/verify/subproof.js +3 -4
- package/lib/verify/supposition.js +3 -3
- package/lib/verify/termAsConstructor.js +3 -3
- package/lib/verify/theorem.js +3 -3
- package/package.json +4 -4
- package/src/axiomLemmaTheoremConjecture.js +2 -4
- package/src/conclusion.js +15 -54
- package/src/constants.js +0 -1
- package/src/context/{local/intrinsicLevel.js → local.js} +182 -97
- package/src/declaration.js +19 -19
- package/src/metaLemmaMetatheorem.js +58 -58
- package/src/mixins/context.js +12 -9
- package/src/mixins/nodesVerifier/metaLevel.js +8 -8
- package/src/premise.js +25 -143
- package/src/rule.js +0 -67
- package/src/ruleNames.js +0 -2
- package/src/substitution/statementForMetavariable.js +14 -0
- package/src/substitution.js +0 -6
- package/src/supposition.js +46 -0
- package/src/utilities/customGrammar.js +1 -2
- package/src/utilities/match.js +13 -60
- package/src/utilities/node.js +3 -32
- package/src/utilities/tokens.js +0 -8
- package/src/utilities/verify.js +4 -20
- package/src/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +36 -37
- package/src/verifier/nodes/metaLevel.js +17 -17
- package/src/verify/axiom.js +3 -4
- package/src/verify/conclusion.js +9 -13
- package/src/verify/conjecture.js +3 -4
- package/src/verify/declaration.js +7 -7
- package/src/verify/lemma.js +3 -4
- package/src/verify/metaLemma.js +24 -25
- package/src/verify/metastatement.js +64 -64
- package/src/verify/metatheorem.js +23 -24
- package/src/verify/premise.js +14 -46
- package/src/verify/proof.js +2 -4
- package/src/verify/proofStep.js +1 -1
- package/src/verify/rule.js +11 -12
- package/src/verify/statement/qualified.js +43 -9
- package/src/verify/statement/unqualified.js +1 -1
- package/src/verify/subproof.js +2 -4
- package/src/verify/supposition.js +1 -1
- package/src/verify/termAsConstructor.js +3 -4
- package/src/verify/theorem.js +3 -4
- package/lib/context/local/intrinsicLevel.js +0 -326
- package/lib/context/local/metaLevel.js +0 -282
- package/lib/metaConsequent.js +0 -108
- package/lib/metaSupposition.js +0 -160
- package/lib/node/metastatement/bracketed.js +0 -16
- package/lib/step/metaproof.js +0 -106
- package/lib/substitution/metastatementForMetavariable.js +0 -173
- package/lib/verify/metaConsequent.js +0 -50
- package/lib/verify/metaDerivation.js +0 -31
- package/lib/verify/metaSubDerivation.js +0 -25
- package/lib/verify/metaSubproof.js +0 -35
- package/lib/verify/metaSupposition.js +0 -61
- package/lib/verify/metaSuppositions.js +0 -28
- package/lib/verify/metaproof.js +0 -32
- package/lib/verify/metaproofStep.js +0 -98
- package/lib/verify/metastatement/qualified.js +0 -95
- package/lib/verify/metastatement/unqualified.js +0 -37
- package/lib/verify/metastatementAsContainedAssertion.js +0 -109
- package/lib/verify/metastatementAsDefinedAssertion.js +0 -132
- package/lib/verify/metavariableAgainstMetastatement.js +0 -44
- package/src/context/local/metaLevel.js +0 -191
- package/src/metaConsequent.js +0 -83
- package/src/metaSupposition.js +0 -127
- package/src/node/metastatement/bracketed.js +0 -9
- package/src/step/metaproof.js +0 -73
- package/src/substitution/metastatementForMetavariable.js +0 -90
- package/src/verify/metaConsequent.js +0 -61
- package/src/verify/metaDerivation.js +0 -23
- package/src/verify/metaSubDerivation.js +0 -22
- package/src/verify/metaSubproof.js +0 -34
- package/src/verify/metaSupposition.js +0 -78
- package/src/verify/metaSuppositions.js +0 -17
- package/src/verify/metaproof.js +0 -30
- package/src/verify/metaproofStep.js +0 -137
- package/src/verify/metastatement/qualified.js +0 -130
- package/src/verify/metastatement/unqualified.js +0 -34
- package/src/verify/metastatementAsContainedAssertion.js +0 -127
- package/src/verify/metastatementAsDefinedAssertion.js +0 -156
- package/src/verify/metavariableAgainstMetastatement.js +0 -42
- /package/src/{step/proof.js → proofStep.js} +0 -0
|
@@ -6,7 +6,9 @@ import { verifyStatementAsEquality, verifyStatementAsTypeAssertion } from "../..
|
|
|
6
6
|
const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
|
|
7
7
|
metavariableNodeQuery = nodeQuery("/qualifiedStatement/reference!/metavariable!");
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
import verifyMetavariableAgainstStatement from "../../verify/metavariableAgainstStatement";
|
|
10
|
+
|
|
11
|
+
export default function verifyQualifiedStatement(qualifiedStatementNode, substitutions, assignments, localContext) {
|
|
10
12
|
let qualifiedStatementVerified;
|
|
11
13
|
|
|
12
14
|
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
@@ -16,6 +18,7 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, assignm
|
|
|
16
18
|
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
17
19
|
verifyQualifiedStatementFunctions = [
|
|
18
20
|
verifyQualifiedStatementAAgainstRule,
|
|
21
|
+
verifyQualifiedStatementAAgainstReference,
|
|
19
22
|
verifyQualifiedStatementAAgainstAxiom,
|
|
20
23
|
verifyQualifiedStatementAAgainstLemma,
|
|
21
24
|
verifyQualifiedStatementAAgainstTheorem,
|
|
@@ -23,7 +26,7 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, assignm
|
|
|
23
26
|
];
|
|
24
27
|
|
|
25
28
|
qualifiedStatementVerified = verifyQualifiedStatementFunctions.some((verifyQualifiedStatementFunction) => { ///
|
|
26
|
-
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, metavariableNode, localContext);
|
|
29
|
+
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, metavariableNode, substitutions, localContext);
|
|
27
30
|
|
|
28
31
|
if (qualifiedStatementVerified) {
|
|
29
32
|
return true;
|
|
@@ -33,9 +36,13 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, assignm
|
|
|
33
36
|
if (qualifiedStatementVerified) {
|
|
34
37
|
const derived = false,
|
|
35
38
|
statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
36
|
-
statementVerified = verifyStatement(statementNode, assignments, derived, localContext)
|
|
39
|
+
statementVerified = verifyStatement(statementNode, assignments, derived, localContext, () => {
|
|
40
|
+
const verifiedAhead = true;
|
|
41
|
+
|
|
42
|
+
return verifiedAhead;
|
|
43
|
+
});
|
|
37
44
|
|
|
38
|
-
qualifiedStatementVerified = statementVerified;
|
|
45
|
+
qualifiedStatementVerified = statementVerified; ///
|
|
39
46
|
}
|
|
40
47
|
|
|
41
48
|
if (qualifiedStatementVerified) {
|
|
@@ -45,7 +52,7 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, assignm
|
|
|
45
52
|
return qualifiedStatementVerified;
|
|
46
53
|
}
|
|
47
54
|
|
|
48
|
-
function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, metavariableNode, localContext) {
|
|
55
|
+
function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
|
|
49
56
|
let qualifiedStatementVerifiedAgainstRule = false;
|
|
50
57
|
|
|
51
58
|
const rule = localContext.findRuleByMetavariableNode(metavariableNode);
|
|
@@ -69,7 +76,7 @@ function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, metavariab
|
|
|
69
76
|
return qualifiedStatementVerifiedAgainstRule;
|
|
70
77
|
}
|
|
71
78
|
|
|
72
|
-
function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, metavariableNode, localContext) {
|
|
79
|
+
function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
|
|
73
80
|
let qualifiedStatementVerifiedAgainstAxiom = false;
|
|
74
81
|
|
|
75
82
|
const axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
|
|
@@ -93,7 +100,7 @@ function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, metavaria
|
|
|
93
100
|
return qualifiedStatementVerifiedAgainstAxiom;
|
|
94
101
|
}
|
|
95
102
|
|
|
96
|
-
function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, metavariableNode, localContext) {
|
|
103
|
+
function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
|
|
97
104
|
let qualifiedStatementVerifiedAgainstLemma = false;
|
|
98
105
|
|
|
99
106
|
const lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
|
|
@@ -117,7 +124,7 @@ function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, metavaria
|
|
|
117
124
|
return qualifiedStatementVerifiedAgainstLemma;
|
|
118
125
|
}
|
|
119
126
|
|
|
120
|
-
function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, metavariableNode, localContext) {
|
|
127
|
+
function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
|
|
121
128
|
let qualifiedStatementVerifiedAgainstTheorem = false;
|
|
122
129
|
|
|
123
130
|
const theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
|
|
@@ -141,7 +148,7 @@ function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, metavar
|
|
|
141
148
|
return qualifiedStatementVerifiedAgainstTheorem;
|
|
142
149
|
}
|
|
143
150
|
|
|
144
|
-
function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, metavariableNode, localContext) {
|
|
151
|
+
function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
|
|
145
152
|
let qualifiedStatementVerifiedAgainstConjecture = false;
|
|
146
153
|
|
|
147
154
|
const conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
|
|
@@ -165,6 +172,33 @@ function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, meta
|
|
|
165
172
|
return qualifiedStatementVerifiedAgainstConjecture;
|
|
166
173
|
}
|
|
167
174
|
|
|
175
|
+
function verifyQualifiedStatementAAgainstReference(qualifiedStatementNode, metavariableNode, substitutions, localContext) {
|
|
176
|
+
let qualifiedStatementVerifiedAgainstReference = false;
|
|
177
|
+
|
|
178
|
+
const metavariableString = localContext.nodeAsString(metavariableNode),
|
|
179
|
+
metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode, localContext),
|
|
180
|
+
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
181
|
+
|
|
182
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' reference...`, qualifiedStatementNode);
|
|
183
|
+
|
|
184
|
+
if (metavariablePresent) {
|
|
185
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
186
|
+
metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNode, statementNode, substitutions, () => {
|
|
187
|
+
const verifiedAhead = true;
|
|
188
|
+
|
|
189
|
+
return verifiedAhead;
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
qualifiedStatementVerifiedAgainstReference = metavariableVerifiedAgainstStatement; ///
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
if (qualifiedStatementVerifiedAgainstReference) {
|
|
196
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' reference.`, qualifiedStatementNode);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
return qualifiedStatementVerifiedAgainstReference;
|
|
200
|
+
}
|
|
201
|
+
|
|
168
202
|
function verifyStatement(statementNode, assignments, derived, localContext) {
|
|
169
203
|
let statementVerified;
|
|
170
204
|
|
|
@@ -23,7 +23,7 @@ export default function verifyUnqualifiedStatement(unqualifiedStatementNode, ass
|
|
|
23
23
|
if (!unqualifiedStatementVerified) {
|
|
24
24
|
const statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
|
|
25
25
|
|
|
26
|
-
unqualifiedStatementVerified = statementVerified;
|
|
26
|
+
unqualifiedStatementVerified = statementVerified; ///
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
if (unqualifiedStatementVerified) {
|
package/src/verify/subproof.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import LocalContext from "../context/local";
|
|
3
4
|
import verifySuppositions from "../verify/suppositions";
|
|
4
5
|
import verifySubDerivation from "../verify/subDerivation";
|
|
5
|
-
import IntrinsicLevelLocalContext from "../context/local/intrinsicLevel";
|
|
6
6
|
|
|
7
7
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
8
8
|
|
|
@@ -12,9 +12,7 @@ const suppositionNodesQuery = nodesQuery("/subproof/supposition"),
|
|
|
12
12
|
export default function verifySubproof(subproofNode, localContext) {
|
|
13
13
|
let subproofVerified = false;
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
localContext = intrinsicLevelLocalContext; ///
|
|
15
|
+
localContext = LocalContext.fromLocalContext(localContext); ///
|
|
18
16
|
|
|
19
17
|
const suppositions = [],
|
|
20
18
|
suppositionNodes = suppositionNodesQuery(subproofNode),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Constructor from "../constructor";
|
|
4
|
-
import
|
|
4
|
+
import LocalContext from "../context/local";
|
|
5
5
|
import termAsConstructorNodeVerifier from "../verifier/node/termAsConstructor";
|
|
6
6
|
|
|
7
7
|
export default function verifyTermAsConstructor(termNode, typeNode, fileContext) {
|
|
@@ -11,10 +11,9 @@ export default function verifyTermAsConstructor(termNode, typeNode, fileContext)
|
|
|
11
11
|
|
|
12
12
|
fileContext.debug(`Verifying the '${termString}' term as a constructor...`, termNode);
|
|
13
13
|
|
|
14
|
-
const
|
|
15
|
-
nonTerminalNode = termNode, ///
|
|
14
|
+
const nonTerminalNode = termNode, ///
|
|
16
15
|
childNodes = nonTerminalNode.getChildNodes(),
|
|
17
|
-
localContext =
|
|
16
|
+
localContext = LocalContext.fromFileContext(fileContext),
|
|
18
17
|
childNodesVerified = termAsConstructorNodeVerifier.verifyChildNodes(childNodes, localContext, () => {
|
|
19
18
|
const verifiedAhead = true;
|
|
20
19
|
|
package/src/verify/theorem.js
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
import Theorem from "../theorem";
|
|
4
4
|
import verifyProof from "../verify/proof";
|
|
5
5
|
import verifyLabels from "../verify/labels";
|
|
6
|
+
import LocalContext from "../context/local";
|
|
6
7
|
import verifyConsequent from "../verify/consequent";
|
|
7
8
|
import verifySuppositions from "../verify/suppositions";
|
|
8
|
-
import IntrinsicLevelLocalContext from "../context/local/intrinsicLevel";
|
|
9
9
|
|
|
10
10
|
import { first } from "../utilities/array";
|
|
11
11
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
@@ -27,10 +27,9 @@ export default function verifyTheorem(theoremNode, fileContext) {
|
|
|
27
27
|
labelsVerified = verifyLabels(labelNodes, labels, fileContext);
|
|
28
28
|
|
|
29
29
|
if (labelsVerified) {
|
|
30
|
-
const
|
|
31
|
-
suppositionNodes = suppositionsNodeQuery(theoremNode),
|
|
30
|
+
const suppositionNodes = suppositionsNodeQuery(theoremNode),
|
|
32
31
|
suppositions = [],
|
|
33
|
-
localContext =
|
|
32
|
+
localContext = LocalContext.fromFileContext(fileContext),
|
|
34
33
|
suppositionsVerified = verifySuppositions(suppositionNodes, suppositions, localContext);
|
|
35
34
|
|
|
36
35
|
if (suppositionsVerified) {
|
|
@@ -1,326 +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 _default;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _variable = /*#__PURE__*/ _interop_require_default(require("../../variable"));
|
|
12
|
-
var _equivalence = /*#__PURE__*/ _interop_require_default(require("../../equivalence"));
|
|
13
|
-
var _context = /*#__PURE__*/ _interop_require_default(require("../../mixins/context"));
|
|
14
|
-
var _array = require("../../utilities/array");
|
|
15
|
-
var _equivalences = require("../../utilities/equivalences");
|
|
16
|
-
function _array_like_to_array(arr, len) {
|
|
17
|
-
if (len == null || len > arr.length) len = arr.length;
|
|
18
|
-
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
19
|
-
return arr2;
|
|
20
|
-
}
|
|
21
|
-
function _array_without_holes(arr) {
|
|
22
|
-
if (Array.isArray(arr)) return _array_like_to_array(arr);
|
|
23
|
-
}
|
|
24
|
-
function _class_call_check(instance, Constructor) {
|
|
25
|
-
if (!(instance instanceof Constructor)) {
|
|
26
|
-
throw new TypeError("Cannot call a class as a function");
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
function _defineProperties(target, props) {
|
|
30
|
-
for(var i = 0; i < props.length; i++){
|
|
31
|
-
var descriptor = props[i];
|
|
32
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
33
|
-
descriptor.configurable = true;
|
|
34
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
35
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
function _create_class(Constructor, protoProps, staticProps) {
|
|
39
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
40
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
41
|
-
return Constructor;
|
|
42
|
-
}
|
|
43
|
-
function _interop_require_default(obj) {
|
|
44
|
-
return obj && obj.__esModule ? obj : {
|
|
45
|
-
default: obj
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
function _iterable_to_array(iter) {
|
|
49
|
-
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
50
|
-
}
|
|
51
|
-
function _non_iterable_spread() {
|
|
52
|
-
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
53
|
-
}
|
|
54
|
-
function _to_consumable_array(arr) {
|
|
55
|
-
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
|
|
56
|
-
}
|
|
57
|
-
function _unsupported_iterable_to_array(o, minLen) {
|
|
58
|
-
if (!o) return;
|
|
59
|
-
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
60
|
-
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
61
|
-
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
62
|
-
if (n === "Map" || n === "Set") return Array.from(n);
|
|
63
|
-
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
64
|
-
}
|
|
65
|
-
var IntrinsicLevelLocalContext = /*#__PURE__*/ function() {
|
|
66
|
-
function IntrinsicLevelLocalContext(context, variables, proofSteps, equivalences) {
|
|
67
|
-
_class_call_check(this, IntrinsicLevelLocalContext);
|
|
68
|
-
this.context = context;
|
|
69
|
-
this.variables = variables;
|
|
70
|
-
this.proofSteps = proofSteps;
|
|
71
|
-
this.equivalences = equivalences;
|
|
72
|
-
}
|
|
73
|
-
_create_class(IntrinsicLevelLocalContext, [
|
|
74
|
-
{
|
|
75
|
-
key: "getContext",
|
|
76
|
-
value: function getContext() {
|
|
77
|
-
return this.context;
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
key: "getVariables",
|
|
82
|
-
value: function getVariables() {
|
|
83
|
-
var variables = this.context.getVariables();
|
|
84
|
-
variables = _to_consumable_array(this.variables).concat(_to_consumable_array(variables));
|
|
85
|
-
return variables;
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
key: "getProofSteps",
|
|
90
|
-
value: function getProofSteps() {
|
|
91
|
-
var proofSteps = this.context.getProofSteps();
|
|
92
|
-
proofSteps = _to_consumable_array(proofSteps).concat(_to_consumable_array(this.proofSteps));
|
|
93
|
-
return proofSteps;
|
|
94
|
-
}
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
key: "getEquivalences",
|
|
98
|
-
value: function getEquivalences() {
|
|
99
|
-
var equivalences = this.context.getEquivalences();
|
|
100
|
-
var equivalencesA = this.equivalences, equivalencesB = equivalences, intrinsicLevelLocalContext = this; ///
|
|
101
|
-
equivalences = (0, _equivalences.mergeEquivalences)(equivalencesA, equivalencesB, intrinsicLevelLocalContext); ///
|
|
102
|
-
return equivalences;
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
key: "isIntrinsicLevel",
|
|
107
|
-
value: function isIntrinsicLevel() {
|
|
108
|
-
var intrinsicLevel = true;
|
|
109
|
-
return intrinsicLevel;
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
key: "getLastProofStep",
|
|
114
|
-
value: function getLastProofStep() {
|
|
115
|
-
var lastProofStep = null;
|
|
116
|
-
var proofStepsLength = this.proofSteps.length;
|
|
117
|
-
if (proofStepsLength > 0) {
|
|
118
|
-
lastProofStep = (0, _array.last)(this.proofSteps);
|
|
119
|
-
}
|
|
120
|
-
return lastProofStep;
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
key: "getTermType",
|
|
125
|
-
value: function getTermType(term) {
|
|
126
|
-
var termType;
|
|
127
|
-
var equivalences = this.getEquivalences(), equivalence = (0, _equivalences.findEquivalenceByTerm)(equivalences, term);
|
|
128
|
-
if (equivalence !== null) {
|
|
129
|
-
var intrinsicLevelLocalContext = this, equivalenceType = equivalence.getType(intrinsicLevelLocalContext);
|
|
130
|
-
termType = equivalenceType; ///
|
|
131
|
-
} else {
|
|
132
|
-
termType = term.getType();
|
|
133
|
-
}
|
|
134
|
-
return termType;
|
|
135
|
-
}
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
key: "isTermGrounded",
|
|
139
|
-
value: function isTermGrounded(term) {
|
|
140
|
-
var context = this, equivalences = this.getEquivalences(), groundedTerms = [], definedVariables = [];
|
|
141
|
-
(0, _equivalences.groundedTermsAndDefinedVariablesFromFromEquivalences)(equivalences, groundedTerms, definedVariables, context);
|
|
142
|
-
var termMatchesGroundedTerm = groundedTerms.some(function(groundedTerm) {
|
|
143
|
-
var termMatchesGroundedTerm = term.match(groundedTerm);
|
|
144
|
-
if (termMatchesGroundedTerm) {
|
|
145
|
-
return true;
|
|
146
|
-
}
|
|
147
|
-
}), termGrounded = termMatchesGroundedTerm; ///
|
|
148
|
-
return termGrounded;
|
|
149
|
-
}
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
key: "isVariableDefined",
|
|
153
|
-
value: function isVariableDefined(variable) {
|
|
154
|
-
var context = this, equivalences = this.getEquivalences(), groundedTerms = [], definedVariables = [];
|
|
155
|
-
(0, _equivalences.groundedTermsAndDefinedVariablesFromFromEquivalences)(equivalences, groundedTerms, definedVariables, context);
|
|
156
|
-
var variableMatchesDefinedVariable = definedVariables.some(function(definedVariable) {
|
|
157
|
-
var variableMatchesDefinedVariable = variable.match(definedVariable);
|
|
158
|
-
if (variableMatchesDefinedVariable) {
|
|
159
|
-
return true;
|
|
160
|
-
}
|
|
161
|
-
}), variableDefined = variableMatchesDefinedVariable; ///
|
|
162
|
-
return variableDefined;
|
|
163
|
-
}
|
|
164
|
-
},
|
|
165
|
-
{
|
|
166
|
-
key: "addEquality",
|
|
167
|
-
value: function addEquality(equality) {
|
|
168
|
-
var equalityAdded;
|
|
169
|
-
var equalityReflexive = equality.isReflexive();
|
|
170
|
-
if (equalityReflexive) {
|
|
171
|
-
equalityAdded = true; ///
|
|
172
|
-
} else {
|
|
173
|
-
var leftTerm = equality.getLeftTerm(), rightTerm = equality.getRightTerm(), leftEquivalence = (0, _equivalences.findEquivalenceByTerm)(this.equivalences, leftTerm), rightEquivalence = (0, _equivalences.findEquivalenceByTerm)(this.equivalences, rightTerm);
|
|
174
|
-
if (false) {
|
|
175
|
-
///
|
|
176
|
-
} else if (leftEquivalence === null && rightEquivalence === null) {
|
|
177
|
-
var equivalence = _equivalence.default.fromLeftTermAndRightTerm(leftTerm, rightTerm);
|
|
178
|
-
this.addEquivalence(equivalence);
|
|
179
|
-
equalityAdded = true;
|
|
180
|
-
} else if (leftEquivalence !== null && rightEquivalence === null) {
|
|
181
|
-
leftEquivalence.addTerm(rightTerm);
|
|
182
|
-
equalityAdded = true;
|
|
183
|
-
} else if (leftEquivalence === null && rightEquivalence !== null) {
|
|
184
|
-
rightEquivalence.addTerm(leftTerm);
|
|
185
|
-
equalityAdded = true;
|
|
186
|
-
} else if (leftEquivalence !== null && rightEquivalence !== null) {
|
|
187
|
-
var equivalence1;
|
|
188
|
-
if (leftEquivalence === rightEquivalence) {
|
|
189
|
-
equivalence1 = leftEquivalence; ///
|
|
190
|
-
} else {
|
|
191
|
-
equivalence1 = _equivalence.default.merge(leftEquivalence, rightEquivalence);
|
|
192
|
-
this.removeEquivalence(leftEquivalence);
|
|
193
|
-
this.removeEquivalence(rightEquivalence);
|
|
194
|
-
this.addEquivalence(equivalence1);
|
|
195
|
-
}
|
|
196
|
-
equivalence1.addTerm(leftTerm);
|
|
197
|
-
equivalence1.addTerm(rightTerm);
|
|
198
|
-
equalityAdded = true;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
return equalityAdded;
|
|
202
|
-
}
|
|
203
|
-
},
|
|
204
|
-
{
|
|
205
|
-
key: "addVariable",
|
|
206
|
-
value: function addVariable(variable) {
|
|
207
|
-
var variableAdded = false;
|
|
208
|
-
var node = variable.getNode(), variablePresent = this.variables.some(function(variable) {
|
|
209
|
-
var variableMatchesNode = variable.matchNode(node);
|
|
210
|
-
if (variableMatchesNode) {
|
|
211
|
-
return true;
|
|
212
|
-
}
|
|
213
|
-
});
|
|
214
|
-
if (!variablePresent) {
|
|
215
|
-
this.variables.push(variable);
|
|
216
|
-
variableAdded = true;
|
|
217
|
-
}
|
|
218
|
-
return variableAdded;
|
|
219
|
-
}
|
|
220
|
-
},
|
|
221
|
-
{
|
|
222
|
-
key: "addProofStep",
|
|
223
|
-
value: function addProofStep(proofStep) {
|
|
224
|
-
this.proofSteps.push(proofStep);
|
|
225
|
-
}
|
|
226
|
-
},
|
|
227
|
-
{
|
|
228
|
-
key: "addEquivalence",
|
|
229
|
-
value: function addEquivalence(equivalence) {
|
|
230
|
-
this.equivalences.push(equivalence);
|
|
231
|
-
}
|
|
232
|
-
},
|
|
233
|
-
{
|
|
234
|
-
key: "removeEquivalence",
|
|
235
|
-
value: function removeEquivalence(equivalence) {
|
|
236
|
-
var index = this.equivalences.indexOf(equivalence), start = index, deleteCount = 1;
|
|
237
|
-
this.equivalences.splice(start, deleteCount);
|
|
238
|
-
}
|
|
239
|
-
},
|
|
240
|
-
{
|
|
241
|
-
key: "matchStatementNode",
|
|
242
|
-
value: function matchStatementNode(statementNode) {
|
|
243
|
-
var proofSteps = this.getProofSteps();
|
|
244
|
-
proofSteps = (0, _array.reverse)(proofSteps); ///
|
|
245
|
-
var matchesStatementNode = proofSteps.some(function(proofStep) {
|
|
246
|
-
var proofStepMatchesStatementNode = proofStep.matchStatementNode(statementNode);
|
|
247
|
-
if (proofStepMatchesStatementNode) {
|
|
248
|
-
return true;
|
|
249
|
-
}
|
|
250
|
-
});
|
|
251
|
-
return matchesStatementNode;
|
|
252
|
-
}
|
|
253
|
-
},
|
|
254
|
-
{
|
|
255
|
-
key: "findVariableByVariableNode",
|
|
256
|
-
value: function findVariableByVariableNode(variableNode) {
|
|
257
|
-
var node = variableNode, variables = this.getVariables(), variable = variables.find(function(variable) {
|
|
258
|
-
var matches = variable.matchNode(node);
|
|
259
|
-
if (matches) {
|
|
260
|
-
return true;
|
|
261
|
-
}
|
|
262
|
-
}) || null;
|
|
263
|
-
return variable;
|
|
264
|
-
}
|
|
265
|
-
},
|
|
266
|
-
{
|
|
267
|
-
key: "findMetaTypeByMetaTypeNode",
|
|
268
|
-
value: function findMetaTypeByMetaTypeNode(metaTypeNode) {
|
|
269
|
-
return this.context.findMetaTypeByMetaTypeNode(metaTypeNode);
|
|
270
|
-
}
|
|
271
|
-
},
|
|
272
|
-
{
|
|
273
|
-
key: "isVariablePresentByVariableNode",
|
|
274
|
-
value: function isVariablePresentByVariableNode(variableNode) {
|
|
275
|
-
var variable = this.findVariableByVariableNode(variableNode), variablePresent = variable !== null;
|
|
276
|
-
return variablePresent;
|
|
277
|
-
}
|
|
278
|
-
},
|
|
279
|
-
{
|
|
280
|
-
key: "toJSON",
|
|
281
|
-
value: function toJSON(tokens) {
|
|
282
|
-
var variables = this.variables.map(function(variable) {
|
|
283
|
-
var variableJSON = variable.toJSON(tokens);
|
|
284
|
-
variable = variableJSON;
|
|
285
|
-
return variable;
|
|
286
|
-
}), json = {
|
|
287
|
-
variables: variables
|
|
288
|
-
};
|
|
289
|
-
return json;
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
], [
|
|
293
|
-
{
|
|
294
|
-
key: "fromFileContext",
|
|
295
|
-
value: function fromFileContext(fileContext) {
|
|
296
|
-
var context = fileContext, variables = [], proofSteps = [], equivalences = [], intrinsicLevelLocalContext = new IntrinsicLevelLocalContext(context, variables, proofSteps, equivalences);
|
|
297
|
-
return intrinsicLevelLocalContext;
|
|
298
|
-
}
|
|
299
|
-
},
|
|
300
|
-
{
|
|
301
|
-
key: "fromLocalContext",
|
|
302
|
-
value: function fromLocalContext(localContext) {
|
|
303
|
-
var context = localContext, variables = [], proofSteps = [], equivalences = [], intrinsicLevelLocalContext = new IntrinsicLevelLocalContext(context, variables, proofSteps, equivalences);
|
|
304
|
-
return intrinsicLevelLocalContext;
|
|
305
|
-
}
|
|
306
|
-
},
|
|
307
|
-
{
|
|
308
|
-
key: "fromJSONAndFileContext",
|
|
309
|
-
value: function fromJSONAndFileContext(json, fileContext) {
|
|
310
|
-
var variables = json.variables;
|
|
311
|
-
var variablesJSON = variables;
|
|
312
|
-
variables = variablesJSON.map(function(variableJSON) {
|
|
313
|
-
var _$json = variableJSON, variable = _variable.default.fromJSONAndFileContext(_$json, fileContext);
|
|
314
|
-
return variable;
|
|
315
|
-
});
|
|
316
|
-
var context = fileContext, proofSteps = [], equivalences = [], intrinsicLevelLocalContext = new IntrinsicLevelLocalContext(context, variables, proofSteps, equivalences);
|
|
317
|
-
return intrinsicLevelLocalContext;
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
]);
|
|
321
|
-
return IntrinsicLevelLocalContext;
|
|
322
|
-
}();
|
|
323
|
-
Object.assign(IntrinsicLevelLocalContext.prototype, _context.default);
|
|
324
|
-
var _default = IntrinsicLevelLocalContext;
|
|
325
|
-
|
|
326
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0L2xvY2FsL2ludHJpbnNpY0xldmVsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmFyaWFibGUgZnJvbSBcIi4uLy4uL3ZhcmlhYmxlXCI7XG5pbXBvcnQgRXF1aXZhbGVuY2UgZnJvbSBcIi4uLy4uL2VxdWl2YWxlbmNlXCI7XG5pbXBvcnQgY29udGV4dE1peGlucyBmcm9tIFwiLi4vLi4vbWl4aW5zL2NvbnRleHRcIjtcblxuaW1wb3J0IHsgbGFzdCwgcmV2ZXJzZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG1lcmdlRXF1aXZhbGVuY2VzLCBmaW5kRXF1aXZhbGVuY2VCeVRlcm0sIGdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzRnJvbUZyb21FcXVpdmFsZW5jZXMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VxdWl2YWxlbmNlc1wiO1xuXG5jbGFzcyBJbnRyaW5zaWNMZXZlbExvY2FsQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHZhcmlhYmxlcywgcHJvb2ZTdGVwcywgZXF1aXZhbGVuY2VzKSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLnZhcmlhYmxlcyA9IHZhcmlhYmxlcztcbiAgICB0aGlzLnByb29mU3RlcHMgPSBwcm9vZlN0ZXBzO1xuICAgIHRoaXMuZXF1aXZhbGVuY2VzID0gZXF1aXZhbGVuY2VzO1xuICB9XG5cbiAgZ2V0Q29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0O1xuICB9XG5cbiAgZ2V0VmFyaWFibGVzKCkge1xuICAgIGxldCB2YXJpYWJsZXMgPSB0aGlzLmNvbnRleHQuZ2V0VmFyaWFibGVzKCk7XG5cbiAgICB2YXJpYWJsZXMgPSBbIC8vL1xuICAgICAgLi4udGhpcy52YXJpYWJsZXMsXG4gICAgICAuLi52YXJpYWJsZXNcbiAgICBdO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFByb29mU3RlcHMoKSB7XG4gICAgbGV0IHByb29mU3RlcHMgPSB0aGlzLmNvbnRleHQuZ2V0UHJvb2ZTdGVwcygpO1xuXG4gICAgcHJvb2ZTdGVwcyA9IFsgIC8vL1xuICAgICAgLi4ucHJvb2ZTdGVwcyxcbiAgICAgIC4uLnRoaXMucHJvb2ZTdGVwc1xuICAgIF07XG5cbiAgICByZXR1cm4gcHJvb2ZTdGVwcztcbiAgfVxuXG4gIGdldEVxdWl2YWxlbmNlcygpIHtcbiAgICBsZXQgZXF1aXZhbGVuY2VzID0gdGhpcy5jb250ZXh0LmdldEVxdWl2YWxlbmNlcygpO1xuXG4gICAgY29uc3QgZXF1aXZhbGVuY2VzQSA9IHRoaXMuZXF1aXZhbGVuY2VzLCAvLy9cbiAgICAgICAgICBlcXVpdmFsZW5jZXNCID0gZXF1aXZhbGVuY2VzLFxuICAgICAgICAgIGludHJpbnNpY0xldmVsTG9jYWxDb250ZXh0ID0gdGhpczsgIC8vL1xuXG4gICAgZXF1aXZhbGVuY2VzID0gbWVyZ2VFcXVpdmFsZW5jZXMoZXF1aXZhbGVuY2VzQSwgZXF1aXZhbGVuY2VzQiwgaW50cmluc2ljTGV2ZWxMb2NhbENvbnRleHQpOyAvLy9cblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBpc0ludHJpbnNpY0xldmVsKCkge1xuICAgIGNvbnN0IGludHJpbnNpY0xldmVsID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbnRyaW5zaWNMZXZlbDtcbiAgfVxuXG4gIGdldExhc3RQcm9vZlN0ZXAoKSB7XG4gICAgbGV0IGxhc3RQcm9vZlN0ZXAgPSBudWxsO1xuXG4gICAgY29uc3QgcHJvb2ZTdGVwc0xlbmd0aCA9IHRoaXMucHJvb2ZTdGVwcy5sZW5ndGg7XG5cbiAgICBpZiAocHJvb2ZTdGVwc0xlbmd0aCA+IDApIHtcbiAgICAgIGxhc3RQcm9vZlN0ZXAgPSBsYXN0KHRoaXMucHJvb2ZTdGVwcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RQcm9vZlN0ZXA7XG4gIH1cblxuICBnZXRUZXJtVHlwZSh0ZXJtKSB7XG4gICAgbGV0IHRlcm1UeXBlO1xuXG4gICAgY29uc3QgZXF1aXZhbGVuY2VzID0gdGhpcy5nZXRFcXVpdmFsZW5jZXMoKSxcbiAgICAgICAgICBlcXVpdmFsZW5jZSA9IGZpbmRFcXVpdmFsZW5jZUJ5VGVybShlcXVpdmFsZW5jZXMsIHRlcm0pO1xuXG4gICAgaWYgKGVxdWl2YWxlbmNlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbnRyaW5zaWNMZXZlbExvY2FsQ29udGV4dCA9IHRoaXMsICAvLy9cbiAgICAgICAgICAgIGVxdWl2YWxlbmNlVHlwZSA9IGVxdWl2YWxlbmNlLmdldFR5cGUoaW50cmluc2ljTGV2ZWxMb2NhbENvbnRleHQpO1xuXG4gICAgICB0ZXJtVHlwZSA9IGVxdWl2YWxlbmNlVHlwZTsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZXJtVHlwZSA9IHRlcm0uZ2V0VHlwZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtVHlwZTtcbiAgfVxuXG4gIGlzVGVybUdyb3VuZGVkKHRlcm0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcyxcbiAgICAgICAgICBlcXVpdmFsZW5jZXMgPSB0aGlzLmdldEVxdWl2YWxlbmNlcygpLFxuICAgICAgICAgIGdyb3VuZGVkVGVybXMgPSBbXSxcbiAgICAgICAgICBkZWZpbmVkVmFyaWFibGVzID0gW107XG5cbiAgICBncm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlc0Zyb21Gcm9tRXF1aXZhbGVuY2VzKGVxdWl2YWxlbmNlcywgZ3JvdW5kZWRUZXJtcywgZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICBjb25zdCB0ZXJtTWF0Y2hlc0dyb3VuZGVkVGVybSA9IGdyb3VuZGVkVGVybXMuc29tZSgoZ3JvdW5kZWRUZXJtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXJtTWF0Y2hlc0dyb3VuZGVkVGVybSA9IHRlcm0ubWF0Y2goZ3JvdW5kZWRUZXJtKTtcblxuICAgICAgICAgICAgaWYgKHRlcm1NYXRjaGVzR3JvdW5kZWRUZXJtKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRlcm1Hcm91bmRlZCA9IHRlcm1NYXRjaGVzR3JvdW5kZWRUZXJtOyAvLy9cblxuICAgIHJldHVybiB0ZXJtR3JvdW5kZWQ7XG4gIH1cblxuICBpc1ZhcmlhYmxlRGVmaW5lZCh2YXJpYWJsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLFxuICAgICAgICAgIGVxdWl2YWxlbmNlcyA9IHRoaXMuZ2V0RXF1aXZhbGVuY2VzKCksXG4gICAgICAgICAgZ3JvdW5kZWRUZXJtcyA9IFtdLFxuICAgICAgICAgIGRlZmluZWRWYXJpYWJsZXMgPSBbXTtcblxuICAgIGdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzRnJvbUZyb21FcXVpdmFsZW5jZXMoZXF1aXZhbGVuY2VzLCBncm91bmRlZFRlcm1zLCBkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KTtcblxuICAgIGNvbnN0IHZhcmlhYmxlTWF0Y2hlc0RlZmluZWRWYXJpYWJsZSA9IGRlZmluZWRWYXJpYWJsZXMuc29tZSgoZGVmaW5lZFZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZU1hdGNoZXNEZWZpbmVkVmFyaWFibGUgPSB2YXJpYWJsZS5tYXRjaChkZWZpbmVkVmFyaWFibGUpO1xuXG4gICAgICAgICAgICBpZiAodmFyaWFibGVNYXRjaGVzRGVmaW5lZFZhcmlhYmxlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHZhcmlhYmxlRGVmaW5lZCA9IHZhcmlhYmxlTWF0Y2hlc0RlZmluZWRWYXJpYWJsZTsgLy8vXG5cbiAgICByZXR1cm4gdmFyaWFibGVEZWZpbmVkO1xuICB9XG5cbiAgYWRkRXF1YWxpdHkoZXF1YWxpdHkpIHtcbiAgICBsZXQgZXF1YWxpdHlBZGRlZDtcblxuICAgIGNvbnN0IGVxdWFsaXR5UmVmbGV4aXZlID0gZXF1YWxpdHkuaXNSZWZsZXhpdmUoKTtcblxuICAgIGlmIChlcXVhbGl0eVJlZmxleGl2ZSkge1xuICAgICAgZXF1YWxpdHlBZGRlZCA9IHRydWU7IC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsZWZ0VGVybSA9IGVxdWFsaXR5LmdldExlZnRUZXJtKCksXG4gICAgICAgICAgICByaWdodFRlcm0gPSBlcXVhbGl0eS5nZXRSaWdodFRlcm0oKSxcbiAgICAgICAgICAgIGxlZnRFcXVpdmFsZW5jZSA9IGZpbmRFcXVpdmFsZW5jZUJ5VGVybSh0aGlzLmVxdWl2YWxlbmNlcywgbGVmdFRlcm0pLFxuICAgICAgICAgICAgcmlnaHRFcXVpdmFsZW5jZSA9IGZpbmRFcXVpdmFsZW5jZUJ5VGVybSh0aGlzLmVxdWl2YWxlbmNlcywgcmlnaHRUZXJtKTtcblxuICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgIC8vL1xuICAgICAgfSBlbHNlIGlmICgobGVmdEVxdWl2YWxlbmNlID09PSBudWxsKSAmJiAocmlnaHRFcXVpdmFsZW5jZSA9PT0gbnVsbCkpIHtcbiAgICAgICAgY29uc3QgZXF1aXZhbGVuY2UgPSBFcXVpdmFsZW5jZS5mcm9tTGVmdFRlcm1BbmRSaWdodFRlcm0obGVmdFRlcm0sIHJpZ2h0VGVybSk7XG5cbiAgICAgICAgdGhpcy5hZGRFcXVpdmFsZW5jZShlcXVpdmFsZW5jZSk7XG5cbiAgICAgICAgZXF1YWxpdHlBZGRlZCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKChsZWZ0RXF1aXZhbGVuY2UgIT09IG51bGwpICYmIChyaWdodEVxdWl2YWxlbmNlID09PSBudWxsKSkge1xuICAgICAgICBsZWZ0RXF1aXZhbGVuY2UuYWRkVGVybShyaWdodFRlcm0pO1xuXG4gICAgICAgIGVxdWFsaXR5QWRkZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICgobGVmdEVxdWl2YWxlbmNlID09PSBudWxsKSAmJiAocmlnaHRFcXVpdmFsZW5jZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgcmlnaHRFcXVpdmFsZW5jZS5hZGRUZXJtKGxlZnRUZXJtKTtcblxuICAgICAgICBlcXVhbGl0eUFkZGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoKGxlZnRFcXVpdmFsZW5jZSAhPT0gbnVsbCkgJiYgKHJpZ2h0RXF1aXZhbGVuY2UgIT09IG51bGwpKSB7XG4gICAgICAgIGxldCBlcXVpdmFsZW5jZTtcblxuICAgICAgICBpZiAobGVmdEVxdWl2YWxlbmNlID09PSByaWdodEVxdWl2YWxlbmNlKSB7XG4gICAgICAgICAgZXF1aXZhbGVuY2UgPSBsZWZ0RXF1aXZhbGVuY2U7ICAvLy9cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlcXVpdmFsZW5jZSA9IEVxdWl2YWxlbmNlLm1lcmdlKGxlZnRFcXVpdmFsZW5jZSwgcmlnaHRFcXVpdmFsZW5jZSk7XG5cbiAgICAgICAgICB0aGlzLnJlbW92ZUVxdWl2YWxlbmNlKGxlZnRFcXVpdmFsZW5jZSk7XG5cbiAgICAgICAgICB0aGlzLnJlbW92ZUVxdWl2YWxlbmNlKHJpZ2h0RXF1aXZhbGVuY2UpO1xuXG4gICAgICAgICAgdGhpcy5hZGRFcXVpdmFsZW5jZShlcXVpdmFsZW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICBlcXVpdmFsZW5jZS5hZGRUZXJtKGxlZnRUZXJtKTtcblxuICAgICAgICBlcXVpdmFsZW5jZS5hZGRUZXJtKHJpZ2h0VGVybSk7XG5cbiAgICAgICAgZXF1YWxpdHlBZGRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVxdWFsaXR5QWRkZWQ7XG4gIH1cblxuICBhZGRWYXJpYWJsZSh2YXJpYWJsZSkge1xuICAgIGxldCB2YXJpYWJsZUFkZGVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBub2RlID0gdmFyaWFibGUuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHZhcmlhYmxlUHJlc2VudCA9IHRoaXMudmFyaWFibGVzLnNvbWUoKHZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZU1hdGNoZXNOb2RlID0gdmFyaWFibGUubWF0Y2hOb2RlKG5vZGUpO1xuXG4gICAgICAgICAgICBpZiAodmFyaWFibGVNYXRjaGVzTm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIGlmICghdmFyaWFibGVQcmVzZW50KSB7XG4gICAgICB0aGlzLnZhcmlhYmxlcy5wdXNoKHZhcmlhYmxlKTtcblxuICAgICAgdmFyaWFibGVBZGRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhcmlhYmxlQWRkZWQ7XG4gIH1cblxuICBhZGRQcm9vZlN0ZXAocHJvb2ZTdGVwKSB7XG4gICAgdGhpcy5wcm9vZlN0ZXBzLnB1c2gocHJvb2ZTdGVwKTtcbiAgfVxuXG4gIGFkZEVxdWl2YWxlbmNlKGVxdWl2YWxlbmNlKSB7XG4gICAgdGhpcy5lcXVpdmFsZW5jZXMucHVzaChlcXVpdmFsZW5jZSk7XG4gIH1cblxuICByZW1vdmVFcXVpdmFsZW5jZShlcXVpdmFsZW5jZSkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5lcXVpdmFsZW5jZXMuaW5kZXhPZihlcXVpdmFsZW5jZSksXG4gICAgICAgICAgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgIHRoaXMuZXF1aXZhbGVuY2VzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICB9XG5cbiAgbWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBsZXQgcHJvb2ZTdGVwcyA9IHRoaXMuZ2V0UHJvb2ZTdGVwcygpO1xuXG4gICAgcHJvb2ZTdGVwcyA9IHJldmVyc2UocHJvb2ZTdGVwcyk7IC8vL1xuXG4gICAgY29uc3QgbWF0Y2hlc1N0YXRlbWVudE5vZGUgPSBwcm9vZlN0ZXBzLnNvbWUoKHByb29mU3RlcCkgPT4ge1xuICAgICAgY29uc3QgcHJvb2ZTdGVwTWF0Y2hlc1N0YXRlbWVudE5vZGUgPSBwcm9vZlN0ZXAubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgICBpZiAocHJvb2ZTdGVwTWF0Y2hlc1N0YXRlbWVudE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWF0Y2hlc1N0YXRlbWVudE5vZGU7XG4gIH1cblxuICBmaW5kVmFyaWFibGVCeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgdmFyaWFibGVzID0gdGhpcy5nZXRWYXJpYWJsZXMoKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlcy5maW5kKCh2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHZhcmlhYmxlLm1hdGNoTm9kZShub2RlKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOb2RlKG1ldGFUeXBlTm9kZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOb2RlKG1ldGFUeXBlTm9kZSk7IH1cblxuICBpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5maW5kVmFyaWFibGVCeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHZhcmlhYmxlUHJlc2VudCA9ICh2YXJpYWJsZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgdG9KU09OKHRva2Vucykge1xuICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMudmFyaWFibGVzLm1hcCgodmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlSlNPTiA9IHZhcmlhYmxlLnRvSlNPTih0b2tlbnMpO1xuXG4gICAgICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlSlNPTjtcblxuICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICB2YXJpYWJsZXNcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUZpbGVDb250ZXh0KGZpbGVDb250ZXh0KSB7XG4gICAgY29uc3QgY29udGV4dCA9IGZpbGVDb250ZXh0LCAgLy8vXG4gICAgICAgICAgdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgcHJvb2ZTdGVwcyA9IFtdLFxuICAgICAgICAgIGVxdWl2YWxlbmNlcyA9IFtdLFxuICAgICAgICAgIGludHJpbnNpY0xldmVsTG9jYWxDb250ZXh0ID0gbmV3IEludHJpbnNpY0xldmVsTG9jYWxDb250ZXh0KGNvbnRleHQsIHZhcmlhYmxlcywgcHJvb2ZTdGVwcywgZXF1aXZhbGVuY2VzKTtcblxuICAgIHJldHVybiBpbnRyaW5zaWNMZXZlbExvY2FsQ29udGV4dDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTG9jYWxDb250ZXh0KGxvY2FsQ29udGV4dCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBsb2NhbENvbnRleHQsICAvLy9cbiAgICAgICAgICB2YXJpYWJsZXMgPSBbXSxcbiAgICAgICAgICBwcm9vZlN0ZXBzID0gW10sXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gW10sXG4gICAgICAgICAgaW50cmluc2ljTGV2ZWxMb2NhbENvbnRleHQgPSBuZXcgSW50cmluc2ljTGV2ZWxMb2NhbENvbnRleHQoY29udGV4dCwgdmFyaWFibGVzLCBwcm9vZlN0ZXBzLCBlcXVpdmFsZW5jZXMpO1xuXG4gICAgcmV0dXJuIGludHJpbnNpY0xldmVsTG9jYWxDb250ZXh0O1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OQW5kRmlsZUNvbnRleHQoanNvbiwgZmlsZUNvbnRleHQpIHtcbiAgICBsZXQgeyB2YXJpYWJsZXMgfSA9IGpzb247XG5cbiAgICBjb25zdCB2YXJpYWJsZXNKU09OID0gdmFyaWFibGVzO1xuXG4gICAgdmFyaWFibGVzID0gdmFyaWFibGVzSlNPTi5tYXAoKHZhcmlhYmxlSlNPTikgPT4ge1xuICAgICAgY29uc3QganNvbiA9IHZhcmlhYmxlSlNPTiwgIC8vL1xuICAgICAgICAgICAgdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tSlNPTkFuZEZpbGVDb250ZXh0KGpzb24sIGZpbGVDb250ZXh0KTtcblxuICAgICAgcmV0dXJuIHZhcmlhYmxlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY29udGV4dCA9IGZpbGVDb250ZXh0LCAgLy8vXG4gICAgICAgICAgcHJvb2ZTdGVwcyA9IFtdLFxuICAgICAgICAgIGVxdWl2YWxlbmNlcyA9IFtdLFxuICAgICAgICAgIGludHJpbnNpY0xldmVsTG9jYWxDb250ZXh0ID0gbmV3IEludHJpbnNpY0xldmVsTG9jYWxDb250ZXh0KGNvbnRleHQsIHZhcmlhYmxlcywgcHJvb2ZTdGVwcywgZXF1aXZhbGVuY2VzKTtcblxuICAgIHJldHVybiBpbnRyaW5zaWNMZXZlbExvY2FsQ29udGV4dDtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKEludHJpbnNpY0xldmVsTG9jYWxDb250ZXh0LnByb3RvdHlwZSwgY29udGV4dE1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IEludHJpbnNpY0xldmVsTG9jYWxDb250ZXh0O1xuIl0sIm5hbWVzIjpbIkludHJpbnNpY0xldmVsTG9jYWxDb250ZXh0IiwiY29udGV4dCIsInZhcmlhYmxlcyIsInByb29mU3RlcHMiLCJlcXVpdmFsZW5jZXMiLCJnZXRDb250ZXh0IiwiZ2V0VmFyaWFibGVzIiwiZ2V0UHJvb2ZTdGVwcyIsImdldEVxdWl2YWxlbmNlcyIsImVxdWl2YWxlbmNlc0EiLCJlcXVpdmFsZW5jZXNCIiwiaW50cmluc2ljTGV2ZWxMb2NhbENvbnRleHQiLCJtZXJnZUVxdWl2YWxlbmNlcyIsImlzSW50cmluc2ljTGV2ZWwiLCJpbnRyaW5zaWNMZXZlbCIsImdldExhc3RQcm9vZlN0ZXAiLCJsYXN0UHJvb2ZTdGVwIiwicHJvb2ZTdGVwc0xlbmd0aCIsImxlbmd0aCIsImxhc3QiLCJnZXRUZXJtVHlwZSIsInRlcm0iLCJ0ZXJtVHlwZSIsImVxdWl2YWxlbmNlIiwiZmluZEVxdWl2YWxlbmNlQnlUZXJtIiwiZXF1aXZhbGVuY2VUeXBlIiwiZ2V0VHlwZSIsImlzVGVybUdyb3VuZGVkIiwiZ3JvdW5kZWRUZXJtcyIsImRlZmluZWRWYXJpYWJsZXMiLCJncm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlc0Zyb21Gcm9tRXF1aXZhbGVuY2VzIiwidGVybU1hdGNoZXNHcm91bmRlZFRlcm0iLCJzb21lIiwiZ3JvdW5kZWRUZXJtIiwibWF0Y2giLCJ0ZXJtR3JvdW5kZWQiLCJpc1ZhcmlhYmxlRGVmaW5lZCIsInZhcmlhYmxlIiwidmFyaWFibGVNYXRjaGVzRGVmaW5lZFZhcmlhYmxlIiwiZGVmaW5lZFZhcmlhYmxlIiwidmFyaWFibGVEZWZpbmVkIiwiYWRkRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5QWRkZWQiLCJlcXVhbGl0eVJlZmxleGl2ZSIsImlzUmVmbGV4aXZlIiwibGVmdFRlcm0iLCJnZXRMZWZ0VGVybSIsInJpZ2h0VGVybSIsImdldFJpZ2h0VGVybSIsImxlZnRFcXVpdmFsZW5jZSIsInJpZ2h0RXF1aXZhbGVuY2UiLCJFcXVpdmFsZW5jZSIsImZyb21MZWZ0VGVybUFuZFJpZ2h0VGVybSIsImFkZEVxdWl2YWxlbmNlIiwiYWRkVGVybSIsIm1lcmdlIiwicmVtb3ZlRXF1aXZhbGVuY2UiLCJhZGRWYXJpYWJsZSIsInZhcmlhYmxlQWRkZWQiLCJub2RlIiwiZ2V0Tm9kZSIsInZhcmlhYmxlUHJlc2VudCIsInZhcmlhYmxlTWF0Y2hlc05vZGUiLCJtYXRjaE5vZGUiLCJwdXNoIiwiYWRkUHJvb2ZTdGVwIiwicHJvb2ZTdGVwIiwiaW5kZXgiLCJpbmRleE9mIiwic3RhcnQiLCJkZWxldGVDb3VudCIsInNwbGljZSIsIm1hdGNoU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJyZXZlcnNlIiwibWF0Y2hlc1N0YXRlbWVudE5vZGUiLCJwcm9vZlN0ZXBNYXRjaGVzU3RhdGVtZW50Tm9kZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlIiwiZmluZCIsIm1hdGNoZXMiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTm9kZSIsIm1ldGFUeXBlTm9kZSIsImlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5vZGUiLCJ0b0pTT04iLCJ0b2tlbnMiLCJtYXAiLCJ2YXJpYWJsZUpTT04iLCJqc29uIiwiZnJvbUZpbGVDb250ZXh0IiwiZmlsZUNvbnRleHQiLCJmcm9tTG9jYWxDb250ZXh0IiwibG9jYWxDb250ZXh0IiwiZnJvbUpTT05BbmRGaWxlQ29udGV4dCIsInZhcmlhYmxlc0pTT04iLCJWYXJpYWJsZSIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSIsImNvbnRleHRNaXhpbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWdVQTs7O2VBQUE7OzsrREE5VHFCO2tFQUNHOzhEQUNFO3FCQUVJOzRCQUNpRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFL0csSUFBQSxBQUFNQSwyQ0FBRCxBQUFMO2FBQU1BLDJCQUNRQyxPQUFPLEVBQUVDLFNBQVMsRUFBRUMsVUFBVSxFQUFFQyxZQUFZO2dDQURwREo7UUFFRixJQUFJLENBQUNDLE9BQU8sR0FBR0E7UUFDZixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsWUFBWSxHQUFHQTs7a0JBTGxCSjs7WUFRSkssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSixPQUFPO1lBQ3JCOzs7WUFFQUssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQUlKLFlBQVksSUFBSSxDQUFDRCxPQUFPLENBQUNLLFlBQVk7Z0JBRXpDSixZQUFZLEFBQ1YscUJBQUcsSUFBSSxDQUFDQSxTQUFTLFNBQ2pCLHFCQUFHQTtnQkFHTCxPQUFPQTtZQUNUOzs7WUFFQUssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQUlKLGFBQWEsSUFBSSxDQUFDRixPQUFPLENBQUNNLGFBQWE7Z0JBRTNDSixhQUFhLEFBQ1gscUJBQUdBLG1CQUNILHFCQUFHLElBQUksQ0FBQ0EsVUFBVTtnQkFHcEIsT0FBT0E7WUFDVDs7O1lBRUFLLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFJSixlQUFlLElBQUksQ0FBQ0gsT0FBTyxDQUFDTyxlQUFlO2dCQUUvQyxJQUFNQyxnQkFBZ0IsSUFBSSxDQUFDTCxZQUFZLEVBQ2pDTSxnQkFBZ0JOLGNBQ2hCTyw2QkFBNkIsSUFBSSxFQUFHLEdBQUc7Z0JBRTdDUCxlQUFlUSxJQUFBQSwrQkFBaUIsRUFBQ0gsZUFBZUMsZUFBZUMsNkJBQTZCLEdBQUc7Z0JBRS9GLE9BQU9QO1lBQ1Q7OztZQUVBUyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUMsaUJBQWlCO2dCQUV2QixPQUFPQTtZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQUlDLGdCQUFnQjtnQkFFcEIsSUFBTUMsbUJBQW1CLElBQUksQ0FBQ2QsVUFBVSxDQUFDZSxNQUFNO2dCQUUvQyxJQUFJRCxtQkFBbUIsR0FBRztvQkFDeEJELGdCQUFnQkcsSUFBQUEsV0FBSSxFQUFDLElBQUksQ0FBQ2hCLFVBQVU7Z0JBQ3RDO2dCQUVBLE9BQU9hO1lBQ1Q7OztZQUVBSSxLQUFBQTttQkFBQUEsU0FBQUEsWUFBWUMsSUFBSTtnQkFDZCxJQUFJQztnQkFFSixJQUFNbEIsZUFBZSxJQUFJLENBQUNJLGVBQWUsSUFDbkNlLGNBQWNDLElBQUFBLG1DQUFxQixFQUFDcEIsY0FBY2lCO2dCQUV4RCxJQUFJRSxnQkFBZ0IsTUFBTTtvQkFDeEIsSUFBTVosNkJBQTZCLElBQUksRUFDakNjLGtCQUFrQkYsWUFBWUcsT0FBTyxDQUFDZjtvQkFFNUNXLFdBQVdHLGlCQUFrQixHQUFHO2dCQUNsQyxPQUFPO29CQUNMSCxXQUFXRCxLQUFLSyxPQUFPO2dCQUN6QjtnQkFFQSxPQUFPSjtZQUNUOzs7WUFFQUssS0FBQUE7bUJBQUFBLFNBQUFBLGVBQWVOLElBQUk7Z0JBQ2pCLElBQU1wQixVQUFVLElBQUksRUFDZEcsZUFBZSxJQUFJLENBQUNJLGVBQWUsSUFDbkNvQixnQkFBZ0IsRUFBRSxFQUNsQkMsbUJBQW1CLEVBQUU7Z0JBRTNCQyxJQUFBQSxrRUFBb0QsRUFBQzFCLGNBQWN3QixlQUFlQyxrQkFBa0I1QjtnQkFFcEcsSUFBTThCLDBCQUEwQkgsY0FBY0ksSUFBSSxDQUFDLFNBQUNDO29CQUM1QyxJQUFNRiwwQkFBMEJWLEtBQUthLEtBQUssQ0FBQ0Q7b0JBRTNDLElBQUlGLHlCQUF5Qjt3QkFDM0IsT0FBTztvQkFDVDtnQkFDRixJQUNBSSxlQUFlSix5QkFBeUIsR0FBRztnQkFFakQsT0FBT0k7WUFDVDs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQSxrQkFBa0JDLFFBQVE7Z0JBQ3hCLElBQU1wQyxVQUFVLElBQUksRUFDZEcsZUFBZSxJQUFJLENBQUNJLGVBQWUsSUFDbkNvQixnQkFBZ0IsRUFBRSxFQUNsQkMsbUJBQW1CLEVBQUU7Z0JBRTNCQyxJQUFBQSxrRUFBb0QsRUFBQzFCLGNBQWN3QixlQUFlQyxrQkFBa0I1QjtnQkFFcEcsSUFBTXFDLGlDQUFpQ1QsaUJBQWlCRyxJQUFJLENBQUMsU0FBQ087b0JBQ3RELElBQU1ELGlDQUFpQ0QsU0FBU0gsS0FBSyxDQUFDSztvQkFFdEQsSUFBSUQsZ0NBQWdDO3dCQUNsQyxPQUFPO29CQUNUO2dCQUNGLElBQ0FFLGtCQUFrQkYsZ0NBQWdDLEdBQUc7Z0JBRTNELE9BQU9FO1lBQ1Q7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUEsWUFBWUMsUUFBUTtnQkFDbEIsSUFBSUM7Z0JBRUosSUFBTUMsb0JBQW9CRixTQUFTRyxXQUFXO2dCQUU5QyxJQUFJRCxtQkFBbUI7b0JBQ3JCRCxnQkFBZ0IsTUFBTSxHQUFHO2dCQUMzQixPQUFPO29CQUNMLElBQU1HLFdBQVdKLFNBQVNLLFdBQVcsSUFDL0JDLFlBQVlOLFNBQVNPLFlBQVksSUFDakNDLGtCQUFrQjFCLElBQUFBLG1DQUFxQixFQUFDLElBQUksQ0FBQ3BCLFlBQVksRUFBRTBDLFdBQzNESyxtQkFBbUIzQixJQUFBQSxtQ0FBcUIsRUFBQyxJQUFJLENBQUNwQixZQUFZLEVBQUU0QztvQkFFbEUsSUFBSSxPQUFPO29CQUNULEdBQUc7b0JBQ0wsT0FBTyxJQUFJLEFBQUNFLG9CQUFvQixRQUFVQyxxQkFBcUIsTUFBTzt3QkFDcEUsSUFBTTVCLGNBQWM2QixvQkFBVyxDQUFDQyx3QkFBd0IsQ0FBQ1AsVUFBVUU7d0JBRW5FLElBQUksQ0FBQ00sY0FBYyxDQUFDL0I7d0JBRXBCb0IsZ0JBQWdCO29CQUNsQixPQUFPLElBQUksQUFBQ08sb0JBQW9CLFFBQVVDLHFCQUFxQixNQUFPO3dCQUNwRUQsZ0JBQWdCSyxPQUFPLENBQUNQO3dCQUV4QkwsZ0JBQWdCO29CQUNsQixPQUFPLElBQUksQUFBQ08sb0JBQW9CLFFBQVVDLHFCQUFxQixNQUFPO3dCQUNwRUEsaUJBQWlCSSxPQUFPLENBQUNUO3dCQUV6QkgsZ0JBQWdCO29CQUNsQixPQUFPLElBQUksQUFBQ08sb0JBQW9CLFFBQVVDLHFCQUFxQixNQUFPO3dCQUNwRSxJQUFJNUI7d0JBRUosSUFBSTJCLG9CQUFvQkMsa0JBQWtCOzRCQUN4QzVCLGVBQWMyQixpQkFBa0IsR0FBRzt3QkFDckMsT0FBTzs0QkFDTDNCLGVBQWM2QixvQkFBVyxDQUFDSSxLQUFLLENBQUNOLGlCQUFpQkM7NEJBRWpELElBQUksQ0FBQ00saUJBQWlCLENBQUNQOzRCQUV2QixJQUFJLENBQUNPLGlCQUFpQixDQUFDTjs0QkFFdkIsSUFBSSxDQUFDRyxjQUFjLENBQUMvQjt3QkFDdEI7d0JBRUFBLGFBQVlnQyxPQUFPLENBQUNUO3dCQUVwQnZCLGFBQVlnQyxPQUFPLENBQUNQO3dCQUVwQkwsZ0JBQWdCO29CQUNsQjtnQkFDRjtnQkFFQSxPQUFPQTtZQUNUOzs7WUFFQWUsS0FBQUE7bUJBQUFBLFNBQUFBLFlBQVlyQixRQUFRO2dCQUNsQixJQUFJc0IsZ0JBQWdCO2dCQUVwQixJQUFNQyxPQUFPdkIsU0FBU3dCLE9BQU8sSUFDdkJDLGtCQUFrQixJQUFJLENBQUM1RCxTQUFTLENBQUM4QixJQUFJLENBQUMsU0FBQ0s7b0JBQ3JDLElBQU0wQixzQkFBc0IxQixTQUFTMkIsU0FBUyxDQUFDSjtvQkFFL0MsSUFBSUcscUJBQXFCO3dCQUN2QixPQUFPO29CQUNUO2dCQUNGO2dCQUVOLElBQUksQ0FBQ0QsaUJBQWlCO29CQUNwQixJQUFJLENBQUM1RCxTQUFTLENBQUMrRCxJQUFJLENBQUM1QjtvQkFFcEJzQixnQkFBZ0I7Z0JBQ2xCO2dCQUVBLE9BQU9BO1lBQ1Q7OztZQUVBTyxLQUFBQTttQkFBQUEsU0FBQUEsYUFBYUMsU0FBUztnQkFDcEIsSUFBSSxDQUFDaEUsVUFBVSxDQUFDOEQsSUFBSSxDQUFDRTtZQUN2Qjs7O1lBRUFiLEtBQUFBO21CQUFBQSxTQUFBQSxlQUFlL0IsV0FBVztnQkFDeEIsSUFBSSxDQUFDbkIsWUFBWSxDQUFDNkQsSUFBSSxDQUFDMUM7WUFDekI7OztZQUVBa0MsS0FBQUE7bUJBQUFBLFNBQUFBLGtCQUFrQmxDLFdBQVc7Z0JBQzNCLElBQU02QyxRQUFRLElBQUksQ0FBQ2hFLFlBQVksQ0FBQ2lFLE9BQU8sQ0FBQzlDLGNBQ2xDK0MsUUFBUUYsT0FDUkcsY0FBYztnQkFFcEIsSUFBSSxDQUFDbkUsWUFBWSxDQUFDb0UsTUFBTSxDQUFDRixPQUFPQztZQUNsQzs7O1lBRUFFLEtBQUFBO21CQUFBQSxTQUFBQSxtQkFBbUJDLGFBQWE7Z0JBQzlCLElBQUl2RSxhQUFhLElBQUksQ0FBQ0ksYUFBYTtnQkFFbkNKLGFBQWF3RSxJQUFBQSxjQUFPLEVBQUN4RSxhQUFhLEdBQUc7Z0JBRXJDLElBQU15RSx1QkFBdUJ6RSxXQUFXNkIsSUFBSSxDQUFDLFNBQUNtQztvQkFDNUMsSUFBTVUsZ0NBQWdDVixVQUFVTSxrQkFBa0IsQ0FBQ0M7b0JBRW5FLElBQUlHLCtCQUErQjt3QkFDakMsT0FBTztvQkFDVDtnQkFDRjtnQkFFQSxPQUFPRDtZQUNUOzs7WUFFQUUsS0FBQUE7bUJBQUFBLFNBQUFBLDJCQUEyQkMsWUFBWTtnQkFDckMsSUFBTW5CLE9BQU9tQixjQUNQN0UsWUFBWSxJQUFJLENBQUNJLFlBQVksSUFDN0IrQixXQUFXbkMsVUFBVThFLElBQUksQ0FBQyxTQUFDM0M7b0JBQ3pCLElBQU00QyxVQUFVNUMsU0FBUzJCLFNBQVMsQ0FBQ0o7b0JBRW5DLElBQUlxQixTQUFTO3dCQUNYLE9BQU87b0JBQ1Q7Z0JBQ0YsTUFBTTtnQkFFWixPQUFPNUM7WUFDVDs7O1lBRUE2QyxLQUFBQTttQkFBQUEsU0FBQUEsMkJBQTJCQyxZQUFZO2dCQUFJLE9BQU8sSUFBSSxDQUFDbEYsT0FBTyxDQUFDaUYsMEJBQTBCLENBQUNDO1lBQWU7OztZQUV6R0MsS0FBQUE7bUJBQUFBLFNBQUFBLGdDQUFnQ0wsWUFBWTtnQkFDMUMsSUFBTTFDLFdBQVcsSUFBSSxDQUFDeUMsMEJBQTBCLENBQUNDLGVBQzNDakIsa0JBQW1CekIsYUFBYTtnQkFFdEMsT0FBT3lCO1lBQ1Q7OztZQUVBdUIsS0FBQUE7bUJBQUFBLFNBQUFBLE9BQU9DLE1BQU07Z0JBQ1gsSUFBTXBGLFlBQVksSUFBSSxDQUFDQSxTQUFTLENBQUNxRixHQUFHLENBQUMsU0FBQ2xEO29CQUM5QixJQUFNbUQsZUFBZW5ELFNBQVNnRCxNQUFNLENBQUNDO29CQUVyQ2pELFdBQVdtRDtvQkFFWCxPQUFPbkQ7Z0JBQ1QsSUFDQW9ELE9BQU87b0JBQ0x2RixXQUFBQTtnQkFDRjtnQkFFTixPQUFPdUY7WUFDVDs7OztZQUVPQyxLQUFBQTttQkFBUCxTQUFPQSxnQkFBZ0JDLFdBQVc7Z0JBQ2hDLElBQU0xRixVQUFVMEYsYUFDVnpGLFlBQVksRUFBRSxFQUNkQyxhQUFhLEVBQUUsRUFDZkMsZUFBZSxFQUFFLEVBQ2pCTyw2QkFBNkIsSUFqUmpDWCwyQkFpUmdFQyxTQUFTQyxXQUFXQyxZQUFZQztnQkFFbEcsT0FBT087WUFDVDs7O1lBRU9pRixLQUFBQTttQkFBUCxTQUFPQSxpQkFBaUJDLFlBQVk7Z0JBQ2xDLElBQU01RixVQUFVNEYsY0FDVjNGLFlBQVksRUFBRSxFQUNkQyxhQUFhLEVBQUUsRUFDZkMsZUFBZSxFQUFFLEVBQ2pCTyw2QkFBNkIsSUEzUmpDWCwyQkEyUmdFQyxTQUFTQyxXQUFXQyxZQUFZQztnQkFFbEcsT0FBT087WUFDVDs7O1lBRU9tRixLQUFBQTttQkFBUCxTQUFPQSx1QkFBdUJMLElBQUksRUFBRUUsV0FBVztnQkFDN0MsSUFBSSxBQUFFekYsWUFBY3VGLEtBQWR2RjtnQkFFTixJQUFNNkYsZ0JBQWdCN0Y7Z0JBRXRCQSxZQUFZNkYsY0FBY1IsR0FBRyxDQUFDLFNBQUNDO29CQUM3QixJQUFNQyxTQUFPRCxjQUNQbkQsV0FBVzJELGlCQUFRLENBQUNGLHNCQUFzQixDQUFDTCxRQUFNRTtvQkFFdkQsT0FBT3REO2dCQUNUO2dCQUVBLElBQU1wQyxVQUFVMEYsYUFDVnhGLGFBQWEsRUFBRSxFQUNmQyxlQUFlLEVBQUUsRUFDakJPLDZCQUE2QixJQS9TakNYLDJCQStTZ0VDLFNBQVNDLFdBQVdDLFlBQVlDO2dCQUVsRyxPQUFPTztZQUNUOzs7V0FsVElYOztBQXFUTmlHLE9BQU9DLE1BQU0sQ0FBQ2xHLDJCQUEyQm1HLFNBQVMsRUFBRUMsZ0JBQWE7SUFFakUsV0FBZXBHIn0=
|