occam-verify-cli 0.0.539 → 0.0.540
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/action/verify.js +5 -1
- package/lib/axiom.js +4 -4
- package/lib/axiomLemmaTheoremConjecture.js +6 -6
- package/lib/combinator.js +4 -4
- package/lib/conclusion.js +4 -4
- package/lib/conjecture.js +4 -4
- package/lib/constructor.js +6 -6
- package/lib/context/file.js +135 -27
- package/lib/context/metaproof.js +3 -3
- package/lib/context/release.js +215 -2
- package/lib/kinds.js +9 -1
- package/lib/label.js +4 -4
- package/lib/lemma.js +4 -4
- package/lib/metavariable.js +7 -1
- package/lib/premise.js +4 -4
- package/lib/rule.js +7 -7
- package/lib/ruleNames.js +16 -4
- package/lib/supposition.js +4 -4
- package/lib/theorem.js +4 -4
- package/lib/type.js +7 -7
- package/lib/utilities/node.js +17 -3
- package/lib/variable.js +7 -1
- package/lib/verifier.js +1 -1
- package/lib/verify/metastatement.js +147 -3
- package/lib/verify/statement.js +2 -2
- package/package.json +3 -3
- package/src/axiom.js +1 -1
- package/src/axiomLemmaTheoremConjecture.js +4 -4
- package/src/combinator.js +3 -3
- package/src/conclusion.js +3 -3
- package/src/conjecture.js +1 -1
- package/src/constructor.js +5 -5
- package/src/context/file.js +161 -27
- package/src/context/metaproof.js +1 -1
- package/src/context/release.js +254 -2
- package/src/kinds.js +2 -0
- package/src/label.js +3 -3
- package/src/lemma.js +1 -1
- package/src/metavariable.js +4 -0
- package/src/premise.js +3 -3
- package/src/rule.js +5 -5
- package/src/ruleNames.js +4 -1
- package/src/supposition.js +3 -3
- package/src/theorem.js +1 -1
- package/src/type.js +5 -5
- package/src/utilities/node.js +32 -2
- package/src/variable.js +4 -0
- package/src/verifier.js +1 -1
- package/src/verify/metastatement.js +65 -2
- package/src/verify/statement.js +2 -2
- package/lib/context/release/directory.js +0 -313
- package/lib/context/release/file.js +0 -387
- package/src/context/release/directory.js +0 -251
- package/src/context/release/file.js +0 -312
package/src/ruleNames.js
CHANGED
|
@@ -3,14 +3,17 @@
|
|
|
3
3
|
export const TERM_RULE_NAME = "term";
|
|
4
4
|
export const TYPE_RULE_NAME = "type";
|
|
5
5
|
export const LABEL_RULE_NAME = "label";
|
|
6
|
+
export const VARIABLE_RULE_NAME = "variable";
|
|
6
7
|
export const ARGUMENT_RULE_NAME = "argument";
|
|
7
8
|
export const SUBPROOF_RULE_NAME = "subproof";
|
|
8
9
|
export const STATEMENT_RULE_NAME = "statement";
|
|
10
|
+
export const META_TYPE_RULE_NAME = "meta-type";
|
|
11
|
+
export const METAVARIABLE_RULE_NAME = "metavariable";
|
|
9
12
|
export const METASTATEMENT_RULE_NAME = "metastatement";
|
|
10
13
|
export const RULE_SUBPROOF_RULE_NAME = "ruleSubproof";
|
|
11
14
|
export const META_ARGUMENT_RULE_NAME = "metaArgument";
|
|
12
15
|
export const QUALIFIED_STATEMENT_RULE_NAME = "qualifiedStatement";
|
|
13
16
|
export const UNQUALIFIED_STATEMENT_RULE_NAME = "unqualifiedStatement";
|
|
14
|
-
export const
|
|
17
|
+
export const CONSTRUCTOR_DECLARATION_RULE_NAME = "constructorDeclaration";
|
|
15
18
|
export const QUALIFIED_METASTATEMENT_RULE_NAME = "qualifiedMetastatement";
|
|
16
19
|
export const UNQUALIFIED_METASTATEMENT_RULE_NAME = "unqualifiedMetastatement";
|
package/src/supposition.js
CHANGED
|
@@ -75,11 +75,11 @@ export default class Supposition {
|
|
|
75
75
|
return json;
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
static
|
|
78
|
+
static fromJSONAndFileContext(json, fileContext) {
|
|
79
79
|
const { statement } = json,
|
|
80
80
|
statementString = statement, ///
|
|
81
|
-
lexer =
|
|
82
|
-
parser =
|
|
81
|
+
lexer = fileContext.getLexer(),
|
|
82
|
+
parser = fileContext.getParser(),
|
|
83
83
|
statementNode = statementNodeFromStatementString(statementString, lexer, parser),
|
|
84
84
|
supposition = new Supposition(statementNode);
|
|
85
85
|
|
package/src/theorem.js
CHANGED
|
@@ -7,7 +7,7 @@ import { THEOREM_KIND } from "./kinds";
|
|
|
7
7
|
export default class Theorem extends AxiomLemmaTheoremConjecture {
|
|
8
8
|
static kind = THEOREM_KIND;
|
|
9
9
|
|
|
10
|
-
static
|
|
10
|
+
static fromJSONAndFileContext(json, fileContext) { return AxiomLemmaTheoremConjecture.fromJSONAndFileContext(Theorem, json, fileContext); }
|
|
11
11
|
|
|
12
12
|
static fromLabelsSuppositionsConsequenceAndProofContext(labels, suppositions, consequence, proofContext) { return AxiomLemmaTheoremConjecture.fromLabelsSuppositionsConsequenceAndProofContext(Theorem, labels, suppositions, consequence, proofContext); }
|
|
13
13
|
}
|
package/src/type.js
CHANGED
|
@@ -133,14 +133,14 @@ export default class Type {
|
|
|
133
133
|
return json;
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
static
|
|
136
|
+
static fromJSONAndFileContext(json, fileContext) {
|
|
137
137
|
let type;
|
|
138
138
|
|
|
139
139
|
let { superType } = json;
|
|
140
140
|
|
|
141
141
|
const superTypeJSON = superType; ///
|
|
142
142
|
|
|
143
|
-
superType =
|
|
143
|
+
superType = superTypeFromSuperTypeJSONAndFileContext(superTypeJSON, fileContext);
|
|
144
144
|
|
|
145
145
|
const { name } = json;
|
|
146
146
|
|
|
@@ -190,7 +190,7 @@ class ObjectType extends Type {
|
|
|
190
190
|
|
|
191
191
|
export const objectType = ObjectType.fromNothing();
|
|
192
192
|
|
|
193
|
-
function
|
|
193
|
+
function superTypeFromSuperTypeJSONAndFileContext(superTypeJSON, fileContext) {
|
|
194
194
|
let superType;
|
|
195
195
|
|
|
196
196
|
const json = superTypeJSON, ///
|
|
@@ -200,11 +200,11 @@ function superTypeFromSuperTypeJSON(superTypeJSON, context) {
|
|
|
200
200
|
superType = objectType; ///
|
|
201
201
|
} else {
|
|
202
202
|
const typeName = name, ///
|
|
203
|
-
type =
|
|
203
|
+
type = fileContext.findTypeByTypeName(typeName);
|
|
204
204
|
|
|
205
205
|
superType = (type !== null) ?
|
|
206
206
|
type : ///
|
|
207
|
-
Type.
|
|
207
|
+
Type.fromJSONAndFileContext(json, fileContext); ///
|
|
208
208
|
}
|
|
209
209
|
|
|
210
210
|
return superType;
|
package/src/utilities/node.js
CHANGED
|
@@ -4,7 +4,13 @@ import { rewriteNodes } from "occam-grammar-utilities";
|
|
|
4
4
|
import { lexersUtilities, parsersUtilities } from "occam-custom-grammars";
|
|
5
5
|
|
|
6
6
|
import { nodeQuery } from "../utilities/query";
|
|
7
|
-
import {
|
|
7
|
+
import { TYPE_RULE_NAME,
|
|
8
|
+
LABEL_RULE_NAME,
|
|
9
|
+
VARIABLE_RULE_NAME,
|
|
10
|
+
METAVARIABLE_RULE_NAME,
|
|
11
|
+
UNQUALIFIED_STATEMENT_RULE_NAME,
|
|
12
|
+
CONSTRUCTOR_DECLARATION_RULE_NAME,
|
|
13
|
+
UNQUALIFIED_METASTATEMENT_RULE_NAME } from "../ruleNames";
|
|
8
14
|
|
|
9
15
|
import { combinedCustomGrammarFromNothing } from "./customGrammar";
|
|
10
16
|
|
|
@@ -16,11 +22,13 @@ const combinedCustomGrammar = combinedCustomGrammarFromNothing(),
|
|
|
16
22
|
florenceParser = florenceParserFromCombinedCustomGrammar(combinedCustomGrammar);
|
|
17
23
|
|
|
18
24
|
const termNodeQuery = nodeQuery("/constructorDeclaration/term!"),
|
|
25
|
+
typeNodeQuery = nodeQuery("/variableDeclaration/type!"),
|
|
26
|
+
variableNodeQuery = nodeQuery("/variableDeclaration/variable!"),
|
|
19
27
|
statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
|
|
20
28
|
metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement!");
|
|
21
29
|
|
|
22
30
|
export function termNodeFromTermString(termString, lexer, parser) {
|
|
23
|
-
const ruleName =
|
|
31
|
+
const ruleName = CONSTRUCTOR_DECLARATION_RULE_NAME,
|
|
24
32
|
content = `Constructor ${termString}
|
|
25
33
|
`,
|
|
26
34
|
node = nodeFromContentAndRuleName(content, ruleName, lexer, parser),
|
|
@@ -39,6 +47,28 @@ export function labelNodeFromLabelString(labelString, lexer, parser) {
|
|
|
39
47
|
return labelNode;
|
|
40
48
|
}
|
|
41
49
|
|
|
50
|
+
export function typeNodeFromVariableString(variableString, lexer, parser) {
|
|
51
|
+
const ruleName = TYPE_RULE_NAME,
|
|
52
|
+
content = `Variable ${variableString}
|
|
53
|
+
`,
|
|
54
|
+
node = nodeFromContentAndRuleName(content, ruleName, lexer, parser),
|
|
55
|
+
typeDeclarationNode = node, ///
|
|
56
|
+
typeNode = typeNodeQuery(typeDeclarationNode);
|
|
57
|
+
|
|
58
|
+
return typeNode;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function variableNodeFromVariableString(variableString, lexer, parser) {
|
|
62
|
+
const ruleName = VARIABLE_RULE_NAME,
|
|
63
|
+
content = `Variable ${variableString}
|
|
64
|
+
`,
|
|
65
|
+
node = nodeFromContentAndRuleName(content, ruleName, lexer, parser),
|
|
66
|
+
variableDeclarationNode = node, ///
|
|
67
|
+
variableNode = variableNodeQuery(variableDeclarationNode);
|
|
68
|
+
|
|
69
|
+
return variableNode;
|
|
70
|
+
}
|
|
71
|
+
|
|
42
72
|
export function statementNodeFromStatementString(statementString, lexer, parser) {
|
|
43
73
|
const ruleName = UNQUALIFIED_STATEMENT_RULE_NAME,
|
|
44
74
|
content = `${statementString}
|
package/src/variable.js
CHANGED
package/src/verifier.js
CHANGED
|
@@ -1,9 +1,72 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import Verifier from "../verifier";
|
|
4
|
+
|
|
5
|
+
import { METAVARIABLE_RULE_NAME } from "../ruleNames";
|
|
6
|
+
import { metavariableNameFromMetavariableNode } from "../utilities/query";
|
|
7
|
+
|
|
8
|
+
class MetastatementVerifier extends Verifier {
|
|
9
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, metaproofContext) {
|
|
10
|
+
let nonTerminalNodeVerified = false;
|
|
11
|
+
|
|
12
|
+
const nonTerminalNode = nonTerminalNodeA, ///
|
|
13
|
+
ruleName = nonTerminalNode.getRuleName(); ///
|
|
14
|
+
|
|
15
|
+
switch (ruleName) {
|
|
16
|
+
case METAVARIABLE_RULE_NAME: {
|
|
17
|
+
const metavariableNode = nonTerminalNode, ///
|
|
18
|
+
metavariableNodeVerified = this.verifyMetavariableNode(metavariableNode, metaproofContext);
|
|
19
|
+
|
|
20
|
+
nonTerminalNodeVerified = metavariableNodeVerified; ///
|
|
21
|
+
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
default: {
|
|
26
|
+
const childNodes = nonTerminalNode.getChildNodes(),
|
|
27
|
+
nodesA = childNodes, ///
|
|
28
|
+
nodesB = childNodes, ///
|
|
29
|
+
nodesVerified = this.verifyNodes(nodesA, nodesB, metaproofContext);
|
|
30
|
+
|
|
31
|
+
nonTerminalNodeVerified = nodesVerified; ///
|
|
32
|
+
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return nonTerminalNodeVerified;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
verifyMetavariableNode(metavariableNode, metaproofContext) {
|
|
41
|
+
let metavariableNodeVerified = false;
|
|
42
|
+
|
|
43
|
+
const metavariableName = metavariableNameFromMetavariableNode(metavariableNode),
|
|
44
|
+
metavariablePresent = metaproofContext.isMetavariablePresentByMetavariableName(metavariableName);
|
|
45
|
+
|
|
46
|
+
if (!metavariablePresent) {
|
|
47
|
+
const metavariableString = metaproofContext.nodeAsString(metavariableNode);
|
|
48
|
+
|
|
49
|
+
metaproofContext.error(`The '${metavariableString}' metavariable is not present.`, metavariableNode);
|
|
50
|
+
} else {
|
|
51
|
+
metavariableNodeVerified = true;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return metavariableNodeVerified;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const metastatementVerifier = new MetastatementVerifier();
|
|
59
|
+
|
|
3
60
|
export default function verifyMetastatement(metastatementNode, assignments, derived, metaproofContext) {
|
|
4
|
-
let metastatementVerified =
|
|
61
|
+
let metastatementVerified = false;
|
|
62
|
+
|
|
63
|
+
if (!metastatementVerified) {
|
|
64
|
+
const nonTerminalNodeA = metastatementNode, ///
|
|
65
|
+
nonTerminalNodeB = metastatementNode, ///
|
|
66
|
+
nonTerminalNodeVerified = metastatementVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, metaproofContext);
|
|
5
67
|
|
|
6
|
-
///
|
|
68
|
+
metastatementVerified = nonTerminalNodeVerified; ///
|
|
69
|
+
}
|
|
7
70
|
|
|
8
71
|
return metastatementVerified;
|
|
9
72
|
}
|
package/src/verify/statement.js
CHANGED
|
@@ -192,8 +192,8 @@ function verifyStatementAgainstCombinator(statementNode, combinator, context) {
|
|
|
192
192
|
const combinatorStatementNode = combinator.getStatementNode(),
|
|
193
193
|
nonTerminalNodeA = statementNode, ///
|
|
194
194
|
nonTerminalNodeB = combinatorStatementNode, ///
|
|
195
|
-
|
|
196
|
-
statementVerifiedAgainstCombinator =
|
|
195
|
+
nonTerminalNodeVerified = statementVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, context),
|
|
196
|
+
statementVerifiedAgainstCombinator = nonTerminalNodeVerified; ///
|
|
197
197
|
|
|
198
198
|
return statementVerifiedAgainstCombinator;
|
|
199
199
|
}
|
|
@@ -1,313 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return DirectoryReleaseContext;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _release = /*#__PURE__*/ _interopRequireDefault(require("../../context/release"));
|
|
12
|
-
var _array = require("../../utilities/array");
|
|
13
|
-
var _customGrammar = require("../../utilities/customGrammar");
|
|
14
|
-
function _assertThisInitialized(self) {
|
|
15
|
-
if (self === void 0) {
|
|
16
|
-
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
17
|
-
}
|
|
18
|
-
return self;
|
|
19
|
-
}
|
|
20
|
-
function _classCallCheck(instance, Constructor) {
|
|
21
|
-
if (!(instance instanceof Constructor)) {
|
|
22
|
-
throw new TypeError("Cannot call a class as a function");
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
function _defineProperties(target, props) {
|
|
26
|
-
for(var i = 0; i < props.length; i++){
|
|
27
|
-
var descriptor = props[i];
|
|
28
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
29
|
-
descriptor.configurable = true;
|
|
30
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
31
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
function _createClass(Constructor, protoProps, staticProps) {
|
|
35
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
36
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
37
|
-
return Constructor;
|
|
38
|
-
}
|
|
39
|
-
function _getPrototypeOf(o) {
|
|
40
|
-
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
|
|
41
|
-
return o.__proto__ || Object.getPrototypeOf(o);
|
|
42
|
-
};
|
|
43
|
-
return _getPrototypeOf(o);
|
|
44
|
-
}
|
|
45
|
-
function _inherits(subClass, superClass) {
|
|
46
|
-
if (typeof superClass !== "function" && superClass !== null) {
|
|
47
|
-
throw new TypeError("Super expression must either be null or a function");
|
|
48
|
-
}
|
|
49
|
-
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
|
50
|
-
constructor: {
|
|
51
|
-
value: subClass,
|
|
52
|
-
writable: true,
|
|
53
|
-
configurable: true
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
if (superClass) _setPrototypeOf(subClass, superClass);
|
|
57
|
-
}
|
|
58
|
-
function _interopRequireDefault(obj) {
|
|
59
|
-
return obj && obj.__esModule ? obj : {
|
|
60
|
-
default: obj
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
function _possibleConstructorReturn(self, call) {
|
|
64
|
-
if (call && (_typeof(call) === "object" || typeof call === "function")) {
|
|
65
|
-
return call;
|
|
66
|
-
}
|
|
67
|
-
return _assertThisInitialized(self);
|
|
68
|
-
}
|
|
69
|
-
function _setPrototypeOf(o, p) {
|
|
70
|
-
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
|
|
71
|
-
o.__proto__ = p;
|
|
72
|
-
return o;
|
|
73
|
-
};
|
|
74
|
-
return _setPrototypeOf(o, p);
|
|
75
|
-
}
|
|
76
|
-
var _typeof = function(obj) {
|
|
77
|
-
"@swc/helpers - typeof";
|
|
78
|
-
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
79
|
-
};
|
|
80
|
-
function _isNativeReflectConstruct() {
|
|
81
|
-
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
|
|
82
|
-
if (Reflect.construct.sham) return false;
|
|
83
|
-
if (typeof Proxy === "function") return true;
|
|
84
|
-
try {
|
|
85
|
-
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
|
|
86
|
-
return true;
|
|
87
|
-
} catch (e) {
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
function _createSuper(Derived) {
|
|
92
|
-
var hasNativeReflectConstruct = _isNativeReflectConstruct();
|
|
93
|
-
return function _createSuperInternal() {
|
|
94
|
-
var Super = _getPrototypeOf(Derived), result;
|
|
95
|
-
if (hasNativeReflectConstruct) {
|
|
96
|
-
var NewTarget = _getPrototypeOf(this).constructor;
|
|
97
|
-
result = Reflect.construct(Super, arguments, NewTarget);
|
|
98
|
-
} else {
|
|
99
|
-
result = Super.apply(this, arguments);
|
|
100
|
-
}
|
|
101
|
-
return _possibleConstructorReturn(this, result);
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
var DirectoryReleaseContext = /*#__PURE__*/ function(ReleaseContext) {
|
|
105
|
-
_inherits(DirectoryReleaseContext, ReleaseContext);
|
|
106
|
-
var _super = _createSuper(DirectoryReleaseContext);
|
|
107
|
-
function DirectoryReleaseContext(log, name, entries, lexer, parser, verified, customGrammar, dependencyReleaseContexts, fileContexts) {
|
|
108
|
-
_classCallCheck(this, DirectoryReleaseContext);
|
|
109
|
-
var _this;
|
|
110
|
-
_this = _super.call(this, log, name, entries, lexer, parser, verified, customGrammar, dependencyReleaseContexts);
|
|
111
|
-
_this.fileContexts = fileContexts;
|
|
112
|
-
return _this;
|
|
113
|
-
}
|
|
114
|
-
_createClass(DirectoryReleaseContext, [
|
|
115
|
-
{
|
|
116
|
-
key: "getFileContexts",
|
|
117
|
-
value: function getFileContexts() {
|
|
118
|
-
return this.fileContexts;
|
|
119
|
-
}
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
key: "getLabels",
|
|
123
|
-
value: function getLabels() {
|
|
124
|
-
var includeDependencies = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
125
|
-
var labels = [];
|
|
126
|
-
this.fileContexts.forEach(function(fileContext) {
|
|
127
|
-
var includeRelease = false, fileContextLabels = fileContext.getLabels(includeRelease);
|
|
128
|
-
(0, _array.push)(labels, fileContextLabels);
|
|
129
|
-
});
|
|
130
|
-
if (includeDependencies) {
|
|
131
|
-
var dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
132
|
-
dependencyReleaseContexts.forEach(function(releaseContext) {
|
|
133
|
-
var includeDependencies = false, releaseContextLabels = releaseContext.getLabels(includeDependencies);
|
|
134
|
-
(0, _array.push)(labels, releaseContextLabels);
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
return labels;
|
|
138
|
-
}
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
key: "getTypes",
|
|
142
|
-
value: function getTypes() {
|
|
143
|
-
var includeDependencies = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
144
|
-
var types = [];
|
|
145
|
-
this.fileContexts.forEach(function(fileContext) {
|
|
146
|
-
var includeRelease = false, fileContextTypes = fileContext.getTypes(includeRelease);
|
|
147
|
-
(0, _array.push)(types, fileContextTypes);
|
|
148
|
-
});
|
|
149
|
-
if (includeDependencies) {
|
|
150
|
-
var dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
151
|
-
dependencyReleaseContexts.forEach(function(releaseContext) {
|
|
152
|
-
var includeDependencies = false, releaseContextTypes = releaseContext.getTypes(includeDependencies);
|
|
153
|
-
(0, _array.push)(types, releaseContextTypes);
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
return types;
|
|
157
|
-
}
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
key: "getRules",
|
|
161
|
-
value: function getRules() {
|
|
162
|
-
var includeDependencies = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
163
|
-
var rules = [];
|
|
164
|
-
this.fileContexts.forEach(function(fileContext) {
|
|
165
|
-
var includeRelease = false, fileContextRules = fileContext.getRules(includeRelease);
|
|
166
|
-
(0, _array.push)(rules, fileContextRules);
|
|
167
|
-
});
|
|
168
|
-
if (includeDependencies) {
|
|
169
|
-
var dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
170
|
-
dependencyReleaseContexts.forEach(function(releaseContext) {
|
|
171
|
-
var includeDependencies = false, releaseContextRules = releaseContext.getRules(includeDependencies);
|
|
172
|
-
(0, _array.push)(rules, releaseContextRules);
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
return rules;
|
|
176
|
-
}
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
key: "getAxioms",
|
|
180
|
-
value: function getAxioms() {
|
|
181
|
-
var includeDependencies = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
182
|
-
var axioms = [];
|
|
183
|
-
this.fileContexts.forEach(function(fileContext) {
|
|
184
|
-
var includeRelease = false, fileContextAxioms = fileContext.getAxioms(includeRelease);
|
|
185
|
-
(0, _array.push)(axioms, fileContextAxioms);
|
|
186
|
-
});
|
|
187
|
-
if (includeDependencies) {
|
|
188
|
-
var dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
189
|
-
dependencyReleaseContexts.forEach(function(releaseContext) {
|
|
190
|
-
var includeDependencies = false, releaseContextAxioms = releaseContext.getAxioms(includeDependencies);
|
|
191
|
-
(0, _array.push)(axioms, releaseContextAxioms);
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
return axioms;
|
|
195
|
-
}
|
|
196
|
-
},
|
|
197
|
-
{
|
|
198
|
-
key: "getLemmas",
|
|
199
|
-
value: function getLemmas() {
|
|
200
|
-
var lemmas = [];
|
|
201
|
-
this.fileContexts.forEach(function(fileContext) {
|
|
202
|
-
var includeRelease = false, fileContextLemmas = fileContext.getLemmas(includeRelease);
|
|
203
|
-
(0, _array.push)(lemmas, fileContextLemmas);
|
|
204
|
-
});
|
|
205
|
-
return lemmas;
|
|
206
|
-
}
|
|
207
|
-
},
|
|
208
|
-
{
|
|
209
|
-
key: "getTheorems",
|
|
210
|
-
value: function getTheorems() {
|
|
211
|
-
var includeDependencies = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
212
|
-
var theorems = [];
|
|
213
|
-
this.fileContexts.forEach(function(fileContext) {
|
|
214
|
-
var includeRelease = false, fileContextTheorems = fileContext.getTheorems(includeRelease);
|
|
215
|
-
(0, _array.push)(theorems, fileContextTheorems);
|
|
216
|
-
});
|
|
217
|
-
if (includeDependencies) {
|
|
218
|
-
var dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
219
|
-
dependencyReleaseContexts.forEach(function(releaseContext) {
|
|
220
|
-
var includeDependencies = false, releaseContextTheorems = releaseContext.getTheorems(includeDependencies);
|
|
221
|
-
(0, _array.push)(theorems, releaseContextTheorems);
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
return theorems;
|
|
225
|
-
}
|
|
226
|
-
},
|
|
227
|
-
{
|
|
228
|
-
key: "getConjectures",
|
|
229
|
-
value: function getConjectures() {
|
|
230
|
-
var includeDependencies = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
231
|
-
var conjectures = [];
|
|
232
|
-
this.fileContexts.forEach(function(fileContext) {
|
|
233
|
-
var includeRelease = false, fileContextConjectures = fileContext.getConjectures(includeRelease);
|
|
234
|
-
(0, _array.push)(conjectures, fileContextConjectures);
|
|
235
|
-
});
|
|
236
|
-
if (includeDependencies) {
|
|
237
|
-
var dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
238
|
-
dependencyReleaseContexts.forEach(function(releaseContext) {
|
|
239
|
-
var includeDependencies = false, releaseContextConjectures = releaseContext.getConjectures(includeDependencies);
|
|
240
|
-
(0, _array.push)(conjectures, releaseContextConjectures);
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
return conjectures;
|
|
244
|
-
}
|
|
245
|
-
},
|
|
246
|
-
{
|
|
247
|
-
key: "getCombinators",
|
|
248
|
-
value: function getCombinators() {
|
|
249
|
-
var includeDependencies = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
250
|
-
var combinators = [];
|
|
251
|
-
this.fileContexts.forEach(function(fileContext) {
|
|
252
|
-
var includeRelease = false, fileContextCombinators = fileContext.getCombinators(includeRelease);
|
|
253
|
-
(0, _array.push)(combinators, fileContextCombinators);
|
|
254
|
-
});
|
|
255
|
-
if (includeDependencies) {
|
|
256
|
-
var dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
257
|
-
dependencyReleaseContexts.forEach(function(releaseContext) {
|
|
258
|
-
var includeDependencies = false, releaseContextCombinators = releaseContext.getCombinators(includeDependencies);
|
|
259
|
-
(0, _array.push)(combinators, releaseContextCombinators);
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
return combinators;
|
|
263
|
-
}
|
|
264
|
-
},
|
|
265
|
-
{
|
|
266
|
-
key: "getConstructors",
|
|
267
|
-
value: function getConstructors() {
|
|
268
|
-
var includeDependencies = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
269
|
-
var constructors = [];
|
|
270
|
-
this.fileContexts.forEach(function(fileContext) {
|
|
271
|
-
var includeRelease = false, fileContextConstructors = fileContext.getConstructors(includeRelease);
|
|
272
|
-
(0, _array.push)(constructors, fileContextConstructors);
|
|
273
|
-
});
|
|
274
|
-
if (includeDependencies) {
|
|
275
|
-
var dependencyReleaseContexts = this.getDependencyReleaseContexts();
|
|
276
|
-
dependencyReleaseContexts.forEach(function(releaseContext) {
|
|
277
|
-
var includeDependencies = false, releaseContextConstructors = releaseContext.getConstructors(includeDependencies);
|
|
278
|
-
(0, _array.push)(constructors, releaseContextConstructors);
|
|
279
|
-
});
|
|
280
|
-
}
|
|
281
|
-
return constructors;
|
|
282
|
-
}
|
|
283
|
-
},
|
|
284
|
-
{
|
|
285
|
-
key: "addFileContext",
|
|
286
|
-
value: function addFileContext(fileContext) {
|
|
287
|
-
this.fileContexts.push(fileContext);
|
|
288
|
-
}
|
|
289
|
-
},
|
|
290
|
-
{
|
|
291
|
-
key: "toJSON",
|
|
292
|
-
value: function toJSON() {
|
|
293
|
-
var json = [];
|
|
294
|
-
this.fileContexts.forEach(function(fileContext) {
|
|
295
|
-
var fileContextJSON = fileContext.toJSON();
|
|
296
|
-
(0, _array.push)(json, fileContextJSON);
|
|
297
|
-
});
|
|
298
|
-
return json;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
], [
|
|
302
|
-
{
|
|
303
|
-
key: "fromLogNameAndEntries",
|
|
304
|
-
value: function fromLogNameAndEntries(log, name, entries) {
|
|
305
|
-
var lexer = null, parser = null, verified = false, customGrammar = (0, _customGrammar.customGrammarFromNameAndEntries)(name, entries), dependencyReleaseContexts = null, fileContexts = [], directoryReleaseContext = new DirectoryReleaseContext(log, name, entries, lexer, parser, verified, customGrammar, dependencyReleaseContexts, fileContexts);
|
|
306
|
-
return directoryReleaseContext;
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
]);
|
|
310
|
-
return DirectoryReleaseContext;
|
|
311
|
-
}(_release.default);
|
|
312
|
-
|
|
313
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0L3JlbGVhc2UvZGlyZWN0b3J5LmpzIiwiPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUmVsZWFzZUNvbnRleHQgZnJvbSBcIi4uLy4uL2NvbnRleHQvcmVsZWFzZVwiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgY3VzdG9tR3JhbW1hckZyb21OYW1lQW5kRW50cmllcyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY3VzdG9tR3JhbW1hclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXJlY3RvcnlSZWxlYXNlQ29udGV4dCBleHRlbmRzIFJlbGVhc2VDb250ZXh0IHtcbiAgY29uc3RydWN0b3IobG9nLCBuYW1lLCBlbnRyaWVzLCBsZXhlciwgcGFyc2VyLCB2ZXJpZmllZCwgY3VzdG9tR3JhbW1hciwgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cywgZmlsZUNvbnRleHRzKSB7XG4gICAgc3VwZXIobG9nLCBuYW1lLCBlbnRyaWVzLCBsZXhlciwgcGFyc2VyLCB2ZXJpZmllZCwgY3VzdG9tR3JhbW1hciwgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyk7XG5cbiAgICB0aGlzLmZpbGVDb250ZXh0cyA9IGZpbGVDb250ZXh0cztcbiAgfVxuXG4gIGdldEZpbGVDb250ZXh0cygpIHtcbiAgICByZXR1cm4gdGhpcy5maWxlQ29udGV4dHM7XG4gIH1cblxuICBnZXRMYWJlbHMoaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCBsYWJlbHMgPSBbXTtcblxuICAgIHRoaXMuZmlsZUNvbnRleHRzLmZvckVhY2goKGZpbGVDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBpbmNsdWRlUmVsZWFzZSA9IGZhbHNlLFxuICAgICAgICAgICAgZmlsZUNvbnRleHRMYWJlbHMgPSBmaWxlQ29udGV4dC5nZXRMYWJlbHMoaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgICBwdXNoKGxhYmVscywgZmlsZUNvbnRleHRMYWJlbHMpO1xuICAgIH0pO1xuXG4gICAgaWYgKGluY2x1ZGVEZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMgPSB0aGlzLmdldERlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoKTtcblxuICAgICAgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cy5mb3JFYWNoKChyZWxlYXNlQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gZmFsc2UsXG4gICAgICAgICAgICAgIHJlbGVhc2VDb250ZXh0TGFiZWxzID0gcmVsZWFzZUNvbnRleHQuZ2V0TGFiZWxzKGluY2x1ZGVEZXBlbmRlbmNpZXMpO1xuXG4gICAgICAgIHB1c2gobGFiZWxzLCByZWxlYXNlQ29udGV4dExhYmVscyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFiZWxzO1xuICB9XG5cbiAgZ2V0VHlwZXMoaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlcyA9IFtdO1xuXG4gICAgdGhpcy5maWxlQ29udGV4dHMuZm9yRWFjaCgoZmlsZUNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGluY2x1ZGVSZWxlYXNlID0gZmFsc2UsXG4gICAgICAgICAgICBmaWxlQ29udGV4dFR5cGVzID0gZmlsZUNvbnRleHQuZ2V0VHlwZXMoaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgICBwdXNoKHR5cGVzLCBmaWxlQ29udGV4dFR5cGVzKTtcbiAgICB9KTtcblxuICAgIGlmIChpbmNsdWRlRGVwZW5kZW5jaWVzKSB7XG4gICAgICBjb25zdCBkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzID0gdGhpcy5nZXREZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKCk7XG5cbiAgICAgIGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMuZm9yRWFjaCgocmVsZWFzZUNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgaW5jbHVkZURlcGVuZGVuY2llcyA9IGZhbHNlLFxuICAgICAgICAgICAgICByZWxlYXNlQ29udGV4dFR5cGVzID0gcmVsZWFzZUNvbnRleHQuZ2V0VHlwZXMoaW5jbHVkZURlcGVuZGVuY2llcyk7XG5cbiAgICAgICAgcHVzaCh0eXBlcywgcmVsZWFzZUNvbnRleHRUeXBlcyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cblxuICBnZXRSdWxlcyhpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHJ1bGVzID0gW107XG5cbiAgICB0aGlzLmZpbGVDb250ZXh0cy5mb3JFYWNoKChmaWxlQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZVJlbGVhc2UgPSBmYWxzZSxcbiAgICAgICAgICAgIGZpbGVDb250ZXh0UnVsZXMgPSBmaWxlQ29udGV4dC5nZXRSdWxlcyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICAgIHB1c2gocnVsZXMsIGZpbGVDb250ZXh0UnVsZXMpO1xuICAgIH0pO1xuXG4gICAgaWYgKGluY2x1ZGVEZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMgPSB0aGlzLmdldERlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoKTtcblxuICAgICAgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cy5mb3JFYWNoKChyZWxlYXNlQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gZmFsc2UsXG4gICAgICAgICAgICAgIHJlbGVhc2VDb250ZXh0UnVsZXMgPSByZWxlYXNlQ29udGV4dC5nZXRSdWxlcyhpbmNsdWRlRGVwZW5kZW5jaWVzKTtcblxuICAgICAgICBwdXNoKHJ1bGVzLCByZWxlYXNlQ29udGV4dFJ1bGVzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIGdldEF4aW9tcyhpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IGF4aW9tcyA9IFtdO1xuXG4gICAgdGhpcy5maWxlQ29udGV4dHMuZm9yRWFjaCgoZmlsZUNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGluY2x1ZGVSZWxlYXNlID0gZmFsc2UsXG4gICAgICAgICAgICBmaWxlQ29udGV4dEF4aW9tcyA9IGZpbGVDb250ZXh0LmdldEF4aW9tcyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICAgIHB1c2goYXhpb21zLCBmaWxlQ29udGV4dEF4aW9tcyk7XG4gICAgfSk7XG5cbiAgICBpZiAoaW5jbHVkZURlcGVuZGVuY2llcykge1xuICAgICAgY29uc3QgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyA9IHRoaXMuZ2V0RGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cygpO1xuXG4gICAgICBkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzLmZvckVhY2goKHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGluY2x1ZGVEZXBlbmRlbmNpZXMgPSBmYWxzZSxcbiAgICAgICAgICAgICAgcmVsZWFzZUNvbnRleHRBeGlvbXMgPSByZWxlYXNlQ29udGV4dC5nZXRBeGlvbXMoaW5jbHVkZURlcGVuZGVuY2llcyk7XG5cbiAgICAgICAgcHVzaChheGlvbXMsIHJlbGVhc2VDb250ZXh0QXhpb21zKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBheGlvbXM7XG4gIH1cblxuICBnZXRMZW1tYXMoKSB7XG4gICAgY29uc3QgbGVtbWFzID0gW107XG5cbiAgICB0aGlzLmZpbGVDb250ZXh0cy5mb3JFYWNoKChmaWxlQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZVJlbGVhc2UgPSBmYWxzZSxcbiAgICAgICAgICAgIGZpbGVDb250ZXh0TGVtbWFzID0gZmlsZUNvbnRleHQuZ2V0TGVtbWFzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgICAgcHVzaChsZW1tYXMsIGZpbGVDb250ZXh0TGVtbWFzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBsZW1tYXM7XG4gIH1cblxuICBnZXRUaGVvcmVtcyhpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHRoZW9yZW1zID0gW107XG5cbiAgICB0aGlzLmZpbGVDb250ZXh0cy5mb3JFYWNoKChmaWxlQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZVJlbGVhc2UgPSBmYWxzZSxcbiAgICAgICAgICAgIGZpbGVDb250ZXh0VGhlb3JlbXMgPSBmaWxlQ29udGV4dC5nZXRUaGVvcmVtcyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICAgIHB1c2godGhlb3JlbXMsIGZpbGVDb250ZXh0VGhlb3JlbXMpO1xuICAgIH0pO1xuXG4gICAgaWYgKGluY2x1ZGVEZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMgPSB0aGlzLmdldERlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoKTtcblxuICAgICAgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cy5mb3JFYWNoKChyZWxlYXNlQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gZmFsc2UsXG4gICAgICAgICAgICAgIHJlbGVhc2VDb250ZXh0VGhlb3JlbXMgPSByZWxlYXNlQ29udGV4dC5nZXRUaGVvcmVtcyhpbmNsdWRlRGVwZW5kZW5jaWVzKTtcblxuICAgICAgICBwdXNoKHRoZW9yZW1zLCByZWxlYXNlQ29udGV4dFRoZW9yZW1zKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGVvcmVtcztcbiAgfVxuXG4gIGdldENvbmplY3R1cmVzKGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgY29uamVjdHVyZXMgPSBbXTtcblxuICAgIHRoaXMuZmlsZUNvbnRleHRzLmZvckVhY2goKGZpbGVDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBpbmNsdWRlUmVsZWFzZSA9IGZhbHNlLFxuICAgICAgICAgICAgZmlsZUNvbnRleHRDb25qZWN0dXJlcyA9IGZpbGVDb250ZXh0LmdldENvbmplY3R1cmVzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgICAgcHVzaChjb25qZWN0dXJlcywgZmlsZUNvbnRleHRDb25qZWN0dXJlcyk7XG4gICAgfSk7XG5cbiAgICBpZiAoaW5jbHVkZURlcGVuZGVuY2llcykge1xuICAgICAgY29uc3QgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyA9IHRoaXMuZ2V0RGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cygpO1xuXG4gICAgICBkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzLmZvckVhY2goKHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGluY2x1ZGVEZXBlbmRlbmNpZXMgPSBmYWxzZSxcbiAgICAgICAgICAgICAgcmVsZWFzZUNvbnRleHRDb25qZWN0dXJlcyA9IHJlbGVhc2VDb250ZXh0LmdldENvbmplY3R1cmVzKGluY2x1ZGVEZXBlbmRlbmNpZXMpO1xuXG4gICAgICAgIHB1c2goY29uamVjdHVyZXMsIHJlbGVhc2VDb250ZXh0Q29uamVjdHVyZXMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmplY3R1cmVzO1xuICB9XG5cbiAgZ2V0Q29tYmluYXRvcnMoaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCBjb21iaW5hdG9ycyA9IFtdO1xuXG4gICAgdGhpcy5maWxlQ29udGV4dHMuZm9yRWFjaCgoZmlsZUNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGluY2x1ZGVSZWxlYXNlID0gZmFsc2UsXG4gICAgICAgICAgICBmaWxlQ29udGV4dENvbWJpbmF0b3JzID0gZmlsZUNvbnRleHQuZ2V0Q29tYmluYXRvcnMoaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgICBwdXNoKGNvbWJpbmF0b3JzLCBmaWxlQ29udGV4dENvbWJpbmF0b3JzKTtcbiAgICB9KTtcblxuICAgIGlmIChpbmNsdWRlRGVwZW5kZW5jaWVzKSB7XG4gICAgICBjb25zdCBkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzID0gdGhpcy5nZXREZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKCk7XG5cbiAgICAgIGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMuZm9yRWFjaCgocmVsZWFzZUNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgaW5jbHVkZURlcGVuZGVuY2llcyA9IGZhbHNlLFxuICAgICAgICAgICAgICByZWxlYXNlQ29udGV4dENvbWJpbmF0b3JzID0gcmVsZWFzZUNvbnRleHQuZ2V0Q29tYmluYXRvcnMoaW5jbHVkZURlcGVuZGVuY2llcyk7XG5cbiAgICAgICAgcHVzaChjb21iaW5hdG9ycywgcmVsZWFzZUNvbnRleHRDb21iaW5hdG9ycyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tYmluYXRvcnM7XG4gIH1cblxuICBnZXRDb25zdHJ1Y3RvcnMoaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBbXTtcblxuICAgIHRoaXMuZmlsZUNvbnRleHRzLmZvckVhY2goKGZpbGVDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBpbmNsdWRlUmVsZWFzZSA9IGZhbHNlLFxuICAgICAgICAgICAgZmlsZUNvbnRleHRDb25zdHJ1Y3RvcnMgPSBmaWxlQ29udGV4dC5nZXRDb25zdHJ1Y3RvcnMoaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgICBwdXNoKGNvbnN0cnVjdG9ycywgZmlsZUNvbnRleHRDb25zdHJ1Y3RvcnMpO1xuICAgIH0pO1xuXG4gICAgaWYgKGluY2x1ZGVEZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMgPSB0aGlzLmdldERlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoKTtcblxuICAgICAgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cy5mb3JFYWNoKChyZWxlYXNlQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gZmFsc2UsXG4gICAgICAgICAgICAgIHJlbGVhc2VDb250ZXh0Q29uc3RydWN0b3JzID0gcmVsZWFzZUNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKGluY2x1ZGVEZXBlbmRlbmNpZXMpO1xuXG4gICAgICAgIHB1c2goY29uc3RydWN0b3JzLCByZWxlYXNlQ29udGV4dENvbnN0cnVjdG9ycyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3JzO1xuICB9XG5cbiAgYWRkRmlsZUNvbnRleHQoZmlsZUNvbnRleHQpIHtcbiAgICB0aGlzLmZpbGVDb250ZXh0cy5wdXNoKGZpbGVDb250ZXh0KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBqc29uID0gW107XG5cbiAgICB0aGlzLmZpbGVDb250ZXh0cy5mb3JFYWNoKChmaWxlQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgZmlsZUNvbnRleHRKU09OID0gZmlsZUNvbnRleHQudG9KU09OKCk7XG5cbiAgICAgIHB1c2goanNvbiwgZmlsZUNvbnRleHRKU09OKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21Mb2dOYW1lQW5kRW50cmllcyhsb2csIG5hbWUsIGVudHJpZXMpIHtcbiAgICBjb25zdCBsZXhlciA9IG51bGwsXG4gICAgICAgICAgcGFyc2VyID0gbnVsbCxcbiAgICAgICAgICB2ZXJpZmllZCA9IGZhbHNlLFxuICAgICAgICAgIGN1c3RvbUdyYW1tYXIgPSBjdXN0b21HcmFtbWFyRnJvbU5hbWVBbmRFbnRyaWVzKG5hbWUsIGVudHJpZXMpLFxuICAgICAgICAgIGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMgPSBudWxsLFxuICAgICAgICAgIGZpbGVDb250ZXh0cyA9IFtdLFxuICAgICAgICAgIGRpcmVjdG9yeVJlbGVhc2VDb250ZXh0ID0gbmV3IERpcmVjdG9yeVJlbGVhc2VDb250ZXh0KGxvZywgbmFtZSwgZW50cmllcywgbGV4ZXIsIHBhcnNlciwgdmVyaWZpZWQsIGN1c3RvbUdyYW1tYXIsIGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMsIGZpbGVDb250ZXh0cyk7XG5cbiAgICByZXR1cm4gZGlyZWN0b3J5UmVsZWFzZUNvbnRleHQ7XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiRGlyZWN0b3J5UmVsZWFzZUNvbnRleHQiLCJsb2ciLCJuYW1lIiwiZW50cmllcyIsImxleGVyIiwicGFyc2VyIiwidmVyaWZpZWQiLCJjdXN0b21HcmFtbWFyIiwiZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyIsImZpbGVDb250ZXh0cyIsImdldEZpbGVDb250ZXh0cyIsImdldExhYmVscyIsImluY2x1ZGVEZXBlbmRlbmNpZXMiLCJsYWJlbHMiLCJmb3JFYWNoIiwiZmlsZUNvbnRleHQiLCJpbmNsdWRlUmVsZWFzZSIsImZpbGVDb250ZXh0TGFiZWxzIiwicHVzaCIsImdldERlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMiLCJyZWxlYXNlQ29udGV4dCIsInJlbGVhc2VDb250ZXh0TGFiZWxzIiwiZ2V0VHlwZXMiLCJ0eXBlcyIsImZpbGVDb250ZXh0VHlwZXMiLCJyZWxlYXNlQ29udGV4dFR5cGVzIiwiZ2V0UnVsZXMiLCJydWxlcyIsImZpbGVDb250ZXh0UnVsZXMiLCJyZWxlYXNlQ29udGV4dFJ1bGVzIiwiZ2V0QXhpb21zIiwiYXhpb21zIiwiZmlsZUNvbnRleHRBeGlvbXMiLCJyZWxlYXNlQ29udGV4dEF4aW9tcyIsImdldExlbW1hcyIsImxlbW1hcyIsImZpbGVDb250ZXh0TGVtbWFzIiwiZ2V0VGhlb3JlbXMiLCJ0aGVvcmVtcyIsImZpbGVDb250ZXh0VGhlb3JlbXMiLCJyZWxlYXNlQ29udGV4dFRoZW9yZW1zIiwiZ2V0Q29uamVjdHVyZXMiLCJjb25qZWN0dXJlcyIsImZpbGVDb250ZXh0Q29uamVjdHVyZXMiLCJyZWxlYXNlQ29udGV4dENvbmplY3R1cmVzIiwiZ2V0Q29tYmluYXRvcnMiLCJjb21iaW5hdG9ycyIsImZpbGVDb250ZXh0Q29tYmluYXRvcnMiLCJyZWxlYXNlQ29udGV4dENvbWJpbmF0b3JzIiwiZ2V0Q29uc3RydWN0b3JzIiwiY29uc3RydWN0b3JzIiwiZmlsZUNvbnRleHRDb25zdHJ1Y3RvcnMiLCJyZWxlYXNlQ29udGV4dENvbnN0cnVjdG9ycyIsImFkZEZpbGVDb250ZXh0IiwidG9KU09OIiwianNvbiIsImZpbGVDb250ZXh0SlNPTiIsImZyb21Mb2dOYW1lQW5kRW50cmllcyIsImN1c3RvbUdyYW1tYXJGcm9tTmFtZUFuZEVudHJpZXMiLCJkaXJlY3RvcnlSZWxlYXNlQ29udGV4dCIsIlJlbGVhc2VDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQU9xQkE7Ozs0REFMTTtxQkFFTjs2QkFDMkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFakMsSUFBQSxBQUFNQSx3Q0FBTjtjQUFNQTs4QkFBQUE7YUFBQUEsd0JBQ1BDLEdBQUcsRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLGFBQWEsRUFBRUMseUJBQXlCLEVBQUVDLFlBQVk7OEJBRDVGVDs7a0NBRVhDLEtBQUtDLE1BQU1DLFNBQVNDLE9BQU9DLFFBQVFDLFVBQVVDLGVBQWVDO1FBRWxFLE1BQUtDLFlBQVksR0FBR0E7OztpQkFKSFQ7O1lBT25CVSxLQUFBQTttQkFBQUEsU0FBQUEsa0JBQWtCO2dCQUNoQixPQUFPLElBQUksQ0FBQ0QsWUFBWTtZQUMxQjs7O1lBRUFFLEtBQUFBO21CQUFBQSxTQUFBQSxZQUFzQztvQkFBNUJDLHNCQUFBQSxpRUFBc0IsSUFBSTtnQkFDbEMsSUFBTUMs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
|