occam-nominal 1.0.627 → 1.0.630
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/context/edaphic.js +3 -4
- package/lib/context/file/nominal.js +26 -2
- package/lib/context.js +17 -1
- package/lib/element/generator/bracketed.js +41 -0
- package/lib/element/type.js +19 -18
- package/lib/element/typeAlias.js +52 -16
- package/lib/element/typePrefix.js +4 -4
- package/lib/preamble.js +4 -3
- package/lib/process/equate.js +3 -3
- package/lib/process/unify.js +5 -5
- package/lib/process/validation.js +10 -3
- package/lib/utilities/brackets.js +15 -15
- package/lib/utilities/context.js +3 -4
- package/lib/utilities/element.js +32 -4
- package/lib/utilities/instance.js +24 -16
- package/lib/utilities/json.js +20 -6
- package/package.json +1 -1
- package/src/context/edaphic.js +2 -5
- package/src/context/file/nominal.js +43 -7
- package/src/context.js +29 -1
- package/src/element/generator/bracketed.js +40 -0
- package/src/element/type.js +34 -30
- package/src/element/typeAlias.js +82 -23
- package/src/element/typePrefix.js +3 -4
- package/src/preamble.js +1 -0
- package/src/process/equate.js +3 -2
- package/src/process/unify.js +9 -9
- package/src/process/validation.js +12 -3
- package/src/utilities/brackets.js +14 -14
- package/src/utilities/context.js +2 -4
- package/src/utilities/element.js +36 -3
- package/src/utilities/instance.js +39 -25
- package/src/utilities/json.js +23 -9
package/lib/context/edaphic.js
CHANGED
|
@@ -20,7 +20,6 @@ function _interop_require_default(obj) {
|
|
|
20
20
|
}
|
|
21
21
|
const { nominalLexerFromNothing, nominalParserFromNothing } = _occamlanguages.nominalUtilities;
|
|
22
22
|
const nominalLexer = nominalLexerFromNothing(_lexer.default), nominalParser = nominalParserFromNothing(_parser.default); ///
|
|
23
|
-
let baseType = null;
|
|
24
23
|
class EdaphicContext extends _occamlanguages.Context {
|
|
25
24
|
constructor(context, lexer, parser){
|
|
26
25
|
super(context);
|
|
@@ -36,10 +35,10 @@ class EdaphicContext extends _occamlanguages.Context {
|
|
|
36
35
|
findMetaTypeByMetaTypeName(metaTypeName) {
|
|
37
36
|
return (0, _metaTypes.findMetaTypeByMetaTypeName)(metaTypeName);
|
|
38
37
|
}
|
|
39
|
-
static fromNothing() {
|
|
40
|
-
const
|
|
38
|
+
static fromNothing(context) {
|
|
39
|
+
const lexer = nominalLexer, parser = nominalParser, edapicContext = _occamlanguages.Context.fromNothing(EdaphicContext, lexer, parser, context);
|
|
41
40
|
return edapicContext;
|
|
42
41
|
}
|
|
43
42
|
}
|
|
44
43
|
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2VkYXBoaWMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENvbnRleHQsIG5vbWluYWxVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBOb21pbmFsTGV4ZXIgZnJvbSBcIi4uL25vbWluYWwvbGV4ZXJcIjtcbmltcG9ydCBOb21pbmFsUGFyc2VyIGZyb20gXCIuLi9ub21pbmFsL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90eXBlXCI7XG5pbXBvcnQgeyBmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSB9IGZyb20gXCIuLi9tZXRhVHlwZXNcIjtcblxuY29uc3QgeyBub21pbmFsTGV4ZXJGcm9tTm90aGluZywgbm9taW5hbFBhcnNlckZyb21Ob3RoaW5nIH0gPSBub21pbmFsVXRpbGl0aWVzO1xuXG5jb25zdCBub21pbmFsTGV4ZXIgPSBub21pbmFsTGV4ZXJGcm9tTm90aGluZyhOb21pbmFsTGV4ZXIpLFxuICAgICAgbm9taW5hbFBhcnNlciA9IG5vbWluYWxQYXJzZXJGcm9tTm90aGluZyhOb21pbmFsUGFyc2VyKTsgLy8vXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkYXBoaWNDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGxleGVyLCBwYXJzZXIpIHtcbiAgICBzdXBlcihjb250ZXh0KTtcblxuICAgIHRoaXMubGV4ZXIgPSBsZXhlcjtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgfVxuXG4gIGdldExleGVyKCkge1xuICAgIHJldHVybiB0aGlzLmxleGVyO1xuICB9XG5cbiAgZ2V0UGFyc2VyKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlcjtcbiAgfVxuXG4gIGZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSkgeyByZXR1cm4gZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKTsgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZyhjb250ZXh0KSB7XG4gICAgY29uc3QgbGV4ZXIgPSBub21pbmFsTGV4ZXIsIC8vL1xuICAgICAgICAgIHBhcnNlciA9IG5vbWluYWxQYXJzZXIsIC8vL1xuICAgICAgICAgIGVkYXBpY0NvbnRleHQgPSBDb250ZXh0LmZyb21Ob3RoaW5nKEVkYXBoaWNDb250ZXh0LCBsZXhlciwgcGFyc2VyLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBlZGFwaWNDb250ZXh0O1xuICB9XG59XG4iXSwibmFtZXMiOlsiRWRhcGhpY0NvbnRleHQiLCJub21pbmFsTGV4ZXJGcm9tTm90aGluZyIsIm5vbWluYWxQYXJzZXJGcm9tTm90aGluZyIsIm5vbWluYWxVdGlsaXRpZXMiLCJub21pbmFsTGV4ZXIiLCJOb21pbmFsTGV4ZXIiLCJub21pbmFsUGFyc2VyIiwiTm9taW5hbFBhcnNlciIsIkNvbnRleHQiLCJjb250ZXh0IiwibGV4ZXIiLCJwYXJzZXIiLCJnZXRMZXhlciIsImdldFBhcnNlciIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwibWV0YVR5cGVOYW1lIiwiZnJvbU5vdGhpbmciLCJlZGFwaWNDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFlQTs7O2VBQXFCQTs7O2dDQWJxQjs4REFFakI7K0RBQ0M7c0JBRVU7MkJBQ087Ozs7OztBQUUzQyxNQUFNLEVBQUVDLHVCQUF1QixFQUFFQyx3QkFBd0IsRUFBRSxHQUFHQyxnQ0FBZ0I7QUFFOUUsTUFBTUMsZUFBZUgsd0JBQXdCSSxjQUFZLEdBQ25EQyxnQkFBZ0JKLHlCQUF5QkssZUFBYSxHQUFHLEdBQUc7QUFFbkQsTUFBTVAsdUJBQXVCUSx1QkFBTztJQUNqRCxZQUFZQyxPQUFPLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxDQUFFO1FBQ2xDLEtBQUssQ0FBQ0Y7UUFFTixJQUFJLENBQUNDLEtBQUssR0FBR0E7UUFDYixJQUFJLENBQUNDLE1BQU0sR0FBR0E7SUFDaEI7SUFFQUMsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDRixLQUFLO0lBQ25CO0lBRUFHLFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQ0YsTUFBTTtJQUNwQjtJQUVBRywyQkFBMkJDLFlBQVksRUFBRTtRQUFFLE9BQU9ELElBQUFBLHFDQUEwQixFQUFDQztJQUFlO0lBRTVGLE9BQU9DLFlBQVlQLE9BQU8sRUFBRTtRQUMxQixNQUFNQyxRQUFRTixjQUNSTyxTQUFTTCxlQUNUVyxnQkFBZ0JULHVCQUFPLENBQUNRLFdBQVcsQ0FBQ2hCLGdCQUFnQlUsT0FBT0MsUUFBUUY7UUFFekUsT0FBT1E7SUFDVDtBQUNGIn0=
|
|
@@ -333,15 +333,35 @@ class NominalFileContext extends _occamlanguages.FileContext {
|
|
|
333
333
|
});
|
|
334
334
|
return types;
|
|
335
335
|
}
|
|
336
|
+
findTypeAliasByTypeName(typeName, includeRelease = true) {
|
|
337
|
+
const typeAliases = this.getTypeAliases(includeRelease), typeAlias = typeAliases.find((typeAlias)=>{
|
|
338
|
+
const typeAliasComparesToTypeName = typeAlias.compareTypeName(typeName);
|
|
339
|
+
if (typeAliasComparesToTypeName) {
|
|
340
|
+
return true;
|
|
341
|
+
}
|
|
342
|
+
}) || null;
|
|
343
|
+
return typeAlias;
|
|
344
|
+
}
|
|
336
345
|
findTypeByPrefixedTypeName(prefixedTypeName, includeRelease = true, includeDependencies = true) {
|
|
337
346
|
const types = this.getTypes(includeRelease, includeDependencies), type = (0, _type.findType)(types, (type)=>{
|
|
338
347
|
const typeComparesToPrefixedTypeName = type.comparePrefixedTypeName(prefixedTypeName);
|
|
339
348
|
if (typeComparesToPrefixedTypeName) {
|
|
340
349
|
return true;
|
|
341
350
|
}
|
|
342
|
-
});
|
|
351
|
+
}) || null;
|
|
343
352
|
return type;
|
|
344
353
|
}
|
|
354
|
+
findTypesByPrefixedTypeName(prefixedTypeName, includeRelease = true, includeDependencies = true) {
|
|
355
|
+
let types;
|
|
356
|
+
types = this.getTypes(includeRelease, includeDependencies);
|
|
357
|
+
types = (0, _type.findTypes)(types, (type)=>{
|
|
358
|
+
const typeComparesToTypeName = type.comparePrefixedTypeName(prefixedTypeName);
|
|
359
|
+
if (typeComparesToTypeName) {
|
|
360
|
+
return true;
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
return types;
|
|
364
|
+
}
|
|
345
365
|
findTypePrefixByTypePrefixName(typePrefixName, includeRelease = true, includeDependencies = true) {
|
|
346
366
|
const typePrefixes = this.getTypePrefixes(includeRelease, includeDependencies), typePrefix = typePrefixes.find((typePrefix)=>{
|
|
347
367
|
const typePrefixComparesToTypePrefixName = typePrefix.compareTypePrefixName(typePrefixName);
|
|
@@ -405,6 +425,10 @@ class NominalFileContext extends _occamlanguages.FileContext {
|
|
|
405
425
|
const type = this.findTypeByTypeName(typeName, includeRelease, includeDependencies), typePresent = type !== null;
|
|
406
426
|
return typePresent;
|
|
407
427
|
}
|
|
428
|
+
isTypeAliasPresentByTypeName(typeName, includeRelease = true) {
|
|
429
|
+
const typeAlias = this.findTypeAliasByTypeName(typeName, includeRelease), typeAlisPresent = typeAlias !== null;
|
|
430
|
+
return typeAlisPresent;
|
|
431
|
+
}
|
|
408
432
|
isTypePresentByPrefixedTypeName(prefixedTypeName, includeRelease = true, includeDependencies = true) {
|
|
409
433
|
const type = this.findTypeByPrefixedTypeName(prefixedTypeName, includeRelease, includeDependencies), typePresent = type !== null;
|
|
410
434
|
return typePresent;
|
|
@@ -510,4 +534,4 @@ class NominalFileContext extends _occamlanguages.FileContext {
|
|
|
510
534
|
}
|
|
511
535
|
}
|
|
512
536
|
|
|
513
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0L2ZpbGUvbm9taW5hbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBGaWxlQ29udGV4dCwgbm9taW5hbFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IE5vbWluYWxMZXhlciBmcm9tIFwiLi4vLi4vbm9taW5hbC9sZXhlclwiO1xuaW1wb3J0IE5vbWluYWxQYXJzZXIgZnJvbSBcIi4uLy4uL25vbWluYWwvcGFyc2VyXCI7XG5cbmltcG9ydCB7IGlzb2xhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHZlcmlmeUZpbGUgfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy92ZXJpZnlcIjtcbmltcG9ydCB7IGZpbmRUeXBlLCBmaW5kVHlwZXMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3R5cGVcIjtcbmltcG9ydCB7IGZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIH0gZnJvbSBcIi4uLy4uL21ldGFUeXBlc1wiO1xuaW1wb3J0IHsgdHlwZXNGcm9tSlNPTixcbiAgICAgICAgIHJ1bGVzRnJvbUpTT04sXG4gICAgICAgICBsZW1tYXNGcm9tSlNPTixcbiAgICAgICAgIGF4aW9tc0Zyb21KU09OLFxuICAgICAgICAgc2NoZW1hc0Zyb21KU09OLFxuICAgICAgICAgdHlwZXNUb1R5cGVzSlNPTixcbiAgICAgICAgIHRoZW9yZW1zRnJvbUpTT04sXG4gICAgICAgICBydWxlc1RvUnVsZXNKU09OLFxuICAgICAgICAgbGVtbWFzVG9MZW1tYXNKU09OLFxuICAgICAgICAgYXhpb21zVG9BeGlvbXNKU09OLFxuICAgICAgICAgZ2VuZXJhdG9yc0Zyb21KU09OLFxuICAgICAgICAgY29uamVjdHVyZXNGcm9tSlNPTixcbiAgICAgICAgIGNvbWJpbmF0b3JzRnJvbUpTT04sXG4gICAgICAgICB0eXBlQWxpYXNlc0Zyb21KU09OLFxuICAgICAgICAgdHlwZVByZWZpeGVzRnJvbUpTT04sXG4gICAgICAgICBjb25zdHJ1Y3RvcnNGcm9tSlNPTixcbiAgICAgICAgIHNjaGVtYXNUb1NjaGVtYXNKU09OLFxuICAgICAgICAgdGhlb3JlbXNUb1RoZW9yZW1zSlNPTixcbiAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzRnJvbUpTT04sXG4gICAgICAgICBnZW5lcmF0b3JzVG9HZW5lcmF0b3JzSlNPTixcbiAgICAgICAgIGNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04sXG4gICAgICAgICBjb21iaW5hdG9yc1RvQ29tYmluYXRvcnNKU09OLFxuICAgICAgICAgdHlwZUFsaWFzZXNUb1R5cGVBbGlhc2VzSlNPTixcbiAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlc0Zyb21KU09OLFxuICAgICAgICAgdHlwZVByZWZpeGVzVG9UeXBlUHJlZml4ZXNKU09OLFxuICAgICAgICAgY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OLFxuICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXNUb0RlY2xhcmVkVmFyaWFibGVzSlNPTixcbiAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlc1RvRGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IHB1c2ggfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBub21pbmFsTGV4ZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyLCBub21pbmFsUGFyc2VyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hciB9ID0gbm9taW5hbFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9taW5hbEZpbGVDb250ZXh0IGV4dGVuZHMgRmlsZUNvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBmaWxlQ29udGVudCwgZmlsZVBhdGgsIHRva2Vucywgbm9kZSwganNvbiwgbGV4ZXIsIHBhcnNlciwgdHlwZXMsIHJ1bGVzLCBheGlvbXMsIGxlbW1hcywgc2NoZW1hcywgdGhlb3JlbXMsIGdlbmVyYXRvcnMsIGNvbmplY3R1cmVzLCBjb21iaW5hdG9ycywgdHlwZUFsaWFzZXMsIHR5cGVQcmVmaXhlcywgY29uc3RydWN0b3JzLCBkZWNsYXJlZFZhcmlhYmxlcywgZGVjbGFyZWRNZXRhdmFyaWFibGVzKSB7XG4gICAgc3VwZXIoY29udGV4dCwgZmlsZUNvbnRlbnQsIGZpbGVQYXRoLCB0b2tlbnMsIG5vZGUsIGpzb24pO1xuXG4gICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5maWxlUGF0aCA9IGZpbGVQYXRoO1xuICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgdGhpcy50eXBlcyA9IHR5cGVzO1xuICAgIHRoaXMucnVsZXMgPSBydWxlcztcbiAgICB0aGlzLmF4aW9tcyA9IGF4aW9tcztcbiAgICB0aGlzLmxlbW1hcyA9IGxlbW1hcztcbiAgICB0aGlzLnNjaGVtYXMgPSBzY2hlbWFzO1xuICAgIHRoaXMudGhlb3JlbXMgPSB0aGVvcmVtcztcbiAgICB0aGlzLmdlbmVyYXRvcnMgPSBnZW5lcmF0b3JzO1xuICAgIHRoaXMuY29uamVjdHVyZXMgPSBjb25qZWN0dXJlcztcbiAgICB0aGlzLmNvbWJpbmF0b3JzID0gY29tYmluYXRvcnM7XG4gICAgdGhpcy50eXBlQWxpYXNlcyA9IHR5cGVBbGlhc2VzO1xuICAgIHRoaXMudHlwZVByZWZpeGVzID0gdHlwZVByZWZpeGVzO1xuICAgIHRoaXMuY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzO1xuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMgPSBkZWNsYXJlZFZhcmlhYmxlcztcbiAgICB0aGlzLmRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldExleGVyKCkge1xuICAgIHJldHVybiB0aGlzLmxleGVyO1xuICB9XG5cbiAgZ2V0UGFyc2VyKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlcjtcbiAgfVxuXG4gIGdldExhYmVscyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBsYWJlbHMgPSBbXTtcblxuICAgIGlmIChpbmNsdWRlUmVsZWFzZSkge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRMYWJlbHMgPSB0aGlzLmNvbnRleHQuZ2V0TGFiZWxzKCk7XG5cbiAgICAgIHB1c2gobGFiZWxzLCByZWxlYXNlQ29udGV4dExhYmVscyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucnVsZXMuZm9yRWFjaCgocnVsZSkgPT4ge1xuICAgICAgICBjb25zdCBydWxlTGFiZWxzID0gcnVsZS5nZXRMYWJlbHMoKTtcblxuICAgICAgICBwdXNoKGxhYmVscywgcnVsZUxhYmVscyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5heGlvbXMuZm9yRWFjaCgoYXhpb20pID0+IHtcbiAgICAgICAgY29uc3QgYXhpb21MYWJlbHMgPSBheGlvbS5nZXRMYWJlbHMoKTtcblxuICAgICAgICBwdXNoKGxhYmVscywgYXhpb21MYWJlbHMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubGVtbWFzLmZvckVhY2goKGxlbW1hKSA9PiB7XG4gICAgICAgIGNvbnN0IGxlbW1hTGFiZWxzID0gbGVtbWEuZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgcHVzaChsYWJlbHMsIGxlbW1hTGFiZWxzKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnRoZW9yZW1zLmZvckVhY2goKHRoZW9yZW0pID0+IHtcbiAgICAgICAgY29uc3QgdGhlb3JlbUxhYmVscyA9IHRoZW9yZW0uZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgcHVzaChsYWJlbHMsIHRoZW9yZW1MYWJlbHMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY29uamVjdHVyZXMuZm9yRWFjaCgoY29uamVjdHVyZSkgPT4ge1xuICAgICAgICBjb25zdCBjb25qZWN0dXJlTGFiZWxzID0gY29uamVjdHVyZS5nZXRMYWJlbHMoKTtcblxuICAgICAgICBwdXNoKGxhYmVscywgY29uamVjdHVyZUxhYmVscyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zY2hlbWFzLmZvckVhY2goKHNjaGVtYSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWFMYWJlbCA9IHNjaGVtYS5nZXRMYWJlbCgpO1xuXG4gICAgICAgIGxhYmVscy5wdXNoKHNjaGVtYUxhYmVsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsYWJlbHM7XG4gIH1cblxuICBnZXRUeXBlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRUeXBlcyhpbmNsdWRlRGVwZW5kZW5jaWVzKSA6XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlcztcblxuICAgIHJldHVybiB0eXBlcztcbiAgfVxuXG4gIGdldFJ1bGVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHJ1bGVzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0UnVsZXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5ydWxlcztcblxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIGdldEF4aW9tcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBheGlvbXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0QXhpb21zKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF4aW9tcztcblxuICAgIHJldHVybiBheGlvbXM7XG4gIH1cblxuICBnZXRMZW1tYXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgbGVtbWFzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldExlbW1hcygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW1tYXM7XG5cbiAgICByZXR1cm4gbGVtbWFzO1xuICB9XG5cbiAgZ2V0U2NoZW1hcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBzY2hlbWFzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRTY2hlbWFzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2hlbWFzO1xuXG4gICAgcmV0dXJuIHNjaGVtYXM7XG4gIH1cblxuICBnZXRUaGVvcmVtcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCB0aGVvcmVtcyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldFRoZW9yZW1zKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhlb3JlbXM7XG5cbiAgICByZXR1cm4gdGhlb3JlbXM7XG4gIH1cblxuICBnZXRHZW5lcmF0b3JzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGdlbmVyYXRvcnMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldEdlbmVyYXRvcnMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRvcnM7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9ycztcbiAgfVxuXG4gIGdldENvbmplY3R1cmVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbmplY3R1cmVzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29uamVjdHVyZXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25qZWN0dXJlcztcblxuICAgIHJldHVybiBjb25qZWN0dXJlcztcbiAgfVxuXG4gIGdldENvbWJpbmF0b3JzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbWJpbmF0b3JzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29tYmluYXRvcnMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21iaW5hdG9ycztcblxuICAgIHJldHVybiBjb21iaW5hdG9ycztcbiAgfVxuXG4gIGdldFR5cGVBbGlhc2VzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVBbGlhc2VzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0VHlwZUFsaWFzZXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlQWxpYXNlcztcblxuICAgIHJldHVybiB0eXBlQWxpYXNlcztcbiAgfVxuXG4gIGdldFR5cGVQcmVmaXhlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZVByZWZpeGVzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldFR5cGVQcmVmaXhlcyhpbmNsdWRlRGVwZW5kZW5jaWVzKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZVByZWZpeGVzO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXhlcztcbiAgfVxuXG4gIGdldENvbnN0cnVjdG9ycyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9ycztcblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcnM7XG4gIH1cblxuICBnZXRQcm9jZWR1cmVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHByb2NlZHVyZXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRQcm9jZWR1cmVzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7ICAvLy9cblxuICAgIHJldHVybiBwcm9jZWR1cmVzO1xuICB9XG5cbiAgZ2V0Q2xhaW1zKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGxlbW1hcyA9IHRoaXMuZ2V0TGVtbWFzKGluY2x1ZGVSZWxlYXNlKSxcbiAgICAgICAgICBheGlvbXMgPSB0aGlzLmdldEF4aW9tcyhpbmNsdWRlUmVsZWFzZSksXG4gICAgICAgICAgdGhlb3JlbXMgPSB0aGlzLmdldFRoZW9yZW1zKGluY2x1ZGVSZWxlYXNlKSxcbiAgICAgICAgICBjb25qZWN0dXJlcyA9IHRoaXMuZ2V0Q29uamVjdHVyZXMoaW5jbHVkZVJlbGVhc2UpLFxuICAgICAgICAgIGNsYWltcyA9IFtcbiAgICAgICAgICAgIC4uLmxlbW1hcyxcbiAgICAgICAgICAgIC4uLmF4aW9tcyxcbiAgICAgICAgICAgIC4uLnRoZW9yZW1zLFxuICAgICAgICAgICAgLi4uY29uamVjdHVyZXNcbiAgICAgICAgICBdO1xuXG4gICAgcmV0dXJuIGNsYWltcztcbiAgfVxuXG4gIGdldERlY2xhcmVkVmFyaWFibGVzKGRlY2xhcmVkVmFyaWFibGVzID0gW10pIHtcbiAgICBwdXNoKGRlY2xhcmVkVmFyaWFibGVzLCB0aGlzLmRlY2xhcmVkVmFyaWFibGVzKTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlcztcbiAgfVxuXG4gIGdldERlY2xhcmVkTWV0YXZhcmlhYmxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJlZE1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBnZXRUZXJtcyh0ZXJtcyA9IFtdKSB7XG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0TGlua3MobGlua3MgPSBbXSkge1xuICAgIHJldHVybiBsaW5rcztcbiAgfVxuXG4gIGdldEZyYW1lcyhmcmFtZXMgPSBbXSkge1xuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zID0gW10pIHtcbiAgICByZXR1cm4gYXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldFN0YXRlbWVudHMoc3RhdGVtZW50cyA9IFtdKSB7XG4gICAgcmV0dXJuIHN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMgPSBbXSkge1xuICAgIHJldHVybiBwYXJhbWV0ZXJzO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlcyhzaWduYXR1cmVzID0gW10pIHtcbiAgICByZXR1cm4gc2lnbmF0dXJlcztcbiAgfVxuXG4gIGdldFJlZmVyZW5jZXMocmVmZXJlbmNlcyA9IFtdKSB7XG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyA9IFtdKSB7XG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzID0gW10pIHtcbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRQcm9jZWR1cmVSZWZlcmVuY2VzKHByb2NlZHVyZVJlZmVyZW5jZXMgPSBbXSkge1xuICAgIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2VzO1xuICB9XG5cbiAgZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldEVxdWl2YWxlbmNlcygpIHtcbiAgICBjb25zdCBlcXVpdmFsZW5jZXMgPSBbXTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBnZXRGYWN0T3JTdWJwcm9vZnMoKSB7XG4gICAgY29uc3QgZmFjdE9yU3VicHJvb2ZzID0gW107XG5cbiAgICByZXR1cm4gZmFjdE9yU3VicHJvb2ZzO1xuICB9XG5cbiAgYWRkVHlwZSh0eXBlKSB7XG4gICAgdGhpcy50eXBlcy5wdXNoKHR5cGUpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRSdWxlKHJ1bGUpIHtcbiAgICB0aGlzLnJ1bGVzLnB1c2gocnVsZSk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBydWxlU3RyaW5nID0gcnVsZS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZEF4aW9tKGF4aW9tKSB7XG4gICAgdGhpcy5heGlvbXMucHVzaChheGlvbSk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBheGlvbVN0cmluZyA9IGF4aW9tLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20gdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRMZW1tYShsZW1tYSkge1xuICAgIHRoaXMubGVtbWFzLnB1c2gobGVtbWEpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICBsZW1tYVN0cmluZyA9IGxlbW1hLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke2xlbW1hU3RyaW5nfScgbGVtbWEgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRTY2hlbWEoc2NoZW1hKSB7XG4gICAgdGhpcy5zY2hlbWFzLnB1c2goc2NoZW1hKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIHNjaGVtYVN0cmluZyA9IHNjaGVtYS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRUaGVvcmVtKHRoZW9yZW0pIHtcbiAgICB0aGlzLnRoZW9yZW1zLnB1c2godGhlb3JlbSk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICB0aGVvcmVtU3RyaW5nID0gdGhlb3JlbS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHt0aGVvcmVtU3RyaW5nfScgdGhlb3JlbSB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZEdlbmVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICB0aGlzLmdlbmVyYXRvcnMucHVzaChnZW5lcmF0b3IpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgZ2VuZXJhdG9yU3RyaW5nID0gZ2VuZXJhdG9yLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke2dlbmVyYXRvclN0cmluZ30nIGdlbmVyYXRvciB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZENvbmplY3R1cmUoY29uamVjdHVyZSkge1xuICAgIHRoaXMuY29uamVjdHVyZXMucHVzaChjb25qZWN0dXJlKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIG9jbmplY3R1cmVTdHJpbmcgPSBjb25qZWN0dXJlLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke29jbmplY3R1cmVTdHJpbmd9JyBvY25qZWN0dXJlIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkQ29tYmluYXRvcihjb21iaW5hdG9yKSB7XG4gICAgdGhpcy5jb21iaW5hdG9ycy5wdXNoKGNvbWJpbmF0b3IpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgY29tYmluYXRvclN0cmluZyA9IGNvbWJpbmF0b3IuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7Y29tYmluYXRvclN0cmluZ30nIGNvbWJpbmF0b3IgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRUeXBlQWxpYXModHlwZUFsaWFzKSB7XG4gICAgdGhpcy50eXBlQWxpYXNlcy5wdXNoKHR5cGVBbGlhcyk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICB0eXBlQWxpYXNTdHJpbmcgPSB0eXBlQWxpYXMuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7dHlwZUFsaWFzU3RyaW5nfScgdHlwZSBhbGlhcyB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZFR5cGVQcmVmaXgodHlwZVByZWZpeCkge1xuICAgIHRoaXMudHlwZVByZWZpeGVzLnB1c2godHlwZVByZWZpeCk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICB0eXBlUHJlZml4U3RyaW5nID0gdHlwZVByZWZpeC5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHt0eXBlUHJlZml4U3RyaW5nfScgdHlwZSBwcmVmaXggdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvcikge1xuICAgIHRoaXMuY29uc3RydWN0b3JzLnB1c2goY29uc3RydWN0b3IpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSBjb25zdHJ1Y3Rvci5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkRGVjbGFyZWRWYXJpYWJsZShkZWNsYXJlZFZhcmlhYmxlKSB7XG4gICAgdGhpcy5kZWNsYXJlZFZhcmlhYmxlcy5wdXNoKGRlY2xhcmVkVmFyaWFibGUpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZVN0cmluZyA9IGRlY2xhcmVkVmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7ZGVjbGFyZWRWYXJpYWJsZVN0cmluZ30nIGRlY2xhcmVkIHZhcmlhYmxlIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkRGVjbGFyZWRNZXRhdmFyaWFibGUoZGVjbGFyZWRNZXRhdmFyaWFibGUpIHtcbiAgICB0aGlzLmRlY2xhcmVkTWV0YXZhcmlhYmxlcy5wdXNoKGRlY2xhcmVkTWV0YXZhcmlhYmxlKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlU3RyaW5nID0gZGVjbGFyZWRNZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7ZGVjbGFyZWRNZXRhdmFyaWFibGVTdHJpbmd9JyBkZWNsYXJlZCBtZXRhdmFyaWFibGUgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBmaW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5nZXRSdWxlcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlcy5maW5kKChydWxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHJ1bGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgZmluZEF4aW9tQnlMaW5rKGxpbmspIHtcbiAgICBjb25zdCBheGlvbXMgPSB0aGlzLmdldEF4aW9tcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBsaW5rLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICBheGlvbSA9IGF4aW9tcy5maW5kKChheGlvbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBheGlvbS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGF4aW9tO1xuICB9XG5cbiAgZmluZENsYWltQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY2xhaW1zID0gdGhpcy5nZXRDbGFpbXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICBjbGFpbSA9IGNsYWltcy5maW5kKChjbGFpbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBjbGFpbS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGNsYWltO1xuICB9XG5cbiAgZmluZGFsaWFzZWRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgbGV0IGFsaWFzZWRUeXBlID0gbnVsbDtcblxuICAgIGNvbnN0IHR5cGVBbGlhc2VzID0gdGhpcy5nZXRUeXBlQWxpYXNlcyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICB0eXBlQWxpYXNlcy5zb21lKCh0eXBlQWxpYXMpID0+IHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lQ29tcGFyZXMgPSB0eXBlQWxpYXMuY29tcGFyZVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgICAgaWYgKHR5cGVOYW1lQ29tcGFyZXMpIHtcbiAgICAgICAgYWxpYXNlZFR5cGUgPSB0eXBlQWxpYXMuZ2V0QWxpYXNlZFR5cGUoKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGFsaWFzZWRUeXBlO1xuICB9XG5cbiAgZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0aGlzLmdldFR5cGVzKGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKSxcbiAgICAgICAgICB0eXBlID0gZmluZFR5cGUodHlwZXMsICh0eXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlQ29tcGFyZXNUb1R5cGVOYW1lID0gdHlwZS5jb21wYXJlVHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICAgICAgICBpZiAodHlwZUNvbXBhcmVzVG9UeXBlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZmluZFR5cGVzQnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGxldCB0eXBlcztcblxuICAgIHR5cGVzID0gdGhpcy5nZXRUeXBlcyhpbmNsdWRlUmVsZWFzZSwgaW5jbHVkZURlcGVuZGVuY2llcyk7XG5cbiAgICB0eXBlcyA9IGZpbmRUeXBlcyh0eXBlcywgKHR5cGUpID0+IHsgIC8vL1xuICAgICAgY29uc3QgdHlwZUNvbXBhcmVzVG9UeXBlTmFtZSA9IHR5cGUuY29tcGFyZVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgICAgaWYgKHR5cGVDb21wYXJlc1RvVHlwZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cblxuICBmaW5kVHlwZUJ5UHJlZml4ZWRUeXBlTmFtZShwcmVmaXhlZFR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0aGlzLmdldFR5cGVzKGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKSxcbiAgICAgICAgICB0eXBlID0gZmluZFR5cGUodHlwZXMsICh0eXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlQ29tcGFyZXNUb1ByZWZpeGVkVHlwZU5hbWUgPSB0eXBlLmNvbXBhcmVQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUpO1xuXG4gICAgICAgICAgICBpZiAodHlwZUNvbXBhcmVzVG9QcmVmaXhlZFR5cGVOYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBmaW5kVHlwZVByZWZpeEJ5VHlwZVByZWZpeE5hbWUodHlwZVByZWZpeE5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSwgaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlUHJlZml4ZXMgPSB0aGlzLmdldFR5cGVQcmVmaXhlcyhpbmNsdWRlUmVsZWFzZSwgaW5jbHVkZURlcGVuZGVuY2llcyksXG4gICAgICAgICAgdHlwZVByZWZpeCA9IHR5cGVQcmVmaXhlcy5maW5kKCh0eXBlUHJlZml4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlUHJlZml4Q29tcGFyZXNUb1R5cGVQcmVmaXhOYW1lID0gdHlwZVByZWZpeC5jb21wYXJlVHlwZVByZWZpeE5hbWUodHlwZVByZWZpeE5hbWUpO1xuXG4gICAgICAgICAgICBpZiAodHlwZVByZWZpeENvbXBhcmVzVG9UeXBlUHJlZml4TmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXg7XG4gIH1cblxuICBmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKFZhcmlhYmxlSWRlbnRpdGlmZXIpIHtcbiAgICBjb25zdCBkZWNsYXJlZFZhcmlhYmxlcyA9IHRoaXMuZ2V0RGVjbGFyZWRWYXJpYWJsZXMoKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlID0gZGVjbGFyZWRWYXJpYWJsZXMuZmluZCgoZGVjbGFyZWRWYXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZUNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aXRpZmVyID0gZGVjbGFyZWRWYXJpYWJsZS5jb21wYXJlVmFyaWFibGVJZGVudGlmaWVyKFZhcmlhYmxlSWRlbnRpdGlmZXIpO1xuXG4gICAgICAgICAgICBpZiAoZGVjbGFyZWRWYXJpYWJsZUNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aXRpZmVyKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZTtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZFZhcmlhYmxlc0J5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGxldCBkZWNsYXJlZFZhcmlhYmxlcztcblxuICAgIGRlY2xhcmVkVmFyaWFibGVzID0gdGhpcy5nZXREZWNsYXJlZFZhcmlhYmxlcygpO1xuXG4gICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBkZWNsYXJlZFZhcmlhYmxlcy5maWx0ZXIoKGRlY2xhcmVkVmFyaWFibGUpID0+IHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllciA9IGRlY2xhcmVkVmFyaWFibGUuY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgICBpZiAodmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVzO1xuICB9XG5cbiAgZmluZERlY2xhcmVkTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBkZWNsYXJlZE1ldGF2YXJpYWJsZXMgPSB0aGlzLmdldERlY2xhcmVkTWV0YXZhcmlhYmxlcygpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzLmZpbmQoKGRlY2xhcmVkTWV0YXZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWNsYXJlZE1ldGF2YXJpYWJsZUNvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lID0gZGVjbGFyZWRNZXRhdmFyaWFibGUuY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChkZWNsYXJlZE1ldGF2YXJpYWJsZUNvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRNZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpIHtcbiAgICBjb25zdCBwcm9jZWR1cmVzID0gdGhpcy5nZXRQcm9jZWR1cmVzKCksXG4gICAgICAgICAgcHJvY2VkdXJlID0gcHJvY2VkdXJlcy5maW5kKChwcm9jZWR1cmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb2NlZHVyZUNvbXBhcmVzVG9Qcm9jZWR1cmVOYW1lID0gcHJvY2VkdXJlLmNvbXBhcmVQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpO1xuXG4gICAgICAgICAgICBpZiAocHJvY2VkdXJlQ29tcGFyZXNUb1Byb2NlZHVyZU5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBwcm9jZWR1cmU7XG4gIH1cblxuICBmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpIHsgcmV0dXJuIGZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSk7IH1cblxuICBpc0xhYmVsUHJlc2VudEJ5TGFiZWxOb2RlKGxhYmVsTm9kZSkge1xuICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuZ2V0TGFiZWxzKCksXG4gICAgICBsYWJlbFByZXNlbnQgPSBsYWJlbHMuc29tZSgobGFiZWwpID0+IHtcbiAgICAgICAgY29uc3QgbGFiZWxOb2RlTWF0Y2hlcyA9IGxhYmVsLm1hdGNoTGFiZWxOb2RlKGxhYmVsTm9kZSk7XG5cbiAgICAgICAgaWYgKGxhYmVsTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gbGFiZWxQcmVzZW50O1xuICB9XG5cbiAgaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSwgaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5maW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKSxcbiAgICAgICAgICB0eXBlUHJlc2VudCA9ICh0eXBlICE9PSBudWxsKTtcblxuICAgIHJldHVybiB0eXBlUHJlc2VudDtcbiAgfVxuXG4gIGlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpbmRUeXBlQnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKSxcbiAgICAgICAgICB0eXBlUHJlc2VudCA9ICh0eXBlICE9PSBudWxsKTtcblxuICAgIHJldHVybiB0eXBlUHJlc2VudDtcbiAgfVxuXG4gIGlzVHlwZVByZWZpeFByZXNlbnRCeVR5cGVQcmVmaXhOYW1lKHR5cGVQcmVmaXhOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlUHJlZml4ID0gdGhpcy5maW5kVHlwZVByZWZpeEJ5VHlwZVByZWZpeE5hbWUodHlwZVByZWZpeE5hbWUsIGluY2x1ZGVSZWxlYXNlKSxcbiAgICAgICAgICB0eXBlUHJlZml4UHJlc2VudCA9ICh0eXBlUHJlZml4ICE9PSBudWxsKTtcblxuICAgIHJldHVybiB0eXBlUHJlZml4UHJlc2VudDtcbiAgfVxuXG4gIGlzRGVjbGFyZWRWYXJpYWJsZVByZXNlbnRCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICBjb25zdCBkZWNsYXJlZFZhcmlhYmxlID0gdGhpcy5maW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllciksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZVByZXNlbnQgPSAoZGVjbGFyZWRWYXJpYWJsZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZVByZXNlbnQ7XG4gIH1cblxuICBpc0RlY2xhcmVkTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgZGVjbGFyZWRNZXRhdmFyaWFibGUgPSB0aGlzLmZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSxcbiAgICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZVByZXNlbnQgPSAoZGVjbGFyZWRNZXRhdmFyaWFibGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkTWV0YXZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKSB7XG4gICAgY29uc3QgcHJvY2VkdXJlID0gdGhpcy5maW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpLFxuICAgICAgICAgIHByb2NlZHVyZVByZXNlbnQgPSAocHJvY2VkdXJlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVQcmVzZW50O1xuICB9XG5cbiAgaXNNZXRhTGV2ZWwoKSB7XG4gICAgY29uc3QgbWV0YUxFdmVsID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbWV0YUxFdmVsO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy50eXBlcyA9IFtdO1xuICAgIHRoaXMucnVsZXMgPSBbXTtcbiAgICB0aGlzLmF4aW9tcyA9IFtdO1xuICAgIHRoaXMubGVtbWFzID0gW107XG4gICAgdGhpcy5zY2hlbWFzID0gW107XG4gICAgdGhpcy50aGVvcmVtcyA9IFtdO1xuICAgIHRoaXMuZ2VuZXJhdG9ycyA9IFtdO1xuICAgIHRoaXMuY29uamVjdHVyZXMgPSBbXTtcbiAgICB0aGlzLmNvbWJpbmF0b3JzID0gW107XG4gICAgdGhpcy50eXBlQWxpYXNlcyA9IFtdO1xuICAgIHRoaXMudHlwZVByZWZpeGVzID0gW107XG4gICAgdGhpcy5jb25zdHJ1Y3RvcnMgPSBbXTtcbiAgICB0aGlzLmRlY2xhcmVkVmFyaWFibGVzID0gW107XG4gICAgdGhpcy5kZWNsYXJlZE1ldGF2YXJpYWJsZXMgPSBbXTtcbiAgfVxuXG4gIGNvbXBsZXRlKCkge1xuICAgIC8vL1xuICB9XG5cbiAgdmVyaWZ5RmlsZShmb3J3YXJkLCBiYWNrKSB7XG4gICAgcmV0dXJuIGlzb2xhdGUoKGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICAgIGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICAgIGZpbGVOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgICByZXR1cm4gdmVyaWZ5RmlsZShmaWxlTm9kZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgZm9yd2FyZCwgYmFjayk7XG4gIH1cblxuICBpbml0aWFsaXNlKCkge1xuICAgIGNvbnN0IGpzb24gPSB0aGlzLmdldEpTT04oKTtcblxuICAgIGlmIChqc29uID09PSBudWxsKSB7XG4gICAgICBzdXBlci5pbml0aWFsaXNlKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlQ29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgdGhpcy50eXBlcyA9IFtdO1xuXG4gICAgdHlwZXNGcm9tSlNPTihqc29uLCB0aGlzLnR5cGVzLCBmaWxlQ29udGV4dCk7XG5cbiAgICB0aGlzLmxlbW1hcyA9IGxlbW1hc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLnR5cGVBbGlhc2VzID0gdHlwZUFsaWFzZXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gICAgdGhpcy50eXBlUHJlZml4ZXMgPSB0eXBlUHJlZml4ZXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG5cbiAgICB0aGlzLmRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLmRlY2xhcmVkVmFyaWFibGVzID0gZGVjbGFyZWRWYXJpYWJsZXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gICAgdGhpcy5nZW5lcmF0b3JzID0gZ2VuZXJhdG9yc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLmNvbWJpbmF0b3JzID0gY29tYmluYXRvcnNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gICAgdGhpcy5jb25zdHJ1Y3RvcnMgPSBjb25zdHJ1Y3RvcnNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG5cbiAgICB0aGlzLnJ1bGVzID0gcnVsZXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gICAgdGhpcy5heGlvbXMgPSBheGlvbXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gICAgdGhpcy5zY2hlbWFzID0gc2NoZW1hc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLnRoZW9yZW1zID0gdGhlb3JlbXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gICAgdGhpcy5jb25qZWN0dXJlcyA9IGNvbmplY3R1cmVzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGxldCBqc29uO1xuXG4gICAgY29uc3QgdHlwZXNKU09OID0gdHlwZXNUb1R5cGVzSlNPTih0aGlzLnR5cGVzKSxcbiAgICAgICAgICBydWxlc0pTT04gPSBydWxlc1RvUnVsZXNKU09OKHRoaXMucnVsZXMpLFxuICAgICAgICAgIGxlbW1hc0pTT04gPSBsZW1tYXNUb0xlbW1hc0pTT04odGhpcy5sZW1tYXMpLFxuICAgICAgICAgIGF4aW9tc0pTT04gPSBheGlvbXNUb0F4aW9tc0pTT04odGhpcy5heGlvbXMpLFxuICAgICAgICAgIHNjaGVtYXNKU09OID0gc2NoZW1hc1RvU2NoZW1hc0pTT04odGhpcy5zY2hlbWFzKSxcbiAgICAgICAgICB0aGVvcmVtc0pTT04gPSB0aGVvcmVtc1RvVGhlb3JlbXNKU09OKHRoaXMudGhlb3JlbXMpLFxuICAgICAgICAgIGdlbmVyYXRvcnNKU09OID0gZ2VuZXJhdG9yc1RvR2VuZXJhdG9yc0pTT04odGhpcy5nZW5lcmF0b3JzKSxcbiAgICAgICAgICBjb25qZWN0dXJlc0pTT04gPSBjb25qZWN0dXJlc1RvQ29uamVjdHVyZXNKU09OKHRoaXMuY29uamVjdHVyZXMpLFxuICAgICAgICAgIGNvbWJpbmF0b3JzSlNPTiA9IGNvbWJpbmF0b3JzVG9Db21iaW5hdG9yc0pTT04odGhpcy5jb21iaW5hdG9ycyksXG4gICAgICAgICAgdHlwZUFsaWFzZXNKU09OID0gdHlwZUFsaWFzZXNUb1R5cGVBbGlhc2VzSlNPTih0aGlzLnR5cGVBbGlhc2VzKSxcbiAgICAgICAgICB0eXBlUHJlZml4ZXNKU09OID0gdHlwZVByZWZpeGVzVG9UeXBlUHJlZml4ZXNKU09OKHRoaXMudHlwZVByZWZpeGVzKSxcbiAgICAgICAgICBjb25zdHJ1Y3RvcnNKU09OID0gY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OKHRoaXMuY29uc3RydWN0b3JzKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlc0pTT04gPSBkZWNsYXJlZFZhcmlhYmxlc1RvRGVjbGFyZWRWYXJpYWJsZXNKU09OKHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04gPSBkZWNsYXJlZE1ldGF2YXJpYWJsZXNUb0RlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04odGhpcy5kZWNsYXJlZE1ldGF2YXJpYWJsZXMpLFxuICAgICAgICAgIGZpbGVDb250ZW50ID0gdGhpcy5nZXRGaWxlQ29udGVudCgpLFxuICAgICAgICAgIGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIHR5cGVzID0gdHlwZXNKU09OLCAgLy8vXG4gICAgICAgICAgcnVsZXMgPSBydWxlc0pTT04sICAvLy9cbiAgICAgICAgICBsZW1tYXMgPSBsZW1tYXNKU09OLCAgLy8vXG4gICAgICAgICAgYXhpb21zID0gYXhpb21zSlNPTiwgIC8vL1xuICAgICAgICAgIHNjaGVtYXMgPSBzY2hlbWFzSlNPTiwgIC8vL1xuICAgICAgICAgIHRoZW9yZW1zID0gdGhlb3JlbXNKU09OLCAgLy8vXG4gICAgICAgICAgZ2VuZXJhdG9ycyA9IGdlbmVyYXRvcnNKU09OLCAgLy8vXG4gICAgICAgICAgY29uamVjdHVyZXMgPSBjb25qZWN0dXJlc0pTT04sICAvLy9cbiAgICAgICAgICBjb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzSlNPTiwgIC8vL1xuICAgICAgICAgIHR5cGVBbGlhc2VzID0gdHlwZUFsaWFzZXNKU09OLCAgLy8vXG4gICAgICAgICAgdHlwZVByZWZpeGVzID0gdHlwZVByZWZpeGVzSlNPTiwgIC8vL1xuICAgICAgICAgIGNvbnN0cnVjdG9ycyA9IGNvbnN0cnVjdG9yc0pTT04sICAvLy9cbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IGRlY2xhcmVkVmFyaWFibGVzSlNPTiwgIC8vL1xuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT047ICAvLy9cblxuICAgIGpzb24gPSB7XG4gICAgICBmaWxlQ29udGVudCxcbiAgICAgIGZpbGVQYXRoLFxuICAgICAgdHlwZXMsXG4gICAgICBydWxlcyxcbiAgICAgIGxlbW1hcyxcbiAgICAgIGF4aW9tcyxcbiAgICAgIHNjaGVtYXMsXG4gICAgICB0aGVvcmVtcyxcbiAgICAgIGdlbmVyYXRvcnMsXG4gICAgICBjb25qZWN0dXJlcyxcbiAgICAgIGNvbWJpbmF0b3JzLFxuICAgICAgdHlwZUFsaWFzZXMsXG4gICAgICB0eXBlUHJlZml4ZXMsXG4gICAgICBjb25zdHJ1Y3RvcnMsXG4gICAgICBkZWNsYXJlZFZhcmlhYmxlcyxcbiAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlc1xuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRmlsZShmaWxlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgcmVsZWFzZUNvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICBjb21iaW5lZEN1c3RvbUdyYW1tYXIgPSByZWxlYXNlQ29udGV4dC5nZXRDb21iaW5lZEN1c3RvbUdyYW1tYXIoKSxcbiAgICAgICAgICBub21pbmFsTGV4ZXIgPSBub21pbmFsTGV4ZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyKE5vbWluYWxMZXhlciwgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgICBub21pbmFsUGFyc2VyID0gbm9taW5hbFBhcnNlckZyb21Db21iaW5lZEN1c3RvbUdyYW1tYXIoTm9taW5hbFBhcnNlciwgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgICBsZXhlciA9IG5vbWluYWxMZXhlciwgLy8vXG4gICAgICAgICAgcGFyc2VyID0gbm9taW5hbFBhcnNlciwgLy8vXG4gICAgICAgICAgdHlwZXMgPSBbXSxcbiAgICAgICAgICBydWxlcyA9IFtdLFxuICAgICAgICAgIGF4aW9tcyA9IFtdLFxuICAgICAgICAgIGxlbW1hcyA9IFtdLFxuICAgICAgICAgIHNjaGVtYXMgPSBbXSxcbiAgICAgICAgICB0aGVvcmVtcyA9IFtdLFxuICAgICAgICAgIGdlbmVyYXRvcnMgPSBbXSxcbiAgICAgICAgICBjb25qZWN0dXJlcyA9IFtdLFxuICAgICAgICAgIGNvbWJpbmF0b3JzID0gW10sXG4gICAgICAgICAgdHlwZUFsaWFzZXMgPSBbXSxcbiAgICAgICAgICB0eXBlUHJlZml4ZXMgPSBbXSxcbiAgICAgICAgICBjb25zdHJ1Y3RvcnMgPSBbXSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IFtdLFxuICAgICAgICAgIG5vbWluYWxGaWxlQ29udGV4dCA9IEZpbGVDb250ZXh0LmZyb21GaWxlKE5vbWluYWxGaWxlQ29udGV4dCwgZmlsZSwgbGV4ZXIsIHBhcnNlciwgdHlwZXMsIHJ1bGVzLCBheGlvbXMsIGxlbW1hcywgc2NoZW1hcywgdGhlb3JlbXMsIGdlbmVyYXRvcnMsIGNvbmplY3R1cmVzLCBjb21iaW5hdG9ycywgdHlwZUFsaWFzZXMsIHR5cGVQcmVmaXhlcywgY29uc3RydWN0b3JzLCBkZWNsYXJlZFZhcmlhYmxlcywgZGVjbGFyZWRNZXRhdmFyaWFibGVzLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBub21pbmFsRmlsZUNvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgICAgY29tYmluZWRDdXN0b21HcmFtbWFyID0gcmVsZWFzZUNvbnRleHQuZ2V0Q29tYmluZWRDdXN0b21HcmFtbWFyKCksXG4gICAgICAgICAgbm9taW5hbExleGVyID0gbm9taW5hbExleGVyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hcihOb21pbmFsTGV4ZXIsIGNvbWJpbmVkQ3VzdG9tR3JhbW1hciksXG4gICAgICAgICAgbm9taW5hbFBhcnNlciA9IG5vbWluYWxQYXJzZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyKE5vbWluYWxQYXJzZXIsIGNvbWJpbmVkQ3VzdG9tR3JhbW1hciksXG4gICAgICAgICAgbGV4ZXIgPSBub21pbmFsTGV4ZXIsIC8vL1xuICAgICAgICAgIHBhcnNlciA9IG5vbWluYWxQYXJzZXIsIC8vL1xuICAgICAgICAgIHR5cGVzID0gbnVsbCxcbiAgICAgICAgICBydWxlcyA9IG51bGwsXG4gICAgICAgICAgYXhpb21zID0gbnVsbCxcbiAgICAgICAgICBsZW1tYXMgPSBudWxsLFxuICAgICAgICAgIHNjaGVtYXMgPSBudWxsLFxuICAgICAgICAgIHRoZW9yZW1zID0gbnVsbCxcbiAgICAgICAgICBnZW5lcmF0b3JzID0gbnVsbCxcbiAgICAgICAgICBjb25qZWN0dXJlcyA9IG51bGwsXG4gICAgICAgICAgY29tYmluYXRvcnMgPSBudWxsLFxuICAgICAgICAgIHR5cGVBbGlhc2VzID0gbnVsbCxcbiAgICAgICAgICB0eXBlUHJlZml4ZXMgPSBudWxsLFxuICAgICAgICAgIGNvbnN0cnVjdG9ycyA9IG51bGwsXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBudWxsLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IG51bGwsXG4gICAgICAgICAgbm9taW5hbEZpbGVDb250ZXh0ID0gRmlsZUNvbnRleHQuZnJvbUpTT04oTm9taW5hbEZpbGVDb250ZXh0LCBqc29uLCBsZXhlciwgcGFyc2VyLCB0eXBlcywgcnVsZXMsIGF4aW9tcywgbGVtbWFzLCBzY2hlbWFzLCB0aGVvcmVtcywgZ2VuZXJhdG9ycywgY29uamVjdHVyZXMsIGNvbWJpbmF0b3JzLCB0eXBlQWxpYXNlcywgdHlwZVByZWZpeGVzLCBjb25zdHJ1Y3RvcnMsIGRlY2xhcmVkVmFyaWFibGVzLCBkZWNsYXJlZE1ldGF2YXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG5vbWluYWxGaWxlQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIk5vbWluYWxGaWxlQ29udGV4dCIsInB1c2giLCJhcnJheVV0aWxpdGllcyIsIm5vbWluYWxMZXhlckZyb21Db21iaW5lZEN1c3RvbUdyYW1tYXIiLCJub21pbmFsUGFyc2VyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hciIsIm5vbWluYWxVdGlsaXRpZXMiLCJGaWxlQ29udGV4dCIsImNvbnRleHQiLCJmaWxlQ29udGVudCIsImZpbGVQYXRoIiwidG9rZW5zIiwibm9kZSIsImpzb24iLCJsZXhlciIsInBhcnNlciIsInR5cGVzIiwicnVsZXMiLCJheGlvbXMiLCJsZW1tYXMiLCJzY2hlbWFzIiwidGhlb3JlbXMiLCJnZW5lcmF0b3JzIiwiY29uamVjdHVyZXMiLCJjb21iaW5hdG9ycyIsInR5cGVBbGlhc2VzIiwidHlwZVByZWZpeGVzIiwiY29uc3RydWN0b3JzIiwiZGVjbGFyZWRWYXJpYWJsZXMiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZXMiLCJnZXRMZXhlciIsImdldFBhcnNlciIsImdldExhYmVscyIsImluY2x1ZGVSZWxlYXNlIiwibGFiZWxzIiwicmVsZWFzZUNvbnRleHRMYWJlbHMiLCJmb3JFYWNoIiwicnVsZSIsInJ1bGVMYWJlbHMiLCJheGlvbSIsImF4aW9tTGFiZWxzIiwibGVtbWEiLCJsZW1tYUxhYmVscyIsInRoZW9yZW0iLCJ0aGVvcmVtTGFiZWxzIiwiY29uamVjdHVyZSIsImNvbmplY3R1cmVMYWJlbHMiLCJzY2hlbWEiLCJzY2hlbWFMYWJlbCIsImdldExhYmVsIiwiZ2V0VHlwZXMiLCJpbmNsdWRlRGVwZW5kZW5jaWVzIiwiZ2V0UnVsZXMiLCJnZXRBeGlvbXMiLCJnZXRMZW1tYXMiLCJnZXRTY2hlbWFzIiwiZ2V0VGhlb3JlbXMiLCJnZXRHZW5lcmF0b3JzIiwiZ2V0Q29uamVjdHVyZXMiLCJnZXRDb21iaW5hdG9ycyIsImdldFR5cGVBbGlhc2VzIiwiZ2V0VHlwZVByZWZpeGVzIiwiZ2V0Q29uc3RydWN0b3JzIiwiZ2V0UHJvY2VkdXJlcyIsInByb2NlZHVyZXMiLCJnZXRDbGFpbXMiLCJjbGFpbXMiLCJnZXREZWNsYXJlZFZhcmlhYmxlcyIsImdldERlY2xhcmVkTWV0YXZhcmlhYmxlcyIsImdldFRlcm1zIiwidGVybXMiLCJnZXRMaW5rcyIsImxpbmtzIiwiZ2V0RnJhbWVzIiwiZnJhbWVzIiwiZ2V0RXF1YWxpdGllcyIsImVxdWFsaXRpZXMiLCJnZXRBc3NlcnRpb25zIiwiYXNzZXJ0aW9ucyIsImdldFN0YXRlbWVudHMiLCJzdGF0ZW1lbnRzIiwiZ2V0UGFyYW1ldGVycyIsInBhcmFtZXRlcnMiLCJnZXRTaWduYXR1cmVzIiwic2lnbmF0dXJlcyIsImdldFJlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwiZ2V0QXNzdW1wdGlvbnMiLCJhc3N1bXB0aW9ucyIsImdldE1ldGF2YXJpYWJsZXMiLCJtZXRhdmFyaWFibGVzIiwiZ2V0U3Vic3RpdHV0aW9ucyIsInN1YnN0aXR1dGlvbnMiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2VzIiwicHJvY2VkdXJlUmVmZXJlbmNlcyIsImdldERlcml2ZWRTdWJzdGl0dXRpb25zIiwiZGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJnZXRFcXVpdmFsZW5jZXMiLCJlcXVpdmFsZW5jZXMiLCJnZXRGYWN0T3JTdWJwcm9vZnMiLCJmYWN0T3JTdWJwcm9vZnMiLCJhZGRUeXBlIiwidHlwZSIsImdldEZpbGVQYXRoIiwidHlwZVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiYWRkUnVsZSIsInJ1bGVTdHJpbmciLCJhZGRBeGlvbSIsImF4aW9tU3RyaW5nIiwiYWRkTGVtbWEiLCJsZW1tYVN0cmluZyIsImFkZFNjaGVtYSIsInNjaGVtYVN0cmluZyIsImFkZFRoZW9yZW0iLCJ0aGVvcmVtU3RyaW5nIiwiYWRkR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiZ2VuZXJhdG9yU3RyaW5nIiwiYWRkQ29uamVjdHVyZSIsIm9jbmplY3R1cmVTdHJpbmciLCJhZGRDb21iaW5hdG9yIiwiY29tYmluYXRvciIsImNvbWJpbmF0b3JTdHJpbmciLCJhZGRUeXBlQWxpYXMiLCJ0eXBlQWxpYXMiLCJ0eXBlQWxpYXNTdHJpbmciLCJhZGRUeXBlUHJlZml4IiwidHlwZVByZWZpeCIsInR5cGVQcmVmaXhTdHJpbmciLCJhZGRDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3JTdHJpbmciLCJhZGREZWNsYXJlZFZhcmlhYmxlIiwiZGVjbGFyZWRWYXJpYWJsZSIsImRlY2xhcmVkVmFyaWFibGVTdHJpbmciLCJhZGREZWNsYXJlZE1ldGF2YXJpYWJsZSIsImRlY2xhcmVkTWV0YXZhcmlhYmxlIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVTdHJpbmciLCJmaW5kUnVsZUJ5UmVmZXJlbmNlIiwicmVmZXJlbmNlIiwibWV0YXZhcmlhYmxlTm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kQXhpb21CeUxpbmsiLCJsaW5rIiwiZmluZENsYWltQnlSZWZlcmVuY2UiLCJjbGFpbSIsImZpbmRhbGlhc2VkVHlwZUJ5VHlwZU5hbWUiLCJ0eXBlTmFtZSIsImFsaWFzZWRUeXBlIiwic29tZSIsInR5cGVOYW1lQ29tcGFyZXMiLCJjb21wYXJlVHlwZU5hbWUiLCJnZXRBbGlhc2VkVHlwZSIsImZpbmRUeXBlQnlUeXBlTmFtZSIsImZpbmRUeXBlIiwidHlwZUNvbXBhcmVzVG9UeXBlTmFtZSIsImZpbmRUeXBlc0J5VHlwZU5hbWUiLCJmaW5kVHlwZXMiLCJmaW5kVHlwZUJ5UHJlZml4ZWRUeXBlTmFtZSIsInByZWZpeGVkVHlwZU5hbWUiLCJ0eXBlQ29tcGFyZXNUb1ByZWZpeGVkVHlwZU5hbWUiLCJjb21wYXJlUHJlZml4ZWRUeXBlTmFtZSIsImZpbmRUeXBlUHJlZml4QnlUeXBlUHJlZml4TmFtZSIsInR5cGVQcmVmaXhOYW1lIiwidHlwZVByZWZpeENvbXBhcmVzVG9UeXBlUHJlZml4TmFtZSIsImNvbXBhcmVUeXBlUHJlZml4TmFtZSIsImZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIiLCJWYXJpYWJsZUlkZW50aXRpZmVyIiwiZGVjbGFyZWRWYXJpYWJsZUNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aXRpZmVyIiwiY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllciIsImZpbmREZWNsYXJlZFZhcmlhYmxlc0J5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZmlsdGVyIiwidmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGlmaWVyIiwiZmluZERlY2xhcmVkTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsImRlY2xhcmVkTWV0YXZhcmlhYmxlQ29tcGFyZXNUb01ldGF2YXJpYWJsZU5hbWUiLCJjb21wYXJlTWV0YXZhcmlhYmxlTmFtZSIsImZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUiLCJwcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlIiwicHJvY2VkdXJlQ29tcGFyZXNUb1Byb2NlZHVyZU5hbWUiLCJjb21wYXJlUHJvY2VkdXJlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwibWV0YVR5cGVOYW1lIiwiaXNMYWJlbFByZXNlbnRCeUxhYmVsTm9kZSIsImxhYmVsTm9kZSIsImxhYmVsUHJlc2VudCIsImxhYmVsIiwibGFiZWxOb2RlTWF0Y2hlcyIsIm1hdGNoTGFiZWxOb2RlIiwiaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUiLCJ0eXBlUHJlc2VudCIsImlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUiLCJpc1R5cGVQcmVmaXhQcmVzZW50QnlUeXBlUHJlZml4TmFtZSIsInR5cGVQcmVmaXhQcmVzZW50IiwiaXNEZWNsYXJlZFZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVJZGVudGlmaWVyIiwiZGVjbGFyZWRWYXJpYWJsZVByZXNlbnQiLCJpc0RlY2xhcmVkTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZSIsImRlY2xhcmVkTWV0YXZhcmlhYmxlUHJlc2VudCIsImlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZSIsInByb2NlZHVyZVByZXNlbnQiLCJpc01ldGFMZXZlbCIsIm1ldGFMRXZlbCIsImNsZWFyIiwiY29tcGxldGUiLCJ2ZXJpZnlGaWxlIiwiZm9yd2FyZCIsImJhY2siLCJpc29sYXRlIiwiZ2V0Tm9kZSIsImZpbGVOb2RlIiwiaW5pdGlhbGlzZSIsImdldEpTT04iLCJmaWxlQ29udGV4dCIsInR5cGVzRnJvbUpTT04iLCJsZW1tYXNGcm9tSlNPTiIsInR5cGVBbGlhc2VzRnJvbUpTT04iLCJ0eXBlUHJlZml4ZXNGcm9tSlNPTiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlc0Zyb21KU09OIiwiZGVjbGFyZWRWYXJpYWJsZXNGcm9tSlNPTiIsImdlbmVyYXRvcnNGcm9tSlNPTiIsImNvbWJpbmF0b3JzRnJvbUpTT04iLCJjb25zdHJ1Y3RvcnNGcm9tSlNPTiIsInJ1bGVzRnJvbUpTT04iLCJheGlvbXNGcm9tSlNPTiIsInNjaGVtYXNGcm9tSlNPTiIsInRoZW9yZW1zRnJvbUpTT04iLCJjb25qZWN0dXJlc0Zyb21KU09OIiwidG9KU09OIiwidHlwZXNKU09OIiwidHlwZXNUb1R5cGVzSlNPTiIsInJ1bGVzSlNPTiIsInJ1bGVzVG9SdWxlc0pTT04iLCJsZW1tYXNKU09OIiwibGVtbWFzVG9MZW1tYXNKU09OIiwiYXhpb21zSlNPTiIsImF4aW9tc1RvQXhpb21zSlNPTiIsInNjaGVtYXNKU09OIiwic2NoZW1hc1RvU2NoZW1hc0pTT04iLCJ0aGVvcmVtc0pTT04iLCJ0aGVvcmVtc1RvVGhlb3JlbXNKU09OIiwiZ2VuZXJhdG9yc0pTT04iLCJnZW5lcmF0b3JzVG9HZW5lcmF0b3JzSlNPTiIsImNvbmplY3R1cmVzSlNPTiIsImNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04iLCJjb21iaW5hdG9yc0pTT04iLCJjb21iaW5hdG9yc1RvQ29tYmluYXRvcnNKU09OIiwidHlwZUFsaWFzZXNKU09OIiwidHlwZUFsaWFzZXNUb1R5cGVBbGlhc2VzSlNPTiIsInR5cGVQcmVmaXhlc0pTT04iLCJ0eXBlUHJlZml4ZXNUb1R5cGVQcmVmaXhlc0pTT04iLCJjb25zdHJ1Y3RvcnNKU09OIiwiY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OIiwiZGVjbGFyZWRWYXJpYWJsZXNKU09OIiwiZGVjbGFyZWRWYXJpYWJsZXNUb0RlY2xhcmVkVmFyaWFibGVzSlNPTiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04iLCJkZWNsYXJlZE1ldGF2YXJpYWJsZXNUb0RlY2xhcmVkTWV0YXZhcmlhYmxlc0pTT04iLCJnZXRGaWxlQ29udGVudCIsImZyb21GaWxlIiwiZmlsZSIsInJlbGVhc2VDb250ZXh0IiwiY29tYmluZWRDdXN0b21HcmFtbWFyIiwiZ2V0Q29tYmluZWRDdXN0b21HcmFtbWFyIiwibm9taW5hbExleGVyIiwiTm9taW5hbExleGVyIiwibm9taW5hbFBhcnNlciIsIk5vbWluYWxQYXJzZXIiLCJub21pbmFsRmlsZUNvbnRleHQiLCJmcm9tSlNPTiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBNENBOzs7ZUFBcUJBOzs7MkJBMUNVO2dDQUNlOzhEQUVyQjsrREFDQzt5QkFFRjt3QkFDRztzQkFDUzsyQkFDTztzQkE0QnNCOzs7Ozs7QUFFakUsTUFBTSxFQUFFQyxJQUFJLEVBQUUsR0FBR0MseUJBQWMsRUFDekIsRUFBRUMscUNBQXFDLEVBQUVDLHNDQUFzQyxFQUFFLEdBQUdDLGdDQUFnQjtBQUUzRixNQUFNTCwyQkFBMkJNLDJCQUFXO0lBQ3pELFlBQVlDLE9BQU8sRUFBRUMsV0FBVyxFQUFFQyxRQUFRLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxNQUFNLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxFQUFFQyxVQUFVLEVBQUVDLFdBQVcsRUFBRUMsV0FBVyxFQUFFQyxXQUFXLEVBQUVDLFlBQVksRUFBRUMsWUFBWSxFQUFFQyxpQkFBaUIsRUFBRUMscUJBQXFCLENBQUU7UUFDdlAsS0FBSyxDQUFDckIsU0FBU0MsYUFBYUMsVUFBVUMsUUFBUUMsTUFBTUM7UUFF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
|
|
537
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0L2ZpbGUvbm9taW5hbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBGaWxlQ29udGV4dCwgbm9taW5hbFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IE5vbWluYWxMZXhlciBmcm9tIFwiLi4vLi4vbm9taW5hbC9sZXhlclwiO1xuaW1wb3J0IE5vbWluYWxQYXJzZXIgZnJvbSBcIi4uLy4uL25vbWluYWwvcGFyc2VyXCI7XG5cbmltcG9ydCB7IGlzb2xhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHZlcmlmeUZpbGUgfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy92ZXJpZnlcIjtcbmltcG9ydCB7IGZpbmRUeXBlLCBmaW5kVHlwZXMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3R5cGVcIjtcbmltcG9ydCB7IGZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIH0gZnJvbSBcIi4uLy4uL21ldGFUeXBlc1wiO1xuaW1wb3J0IHsgdHlwZXNGcm9tSlNPTixcbiAgICAgICAgIHJ1bGVzRnJvbUpTT04sXG4gICAgICAgICBsZW1tYXNGcm9tSlNPTixcbiAgICAgICAgIGF4aW9tc0Zyb21KU09OLFxuICAgICAgICAgc2NoZW1hc0Zyb21KU09OLFxuICAgICAgICAgdHlwZXNUb1R5cGVzSlNPTixcbiAgICAgICAgIHRoZW9yZW1zRnJvbUpTT04sXG4gICAgICAgICBydWxlc1RvUnVsZXNKU09OLFxuICAgICAgICAgbGVtbWFzVG9MZW1tYXNKU09OLFxuICAgICAgICAgYXhpb21zVG9BeGlvbXNKU09OLFxuICAgICAgICAgZ2VuZXJhdG9yc0Zyb21KU09OLFxuICAgICAgICAgY29uamVjdHVyZXNGcm9tSlNPTixcbiAgICAgICAgIGNvbWJpbmF0b3JzRnJvbUpTT04sXG4gICAgICAgICB0eXBlQWxpYXNlc0Zyb21KU09OLFxuICAgICAgICAgdHlwZVByZWZpeGVzRnJvbUpTT04sXG4gICAgICAgICBjb25zdHJ1Y3RvcnNGcm9tSlNPTixcbiAgICAgICAgIHNjaGVtYXNUb1NjaGVtYXNKU09OLFxuICAgICAgICAgdGhlb3JlbXNUb1RoZW9yZW1zSlNPTixcbiAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzRnJvbUpTT04sXG4gICAgICAgICBnZW5lcmF0b3JzVG9HZW5lcmF0b3JzSlNPTixcbiAgICAgICAgIGNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04sXG4gICAgICAgICBjb21iaW5hdG9yc1RvQ29tYmluYXRvcnNKU09OLFxuICAgICAgICAgdHlwZUFsaWFzZXNUb1R5cGVBbGlhc2VzSlNPTixcbiAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlc0Zyb21KU09OLFxuICAgICAgICAgdHlwZVByZWZpeGVzVG9UeXBlUHJlZml4ZXNKU09OLFxuICAgICAgICAgY29uc3RydWN0b3JzVG9Db25zdHJ1Y3RvcnNKU09OLFxuICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXNUb0RlY2xhcmVkVmFyaWFibGVzSlNPTixcbiAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlc1RvRGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IHB1c2ggfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBub21pbmFsTGV4ZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyLCBub21pbmFsUGFyc2VyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hciB9ID0gbm9taW5hbFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9taW5hbEZpbGVDb250ZXh0IGV4dGVuZHMgRmlsZUNvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBmaWxlQ29udGVudCwgZmlsZVBhdGgsIHRva2Vucywgbm9kZSwganNvbiwgbGV4ZXIsIHBhcnNlciwgdHlwZXMsIHJ1bGVzLCBheGlvbXMsIGxlbW1hcywgc2NoZW1hcywgdGhlb3JlbXMsIGdlbmVyYXRvcnMsIGNvbmplY3R1cmVzLCBjb21iaW5hdG9ycywgdHlwZUFsaWFzZXMsIHR5cGVQcmVmaXhlcywgY29uc3RydWN0b3JzLCBkZWNsYXJlZFZhcmlhYmxlcywgZGVjbGFyZWRNZXRhdmFyaWFibGVzKSB7XG4gICAgc3VwZXIoY29udGV4dCwgZmlsZUNvbnRlbnQsIGZpbGVQYXRoLCB0b2tlbnMsIG5vZGUsIGpzb24pO1xuXG4gICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5maWxlUGF0aCA9IGZpbGVQYXRoO1xuICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgdGhpcy50eXBlcyA9IHR5cGVzO1xuICAgIHRoaXMucnVsZXMgPSBydWxlcztcbiAgICB0aGlzLmF4aW9tcyA9IGF4aW9tcztcbiAgICB0aGlzLmxlbW1hcyA9IGxlbW1hcztcbiAgICB0aGlzLnNjaGVtYXMgPSBzY2hlbWFzO1xuICAgIHRoaXMudGhlb3JlbXMgPSB0aGVvcmVtcztcbiAgICB0aGlzLmdlbmVyYXRvcnMgPSBnZW5lcmF0b3JzO1xuICAgIHRoaXMuY29uamVjdHVyZXMgPSBjb25qZWN0dXJlcztcbiAgICB0aGlzLmNvbWJpbmF0b3JzID0gY29tYmluYXRvcnM7XG4gICAgdGhpcy50eXBlQWxpYXNlcyA9IHR5cGVBbGlhc2VzO1xuICAgIHRoaXMudHlwZVByZWZpeGVzID0gdHlwZVByZWZpeGVzO1xuICAgIHRoaXMuY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzO1xuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMgPSBkZWNsYXJlZFZhcmlhYmxlcztcbiAgICB0aGlzLmRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldExleGVyKCkge1xuICAgIHJldHVybiB0aGlzLmxleGVyO1xuICB9XG5cbiAgZ2V0UGFyc2VyKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlcjtcbiAgfVxuXG4gIGdldExhYmVscyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBsYWJlbHMgPSBbXTtcblxuICAgIGlmIChpbmNsdWRlUmVsZWFzZSkge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRMYWJlbHMgPSB0aGlzLmNvbnRleHQuZ2V0TGFiZWxzKCk7XG5cbiAgICAgIHB1c2gobGFiZWxzLCByZWxlYXNlQ29udGV4dExhYmVscyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucnVsZXMuZm9yRWFjaCgocnVsZSkgPT4ge1xuICAgICAgICBjb25zdCBydWxlTGFiZWxzID0gcnVsZS5nZXRMYWJlbHMoKTtcblxuICAgICAgICBwdXNoKGxhYmVscywgcnVsZUxhYmVscyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5heGlvbXMuZm9yRWFjaCgoYXhpb20pID0+IHtcbiAgICAgICAgY29uc3QgYXhpb21MYWJlbHMgPSBheGlvbS5nZXRMYWJlbHMoKTtcblxuICAgICAgICBwdXNoKGxhYmVscywgYXhpb21MYWJlbHMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubGVtbWFzLmZvckVhY2goKGxlbW1hKSA9PiB7XG4gICAgICAgIGNvbnN0IGxlbW1hTGFiZWxzID0gbGVtbWEuZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgcHVzaChsYWJlbHMsIGxlbW1hTGFiZWxzKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnRoZW9yZW1zLmZvckVhY2goKHRoZW9yZW0pID0+IHtcbiAgICAgICAgY29uc3QgdGhlb3JlbUxhYmVscyA9IHRoZW9yZW0uZ2V0TGFiZWxzKCk7XG5cbiAgICAgICAgcHVzaChsYWJlbHMsIHRoZW9yZW1MYWJlbHMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY29uamVjdHVyZXMuZm9yRWFjaCgoY29uamVjdHVyZSkgPT4ge1xuICAgICAgICBjb25zdCBjb25qZWN0dXJlTGFiZWxzID0gY29uamVjdHVyZS5nZXRMYWJlbHMoKTtcblxuICAgICAgICBwdXNoKGxhYmVscywgY29uamVjdHVyZUxhYmVscyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zY2hlbWFzLmZvckVhY2goKHNjaGVtYSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWFMYWJlbCA9IHNjaGVtYS5nZXRMYWJlbCgpO1xuXG4gICAgICAgIGxhYmVscy5wdXNoKHNjaGVtYUxhYmVsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsYWJlbHM7XG4gIH1cblxuICBnZXRUeXBlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRUeXBlcyhpbmNsdWRlRGVwZW5kZW5jaWVzKSA6XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlcztcblxuICAgIHJldHVybiB0eXBlcztcbiAgfVxuXG4gIGdldFJ1bGVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHJ1bGVzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0UnVsZXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5ydWxlcztcblxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIGdldEF4aW9tcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBheGlvbXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0QXhpb21zKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF4aW9tcztcblxuICAgIHJldHVybiBheGlvbXM7XG4gIH1cblxuICBnZXRMZW1tYXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgbGVtbWFzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldExlbW1hcygpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW1tYXM7XG5cbiAgICByZXR1cm4gbGVtbWFzO1xuICB9XG5cbiAgZ2V0U2NoZW1hcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBzY2hlbWFzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRTY2hlbWFzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2hlbWFzO1xuXG4gICAgcmV0dXJuIHNjaGVtYXM7XG4gIH1cblxuICBnZXRUaGVvcmVtcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCB0aGVvcmVtcyA9IGluY2x1ZGVSZWxlYXNlID9cbiAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldFRoZW9yZW1zKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhlb3JlbXM7XG5cbiAgICByZXR1cm4gdGhlb3JlbXM7XG4gIH1cblxuICBnZXRHZW5lcmF0b3JzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGdlbmVyYXRvcnMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldEdlbmVyYXRvcnMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRvcnM7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9ycztcbiAgfVxuXG4gIGdldENvbmplY3R1cmVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbmplY3R1cmVzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29uamVjdHVyZXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25qZWN0dXJlcztcblxuICAgIHJldHVybiBjb25qZWN0dXJlcztcbiAgfVxuXG4gIGdldENvbWJpbmF0b3JzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbWJpbmF0b3JzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29tYmluYXRvcnMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21iaW5hdG9ycztcblxuICAgIHJldHVybiBjb21iaW5hdG9ycztcbiAgfVxuXG4gIGdldFR5cGVBbGlhc2VzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVBbGlhc2VzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0VHlwZUFsaWFzZXMoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlQWxpYXNlcztcblxuICAgIHJldHVybiB0eXBlQWxpYXNlcztcbiAgfVxuXG4gIGdldFR5cGVQcmVmaXhlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZVByZWZpeGVzID0gaW5jbHVkZVJlbGVhc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmdldFR5cGVQcmVmaXhlcyhpbmNsdWRlRGVwZW5kZW5jaWVzKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZVByZWZpeGVzO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXhlcztcbiAgfVxuXG4gIGdldENvbnN0cnVjdG9ycyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9ycztcblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcnM7XG4gIH1cblxuICBnZXRQcm9jZWR1cmVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHByb2NlZHVyZXMgPSBpbmNsdWRlUmVsZWFzZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5nZXRQcm9jZWR1cmVzKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7ICAvLy9cblxuICAgIHJldHVybiBwcm9jZWR1cmVzO1xuICB9XG5cbiAgZ2V0Q2xhaW1zKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGxlbW1hcyA9IHRoaXMuZ2V0TGVtbWFzKGluY2x1ZGVSZWxlYXNlKSxcbiAgICAgICAgICBheGlvbXMgPSB0aGlzLmdldEF4aW9tcyhpbmNsdWRlUmVsZWFzZSksXG4gICAgICAgICAgdGhlb3JlbXMgPSB0aGlzLmdldFRoZW9yZW1zKGluY2x1ZGVSZWxlYXNlKSxcbiAgICAgICAgICBjb25qZWN0dXJlcyA9IHRoaXMuZ2V0Q29uamVjdHVyZXMoaW5jbHVkZVJlbGVhc2UpLFxuICAgICAgICAgIGNsYWltcyA9IFtcbiAgICAgICAgICAgIC4uLmxlbW1hcyxcbiAgICAgICAgICAgIC4uLmF4aW9tcyxcbiAgICAgICAgICAgIC4uLnRoZW9yZW1zLFxuICAgICAgICAgICAgLi4uY29uamVjdHVyZXNcbiAgICAgICAgICBdO1xuXG4gICAgcmV0dXJuIGNsYWltcztcbiAgfVxuXG4gIGdldERlY2xhcmVkVmFyaWFibGVzKGRlY2xhcmVkVmFyaWFibGVzID0gW10pIHtcbiAgICBwdXNoKGRlY2xhcmVkVmFyaWFibGVzLCB0aGlzLmRlY2xhcmVkVmFyaWFibGVzKTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlcztcbiAgfVxuXG4gIGdldERlY2xhcmVkTWV0YXZhcmlhYmxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJlZE1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBnZXRUZXJtcyh0ZXJtcyA9IFtdKSB7XG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0TGlua3MobGlua3MgPSBbXSkge1xuICAgIHJldHVybiBsaW5rcztcbiAgfVxuXG4gIGdldEZyYW1lcyhmcmFtZXMgPSBbXSkge1xuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zID0gW10pIHtcbiAgICByZXR1cm4gYXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldFN0YXRlbWVudHMoc3RhdGVtZW50cyA9IFtdKSB7XG4gICAgcmV0dXJuIHN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMgPSBbXSkge1xuICAgIHJldHVybiBwYXJhbWV0ZXJzO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlcyhzaWduYXR1cmVzID0gW10pIHtcbiAgICByZXR1cm4gc2lnbmF0dXJlcztcbiAgfVxuXG4gIGdldFJlZmVyZW5jZXMocmVmZXJlbmNlcyA9IFtdKSB7XG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyA9IFtdKSB7XG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzID0gW10pIHtcbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRQcm9jZWR1cmVSZWZlcmVuY2VzKHByb2NlZHVyZVJlZmVyZW5jZXMgPSBbXSkge1xuICAgIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2VzO1xuICB9XG5cbiAgZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldEVxdWl2YWxlbmNlcygpIHtcbiAgICBjb25zdCBlcXVpdmFsZW5jZXMgPSBbXTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBnZXRGYWN0T3JTdWJwcm9vZnMoKSB7XG4gICAgY29uc3QgZmFjdE9yU3VicHJvb2ZzID0gW107XG5cbiAgICByZXR1cm4gZmFjdE9yU3VicHJvb2ZzO1xuICB9XG5cbiAgYWRkVHlwZSh0eXBlKSB7XG4gICAgdGhpcy50eXBlcy5wdXNoKHR5cGUpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRSdWxlKHJ1bGUpIHtcbiAgICB0aGlzLnJ1bGVzLnB1c2gocnVsZSk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBydWxlU3RyaW5nID0gcnVsZS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZEF4aW9tKGF4aW9tKSB7XG4gICAgdGhpcy5heGlvbXMucHVzaChheGlvbSk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICBheGlvbVN0cmluZyA9IGF4aW9tLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20gdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRMZW1tYShsZW1tYSkge1xuICAgIHRoaXMubGVtbWFzLnB1c2gobGVtbWEpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICBsZW1tYVN0cmluZyA9IGxlbW1hLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke2xlbW1hU3RyaW5nfScgbGVtbWEgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRTY2hlbWEoc2NoZW1hKSB7XG4gICAgdGhpcy5zY2hlbWFzLnB1c2goc2NoZW1hKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIHNjaGVtYVN0cmluZyA9IHNjaGVtYS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRUaGVvcmVtKHRoZW9yZW0pIHtcbiAgICB0aGlzLnRoZW9yZW1zLnB1c2godGhlb3JlbSk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICB0aGVvcmVtU3RyaW5nID0gdGhlb3JlbS5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHt0aGVvcmVtU3RyaW5nfScgdGhlb3JlbSB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZEdlbmVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICB0aGlzLmdlbmVyYXRvcnMucHVzaChnZW5lcmF0b3IpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgZ2VuZXJhdG9yU3RyaW5nID0gZ2VuZXJhdG9yLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke2dlbmVyYXRvclN0cmluZ30nIGdlbmVyYXRvciB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZENvbmplY3R1cmUoY29uamVjdHVyZSkge1xuICAgIHRoaXMuY29uamVjdHVyZXMucHVzaChjb25qZWN0dXJlKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIG9jbmplY3R1cmVTdHJpbmcgPSBjb25qZWN0dXJlLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy50cmFjZShgQWRkZWQgdGhlICcke29jbmplY3R1cmVTdHJpbmd9JyBvY25qZWN0dXJlIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkQ29tYmluYXRvcihjb21iaW5hdG9yKSB7XG4gICAgdGhpcy5jb21iaW5hdG9ycy5wdXNoKGNvbWJpbmF0b3IpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgY29tYmluYXRvclN0cmluZyA9IGNvbWJpbmF0b3IuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7Y29tYmluYXRvclN0cmluZ30nIGNvbWJpbmF0b3IgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRUeXBlQWxpYXModHlwZUFsaWFzKSB7XG4gICAgdGhpcy50eXBlQWxpYXNlcy5wdXNoKHR5cGVBbGlhcyk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICB0eXBlQWxpYXNTdHJpbmcgPSB0eXBlQWxpYXMuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7dHlwZUFsaWFzU3RyaW5nfScgdHlwZSBhbGlhcyB0byB0aGUgJyR7ZmlsZVBhdGh9JyBmaWxlIGNvbnRleHQuYClcbiAgfVxuXG4gIGFkZFR5cGVQcmVmaXgodHlwZVByZWZpeCkge1xuICAgIHRoaXMudHlwZVByZWZpeGVzLnB1c2godHlwZVByZWZpeCk7XG5cbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICB0eXBlUHJlZml4U3RyaW5nID0gdHlwZVByZWZpeC5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHt0eXBlUHJlZml4U3RyaW5nfScgdHlwZSBwcmVmaXggdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBhZGRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvcikge1xuICAgIHRoaXMuY29uc3RydWN0b3JzLnB1c2goY29uc3RydWN0b3IpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSBjb25zdHJ1Y3Rvci5nZXRTdHJpbmcoKTtcblxuICAgIHRoaXMudHJhY2UoYEFkZGVkIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkRGVjbGFyZWRWYXJpYWJsZShkZWNsYXJlZFZhcmlhYmxlKSB7XG4gICAgdGhpcy5kZWNsYXJlZFZhcmlhYmxlcy5wdXNoKGRlY2xhcmVkVmFyaWFibGUpO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZVN0cmluZyA9IGRlY2xhcmVkVmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7ZGVjbGFyZWRWYXJpYWJsZVN0cmluZ30nIGRlY2xhcmVkIHZhcmlhYmxlIHRvIHRoZSAnJHtmaWxlUGF0aH0nIGZpbGUgY29udGV4dC5gKVxuICB9XG5cbiAgYWRkRGVjbGFyZWRNZXRhdmFyaWFibGUoZGVjbGFyZWRNZXRhdmFyaWFibGUpIHtcbiAgICB0aGlzLmRlY2xhcmVkTWV0YXZhcmlhYmxlcy5wdXNoKGRlY2xhcmVkTWV0YXZhcmlhYmxlKTtcblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5nZXRGaWxlUGF0aCgpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlU3RyaW5nID0gZGVjbGFyZWRNZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLnRyYWNlKGBBZGRlZCB0aGUgJyR7ZGVjbGFyZWRNZXRhdmFyaWFibGVTdHJpbmd9JyBkZWNsYXJlZCBtZXRhdmFyaWFibGUgdG8gdGhlICcke2ZpbGVQYXRofScgZmlsZSBjb250ZXh0LmApXG4gIH1cblxuICBmaW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5nZXRSdWxlcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpLFxuICAgICAgICAgIHJ1bGUgPSBydWxlcy5maW5kKChydWxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHJ1bGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgZmluZEF4aW9tQnlMaW5rKGxpbmspIHtcbiAgICBjb25zdCBheGlvbXMgPSB0aGlzLmdldEF4aW9tcygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBsaW5rLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICBheGlvbSA9IGF4aW9tcy5maW5kKChheGlvbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBheGlvbS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGF4aW9tO1xuICB9XG5cbiAgZmluZENsYWltQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY2xhaW1zID0gdGhpcy5nZXRDbGFpbXMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICBjbGFpbSA9IGNsYWltcy5maW5kKChjbGFpbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBjbGFpbS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGNsYWltO1xuICB9XG5cbiAgZmluZGFsaWFzZWRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgbGV0IGFsaWFzZWRUeXBlID0gbnVsbDtcblxuICAgIGNvbnN0IHR5cGVBbGlhc2VzID0gdGhpcy5nZXRUeXBlQWxpYXNlcyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICB0eXBlQWxpYXNlcy5zb21lKCh0eXBlQWxpYXMpID0+IHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lQ29tcGFyZXMgPSB0eXBlQWxpYXMuY29tcGFyZVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgICAgaWYgKHR5cGVOYW1lQ29tcGFyZXMpIHtcbiAgICAgICAgYWxpYXNlZFR5cGUgPSB0eXBlQWxpYXMuZ2V0QWxpYXNlZFR5cGUoKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGFsaWFzZWRUeXBlO1xuICB9XG5cbiAgZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZXMgPSB0aGlzLmdldFR5cGVzKGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKSxcbiAgICAgICAgICB0eXBlID0gZmluZFR5cGUodHlwZXMsICh0eXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlQ29tcGFyZXNUb1R5cGVOYW1lID0gdHlwZS5jb21wYXJlVHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICAgICAgICBpZiAodHlwZUNvbXBhcmVzVG9UeXBlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZmluZFR5cGVzQnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGxldCB0eXBlcztcblxuICAgIHR5cGVzID0gdGhpcy5nZXRUeXBlcyhpbmNsdWRlUmVsZWFzZSwgaW5jbHVkZURlcGVuZGVuY2llcyk7XG5cbiAgICB0eXBlcyA9IGZpbmRUeXBlcyh0eXBlcywgKHR5cGUpID0+IHsgIC8vL1xuICAgICAgY29uc3QgdHlwZUNvbXBhcmVzVG9UeXBlTmFtZSA9IHR5cGUuY29tcGFyZVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgICAgaWYgKHR5cGVDb21wYXJlc1RvVHlwZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cblxuICBmaW5kVHlwZUFsaWFzQnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZUFsaWFzZXMgPSB0aGlzLmdldFR5cGVBbGlhc2VzKGluY2x1ZGVSZWxlYXNlKSxcbiAgICAgICAgICB0eXBlQWxpYXMgPSB0eXBlQWxpYXNlcy5maW5kKCh0eXBlQWxpYXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVBbGlhc0NvbXBhcmVzVG9UeXBlTmFtZSA9IHR5cGVBbGlhcy5jb21wYXJlVHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICAgICAgICBpZiAodHlwZUFsaWFzQ29tcGFyZXNUb1R5cGVOYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdHlwZUFsaWFzO1xuICB9XG5cbiAgZmluZFR5cGVCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5nZXRUeXBlcyhpbmNsdWRlUmVsZWFzZSwgaW5jbHVkZURlcGVuZGVuY2llcyksXG4gICAgICAgICAgdHlwZSA9IGZpbmRUeXBlKHR5cGVzLCAodHlwZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHlwZUNvbXBhcmVzVG9QcmVmaXhlZFR5cGVOYW1lID0gdHlwZS5jb21wYXJlUHJlZml4ZWRUeXBlTmFtZShwcmVmaXhlZFR5cGVOYW1lKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVDb21wYXJlc1RvUHJlZml4ZWRUeXBlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBmaW5kVHlwZXNCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGxldCB0eXBlcztcblxuICAgIHR5cGVzID0gdGhpcy5nZXRUeXBlcyhpbmNsdWRlUmVsZWFzZSwgaW5jbHVkZURlcGVuZGVuY2llcyk7XG5cbiAgICB0eXBlcyA9IGZpbmRUeXBlcyh0eXBlcywgKHR5cGUpID0+IHsgIC8vL1xuICAgICAgY29uc3QgdHlwZUNvbXBhcmVzVG9UeXBlTmFtZSA9IHR5cGUuY29tcGFyZVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSk7XG5cbiAgICAgIGlmICh0eXBlQ29tcGFyZXNUb1R5cGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHR5cGVzO1xuICB9XG5cbiAgZmluZFR5cGVQcmVmaXhCeVR5cGVQcmVmaXhOYW1lKHR5cGVQcmVmaXhOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZVByZWZpeGVzID0gdGhpcy5nZXRUeXBlUHJlZml4ZXMoaW5jbHVkZVJlbGVhc2UsIGluY2x1ZGVEZXBlbmRlbmNpZXMpLFxuICAgICAgICAgIHR5cGVQcmVmaXggPSB0eXBlUHJlZml4ZXMuZmluZCgodHlwZVByZWZpeCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHlwZVByZWZpeENvbXBhcmVzVG9UeXBlUHJlZml4TmFtZSA9IHR5cGVQcmVmaXguY29tcGFyZVR5cGVQcmVmaXhOYW1lKHR5cGVQcmVmaXhOYW1lKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVQcmVmaXhDb21wYXJlc1RvVHlwZVByZWZpeE5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB0eXBlUHJlZml4O1xuICB9XG5cbiAgZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcihWYXJpYWJsZUlkZW50aXRpZmVyKSB7XG4gICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZXMgPSB0aGlzLmdldERlY2xhcmVkVmFyaWFibGVzKCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZSA9IGRlY2xhcmVkVmFyaWFibGVzLmZpbmQoKGRlY2xhcmVkVmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGl0aWZlciA9IGRlY2xhcmVkVmFyaWFibGUuY29tcGFyZVZhcmlhYmxlSWRlbnRpZmllcihWYXJpYWJsZUlkZW50aXRpZmVyKTtcblxuICAgICAgICAgICAgaWYgKGRlY2xhcmVkVmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGl0aWZlcikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGU7XG4gIH1cblxuICBmaW5kRGVjbGFyZWRWYXJpYWJsZXNCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICBsZXQgZGVjbGFyZWRWYXJpYWJsZXM7XG5cbiAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IHRoaXMuZ2V0RGVjbGFyZWRWYXJpYWJsZXMoKTtcblxuICAgIGRlY2xhcmVkVmFyaWFibGVzID0gZGVjbGFyZWRWYXJpYWJsZXMuZmlsdGVyKChkZWNsYXJlZFZhcmlhYmxlKSA9PiB7XG4gICAgICBjb25zdCB2YXJpYWJsZUNvbXBhcmVzVG9WYXJpYWJsZUlkZW50aWZpZXIgPSBkZWNsYXJlZFZhcmlhYmxlLmNvbXBhcmVWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlcztcbiAgfVxuXG4gIGZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gdGhpcy5nZXREZWNsYXJlZE1ldGF2YXJpYWJsZXMoKSxcbiAgICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZSA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlcy5maW5kKChkZWNsYXJlZE1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVjbGFyZWRNZXRhdmFyaWFibGVDb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlLmNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoZGVjbGFyZWRNZXRhdmFyaWFibGVDb21wYXJlc1RvTWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkTWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZmluZFByb2NlZHVyZUJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKSB7XG4gICAgY29uc3QgcHJvY2VkdXJlcyA9IHRoaXMuZ2V0UHJvY2VkdXJlcygpLFxuICAgICAgICAgIHByb2NlZHVyZSA9IHByb2NlZHVyZXMuZmluZCgocHJvY2VkdXJlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9jZWR1cmVDb21wYXJlc1RvUHJvY2VkdXJlTmFtZSA9IHByb2NlZHVyZS5jb21wYXJlUHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKTtcblxuICAgICAgICAgICAgaWYgKHByb2NlZHVyZUNvbXBhcmVzVG9Qcm9jZWR1cmVOYW1lKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlO1xuICB9XG5cbiAgZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKSB7IHJldHVybiBmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpOyB9XG5cbiAgaXNMYWJlbFByZXNlbnRCeUxhYmVsTm9kZShsYWJlbE5vZGUpIHtcbiAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmdldExhYmVscygpLFxuICAgICAgICAgIGxhYmVsUHJlc2VudCA9IGxhYmVscy5zb21lKChsYWJlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFiZWxOb2RlTWF0Y2hlcyA9IGxhYmVsLm1hdGNoTGFiZWxOb2RlKGxhYmVsTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChsYWJlbE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGxhYmVsUHJlc2VudDtcbiAgfVxuXG4gIGlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSwgaW5jbHVkZURlcGVuZGVuY2llcyksXG4gICAgICAgICAgdHlwZVByZXNlbnQgPSAodHlwZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdHlwZVByZXNlbnQ7XG4gIH1cblxuICBpc1R5cGVBbGlhc1ByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlQWxpYXMgPSB0aGlzLmZpbmRUeXBlQWxpYXNCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSksXG4gICAgICAgICAgdHlwZUFsaXNQcmVzZW50ID0gKHR5cGVBbGlhcyAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gdHlwZUFsaXNQcmVzZW50O1xuICB9XG5cbiAgaXNUeXBlUHJlc2VudEJ5UHJlZml4ZWRUeXBlTmFtZShwcmVmaXhlZFR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZmluZFR5cGVCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UsIGluY2x1ZGVEZXBlbmRlbmNpZXMpLFxuICAgICAgICAgIHR5cGVQcmVzZW50ID0gKHR5cGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVzZW50O1xuICB9XG5cbiAgaXNUeXBlUHJlZml4UHJlc2VudEJ5VHlwZVByZWZpeE5hbWUodHlwZVByZWZpeE5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHR5cGVQcmVmaXggPSB0aGlzLmZpbmRUeXBlUHJlZml4QnlUeXBlUHJlZml4TmFtZSh0eXBlUHJlZml4TmFtZSwgaW5jbHVkZVJlbGVhc2UpLFxuICAgICAgICAgIHR5cGVQcmVmaXhQcmVzZW50ID0gKHR5cGVQcmVmaXggIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXhQcmVzZW50O1xuICB9XG5cbiAgaXNEZWNsYXJlZFZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGUgPSB0aGlzLmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudCA9IChkZWNsYXJlZFZhcmlhYmxlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzRGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBkZWNsYXJlZE1ldGF2YXJpYWJsZSA9IHRoaXMuZmluZERlY2xhcmVkTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlUHJlc2VudCA9IChkZWNsYXJlZE1ldGF2YXJpYWJsZSAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgaXNQcm9jZWR1cmVQcmVzZW50QnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpIHtcbiAgICBjb25zdCBwcm9jZWR1cmUgPSB0aGlzLmZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSksXG4gICAgICAgICAgcHJvY2VkdXJlUHJlc2VudCA9IChwcm9jZWR1cmUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZVByZXNlbnQ7XG4gIH1cblxuICBpc01ldGFMZXZlbCgpIHtcbiAgICBjb25zdCBtZXRhTEV2ZWwgPSBmYWxzZTtcblxuICAgIHJldHVybiBtZXRhTEV2ZWw7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLnR5cGVzID0gW107XG4gICAgdGhpcy5ydWxlcyA9IFtdO1xuICAgIHRoaXMuYXhpb21zID0gW107XG4gICAgdGhpcy5sZW1tYXMgPSBbXTtcbiAgICB0aGlzLnNjaGVtYXMgPSBbXTtcbiAgICB0aGlzLnRoZW9yZW1zID0gW107XG4gICAgdGhpcy5nZW5lcmF0b3JzID0gW107XG4gICAgdGhpcy5jb25qZWN0dXJlcyA9IFtdO1xuICAgIHRoaXMuY29tYmluYXRvcnMgPSBbXTtcbiAgICB0aGlzLnR5cGVBbGlhc2VzID0gW107XG4gICAgdGhpcy50eXBlUHJlZml4ZXMgPSBbXTtcbiAgICB0aGlzLmNvbnN0cnVjdG9ycyA9IFtdO1xuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMgPSBbXTtcbiAgICB0aGlzLmRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IFtdO1xuICB9XG5cbiAgY29tcGxldGUoKSB7XG4gICAgLy8vXG4gIH1cblxuICB2ZXJpZnlGaWxlKGZvcndhcmQsIGJhY2spIHtcbiAgICByZXR1cm4gaXNvbGF0ZSgoZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgICAgZmlsZU5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICAgIHJldHVybiB2ZXJpZnlGaWxlKGZpbGVOb2RlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKTtcbiAgICB9LCBmb3J3YXJkLCBiYWNrKTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgY29uc3QganNvbiA9IHRoaXMuZ2V0SlNPTigpO1xuXG4gICAgaWYgKGpzb24gPT09IG51bGwpIHtcbiAgICAgIHN1cGVyLmluaXRpYWxpc2UoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVDb250ZXh0ID0gdGhpczsgLy8vXG5cbiAgICB0aGlzLnR5cGVzID0gW107XG5cbiAgICB0eXBlc0Zyb21KU09OKGpzb24sIHRoaXMudHlwZXMsIGZpbGVDb250ZXh0KTtcblxuICAgIHRoaXMubGVtbWFzID0gbGVtbWFzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMudHlwZUFsaWFzZXMgPSB0eXBlQWxpYXNlc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLnR5cGVQcmVmaXhlcyA9IHR5cGVQcmVmaXhlc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcblxuICAgIHRoaXMuZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMuZGVjbGFyZWRWYXJpYWJsZXMgPSBkZWNsYXJlZFZhcmlhYmxlc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLmdlbmVyYXRvcnMgPSBnZW5lcmF0b3JzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMuY29tYmluYXRvcnMgPSBjb21iaW5hdG9yc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLmNvbnN0cnVjdG9ycyA9IGNvbnN0cnVjdG9yc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcblxuICAgIHRoaXMucnVsZXMgPSBydWxlc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLmF4aW9tcyA9IGF4aW9tc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLnNjaGVtYXMgPSBzY2hlbWFzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpO1xuICAgIHRoaXMudGhlb3JlbXMgPSB0aGVvcmVtc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KTtcbiAgICB0aGlzLmNvbmplY3R1cmVzID0gY29uamVjdHVyZXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCB0eXBlc0pTT04gPSB0eXBlc1RvVHlwZXNKU09OKHRoaXMudHlwZXMpLFxuICAgICAgICAgIHJ1bGVzSlNPTiA9IHJ1bGVzVG9SdWxlc0pTT04odGhpcy5ydWxlcyksXG4gICAgICAgICAgbGVtbWFzSlNPTiA9IGxlbW1hc1RvTGVtbWFzSlNPTih0aGlzLmxlbW1hcyksXG4gICAgICAgICAgYXhpb21zSlNPTiA9IGF4aW9tc1RvQXhpb21zSlNPTih0aGlzLmF4aW9tcyksXG4gICAgICAgICAgc2NoZW1hc0pTT04gPSBzY2hlbWFzVG9TY2hlbWFzSlNPTih0aGlzLnNjaGVtYXMpLFxuICAgICAgICAgIHRoZW9yZW1zSlNPTiA9IHRoZW9yZW1zVG9UaGVvcmVtc0pTT04odGhpcy50aGVvcmVtcyksXG4gICAgICAgICAgZ2VuZXJhdG9yc0pTT04gPSBnZW5lcmF0b3JzVG9HZW5lcmF0b3JzSlNPTih0aGlzLmdlbmVyYXRvcnMpLFxuICAgICAgICAgIGNvbmplY3R1cmVzSlNPTiA9IGNvbmplY3R1cmVzVG9Db25qZWN0dXJlc0pTT04odGhpcy5jb25qZWN0dXJlcyksXG4gICAgICAgICAgY29tYmluYXRvcnNKU09OID0gY29tYmluYXRvcnNUb0NvbWJpbmF0b3JzSlNPTih0aGlzLmNvbWJpbmF0b3JzKSxcbiAgICAgICAgICB0eXBlQWxpYXNlc0pTT04gPSB0eXBlQWxpYXNlc1RvVHlwZUFsaWFzZXNKU09OKHRoaXMudHlwZUFsaWFzZXMpLFxuICAgICAgICAgIHR5cGVQcmVmaXhlc0pTT04gPSB0eXBlUHJlZml4ZXNUb1R5cGVQcmVmaXhlc0pTT04odGhpcy50eXBlUHJlZml4ZXMpLFxuICAgICAgICAgIGNvbnN0cnVjdG9yc0pTT04gPSBjb25zdHJ1Y3RvcnNUb0NvbnN0cnVjdG9yc0pTT04odGhpcy5jb25zdHJ1Y3RvcnMpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzSlNPTiA9IGRlY2xhcmVkVmFyaWFibGVzVG9EZWNsYXJlZFZhcmlhYmxlc0pTT04odGhpcy5kZWNsYXJlZFZhcmlhYmxlcyksXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiA9IGRlY2xhcmVkTWV0YXZhcmlhYmxlc1RvRGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTih0aGlzLmRlY2xhcmVkTWV0YXZhcmlhYmxlcyksXG4gICAgICAgICAgZmlsZUNvbnRlbnQgPSB0aGlzLmdldEZpbGVDb250ZW50KCksXG4gICAgICAgICAgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKCksXG4gICAgICAgICAgdHlwZXMgPSB0eXBlc0pTT04sICAvLy9cbiAgICAgICAgICBydWxlcyA9IHJ1bGVzSlNPTiwgIC8vL1xuICAgICAgICAgIGxlbW1hcyA9IGxlbW1hc0pTT04sICAvLy9cbiAgICAgICAgICBheGlvbXMgPSBheGlvbXNKU09OLCAgLy8vXG4gICAgICAgICAgc2NoZW1hcyA9IHNjaGVtYXNKU09OLCAgLy8vXG4gICAgICAgICAgdGhlb3JlbXMgPSB0aGVvcmVtc0pTT04sICAvLy9cbiAgICAgICAgICBnZW5lcmF0b3JzID0gZ2VuZXJhdG9yc0pTT04sICAvLy9cbiAgICAgICAgICBjb25qZWN0dXJlcyA9IGNvbmplY3R1cmVzSlNPTiwgIC8vL1xuICAgICAgICAgIGNvbWJpbmF0b3JzID0gY29tYmluYXRvcnNKU09OLCAgLy8vXG4gICAgICAgICAgdHlwZUFsaWFzZXMgPSB0eXBlQWxpYXNlc0pTT04sICAvLy9cbiAgICAgICAgICB0eXBlUHJlZml4ZXMgPSB0eXBlUHJlZml4ZXNKU09OLCAgLy8vXG4gICAgICAgICAgY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzSlNPTiwgIC8vL1xuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzID0gZGVjbGFyZWRWYXJpYWJsZXNKU09OLCAgLy8vXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTjsgIC8vL1xuXG4gICAganNvbiA9IHtcbiAgICAgIGZpbGVDb250ZW50LFxuICAgICAgZmlsZVBhdGgsXG4gICAgICB0eXBlcyxcbiAgICAgIHJ1bGVzLFxuICAgICAgbGVtbWFzLFxuICAgICAgYXhpb21zLFxuICAgICAgc2NoZW1hcyxcbiAgICAgIHRoZW9yZW1zLFxuICAgICAgZ2VuZXJhdG9ycyxcbiAgICAgIGNvbmplY3R1cmVzLFxuICAgICAgY29tYmluYXRvcnMsXG4gICAgICB0eXBlQWxpYXNlcyxcbiAgICAgIHR5cGVQcmVmaXhlcyxcbiAgICAgIGNvbnN0cnVjdG9ycyxcbiAgICAgIGRlY2xhcmVkVmFyaWFibGVzLFxuICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21GaWxlKGZpbGUsIGNvbnRleHQpIHtcbiAgICBjb25zdCByZWxlYXNlQ29udGV4dCA9IGNvbnRleHQsIC8vL1xuICAgICAgICAgIGNvbWJpbmVkQ3VzdG9tR3JhbW1hciA9IHJlbGVhc2VDb250ZXh0LmdldENvbWJpbmVkQ3VzdG9tR3JhbW1hcigpLFxuICAgICAgICAgIG5vbWluYWxMZXhlciA9IG5vbWluYWxMZXhlckZyb21Db21iaW5lZEN1c3RvbUdyYW1tYXIoTm9taW5hbExleGVyLCBjb21iaW5lZEN1c3RvbUdyYW1tYXIpLFxuICAgICAgICAgIG5vbWluYWxQYXJzZXIgPSBub21pbmFsUGFyc2VyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hcihOb21pbmFsUGFyc2VyLCBjb21iaW5lZEN1c3RvbUdyYW1tYXIpLFxuICAgICAgICAgIGxleGVyID0gbm9taW5hbExleGVyLCAvLy9cbiAgICAgICAgICBwYXJzZXIgPSBub21pbmFsUGFyc2VyLCAvLy9cbiAgICAgICAgICB0eXBlcyA9IFtdLFxuICAgICAgICAgIHJ1bGVzID0gW10sXG4gICAgICAgICAgYXhpb21zID0gW10sXG4gICAgICAgICAgbGVtbWFzID0gW10sXG4gICAgICAgICAgc2NoZW1hcyA9IFtdLFxuICAgICAgICAgIHRoZW9yZW1zID0gW10sXG4gICAgICAgICAgZ2VuZXJhdG9ycyA9IFtdLFxuICAgICAgICAgIGNvbmplY3R1cmVzID0gW10sXG4gICAgICAgICAgY29tYmluYXRvcnMgPSBbXSxcbiAgICAgICAgICB0eXBlQWxpYXNlcyA9IFtdLFxuICAgICAgICAgIHR5cGVQcmVmaXhlcyA9IFtdLFxuICAgICAgICAgIGNvbnN0cnVjdG9ycyA9IFtdLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzID0gW10sXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gW10sXG4gICAgICAgICAgbm9taW5hbEZpbGVDb250ZXh0ID0gRmlsZUNvbnRleHQuZnJvbUZpbGUoTm9taW5hbEZpbGVDb250ZXh0LCBmaWxlLCBsZXhlciwgcGFyc2VyLCB0eXBlcywgcnVsZXMsIGF4aW9tcywgbGVtbWFzLCBzY2hlbWFzLCB0aGVvcmVtcywgZ2VuZXJhdG9ycywgY29uamVjdHVyZXMsIGNvbWJpbmF0b3JzLCB0eXBlQWxpYXNlcywgdHlwZVByZWZpeGVzLCBjb25zdHJ1Y3RvcnMsIGRlY2xhcmVkVmFyaWFibGVzLCBkZWNsYXJlZE1ldGF2YXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG5vbWluYWxGaWxlQ29udGV4dDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgY29uc3QgcmVsZWFzZUNvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgICBjb21iaW5lZEN1c3RvbUdyYW1tYXIgPSByZWxlYXNlQ29udGV4dC5nZXRDb21iaW5lZEN1c3RvbUdyYW1tYXIoKSxcbiAgICAgICAgICBub21pbmFsTGV4ZXIgPSBub21pbmFsTGV4ZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyKE5vbWluYWxMZXhlciwgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgICBub21pbmFsUGFyc2VyID0gbm9taW5hbFBhcnNlckZyb21Db21iaW5lZEN1c3RvbUdyYW1tYXIoTm9taW5hbFBhcnNlciwgY29tYmluZWRDdXN0b21HcmFtbWFyKSxcbiAgICAgICAgICBsZXhlciA9IG5vbWluYWxMZXhlciwgLy8vXG4gICAgICAgICAgcGFyc2VyID0gbm9taW5hbFBhcnNlciwgLy8vXG4gICAgICAgICAgdHlwZXMgPSBudWxsLFxuICAgICAgICAgIHJ1bGVzID0gbnVsbCxcbiAgICAgICAgICBheGlvbXMgPSBudWxsLFxuICAgICAgICAgIGxlbW1hcyA9IG51bGwsXG4gICAgICAgICAgc2NoZW1hcyA9IG51bGwsXG4gICAgICAgICAgdGhlb3JlbXMgPSBudWxsLFxuICAgICAgICAgIGdlbmVyYXRvcnMgPSBudWxsLFxuICAgICAgICAgIGNvbmplY3R1cmVzID0gbnVsbCxcbiAgICAgICAgICBjb21iaW5hdG9ycyA9IG51bGwsXG4gICAgICAgICAgdHlwZUFsaWFzZXMgPSBudWxsLFxuICAgICAgICAgIHR5cGVQcmVmaXhlcyA9IG51bGwsXG4gICAgICAgICAgY29uc3RydWN0b3JzID0gbnVsbCxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlcyA9IG51bGwsXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGVzID0gbnVsbCxcbiAgICAgICAgICBub21pbmFsRmlsZUNvbnRleHQgPSBGaWxlQ29udGV4dC5mcm9tSlNPTihOb21pbmFsRmlsZUNvbnRleHQsIGpzb24sIGxleGVyLCBwYXJzZXIsIHR5cGVzLCBydWxlcywgYXhpb21zLCBsZW1tYXMsIHNjaGVtYXMsIHRoZW9yZW1zLCBnZW5lcmF0b3JzLCBjb25qZWN0dXJlcywgY29tYmluYXRvcnMsIHR5cGVBbGlhc2VzLCB0eXBlUHJlZml4ZXMsIGNvbnN0cnVjdG9ycywgZGVjbGFyZWRWYXJpYWJsZXMsIGRlY2xhcmVkTWV0YXZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbm9taW5hbEZpbGVDb250ZXh0O1xuICB9XG59XG4iXSwibmFtZXMiOlsiTm9taW5hbEZpbGVDb250ZXh0IiwicHVzaCIsImFycmF5VXRpbGl0aWVzIiwibm9taW5hbExleGVyRnJvbUNvbWJpbmVkQ3VzdG9tR3JhbW1hciIsIm5vbWluYWxQYXJzZXJGcm9tQ29tYmluZWRDdXN0b21HcmFtbWFyIiwibm9taW5hbFV0aWxpdGllcyIsIkZpbGVDb250ZXh0IiwiY29udGV4dCIsImZpbGVDb250ZW50IiwiZmlsZVBhdGgiLCJ0b2tlbnMiLCJub2RlIiwianNvbiIsImxleGVyIiwicGFyc2VyIiwidHlwZXMiLCJydWxlcyIsImF4aW9tcyIsImxlbW1hcyIsInNjaGVtYXMiLCJ0aGVvcmVtcyIsImdlbmVyYXRvcnMiLCJjb25qZWN0dXJlcyIsImNvbWJpbmF0b3JzIiwidHlwZUFsaWFzZXMiLCJ0eXBlUHJlZml4ZXMiLCJjb25zdHJ1Y3RvcnMiLCJkZWNsYXJlZFZhcmlhYmxlcyIsImRlY2xhcmVkTWV0YXZhcmlhYmxlcyIsImdldExleGVyIiwiZ2V0UGFyc2VyIiwiZ2V0TGFiZWxzIiwiaW5jbHVkZVJlbGVhc2UiLCJsYWJlbHMiLCJyZWxlYXNlQ29udGV4dExhYmVscyIsImZvckVhY2giLCJydWxlIiwicnVsZUxhYmVscyIsImF4aW9tIiwiYXhpb21MYWJlbHMiLCJsZW1tYSIsImxlbW1hTGFiZWxzIiwidGhlb3JlbSIsInRoZW9yZW1MYWJlbHMiLCJjb25qZWN0dXJlIiwiY29uamVjdHVyZUxhYmVscyIsInNjaGVtYSIsInNjaGVtYUxhYmVsIiwiZ2V0TGFiZWwiLCJnZXRUeXBlcyIsImluY2x1ZGVEZXBlbmRlbmNpZXMiLCJnZXRSdWxlcyIsImdldEF4aW9tcyIsImdldExlbW1hcyIsImdldFNjaGVtYXMiLCJnZXRUaGVvcmVtcyIsImdldEdlbmVyYXRvcnMiLCJnZXRDb25qZWN0dXJlcyIsImdldENvbWJpbmF0b3JzIiwiZ2V0VHlwZUFsaWFzZXMiLCJnZXRUeXBlUHJlZml4ZXMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJnZXRQcm9jZWR1cmVzIiwicHJvY2VkdXJlcyIsImdldENsYWltcyIsImNsYWltcyIsImdldERlY2xhcmVkVmFyaWFibGVzIiwiZ2V0RGVjbGFyZWRNZXRhdmFyaWFibGVzIiwiZ2V0VGVybXMiLCJ0ZXJtcyIsImdldExpbmtzIiwibGlua3MiLCJnZXRGcmFtZXMiLCJmcmFtZXMiLCJnZXRFcXVhbGl0aWVzIiwiZXF1YWxpdGllcyIsImdldEFzc2VydGlvbnMiLCJhc3NlcnRpb25zIiwiZ2V0U3RhdGVtZW50cyIsInN0YXRlbWVudHMiLCJnZXRQYXJhbWV0ZXJzIiwicGFyYW1ldGVycyIsImdldFNpZ25hdHVyZXMiLCJzaWduYXR1cmVzIiwiZ2V0UmVmZXJlbmNlcyIsInJlZmVyZW5jZXMiLCJnZXRBc3N1bXB0aW9ucyIsImFzc3VtcHRpb25zIiwiZ2V0TWV0YXZhcmlhYmxlcyIsIm1ldGF2YXJpYWJsZXMiLCJnZXRTdWJzdGl0dXRpb25zIiwic3Vic3RpdHV0aW9ucyIsImdldFByb2NlZHVyZVJlZmVyZW5jZXMiLCJwcm9jZWR1cmVSZWZlcmVuY2VzIiwiZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJkZXJpdmVkU3Vic3RpdHV0aW9ucyIsImdldEVxdWl2YWxlbmNlcyIsImVxdWl2YWxlbmNlcyIsImdldEZhY3RPclN1YnByb29mcyIsImZhY3RPclN1YnByb29mcyIsImFkZFR5cGUiLCJ0eXBlIiwiZ2V0RmlsZVBhdGgiLCJ0eXBlU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJhZGRSdWxlIiwicnVsZVN0cmluZyIsImFkZEF4aW9tIiwiYXhpb21TdHJpbmciLCJhZGRMZW1tYSIsImxlbW1hU3RyaW5nIiwiYWRkU2NoZW1hIiwic2NoZW1hU3RyaW5nIiwiYWRkVGhlb3JlbSIsInRoZW9yZW1TdHJpbmciLCJhZGRHZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJnZW5lcmF0b3JTdHJpbmciLCJhZGRDb25qZWN0dXJlIiwib2NuamVjdHVyZVN0cmluZyIsImFkZENvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwiY29tYmluYXRvclN0cmluZyIsImFkZFR5cGVBbGlhcyIsInR5cGVBbGlhcyIsInR5cGVBbGlhc1N0cmluZyIsImFkZFR5cGVQcmVmaXgiLCJ0eXBlUHJlZml4IiwidHlwZVByZWZpeFN0cmluZyIsImFkZENvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvclN0cmluZyIsImFkZERlY2xhcmVkVmFyaWFibGUiLCJkZWNsYXJlZFZhcmlhYmxlIiwiZGVjbGFyZWRWYXJpYWJsZVN0cmluZyIsImFkZERlY2xhcmVkTWV0YXZhcmlhYmxlIiwiZGVjbGFyZWRNZXRhdmFyaWFibGUiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZVN0cmluZyIsImZpbmRSdWxlQnlSZWZlcmVuY2UiLCJyZWZlcmVuY2UiLCJtZXRhdmFyaWFibGVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImZpbmQiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmRBeGlvbUJ5TGluayIsImxpbmsiLCJmaW5kQ2xhaW1CeVJlZmVyZW5jZSIsImNsYWltIiwiZmluZGFsaWFzZWRUeXBlQnlUeXBlTmFtZSIsInR5cGVOYW1lIiwiYWxpYXNlZFR5cGUiLCJzb21lIiwidHlwZU5hbWVDb21wYXJlcyIsImNvbXBhcmVUeXBlTmFtZSIsImdldEFsaWFzZWRUeXBlIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwiZmluZFR5cGUiLCJ0eXBlQ29tcGFyZXNUb1R5cGVOYW1lIiwiZmluZFR5cGVzQnlUeXBlTmFtZSIsImZpbmRUeXBlcyIsImZpbmRUeXBlQWxpYXNCeVR5cGVOYW1lIiwidHlwZUFsaWFzQ29tcGFyZXNUb1R5cGVOYW1lIiwiZmluZFR5cGVCeVByZWZpeGVkVHlwZU5hbWUiLCJwcmVmaXhlZFR5cGVOYW1lIiwidHlwZUNvbXBhcmVzVG9QcmVmaXhlZFR5cGVOYW1lIiwiY29tcGFyZVByZWZpeGVkVHlwZU5hbWUiLCJmaW5kVHlwZXNCeVByZWZpeGVkVHlwZU5hbWUiLCJmaW5kVHlwZVByZWZpeEJ5VHlwZVByZWZpeE5hbWUiLCJ0eXBlUHJlZml4TmFtZSIsInR5cGVQcmVmaXhDb21wYXJlc1RvVHlwZVByZWZpeE5hbWUiLCJjb21wYXJlVHlwZVByZWZpeE5hbWUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwiVmFyaWFibGVJZGVudGl0aWZlciIsImRlY2xhcmVkVmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGVJZGVudGl0aWZlciIsImNvbXBhcmVWYXJpYWJsZUlkZW50aWZpZXIiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZXNCeVZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlSWRlbnRpZmllciIsImZpbHRlciIsInZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlSWRlbnRpZmllciIsImZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZUNvbXBhcmVzVG9NZXRhdmFyaWFibGVOYW1lIiwiY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUiLCJmaW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlTmFtZSIsInByb2NlZHVyZSIsInByb2NlZHVyZUNvbXBhcmVzVG9Qcm9jZWR1cmVOYW1lIiwiY29tcGFyZVByb2NlZHVyZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlTmFtZSIsImlzTGFiZWxQcmVzZW50QnlMYWJlbE5vZGUiLCJsYWJlbE5vZGUiLCJsYWJlbFByZXNlbnQiLCJsYWJlbCIsImxhYmVsTm9kZU1hdGNoZXMiLCJtYXRjaExhYmVsTm9kZSIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwidHlwZVByZXNlbnQiLCJpc1R5cGVBbGlhc1ByZXNlbnRCeVR5cGVOYW1lIiwidHlwZUFsaXNQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5UHJlZml4ZWRUeXBlTmFtZSIsImlzVHlwZVByZWZpeFByZXNlbnRCeVR5cGVQcmVmaXhOYW1lIiwidHlwZVByZWZpeFByZXNlbnQiLCJpc0RlY2xhcmVkVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZUlkZW50aWZpZXIiLCJkZWNsYXJlZFZhcmlhYmxlUHJlc2VudCIsImlzRGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50IiwiaXNQcm9jZWR1cmVQcmVzZW50QnlQcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlUHJlc2VudCIsImlzTWV0YUxldmVsIiwibWV0YUxFdmVsIiwiY2xlYXIiLCJjb21wbGV0ZSIsInZlcmlmeUZpbGUiLCJmb3J3YXJkIiwiYmFjayIsImlzb2xhdGUiLCJnZXROb2RlIiwiZmlsZU5vZGUiLCJpbml0aWFsaXNlIiwiZ2V0SlNPTiIsImZpbGVDb250ZXh0IiwidHlwZXNGcm9tSlNPTiIsImxlbW1hc0Zyb21KU09OIiwidHlwZUFsaWFzZXNGcm9tSlNPTiIsInR5cGVQcmVmaXhlc0Zyb21KU09OIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVzRnJvbUpTT04iLCJkZWNsYXJlZFZhcmlhYmxlc0Zyb21KU09OIiwiZ2VuZXJhdG9yc0Zyb21KU09OIiwiY29tYmluYXRvcnNGcm9tSlNPTiIsImNvbnN0cnVjdG9yc0Zyb21KU09OIiwicnVsZXNGcm9tSlNPTiIsImF4aW9tc0Zyb21KU09OIiwic2NoZW1hc0Zyb21KU09OIiwidGhlb3JlbXNGcm9tSlNPTiIsImNvbmplY3R1cmVzRnJvbUpTT04iLCJ0b0pTT04iLCJ0eXBlc0pTT04iLCJ0eXBlc1RvVHlwZXNKU09OIiwicnVsZXNKU09OIiwicnVsZXNUb1J1bGVzSlNPTiIsImxlbW1hc0pTT04iLCJsZW1tYXNUb0xlbW1hc0pTT04iLCJheGlvbXNKU09OIiwiYXhpb21zVG9BeGlvbXNKU09OIiwic2NoZW1hc0pTT04iLCJzY2hlbWFzVG9TY2hlbWFzSlNPTiIsInRoZW9yZW1zSlNPTiIsInRoZW9yZW1zVG9UaGVvcmVtc0pTT04iLCJnZW5lcmF0b3JzSlNPTiIsImdlbmVyYXRvcnNUb0dlbmVyYXRvcnNKU09OIiwiY29uamVjdHVyZXNKU09OIiwiY29uamVjdHVyZXNUb0NvbmplY3R1cmVzSlNPTiIsImNvbWJpbmF0b3JzSlNPTiIsImNvbWJpbmF0b3JzVG9Db21iaW5hdG9yc0pTT04iLCJ0eXBlQWxpYXNlc0pTT04iLCJ0eXBlQWxpYXNlc1RvVHlwZUFsaWFzZXNKU09OIiwidHlwZVByZWZpeGVzSlNPTiIsInR5cGVQcmVmaXhlc1RvVHlwZVByZWZpeGVzSlNPTiIsImNvbnN0cnVjdG9yc0pTT04iLCJjb25zdHJ1Y3RvcnNUb0NvbnN0cnVjdG9yc0pTT04iLCJkZWNsYXJlZFZhcmlhYmxlc0pTT04iLCJkZWNsYXJlZFZhcmlhYmxlc1RvRGVjbGFyZWRWYXJpYWJsZXNKU09OIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiIsImRlY2xhcmVkTWV0YXZhcmlhYmxlc1RvRGVjbGFyZWRNZXRhdmFyaWFibGVzSlNPTiIsImdldEZpbGVDb250ZW50IiwiZnJvbUZpbGUiLCJmaWxlIiwicmVsZWFzZUNvbnRleHQiLCJjb21iaW5lZEN1c3RvbUdyYW1tYXIiLCJnZXRDb21iaW5lZEN1c3RvbUdyYW1tYXIiLCJub21pbmFsTGV4ZXIiLCJOb21pbmFsTGV4ZXIiLCJub21pbmFsUGFyc2VyIiwiTm9taW5hbFBhcnNlciIsIm5vbWluYWxGaWxlQ29udGV4dCIsImZyb21KU09OIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkE0Q0E7OztlQUFxQkE7OzsyQkExQ1U7Z0NBQ2U7OERBRXJCOytEQUNDO3lCQUVGO3dCQUNHO3NCQUNTOzJCQUNPO3NCQTRCc0I7Ozs7OztBQUVqRSxNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHQyx5QkFBYyxFQUN6QixFQUFFQyxxQ0FBcUMsRUFBRUMsc0NBQXNDLEVBQUUsR0FB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
|
package/lib/context.js
CHANGED
|
@@ -248,10 +248,18 @@ class Context extends _occamlanguages.Context {
|
|
|
248
248
|
const context = this.getContext(), types = context.findTypesByTypeName(typeName, includeRelease, includeDependencies);
|
|
249
249
|
return types;
|
|
250
250
|
}
|
|
251
|
+
findTypeAliasByTypeName(typeName, includeRelease = true) {
|
|
252
|
+
const context = this.getContext(), typeAlias = context.findTypeAliasByTypeName(typeName, includeRelease);
|
|
253
|
+
return typeAlias;
|
|
254
|
+
}
|
|
251
255
|
findTypeByPrefixedTypeName(prefixedTypeName, includeRelease = true, includeDependencies = true) {
|
|
252
256
|
const context = this.getContext(), type = context.findTypeByPrefixedTypeName(prefixedTypeName, includeRelease, includeDependencies);
|
|
253
257
|
return type;
|
|
254
258
|
}
|
|
259
|
+
findTypesByPrefixedTypeName(prefixedTypeName, includeRelease = true, includeDependencies = true) {
|
|
260
|
+
const context = this.getContext(), types = context.findTypesByPrefixedTypeName(prefixedTypeName, includeRelease, includeDependencies);
|
|
261
|
+
return types;
|
|
262
|
+
}
|
|
255
263
|
findMetaTypeByMetaTypeName(metaTypeName) {
|
|
256
264
|
const context = this.getContext(), metaType = context.findMetaTypeByMetaTypeName(metaTypeName);
|
|
257
265
|
return metaType;
|
|
@@ -284,6 +292,14 @@ class Context extends _occamlanguages.Context {
|
|
|
284
292
|
const context = this.getContext(), framePresent = context.isFramePresentByFrameNode(frameNode);
|
|
285
293
|
return framePresent;
|
|
286
294
|
}
|
|
295
|
+
isTypePresentByTypeName(typeName, includeRelease = true, includeDependencies = true) {
|
|
296
|
+
const context = this.getContext(), typePresent = context.isTypePresentByTypeName(typeName, includeRelease, includeDependencies);
|
|
297
|
+
return typePresent;
|
|
298
|
+
}
|
|
299
|
+
isTypeAliasPresentByTypeName(typeName, includeRelease = true) {
|
|
300
|
+
const context = this.getContext(), typeAliasPresent = context.isTypeAliasPresentByTypeName(typeName, includeRelease);
|
|
301
|
+
return typeAliasPresent;
|
|
302
|
+
}
|
|
287
303
|
isTypePresentByPrefixedTypeName(prefixedTypeName, includeRelease = true, includeDependencies = true) {
|
|
288
304
|
const context = this.getContext(), typePresent = context.isTypePresentByPrefixedTypeName(prefixedTypeName, includeRelease, includeDependencies);
|
|
289
305
|
return typePresent;
|
|
@@ -338,4 +354,4 @@ class Context extends _occamlanguages.Context {
|
|
|
338
354
|
}
|
|
339
355
|
}
|
|
340
356
|
|
|
341
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb250ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb250ZXh0IGFzIENvbnRleHRCYXNlIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZXh0IGV4dGVuZHMgQ29udGV4dEJhc2Uge1xuICBnZXRMZXhlcigpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbGV4ZXIgPSBjb250ZXh0LmdldExleGVyKCk7XG5cbiAgICByZXR1cm4gbGV4ZXI7XG4gIH1cblxuICBnZXRQYXJzZXIoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHBhcnNlciA9IGNvbnRleHQuZ2V0UGFyc2VyKCk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgZ2V0RmlsZVBhdGgoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZpbGVQYXRoID0gY29udGV4dC5nZXRGaWxlUGF0aCgpO1xuXG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgZ2V0VG9rZW5zKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0b2tlbnMgPSBjb250ZXh0LmdldFRva2VucygpO1xuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIHNldFRva2Vucyh0b2tlbnMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LnNldFRva2Vucyh0b2tlbnMpO1xuICB9XG5cbiAgZ2V0VGVybXModGVybXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0VGVybXModGVybXMpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0TGlua3MobGlua3MgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0TGlua3MobGlua3MpO1xuXG4gICAgcmV0dXJuIGxpbmtzO1xuICB9XG5cbiAgZ2V0RnJhbWVzKGZyYW1lcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzKTtcblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldFN0YXRlbWVudHMoc3RhdGVtZW50cyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0UGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcblxuICAgIHJldHVybiBwYXJhbWV0ZXJzO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlcyhzaWduYXR1cmVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldFNpZ25hdHVyZXMoc2lnbmF0dXJlcyk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlcztcbiAgfVxuXG4gIGdldFJlZmVyZW5jZXMocmVmZXJlbmNlcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldFByb2NlZHVyZVJlZmVyZW5jZXMocHJvY2VkdXJlUmVmZXJlbmNlcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRQcm9jZWR1cmVSZWZlcmVuY2VzKHByb2NlZHVyZVJlZmVyZW5jZXMpO1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRHZW5lcmF0b3JzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBnZW5lcmF0b3JzID0gY29udGV4dC5nZXRHZW5lcmF0b3JzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBnZW5lcmF0b3JzO1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcHJvY2VkdXJlcyA9IGNvbnRleHQuZ2V0UHJvY2VkdXJlcyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlcztcbiAgfVxuXG4gIGdldENvbWJpbmF0b3JzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBjb21iaW5hdG9ycyA9IGNvbnRleHQuZ2V0Q29tYmluYXRvcnMoaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgcmV0dXJuIGNvbWJpbmF0b3JzO1xuICB9XG5cbiAgZ2V0Q29uc3RydWN0b3JzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBjb25zdHJ1Y3RvcnMgPSBjb250ZXh0LmdldENvbnN0cnVjdG9ycyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3JzO1xuICB9XG5cbiAgZ2V0Q2xhaW0oaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGNsYWltID0gY29udGV4dC5nZXRDbGFpbShpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICByZXR1cm4gY2xhaW07XG4gIH1cblxuICBnZXRTY2hlbWFzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBzY2hlbWFzO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVzKG5lc3RlZCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB2YXJpYWJsZXMgPSBjb250ZXh0LmdldFZhcmlhYmxlcyhuZXN0ZWQpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN0ZXBzKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdGVwcyA9IGNvbnRleHQuZ2V0U3RlcHMoKTtcblxuICAgIHJldHVybiBzdGVwcztcbiAgfVxuXG4gIGdldEZhY3RzKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBmYWN0cyA9IGNvbnRleHQuZ2V0RmFjdHMoKTtcblxuICAgIHJldHVybiBmYWN0cztcbiAgfVxuXG4gIGdldEVxdWl2YWxlbmNlcygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gY29udGV4dC5nZXRFcXVpdmFsZW5jZXMoKTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBnZXREZWNsYXJlZFZhcmlhYmxlcyhkZWNsYXJlZFZhcmlhYmxlcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXREZWNsYXJlZFZhcmlhYmxlcyhkZWNsYXJlZFZhcmlhYmxlcyk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZXM7XG4gIH1cblxuICBnZXREZWNsYXJlZE1ldGF2YXJpYWJsZXMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IGNvbnRleHQuZ2V0RGVjbGFyZWRNZXRhdmFyaWFibGVzKCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRNZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0RmFjdE9yU3VicHJvb2ZzKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBmYWN0T3JTdWJwcm9vZnMgPSBjb250ZXh0LmdldEZhY3RPclN1YnByb29mcygpO1xuXG4gICAgcmV0dXJuIGZhY3RPclN1YnByb29mcztcbiAgfVxuXG4gIGdldFByb3BlcnRpZXMoKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IFtdLFxuICAgICAgICAgIHR5cGVzID0gdGhpcy5nZXRUeXBlcygpO1xuXG4gICAgdHlwZXMuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgdHlwZS5nZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRUeXBlcygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgdHlwZXMgPSBjb250ZXh0LmdldFR5cGVzKCk7XG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cblxuICBmaW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBydWxlID0gY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIGZpbmRBeGlvbUJ5TGluayhsaW5rKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGF4aW9tID0gY29udGV4dC5maW5kQXhpb21CeUxpbmsobGluayk7XG5cbiAgICByZXR1cm4gYXhpb207XG4gIH1cblxuICBmaW5kQ2xhaW1CeVJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgY2xhaW0gPSBjb250ZXh0LmZpbmRDbGFpbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gY2xhaW07XG4gIH1cblxuICBmaW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBmaW5kTGlua0J5TGlua05vZGUobGlua05vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgdGVybSA9IGNvbnRleHQuZmluZExpbmtCeUxpbmtOb2RlKGxpbmtOb2RlKTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9XG5cbiAgZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZyYW1lID0gY29udGV4dC5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGVxdWFsaXR5ID0gY29udGV4dC5maW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKTtcblxuICAgIHJldHVybiBhc3NlcnRpb247XG4gIH1cblxuICBmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfVxuXG4gIGZpbmRQYXJhbWV0ZXJCeVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwYXJhbWV0ZXIgPSBjb250ZXh0LmZpbmRQYXJhbWV0ZXJCeVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9XG5cbiAgZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGFzc3VtcHRpb24gPSBjb250ZXh0LmZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfVxuXG4gIGZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICByZWZlcmVuY2UgPSBjb250ZXh0LmZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gY29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRQcm9jZWR1cmVSZWZlcmVuY2VCeVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBjb250ZXh0LmZpbmRQcm9jZWR1cmVSZWZlcmVuY2VCeVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IGNvbnRleHQuZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb24gPSBjb250ZXh0LmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgY29uc3RyYWludCA9IGNvbnRleHQuZmluZENvbnN0cmFpbnRCeUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlKTtcblxuICAgIHJldHVybiBjb25zdHJhaW50O1xuICB9XG5cbiAgZmluZGFsaWFzZWRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGFsaWFzZWRUeXBlID0gY29udGV4dC5maW5kYWxpYXNlZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICByZXR1cm4gYWxpYXNlZFR5cGU7XG4gIH1cblxuICBmaW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSwgaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSwgaW5jbHVkZURlcGVuZGVuY2llcyk7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGZpbmRUeXBlc0J5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSwgaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgdHlwZXMgPSBjb250ZXh0LmZpbmRUeXBlc0J5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKTtcblxuICAgIHJldHVybiB0eXBlcztcbiAgfVxuXG4gIGZpbmRUeXBlQnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSwgaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UsIGluY2x1ZGVEZXBlbmRlbmNpZXMpO1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbWV0YVR5cGUgPSBjb250ZXh0LmZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSk7XG5cbiAgICByZXR1cm4gbWV0YVR5cGU7XG4gIH1cblxuICBmaW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcHJvY2VkdXJlID0gY29udGV4dC5maW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpO1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZTtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGUgPSBjb250ZXh0LmZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgIHJldHVybiBkZWNsYXJlZFZhcmlhYmxlO1xuICB9XG5cbiAgZmluZERlY2xhcmVkVmFyaWFibGVzQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVzID0gY29udGV4dC5maW5kRGVjbGFyZWRWYXJpYWJsZXNCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGVzO1xuICB9XG5cbiAgZmluZERlY2xhcmVkTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIHJldHVybiBkZWNsYXJlZE1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGlzVGVybVByZXNlbnRCeVRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgdGVybVByZXNlbnQgPSBjb250ZXh0LmlzVGVybVByZXNlbnRCeVRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgIHJldHVybiB0ZXJtUHJlc2VudDtcbiAgfVxuXG4gIGlzTGFiZWxQcmVzZW50QnlMYWJlbE5vZGUobGFiZWxOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGxhYmVsUHJlc2VudCA9IGNvbnRleHQuaXNMYWJlbFByZXNlbnRCeUxhYmVsTm9kZShsYWJlbE5vZGUpO1xuXG4gICAgcmV0dXJuIGxhYmVsUHJlc2VudDtcbiAgfVxuXG4gIGlzRnJhbWVQcmVzZW50QnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZyYW1lUHJlc2VudCA9IGNvbnRleHQuaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgcmV0dXJuIGZyYW1lUHJlc2VudDtcbiAgfVxuXG4gIGlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0eXBlUHJlc2VudCA9IGNvbnRleHQuaXNUeXBlUHJlc2VudEJ5UHJlZml4ZWRUeXBlTmFtZShwcmVmaXhlZFR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSwgaW5jbHVkZURlcGVuZGVuY2llcyk7XG5cbiAgICByZXR1cm4gdHlwZVByZXNlbnQ7XG4gIH1cblxuICBpc0VxdWFsaXR5UHJlc2VudEJ5RXF1YWxpdHlOb2RlKGVxdWFsaXR5Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBlcXVhbGl0eVByZXNlbnQgPSBjb250ZXh0LmlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKTtcblxuICAgIHJldHVybiBlcXVhbGl0eVByZXNlbnQ7XG4gIH1cblxuICBpc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBhc3NlcnRpb25QcmVzZW50ID0gY29udGV4dC5pc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSk7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzU3RhdGVtZW50UHJlc2VudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHN0YXRlbWVudFByZXNlbnQgPSBjb250ZXh0LmlzU3RhdGVtZW50UHJlc2VudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRQcmVzZW50O1xuICB9XG5cbiAgaXNQYXJhbWV0ZXJQcmVzZW50QnlQYXJhbWV0ZXJOb2RlKHBhcmFtZXRlcnROb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHBhcmFtZXRlcnRQcmVzZW50ID0gY29udGV4dC5pc1BhcmFtZXRlclByZXNlbnRCeVBhcmFtZXRlck5vZGUocGFyYW1ldGVydE5vZGUpO1xuXG4gICAgcmV0dXJuIHBhcmFtZXRlcnRQcmVzZW50O1xuICB9XG5cbiAgaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlUHJlc2VudCA9IGNvbnRleHQuaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZVByZXNlbnQ7XG4gIH1cblxuICBpc1Byb2NlZHVyZVByZXNlbnRCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9jZWR1cmVQcmVzZW50ID0gY29udGV4dC5pc1Byb2NlZHVyZVByZXNlbnRCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlUHJlc2VudDtcbiAgfVxuXG4gIGlzUHJvY2VkdXJlUmVmZXJlbmNlUHJlc2VudEJ5UHJvY2VkdXJlUmVmZXJlbmNlTm9kZShwcm9jZWR1cmVSZWZlcmVuY2V0Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2V0UHJlc2VudCA9IGNvbnRleHQuaXNQcm9jZWR1cmVSZWZlcmVuY2VQcmVzZW50QnlQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZXROb2RlKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVSZWZlcmVuY2V0UHJlc2VudDtcbiAgfVxuXG4gIGlzRGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlUHJlc2VudCA9IGNvbnRleHQuaXNEZWNsYXJlZE1ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzUmVmZXJlbmNlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXR2dmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHJlZmVyZW5jZVByZXNlbnQgPSBjb250ZXh0LmlzUmVmZXJlbmNlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXR2dmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiByZWZlcmVuY2VQcmVzZW50O1xuICB9XG5cbiAgaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50ID0gY29udGV4dC5pc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudCA9IGNvbnRleHQuaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc01ldGFMZXZlbCgpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbWV0YUxldmVsID0gY29udGV4dC5pc01ldGFMZXZlbCgpO1xuXG4gICAgcmV0dXJuIG1ldGFMZXZlbDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkNvbnRleHQiLCJDb250ZXh0QmFzZSIsImdldExleGVyIiwiY29udGV4dCIsImdldENvbnRleHQiLCJsZXhlciIsImdldFBhcnNlciIsInBhcnNlciIsImdldEZpbGVQYXRoIiwiZmlsZVBhdGgiLCJnZXRUb2tlbnMiLCJ0b2tlbnMiLCJzZXRUb2tlbnMiLCJnZXRUZXJtcyIsInRlcm1zIiwiZ2V0TGlua3MiLCJsaW5rcyIsImdldEZyYW1lcyIsImZyYW1lcyIsImdldEVxdWFsaXRpZXMiLCJlcXVhbGl0aWVzIiwiZ2V0QXNzZXJ0aW9ucyIsImFzc2VydGlvbnMiLCJnZXRTdGF0ZW1lbnRzIiwic3RhdGVtZW50cyIsImdldFBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzIiwiZ2V0U2lnbmF0dXJlcyIsInNpZ25hdHVyZXMiLCJnZXRSZWZlcmVuY2VzIiwicmVmZXJlbmNlcyIsImdldEFzc3VtcHRpb25zIiwiYXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGVzIiwibWV0YXZhcmlhYmxlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJzdWJzdGl0dXRpb25zIiwiZ2V0UHJvY2VkdXJlUmVmZXJlbmNlcyIsInByb2NlZHVyZVJlZmVyZW5jZXMiLCJnZXREZXJpdmVkU3Vic3RpdHV0aW9ucyIsImRlcml2ZWRTdWJzdGl0dXRpb25zIiwiZ2V0R2VuZXJhdG9ycyIsImluY2x1ZGVSZWxlYXNlIiwiZ2VuZXJhdG9ycyIsImdldFByb2NlZHVyZXMiLCJwcm9jZWR1cmVzIiwiZ2V0Q29tYmluYXRvcnMiLCJjb21iaW5hdG9ycyIsImdldENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9ycyIsImdldENsYWltIiwiY2xhaW0iLCJnZXRTY2hlbWFzIiwic2NoZW1hcyIsImdldFZhcmlhYmxlcyIsIm5lc3RlZCIsInZhcmlhYmxlcyIsImdldFN0ZXBzIiwic3RlcHMiLCJnZXRGYWN0cyIsImZhY3RzIiwiZ2V0RXF1aXZhbGVuY2VzIiwiZXF1aXZhbGVuY2VzIiwiZ2V0RGVjbGFyZWRWYXJpYWJsZXMiLCJkZWNsYXJlZFZhcmlhYmxlcyIsImdldERlY2xhcmVkTWV0YXZhcmlhYmxlcyIsImRlY2xhcmVkTWV0YXZhcmlhYmxlcyIsImdldEZhY3RPclN1YnByb29mcyIsImZhY3RPclN1YnByb29mcyIsImdldFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwidHlwZXMiLCJnZXRUeXBlcyIsImZvckVhY2giLCJ0eXBlIiwiZmluZFJ1bGVCeVJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInJ1bGUiLCJmaW5kQXhpb21CeUxpbmsiLCJsaW5rIiwiYXhpb20iLCJmaW5kQ2xhaW1CeVJlZmVyZW5jZSIsImZpbmRUZXJtQnlUZXJtTm9kZSIsInRlcm1Ob2RlIiwidGVybSIsImZpbmRMaW5rQnlMaW5rTm9kZSIsImxpbmtOb2RlIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmcmFtZU5vZGUiLCJmcmFtZSIsImZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlOb2RlIiwiZXF1YWxpdHkiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbiIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50IiwiZmluZFBhcmFtZXRlckJ5UGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXIiLCJmaW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb24iLCJmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGUiLCJmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbiIsImZpbmRQcm9jZWR1cmVSZWZlcmVuY2VCeVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZSIsImRlcml2ZWRTdWJzdGl0dXRpb24iLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZSIsImZpbmRDb25zdHJhaW50QnlDb25zdHJhaW50Tm9kZSIsImNvbnN0cmFpbnROb2RlIiwiY29uc3RyYWludCIsImZpbmRhbGlhc2VkVHlwZUJ5VHlwZU5hbWUiLCJ0eXBlTmFtZSIsImFsaWFzZWRUeXBlIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwiaW5jbHVkZURlcGVuZGVuY2llcyIsImZpbmRUeXBlc0J5VHlwZU5hbWUiLCJmaW5kVHlwZUJ5UHJlZml4ZWRUeXBlTmFtZSIsInByZWZpeGVkVHlwZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlIiwiZmluZFByb2NlZHVyZUJ5UHJvY2VkdXJlTmFtZSIsInByb2NlZHVyZU5hbWUiLCJwcm9jZWR1cmUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZGVjbGFyZWRWYXJpYWJsZSIsImZpbmREZWNsYXJlZFZhcmlhYmxlc0J5VmFyaWFibGVJZGVudGlmaWVyIiwiZmluZERlY2xhcmVkTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsImRlY2xhcmVkTWV0YXZhcmlhYmxlIiwiaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUiLCJ0ZXJtUHJlc2VudCIsImlzTGFiZWxQcmVzZW50QnlMYWJlbE5vZGUiLCJsYWJlbE5vZGUiLCJsYWJlbFByZXNlbnQiLCJpc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlIiwiZnJhbWVQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5UHJlZml4ZWRUeXBlTmFtZSIsInR5cGVQcmVzZW50IiwiaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5UHJlc2VudCIsImlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvblByZXNlbnQiLCJpc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRQcmVzZW50IiwiaXNQYXJhbWV0ZXJQcmVzZW50QnlQYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVydE5vZGUiLCJwYXJhbWV0ZXJ0UHJlc2VudCIsImlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZVByZXNlbnQiLCJpc1Byb2NlZHVyZVByZXNlbnRCeVByb2NlZHVyZU5hbWUiLCJwcm9jZWR1cmVQcmVzZW50IiwiaXNQcm9jZWR1cmVSZWZlcmVuY2VQcmVzZW50QnlQcm9jZWR1cmVSZWZlcmVuY2VOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNldE5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2V0UHJlc2VudCIsImlzRGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lIiwiaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0dnZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZVByZXNlbnQiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZSIsImlzTWV0YUxldmVsIiwibWV0YUxldmVsIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFJQTs7O2VBQXFCQTs7O2dDQUZrQjtBQUV4QixNQUFNQSxnQkFBZ0JDLHVCQUFXO0lBQzlDQyxXQUFXO1FBQ1QsTUFBTUMsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJDLFFBQVFGLFFBQVFELFFBQVE7UUFFOUIsT0FBT0c7SUFDVDtJQUVBQyxZQUFZO1FBQ1YsTUFBTUgsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJHLFNBQVNKLFFBQVFHLFNBQVM7UUFFaEMsT0FBT0M7SUFDVDtJQUVBQyxjQUFjO1FBQ1osTUFBTUwsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJLLFdBQVdOLFFBQVFLLFdBQVc7UUFFcEMsT0FBT0M7SUFDVDtJQUVBQyxZQUFZO1FBQ1YsTUFBTVAsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJPLFNBQVNSLFFBQVFPLFNBQVM7UUFFaEMsT0FBT0M7SUFDVDtJQUVBQyxVQUFVRCxNQUFNLEVBQUU7UUFDaEIsTUFBTVIsVUFBVSxJQUFJLENBQUNDLFVBQVU7UUFFL0JELFFBQVFTLFNBQVMsQ0FBQ0Q7SUFDcEI7SUFFQUUsU0FBU0MsUUFBUSxFQUFFLEVBQUU7UUFDbkIsTUFBTVgsVUFBVSxJQUFJLENBQUNDLFVBQVU7UUFFL0JELFFBQVFV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
|
|
357
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb250ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb250ZXh0IGFzIENvbnRleHRCYXNlIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZXh0IGV4dGVuZHMgQ29udGV4dEJhc2Uge1xuICBnZXRMZXhlcigpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbGV4ZXIgPSBjb250ZXh0LmdldExleGVyKCk7XG5cbiAgICByZXR1cm4gbGV4ZXI7XG4gIH1cblxuICBnZXRQYXJzZXIoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHBhcnNlciA9IGNvbnRleHQuZ2V0UGFyc2VyKCk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgZ2V0RmlsZVBhdGgoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZpbGVQYXRoID0gY29udGV4dC5nZXRGaWxlUGF0aCgpO1xuXG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgZ2V0VG9rZW5zKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0b2tlbnMgPSBjb250ZXh0LmdldFRva2VucygpO1xuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIHNldFRva2Vucyh0b2tlbnMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LnNldFRva2Vucyh0b2tlbnMpO1xuICB9XG5cbiAgZ2V0VGVybXModGVybXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0VGVybXModGVybXMpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0TGlua3MobGlua3MgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0TGlua3MobGlua3MpO1xuXG4gICAgcmV0dXJuIGxpbmtzO1xuICB9XG5cbiAgZ2V0RnJhbWVzKGZyYW1lcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzKTtcblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0QXNzZXJ0aW9ucyhhc3NlcnRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldFN0YXRlbWVudHMoc3RhdGVtZW50cyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0UGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcblxuICAgIHJldHVybiBwYXJhbWV0ZXJzO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlcyhzaWduYXR1cmVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldFNpZ25hdHVyZXMoc2lnbmF0dXJlcyk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlcztcbiAgfVxuXG4gIGdldFJlZmVyZW5jZXMocmVmZXJlbmNlcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldFByb2NlZHVyZVJlZmVyZW5jZXMocHJvY2VkdXJlUmVmZXJlbmNlcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRQcm9jZWR1cmVSZWZlcmVuY2VzKHByb2NlZHVyZVJlZmVyZW5jZXMpO1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRHZW5lcmF0b3JzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBnZW5lcmF0b3JzID0gY29udGV4dC5nZXRHZW5lcmF0b3JzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBnZW5lcmF0b3JzO1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcHJvY2VkdXJlcyA9IGNvbnRleHQuZ2V0UHJvY2VkdXJlcyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlcztcbiAgfVxuXG4gIGdldENvbWJpbmF0b3JzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBjb21iaW5hdG9ycyA9IGNvbnRleHQuZ2V0Q29tYmluYXRvcnMoaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgcmV0dXJuIGNvbWJpbmF0b3JzO1xuICB9XG5cbiAgZ2V0Q29uc3RydWN0b3JzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBjb25zdHJ1Y3RvcnMgPSBjb250ZXh0LmdldENvbnN0cnVjdG9ycyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3JzO1xuICB9XG5cbiAgZ2V0Q2xhaW0oaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGNsYWltID0gY29udGV4dC5nZXRDbGFpbShpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICByZXR1cm4gY2xhaW07XG4gIH1cblxuICBnZXRTY2hlbWFzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBzY2hlbWFzO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVzKG5lc3RlZCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB2YXJpYWJsZXMgPSBjb250ZXh0LmdldFZhcmlhYmxlcyhuZXN0ZWQpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFN0ZXBzKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdGVwcyA9IGNvbnRleHQuZ2V0U3RlcHMoKTtcblxuICAgIHJldHVybiBzdGVwcztcbiAgfVxuXG4gIGdldEZhY3RzKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBmYWN0cyA9IGNvbnRleHQuZ2V0RmFjdHMoKTtcblxuICAgIHJldHVybiBmYWN0cztcbiAgfVxuXG4gIGdldEVxdWl2YWxlbmNlcygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gY29udGV4dC5nZXRFcXVpdmFsZW5jZXMoKTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBnZXREZWNsYXJlZFZhcmlhYmxlcyhkZWNsYXJlZFZhcmlhYmxlcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXREZWNsYXJlZFZhcmlhYmxlcyhkZWNsYXJlZFZhcmlhYmxlcyk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZXM7XG4gIH1cblxuICBnZXREZWNsYXJlZE1ldGF2YXJpYWJsZXMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IGNvbnRleHQuZ2V0RGVjbGFyZWRNZXRhdmFyaWFibGVzKCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRNZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0RmFjdE9yU3VicHJvb2ZzKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBmYWN0T3JTdWJwcm9vZnMgPSBjb250ZXh0LmdldEZhY3RPclN1YnByb29mcygpO1xuXG4gICAgcmV0dXJuIGZhY3RPclN1YnByb29mcztcbiAgfVxuXG4gIGdldFByb3BlcnRpZXMoKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IFtdLFxuICAgICAgICAgIHR5cGVzID0gdGhpcy5nZXRUeXBlcygpO1xuXG4gICAgdHlwZXMuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgdHlwZS5nZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRUeXBlcygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgdHlwZXMgPSBjb250ZXh0LmdldFR5cGVzKCk7XG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cblxuICBmaW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBydWxlID0gY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIGZpbmRBeGlvbUJ5TGluayhsaW5rKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGF4aW9tID0gY29udGV4dC5maW5kQXhpb21CeUxpbmsobGluayk7XG5cbiAgICByZXR1cm4gYXhpb207XG4gIH1cblxuICBmaW5kQ2xhaW1CeVJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgY2xhaW0gPSBjb250ZXh0LmZpbmRDbGFpbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gY2xhaW07XG4gIH1cblxuICBmaW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBmaW5kTGlua0J5TGlua05vZGUobGlua05vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgdGVybSA9IGNvbnRleHQuZmluZExpbmtCeUxpbmtOb2RlKGxpbmtOb2RlKTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9XG5cbiAgZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZyYW1lID0gY29udGV4dC5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGVxdWFsaXR5ID0gY29udGV4dC5maW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKTtcblxuICAgIHJldHVybiBhc3NlcnRpb247XG4gIH1cblxuICBmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfVxuXG4gIGZpbmRQYXJhbWV0ZXJCeVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwYXJhbWV0ZXIgPSBjb250ZXh0LmZpbmRQYXJhbWV0ZXJCeVBhcmFtZXRlck5vZGUocGFyYW1ldGVyTm9kZSk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVyO1xuICB9XG5cbiAgZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlKGFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGFzc3VtcHRpb24gPSBjb250ZXh0LmZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgfVxuXG4gIGZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICByZWZlcmVuY2UgPSBjb250ZXh0LmZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gY29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRQcm9jZWR1cmVSZWZlcmVuY2VCeVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBjb250ZXh0LmZpbmRQcm9jZWR1cmVSZWZlcmVuY2VCeVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNlTm9kZSk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlUmVmZXJlbmNlO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IGNvbnRleHQuZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb24gPSBjb250ZXh0LmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgY29uc3RyYWludCA9IGNvbnRleHQuZmluZENvbnN0cmFpbnRCeUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlKTtcblxuICAgIHJldHVybiBjb25zdHJhaW50O1xuICB9XG5cbiAgZmluZGFsaWFzZWRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGFsaWFzZWRUeXBlID0gY29udGV4dC5maW5kYWxpYXNlZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICByZXR1cm4gYWxpYXNlZFR5cGU7XG4gIH1cblxuICBmaW5kVHlwZUJ5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSwgaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSwgaW5jbHVkZURlcGVuZGVuY2llcyk7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGZpbmRUeXBlc0J5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSwgaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgdHlwZXMgPSBjb250ZXh0LmZpbmRUeXBlc0J5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKTtcblxuICAgIHJldHVybiB0eXBlcztcbiAgfVxuXG4gIGZpbmRUeXBlQWxpYXNCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgdHlwZUFsaWFzID0gY29udGV4dC5maW5kVHlwZUFsaWFzQnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgcmV0dXJuIHR5cGVBbGlhcztcbiAgfVxuXG4gIGZpbmRUeXBlQnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSwgaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UsIGluY2x1ZGVEZXBlbmRlbmNpZXMpO1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBmaW5kVHlwZXNCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0eXBlcyA9IGNvbnRleHQuZmluZFR5cGVzQnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKTtcblxuICAgIHJldHVybiB0eXBlcztcbiAgfVxuXG4gIGZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBtZXRhVHlwZSA9IGNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKTtcblxuICAgIHJldHVybiBtZXRhVHlwZTtcbiAgfVxuXG4gIGZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9jZWR1cmUgPSBjb250ZXh0LmZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSk7XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlO1xuICB9XG5cbiAgZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZSA9IGNvbnRleHQuZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkVmFyaWFibGU7XG4gIH1cblxuICBmaW5kRGVjbGFyZWRWYXJpYWJsZXNCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBjb250ZXh0LmZpbmREZWNsYXJlZFZhcmlhYmxlc0J5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcik7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZXM7XG4gIH1cblxuICBmaW5kRGVjbGFyZWRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZERlY2xhcmVkTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkTWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICB0ZXJtUHJlc2VudCA9IGNvbnRleHQuaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgcmV0dXJuIHRlcm1QcmVzZW50O1xuICB9XG5cbiAgaXNMYWJlbFByZXNlbnRCeUxhYmVsTm9kZShsYWJlbE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbGFiZWxQcmVzZW50ID0gY29udGV4dC5pc0xhYmVsUHJlc2VudEJ5TGFiZWxOb2RlKGxhYmVsTm9kZSk7XG5cbiAgICByZXR1cm4gbGFiZWxQcmVzZW50O1xuICB9XG5cbiAgaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZnJhbWVQcmVzZW50ID0gY29udGV4dC5pc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlKGZyYW1lTm9kZSk7XG5cbiAgICByZXR1cm4gZnJhbWVQcmVzZW50O1xuICB9XG5cbiAgaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSwgaW5jbHVkZURlcGVuZGVuY2llcyA9IHRydWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICB0eXBlUHJlc2VudCA9IGNvbnRleHQuaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKTtcblxuICAgIHJldHVybiB0eXBlUHJlc2VudDtcbiAgfVxuXG4gIGlzVHlwZUFsaWFzUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0eXBlQWxpYXNQcmVzZW50ID0gY29udGV4dC5pc1R5cGVBbGlhc1ByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICByZXR1cm4gdHlwZUFsaWFzUHJlc2VudDtcbiAgfVxuXG4gIGlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UgPSB0cnVlLCBpbmNsdWRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgIHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKTtcblxuICAgIHJldHVybiB0eXBlUHJlc2VudDtcbiAgfVxuXG4gIGlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGVxdWFsaXR5UHJlc2VudCA9IGNvbnRleHQuaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5UHJlc2VudDtcbiAgfVxuXG4gIGlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGFzc2VydGlvblByZXNlbnQgPSBjb250ZXh0LmlzQXNzZXJ0aW9uUHJlc2VudEJ5QXNzZXJ0aW9uTm9kZShhc3NlcnRpb25Ob2RlKTtcblxuICAgIHJldHVybiBhc3NlcnRpb25QcmVzZW50O1xuICB9XG5cbiAgaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3RhdGVtZW50UHJlc2VudCA9IGNvbnRleHQuaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudFByZXNlbnQ7XG4gIH1cblxuICBpc1BhcmFtZXRlclByZXNlbnRCeVBhcmFtZXRlck5vZGUocGFyYW1ldGVydE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcGFyYW1ldGVydFByZXNlbnQgPSBjb250ZXh0LmlzUGFyYW1ldGVyUHJlc2VudEJ5UGFyYW1ldGVyTm9kZShwYXJhbWV0ZXJ0Tm9kZSk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVydFByZXNlbnQ7XG4gIH1cblxuICBpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVQcmVzZW50ID0gY29udGV4dC5pc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByb2NlZHVyZVByZXNlbnQgPSBjb250ZXh0LmlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVQcmVzZW50O1xuICB9XG5cbiAgaXNQcm9jZWR1cmVSZWZlcmVuY2VQcmVzZW50QnlQcm9jZWR1cmVSZWZlcmVuY2VOb2RlKHByb2NlZHVyZVJlZmVyZW5jZXROb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZXRQcmVzZW50ID0gY29udGV4dC5pc1Byb2NlZHVyZVJlZmVyZW5jZVByZXNlbnRCeVByb2NlZHVyZVJlZmVyZW5jZU5vZGUocHJvY2VkdXJlUmVmZXJlbmNldE5vZGUpO1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZVJlZmVyZW5jZXRQcmVzZW50O1xuICB9XG5cbiAgaXNEZWNsYXJlZE1ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVQcmVzZW50ID0gY29udGV4dC5pc0RlY2xhcmVkTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldHZ2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcmVmZXJlbmNlUHJlc2VudCA9IGNvbnRleHQuaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldHZ2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZVByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQgPSBjb250ZXh0LmlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50ID0gY29udGV4dC5pc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzTWV0YUxldmVsKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBtZXRhTGV2ZWwgPSBjb250ZXh0LmlzTWV0YUxldmVsKCk7XG5cbiAgICByZXR1cm4gbWV0YUxldmVsO1xuICB9XG59XG4iXSwibmFtZXMiOlsiQ29udGV4dCIsIkNvbnRleHRCYXNlIiwiZ2V0TGV4ZXIiLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsImxleGVyIiwiZ2V0UGFyc2VyIiwicGFyc2VyIiwiZ2V0RmlsZVBhdGgiLCJmaWxlUGF0aCIsImdldFRva2VucyIsInRva2VucyIsInNldFRva2VucyIsImdldFRlcm1zIiwidGVybXMiLCJnZXRMaW5rcyIsImxpbmtzIiwiZ2V0RnJhbWVzIiwiZnJhbWVzIiwiZ2V0RXF1YWxpdGllcyIsImVxdWFsaXRpZXMiLCJnZXRBc3NlcnRpb25zIiwiYXNzZXJ0aW9ucyIsImdldFN0YXRlbWVudHMiLCJzdGF0ZW1lbnRzIiwiZ2V0UGFyYW1ldGVycyIsInBhcmFtZXRlcnMiLCJnZXRTaWduYXR1cmVzIiwic2lnbmF0dXJlcyIsImdldFJlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwiZ2V0QXNzdW1wdGlvbnMiLCJhc3N1bXB0aW9ucyIsImdldE1ldGF2YXJpYWJsZXMiLCJtZXRhdmFyaWFibGVzIiwiZ2V0U3Vic3RpdHV0aW9ucyIsInN1YnN0aXR1dGlvbnMiLCJnZXRQcm9jZWR1cmVSZWZlcmVuY2VzIiwicHJvY2VkdXJlUmVmZXJlbmNlcyIsImdldERlcml2ZWRTdWJzdGl0dXRpb25zIiwiZGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJnZXRHZW5lcmF0b3JzIiwiaW5jbHVkZVJlbGVhc2UiLCJnZW5lcmF0b3JzIiwiZ2V0UHJvY2VkdXJlcyIsInByb2NlZHVyZXMiLCJnZXRDb21iaW5hdG9ycyIsImNvbWJpbmF0b3JzIiwiZ2V0Q29uc3RydWN0b3JzIiwiY29uc3RydWN0b3JzIiwiZ2V0Q2xhaW0iLCJjbGFpbSIsImdldFNjaGVtYXMiLCJzY2hlbWFzIiwiZ2V0VmFyaWFibGVzIiwibmVzdGVkIiwidmFyaWFibGVzIiwiZ2V0U3RlcHMiLCJzdGVwcyIsImdldEZhY3RzIiwiZmFjdHMiLCJnZXRFcXVpdmFsZW5jZXMiLCJlcXVpdmFsZW5jZXMiLCJnZXREZWNsYXJlZFZhcmlhYmxlcyIsImRlY2xhcmVkVmFyaWFibGVzIiwiZ2V0RGVjbGFyZWRNZXRhdmFyaWFibGVzIiwiZGVjbGFyZWRNZXRhdmFyaWFibGVzIiwiZ2V0RmFjdE9yU3VicHJvb2ZzIiwiZmFjdE9yU3VicHJvb2ZzIiwiZ2V0UHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJ0eXBlcyIsImdldFR5cGVzIiwiZm9yRWFjaCIsInR5cGUiLCJmaW5kUnVsZUJ5UmVmZXJlbmNlIiwicmVmZXJlbmNlIiwicnVsZSIsImZpbmRBeGlvbUJ5TGluayIsImxpbmsiLCJheGlvbSIsImZpbmRDbGFpbUJ5UmVmZXJlbmNlIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidGVybU5vZGUiLCJ0ZXJtIiwiZmluZExpbmtCeUxpbmtOb2RlIiwibGlua05vZGUiLCJmaW5kRnJhbWVCeUZyYW1lTm9kZSIsImZyYW1lTm9kZSIsImZyYW1lIiwiZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eU5vZGUiLCJlcXVhbGl0eSIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnQiLCJmaW5kUGFyYW1ldGVyQnlQYXJhbWV0ZXJOb2RlIiwicGFyYW1ldGVyTm9kZSIsInBhcmFtZXRlciIsImZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbiIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZSIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uIiwiZmluZFByb2NlZHVyZVJlZmVyZW5jZUJ5UHJvY2VkdXJlUmVmZXJlbmNlTm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvbiIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlIiwiZmluZENvbnN0cmFpbnRCeUNvbnN0cmFpbnROb2RlIiwiY29uc3RyYWludE5vZGUiLCJjb25zdHJhaW50IiwiZmluZGFsaWFzZWRUeXBlQnlUeXBlTmFtZSIsInR5cGVOYW1lIiwiYWxpYXNlZFR5cGUiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJpbmNsdWRlRGVwZW5kZW5jaWVzIiwiZmluZFR5cGVzQnlUeXBlTmFtZSIsImZpbmRUeXBlQWxpYXNCeVR5cGVOYW1lIiwidHlwZUFsaWFzIiwiZmluZFR5cGVCeVByZWZpeGVkVHlwZU5hbWUiLCJwcmVmaXhlZFR5cGVOYW1lIiwiZmluZFR5cGVzQnlQcmVmaXhlZFR5cGVOYW1lIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiLCJtZXRhVHlwZU5hbWUiLCJtZXRhVHlwZSIsImZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUiLCJwcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlIiwiZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlSWRlbnRpZmllciIsImRlY2xhcmVkVmFyaWFibGUiLCJmaW5kRGVjbGFyZWRWYXJpYWJsZXNCeVZhcmlhYmxlSWRlbnRpZmllciIsImZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZSIsImlzVGVybVByZXNlbnRCeVRlcm1Ob2RlIiwidGVybVByZXNlbnQiLCJpc0xhYmVsUHJlc2VudEJ5TGFiZWxOb2RlIiwibGFiZWxOb2RlIiwibGFiZWxQcmVzZW50IiwiaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZSIsImZyYW1lUHJlc2VudCIsImlzVHlwZVByZXNlbnRCeVR5cGVOYW1lIiwidHlwZVByZXNlbnQiLCJpc1R5cGVBbGlhc1ByZXNlbnRCeVR5cGVOYW1lIiwidHlwZUFsaWFzUHJlc2VudCIsImlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUiLCJpc0VxdWFsaXR5UHJlc2VudEJ5RXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlQcmVzZW50IiwiaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uUHJlc2VudCIsImlzU3RhdGVtZW50UHJlc2VudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudFByZXNlbnQiLCJpc1BhcmFtZXRlclByZXNlbnRCeVBhcmFtZXRlck5vZGUiLCJwYXJhbWV0ZXJ0Tm9kZSIsInBhcmFtZXRlcnRQcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlUHJlc2VudCIsImlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZSIsInByb2NlZHVyZVByZXNlbnQiLCJpc1Byb2NlZHVyZVJlZmVyZW5jZVByZXNlbnRCeVByb2NlZHVyZVJlZmVyZW5jZU5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2V0Tm9kZSIsInByb2NlZHVyZVJlZmVyZW5jZXRQcmVzZW50IiwiaXNEZWNsYXJlZE1ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUiLCJpc1JlZmVyZW5jZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXR2dmFyaWFibGVOb2RlIiwicmVmZXJlbmNlUHJlc2VudCIsImlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudCIsImlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlIiwiaXNNZXRhTGV2ZWwiLCJtZXRhTGV2ZWwiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQUlBOzs7ZUFBcUJBOzs7Z0NBRmtCO0FBRXhCLE1BQU1BLGdCQUFnQkMsdUJBQVc7SUFDOUNDLFdBQVc7UUFDVCxNQUFNQyxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QkMsUUFBUUYsUUFBUUQsUUFBUTtRQUU5QixPQUFPRztJQUNUO0lBRUFDLFlBQVk7UUFDVixNQUFNSCxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QkcsU0FBU0osUUFBUUcsU0FBUztRQUVoQyxPQUFPQztJQUNUO0lBRUFDLGNBQWM7UUFDWixNQUFNTCxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QkssV0FBV04sUUFBUUssV0FBVztRQUVwQyxPQUFPQztJQUNU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
|