occam-verify-cli 1.0.889 → 1.0.892
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/element/declaration/complexType.js +92 -133
- package/lib/element/declaration/property.js +79 -0
- package/lib/element/declaration/simpleType.js +7 -8
- package/lib/element/declaration/typePrefix.js +2 -27
- package/lib/element/metavariable.js +4 -4
- package/lib/element/property.js +72 -1
- package/lib/element/statement.js +2 -2
- package/lib/element/substitution/statement.js +2 -2
- package/lib/element/typePrefix.js +26 -1
- package/lib/preamble.js +2 -1
- package/lib/utilities/element.js +37 -8
- package/lib/utilities/string.js +20 -2
- package/package.json +1 -1
- package/src/element/declaration/complexType.js +109 -166
- package/src/element/declaration/property.js +96 -0
- package/src/element/declaration/simpleType.js +7 -13
- package/src/element/declaration/typePrefix.js +1 -38
- package/src/element/metavariable.js +3 -3
- package/src/element/property.js +103 -0
- package/src/element/statement.js +1 -1
- package/src/element/substitution/statement.js +1 -1
- package/src/element/typePrefix.js +36 -0
- package/src/preamble.js +1 -0
- package/src/utilities/element.js +56 -16
- package/src/utilities/string.js +37 -12
package/lib/utilities/string.js
CHANGED
|
@@ -12,6 +12,9 @@ _export(exports, {
|
|
|
12
12
|
get assumptionStringFromReferenceAndStatement () {
|
|
13
13
|
return assumptionStringFromReferenceAndStatement;
|
|
14
14
|
},
|
|
15
|
+
get complexTypeDeclarationStringFromTypeSuperTypesAndProvisional () {
|
|
16
|
+
return complexTypeDeclarationStringFromTypeSuperTypesAndProvisional;
|
|
17
|
+
},
|
|
15
18
|
get equivalenceStringFromTerms () {
|
|
16
19
|
return equivalenceStringFromTerms;
|
|
17
20
|
},
|
|
@@ -36,6 +39,9 @@ _export(exports, {
|
|
|
36
39
|
get procedureCallStringFromProcedureReferenceAndParameters () {
|
|
37
40
|
return procedureCallStringFromProcedureReferenceAndParameters;
|
|
38
41
|
},
|
|
42
|
+
get provisinalStringFromProvisional () {
|
|
43
|
+
return provisinalStringFromProvisional;
|
|
44
|
+
},
|
|
39
45
|
get referenceSubstitutionStringFromReferenceAndMetavariable () {
|
|
40
46
|
return referenceSubstitutionStringFromReferenceAndMetavariable;
|
|
41
47
|
},
|
|
@@ -80,6 +86,7 @@ _export(exports, {
|
|
|
80
86
|
}
|
|
81
87
|
});
|
|
82
88
|
const _type = require("../utilities/type");
|
|
89
|
+
const _constants = require("../constants");
|
|
83
90
|
function termsStringFromTerms(terms) {
|
|
84
91
|
const termsString = terms.reduce((termsString, term)=>{
|
|
85
92
|
const termString = term.getString();
|
|
@@ -113,13 +120,16 @@ function hypothesesStringFromHypotheses(hypotheses) {
|
|
|
113
120
|
return hypothesesString;
|
|
114
121
|
}
|
|
115
122
|
function superTypesStringFromSuperTypes(superTypes) {
|
|
116
|
-
|
|
123
|
+
let superTypesString;
|
|
124
|
+
const baseType = (0, _type.baseTypeFromNothing)();
|
|
125
|
+
superTypesString = superTypes.reduce((superTypesString, superType)=>{
|
|
117
126
|
if (superType !== baseType) {
|
|
118
127
|
const superTypeString = superType.getString();
|
|
119
128
|
superTypesString = superTypesString === null ? `'${superTypeString}'` : `${superTypesString}, '${superTypeString}'`;
|
|
120
129
|
}
|
|
121
130
|
return superTypesString;
|
|
122
131
|
}, null);
|
|
132
|
+
superTypesString = superTypesString !== null ? `:${superTypesString}` : _constants.EMPTY_STRING;
|
|
123
133
|
return superTypesString;
|
|
124
134
|
}
|
|
125
135
|
function parametersStringFromParameters(parameters) {
|
|
@@ -130,6 +140,10 @@ function parametersStringFromParameters(parameters) {
|
|
|
130
140
|
}, null);
|
|
131
141
|
return parametersString;
|
|
132
142
|
}
|
|
143
|
+
function provisinalStringFromProvisional(provisional) {
|
|
144
|
+
const provisionString = provisional ? _constants.PROVISIONALLY : _constants.EMPTY_STRING;
|
|
145
|
+
return provisionString;
|
|
146
|
+
}
|
|
133
147
|
function suppositionsStringFromSuppositions(suppositions) {
|
|
134
148
|
const suppositionsString = suppositions.reduce((suppositionsString, supposition)=>{
|
|
135
149
|
const suppositionString = supposition.getString();
|
|
@@ -200,6 +214,10 @@ function topLevelAssertionStringFromLabelsSuppositionsAndDeduction(labels, suppo
|
|
|
200
214
|
}
|
|
201
215
|
return topLevelAssertionString;
|
|
202
216
|
}
|
|
217
|
+
function complexTypeDeclarationStringFromTypeSuperTypesAndProvisional(type, superTypes, provisional) {
|
|
218
|
+
const typeString = type.getString(), superTypesString = superTypesStringFromSuperTypes(superTypes), provisionalString = provisinalStringFromProvisional(provisional), complexTypeDeclarationString = `${provisionalString}${typeString}${superTypesString}`;
|
|
219
|
+
return complexTypeDeclarationString;
|
|
220
|
+
}
|
|
203
221
|
function topLevelMetaAssertionStringFromLabelSuppositionsAndDeduction(label, suppositions, deduction) {
|
|
204
222
|
const labelString = label.getString(), deductionString = deduction.getString(), suppositionsString = suppositionsStringFromSuppositions(suppositions), topLevelMetaAssertionString = suppositionsString !== null ? `${labelString} :: [${suppositionsString}]...${deductionString}` : `${labelString} :: ${deductionString}`;
|
|
205
223
|
return topLevelMetaAssertionString;
|
|
@@ -209,4 +227,4 @@ function statementSubstitutionStringFromStatementMetavariableAndSubstitution(sta
|
|
|
209
227
|
return statementSubstitutionString;
|
|
210
228
|
}
|
|
211
229
|
|
|
212
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcykge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zLnJlZHVjZSgodGVybXNTdHJpbmcsIHRlcm0pID0+IHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIHRlcm1zU3RyaW5nID0gKHRlcm1zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgYCR7dGVybXNTdHJpbmd9LCAke3Rlcm1TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgdGVybVN0cmluZztcblxuICAgIHJldHVybiB0ZXJtc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHRlcm1zU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzU3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpIHtcbiAgY29uc3QgbGFiZWxzU3RyaW5nID0gbGFiZWxzLnJlZHVjZSgobGFiZWxzU3RyaW5nLCBsYWJlbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCk7XG5cbiAgICBsYWJlbHNTdHJpbmcgPSAobGFiZWxzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICBsYWJlbFN0cmluZzogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSwgJHtsYWJlbFN0cmluZ31gO1xuXG4gICAgcmV0dXJuIGxhYmVsc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGxhYmVsc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzKHByZW1pc2VzKSB7XG4gIGNvbnN0IHByZW1pc2VzU3RyaW5nID0gcHJlbWlzZXMucmVkdWNlKChwcmVtaXNlc1N0cmluZywgcHJlbWlzZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSBwcmVtaXNlLmdldFN0cmluZygpO1xuXG4gICAgcHJlbWlzZXNTdHJpbmcgPSAocHJlbWlzZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJlbWlzZXNTdHJpbmd9LCAke3ByZW1pc2VTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgcHJlbWlzZVN0cmluZzsgIC8vL1xuXG4gICAgcmV0dXJuIHByZW1pc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gcHJlbWlzZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzU3RyaW5nRnJvbUh5cG90aGVzZXMoaHlwb3RoZXNlcykge1xuICBjb25zdCBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlcy5yZWR1Y2UoKGh5cG90aGVzZXNTdHJpbmcsIGh5cG90aGVzaXMpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gaHlwb3RoZXNpcy5nZXRTdHJpbmcoKTtcblxuICAgIGh5cG90aGVzZXNTdHJpbmcgPSAoaHlwb3RoZXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtoeXBvdGhlc2VzU3RyaW5nfSwgJHtoeXBvdGhlc2lzU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmc7ICAvLy9cblxuICAgIHJldHVybiBoeXBvdGhlc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gaHlwb3RoZXNlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyhzdXBlclR5cGVzKSB7XG4gIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpLFxuICAgICAgICBzdXBlclR5cGVzU3RyaW5nID0gc3VwZXJUeXBlcy5yZWR1Y2UoKHN1cGVyVHlwZXNTdHJpbmcsIHN1cGVyVHlwZSkgPT4ge1xuICAgICAgICAgIGlmIChzdXBlclR5cGUgIT09IGJhc2VUeXBlKSB7XG4gICAgICAgICAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgICAgIHN1cGVyVHlwZXNTdHJpbmcgPSAoc3VwZXJUeXBlc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCcke3N1cGVyVHlwZVN0cmluZ30nYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cGVyVHlwZXNTdHJpbmd9LCAnJHtzdXBlclR5cGVTdHJpbmd9J2A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN1cGVyVHlwZXNTdHJpbmc7XG4gICAgICAgIH0sIG51bGwpO1xuXG4gIHJldHVybiBzdXBlclR5cGVzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgcGFyYW1ldGVyc1N0cmluZyA9IHBhcmFtZXRlcnMucmVkdWNlKChwYXJhbWV0ZXJzU3RyaW5nLCBwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJTdHJpbmcgPSBwYXJhbWV0ZXIuZ2V0U3RyaW5nKCk7XG5cbiAgICBwYXJhbWV0ZXJzU3RyaW5nID0gKHBhcmFtZXRlcnNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJTdHJpbmcgOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cGFyYW1ldGVyc1N0cmluZ30sICR7cGFyYW1ldGVyU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucykge1xuICBjb25zdCBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnMucmVkdWNlKChzdXBwb3NpdGlvbnNTdHJpbmcsIHN1cHBvc2l0aW9uKSA9PiB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIHN1cHBvc2l0aW9uc1N0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3NpdGlvblN0cmluZzogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cHBvc2l0aW9uc1N0cmluZ30sICR7c3VwcG9zaXRpb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbnNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBzdXBwb3NpdGlvbnNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduYXR1cmVTdHJpbmdGcm9tVGVybXModGVybXMpIHtcbiAgY29uc3QgdGVybXNTdHJpbmcgPSB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIHNpZ25hdHVyZVN0cmluZyA9IGBbJHt0ZXJtc1N0cmluZ31dYDtcblxuICByZXR1cm4gc2lnbmF0dXJlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXModGVybXMpIHtcbiAgY29uc3QgdGVybXNTdHJpbmcgPSB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcyksXG4gICAgICAgIGVxdWl2YWxlbmNlU3RyaW5nID0gYFske3Rlcm1zU3RyaW5nfV1gO1xuXG4gIHJldHVybiBlcXVpdmFsZW5jZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSkge1xuICBjb25zdCB0eXBlU3RyaW5nID0gbm9taW5hbFR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIHR5cGVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVRlcm1BbmRWYXJpYWJsZSh0ZXJtLCB2YXJpYWJsZSkge1xuICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdGVybVN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHt0ZXJtU3RyaW5nfSBmb3IgJHt2YXJpYWJsZVN0cmluZ31dYDtcblxuICByZXR1cm4gdGVybVN1YnN0aXR1dGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc3VtcHRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kU3RhdGVtZW50KHJlZmVyZW5jZSwgc3RhdGVtZW50KSB7XG4gIGNvbnN0IHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICBhc3N1bXB0aW9uU3RyaW5nID0gYCR7cmVmZXJlbmNlU3RyaW5nfSA6OiAke3N0YXRlbWVudFN0cmluZ31gO1xuXG4gIHJldHVybiBhc3N1bXB0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24obGFiZWxzLCBwcmVtaXNlcywgY29uY2x1c2lvbikge1xuICBjb25zdCBjb25jbHVzaW9uU3RyaW5nID0gY29uY2x1c2lvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgcHJlbWlzZXNTdHJpbmcgPSBwcmVtaXNlc1N0cmluZ0Zyb21QcmVtaXNlcyhwcmVtaXNlcyksXG4gICAgICAgIGxhYmVsc1N0cmluZyA9IGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKSxcbiAgICAgICAgcnVsZVN0cmluZyA9IChwcmVtaXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbHNTdHJpbmd9IDo6IFske3ByZW1pc2VzU3RyaW5nfV0uLi4ke2NvbmNsdXNpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSA6OiAke2NvbmNsdXNpb25TdHJpbmd9YDtcblxuICByZXR1cm4gcnVsZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3Rpb25TdHJpbmdGcm9tSHlwb3RoZXNlc1RvcExldmVsQXNzZXJ0aW9uKGh5cG90aGVzZXMsIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSwgY29uamVjdHVyZSkge1xuICBjb25zdCB0b3BMZXZlbEFzc2VydGlvbiA9IChheGlvbSB8fCBsZW1tYSB8fCB0aGVvcmVtIHx8IGNvbmplY3R1cmUpLFxuICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHRvcExldmVsQXNzZXJ0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlc1N0cmluZ0Zyb21IeXBvdGhlc2VzKGh5cG90aGVzZXMpLFxuICAgICAgICBzZWN0aW9uU3RyaW5nID0gKHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBbJHtoeXBvdGhlc2VzU3RyaW5nfV06OjogJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWyR7aHlwb3RoZXNlc1N0cmluZ31dOjo6IGA7XG5cbiAgcmV0dXJuIHNlY3Rpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJwcm9vZlN0cmluZ0Zyb21TdXBwb3NpdGlvbnNBbmRTdWJEZXJpdmF0aW9uKHN1cHBvc2l0aW9ucywgc3ViRGVyaXZhdGlvbikge1xuICBjb25zdCBsYXN0U3RlcCA9IHN1YkRlcml2YXRpb24uZ2V0TGFzdFN0ZXAoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpLFxuICAgICAgICBsYXN0U3RlcFN0cmluZyA9IGxhc3RTdGVwLmdldFN0cmluZygpLFxuICAgICAgICBzdWJwcm9vZlN0cmluZyA9IGBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7bGFzdFN0ZXBTdHJpbmd9YDtcblxuICByZXR1cm4gc3VicHJvb2ZTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcmFtZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZShmcmFtZSwgbWV0YXZhcmlhYmxlKSB7XG4gIGNvbnN0IGZyYW1lU3RyaW5nID0gZnJhbWUuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3RyaW5nID0gYFske2ZyYW1lU3RyaW5nfSBmb3IgWyR7bWV0YXZhcmlhYmxlU3RyaW5nfV1dYDtcblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YUxldmVsQXNzdW1wdGlvblN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQocmVmZXJlbmNlLCBzdGF0ZW1lbnQpIHtcbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICByZWZlcm5lY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmcgPSBgJHtyZWZlcm5lY2VTdHJpbmd9IDo6ICR7c3RhdGVtZW50U3RyaW5nfWA7XG5cbiAgcmV0dXJuIG1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVByb2NlZHVyZVJlZmVyZW5jZUFuZFBhcmFtZXRlcnMocHJvY2VkdXJlUmVmZXJlbmNlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHByb2NlZHVyZVJlZmVyZW5jZU5hbWUgPSBwcm9jZWR1cmVSZWZlcmVuY2UuZ2V0TmFtZSgpLFxuICAgICAgICBwYXJhbWV0ZXJzU3RyaW5nID0gcGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpLFxuICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nID0gYEAke3Byb2NlZHVyZVJlZmVyZW5jZU5hbWV9KCR7cGFyYW1ldGVyc1N0cmluZ30pYDtcblxuICByZXR1cm4gcHJvY2VkdXJlQ2FsbFN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBtZXRhdmFyaWFibGUpIHtcbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHtzdGF0ZW1lbnRTdHJpbmd9IGZvciAke21ldGF2YXJpYWJsZVN0cmluZ31dYDtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZE1ldGF2YXJpYWJsZShyZWZlcmVuY2UsIG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nID0gYFske3JlZmVyZW5jZVN0cmluZ30gZm9yICR7bWV0YXZhcmlhYmxlU3RyaW5nfV1gO1xuXG4gIHJldHVybiByZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3BMZXZlbEFzc2VydGlvblN0cmluZ0Zyb21MYWJlbHNTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbikge1xuICBsZXQgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmc7XG5cbiAgY29uc3Qgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpLFxuICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSBkZWR1Y3Rpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIGxhYmVsc1N0cmluZyA9IGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKTtcblxuICBpZiAobGFiZWxzU3RyaW5nICE9PSBudWxsKSB7XG4gICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSAoc3VwcG9zaXRpb25zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSA6OiBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7ZGVkdWN0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSA6OiAke2RlZHVjdGlvblN0cmluZ31gO1xuICB9IGVsc2Uge1xuICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gKHN1cHBvc2l0aW9uc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7ZGVkdWN0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZHVjdGlvblN0cmluZztcbiAgfVxuXG4gIHJldHVybiB0b3BMZXZlbEFzc2VydGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pIHtcbiAgY29uc3QgbGFiZWxTdHJpbmcgPSBsYWJlbC5nZXRTdHJpbmcoKSxcbiAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBzdXBwb3NpdGlvbnNTdHJpbmcgPSBzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucyksXG4gICAgICAgIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsU3RyaW5nfSA6OiBbJHtzdXBwb3NpdGlvbnNTdHJpbmd9XS4uLiR7ZGVkdWN0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbFN0cmluZ30gOjogJHtkZWR1Y3Rpb25TdHJpbmd9YDtcblxuICByZXR1cm4gdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudE1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbihzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9uKSB7XG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHtzdGF0ZW1lbnRTdHJpbmd9IGZvciAke21ldGF2YXJpYWJsZVN0cmluZ30ke3N1YnN0aXR1dGlvblN0cmluZ31dYDtcblxuICByZXR1cm4gc3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbImFzc3VtcHRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kU3RhdGVtZW50IiwiZXF1aXZhbGVuY2VTdHJpbmdGcm9tVGVybXMiLCJmcmFtZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZSIsImh5cG90aGVzZXNTdHJpbmdGcm9tSHlwb3RoZXNlcyIsImxhYmVsc1N0cmluZ0Zyb21MYWJlbHMiLCJtZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZFN0YXRlbWVudCIsInBhcmFtZXRlcnNTdHJpbmdGcm9tUGFyYW1ldGVycyIsInByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzIiwicHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZE1ldGF2YXJpYWJsZSIsInJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uIiwic2VjdGlvblN0cmluZ0Zyb21IeXBvdGhlc2VzVG9wTGV2ZWxBc3NlcnRpb24iLCJzaWduYXR1cmVTdHJpbmdGcm9tVGVybXMiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudE1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiIsInN1YnByb29mU3RyaW5nRnJvbVN1cHBvc2l0aW9uc0FuZFN1YkRlcml2YXRpb24iLCJzdXBlclR5cGVzU3RyaW5nRnJvbVN1cGVyVHlwZXMiLCJzdXBwb3NpdGlvbnNTdHJpbmdGcm9tU3VwcG9zaXRpb25zIiwidGVybVN1YnN0aXR1dGlvblN0cmluZ0Zyb21UZXJtQW5kVmFyaWFibGUiLCJ0ZXJtc1N0cmluZ0Zyb21UZXJtcyIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsc1N1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsInR5cGVTdHJpbmdGcm9tTm9taW5hbFR5cGVOYW1lIiwidGVybXMiLCJ0ZXJtc1N0cmluZyIsInJlZHVjZSIsInRlcm0iLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwibGFiZWxzIiwibGFiZWxzU3RyaW5nIiwibGFiZWwiLCJsYWJlbFN0cmluZyIsInByZW1pc2VzIiwicHJlbWlzZXNTdHJpbmciLCJwcmVtaXNlIiwicHJlbWlzZVN0cmluZyIsImh5cG90aGVzZXMiLCJoeXBvdGhlc2VzU3RyaW5nIiwiaHlwb3RoZXNpcyIsImh5cG90aGVzaXNTdHJpbmciLCJzdXBlclR5cGVzIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwic3VwZXJUeXBlc1N0cmluZyIsInN1cGVyVHlwZSIsInN1cGVyVHlwZVN0cmluZyIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzU3RyaW5nIiwicGFyYW1ldGVyIiwicGFyYW1ldGVyU3RyaW5nIiwic3VwcG9zaXRpb25zIiwic3VwcG9zaXRpb25zU3RyaW5nIiwic3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvblN0cmluZyIsInNpZ25hdHVyZVN0cmluZyIsImVxdWl2YWxlbmNlU3RyaW5nIiwibm9taW5hbFR5cGVOYW1lIiwidHlwZVN0cmluZyIsInZhcmlhYmxlIiwidmFyaWFibGVTdHJpbmciLCJ0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nIiwicmVmZXJlbmNlIiwic3RhdGVtZW50IiwicmVmZXJlbmNlU3RyaW5nIiwic3RhdGVtZW50U3RyaW5nIiwiYXNzdW1wdGlvblN0cmluZyIsImNvbmNsdXNpb24iLCJjb25jbHVzaW9uU3RyaW5nIiwicnVsZVN0cmluZyIsImF4aW9tIiwibGVtbWEiLCJ0aGVvcmVtIiwiY29uamVjdHVyZSIsInRvcExldmVsQXNzZXJ0aW9uIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmciLCJzZWN0aW9uU3RyaW5nIiwic3ViRGVyaXZhdGlvbiIsImxhc3RTdGVwIiwiZ2V0TGFzdFN0ZXAiLCJsYXN0U3RlcFN0cmluZyIsInN1YnByb29mU3RyaW5nIiwiZnJhbWUiLCJtZXRhdmFyaWFibGUiLCJmcmFtZVN0cmluZyIsIm1ldGF2YXJpYWJsZVN0cmluZyIsInN0cmluZyIsInJlZmVybmVjZVN0cmluZyIsIm1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmciLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJwcm9jZWR1cmVSZWZlcmVuY2VOYW1lIiwiZ2V0TmFtZSIsInByb2NlZHVyZUNhbGxTdHJpbmciLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmciLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmciLCJkZWR1Y3Rpb24iLCJkZWR1Y3Rpb25TdHJpbmciLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmciLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25TdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQXFJZ0JBO2VBQUFBOztRQXJCQUM7ZUFBQUE7O1FBNERBQztlQUFBQTs7UUE5SEFDO2VBQUFBOztRQTVCQUM7ZUFBQUE7O1FBa0tBQztlQUFBQTs7UUF2R0FDO2VBQUFBOztRQTdD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
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcsIFBST1ZJU0lPTkFMTFkgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtc1N0cmluZ0Zyb21UZXJtcyh0ZXJtcykge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zLnJlZHVjZSgodGVybXNTdHJpbmcsIHRlcm0pID0+IHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIHRlcm1zU3RyaW5nID0gKHRlcm1zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgYCR7dGVybXNTdHJpbmd9LCAke3Rlcm1TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgdGVybVN0cmluZztcblxuICAgIHJldHVybiB0ZXJtc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHRlcm1zU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzU3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpIHtcbiAgY29uc3QgbGFiZWxzU3RyaW5nID0gbGFiZWxzLnJlZHVjZSgobGFiZWxzU3RyaW5nLCBsYWJlbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCk7XG5cbiAgICBsYWJlbHNTdHJpbmcgPSAobGFiZWxzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICBsYWJlbFN0cmluZzogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSwgJHtsYWJlbFN0cmluZ31gO1xuXG4gICAgcmV0dXJuIGxhYmVsc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGxhYmVsc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZW1pc2VzU3RyaW5nRnJvbVByZW1pc2VzKHByZW1pc2VzKSB7XG4gIGNvbnN0IHByZW1pc2VzU3RyaW5nID0gcHJlbWlzZXMucmVkdWNlKChwcmVtaXNlc1N0cmluZywgcHJlbWlzZSkgPT4ge1xuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSBwcmVtaXNlLmdldFN0cmluZygpO1xuXG4gICAgcHJlbWlzZXNTdHJpbmcgPSAocHJlbWlzZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJlbWlzZXNTdHJpbmd9LCAke3ByZW1pc2VTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgcHJlbWlzZVN0cmluZzsgIC8vL1xuXG4gICAgcmV0dXJuIHByZW1pc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gcHJlbWlzZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBvdGhlc2VzU3RyaW5nRnJvbUh5cG90aGVzZXMoaHlwb3RoZXNlcykge1xuICBjb25zdCBoeXBvdGhlc2VzU3RyaW5nID0gaHlwb3RoZXNlcy5yZWR1Y2UoKGh5cG90aGVzZXNTdHJpbmcsIGh5cG90aGVzaXMpID0+IHtcbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gaHlwb3RoZXNpcy5nZXRTdHJpbmcoKTtcblxuICAgIGh5cG90aGVzZXNTdHJpbmcgPSAoaHlwb3RoZXNlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtoeXBvdGhlc2VzU3RyaW5nfSwgJHtoeXBvdGhlc2lzU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmc7ICAvLy9cblxuICAgIHJldHVybiBoeXBvdGhlc2VzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gaHlwb3RoZXNlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyhzdXBlclR5cGVzKSB7XG4gIGxldCBzdXBlclR5cGVzU3RyaW5nO1xuXG4gIGNvbnN0IGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpO1xuXG4gIHN1cGVyVHlwZXNTdHJpbmcgPSBzdXBlclR5cGVzLnJlZHVjZSgoc3VwZXJUeXBlc1N0cmluZywgc3VwZXJUeXBlKSA9PiB7XG4gICAgaWYgKHN1cGVyVHlwZSAhPT0gYmFzZVR5cGUpIHtcbiAgICAgIGNvbnN0IHN1cGVyVHlwZVN0cmluZyA9IHN1cGVyVHlwZS5nZXRTdHJpbmcoKTtcblxuICAgICAgc3VwZXJUeXBlc1N0cmluZyA9IChzdXBlclR5cGVzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBgJyR7c3VwZXJUeXBlU3RyaW5nfSdgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cGVyVHlwZXNTdHJpbmd9LCAnJHtzdXBlclR5cGVTdHJpbmd9J2A7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyVHlwZXNTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHN1cGVyVHlwZXNTdHJpbmcgPSAoc3VwZXJUeXBlc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICBgOiR7c3VwZXJUeXBlc1N0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HO1xuXG4gIHJldHVybiBzdXBlclR5cGVzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyYW1ldGVyc1N0cmluZ0Zyb21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpIHtcbiAgY29uc3QgcGFyYW1ldGVyc1N0cmluZyA9IHBhcmFtZXRlcnMucmVkdWNlKChwYXJhbWV0ZXJzU3RyaW5nLCBwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJTdHJpbmcgPSBwYXJhbWV0ZXIuZ2V0U3RyaW5nKCk7XG5cbiAgICBwYXJhbWV0ZXJzU3RyaW5nID0gKHBhcmFtZXRlcnNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJTdHJpbmcgOiAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7cGFyYW1ldGVyc1N0cmluZ30sICR7cGFyYW1ldGVyU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHBhcmFtZXRlcnNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpbmFsU3RyaW5nRnJvbVByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKSB7XG4gIGNvbnN0IHByb3Zpc2lvblN0cmluZyA9IHByb3Zpc2lvbmFsID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9WSVNJT05BTExZIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORztcblxuICByZXR1cm4gcHJvdmlzaW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpIHtcbiAgY29uc3Qgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zLnJlZHVjZSgoc3VwcG9zaXRpb25zU3RyaW5nLCBzdXBwb3NpdGlvbikgPT4ge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBzdXBwb3NpdGlvbnNTdHJpbmcgPSAoc3VwcG9zaXRpb25zU3RyaW5nID09PSBudWxsKSA/XG4gICAgICBzdXBwb3NpdGlvblN0cmluZzogLy8vXG4gICAgICBgJHtzdXBwb3NpdGlvbnNTdHJpbmd9LCAke3N1cHBvc2l0aW9uU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb25zU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSB7XG4gIGNvbnN0IHRlcm1zU3RyaW5nID0gdGVybXNTdHJpbmdGcm9tVGVybXModGVybXMpLFxuICAgICAgICBzaWduYXR1cmVTdHJpbmcgPSBgWyR7dGVybXNTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zKHRlcm1zKSB7XG4gIGNvbnN0IHRlcm1zU3RyaW5nID0gdGVybXNTdHJpbmdGcm9tVGVybXModGVybXMpLFxuICAgICAgICBlcXVpdmFsZW5jZVN0cmluZyA9IGBbJHt0ZXJtc1N0cmluZ31dYDtcblxuICByZXR1cm4gZXF1aXZhbGVuY2VTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlU3RyaW5nRnJvbU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpIHtcbiAgY29uc3QgdHlwZVN0cmluZyA9IG5vbWluYWxUeXBlTmFtZTsgIC8vL1xuXG4gIHJldHVybiB0eXBlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVybVN1YnN0aXR1dGlvblN0cmluZ0Zyb21UZXJtQW5kVmFyaWFibGUodGVybSwgdmFyaWFibGUpIHtcbiAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgIHZhcmlhYmxlU3RyaW5nID0gdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHRlcm1TdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7dGVybVN0cmluZ30gZm9yICR7dmFyaWFibGVTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHRlcm1TdWJzdGl0dXRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3N1bXB0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZFN0YXRlbWVudChyZWZlcmVuY2UsIHN0YXRlbWVudCkge1xuICBjb25zdCByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgYXNzdW1wdGlvblN0cmluZyA9IGAke3JlZmVyZW5jZVN0cmluZ30gOjogJHtzdGF0ZW1lbnRTdHJpbmd9YDtcblxuICByZXR1cm4gYXNzdW1wdGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bHNTdHJpbmdGcm9tTGFiZWxzUHJlbWlzZXNBbmRDb25jbHVzaW9uKGxhYmVscywgcHJlbWlzZXMsIGNvbmNsdXNpb24pIHtcbiAgY29uc3QgY29uY2x1c2lvblN0cmluZyA9IGNvbmNsdXNpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIHByZW1pc2VzU3RyaW5nID0gcHJlbWlzZXNTdHJpbmdGcm9tUHJlbWlzZXMocHJlbWlzZXMpLFxuICAgICAgICBsYWJlbHNTdHJpbmcgPSBsYWJlbHNTdHJpbmdGcm9tTGFiZWxzKGxhYmVscyksXG4gICAgICAgIHJ1bGVTdHJpbmcgPSAocHJlbWlzZXNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSA6OiBbJHtwcmVtaXNlc1N0cmluZ31dLi4uJHtjb25jbHVzaW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsc1N0cmluZ30gOjogJHtjb25jbHVzaW9uU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHJ1bGVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbihoeXBvdGhlc2VzLCBheGlvbSwgbGVtbWEsIHRoZW9yZW0sIGNvbmplY3R1cmUpIHtcbiAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb24gPSAoYXhpb20gfHwgbGVtbWEgfHwgdGhlb3JlbSB8fCBjb25qZWN0dXJlKSxcbiAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSB0b3BMZXZlbEFzc2VydGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgaHlwb3RoZXNlc1N0cmluZyA9IGh5cG90aGVzZXNTdHJpbmdGcm9tSHlwb3RoZXNlcyhoeXBvdGhlc2VzKSxcbiAgICAgICAgc2VjdGlvblN0cmluZyA9ICh0b3BMZXZlbEFzc2VydGlvblN0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgWyR7aHlwb3RoZXNlc1N0cmluZ31dOjo6ICR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYFske2h5cG90aGVzZXNTdHJpbmd9XTo6OiBgO1xuXG4gIHJldHVybiBzZWN0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbihzdXBwb3NpdGlvbnMsIHN1YkRlcml2YXRpb24pIHtcbiAgY29uc3QgbGFzdFN0ZXAgPSBzdWJEZXJpdmF0aW9uLmdldExhc3RTdGVwKCksXG4gICAgICAgIHN1cHBvc2l0aW9uc1N0cmluZyA9IHN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zKSxcbiAgICAgICAgbGFzdFN0ZXBTdHJpbmcgPSBsYXN0U3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3VicHJvb2ZTdHJpbmcgPSBgWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2xhc3RTdGVwU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHN1YnByb29mU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVTdWJzdGl0dXRpb25TdHJpbmdGcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUoZnJhbWUsIG1ldGF2YXJpYWJsZSkge1xuICBjb25zdCBmcmFtZVN0cmluZyA9IGZyYW1lLmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0cmluZyA9IGBbJHtmcmFtZVN0cmluZ30gZm9yIFske21ldGF2YXJpYWJsZVN0cmluZ31dXWA7XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGFMZXZlbEFzc3VtcHRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kU3RhdGVtZW50KHJlZmVyZW5jZSwgc3RhdGVtZW50KSB7XG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgcmVmZXJuZWNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpLFxuICAgICAgICBtZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nID0gYCR7cmVmZXJuZWNlU3RyaW5nfSA6OiAke3N0YXRlbWVudFN0cmluZ31gO1xuXG4gIHJldHVybiBtZXRhTGV2ZWxBc3N1bXB0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21Qcm9jZWR1cmVSZWZlcmVuY2VBbmRQYXJhbWV0ZXJzKHByb2NlZHVyZVJlZmVyZW5jZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBwcm9jZWR1cmVSZWZlcmVuY2VOYW1lID0gcHJvY2VkdXJlUmVmZXJlbmNlLmdldE5hbWUoKSxcbiAgICAgICAgcGFyYW1ldGVyc1N0cmluZyA9IHBhcmFtZXRlcnNTdHJpbmdGcm9tUGFyYW1ldGVycyhwYXJhbWV0ZXJzKSxcbiAgICAgICAgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IGBAJHtwcm9jZWR1cmVSZWZlcmVuY2VOYW1lfSgke3BhcmFtZXRlcnNTdHJpbmd9KWA7XG5cbiAgcmV0dXJuIHByb2NlZHVyZUNhbGxTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlKSB7XG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7c3RhdGVtZW50U3RyaW5nfSBmb3IgJHttZXRhdmFyaWFibGVTdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZ0Zyb21SZWZlcmVuY2VBbmRNZXRhdmFyaWFibGUocmVmZXJlbmNlLCBtZXRhdmFyaWFibGUpIHtcbiAgY29uc3QgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZyA9IGBbJHtyZWZlcmVuY2VTdHJpbmd9IGZvciAke21ldGF2YXJpYWJsZVN0cmluZ31dYDtcblxuICByZXR1cm4gcmVmZXJlbmNlU3Vic3RpdHV0aW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pIHtcbiAgbGV0IHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nO1xuXG4gIGNvbnN0IHN1cHBvc2l0aW9uc1N0cmluZyA9IHN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zKSxcbiAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBsYWJlbHNTdHJpbmcgPSBsYWJlbHNTdHJpbmdGcm9tTGFiZWxzKGxhYmVscyk7XG5cbiAgaWYgKGxhYmVsc1N0cmluZyAhPT0gbnVsbCkge1xuICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gKHN1cHBvc2l0aW9uc1N0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsc1N0cmluZ30gOjogWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2RlZHVjdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2xhYmVsc1N0cmluZ30gOjogJHtkZWR1Y3Rpb25TdHJpbmd9YDtcbiAgfSBlbHNlIHtcbiAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IChzdXBwb3NpdGlvbnNTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2RlZHVjdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmc7XG4gIH1cblxuICByZXR1cm4gdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nRnJvbVR5cGVTdXBlclR5cGVzQW5kUHJvdmlzaW9uYWwodHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpIHtcbiAgY29uc3QgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN1cGVyVHlwZXNTdHJpbmcgPSBzdXBlclR5cGVzU3RyaW5nRnJvbVN1cGVyVHlwZXMoc3VwZXJUeXBlcyksXG4gICAgICAgIHByb3Zpc2lvbmFsU3RyaW5nID0gcHJvdmlzaW5hbFN0cmluZ0Zyb21Qcm92aXNpb25hbChwcm92aXNpb25hbCksXG4gICAgICAgIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmcgPSBgJHtwcm92aXNpb25hbFN0cmluZ30ke3R5cGVTdHJpbmd9JHtzdXBlclR5cGVzU3RyaW5nfWA7XG5cbiAgcmV0dXJuIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSB7XG4gIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCksXG4gICAgICAgIGRlZHVjdGlvblN0cmluZyA9IGRlZHVjdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3VwcG9zaXRpb25zU3RyaW5nID0gc3VwcG9zaXRpb25zU3RyaW5nRnJvbVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMpLFxuICAgICAgICB0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmcgPSAoc3VwcG9zaXRpb25zU3RyaW5nICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtsYWJlbFN0cmluZ30gOjogWyR7c3VwcG9zaXRpb25zU3RyaW5nfV0uLi4ke2RlZHVjdGlvblN0cmluZ31gIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxTdHJpbmd9IDo6ICR7ZGVkdWN0aW9uU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHRvcExldmVsTWV0YUFzc2VydGlvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24oc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbikge1xuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZVN0cmluZyA9IG1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpLFxuICAgICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmcgPSBgWyR7c3RhdGVtZW50U3RyaW5nfSBmb3IgJHttZXRhdmFyaWFibGVTdHJpbmd9JHtzdWJzdGl0dXRpb25TdHJpbmd9XWA7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZztcbn1cbiJdLCJuYW1lcyI6WyJhc3N1bXB0aW9uU3RyaW5nRnJvbVJlZmVyZW5jZUFuZFN0YXRlbWVudCIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmdGcm9tVHlwZVN1cGVyVHlwZXNBbmRQcm92aXNpb25hbCIsImVxdWl2YWxlbmNlU3RyaW5nRnJvbVRlcm1zIiwiZnJhbWVTdWJzdGl0dXRpb25TdHJpbmdGcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUiLCJoeXBvdGhlc2VzU3RyaW5nRnJvbUh5cG90aGVzZXMiLCJsYWJlbHNTdHJpbmdGcm9tTGFiZWxzIiwibWV0YUxldmVsQXNzdW1wdGlvblN0cmluZ0Zyb21SZWZlcmVuY2VBbmRTdGF0ZW1lbnQiLCJwYXJhbWV0ZXJzU3RyaW5nRnJvbVBhcmFtZXRlcnMiLCJwcmVtaXNlc1N0cmluZ0Zyb21QcmVtaXNlcyIsInByb2NlZHVyZUNhbGxTdHJpbmdGcm9tUHJvY2VkdXJlUmVmZXJlbmNlQW5kUGFyYW1ldGVycyIsInByb3Zpc2luYWxTdHJpbmdGcm9tUHJvdmlzaW9uYWwiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25TdHJpbmdGcm9tUmVmZXJlbmNlQW5kTWV0YXZhcmlhYmxlIiwicnVsc1N0cmluZ0Zyb21MYWJlbHNQcmVtaXNlc0FuZENvbmNsdXNpb24iLCJzZWN0aW9uU3RyaW5nRnJvbUh5cG90aGVzZXNUb3BMZXZlbEFzc2VydGlvbiIsInNpZ25hdHVyZVN0cmluZ0Zyb21UZXJtcyIsInN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uIiwic3VicHJvb2ZTdHJpbmdGcm9tU3VwcG9zaXRpb25zQW5kU3ViRGVyaXZhdGlvbiIsInN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyIsInN1cHBvc2l0aW9uc1N0cmluZ0Zyb21TdXBwb3NpdGlvbnMiLCJ0ZXJtU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVRlcm1BbmRWYXJpYWJsZSIsInRlcm1zU3RyaW5nRnJvbVRlcm1zIiwidG9wTGV2ZWxBc3NlcnRpb25TdHJpbmdGcm9tTGFiZWxzU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwidG9wTGV2ZWxNZXRhQXNzZXJ0aW9uU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwidHlwZVN0cmluZ0Zyb21Ob21pbmFsVHlwZU5hbWUiLCJ0ZXJtcyIsInRlcm1zU3RyaW5nIiwicmVkdWNlIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJsYWJlbHMiLCJsYWJlbHNTdHJpbmciLCJsYWJlbCIsImxhYmVsU3RyaW5nIiwicHJlbWlzZXMiLCJwcmVtaXNlc1N0cmluZyIsInByZW1pc2UiLCJwcmVtaXNlU3RyaW5nIiwiaHlwb3RoZXNlcyIsImh5cG90aGVzZXNTdHJpbmciLCJoeXBvdGhlc2lzIiwiaHlwb3RoZXNpc1N0cmluZyIsInN1cGVyVHlwZXMiLCJzdXBlclR5cGVzU3RyaW5nIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwic3VwZXJUeXBlIiwic3VwZXJUeXBlU3RyaW5nIiwiRU1QVFlfU1RSSU5HIiwicGFyYW1ldGVycyIsInBhcmFtZXRlcnNTdHJpbmciLCJwYXJhbWV0ZXIiLCJwYXJhbWV0ZXJTdHJpbmciLCJwcm92aXNpb25hbCIsInByb3Zpc2lvblN0cmluZyIsIlBST1ZJU0lPTkFMTFkiLCJzdXBwb3NpdGlvbnMiLCJzdXBwb3NpdGlvbnNTdHJpbmciLCJzdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uU3RyaW5nIiwic2lnbmF0dXJlU3RyaW5nIiwiZXF1aXZhbGVuY2VTdHJpbmciLCJub21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwidmFyaWFibGUiLCJ2YXJpYWJsZVN0cmluZyIsInRlcm1TdWJzdGl0dXRpb25TdHJpbmciLCJyZWZlcmVuY2UiLCJzdGF0ZW1lbnQiLCJyZWZlcmVuY2VTdHJpbmciLCJzdGF0ZW1lbnRTdHJpbmciLCJhc3N1bXB0aW9uU3RyaW5nIiwiY29uY2x1c2lvbiIsImNvbmNsdXNpb25TdHJpbmciLCJydWxlU3RyaW5nIiwiYXhpb20iLCJsZW1tYSIsInRoZW9yZW0iLCJjb25qZWN0dXJlIiwidG9wTGV2ZWxBc3NlcnRpb24iLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZyIsInNlY3Rpb25TdHJpbmciLCJzdWJEZXJpdmF0aW9uIiwibGFzdFN0ZXAiLCJnZXRMYXN0U3RlcCIsImxhc3RTdGVwU3RyaW5nIiwic3VicHJvb2ZTdHJpbmciLCJmcmFtZSIsIm1ldGF2YXJpYWJsZSIsImZyYW1lU3RyaW5nIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwic3RyaW5nIiwicmVmZXJuZWNlU3RyaW5nIiwibWV0YUxldmVsQXNzdW1wdGlvblN0cmluZyIsInByb2NlZHVyZVJlZmVyZW5jZSIsInByb2NlZHVyZVJlZmVyZW5jZU5hbWUiLCJnZXROYW1lIiwicHJvY2VkdXJlQ2FsbFN0cmluZyIsInN0YXRlbWVudFN1YnN0aXR1dGlvblN0cmluZyIsInJlZmVyZW5jZVN1YnN0aXR1dGlvblN0cmluZyIsImRlZHVjdGlvbiIsImRlZHVjdGlvblN0cmluZyIsInR5cGUiLCJwcm92aXNpb25hbFN0cmluZyIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmciLCJ0b3BMZXZlbE1ldGFBc3NlcnRpb25TdHJpbmciLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25TdHJpbmciXSwibWFw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
|
package/package.json
CHANGED
|
@@ -2,14 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
import Declaration from "../declaration";
|
|
4
4
|
|
|
5
|
+
import { asynchronousUtilities } from "occam-languages";
|
|
6
|
+
|
|
5
7
|
import { define } from "../../elements";
|
|
8
|
+
import { baseTypeFromNothing } from "../../utilities/type";
|
|
9
|
+
|
|
10
|
+
const { asyncEvery } = asynchronousUtilities;
|
|
6
11
|
|
|
7
12
|
export default define(class ComplexTypeDeclaration extends Declaration {
|
|
8
|
-
constructor(context, string, node, lineIndex, type, superTypes) {
|
|
13
|
+
constructor(context, string, node, lineIndex, type, superTypes, provisional, propertyDeclarations) {
|
|
9
14
|
super(context, string, node, lineIndex);
|
|
10
15
|
|
|
11
16
|
this.type = type;
|
|
12
17
|
this.superTypes = superTypes;
|
|
18
|
+
this.provisional = provisional;
|
|
19
|
+
this.propertyDeclarations = propertyDeclarations;
|
|
13
20
|
}
|
|
14
21
|
|
|
15
22
|
getType() {
|
|
@@ -20,44 +27,59 @@ export default define(class ComplexTypeDeclaration extends Declaration {
|
|
|
20
27
|
return this.superTypes;
|
|
21
28
|
}
|
|
22
29
|
|
|
30
|
+
isProvisional() {
|
|
31
|
+
return this.provisional;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
getPropertyDeclarations() {
|
|
35
|
+
return this.propertyDeclarations;
|
|
36
|
+
}
|
|
37
|
+
|
|
23
38
|
getComplexTypeDeclarationNode() {
|
|
24
39
|
const node = this.getNode(),
|
|
25
|
-
complexTypeDeclarationNode = node;
|
|
40
|
+
complexTypeDeclarationNode = node; ///
|
|
26
41
|
|
|
27
42
|
return complexTypeDeclarationNode;
|
|
28
43
|
}
|
|
29
44
|
|
|
45
|
+
getProperties() {
|
|
46
|
+
const properties = this.propertyDeclarations.reduce((properties, propertyDeclaration) => {
|
|
47
|
+
const property = propertyDeclaration.getProperty();
|
|
48
|
+
|
|
49
|
+
if (property !== null) {
|
|
50
|
+
properties.push(property);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return properties;
|
|
54
|
+
}, []);
|
|
55
|
+
|
|
56
|
+
return properties;
|
|
57
|
+
}
|
|
58
|
+
|
|
30
59
|
async verify(context) {
|
|
31
60
|
let verifies = false;
|
|
32
61
|
|
|
33
62
|
await this.break(context);
|
|
34
63
|
|
|
35
|
-
const complexTypeDeclarationString = this.getString();
|
|
64
|
+
const complexTypeDeclarationString = this.getString(); ///
|
|
36
65
|
|
|
37
66
|
context.trace(`Verifying the '${complexTypeDeclarationString}' complex type declaration...`);
|
|
38
67
|
|
|
39
|
-
|
|
40
|
-
const typeString = this.type.getString();
|
|
41
|
-
|
|
42
|
-
context.trace(`The '${typeString}' type is prefixed.`);
|
|
43
|
-
} else {
|
|
44
|
-
const typeVerifies = this.verifyType(context);
|
|
68
|
+
const typeVerifies = this.verifyType(context);
|
|
45
69
|
|
|
46
|
-
|
|
47
|
-
|
|
70
|
+
if (typeVerifies) {
|
|
71
|
+
const superTypesVerify = this.verifySuperTypes(context);
|
|
48
72
|
|
|
49
|
-
|
|
50
|
-
|
|
73
|
+
if (superTypesVerify) {
|
|
74
|
+
const typePrefixVerifies = this.verifyTypePrefix(context);
|
|
51
75
|
|
|
52
|
-
|
|
53
|
-
|
|
76
|
+
if (typePrefixVerifies) {
|
|
77
|
+
const propertyDeclarationsVerify = await this.verifyPropertyDeclaratisons(context);
|
|
54
78
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
prefixName = typePrefixName; ///
|
|
79
|
+
if (propertyDeclarationsVerify) {
|
|
80
|
+
const properties = this.getProperties();
|
|
58
81
|
|
|
59
|
-
|
|
60
|
-
}
|
|
82
|
+
this.type.setProperties(properties);
|
|
61
83
|
|
|
62
84
|
context.addType(this.type);
|
|
63
85
|
|
|
@@ -77,65 +99,65 @@ export default define(class ComplexTypeDeclaration extends Declaration {
|
|
|
77
99
|
verifyType(context) {
|
|
78
100
|
let typeVerifies = false;
|
|
79
101
|
|
|
80
|
-
const typeString = this.type.getString()
|
|
102
|
+
const typeString = this.type.getString(),
|
|
103
|
+
complexTypeDeclarationString = this.getString(); ///
|
|
81
104
|
|
|
82
|
-
context.trace(`Verifying the '${
|
|
105
|
+
context.trace(`Verifying the '${complexTypeDeclarationString}' complex type declaration's '${typeString}' type...`);
|
|
83
106
|
|
|
84
107
|
const typeName = this.type.getName(),
|
|
85
108
|
includeRelease = true,
|
|
86
109
|
typePresent = context.isTypePresentByTypeName(typeName, includeRelease);
|
|
87
110
|
|
|
88
|
-
if (typePresent) {
|
|
89
|
-
context.debug(`The '${typeString}' type is already present.`);
|
|
90
|
-
} else {
|
|
111
|
+
if (!typePresent) {
|
|
91
112
|
const prefixedTypeName = typeName, ///
|
|
92
113
|
typePresent = context.isTypePresentByPrefixedTypeName(prefixedTypeName);
|
|
93
114
|
|
|
94
|
-
if (typePresent) {
|
|
95
|
-
|
|
96
|
-
|
|
115
|
+
if (!typePresent) {
|
|
116
|
+
this.type.setProvisional(this.provisional);
|
|
117
|
+
|
|
97
118
|
typeVerifies = true;
|
|
119
|
+
} else {
|
|
120
|
+
context.debug(`The '${typeString}' type is already present.`);
|
|
98
121
|
}
|
|
122
|
+
} else {
|
|
123
|
+
context.debug(`The '${typeString}' type is already present.`);
|
|
99
124
|
}
|
|
100
125
|
|
|
101
126
|
if (typeVerifies) {
|
|
102
|
-
context.debug(`...verified the '${
|
|
127
|
+
context.debug(`...verified the '${complexTypeDeclarationString}' complex type declaration's '${typeString}' type`);
|
|
103
128
|
}
|
|
104
129
|
|
|
105
130
|
return typeVerifies;
|
|
106
131
|
}
|
|
107
132
|
|
|
108
|
-
verifySuperType(context, superType) {
|
|
133
|
+
verifySuperType(context, superType, superTypes) {
|
|
109
134
|
let superTypeVerifies = false;
|
|
110
135
|
|
|
111
|
-
const superTypeString = superType.getString()
|
|
136
|
+
const superTypeString = superType.getString(),
|
|
137
|
+
complexTypeDeclarationString = this.getString(); ///
|
|
112
138
|
|
|
113
|
-
context.trace(`Verifying the '${superTypeString}' super-type...`);
|
|
139
|
+
context.trace(`Verifying the '${complexTypeDeclarationString}' complex type declaration's '${superTypeString}' super-type...`);
|
|
114
140
|
|
|
115
141
|
const nominalTypeName = superType.getNominalTypeName(),
|
|
116
142
|
typeName = nominalTypeName, ///
|
|
117
143
|
typeComparesToTypeName = this.type.compareTypeName(typeName);
|
|
118
144
|
|
|
119
|
-
if (typeComparesToTypeName) {
|
|
120
|
-
context.trace(`The super-type's name compares to the ${typeName}' complex type's name.`);
|
|
121
|
-
} else {
|
|
122
|
-
const oldSuperType = superType;
|
|
123
|
-
|
|
145
|
+
if (!typeComparesToTypeName) {
|
|
124
146
|
superType = context.findTypeByNominalTypeName(nominalTypeName);
|
|
125
147
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if (superTypePresent) {
|
|
129
|
-
const newSuperType = superType; ///
|
|
130
|
-
|
|
131
|
-
this.type.replaceSuperType(oldSuperType, newSuperType);
|
|
148
|
+
if (superType !== null) {
|
|
149
|
+
superTypes.push(superType);
|
|
132
150
|
|
|
133
151
|
superTypeVerifies = true;
|
|
152
|
+
} else {
|
|
153
|
+
context.debug(`The '${superTypeString}' super-type is not present.`);
|
|
134
154
|
}
|
|
155
|
+
} else {
|
|
156
|
+
context.debug(`The '${superTypeString}' super-type's name compares to the ${typeName}' type's name.`);
|
|
135
157
|
}
|
|
136
158
|
|
|
137
159
|
if (superTypeVerifies) {
|
|
138
|
-
context.debug(`...verified the '${superTypeString}' super-type.`);
|
|
160
|
+
context.debug(`...verified the '${complexTypeDeclarationString}' complex type declaration's '${superTypeString}' super-type.`);
|
|
139
161
|
}
|
|
140
162
|
|
|
141
163
|
return superTypeVerifies;
|
|
@@ -144,162 +166,83 @@ export default define(class ComplexTypeDeclaration extends Declaration {
|
|
|
144
166
|
verifySuperTypes(context) {
|
|
145
167
|
let superTypesVerify;
|
|
146
168
|
|
|
147
|
-
const
|
|
148
|
-
|
|
149
|
-
context.trace(`Verifying the '${typeString}' complex type's super-types...`);
|
|
169
|
+
const superTypes = [],
|
|
170
|
+
complexTypeDeclarationString = this.getString(); ///
|
|
150
171
|
|
|
151
|
-
|
|
172
|
+
context.trace(`Verifying the '${complexTypeDeclarationString}' complex type declaration's super-types...`);
|
|
152
173
|
|
|
153
|
-
|
|
154
|
-
|
|
174
|
+
superTypesVerify = this.superTypes.every((superType) => {
|
|
175
|
+
const superTypeVerifies = this.verifySuperType(context, superType, superTypes);
|
|
155
176
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
superTypesVerify = superTypes.every((superType) => {
|
|
161
|
-
const superTypeVerifies = this.verifySuperType(context, superType);
|
|
162
|
-
|
|
163
|
-
if (superTypeVerifies) {
|
|
164
|
-
return true;
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
}
|
|
177
|
+
if (superTypeVerifies) {
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
});
|
|
168
181
|
|
|
169
182
|
if (superTypesVerify) {
|
|
170
|
-
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
return superTypesVerify;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
verifyProperty(context, property, properties) {
|
|
177
|
-
let propertyVerifies = false;
|
|
178
|
-
|
|
179
|
-
const propertyString = property.getString();
|
|
183
|
+
const superTypesLength = superTypes.length;
|
|
180
184
|
|
|
181
|
-
|
|
185
|
+
if (superTypesLength === 0) {
|
|
186
|
+
const baseType = baseTypeFromNothing(),
|
|
187
|
+
superTyupe = baseType; ///
|
|
182
188
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
if (propertyNameVerifies) {
|
|
186
|
-
const propertyNominalTypeNameVerifies = this.verifyPropertyNominalTypeName(context, property, properties);
|
|
187
|
-
|
|
188
|
-
if (propertyNominalTypeNameVerifies) {
|
|
189
|
-
propertyVerifies = true;
|
|
189
|
+
superTypes.push(superTyupe);
|
|
190
190
|
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
if (propertyVerifies) {
|
|
194
|
-
context.debug(`...verified the '${propertyString}' property.`);
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
return propertyVerifies;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
verifyProperties(context) {
|
|
201
|
-
let propertiesVerify;
|
|
202
|
-
|
|
203
|
-
const typeString = this.type.getString();
|
|
204
191
|
|
|
205
|
-
|
|
192
|
+
this.type.setSuperTypes(superTypes);
|
|
206
193
|
|
|
207
|
-
|
|
208
|
-
properties = this.type.getProperties(includeSuperTypes);
|
|
209
|
-
|
|
210
|
-
propertiesVerify = properties.every((property) => {
|
|
211
|
-
const propertyVerifies = this.verifyProperty(context, property, properties);
|
|
212
|
-
|
|
213
|
-
if (propertyVerifies) {
|
|
214
|
-
return true;
|
|
215
|
-
}
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
if (propertiesVerify) {
|
|
219
|
-
context.debug(`...verified the '${typeString}' complex type's properties.`);
|
|
194
|
+
context.debug(`...verified the '${complexTypeDeclarationString}' complex type declaration's super-types.`);
|
|
220
195
|
}
|
|
221
196
|
|
|
222
|
-
return
|
|
197
|
+
return superTypesVerify;
|
|
223
198
|
}
|
|
224
199
|
|
|
225
|
-
|
|
226
|
-
let
|
|
227
|
-
|
|
228
|
-
const propertyString = property.getString();
|
|
229
|
-
|
|
230
|
-
context.trace(`Verifying the '${propertyString}' property's name...`);
|
|
200
|
+
verifyTypePrefix(context) {
|
|
201
|
+
let typePrefixVerifies = false;
|
|
231
202
|
|
|
232
|
-
const
|
|
233
|
-
|
|
234
|
-
const propertyComparesToPropertyName = property.comparePropertyName(propertyName);
|
|
203
|
+
const typeString = this.type.getString(),
|
|
204
|
+
complexTypeDeclarationString = this.getString(); ///
|
|
235
205
|
|
|
236
|
-
|
|
237
|
-
count++;
|
|
238
|
-
}
|
|
206
|
+
context.trace(`Verifying the '${complexTypeDeclarationString}' complex type declaration's '${typeString}' type's prefix...`);
|
|
239
207
|
|
|
240
|
-
|
|
241
|
-
}, 0);
|
|
208
|
+
const typePrefixed = this.type.isPrefixed();
|
|
242
209
|
|
|
243
|
-
if (
|
|
244
|
-
|
|
210
|
+
if (!typePrefixed) {
|
|
211
|
+
typePrefixVerifies = true;
|
|
245
212
|
} else {
|
|
246
|
-
|
|
247
|
-
superType = superTypes.find((superType) => {
|
|
248
|
-
const superTypeProperties = superType.getProperties(),
|
|
249
|
-
superTypePropertyComparesToPropertyName = superTypeProperties.some((superTypeProperty) => {
|
|
250
|
-
const superTypePropertyComparesToPropertyName = superTypeProperty.comparePropertyName(propertyName);
|
|
251
|
-
|
|
252
|
-
if (superTypePropertyComparesToPropertyName) {
|
|
253
|
-
return true;
|
|
254
|
-
}
|
|
255
|
-
});
|
|
256
|
-
|
|
257
|
-
if (superTypePropertyComparesToPropertyName) {
|
|
258
|
-
return true;
|
|
259
|
-
}
|
|
260
|
-
}) || null;
|
|
261
|
-
|
|
262
|
-
if (superType !== null) {
|
|
263
|
-
const superTypeString = superType.getString();
|
|
264
|
-
|
|
265
|
-
context.debug(`The '${superTypeString}' super-type has the same property.`);
|
|
266
|
-
} else {
|
|
267
|
-
propertyNameVerifies = true;
|
|
268
|
-
}
|
|
213
|
+
context.debug(`The '${complexTypeDeclarationString}' complex type declaration's '${typeString}' type is prefixed.`);
|
|
269
214
|
}
|
|
270
215
|
|
|
271
|
-
if (
|
|
272
|
-
context.debug(`...verified the '${
|
|
216
|
+
if (typePrefixVerifies) {
|
|
217
|
+
context.debug(`...verified the '${complexTypeDeclarationString}' complex type declaration's '${typeString}' type's prefix.`);
|
|
273
218
|
}
|
|
274
219
|
|
|
275
|
-
return
|
|
220
|
+
return typePrefixVerifies;
|
|
276
221
|
}
|
|
277
222
|
|
|
278
|
-
|
|
279
|
-
let
|
|
223
|
+
async verifyPropertyDeclaratisons(context) {
|
|
224
|
+
let propertyDeclarationsVerify;
|
|
280
225
|
|
|
281
|
-
const
|
|
282
|
-
|
|
226
|
+
const typeString = this.type.getString(),
|
|
227
|
+
complexTypeDeclarationString = this.getString(); ///
|
|
283
228
|
|
|
284
|
-
context.trace(`Verifying the '${
|
|
229
|
+
context.trace(`Verifying the '${complexTypeDeclarationString}' complex type declaration's '${typeString}' type's property declarations...`);
|
|
285
230
|
|
|
286
|
-
const
|
|
231
|
+
const properties = this.getProperties();
|
|
287
232
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
} else {
|
|
291
|
-
const typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
|
|
233
|
+
propertyDeclarationsVerify = await asyncEvery(this.propertyDeclarations, async (propertyDeclaration) => {
|
|
234
|
+
const propertyVerifes = await propertyDeclaration.verify(properties, context);
|
|
292
235
|
|
|
293
|
-
if (
|
|
294
|
-
|
|
236
|
+
if (propertyVerifes) {
|
|
237
|
+
return true;
|
|
295
238
|
}
|
|
296
|
-
}
|
|
239
|
+
});
|
|
297
240
|
|
|
298
|
-
if (
|
|
299
|
-
context.debug(`...
|
|
241
|
+
if (propertyDeclarationsVerify) {
|
|
242
|
+
context.debug(`...verified the '${complexTypeDeclarationString}' complex type declaration's '${typeString}' type's property declarations.`);
|
|
300
243
|
}
|
|
301
244
|
|
|
302
|
-
return
|
|
245
|
+
return propertyDeclarationsVerify;
|
|
303
246
|
}
|
|
304
247
|
|
|
305
248
|
static name = "ComplexTypeDeclaration";
|